diff --git a/.editorconfig b/.editorconfig old mode 100644 new mode 100755 diff --git a/.env.example b/.env.example old mode 100644 new mode 100755 index f897c91..c3e43fb --- a/.env.example +++ b/.env.example @@ -4,13 +4,27 @@ APP_KEY= APP_DEBUG=true APP_URL=http://localhost APP_LOGO="https://www.raspberrypi.org/app/uploads/2020/05/Raspberry-Pi-OS-downloads-image-150x150-1.png" +APP_AUTH_BANNER="" APP_SITEHOMEPAGE="" -# This can be your main homepage, other than this site itself +API_PREFIX="api" -LOG_CHANNEL=stack +# The auth banner is a relative path + +# Hides IP addresses +HIDE_IPS=false + +# Disables certain features for security purposes while running an open authentication system +# Enable only for demonostration purposes +DEMO_MODE=false + +# Forces ssl connections even if the environment is set to "local". +# Void if env is production. +NONPROD_FORCE_SECURE=false + +LOG_CHANNEL=daily DB_CONNECTION=mysql -DB_HOST=127.0.0.1 +DB_HOST=z DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root @@ -29,7 +43,7 @@ IPGEO_API_URL="https://api.ipgeolocation.io/ipgeo" ARCANEDEV_LOGVIEWER_MIDDLEWARE=web,auth,can:admin.maintenance.logs.view -RELEASE=staffmanagement@0.6.1 +RELEASE=0.6.2 SLACK_INTEGRATION_WEBHOOK= @@ -62,6 +76,10 @@ PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 + +BEAMS_INSTANCE_ID= +BEAMS_SECRET_KEY= + MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/.gitattributes b/.gitattributes old mode 100644 new mode 100755 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md old mode 100644 new mode 100755 diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.idea/hrm-mcserver.iml b/.idea/hrm-mcserver.iml deleted file mode 100644 index bb20d72..0000000 --- a/.idea/hrm-mcserver.iml +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/laravel-plugin.xml b/.idea/laravel-plugin.xml deleted file mode 100644 index 5aae25d..0000000 --- a/.idea/laravel-plugin.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 28a804d..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 1a22200..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml deleted file mode 100644 index afaedbf..0000000 --- a/.idea/php.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml deleted file mode 100644 index 4f8104c..0000000 --- a/.idea/phpunit.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.phive/phars.xml b/.phive/phars.xml deleted file mode 100644 index c7b7b0f..0000000 --- a/.phive/phars.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/.styleci.yml b/.styleci.yml old mode 100644 new mode 100755 index 1db61d9..d534ee6 --- a/.styleci.yml +++ b/.styleci.yml @@ -1,13 +1,13 @@ -php: - preset: laravel - disabled: - - unused_use - finder: - not-name: - - index.php - - server.php -js: - finder: - not-name: - - webpack.mix.js -css: true +risky: false +version: 7 +preset: recommended +finder: + exclude: + - "modules" + - "node_modules" + - "storage" + - "vendor" + name: "*.php" + not-name: + - "*.blade.php" + - "_ide_helper.php" diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 612eaac..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Listen for XDebug", - "type": "php", - "request": "launch", - "port": 9000 - }, - { - "name": "Launch currently open script", - "type": "php", - "request": "launch", - "program": "${file}", - "cwd": "${fileDirname}", - "port": 9000 - } - ] -} \ No newline at end of file diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100755 index 0000000..37c210a --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @miguel456 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md old mode 100644 new mode 100755 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/Procfile b/Procfile old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 50e85d4..582845d --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# RB Recruiter v 0.6.2 [![Crowdin](https://badges.crowdin.net/raspberry-staff-manager/localized.svg)](https://crowdin.com/project/raspberry-staff-manager) +# RB Recruiter v 0.7.1 [![Crowdin](https://badges.crowdin.net/raspberry-staff-manager/localized.svg)](https://crowdin.com/project/raspberry-staff-manager) [![Better Uptime Badge](https://betteruptime.com/status-badges/v1/monitor/9n53.svg)](https://betteruptime.com/?utm_source=status_badge) ## The quick and pain-free form management solution for communities Have you ever gotten tired of managing your Minecraft server/network's applications through Discord (or anything else) and having to scroll through hundreds of new messages just to find that one applicant's username? @@ -24,7 +24,7 @@ Wish you had a better application managemet strategy? Well, then Raspberry Teams - Termination - Has a staff member met their untimely demise? Terminate them. This will strip their permissions and roles. - Controllable permissions - Every user has permissions! Control who has access to what (You can skip the application process and add staff members directly here). - Ban system - Having trouble with pesky spammers? Ban them! This will publicly shame their profile and keep them from signing up or logging in. - - Notifications: Notifies slack and email primarily + - Notifications: Notifies slack and email primarily (Slack notifications currently broken) And many more features! @@ -42,11 +42,13 @@ Many other features are currently planned for this app, such as: # Technical overview Tech stack: - - [Laravel 7](https://laravel.com/) - - Eloquent ORM - - AdminLTE / Bootstrap 4 - - jQuery / Plain Javascript - - vueJS (in the future) + - [Laravel 8](https://laravel.com/) + - [Eloquent ORM](https://laravel.com/docs/5.0/eloquent) + - [AdminLTE](https://adminlte.io/) / + - [Bootstrap 4](https://getbootstrap.com/docs/4.0/getting-started/introduction/) + - [jQuery](https://jquery.com/) + - [Bootstrap 4](https://getbootstrap.com/) + - [Icons by FontAwesome](https://fontawesome.com/) # Stability @@ -63,13 +65,12 @@ Tech stack: # Software Requirements - ``composer`` (min version: 1.8.4) - ``npm`` (tested w/ v 5.8.0) - - ``php`` (required PHP 7 or newer - lower versions unsupported!) + - ``php`` (required PHP 8 or newer - lower versions unsupported!) # PHP Extension Requirements - JSON - Curl (highly recommended) - - Image Magick (imagick) for 2FA support # Installation diff --git a/SECURITY.md b/SECURITY.md old mode 100644 new mode 100755 index b900798..17c6d58 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,6 +1,6 @@ # Security Policy -## Supported Versions +## Supported Software Versions The following versions are currently supported: @@ -8,12 +8,107 @@ The following versions are currently supported: | ------- | ------------------ | | 0.1.x | :x: | | 0.5.x | :x: | -| 0.6.x | :white_check_mark: | +| 0.6.x | :x: | +| 0.7.0 | :x: | +| 0.7.1 | :white_check_mark: | + +## Supported PHP Versions + +| Version | Supported | +| ------- | ------------------ | +| 5.x | :x: | +| 7.0 | :x: | +| 7.1 | :x: | +| 7.2 | :x: | +| 7.3 | :x: | +| 7.4 | :white_check_mark: | +| 8.0 | :white_check_mark: | + + +## Supported Operating Systems + +| Name | Supported | +| ------- | ------------------ | +| Windows NT | :x: | +| MacOS | Docker only | +| Ubuntu 22.10 | :white_check_mark: | +| Other Linux distros | :white_check_mark: | + ## Reporting a Vulnerability -To securely report a vulnerability, you may send me an email directly containing the details of said vulnerability: ``me@nogueira.codes``. +If you found a critical vunlerability, please do not use the Issues tab to report it. -You may optionally encrypt your message with my [public PGP key](http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x48DF709E7405702B). +Instead, please forward an encrypted vulnerability report to ``security@webvokestudio.pt``, so that we have time to open a security advisory and work on a fix. +Unencrypted reports will be ignored. -Use this free [online encryption tool](https://www.igolder.com/pgp/encryption/) if you don't know how to use PGP on your desktop. +Use this public PGP key to encrypt your message: + + -----BEGIN PGP PUBLIC KEY BLOCK----- + + mQINBF/NUL8BEAC7njBq5IbB80qS8rGaAw+DM9wCTiZBiZu0oLXh6oW/E6NOKX5D + Gd8tcW2auqcO1syBUnla4E8t+3fuJQtee3lgszLKRKACYOqZPIYNBUHbw3VBNhNZ + WESbKh9JxlLJql6fHMfpr3wcTCxLwFGcRln1EPKAMBsxB0YJDeorXuoCTY4+NhGM + 8O2aS8Tbq+HxSkhz1p0DdOuaM9C/kQJkOth6sdsBiBE/OsyzPK/yti91WM9fB/Fg + QuYyzFD5OL6H+PKPas/4ndIfXSnSCeqm4gScUBeLReeqQd0o96ALSnOxMz9Qit4j + BYhKxfZnAFiKWeBPZEJY12cu2gv3plkdE89mqJveRUCQ+dfVX471iCW+/YSRGU83 + 9PG2a1Dalsx46lScHm2RlrXFhUhpVND0y7VBHpKiUJCoykhGbIAr429dITBw7jGa + FAKpJgm2wWRAHeokrQ9l+NTUosTwRoYeWF1tKElKT1sjF5zuWFxOekzGXBtzcSUH + HQrUfzOQTMUciSZ4CjZjDNL1yYEwUOTr4IzNOj/jmKCo/Dbsix9V1LbTPjK8vP4l + jwLOL2dG0jpQRd5FRBWPukpF6LS25vQv0bMRZdsCfh/eOlMldfdiGpx8fN6dkxvm + H0TBdZklp3U91u+ooVIeF3Q1NWmB/tvNJOfFnerHOpDBTy/q5fpT6QaMkwARAQAB + tH5NaWd1ZWwgTm9ndWVpcmEgKElnbm9yZSBhbGwgbXkgb3RoZXIga2V5cyB1bmRl + ciBteSBuYW1lIGFuZCBlbWFpbCAobG9zdCB0aGUgcHJpdmF0ZSBrZXlzKS4pIDxt + aWd1ZWw0NTZAc3BhY2VqZXdlbC1ob3N0aW5nLmNvbT6JAlQEEwEKAD4WIQStTNAz + Se1uoPMcdjTkUwCM6Yt4igUCX81QvwIbLwUJC0c1AAULCQgHAgYVCgkICwIEFgID + AQIeAQIXgAAKCRDkUwCM6Yt4ikBCD/9sPlUItGT1tlFgdSdbLdPsdcb/lpK269zH + 0OoMSSKGKNL6RAY2R6++qdBRCC9jdzQFtJO7epYB/mWXnZqYcWemTwaKEW5eHr5E + BFQuSiRREbNLkzCAWWqqaQnCuve4q9DXsWd5NiHcrmNgnSY6Zk6y+GdpQNyzEshf + aCcnkaySIFgV33DDsa6s4zUDZulQbmeg1mfwyP0tv+CZ6Bbk72DxX/A10x00ddv1 + arGuLfctIydEcG7mAeAZBeCJEucpFuQbaWybZS2RX3/e6LCOWnt/ZHjqcFln36yq + 9GIx28BnElkpxwDV66R0EUpm3cxZ3Kv7bDqm5E2ZzCybOF+a8y3d15qIyrSHvGdr + skVBmRi2zLxCYBEcTocHH0rG6UNTk55wvqMepAnnp12XMQoqCrmw9zUv92qAv+01 + lMv9H1AM8jUdkk5H+SgZYFcPL5/4cBEc/ylRKIuiNcKZAfppjdVnslXsgahmQSep + PgcWPwwOujqYLfn/FPKRQuH1GUuNv0UzO6KUQy0gWkDYKrnks4n6lNWXiZY/HU+W + KCgSWRCICHW8JJ8dg97vk6IurtqpG/LUMb/E3mAzPNIyuhK2r1wGOsb83iVIvF5M + 3KyAFhaqiwnudt7UXYN3A1we+rm/y/nBNx0GUuC8VJaLz1p9zqEiT1an0vivC92x + m/jSicdIprkCDQRfzVC/ARAAq/tqXnL7JSt3ZaePLP86hE0gOK8mY1F5X9sRQCDT + adqyfnwNIzXGhUFfSdIO2LKnrdZUFXZG4YeK6JG0fu8KdELs+2UlIx0KAokrwfK3 + zWHITN6+lvSz3ubVQMYCEgUK9eEPwa/XnhL4vEd61kMdM5OxYsBXQYlraWLJ0rOf + ANQEXb0vm0c4RsO8IubOJT7jxPkgfLesIB7i3O3/Hptc54WHs97p22/Y6oNk42UV + cJB/k3kqTCzfBzDcpmF9RyxpfEDUJAn9QWcxH2UC3kHpr9N5Hfv3Kh3bjaGukzn4 + sO+fmukqBTsW7cIMO7slbcsCVJN7QC2GcocgjGHXWVF1Gg234exTX7aDBGNq7TeY + h1N/3lVeZom6ANtA3aOO55NuaXI9IGiW7lNnYcTJkTu3eUnfTpg/FkqdSzOpBOFZ + Gyltjf8pMK0vQXbajov5j/wE/bz2eOPKwyJc0u3B/JqfE/EbPnx5dng7/mgv+x7u + GSMOvovc4SrSZoDp5IWDk1L5s2CHNB88rziPFLB0Tkr6N9MnEWhv4wL7wfNdQ00s + xJpGlrc0nSdGUmHFCExRUb7VIJ0Yfjsj3Xy4PCBXsDTYWusAbp+rbFycRMlGiANj + cQYGbEYMyUqL2upg7kKzrFW45TyGpkE1QHkm0Od7JxGqgfiie+tcG+EUQKBMJsIN + tLMAEQEAAYkEcgQYAQoAJhYhBK1M0DNJ7W6g8xx2NORTAIzpi3iKBQJfzVC/Ahsu + BQkLRzUAAkAJEORTAIzpi3iKwXQgBBkBCgAdFiEEqncyNKRovrMCcN8NLPYbglMW + xqAFAl/NUL8ACgkQLPYbglMWxqBmHhAApxjJmpdifzI23AdRAcO4oChE6ho0a85+ + nGXr0qPMySb6/1GiYML3WKNzK02wS7V8A1VlnYvdd3SdmJh9qhH4NAgs4SXxpenp + hEw48M+h7LHJlqkrftHC540eyNlyVyN31kNhibhFrF5eZ9BcIwERrAR4MClG1gwI + bJqiAk5wlYP6YmJHVI+4DKjN+dMCn301hXUCTPoAdHfKTztMe9qhmbgZcyeOkZOr + Ya/7D1AqEaQhfcfOL4mBUdH86GVw9o58Ock7baQHoYlIrwgvW4qRvBjT+mQueHld + J0v/GQM6widHe3vt3HL4vI4vTzoscl8MY4u8YCmvkWGh343G6Ei7m+cQ19GrHSOR + 8rMZjHbYaNHstscBJDVx19EZaGc/AV6w38MdkiXbKyyKkZuvAqWkgs+NFRE7lBtI + mNp40aakYNwnn0RP6Wz2LYRWcP5Zm79cUb8++CYK8h5Y5j53tlM8ihF58UhKL6rg + zEk5vYoJzmswO9nA9nNnPscZhZUwfE1x8SVtOOhr8IFlJ3Kh2BpTXJbmqwj71Y6x + pfP6GG4UmPzfLi64ZkvYU1l7nyxlbvJXd8LzBs5oofROiIYKQkrSMEZvPb8XUVNs + cMz434hQFPtwkygjtpA1Io+bx1BV4wtnQ1GsaK2m32hacfF7OvL8iYq92uF//NUm + mhxeh5Jso+/G9xAAqOBen92oFOrg3P+EkmIPRqvcgy4I3Tb22PaB3tGP4+iXpalc + ocMVDzVOLM2pwMwnffnecGv3UotJWdz/80CG8juuwOLXOIsOVAdEbKIXGknwLGyZ + V04+nBQLm+qKhLFigakx43Rmte7Fn3tydlJ+61DHBYtUF8/QRPw/1YN5ybXuZrTj + ci6zUfHxuUczlr8GQhXDy95yvtGlqsGB1roIiCB4Ld7PV3S3YK8+4AjuNFqMQ/+K + KNMsGWFzkXf8NPLe/AneVARsX0f2bV0YYcHYWQCZjrEyKrMcNYuK6uj4Z1Xmwn7f + 0gE3kjTPuG562jpHHElWHcZI40uNnYf0DBRyTQWLGqOuAVCDrg8+/gITBW98M3jd + OuPu5RQmtIkF9BFDYl3pdbzJ/4j+StAnRuZMjSSi17okRHFJEL3FZ2LdBim073ra + BCU+tufFOQUtR47mOuIjmRDI0GXjGcs1BcovaVViGisjwB0CSSLgnYIjZH6xsrA1 + ICc0bSNBvYpXewPGDQ8AO1k4lNtedDOY/sXr4o9xZVic5eOA740PPrEozpftV1wK + UBxa9dXTy9qaZhcw/x38zVyJTLg4I5sOmG24u/ZPqOblEKyQwFdU4gLyF5CRGwDy + 5LmGVc1bTDL8SQXkRG4L/DZVbqgBxBKNonkbnJV2VpjzecfA3O8rHS+uAlQ= + =hbUK + -----END PGP PUBLIC KEY BLOCK----- + + +You may use [this tool](https://sela.io/pgp-en/) to encrypt your message. diff --git a/app/Absence.php b/app/Absence.php new file mode 100755 index 0000000..2043b52 --- /dev/null +++ b/app/Absence.php @@ -0,0 +1,125 @@ +belongsTo('App\User', 'requesterID', 'id'); + } + + + /** + * Determines whether this model can be setApproved(), setDeclined() or setCancelled() + * + * @param bool $toCancel Switch the check to cancellability check + * @return bool + */ + public function isActionable(bool $toCancel = false): bool + { + if ($toCancel) + { + return in_array($this->getRawOriginal('status'), ['PENDING', 'APPROVED']); + } + + return $this->getRawOriginal('status') == 'PENDING'; + } + + + /** + * Sets the Absence's status as approved + * + * @return Absence + * @throws AbsenceNotActionableException + */ + public function setApproved(): Absence + { + if ($this->isActionable()) + { + return tap($this)->update([ + 'status' => 'APPROVED' + ]); + } + + throw new AbsenceNotActionableException('This absence is not actionable!'); + } + + + /** + * Sets the absence's status as declined + * + * @return Absence + * @throws AbsenceNotActionableException + */ + public function setDeclined(): Absence + { + if ($this->isActionable()) { + return tap($this)->update([ + 'status' => 'DECLINED' + ]); + } + + throw new AbsenceNotActionableException('This absence is not actionable!'); + } + + + /** + * Sets the absence's status as cancelled + * + * @return Absence + * @throws AbsenceNotActionableException Thrown when the switch to this status would be invalid + */ + public function setCancelled(): Absence + { + if ($this->isActionable(true)) { + return tap($this)->update([ + 'status' => 'CANCELLED' + ]); + } + + throw new AbsenceNotActionableException('This absence is not actionable!'); + } + + /** + * Sets the absence's status as ended + * + * @return Absence + */ + public function setEnded(): Absence + { + return tap($this)->update([ + 'status' => 'ENDED' + ]); + } + + + // Look out when retrieving this value; + //If you need the unaltered version of it, either adapt to its formatting or call getRawOriginal() + protected function status(): Attribute { + return Attribute::make( + get: fn($value) => ucfirst(strtolower($value)) + ); + } + +} + diff --git a/app/Application.php b/app/Application.php old mode 100644 new mode 100755 index f1066d8..5aa958a --- a/app/Application.php +++ b/app/Application.php @@ -1,5 +1,24 @@ . + */ + namespace App; use Illuminate\Database\Eloquent\Model; @@ -10,12 +29,14 @@ class Application extends Model 'applicantUserID', 'applicantFormResponseID', - 'applicationStatus' + 'applicationStatus', ]; - - + public function oneoffApplicant() + { + return $this->hasOne('App\OneoffApplicant', 'application_id', 'id'); + } public function user() { @@ -37,7 +58,6 @@ class Application extends Model return $this->belongsToMany('App\Vote', 'votes_has_application'); } - public function comments() { return $this->hasMany('App\Comment', 'applicationID', 'id'); @@ -46,8 +66,15 @@ class Application extends Model public function setStatus($status) { return $this->update([ - 'applicationStatus' => $status + 'applicationStatus' => $status, ]); - } + + + public function isOneoff() + { + return $this->user->id == 1; // ID 1 is always the ghost + } + + } diff --git a/app/Appointment.php b/app/Appointment.php old mode 100644 new mode 100755 index d62e39a..a87c02f --- a/app/Appointment.php +++ b/app/Appointment.php @@ -1,5 +1,24 @@ . + */ + namespace App; use Illuminate\Database\Eloquent\Model; @@ -13,19 +32,19 @@ class Appointment extends Model 'appointmentStatus', 'appointmentLocation', 'meetingNotes', - 'userAccepted' + 'userAccepted', ]; public function application() { - // FIXME: Possible bug here, where laravel looks for the wrong column in the applications table. + // FIXME: Possible bug here, where laravel looks for the wrong column in the applications table. return $this->belongsTo('App\Application', 'id', 'applicationID'); } public function setStatus($status) { $this->update([ - 'appointmentStatus' => $status + 'appointmentStatus' => $status, ]); } } diff --git a/app/Ban.php b/app/Ban.php old mode 100644 new mode 100755 index c1a6e90..f4c2dfb --- a/app/Ban.php +++ b/app/Ban.php @@ -1,29 +1,46 @@ . + */ + namespace App; use Illuminate\Database\Eloquent\Model; class Ban extends Model { - public $fillable = [ 'userID', 'reason', 'bannedUntil', - 'userAgent', - 'authorUserID' + 'isPermanent', + 'authorUserID', ]; public $dates = [ - 'bannedUntil' + 'suspendedUntil', ]; public function user() { return $this->belongsTo('App\User', 'userID', 'id'); } - } diff --git a/app/Comment.php b/app/Comment.php old mode 100644 new mode 100755 index c8dc8cc..ea4092b --- a/app/Comment.php +++ b/app/Comment.php @@ -1,16 +1,34 @@ . + */ + namespace App; use Illuminate\Database\Eloquent\Model; class Comment extends Model { - protected $fillable = [ 'authorID', 'applicationID', - 'text' + 'text', ]; public function application() @@ -22,5 +40,4 @@ class Comment extends Model { return $this->belongsTo('App\User', 'authorID', 'id'); } - } diff --git a/app/Console/Commands/CountVotes.php b/app/Console/Commands/CountVotes.php old mode 100644 new mode 100755 index a2a7c6d..af0c549 --- a/app/Console/Commands/CountVotes.php +++ b/app/Console/Commands/CountVotes.php @@ -1,5 +1,24 @@ . + */ + namespace App\Console\Commands; use App\Application; @@ -43,28 +62,23 @@ class CountVotes extends Command $eligibleApps = Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get(); $pbar = $this->output->createProgressBar($eligibleApps->count()); - if($eligibleApps->isEmpty()) - { + if ($eligibleApps->isEmpty()) { $this->error('𐄂 There are no applications that need to be processed.'); return false; } - foreach ($eligibleApps as $application) - { + foreach ($eligibleApps as $application) { $votes = $application->votes; $voteCount = $application->votes->count(); $positiveVotes = 0; $negativeVotes = 0; - if ($voteCount > 5) - { - $this->info('Counting votes for application ID ' . $application->id); - foreach ($votes as $vote) - { - switch ($vote->allowedVoteType) - { + if ($voteCount > 5) { + $this->info('Counting votes for application ID '.$application->id); + foreach ($votes as $vote) { + switch ($vote->allowedVoteType) { case 'VOTE_APPROVE': $positiveVotes++; break; @@ -74,7 +88,7 @@ class CountVotes extends Command } } - $this->info('Total votes for application ID ' . $application->id . ': ' . $voteCount); + $this->info('Total votes for application ID '.$application->id.': '.$voteCount); $this->info('Calculating criteria...'); $negativeVotePercent = floor(($negativeVotes / $voteCount) * 100); $positiveVotePercent = floor(($positiveVotes / $voteCount) * 100); @@ -83,54 +97,42 @@ class CountVotes extends Command $this->table([ '% of approval votes', - '% of denial votes' + '% of denial votes', ], [ // array of arrays, e.g. rows [ - $positiveVotePercent . "%", - $negativeVotePercent . "%" - ] + $positiveVotePercent.'%', + $negativeVotePercent.'%', + ], ]); - if ($pollResult) - { - $this->info('✓ Dispatched promotion event for applicant ' . $application->user->name); - if (!$this->option('dryrun')) - { - $application->response->vacancy->vacancyCount -= 1; - $application->response->vacancy->save(); + if ($pollResult) { + $this->info('✓ Dispatched promotion event for applicant '.$application->user->name); + if (! $this->option('dryrun')) { + $application->response->vacancy->decrease(); event(new ApplicationApprovedEvent(Application::find($application->id))); - } - else - { + } else { $this->warn('Dry run: Event won\'t be dispatched'); } $pbar->advance(); - - } - else { - - if (!$this->option('dryrun')) - { + } else { + if (! $this->option('dryrun')) { event(new ApplicationDeniedEvent(Application::find($application->id))); - } - else { + } else { $this->warn('Dry run: Event won\'t be dispatched'); } $pbar->advance(); - $this->error('𐄂 Applicant ' . $application->user->name . ' does not meet vote criteria (Majority)'); + $this->error('𐄂 Applicant '.$application->user->name.' does not meet vote criteria (Majority)'); } + } else { + $this->warn('Application ID'.$application->id.' did not have enough votes for processing (min 5)'); } - else - { - $this->warn("Application ID" . $application->id . " did not have enough votes for processing (min 5)"); - } - } $pbar->finish(); + return true; } } diff --git a/app/Console/Commands/CreateUser.php b/app/Console/Commands/CreateUser.php new file mode 100755 index 0000000..eb98a8d --- /dev/null +++ b/app/Console/Commands/CreateUser.php @@ -0,0 +1,140 @@ +. + */ + +namespace App\Console\Commands; + +use App\Facades\UUID; +use App\Profile; +use App\User; +use Illuminate\Console\Command; +use Illuminate\Support\Facades\Hash; + +class CreateUser extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'users:create'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Creates an application user. Seeding the database is for testing environments, so use this command in production for your first admin user.'; + + /** + * Create a new command instance. + * + * @return void + */ + public function __construct() + { + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return int + */ + public function handle() + { + do { + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + system('cls'); + } else { + system('clear'); + } + + $this->info('Welcome to the user account creation wizard. If you just installed the application, we recommend you create your first admin user here. If you don\'t, you won\'t gain admin privileges after creating an account in the web interface.'); + $this->info('We\'ll ask some questions to get you started.'); + + $username = $this->ask('Username'); + do { + $password = $this->secret('Password'); + $password_confirm = $this->secret('Confirm Password'); + + if ($password === $password_confirm) { + $password = Hash::make($password); + $matches = true; + } else { + $this->error('Password doesn\'t match. Please try again.'); + $matches = false; + } + } while (! $matches); + + $email = $this->ask('E-mail address'); + $name = $this->ask('First/Last Name'); + + do { + try { + $uuid = UUID::toUUID($this->ask('Minecraft username (Must be a valid Premium account)')); + } catch (\InvalidArgumentException $e) { + $this->error($e->getMessage()); + $hasError = true; + } + + if (isset($hasError)) { + $continue = true; + } else { + $continue = false; + } + unset($hasError); + } while ($continue); + + $this->info('Please check if these details are correct: '); + $this->info('Username: '.$username); + $this->info('Email: '.$email); + $this->info('Name: '.$name); + } while (! $this->confirm('Create user now? You can go back to correct any details.')); + + $user = User::create([ + 'uuid' => $uuid, + 'name' => $name, + 'email' => $email, + 'username' => $username, + 'originalIP' => '127.0.0.1', + 'password' => $password, + ]); + + if ($user) { + $user->assignRole('admin', 'reviewer', 'user', 'hiringManager'); + Profile::create([ + 'profileShortBio' => 'Random data '.rand(0, 1000), + 'profileAboutMe' => 'Random data '.rand(0, 1000), + 'socialLinks' => '[]', + 'avatarPreference' => 'gravatar', + 'userID' => $user->id, + ]); + + $this->info('Account created! You may now login at '.route('login').'. Enjoy the app!'); + + return 0; + } else { + $this->error('There was an unknown problem creating the user. There might have been errors above. Please try again.'); + + return 1; + } + } +} diff --git a/app/Console/Commands/Install.php b/app/Console/Commands/Install.php old mode 100644 new mode 100755 diff --git a/app/Console/Commands/MakeFile.php b/app/Console/Commands/MakeFile.php new file mode 100755 index 0000000..5d3cf40 --- /dev/null +++ b/app/Console/Commands/MakeFile.php @@ -0,0 +1,82 @@ +. + */ + +namespace App\Console\Commands; + +use Faker\Factory; +use Faker\Generator; +use Illuminate\Console\Command; +use Illuminate\Support\Facades\Storage; + +class MakeFile extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'files:make {count : How many test files to generate}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Generates test files for the TeamFile model. Use in conjunction with it\'s factory.'; + + /** + * The faker instance used to obtain dummy text. + * + * @var Generator + */ + private $faker; + + /** + * Create a new command instance. + * + * @return void + */ + public function __construct() + { + $this->faker = Factory::create(); + + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return int + */ + public function handle() + { + $count = $this->argument('count'); + $this->info('Creating '.$this->argument('count').' files!'); + + for ($max = 1; $max < $count; $max++) { + Storage::disk('local')->put('factory_files/testfile_'.rand(0, 5000).'.txt', $this->faker->paragraphs(40, true)); + } + + $this->info('Finished creating files! They will be randomly picked by the factory.'); + + return 0; + } +} diff --git a/app/Console/Commands/SetEnv.php b/app/Console/Commands/SetEnv.php old mode 100644 new mode 100755 index 9125ffa..3c49403 --- a/app/Console/Commands/SetEnv.php +++ b/app/Console/Commands/SetEnv.php @@ -1,9 +1,28 @@ . + */ + namespace App\Console\Commands; -use Illuminate\Console\Command; use GeoSot\EnvEditor\Facades\EnvEditor; +use Illuminate\Console\Command; class SetEnv extends Command { @@ -37,20 +56,16 @@ class SetEnv extends Command */ public function handle() { - $path = base_path('/.env'); - $key = $this->argument('key'); - $value = $this->argument('value'); + $path = base_path('/.env'); + $key = $this->argument('key'); + $value = $this->argument('value'); + if (file_exists($path)) { + EnvEditor::editKey($key, $value); + } else { + $this->error('Cannot update a file that doesn\'t exist! Please create .env first.'); - - if (file_exists($path)) - { - EnvEditor::editKey($key, $value); - } - else - { - $this->error('Cannot update a file that doesn\'t exist! Please create .env first.'); - return false; - } + return false; + } } } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php old mode 100644 new mode 100755 index fdf4d00..a447643 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -1,10 +1,29 @@ . + */ + namespace App\Console; +use App\Jobs\ProcessDueSuspensions; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; -use App\Jobs\CleanBans; class Kernel extends ConsoleKernel { @@ -31,9 +50,10 @@ class Kernel extends ConsoleKernel ->daily(); // Production value: Every day - $schedule->job(new CleanBans) + $schedule->job(new ProcessDueSuspensions) ->daily(); // Production value: Every day + // Development value: Every minute } /** diff --git a/app/CustomFacades/IP.php b/app/CustomFacades/IP.php old mode 100644 new mode 100755 index 2b04064..8474b80 --- a/app/CustomFacades/IP.php +++ b/app/CustomFacades/IP.php @@ -1,12 +1,49 @@ . + */ + namespace App\CustomFacades; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Http; +use Illuminate\Support\Facades\Log; class IP { + // Central source of truth for all operations that deal with IP addresses. + // For views, this is in a service provider, and is shared with all of them + /** + * Determines whether you should collect/display IP addresses in the app. + * @return bool Whether you should collect/display IPs, in the context in which this is called + */ + public function shouldCollect(): bool + { + // should collect or display IPs? + + if (config('demo.is_enabled') || config('app.hide_ips')) + { + return false; // do not collect! + } + + return true; + } /** * Looks up information on a specified IP address. Caches results automatically. @@ -15,23 +52,25 @@ class IP */ public function lookup(string $IP): object { - - $params = [ - 'apiKey' => config('general.keys.ipapi.apikey'), - 'ip' => $IP - ]; - - // TODO: Maybe unwrap this? Methods are chained here - - return json_decode(Cache::remember($IP, 3600, function() use ($IP) - { - return Http::get(config('general.urls.ipapi.ipcheck'), [ + $params = [ 'apiKey' => config('general.keys.ipapi.apikey'), - 'ip' => $IP - ])->body(); - })); + 'ip' => $IP, + ]; + + if ($this->shouldCollect()) { + return json_decode(Cache::remember($IP, 3600, function () use ($IP) { + return Http::get(config('general.urls.ipapi.ipcheck'), [ + 'apiKey' => config('general.keys.ipapi.apikey'), + 'ip' => $IP, + ])->body(); + })); + + } + + return new class { + public $message = "This feature is disabled."; + }; } - } diff --git a/app/Events/ApplicationApprovedEvent.php b/app/Events/ApplicationApprovedEvent.php old mode 100644 new mode 100755 index 4bb005c..066d83c --- a/app/Events/ApplicationApprovedEvent.php +++ b/app/Events/ApplicationApprovedEvent.php @@ -1,13 +1,28 @@ . + */ + namespace App\Events; use App\Application; -use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; -use Illuminate\Broadcasting\PresenceChannel; -use Illuminate\Broadcasting\PrivateChannel; -use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; @@ -26,6 +41,4 @@ class ApplicationApprovedEvent { $this->application = $application; } - - } diff --git a/app/Events/ApplicationDeniedEvent.php b/app/Events/ApplicationDeniedEvent.php old mode 100644 new mode 100755 index fb84a57..48951a3 --- a/app/Events/ApplicationDeniedEvent.php +++ b/app/Events/ApplicationDeniedEvent.php @@ -1,13 +1,28 @@ . + */ + namespace App\Events; use App\Application; -use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; -use Illuminate\Broadcasting\PresenceChannel; -use Illuminate\Broadcasting\PrivateChannel; -use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; @@ -26,5 +41,4 @@ class ApplicationDeniedEvent { $this->application = $application; } - } diff --git a/app/Events/NewApplicationEvent.php b/app/Events/NewApplicationEvent.php old mode 100644 new mode 100755 index bb67787..867ab50 --- a/app/Events/NewApplicationEvent.php +++ b/app/Events/NewApplicationEvent.php @@ -1,12 +1,28 @@ . + */ + namespace App\Events; -use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; -use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\PrivateChannel; -use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; diff --git a/app/Events/UserBannedEvent.php b/app/Events/UserBannedEvent.php old mode 100644 new mode 100755 index 92addbf..05902ad --- a/app/Events/UserBannedEvent.php +++ b/app/Events/UserBannedEvent.php @@ -1,23 +1,36 @@ . + */ + namespace App\Events; -use Illuminate\Broadcasting\Channel; +use App\Ban; +use App\User; use Illuminate\Broadcasting\InteractsWithSockets; -use Illuminate\Broadcasting\PresenceChannel; -use Illuminate\Broadcasting\PrivateChannel; -use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; -use App\User; -use App\Ban; - class UserBannedEvent { use Dispatchable, InteractsWithSockets, SerializesModels; - public $user; public $ban; @@ -32,5 +45,4 @@ class UserBannedEvent $this->user = $user; $this->ban = $ban; } - } diff --git a/app/Exceptions/AbsenceNotActionableException.php b/app/Exceptions/AbsenceNotActionableException.php new file mode 100755 index 0000000..0f42c85 --- /dev/null +++ b/app/Exceptions/AbsenceNotActionableException.php @@ -0,0 +1,10 @@ +. + */ + namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; diff --git a/app/Exceptions/IncompleteApplicationException.php b/app/Exceptions/IncompleteApplicationException.php new file mode 100755 index 0000000..14966fc --- /dev/null +++ b/app/Exceptions/IncompleteApplicationException.php @@ -0,0 +1,10 @@ +. + */ + namespace App\Facades; use Illuminate\Support\Facades\Facade; class ContextAwareValidation extends Facade { - - protected static function getFacadeAccessor() - { - return 'contextAwareValidator'; - } - + // FIXME: Change to a binding key for L9 + protected static function getFacadeAccessor() + { + return 'contextAwareValidator'; + } } diff --git a/app/Facades/DigitalStorageHelper.php b/app/Facades/DigitalStorageHelper.php new file mode 100755 index 0000000..0ebdee0 --- /dev/null +++ b/app/Facades/DigitalStorageHelper.php @@ -0,0 +1,17 @@ +. + */ + namespace App\Facades; use Illuminate\Support\Facades\Facade; diff --git a/app/Facades/JSON.php b/app/Facades/JSON.php new file mode 100755 index 0000000..ec06d71 --- /dev/null +++ b/app/Facades/JSON.php @@ -0,0 +1,17 @@ +. + */ namespace App\Facades; -use \Illuminate\Support\Facades\Facade; + +use Illuminate\Support\Facades\Facade; class Options extends Facade { diff --git a/app/Facades/UUID.php b/app/Facades/UUID.php old mode 100644 new mode 100755 index 18699ee..b26e3a3 --- a/app/Facades/UUID.php +++ b/app/Facades/UUID.php @@ -1,13 +1,32 @@ . + */ + namespace App\Facades; use Illuminate\Support\Facades\Facade; -class UUID extends Facade +class UUID extends Facade { protected static function getFacadeAccessor() { return 'uuidConversionFacade'; } -} \ No newline at end of file +} diff --git a/app/Form.php b/app/Form.php old mode 100644 new mode 100755 index dc64af2..80220fc --- a/app/Form.php +++ b/app/Form.php @@ -1,5 +1,24 @@ . + */ + namespace App; use Illuminate\Database\Eloquent\Model; @@ -10,7 +29,7 @@ class Form extends Model 'formName', 'formStructure', - 'formStatus' + 'formStatus', ]; diff --git a/app/Helpers/ContextAwareValidator.php b/app/Helpers/ContextAwareValidator.php old mode 100644 new mode 100755 index f2ffb55..6257255 --- a/app/Helpers/ContextAwareValidator.php +++ b/app/Helpers/ContextAwareValidator.php @@ -1,138 +1,141 @@ . + */ + namespace App\Helpers; -use Illuminate\Support\Facades\Validator; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Validator; class ContextAwareValidator { - /** - * The excludedNames array will make the validator ignore any of these names when including names into the rules. - * @var array - */ + * The excludedNames array will make the validator ignore any of these names when including names into the rules. + * @var array + */ private $excludedNames = [ - '_token', - '_method', - 'formName' + '_token', + '_method', + 'formName', ]; - /** - * Utility wrapper for json_encode. - * - * @param array $value The array to be converted. - * @return string The JSON representation of $value - */ - private function encode(array $value) : string + * Utility wrapper for json_encode. + * + * @param array $value The array to be converted. + * @return string The JSON representation of $value + */ + private function encode(array $value): string { - return json_encode($value); + return json_encode($value); } /** - * The getValidator() method will take an array of fields from the request body, iterates through them, - * and dynamically adds validation rules for them. Depending on parameters, it may or may not generate - * a form structure for rendering purposes. - * - * This method is mostly meant by internal use by means of static proxies (Facades), in order to reduce code repetition; - * Using it outside it's directed scope may cause unexpected results; For instance, the method expects inputs to be in array format, e.g. myFieldNameID1[], - * myFieldNameID2[], and so on and so forth. - * - * This isn't checked by the code yet, but if you're implementing it this way in the HTML markup, make sure it's consistent (e.g. use a loop). - * - * P.S This method automatically ignores the CSRF token for validation. - * - * @param array $fields The request form fields - * @param bool $generateStructure Whether to incldue a JSON-ready form structure for rendering - * @param bool $includeFormName Whether to include formName in the list of validation rules - * @return Validator|Collection A validator instance you can use to check for validity, or a Collection with a validator and structure (validator, structure) - */ + * The getValidator() method will take an array of fields from the request body, iterates through them, + * and dynamically adds validation rules for them. Depending on parameters, it may or may not generate + * a form structure for rendering purposes. + * + * This method is mostly meant by internal use by means of static proxies (Facades), in order to reduce code repetition; + * Using it outside it's directed scope may cause unexpected results; For instance, the method expects inputs to be in array format, e.g. myFieldNameID1[], + * myFieldNameID2[], and so on and so forth. + * + * This isn't checked by the code yet, but if you're implementing it this way in the HTML markup, make sure it's consistent (e.g. use a loop). + * + * P.S This method automatically ignores the CSRF token for validation. + * + * @param array $fields The request form fields + * @param bool $generateStructure Whether to incldue a JSON-ready form structure for rendering + * @param bool $includeFormName Whether to include formName in the list of validation rules + * @return Validator|Collection A validator instance you can use to check for validity, or a Collection with a validator and structure (validator, structure) + */ public function getValidator(array $fields, bool $generateStructure = false, bool $includeFormName = false) { $formStructure = []; $validator = []; - if ($includeFormName) - { - $validator['formName'] = 'required|string|max:100'; - } + if ($includeFormName) { + $validator['formName'] = 'required|string'; + } - foreach ($fields as $fieldName => $field) - { - if(!in_array($fieldName, $this->excludedNames)) - { - $validator[$fieldName . ".0"] = 'required|string'; - $validator[$fieldName . ".1"] = 'required|string'; + foreach ($fields as $fieldName => $field) { + if (! in_array($fieldName, $this->excludedNames)) { + $validator[$fieldName.'.0'] = 'required|string'; + $validator[$fieldName.'.1'] = 'required|string'; - if ($generateStructure) - { + if ($generateStructure) { $formStructure['fields'][$fieldName]['title'] = $field[0]; $formStructure['fields'][$fieldName]['type'] = $field[1]; - } + } + } + } - } - } + $validatorInstance = Validator::make($fields, $validator); - $validatorInstance = Validator::make($fields, $validator); - - return ($generateStructure) ? + return ($generateStructure) ? collect([ - 'validator' => $validatorInstance, - 'structure' => $this->encode($formStructure) + 'validator' => $validatorInstance, + 'structure' => $this->encode($formStructure), ]) : $validatorInstance; - - } /** - * The getResponseValidator method is similar to the getValidator method; It basically takes - * an array of fields from a previous form (that probably went through the other method) and adds validation - * to the field names. - * - * Also generates the storable response structure if you tell it to. - * - * @param array $fields The received fields - * @param array $formStructure The form structure - You must supply this if you want the response structure - * @param bool $generateResponseStructure Whether to generate the response structure - * @return Validator|Collection A collection or a validator, depending on the args. Will return validatior if only fields are supplied. - */ + * The getResponseValidator method is similar to the getValidator method; It basically takes + * an array of fields from a previous form (that probably went through the other method) and adds validation + * to the field names. + * + * Also generates the storable response structure if you tell it to. + * + * @param array $fields The received fields + * @param array $formStructure The form structure - You must supply this if you want the response structure + * @param bool $generateResponseStructure Whether to generate the response structure + * @return Validator|Collection A collection or a validator, depending on the args. Will return validatior if only fields are supplied. + */ public function getResponseValidator(array $fields, array $formStructure = [], bool $generateResponseStructure = true) { + $responseStructure = []; + $validator = []; - $responseStructure = []; - $validator = []; + if (empty($formStructure) && $generateResponseStructure) { + throw new \InvalidArgumentException('Illegal combination of arguments supplied! Please check the method\'s documentation.'); + } - if (empty($formStructure) && $generateResponseStructure) - { - throw new \InvalidArgumentException('Illegal combination of arguments supplied! Please check the method\'s documentation.'); - } + foreach ($fields as $fieldName => $value) { + if (! in_array($fieldName, $this->excludedNames)) { + $validator[$fieldName] = 'required|string'; - foreach($fields as $fieldName => $value) - { - if(!in_array($fieldName, $this->excludedNames)) - { - $validator[$fieldName] = 'required|string'; + if ($generateResponseStructure) { + $responseStructure['responses'][$fieldName]['type'] = $formStructure['fields'][$fieldName]['type'] ?? 'Unavailable'; + $responseStructure['responses'][$fieldName]['title'] = $formStructure['fields'][$fieldName]['title']; + $responseStructure['responses'][$fieldName]['response'] = $value; + } + } + } - if ($generateResponseStructure) - { - $responseStructure['responses'][$fieldName]['type'] = $formStructure['fields'][$fieldName]['type'] ?? 'Unavailable'; - $responseStructure['responses'][$fieldName]['title'] = $formStructure['fields'][$fieldName]['title']; - $responseStructure['responses'][$fieldName]['response'] = $value; - } - } - } + $validatorInstance = Validator::make($fields, $validator); - $validatorInstance = Validator::make($fields, $validator); - - return ($generateResponseStructure) ? + return ($generateResponseStructure) ? collect([ - 'validator' => $validatorInstance, - 'responseStructure' => $this->encode($responseStructure) + 'validator' => $validatorInstance, + 'responseStructure' => $this->encode($responseStructure), ]) : $validatorInstance; - } - } diff --git a/app/Helpers/DigitalStorageHelper.php b/app/Helpers/DigitalStorageHelper.php new file mode 100755 index 0000000..24637bc --- /dev/null +++ b/app/Helpers/DigitalStorageHelper.php @@ -0,0 +1,107 @@ +value = $value; + return $this; + } + + + /** + * Converts the digital storage value to kilobytes. + * + * @return float|int + */ + public function toKilobytes(): float + { + return $this->value / 1000; + } + + + /** + * Converts the digital storage value to megabytes. + * + * @return float|int + */ + public function toMegabytes(): float + { + return $this->value / (1 * pow(10, 6)); // 1 times 10 to the power of 6 + } + + + /** + * Convert the digital storage value to gigabytes. Might be an approximation + * + * @return float + */ + public function toGigabytes(): float + { + return $this->value / (1 * pow(10, 9)); + } + + + /** + * Convert the digital storage value to terabytes. + * + * @return float + */ + public function toTerabytes(): float + { + return $this->value / (1 * pow(10, 12)); + } + + + /** + * Format the digital storage value to one of the units: b, kb, mb, gb and tb. + * The method has been adapted to use both MiB and MB values. + * + * @param int $precision The rounding precision + * @param bool $si Use international system units. Defaults to false + * @return string The human readable digital storage value, in either, for instance, MB or MiB + * @see https://stackoverflow.com/a/2510459/11540218 StackOverflow question regarding unit conversion + * @since 7.3.23 + */ + public function formatBytes($precision = 2, $si = false): string + { + $units = ['B', 'KiB', 'MiB', 'GiB', 'TiB']; + if ($si) + $units = ['B', 'KB', 'MB', 'GB', 'TB']; + + $bytes = max($this->value, 0); + $pow = floor(($bytes ? log($bytes) : 0) / log(($si) ? 1000 : 1024)); + $pow = min($pow, count($units) - 1); + + $bytes /= pow(($si) ? 1000 : 1024, $pow); + + return round($bytes, $precision) . ' ' . $units[$pow]; + } + +} diff --git a/app/Helpers/JSON.php b/app/Helpers/JSON.php new file mode 100755 index 0000000..334fb34 --- /dev/null +++ b/app/Helpers/JSON.php @@ -0,0 +1,142 @@ +type = $type; + return $this; + } + + /** + * @param mixed $additional + */ + public function setAdditional($additional) + { + $this->additional = $additional; + return $this; + } + + /** + * @return mixed + */ + public function getAdditional() + { + return $this->additional; + } + + /** + * @return mixed + */ + public function getType() + { + return $this->type; + } + + /** + * @return mixed + */ + public function getStatus() + { + return $this->status; + } + + /** + * @param mixed $status + * @return JSON + */ + public function setStatus($status) + { + $this->status = $status; + return $this; + } + + /** + * @return mixed + */ + public function getMessage() + { + return $this->message; + } + + /** + * @param mixed $message + * @return JSON + */ + public function setMessage($message) + { + $this->message = $message; + return $this; + } + + /** + * @return mixed + */ + public function getCode() + { + return $this->code; + } + + /** + * @param mixed $code + * @return JSON + */ + public function setCode($code) + { + $this->code = $code; + return $this; + } + + /** + * @return mixed + */ + public function getData() + { + return $this->data; + } + + /** + * @param mixed $data + * @return JSON + */ + public function setData($data) + { + $this->data = $data; + return $this; + } + + public function build($headers = []) + { + // Uses the same structure as model resources, for consistency when they aren't used. + $response = [ + 'data' => $this->getData(), + 'meta' => [ + 'status' => $this->getStatus(), + 'message' => $this->getMessage(), + ] + ]; + + if (!empty($this->additional)) + { + foreach($this->additional as $additionalKeyName => $key) + { + $response[$additionalKeyName] = $key; + } + } + return response($response, $this->getCode(), $headers); + } + +} diff --git a/app/Helpers/Options.php b/app/Helpers/Options.php old mode 100644 new mode 100755 index 13c416d..a1b35e8 --- a/app/Helpers/Options.php +++ b/app/Helpers/Options.php @@ -1,43 +1,88 @@ . + */ namespace App\Helpers; +use App\Exceptions\EmptyOptionsException; +use App\Exceptions\OptionNotFoundException; use App\Options as Option; +use Illuminate\Support\Collection; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Log; +/** + * The options class. A simple wrapper around the model. Could be a repository, but we're not using that design pattern just yet + */ class Options { + /** + * Returns an assortment of settings found in the mentioned category + * + * @param $category The category + * @return Collection The settings in this category + */ + public function getCategory(string $category): Collection + { + $options = Option::where('option_category', $category)->get(); + if ($options->isEmpty()) + { + throw new EmptyOptionsException('There are no options in category ' . $category); + } + return $options; + } + + public function getOption(string $option): string { $value = Cache::get($option); - if (is_null($value)) - { - Log::debug('Option ' . $option . 'not found in cache, refreshing from database'); - $value = Option::where('option_name', $option)->first(); - if (is_null($value)) - throw new \Exception('This option does not exist.'); - Cache::put($option, $value); - Cache::put($option . '_desc', 'Undefined description'); + if (is_null($value)) { + Log::debug('Option '.$option.'not found in cache, refreshing from database'); + $value = Option::where('option_name', $option)->first(); + if (is_null($value)) { + throw new OptionNotFoundException('This option does not exist.'); + } + Cache::put($option, $value->option_value); + Cache::put($option.'_desc', 'Undefined description'); + + return $value->option_value; } - return $value->option_value; + return $value; } - public function setOption(string $option, string $value, string $description) + // Null categories are settings without categories and will appear ungrouped + public function setOption(string $option, string $value, string $description, string $category = null) { - Option::create([ - 'option_name' => $option, - 'option_value' => $value, - 'friendly_name' => $description - ]); + Option::create([ + 'option_name' => $option, + 'option_value' => $value, + 'friendly_name' => $description, + 'option_category' => $category + ]); - Cache::put($option, $value, now()->addDay()); - Cache::put($option . '_desc', $description, now()->addDay()); + Cache::put($option, $value, now()->addDay()); + Cache::put($option.'_desc', $description, now()->addDay()); } public function pullOption($option): array @@ -48,7 +93,7 @@ class Options // putMany is overkill here return [ Cache::pull($option), - Cache::pull($option . '_desc') + Cache::pull($option.'_desc'), ]; } @@ -56,14 +101,13 @@ class Options { $dbOption = Option::where('option_name', $option); - if ($dbOption->first()) - { + if ($dbOption->first()) { $dbOptionInstance = Option::find($dbOption->first()->id); Cache::forget($option); Log::debug('Changing db configuration option', [ 'old_value' => $dbOptionInstance->option_value, - 'new_value' => $newValue + 'new_value' => $newValue, ]); $dbOptionInstance->option_value = $newValue; @@ -71,24 +115,20 @@ class Options Log::debug('New db configuration option saved', [ - 'option' => $dbOptionInstance->option_value + 'option' => $dbOptionInstance->option_value, ]); Cache::put('option_name', $newValue, now()->addDay()); - } - else - { - throw new \Exception('This option does not exist.'); + } else { + throw new OptionNotFoundException('This option does not exist.'); } } - public function optionExists(string $option): bool { $dbOption = Option::where('option_name', $option)->first(); $locallyCachedOption = Cache::get($option); - return !is_null($dbOption) || !is_null($locallyCachedOption); + return ! is_null($dbOption) || ! is_null($locallyCachedOption); } - } diff --git a/app/Http/Controllers/AbsenceController.php b/app/Http/Controllers/AbsenceController.php new file mode 100755 index 0000000..56ec868 --- /dev/null +++ b/app/Http/Controllers/AbsenceController.php @@ -0,0 +1,234 @@ +id)->get(); + + foreach ($absences as $absence) { + + // Or we could adjust the query (using a model scope) to only return valid absences; + // If there are any, refuse to store more, but this approach also works + // A model scope that only returns cancelled, declined and ended absences could also be implemented for future use + if (in_array($absence->getRawOriginal('status'), ['PENDING', 'APPROVED'])) + { + return true; + } + } + + return false; + } + + /** + * Display a listing of absences. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + $this->authorize('viewAny', Absence::class); + + return view('dashboard.absences.index') + ->with('absences', Absence::paginate(6)); + } + + + /** + * Display a listing of absences belonging to the current user. + * + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function showUserAbsences() + { + $this->authorize('viewOwn', Absence::class); + + // We can't paginate on the relationship found on the user model + $absences = Absence::where('requesterID', Auth::user()->id)->paginate(6); + + return view('dashboard.absences.own') + ->with('absences', $absences); + + } + + + + /** + * Show the form for creating a new absence request. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + $this->authorize('create', Absence::class); + + return view('dashboard.absences.create') + ->with('activeRequest', $this->hasActiveRequest(Auth::user())); + } + + /** + * Store a newly created request in storage. + * + * @param \App\Http\Requests\StoreAbsenceRequest $request + * @return \Illuminate\Http\RedirectResponse + */ + public function store(StoreAbsenceRequest $request) + { + $this->authorize('create', Absence::class); + + if ($this->hasActiveRequest(Auth::user())) { + return redirect() + ->back() + ->with('error', __('You already have an active request. Cancel it or let it expire first.')); + } + + + $absence = Absence::create([ + 'requesterID' => Auth::user()->id, + 'start' => $request->start_date, + 'predicted_end' => $request->predicted_end, + 'available_assist' => $request->available_assist == "on", + 'reason' => $request->reason, + 'status' => 'PENDING', + ]); + + return redirect() + ->to(route('absences.show', ['absence' => $absence->id])) + ->with('success', 'Absence request submitted for approval. You will receive email confirmation shortly.'); + } + + /** + * Display the specified absence request. + * + * @param \App\Absence $absence + */ + public function show(Absence $absence) + { + $this->authorize('view', $absence); + + return view('dashboard.absences.view') + ->with([ + 'absence' => $absence, + 'totalDays' => Carbon::parse($absence->start)->diffInDays($absence->predicted_end) + ]); + } + + /** + * Approve the specified absence. + * + * @param Absence $absence + * @return RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function approveAbsence(Absence $absence): RedirectResponse + { + $this->authorize('approve', $absence); + + try + { + $absence->setApproved(); + } + catch (AbsenceNotActionableException $notActionableException) + { + return redirect() + ->back() + ->with('error', $notActionableException->getMessage()); + } + + return redirect() + ->back() + ->with('success', __('Absence request successfully approved. It will automatically transition to "Ended" on its predicted end date.')); + } + + + /** + * Decline the specified absence. + * + * @param Absence $absence + * @return RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function declineAbsence(Absence $absence): RedirectResponse + { + $this->authorize('decline', $absence); + + try + { + $absence->setDeclined(); + } catch (AbsenceNotActionableException $notActionableException) + { + return redirect() + ->back() + ->with('error', $notActionableException->getMessage()); + } + + return redirect() + ->back() + ->with('success', __('Absence request successfully declined.')); + } + + + /** + * Cancel the specified absence. + * + * @param Absence $absence + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function cancelAbsence(Absence $absence): \Illuminate\Http\RedirectResponse + { + $this->authorize('cancel', $absence); + + try + { + $absence->setCancelled(); + } + catch (AbsenceNotActionableException $notActionableException) + { + return redirect() + ->back() + ->with('error', $notActionableException->getMessage()); + } + + return redirect() + ->back() + ->with('success', __('Absence request successfully cancelled.')); + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Absence $absence + * @return \Illuminate\Http\RedirectResponse + */ + public function destroy(Absence $absence) + { + $this->authorize('delete', $absence); + + if ($absence->delete()) { + return redirect() + ->to(route('absences.index')) + ->with('success', __('Absence request deleted.')); + } + } +} diff --git a/app/Http/Controllers/ApplicationController.php b/app/Http/Controllers/ApplicationController.php old mode 100644 new mode 100755 index bcedc0a..822020b --- a/app/Http/Controllers/ApplicationController.php +++ b/app/Http/Controllers/ApplicationController.php @@ -1,59 +1,58 @@ . + */ + namespace App\Http\Controllers; use App\Application; - -use App\Response; -use App\Vacancy; -use App\User; - -use App\Events\ApplicationDeniedEvent; -use App\Notifications\NewApplicant; -use App\Notifications\ApplicationMoved; - +use App\Exceptions\ApplicationNotFoundException; +use App\Exceptions\IncompleteApplicationException; +use App\Exceptions\UnavailableApplicationException; +use App\Exceptions\VacancyNotFoundException; +use App\Facades\IP; +use App\Services\ApplicationService; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Validator; -use Illuminate\Support\Facades\App; -use Illuminate\Support\Facades\Log; - -use ContextAwareValidator; class ApplicationController extends Controller { - private function canVote($votes) - { - $allvotes = collect([]); + private $applicationService; - foreach ($votes as $vote) - { - if ($vote->userID == Auth::user()->id) - { - $allvotes->push($vote); - } - } + public function __construct(ApplicationService $applicationService) { - return ($allvotes->count() == 1) ? false : true; + $this->applicationService = $applicationService; } - public function showUserApps() { - return view('dashboard.user.applications') ->with('applications', Auth::user()->applications); } - public function showUserApp(Request $request, Application $application) { $this->authorize('view', $application); - if (!is_null($application)) - { + if (!is_null($application)) { return view('dashboard.user.viewapp') ->with( [ @@ -62,210 +61,88 @@ class ApplicationController extends Controller 'structuredResponses' => json_decode($application->response->responseData, true), 'formStructure' => $application->response->form, 'vacancy' => $application->response->vacancy, - 'canVote' => $this->canVote($application->votes) + 'canVote' => $this->applicationService->canVote($application->votes), ] ); - } - else - { - $request->session()->flash('error', 'The application you requested could not be found.'); + } else { + $request->session()->flash('error', __('The application you requested could not be found.')); } return redirect()->back(); + } - - - public function showAllApps() + public function showAllApps(Request $request) { $this->authorize('viewAny', Application::class); return view('dashboard.appmanagement.all') - ->with('applications', Application::paginate(6)); + ->with('applications', Application::orderBy('applicationStatus', 'ASC')->paginate(6)); + } - public function showAllPendingApps() + public function renderApplicationForm($vacancySlug) { - $this->authorize('viewAny', Application::class); - - return view('dashboard.appmanagement.outstandingapps') - ->with('applications', Application::where('applicationStatus', 'STAGE_SUBMITTED')->get()); - } - - - public function showPendingInterview() - { - $this->authorize('viewAny', Application::class); - $applications = Application::with('appointment', 'user')->get(); - $count = 0; - - $pendingInterviews = collect([]); - $upcomingInterviews = collect([]); - - - foreach ($applications as $application) - { - if (!is_null($application->appointment) && $application->appointment->appointmentStatus == 'CONCLUDED') - { - $count =+ 1; - } - - switch ($application->applicationStatus) - { - case 'STAGE_INTERVIEW': - $upcomingInterviews->push($application); - - break; - - case 'STAGE_INTERVIEW_SCHEDULED': - $pendingInterviews->push($application); - - break; - } - + try { + return $this->applicationService->renderForm($vacancySlug); } - - return view('dashboard.appmanagement.interview') - ->with([ - 'finishedCount' => $count, - 'applications' => $pendingInterviews, - 'upcomingApplications' => $upcomingInterviews - ]); - } - - - - public function showPeerReview() - { - $this->authorize('viewAny', Application::class); - return view('dashboard.appmanagement.peerreview') - ->with('applications', Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get()); - - } - - - - public function renderApplicationForm(Request $request, $vacancySlug) - { - // FIXME: Get rid of references to first(), this is a wonky query - $vacancyWithForm = Vacancy::with('forms')->where('vacancySlug', $vacancySlug)->get(); - - $firstVacancy = $vacancyWithForm->first(); - - if (!$vacancyWithForm->isEmpty() && $firstVacancy->vacancyCount !== 0 && $firstVacancy->vacancyStatus == 'OPEN') - { - - return view('dashboard.application-rendering.apply') - ->with([ - - 'vacancy' => $vacancyWithForm->first(), - 'preprocessedForm' => json_decode($vacancyWithForm->first()->forms->formStructure, true) - - ]); + catch (ApplicationNotFoundException $ex) { + return redirect() + ->back() + ->with('error', $ex->getMessage()); } - else - { - abort(404, 'The application you\'re looking for could not be found or it is currently unavailable.'); - } - } - - public function saveApplicationAnswers(Request $request, $vacancySlug) { - $vacancy = Vacancy::with('forms')->where('vacancySlug', $vacancySlug)->get(); + try { - if ($vacancy->first()->vacancyCount == 0 || $vacancy->first()->vacancyStatus !== 'OPEN') - { + $this->applicationService->fillForm(Auth::user(), $request->all(), $vacancySlug); - $request->session()->flash('error', 'This application is unavailable.'); - return redirect()->back(); + } catch (VacancyNotFoundException | IncompleteApplicationException | UnavailableApplicationException $e) { + return redirect() + ->back() + ->with('error', $e->getMessage()); } - Log::info('Processing new application!'); - - $formStructure = json_decode($vacancy->first()->forms->formStructure, true); - $responseValidation = ContextAwareValidator::getResponseValidator($request->all(), $formStructure); - - Log::info('Built response & validator structure!'); - - if (!$responseValidation->get('validator')->fails()) - { - $response = Response::create([ - 'responseFormID' => $vacancy->first()->forms->id, - 'associatedVacancyID' => $vacancy->first()->id, // Since a form can be used by multiple vacancies, we can only know which specific vacancy this response ties to by using a vacancy ID - 'responseData' => $responseValidation->get('responseStructure') - ]); - - Log::info('Registered form response for user ' . Auth::user()->name . ' for vacancy ' . $vacancy->first()->vacancyName); - - $application = Application::create([ - 'applicantUserID' => Auth::user()->id, - 'applicantFormResponseID' => $response->id, - 'applicationStatus' => 'STAGE_SUBMITTED', - ]); - - Log::info('Submitted application for user ' . Auth::user()->name . ' with response ID' . $response->id); - - foreach(User::all() as $user) - { - if ($user->hasRole('admin')) - { - $user->notify((new NewApplicant($application, $vacancy->first()))->delay(now()->addSeconds(10))); - } - } - - $request->session()->flash('success', 'Thank you for your application! It will be reviewed as soon as possible.'); - return redirect()->to(route('showUserApps')); - } - else - { - Log::warning('Application form for ' . Auth::user()->name . ' contained errors, resetting!'); - $request->session()->flash('error', 'There are one or more errors in your application. Please make sure none of your fields are empty, since they are all required.'); - - } - - return redirect()->back(); + return redirect() + ->to(route('showUserApps')) + ->with('success', __('Thank you! Your application has been processed and our team will get to it shortly.')); } public function updateApplicationStatus(Request $request, Application $application, $newStatus) { + $messageIsError = false; $this->authorize('update', Application::class); - switch ($newStatus) + try { + $status = $this->applicationService->updateStatus($application, $newStatus); + } catch (\LogicException $ex) { - case 'deny': - - event(new ApplicationDeniedEvent($application)); - break; - - case 'interview': - Log::info('User ' . Auth::user()->name . ' has moved application ID ' . $application->id . 'to interview stage'); - $request->session()->flash('success', 'Application moved to interview stage! (:'); - $application->setStatus('STAGE_INTERVIEW'); - - $application->user->notify(new ApplicationMoved()); - break; - - default: - $request->session()->flash('error', 'There are no suitable statuses to update to. Do not mess with the URL.'); + return redirect() + ->back() + ->with('error', $ex->getMessage()); } - return redirect()->back(); + return redirect() + ->back() + ->with('success', $status); } + /** + * @throws \Illuminate\Auth\Access\AuthorizationException + * @throws \Exception + */ public function delete(Request $request, Application $application) { + $this->authorize('delete', $application); + $this->applicationService->delete($application); - $this->authorize('delete', $application); - $application->delete(); // observers will run, cleaning it up - - $request->session()->flash('success', 'Application deleted. Comments, appointments and responses have also been deleted.'); - return redirect()->back(); + return redirect() + ->back() + ->with('success', __('Application deleted. Comments, appointments and responses have also been deleted.')); } - } diff --git a/app/Http/Controllers/AppointmentController.php b/app/Http/Controllers/AppointmentController.php old mode 100644 new mode 100755 index 8ed2722..2a8f19b --- a/app/Http/Controllers/AppointmentController.php +++ b/app/Http/Controllers/AppointmentController.php @@ -1,94 +1,124 @@ . + */ + namespace App\Http\Controllers; use App\Application; -use App\Http\Requests\SaveNotesRequest; -use Carbon\Carbon; -use Illuminate\Http\Request; use App\Appointment; -use App\Notifications\ApplicationMoved; -use App\Notifications\AppointmentScheduled; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Log; +use App\Exceptions\InvalidAppointmentException; +use App\Exceptions\InvalidAppointmentStatusException; +use App\Http\Requests\CancelAppointmentRequest; +use App\Http\Requests\SaveNotesRequest; +use App\Services\AppointmentService; +use App\Services\MeetingNoteService; +use Carbon\Carbon; +use Illuminate\Auth\Access\AuthorizationException; +use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; class AppointmentController extends Controller { - private $allowedPlatforms = [ - 'ZOOM', - 'DISCORD', - 'SKYPE', - 'MEET', - 'TEAMSPEAK' + private $appointmentService; + private $meetingNoteService; - ]; - public function saveAppointment(Request $request, Application $application) + public function __construct(AppointmentService $appointmentService, MeetingNoteService $meetingNoteService) { + + $this->appointmentService = $appointmentService; + $this->meetingNoteService = $meetingNoteService; + } + + public function saveAppointment(Request $request, Application $application): RedirectResponse { $this->authorize('create', Appointment::class); + $appointmentDate = Carbon::parse($request->appointmentDateTime); + $this->appointmentService->createAppointment($application, $appointmentDate, $request->appointmentDescription, $request->appointmentLocation); - $appointment = Appointment::create([ - 'appointmentDescription' => $request->appointmentDescription, - 'appointmentDate' => $appointmentDate->toDateTimeString(), - 'applicationID' => $application->id, - 'appointmentLocation' => (in_array($request->appointmentLocation, $this->allowedPlatforms)) ? $request->appointmentLocation : 'DISCORD', - ]); - $application->setStatus('STAGE_INTERVIEW_SCHEDULED'); - - - Log::info('User ' . Auth::user()->name . ' has scheduled an appointment with ' . $application->user->name . ' for application ID' . $application->id, [ - 'datetime' => $appointmentDate->toDateTimeString(), - 'scheduled' => now() - ]); - - $application->user->notify(new AppointmentScheduled($appointment)); - $request->session()->flash('success', 'Appointment successfully scheduled @ ' . $appointmentDate->toDateTimeString()); - - - return redirect()->back(); + return redirect() + ->back() + ->with('success',__('Appointment successfully scheduled @ :appointmentTime', ['appointmentTime', $appointmentDate->toDateTimeString()])); } - public function updateAppointment(Request $request, Application $application, $status) + /** + * @throws AuthorizationException + */ + public function updateAppointment(Application $application, string $status): RedirectResponse { - $this->authorize('update', $application->appointment); + $this->authorize('update', $application->appointment); - $validStatuses = [ - 'SCHEDULED', - 'CONCLUDED' - ]; + try { + $this->appointmentService->updateAppointment($application, $status); - // NOTE: This is a little confusing, refactor - $application->appointment->appointmentStatus = (in_array($status, $validStatuses)) ? strtoupper($status) : 'SCHEDULED'; - $application->appointment->save(); + return redirect() + ->back() + ->with('success', __("Interview finished! Staff members can now vote on it.")); - $application->setStatus('STAGE_PEERAPPROVAL'); - $application->user->notify(new ApplicationMoved()); - - - $request->session()->flash('success', 'Interview finished! Staff members can now vote on it.'); - return redirect()->back(); + } + catch (InvalidAppointmentStatusException $ex) { + return redirect() + ->back() + ->with('error', $ex->getMessage()); + } } - // also updates + public function deleteAppointment(CancelAppointmentRequest $request, Application $application) + { + $this->authorize('update', $application->appointment); + + try { + + $this->appointmentService->deleteAppointment($application, $request->reason); + + return redirect() + ->back() + ->with('success', __('Appointment cancelled.')); + + } + catch (\Exception $ex) { + return redirect() + ->back() + ->with('error', $ex->getMessage()); + } + + + } + + + public function saveNotes(SaveNotesRequest $request, Application $application) { - if (!is_null($application)) - { - $application->load('appointment'); + try { - $application->appointment->meetingNotes = $request->noteText; - $application->appointment->save(); + $this->meetingNoteService->addToApplication($application, $request->noteText); - $request->session()->flash('success', 'Meeting notes have been saved.'); + return redirect() + ->back() + ->with('success', 'Saved notes.'); + + } catch (InvalidAppointmentException $ex) { + return redirect() + ->back() + ->with('error', $ex->getMessage()); } - else - { - $request->session()->flash('error', 'There\'s no appointment to save notes to!'); - } - - return redirect()->back(); } - } diff --git a/app/Http/Controllers/Auth/ConfirmPasswordController.php b/app/Http/Controllers/Auth/ConfirmPasswordController.php old mode 100644 new mode 100755 index 71a9592..10760cc --- a/app/Http/Controllers/Auth/ConfirmPasswordController.php +++ b/app/Http/Controllers/Auth/ConfirmPasswordController.php @@ -1,9 +1,27 @@ . + */ + namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; -use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\ConfirmsPasswords; class ConfirmPasswordController extends Controller diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php old mode 100644 new mode 100755 index 465c39c..2ddd570 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php old mode 100644 new mode 100755 index 47413e2..e9f81a1 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -1,12 +1,33 @@ . + */ + namespace App\Http\Controllers\Auth; -use App\User; use App\Http\Controllers\Controller; -use App\Providers\RouteServiceProvider; +use App\User; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; +use App\Facades\IP; +use Laravel\Socialite\Facades\Socialite; class LoginController extends Controller { @@ -48,22 +69,38 @@ class LoginController extends Controller { $user = User::where('email', $request->email)->first(); - if ($user) - { + if ($user) { $isBanned = $user->isBanned(); - if ($isBanned) - { + if ($isBanned) { return false; - } - else - { + } else { return $this->originalAttemptLogin($request); } } return $this->originalAttemptLogin($request); - } + public function authenticated(Request $request, User $user) + { + if (IP::shouldCollect()) { + if ($user->originalIP !== $request->ip()) + { + Log::alert('User IP address changed from last login. Updating.', [ + 'prev' => $user->originalIP, + 'new' => $request->ip() + ]); + $user->originalIP = $request->ip(); + $user->save(); + } + } + } + public function discordRedirect() { + return Socialite::driver('discord')->redirect(); + } + + public function discordCallback() { + // TODO; + } } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php old mode 100644 new mode 100755 index c6b3364..e02398d --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -1,15 +1,34 @@ . + */ + namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Profile; -use App\Providers\RouteServiceProvider; use App\User; +use App\Facades\Options; +use App\Facades\IP; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; -use function GuzzleHttp\Psr7\str; class RegisterController extends Controller { @@ -47,10 +66,8 @@ class RegisterController extends Controller { $users = User::where('originalIP', \request()->ip())->get(); - foreach($users as $user) - { - if ($user && $user->isBanned()) - { + foreach ($users as $user) { + if ($user && $user->isBanned()) { abort(403, 'You do not have permission to access this page.'); } } @@ -66,13 +83,32 @@ class RegisterController extends Controller */ protected function validator(array $data) { + $password = ['required', 'string', 'confirmed']; + + switch (Options::getOption('pw_security_policy')) + { // this could be better structured, switch doesn't feel right + case 'off': + $password = ['required', 'string', 'confirmed']; + break; + case 'low': + $password = ['required', 'string', 'min:10', 'confirmed']; + break; + + case 'medium': + $password = ['required', 'string', 'confirmed', 'regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[#?!@$%^&*-]).{12,}$/']; + break; + + case 'high': + $password = ['required', 'string', 'confirmed', 'regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{20,}$/']; + } + return Validator::make($data, [ - 'uuid' => ['required', 'string', 'unique:users', 'min:32', 'max:32'], + 'uuid' => (Options::getOption('requireGameLicense') && Options::getOption('currentGame') == 'MINECRAFT') ? ['required', 'string', 'unique:users', 'min:32', 'max:32'] : ['nullable', 'string'], 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], - 'password' => ['required', 'string', 'min:10', 'confirmed', 'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$/'], + 'password' => $password, ], [ - 'uuid.required' => 'Please enter a valid (and Premium) Minecraft username! We do not support cracked users.' + 'uuid.required' => 'Please enter a valid (and Premium) Minecraft username! We do not support cracked users.', ]); } @@ -84,19 +120,16 @@ class RegisterController extends Controller */ protected function create(array $data) { - $user = User::create([ - 'uuid' => $data['uuid'], + 'uuid' => $data['uuid'] ?? "disabled", 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), - 'originalIP' => request()->ip() + 'originalIP' => IP::shouldCollect() ? request()->ip() : '0.0.0.0', ]); - // It's not the registration controller's concern to create a profile for the user, - // so this code has been moved to it's respective observer, following the separation of concerns pattern. - $user->assignRole('user'); + return $user; } } diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php old mode 100644 new mode 100755 index 6c0c13a..bbf75a7 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -1,9 +1,27 @@ . + */ + namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; -use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\ResetsPasswords; class ResetPasswordController extends Controller diff --git a/app/Http/Controllers/Auth/TwofaController.php b/app/Http/Controllers/Auth/TwofaController.php old mode 100644 new mode 100755 index a3ecac9..d8bad0e --- a/app/Http/Controllers/Auth/TwofaController.php +++ b/app/Http/Controllers/Auth/TwofaController.php @@ -1,16 +1,32 @@ . + */ + namespace App\Http\Controllers\Auth; -use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Traits\AuthenticatesTwoFactor; class TwofaController extends Controller { - use AuthenticatesTwoFactor; - - - protected $redirectTo = '/dashboard'; + use AuthenticatesTwoFactor; + protected $redirectTo = '/dashboard'; } diff --git a/app/Http/Controllers/Auth/VerificationController.php b/app/Http/Controllers/Auth/VerificationController.php old mode 100644 new mode 100755 index 482a167..74be54b --- a/app/Http/Controllers/Auth/VerificationController.php +++ b/app/Http/Controllers/Auth/VerificationController.php @@ -1,9 +1,27 @@ . + */ + namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; -use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\VerifiesEmails; class VerificationController extends Controller diff --git a/app/Http/Controllers/BanController.php b/app/Http/Controllers/BanController.php old mode 100644 new mode 100755 index 3ae2a42..97075d3 --- a/app/Http/Controllers/BanController.php +++ b/app/Http/Controllers/BanController.php @@ -1,92 +1,86 @@ . + */ + namespace App\Http\Controllers; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; use App\Ban; -use App\User; use App\Events\UserBannedEvent; use App\Http\Requests\BanUserRequest; +use App\Services\AccountSuspensionService; +use App\User; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; class BanController extends Controller { + protected $suspensionService; + + public function __construct(AccountSuspensionService $suspensionService) + { + // Inject the service via DI + $this->suspensionService = $suspensionService; + } + public function insert(BanUserRequest $request, User $user) { + if (config('demo.is_enabled')) { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } $this->authorize('create', [Ban::class, $user]); - if (is_null($user->bans)) - { - $reason = $request->reason; - $duration = strtolower($request->durationOperator); - $durationOperand = $request->durationOperand; + if (!$this->suspensionService->isSuspended($user)) { - $expiryDate = now(); + $this->suspensionService->suspend($request->reason, $request->duration, $user, $request->suspensionType); + $request->session()->flash('success', __('Account suspended.')); - if (!empty($duration)) - { - switch($duration) - { - case 'days': - $expiryDate->addDays($durationOperand); - break; + } else { - case 'weeks': - $expiryDate->addWeeks($durationOperand); - break; - - case 'months': - $expiryDate->addMonths($durationOperand); - break; - - case 'years': - $expiryDate->addYears($durationOperand); - break; - } - } - else - { - // Essentially permanent - $expiryDate->addYears(5); - } - - $ban = Ban::create([ - 'userID' => $user->id, - 'reason' => $reason, - 'bannedUntil' => $expiryDate->format('Y-m-d H:i:s'), - 'userAgent' => "Unknown", - 'authorUserID' => Auth::user()->id - ]); - - event(new UserBannedEvent($user, $ban)); - $request->session()->flash('success', 'User banned successfully! Ban ID: #' . $ban->id); - - } - else - { - $request->session()->flash('error', 'User already banned!'); + $request->session()->flash('error', __('Account already suspended!')); } return redirect()->back(); } - public function delete(Request $request, User $user) { + if (config('demo.is_enabled')) { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } $this->authorize('delete', $user->bans); - if (!is_null($user->bans)) - { - $user->bans->delete(); - $request->session()->flash('success', 'User unbanned successfully!'); - } - else - { - $request->session()->flash('error', 'This user isn\'t banned!'); + if ($this->suspensionService->isSuspended($user)) { + + $this->suspensionService->unsuspend($user); + $request->session()->flash('success', __('Account unsuspended successfully!')); + + } else { + $request->session()->flash('error', __('This account isn\'t suspended!')); } return redirect()->back(); diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php old mode 100644 new mode 100755 index 09d2aa2..609c0e3 --- a/app/Http/Controllers/CommentController.php +++ b/app/Http/Controllers/CommentController.php @@ -1,57 +1,62 @@ . + */ + namespace App\Http\Controllers; +use App\Application; +use App\Comment; +use App\Http\Requests\NewCommentRequest; +use App\Services\CommentService; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; -use App\Http\Requests\NewCommentRequest; - -use App\Comment; -use App\Application; -use App\Notifications\NewComment; -use App\User; class CommentController extends Controller { + private $commentService; - public function index() - { - // + public function __construct(CommentService $commentService) { + $this->commentService = $commentService; } public function insert(NewCommentRequest $request, Application $application) { $this->authorize('create', Comment::class); + $comment = $this->commentService->addComment($application, $request->comment); - $comment = Comment::create([ - 'authorID' => Auth::user()->id, - 'applicationID' => $application->id, - 'text' => $request->comment - ]); - - if ($comment) - { - - $request->session()->flash('success', 'Comment posted! (:'); - } - else - { - $request->session()->flash('error', 'Something went wrong while posting your comment!'); + if ($comment) { + $request->session()->flash('success', __('Comment posted!')); + } else { + $request->session()->flash('error', __('Something went wrong while posting your comment!')); } return redirect()->back(); - } public function delete(Request $request, Comment $comment) { $this->authorize('delete', $comment); + $this->commentService->deleteComment($comment); - $comment->delete(); - $request->session()->flash('success', 'Comment deleted!'); - - return redirect()->back(); - + return redirect() + ->back() + ->with('success', __('Comment deleted!')); } - } diff --git a/app/Http/Controllers/ContactController.php b/app/Http/Controllers/ContactController.php old mode 100644 new mode 100755 index 7a2923f..b081aee --- a/app/Http/Controllers/ContactController.php +++ b/app/Http/Controllers/ContactController.php @@ -1,65 +1,63 @@ . + */ + namespace App\Http\Controllers; -use Illuminate\Http\Request; -use GuzzleHttp; +use App\Exceptions\FailedCaptchaException; use App\Notifications\NewContact; -use Illuminate\Support\Facades\Http; - +use App\Services\ContactService; use App\User; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Http; class ContactController extends Controller { - protected $users; + private $contactService; - public function __construct(User $users) + public function __construct(User $users, ContactService $contactService) { + $this->contactService = $contactService; $this->users = $users; } - public function create(Request $request) { - $name = $request->name; - $email = $request->email; - $subject = $request->subject; - $msg = $request->msg; + try { - $challenge = $request->input('captcha'); + $email = $request->email; + $msg = $request->msg; + $challenge = $request->input('captcha'); - // TODO: now: add middleware for this verification, move to invisible captcha - $verifyrequest = Http::asForm()->post(config('recaptcha.verify.apiurl'), [ - 'secret' => config('recaptcha.keys.secret'), - 'response' => $challenge, - 'remoteip' => $request->ip() - ]); + $this->contactService->sendMessage($request->ip(), $msg, $email, $challenge); + return redirect() + ->back() + ->with('success',__('Message sent successfully! We usually respond within 48 hours.')); - $response = json_decode($verifyrequest->getBody(), true); - - if (!$response['success']) - { - $request->session()->flash('error', 'Beep beep boop... Robot? Submission failed.'); - return redirect()->back(); + } catch (FailedCaptchaException $ex) { + return redirect() + ->back() + ->with('error', $ex->getMessage()); } - - - foreach(User::all() as $user) - { - if ($user->hasRole('admin')) - { - $user->notify(new NewContact(collect([ - 'message' => $msg, - 'ip' => $request->ip(), - 'email' => $email - ]))); - } - } - - $request->session()->flash('success', 'Message sent successfully! We usually respond within 48 hours.'); - return redirect()->back(); } } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php old mode 100644 new mode 100755 index a0a2a8a..5f92f69 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Controllers; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php old mode 100644 new mode 100755 index d397d89..cb946e1 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -1,31 +1,61 @@ . + */ + namespace App\Http\Controllers; -use Illuminate\Http\Request; -use App\Vacancy; -use App\User; -use App\Ban; use App\Application; +use App\User; +use App\Vacancy; +use Illuminate\Support\Facades\Auth; class DashboardController extends Controller { + // Note: The dashboard doesn't need a service because it doesn't contain any significant business logic public function index() { $totalPeerReview = Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get()->count(); $totalNewApplications = Application::where('applicationStatus', 'STAGE_SUBMITTED')->get()->count(); $totalDenied = Application::where('applicationStatus', 'DENIED')->get()->count(); + $vacancies = Vacancy::where('vacancyStatus', '<>', 'CLOSED')->get(); + + $totalDeniedSingle = Application::where([ + ['applicationStatus', '=', 'DENIED'], + ['applicantUserID', '=', Auth::user()->id] + ])->get(); + + $totalNewSingle = Application::where([ + ['applicationStatus', '=', 'STAGE_SUBMITTED'], + ['applicantUserID', '=', Auth::user()->id] + ])->get(); return view('dashboard.dashboard') ->with([ - 'vacancies' => Vacancy::all(), - 'totalUserCount' => User::all()->count(), - 'totalDenied' => $totalDenied, - 'totalPeerReview' => $totalPeerReview, - 'totalNewApplications' => $totalNewApplications + 'vacancies' => $vacancies, + 'totalUserCount' => User::all()->count(), + 'totalDenied' => $totalDenied, + 'totalPeerReview' => $totalPeerReview, + 'totalNewApplications' => $totalNewApplications, + 'totalNewSingle' => $totalNewSingle->count(), + 'totalDeniedSingle' => $totalDeniedSingle->count() ]); - } - } diff --git a/app/Http/Controllers/DevToolsController.php b/app/Http/Controllers/DevToolsController.php old mode 100644 new mode 100755 index 5c82d26..cd33d7d --- a/app/Http/Controllers/DevToolsController.php +++ b/app/Http/Controllers/DevToolsController.php @@ -1,48 +1,108 @@ . + */ + namespace App\Http\Controllers; use App\Application; use App\Events\ApplicationApprovedEvent; +use App\Events\ApplicationDeniedEvent; +use App\Services\AccountSuspensionService; use Illuminate\Http\Request; - +use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Auth; class DevToolsController extends Controller { - - // The use case for Laravel's gate and/or validation Requests is so tiny here that a full-blown policy would be overkill. - protected function isolatedAuthorise() - { - if (!Auth::user()->can('admin.developertools.use')) - { - abort(403, 'You\'re not authorized to access this page.'); - } + public function __construct() { + // } - public function index() - { - $this->isolatedAuthorise(); + private function singleAuthorise() { + if (! Auth::user()->can('admin.developertools.use')) { + abort(403, __('You\'re not authorized to access this page.')); + } + } + + public function index() { + $this->singleAuthorise(); + return view('dashboard.administration.devtools') - ->with('applications', Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get()); + ->with('applications', Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get()) + ->with('rejectApplications', Application::all()); } - public function forceVoteCount(Request $request) - { - $this->isolatedAuthorise(); + /** + * Force an application to be approved. + */ + public function forceApprovalEvent(Request $request) { + $this->singleAuthorise(); $application = Application::find($request->application); - if (!is_null($application)) - { - event(new ApplicationApprovedEvent($application)); + event(new ApplicationApprovedEvent($application)); - $request->session()->flash('success', 'Event dispatched! Please check the debug logs for more info'); - } - else - { - $request->session()->flash('error', 'Application doesn\'t exist!'); + return redirect() + ->back() + ->with('success', __('Event dispatched; Candidate approval sequence initiated.')); + } + + /** + * Force an application to be rejected. + */ + public function forceRejectionEvent(Request $request) + { + $this->singleAuthorise(); + $application = Application::findOrFail($request->application); + + event(new ApplicationDeniedEvent($application)); + + return redirect() + ->back() + ->with('success', __('Event dispatched; Candidate rejection sequence initiated.')); + } + + public function evaluateVotes() { + + $this->singleAuthorise(); + + $code = Artisan::call("votes:evaluate"); + + return redirect() + ->back() + ->with('success', 'Ran vote evaluation logic, with exit code ' . $code); + + } + + public function purgeSuspensions(AccountSuspensionService $service) { + + $this->singleAuthorise(); + + if ($service->purgeExpired()) { + return redirect() + ->back() + ->with('success', 'Force purged all expired suspensions.'); } - return redirect()->back(); + return redirect() + ->back() + ->with('error', 'There were no expired suspensions (or no suspensions at all) to purge.'); + } } diff --git a/app/Http/Controllers/FormController.php b/app/Http/Controllers/FormController.php old mode 100644 new mode 100755 index 27d40dd..366475f --- a/app/Http/Controllers/FormController.php +++ b/app/Http/Controllers/FormController.php @@ -1,16 +1,40 @@ . + */ + namespace App\Http\Controllers; +use App\Exceptions\EmptyFormException; +use App\Exceptions\FormHasConstraintsException; use App\Form; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\Validator; -use Illuminate\Support\Facades\Auth; - +use App\Services\FormManagementService; use ContextAwareValidator; +use Illuminate\Http\Request; class FormController extends Controller { + private $formService; + + public function __construct(FormManagementService $formService) { + $this->formService = $formService; + } public function index() { @@ -24,61 +48,52 @@ class FormController extends Controller public function showFormBuilder() { $this->authorize('viewFormbuilder', Form::class); + return view('dashboard.administration.formbuilder'); } public function saveForm(Request $request) { - - $this->authorize('create', Form::class); - $fields = $request->all(); - - $contextValidation = ContextAwareValidator::getValidator($fields, true, true); - - if (!$contextValidation->get('validator')->fails()) + try { + $form = $this->formService->addForm($request->all()); + } + catch (EmptyFormException $ex) { - $storableFormStructure = $contextValidation->get('structure'); - - Form::create( - [ - 'formName' => $fields['formName'], - 'formStructure' => $storableFormStructure, - 'formStatus' => 'ACTIVE' - ] - ); - - $request->session()->flash('success', 'Form created! You can now link this form to a vacancy.'); - return redirect()->to(route('showForms')); + return redirect() + ->back() + ->with('exception', $ex->getMessage()); } - $request->session()->flash('errors', $contextValidation->get('validator')->errors()->getMessages()); - return redirect()->back(); + // Form is boolean or array + if ($form) + { + return redirect() + ->back() + ->with('success', __('Form created!')); + } + + return redirect() + ->back() + ->with('errors', $form); } public function destroy(Request $request, Form $form) { $this->authorize('delete', $form); - $deletable = true; + try { + $this->formService->deleteForm($form); + return redirect() + ->back() + ->with('success', __('Form deleted successfuly')); + + } catch (FormHasConstraintsException $ex) { + + return redirect() + ->back() + ->with('error', $ex->getMessage()); - if (!is_null($form) && !is_null($form->vacancies) && $form->vacancies->count() !== 0 || !is_null($form->responses)) - { - $deletable = false; } - - if ($deletable) - { - $form->delete(); - - $request->session()->flash('success', 'Form deleted successfully.'); - } - else - { - $request->session()->flash('error', 'You cannot delete this form because it\'s tied to one or more applications and ranks, or because it doesn\'t exist.'); - } - - return redirect()->back(); - } public function preview(Request $request, Form $form) @@ -93,9 +108,9 @@ class FormController extends Controller public function edit(Request $request, Form $form) { - $this->authorize('update', $form); + $this->authorize('update', $form); - return view('dashboard.administration.editform') + return view('dashboard.administration.editform') ->with('formStructure', json_decode($form->formStructure, true)) ->with('title', $form->formName) ->with('formID', $form->id); @@ -103,29 +118,16 @@ class FormController extends Controller public function update(Request $request, Form $form) { - $this->authorize('update', $form); + $this->authorize('update', $form); + $updatedForm = $this->formService->updateForm($form, $request->all()); - $contextValidation = ContextAwareValidator::getValidator($request->all(), true); - $this->authorize('update', $form); - - - if (!$contextValidation->get('validator')->fails()) - { - // Add the new structure into the form. New, subsquent fields will be identified by the "new" prefix - // This prefix doesn't actually change the app's behavior when it receives applications. - // Additionally, old applications won't of course display new and updated fields, because we can't travel into the past and get data for them - $form->formStructure = $contextValidation->get('structure'); - $form->save(); - - $request->session()->flash('success', 'Hooray! Your form was updated. New applications for it\'s vacancy will use it.'); - } - else - { - $request->session()->flash('errors', $contextValidation->get('validator')->errors()->getMessages()); - } - - return redirect()->to(route('previewForm', ['form' => $form->id])); + if ($updatedForm instanceof Form) { + return redirect()->to(route('previewForm', ['form' => $updatedForm->id])); + } + // array of errors + return redirect() + ->back() + ->with('errors', $updatedForm); } - } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php old mode 100644 new mode 100755 index 1afc222..f79d199 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -1,13 +1,32 @@ . + */ + namespace App\Http\Controllers; use App\Vacancy; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\DB; class HomeController extends Controller { + // doesn't need a service, because it doesn't contain major logic. + /** * Show the application dashboard. * @@ -15,13 +34,18 @@ class HomeController extends Controller */ public function index() { - $positions = Vacancy::where('vacancyStatus', 'OPEN') ->where('vacancyCount', '<>', 0) ->get(); - return view('home') ->with('positions', $positions); } + + public function pageGiveaway() + { + + return view('giveaway'); + + } } diff --git a/app/Http/Controllers/OptionsController.php b/app/Http/Controllers/OptionsController.php old mode 100644 new mode 100755 index c76a57c..10b03e7 --- a/app/Http/Controllers/OptionsController.php +++ b/app/Http/Controllers/OptionsController.php @@ -1,16 +1,45 @@ . + */ + namespace App\Http\Controllers; +use App\Exceptions\InvalidGamePreferenceException; +use App\Exceptions\OptionNotFoundException; use App\Facades\Options; use App\Options as Option; - +use App\Services\ConfigurationService; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Log; class OptionsController extends Controller { + private $configurationService; + + public function __construct(ConfigurationService $configurationService) { + + $this->configurationService = $configurationService; + + } + /** * Display a listing of the resource. * @@ -18,60 +47,59 @@ class OptionsController extends Controller */ public function index() { - // TODO: Obtain this from the facade - $options = Option::all(); - - + // TODO: Replace with settings package return view('dashboard.administration.settings') - ->with('options', $options); + ->with([ + 'options' => Options::getCategory('notifications'), + 'security' => [ // We could use the method above, but we need to set these names here for greater control in the template. This would nto be feasible for many options, we'd need to use a loop and the category method. + 'secPolicy' => Options::getOption('pw_security_policy'), + 'graceperiod' => Options::getOption('graceperiod'), + 'pwExpiry' => Options::getOption('password_expiry'), + 'requiresPMC' => Options::getOption('requireGameLicense'), + 'enforce2fa' => Options::getOption('force2fa') + ], + 'currentGame' => Options::getOption('currentGame') + ]); } - public function saveSettings(Request $request) - { - if (Auth::user()->can('admin.settings.edit')) - { - Log::debug('Updating application options', [ - 'ip' => $request->ip(), - 'ua' => $request->userAgent(), - 'username' => Auth::user()->username - ]); - foreach($request->all() as $optionName => $option) - { - try - { - Log::debug('Going through option ' . $optionName); - if (Options::optionExists($optionName)) - { - Log::debug('Option exists, updating to new values', [ - 'opt' => $optionName, - 'new_value' => $option - ]); - Options::changeOption($optionName, $option); - } - } - catch(\Exception $ex) - { - Log::error('Unable to update options!', [ - 'msg' => $ex->getMessage(), - 'trace' => $ex->getTraceAsString() - ]); - report($ex); + public function saveSettings(Request $request): \Illuminate\Http\RedirectResponse + { + try { - $errorCond = true; - $request->session()->flash('error', 'An error occurred while trying to save settings: ' . $ex->getMessage()); - } - } + if (Auth::user()->can('admin.settings.edit')) { + $this->configurationService->saveConfiguration($request->all()); - if (!isset($errorCond)) - { - $request->session()->flash('success', 'Settings saved successfully!'); - } - } - else - { - $request->session()->flash('error', 'You do not have permission to update this resource.'); - } + return redirect() + ->back() + ->with('success', __('Options updated successfully!')); + } - return redirect()->back(); - } + } catch (OptionNotFoundException | \Exception $ex) { + + return redirect() + ->back() + ->with('error', $ex->getMessage()); + + } + + return redirect() + ->back() + ->with('error', __('You do not have permission to update this resource.')); + } + + public function saveGameIntegration(Request $request) + { + try { + + $this->configurationService->saveGameIntegration($request->gamePref); + return redirect() + ->back() + ->with('success', __('Game preference updated.')); + + } catch (InvalidGamePreferenceException $ex) { + return redirect() + ->back() + ->with('error', $ex->getMessage()); + } + } } diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php old mode 100644 new mode 100755 index 0fc063d..d77b028 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -1,12 +1,30 @@ . + */ + namespace App\Http\Controllers; -use App\Http\Requests\ProfileSave; -use Illuminate\Support\Facades\Log; -use App\Profile; -use App\User; use App\Facades\IP; +use App\Http\Requests\ProfileSave; +use App\Services\ProfileService; +use App\User; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -14,18 +32,22 @@ use Spatie\Permission\Models\Role; class ProfileController extends Controller { + private $profileService; - public function index() - { + public function __construct(ProfileService $profileService) { + $this->profileService = $profileService; + } - return view('dashboard.user.directory') + public function index() + { + return view('dashboard.user.directory') ->with('users', User::with('profile', 'bans')->paginate(9)); - } + } public function showProfile() { - - $socialLinks = Auth::user()->profile->socialLinks ?? "[]"; + // TODO: Come up with cleaner social media solution, e.g. social media object + $socialLinks = Auth::user()->profile->socialLinks ?? '[]'; $socialMediaProfiles = json_decode($socialLinks, true); return view('dashboard.user.profile.userprofile') @@ -36,13 +58,10 @@ class ProfileController extends Controller 'insta' => $socialMediaProfiles['links']['insta'] ?? 'UpdateMe', 'discord' => $socialMediaProfiles['links']['discord'] ?? 'UpdateMe#12345', ]); - } - // Route model binding - public function showSingleProfile(Request $request, User $user) + public function showSingleProfile(User $user) { - $socialMediaProfiles = json_decode($user->profile->socialLinks, true); $createdDate = Carbon::parse($user->created_at); @@ -51,21 +70,26 @@ class ProfileController extends Controller $roleList = []; - - foreach($systemRoles as $role) - { - if (in_array($role, $userRoles)) - { - $roleList[$role] = true; - } - else - { - $roleList[$role] = false; - } + foreach ($systemRoles as $role) { + if (in_array($role, $userRoles)) { + $roleList[$role] = true; + } else { + $roleList[$role] = false; + } } - if (Auth::user()->is($user) || Auth::user()->can('profiles.view.others')) + $suspensionInfo = null; + if ($user->isBanned()) { + $suspensionInfo = [ + + 'isPermanent' => $user->bans->isPermanent, + 'reason' => $user->bans->reason, + 'bannedUntil' => $user->bans->bannedUntil + ]; + } + + if (Auth::user()->is($user) || Auth::user()->can('profiles.view.others')) { return view('dashboard.user.profile.displayprofile') ->with([ 'profile' => $user->profile, @@ -73,55 +97,21 @@ class ProfileController extends Controller 'twitter' => $socialMediaProfiles['links']['twitter'] ?? 'UpdateMe', 'insta' => $socialMediaProfiles['links']['insta'] ?? 'UpdateMe', 'discord' => $socialMediaProfiles['links']['discord'] ?? 'UpdateMe#12345', - 'since' => $createdDate->englishMonth . " " . $createdDate->year, + 'since' => $createdDate->englishMonth.' '.$createdDate->year, 'ipInfo' => IP::lookup($user->originalIP), - 'roles' => $roleList + 'roles' => $roleList, + 'suspensionInfo' => $suspensionInfo ]); + } else { + abort(403, __('You cannot view someone else\'s profile.')); } - else - { - abort(403, 'You cannot view someone else\'s profile.'); - } - } public function saveProfile(ProfileSave $request) { - $profile = User::find(Auth::user()->id)->profile; - $social = []; - - if (!is_null($profile)) - { - switch ($request->avatarPref) - { - case 'MOJANG': - $avatarPref = 'crafatar'; - - break; - case 'GRAVATAR': - $avatarPref = strtolower($request->avatarPref); - - break; - } - - $social['links']['github'] = $request->socialGithub; - $social['links']['twitter'] = $request->socialTwitter; - $social['links']['insta'] = $request->socialInsta; - $social['links']['discord'] = $request->socialDiscord; - - $profile->profileShortBio = $request->shortBio; - $profile->profileAboutMe = $request->aboutMe; - $profile->avatarPreference = $avatarPref; - $profile->socialLinks = json_encode($social); - - $newProfile = $profile->save(); - - $request->session()->flash('success', 'Profile settings saved successfully.'); - - } - - return redirect()->back(); - + $this->profileService->updateProfile(Auth::user()->id, $request); + return redirect() + ->back() + ->with('success', __('Profile updated.')); } - } diff --git a/app/Http/Controllers/ResponseController.php b/app/Http/Controllers/ResponseController.php deleted file mode 100644 index 64037c9..0000000 --- a/app/Http/Controllers/ResponseController.php +++ /dev/null @@ -1,10 +0,0 @@ -securityService = $securityService; + } + + public function save(SaveSecuritySettings $request) + { + $this->securityService->save($request->secPolicy, [ + 'graceperiod' => $request->graceperiod, + 'pwExpiry' => $request->pwExpiry, + 'enforce2fa' => $request->enforce2fa, + 'requirePMC' => $request->requirePMC + ]); + + return redirect() + ->back() + ->with('success', __('Settings saved.')); + + } +} diff --git a/app/Http/Controllers/StaffProfileController.php b/app/Http/Controllers/StaffProfileController.php deleted file mode 100644 index b20d4d1..0000000 --- a/app/Http/Controllers/StaffProfileController.php +++ /dev/null @@ -1,10 +0,0 @@ -. + */ + +namespace App\Http\Controllers; + +use App\Exceptions\InvalidInviteException; +use App\Exceptions\PublicTeamInviteException; +use App\Exceptions\UserAlreadyInvitedException; +use App\Http\Requests\EditTeamRequest; +use App\Http\Requests\NewTeamRequest; +use App\Http\Requests\SendInviteRequest; +use App\Mail\InviteToTeam; +use App\Services\TeamService; +use App\Team; +use App\User; +use App\Vacancy; +use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Mail; +use Mpociot\Teamwork\Exceptions\UserNotInTeamException; +use Mpociot\Teamwork\Facades\Teamwork; +use Mpociot\Teamwork\TeamInvite; + +class TeamController extends Controller +{ + private $teamService; + + public function __construct(TeamService $teamService) { + $this->teamService = $teamService; + } + + /** + * Display a listing of the resource. + * + */ + public function index() + { + $this->authorize('index', Team::class); + + $teams = Team::with('users.roles')->get(); + + return view('dashboard.teams.teams') + ->with('teams', $teams); + } + + /** + * Store a newly created resource in storage. + * + * @param NewTeamRequest $request + * @return RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function store(NewTeamRequest $request) + { + $this->authorize('create', Team::class); + $this->teamService->createTeam($request->teamName, Auth::user()->id); + + return redirect() + ->back() + ->with('success', __('Team successfully created.')); + } + + /** + * Show the form for editing the specified resource. + * + * @param Team $team + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function edit(Team $team) + { + $this->authorize('update', $team); + return view('dashboard.teams.edit-team') + ->with([ + 'team' => $team, + 'users' => User::all(), + 'vacancies' => Vacancy::with('teams')->get()->all() + ]); + } + + /** + * Update the specified resource in storage. + * + * @param EditTeamRequest $request + * @param Team $team + * @return RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function update(EditTeamRequest $request, Team $team): RedirectResponse + { + $this->authorize('update', $team); + $team = $this->teamService->updateTeam($team, $request->teamDescription, $request->joinType); + + + if ($team) { + return redirect() + ->to(route('teams.index')) + ->with('success', __('Team updated.')); + } + + return redirect() + ->back() + ->with('error', __('An error ocurred while trying to update this team.')); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // wip + } + + public function invite(SendInviteRequest $request, Team $team): RedirectResponse + { + $this->authorize('invite', $team); + + try { + + $this->teamService->inviteUser($team, $request->user); + + return redirect() + ->back() + ->with('success', __('User invited successfully!')); + + } catch (UserAlreadyInvitedException | PublicTeamInviteException $ex) { + return redirect() + ->back() + ->with('error', $ex->getMessage()); + } + } + + public function processInviteAction(Request $request, $action, $token): RedirectResponse + { + try { + + $this->teamService->processInvite(Auth::user(), $action, $token); + + return redirect() + ->to(route('teams.index')) + ->with('success', __('Invite processed successfully!')); + + } catch (InvalidInviteException $e) { + + return redirect() + ->back() + ->with('error', $e->getMessage()); + + } + } + + public function switchTeam(Request $request, Team $team): RedirectResponse + { + $this->authorize('switchTeam', $team); + + try { + Auth::user()->switchTeam($team); + + $request->session()->flash('success', __('Switched teams! Your team dashboard will now use this context.')); + } catch (UserNotInTeamException $ex) { + $request->session()->flash('error', __('You can\'t switch to a team you don\'t belong to.')); + } + + return redirect()->back(); + } + + // Since it's a separate form, we shouldn't use the same update method + public function assignVacancies(Request $request, Team $team): RedirectResponse + { + $this->authorize('update', $team); + $message = $this->teamService->updateVacancies($team, $request->assocVacancies); + + return redirect() + ->back() + ->with('success', $message); + } +} diff --git a/app/Http/Controllers/TeamFileController.php b/app/Http/Controllers/TeamFileController.php new file mode 100755 index 0000000..30c5994 --- /dev/null +++ b/app/Http/Controllers/TeamFileController.php @@ -0,0 +1,141 @@ +fileService = $fileService; + } + + /** + * Display a listing of the resource. + * + * @param Request $request + */ + public function index(Request $request) + { + $this->authorize('index', TeamFile::class); + + if (is_null(Auth::user()->currentTeam)) + { + $request->session()->flash('error', 'Please choose a team before viewing it\'s files.'); + return redirect()->to(route('teams.index')); + } + + return view('dashboard.teams.team-files') + ->with('files', TeamFile::with('team', 'uploader')->paginate(6)); + } + + + /** + * Store a newly created resource in storage. + * + * @param UploadFileRequest $request + * @return RedirectResponse + */ + public function store(UploadFileRequest $request) + { + $this->authorize('store', TeamFile::class); + + if (config('demo.is_enabled')) + { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } + + try { + $caption = $request->caption; + $description = $request->description; + + $this->fileService->addFile($request->file('file'), Auth::user()->id, Auth::user()->currentTeam->id, $caption, $description); + + return redirect() + ->back() + ->with('success', __('File uploaded successfully.')); + + } catch (FileUploadException $uploadException) { + + return redirect() + ->back() + ->with('error', $uploadException->getMessage()); + + } + + } + + + public function download(Request $request, TeamFile $teamFile) + { + $this->authorize('download', TeamFile::class); + + try + { + return Storage::download($teamFile->fs_location, $teamFile->name); + } + catch (FileNotFoundException $ex) + { + $request->session()->flash('error', 'Sorry, but the requested file could not be found in storage. Sometimes, files may be physically deleted by admins, but not from the app\'s database.'); + return redirect()->back(); + + } + } + + /** + * Remove the specified resource from storage. + * + * @param Request $request + * @param \App\TeamFile $teamFile + * @return RedirectResponse + */ + public function destroy(Request $request, TeamFile $teamFile) + { + $this->authorize('delete', $teamFile); + + if (config('demo.is_enabled')) + { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } + + try + { + Storage::delete($teamFile->fs_location); + $teamFile->delete(); + + $request->session()->flash('success', __('File deleted successfully.')); + } + catch (\Exception $ex) + { + $request->session()->flash('error', __('There was an error deleting the file: :msg', ['msg' => $ex->getMessage()])); + } + + return redirect()->back(); + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php old mode 100644 new mode 100755 index cb494b6..c94a476 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -1,95 +1,63 @@ . + */ + namespace App\Http\Controllers; +use App\Ban; +use App\Http\Requests\Add2FASecretRequest; use App\Http\Requests\ChangeEmailRequest; use App\Http\Requests\ChangePasswordRequest; -use App\Http\Requests\FlushSessionsRequest; use App\Http\Requests\DeleteUserRequest; +use App\Http\Requests\FlushSessionsRequest; +use App\Http\Requests\Remove2FASecretRequest; use App\Http\Requests\SearchPlayerRequest; use App\Http\Requests\UpdateUserRequest; -use App\Http\Requests\Add2FASecretRequest; -use App\Http\Requests\Remove2FASecretRequest; - +use App\Notifications\ChangedPassword; +use App\Notifications\EmailChanged; +use App\Traits\DisablesFeatures; +use App\Traits\ReceivesAccountTokens; use App\User; -use App\Ban; - +use Google2FA; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Log; -use App\Facades\UUID; -use App\Notifications\EmailChanged; -use App\Notifications\ChangedPassword; use Spatie\Permission\Models\Role; -use Google2FA; - class UserController extends Controller { + use ReceivesAccountTokens; - - public function showStaffMembers() - { - $this->authorize('viewStaff', User::class); - - $staffRoles = [ - 'reviewer', - 'hiringManager', - 'admin' - ]; // TODO: Un-hardcode this, move to config/roles.php - $users = User::with('roles')->get(); - $staffMembers = collect([]); - - foreach($users as $user) - { - if (empty($user->roles)) - { - Log::debug($user->role->name); - Log::debug('Staff list: User without role detected; Ignoring'); - continue; - } - - foreach($user->roles as $role) - { - if (in_array($role->name, $staffRoles)) - { - $staffMembers->push($user); - continue 2; // Skip directly to the next user instead of comparing more roles for the current user - } - } - } - - return view('dashboard.administration.staff-members') - ->with([ - 'users' => $staffMembers - ]); - } - - public function showPlayers() + public function showUsers() { $this->authorize('viewPlayers', User::class); - $users = User::with('roles')->get(); - $players = collect([]); - - foreach($users as $user) - { - // TODO: Might be problematic if we don't check if the role is user - if (count($user->roles) == 1) - { - $players->push($user); - } - } - return view('dashboard.administration.players') ->with([ - 'users' => $players, - 'bannedUserCount' => Ban::all()->count() + 'users' => User::with('roles')->paginate('6'), + 'numUsers' => count(User::all()), + 'bannedUserCount' => Ban::all()->count(), ]); } - public function showPlayersLike(SearchPlayerRequest $request) { $this->authorize('viewPlayers', User::class); @@ -100,18 +68,18 @@ class UserController extends Controller ->orWhere('email', 'LIKE', "%{$searchTerm}%") ->get(); - if (!$matchingUsers->isEmpty()) - { $request->session()->flash('success', 'There were ' . $matchingUsers->count() . ' user(s) matching your search.'); + if (! $matchingUsers->isEmpty()) { + $request->session()->flash('success', __('There were :usersCount user(s) matching your search.', ['usersCount' => $matchingUsers->count()])); return view('dashboard.administration.players') ->with([ 'users' => $matchingUsers, - 'bannedUserCount' => Ban::all()->count() + 'numUsers' => count(User::all()), + 'bannedUserCount' => Ban::all()->count(), ]); - } - else - { - $request->session()->flash('error', 'Your search term did not return any results.'); + } else { + $request->session()->flash('error', __('Your search term did not return any results.')); + return redirect(route('registeredPlayerList')); } } @@ -120,14 +88,10 @@ class UserController extends Controller { $QRCode = null; - if (!$request->user()->has2FA()) - { - if ($request->session()->has('twofaAttemptFailed')) - { + if (! $request->user()->has2FA()) { + if ($request->session()->has('twofaAttemptFailed')) { $twoFactorSecret = $request->session()->get('current2FA'); - } - else - { + } else { $twoFactorSecret = Google2FA::generateSecretKey(32, ''); $request->session()->put('current2FA', $twoFactorSecret); } @@ -144,169 +108,177 @@ class UserController extends Controller ->with('twofaQRCode', $QRCode); } - public function flushSessions(FlushSessionsRequest $request) { // TODO: Move all log calls to a listener, which binds to an event fired by each significant event, such as this one // This will allow for other actions to be performed on certain events (like login failed event) Auth::logoutOtherDevices($request->currentPasswordFlush); - Log::notice('User ' . Auth::user()->name . ' has logged out other devices in their account', + Log::notice('User '.Auth::user()->name.' has logged out other devices in their account', [ 'originIPAddress' => $request->ip(), 'userID' => Auth::user()->id, - 'timestamp' => now() + 'timestamp' => now(), ]); - $request->session()->flash('success', 'Successfully logged out other devices. Remember to change your password if you think you\'ve been compromised.'); + $request->session()->flash('success', __('Successfully logged out other devices. Remember to change your password if you think you\'ve been compromised.')); + return redirect()->back(); } public function changePassword(ChangePasswordRequest $request) { + if (config('demo.is_enabled')) { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } $user = User::find(Auth::user()->id); - if (!is_null($user)) - { + if (! is_null($user)) { $user->password = Hash::make($request->newPassword); + $user->password_last_updated = now(); + $user->save(); - Log::info('User ' . $user->name . ' has changed their password', [ + Log::info('User '.$user->name.' has changed their password', [ 'originIPAddress' => $request->ip(), 'userID' => $user->id, - 'timestamp' => now() + 'timestamp' => now(), ]); $user->notify(new ChangedPassword()); Auth::logout(); + return redirect()->back(); } - } public function changeEmail(ChangeEmailRequest $request) { + if (config('demo.is_enabled')) { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } + $user = User::find(Auth::user()->id); - if (!is_null($user)) - { + if (! is_null($user)) { $user->email = $request->newEmail; $user->save(); - Log::notice('User ' . $user->name . ' has just changed their contact email address', [ + Log::notice('User '.$user->name.' has just changed their contact email address', [ 'originIPAddress' => $request->ip(), 'userID' => $user->id, - 'timestamp' => now() + 'timestamp' => now(), ]); $user->notify(new EmailChanged()); - $request->session()->flash('success', 'Your email address has been changed!'); - } - else - { - $request->session()->flash('error', 'There has been an error whilst trying to update your account. Please contact administrators.'); + $request->session()->flash('success', __('Your email address has been changed!')); + } else { + $request->session()->flash('error', __('There has been an error whilst trying to update your account. Please contact administrators.')); } return redirect()->back(); - } - - public function delete(DeleteUserRequest $request, User $user) { + if (config('demo.is_enabled')) { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } $this->authorize('delete', $user); - if ($request->confirmPrompt == 'DELETE ACCOUNT') - { + if ($request->confirmPrompt == 'DELETE ACCOUNT') { $user->delete(); - $request->session()->flash('success','User deleted successfully. PII has been erased.'); + $request->session()->flash('success', __('User deleted successfully.')); + } else { + $request->session()->flash('error', __('Wrong confirmation text! Try again.')); } - else - { - $request->session()->flash('error', 'Wrong confirmation text! Try again.'); - } - return redirect()->route('registeredPlayerList'); } public function update(UpdateUserRequest $request, User $user) { - - $this->authorize('adminEdit', $user); - - // Mass update would not be possible here without extra code, making route model binding useless - $user->email = $request->email; - $user->name = $request->name; - $user->uuid = $request->uuid; - - $existingRoles = Role::all() - ->pluck('name') - ->all(); - - $roleDiff = array_diff($existingRoles, $request->roles); - - // Adds roles that were selected. Removes roles that aren't selected if the user has them. - foreach($roleDiff as $deselectedRole) - { - if ($user->hasRole($deselectedRole) && $deselectedRole !== 'user') - { - $user->removeRole($deselectedRole); + if (config('demo.is_enabled')) { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); } - } + $this->authorize('adminEdit', $user); - foreach($request->roles as $role) - { - if (!$user->hasRole($role)) - { - $user->assignRole($role); + // Mass update would not be possible here without extra code, making route model binding useless + $user->email = $request->email; + $user->name = $request->name; + $user->uuid = $request->uuid; + + $existingRoles = Role::all() + ->pluck('name') + ->all(); + + $roleDiff = array_diff($existingRoles, $request->roles); + + // Adds roles that were selected. Removes roles that aren't selected if the user has them. + foreach ($roleDiff as $deselectedRole) { + if ($user->hasRole($deselectedRole) && $deselectedRole !== 'user') { + $user->removeRole($deselectedRole); + } } - } + foreach ($request->roles as $role) { + if (! $user->hasRole($role)) { + $user->assignRole($role); + } + } - $user->save(); - $request->session()->flash('success', 'User updated successfully!'); - - return redirect()->back(); + $user->save(); + $request->session()->flash('success', __('User updated successfully!')); + return redirect()->back(); } public function add2FASecret(Add2FASecretRequest $request) { + if (config('demo.is_enabled')) { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } + $currentSecret = $request->session()->get('current2FA'); $isValid = Google2FA::verifyKey($currentSecret, $request->otp); - if ($isValid) - { - $request->user()->twofa_secret = $currentSecret; - $request->user()->save(); + if ($isValid) { + $request->user()->twofa_secret = $currentSecret; + $request->user()->save(); - Log::warning('SECURITY: User activated two-factor authentication', [ - 'initiator' => $request->user()->email, - 'ip' => $request->ip() - ]); + Log::warning('SECURITY: User activated two-factor authentication', [ + 'initiator' => $request->user()->email, + 'ip' => $request->ip(), + ]); - Google2FA::login(); + Google2FA::login(); - Log::warning('SECURITY: Started two factor session automatically', [ - 'initiator' => $request->user()->email, - 'ip' => $request->ip() - ]); + Log::warning('SECURITY: Started two factor session automatically', [ + 'initiator' => $request->user()->email, + 'ip' => $request->ip(), + ]); - $request->session()->forget('current2FA'); + $request->session()->forget('current2FA'); - if ($request->session()->has('twofaAttemptFailed')) - $request->session()->forget('twofaAttemptFailed'); + if ($request->session()->has('twofaAttemptFailed')) { + $request->session()->forget('twofaAttemptFailed'); + } - - $request->session()->flash('success', '2FA succesfully enabled! You\'ll now be prompted for an OTP each time you log in.'); - } - else - { - $request->session()->flash('error', 'Incorrect code. Please reopen the 2FA settings panel and try again.'); - $request->session()->put('twofaAttemptFailed', true); + $request->session()->flash('success', __('2FA succesfully enabled! You\'ll now be prompted for an OTP each time you log in.')); + } else { + $request->session()->flash('error', __('Incorrect code. Please reopen the 2FA settings panel and try again.')); + $request->session()->put('twofaAttemptFailed', true); } return redirect()->back(); @@ -315,43 +287,44 @@ class UserController extends Controller public function remove2FASecret(Remove2FASecretRequest $request) { Log::warning('SECURITY: Disabling two factor authentication (user initiated)', [ - 'initiator' => $request->user()->email, - 'ip' => $request->ip() + 'initiator' => $request->user()->email, + 'ip' => $request->ip(), ]); $request->user()->twofa_secret = null; $request->user()->save(); - $request->session()->flash('success', 'Two-factor authentication disabled.'); + $request->session()->flash('success', __('Two-factor authentication disabled.')); + return redirect()->back(); } - - - public function terminate(Request $request, User $user) { $this->authorize('terminate', User::class); + if (config('demo.is_enabled')) { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } // TODO: move logic to policy - if (!$user->isStaffMember() || $user->is(Auth::user())) - { - $request->session()->flash('error', 'You cannot terminate this user.'); + if (! $user->isStaffMember() || $user->is(Auth::user())) { + $request->session()->flash('error', __('You cannot terminate this user.')); + return redirect()->back(); } - foreach ($user->roles as $role) - { - if ($role->name == 'user') - { - continue; - } + foreach ($user->roles as $role) { + if ($role->name == 'user') { + continue; + } - $user->removeRole($role->name); + $user->removeRole($role->name); } - Log::info('User ' . $user->name . ' has just been demoted.'); - $request->session()->flash('success', 'User terminated successfully.'); + Log::info('User '.$user->name.' has just been demoted.'); + $request->session()->flash('success', __('User terminated successfully.')); //TODO: Dispatch event return redirect()->back(); diff --git a/app/Http/Controllers/VacancyController.php b/app/Http/Controllers/VacancyController.php old mode 100644 new mode 100755 index fdb5ce0..6cfc3f5 --- a/app/Http/Controllers/VacancyController.php +++ b/app/Http/Controllers/VacancyController.php @@ -1,45 +1,65 @@ . + */ + namespace App\Http\Controllers; -use App\Http\Requests\VacancyRequest; -use App\Http\Requests\VacancyEditRequest; - -use App\Vacancy; -use App\User; +use App\Facades\JSON; use App\Form; - -use App\Notifications\VacancyClosed; - +use App\Http\Requests\VacancyEditRequest; +use App\Http\Requests\VacancyRequest; +use App\Notifications\VacancyStatusUpdated; +use App\User; +use App\Vacancy; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Notification; use Illuminate\Support\Str; -use Illuminate\Support\Facades\Auth; - class VacancyController extends Controller { public function index() { - $this->authorize('viewAny', Vacancy::class); + $this->authorize('viewAny', Vacancy::class); + return view('dashboard.administration.positions') ->with([ 'forms' => Form::all(), - 'vacancies' => Vacancy::all() + 'vacancies' => Vacancy::all(), ]); } public function store(VacancyRequest $request) { + $messageIsError = false; $this->authorize('create', Vacancy::class); + + + $form = Form::find($request->vacancyFormID); - if (!is_null($form)) - { - /* note: since we can't convert HTML back to Markdown, we'll have to do the converting when the user requests a page, - * and leave the database with Markdown only so it can be used and edited everywhere. - * for several vacancies, this would require looping through all of them and replacing MD with HTML, which is obviously not the most clean solution; - * however, the Model can be configured to return MD instead of HTML on that specific field saving us from looping. - */ + if (! is_null($form)) { + /* note: since we can't convert HTML back to Markdown, we'll have to do the converting when the user requests a page, + * and leave the database with Markdown only so it can be used and edited everywhere. + * for several vacancies, this would require looping through all of them and replacing MD with HTML, which is obviously not the most clean solution; + * however, the Model can be configured to return MD instead of HTML on that specific field saving us from looping. + */ Vacancy::create([ 'vacancyName' => $request->vacancyName, @@ -49,90 +69,94 @@ class VacancyController extends Controller 'permissionGroupName' => $request->permissionGroup, 'discordRoleID' => $request->discordRole, 'vacancyFormID' => $request->vacancyFormID, - 'vacancyCount' => $request->vacancyCount + 'vacancyCount' => $request->vacancyCount, ]); - $request->session()->flash('success', 'Vacancy successfully opened. It will now show in the home page.'); - } - else - { - $request->session()->flash('error', 'You cannot create a vacancy without a valid form.'); + $message = __('Vacancy successfully opened. It will now show in the home page.'); + + } else { + $message = __('You cannot create a vacancy without a valid form.'); + $messageIsError = true; } - return redirect()->back(); - + return redirect() + ->back() + ->with(($messageIsError) ? 'error' : 'success', $message); } public function updatePositionAvailability(Request $request, $status, Vacancy $vacancy) { - $this->authorize('update', $vacancy); - if (!is_null($vacancy)) - { + if (! is_null($vacancy)) { $type = 'success'; - switch ($status) - { + switch ($status) { case 'open': $vacancy->open(); - $message = "Position successfully opened!"; + $message = __('Position successfully opened!'); break; case 'close': $vacancy->close(); - $message = "Position successfully closed!"; + $message = __('Position successfully closed!'); - foreach(User::all() as $user) - { - if ($user->isStaffMember()) - { - $user->notify(new VacancyClosed($vacancy)); - } - } break; default: - $message = "Please do not tamper with the button's URLs. To report a bug, please contact an administrator."; + $message = __("Please do not tamper with the URLs. To report a bug, please contact an administrator."); $type = 'error'; } - } - else - { - $message = "The position you're trying to update doesn't exist!"; - $type = "error"; + + + } else { + $message = __("The position you're trying to update doesn't exist!"); + $type = 'error'; } - $request->session()->flash($type, $message); - return redirect()->back(); + if ($type !== 'error') { + Notification::send(User::role('reviewer')->get(), new VacancyStatusUpdated($vacancy, $status)); + } + + return redirect() + ->back() + ->with($type, $message); + } - public function edit(Request $request, Vacancy $vacancy) { - $this->authorize('update', $vacancy); + $this->authorize('update', $vacancy); + return view('dashboard.administration.editposition') ->with('vacancy', $vacancy); } - - public function update(VacancyEditRequest $request, Vacancy $vacancy) { - $this->authorize('update', $vacancy); + $this->authorize('update', $vacancy); - $vacancy->vacancyFullDescription = $request->vacancyFullDescription; - $vacancy->vacancyDescription = $request->vacancyDescription; - $vacancy->vacancyCount = $request->vacancyCount; + $vacancy->vacancyFullDescription = $request->vacancyFullDescription; + $vacancy->vacancyDescription = $request->vacancyDescription; + $vacancy->vacancyCount = $request->vacancyCount; - $vacancy->save(); - - $request->session()->flash('success', 'Vacancy successfully updated.'); - return redirect()->back(); + $vacancy->save(); + return redirect() + ->back() + ->with('success', __('Vacancy successfully updated.')); } + public function delete(Request $request, Vacancy $vacancy) + { + $this->authorize('delete', $vacancy); + $vacancy->delete(); + + return redirect() + ->back() + ->with('success', __('Vacancy deleted. All applications associated with it are now gone too.')); + } } diff --git a/app/Http/Controllers/VoteController.php b/app/Http/Controllers/VoteController.php old mode 100644 new mode 100755 index eba3ae1..e2d3bf2 --- a/app/Http/Controllers/VoteController.php +++ b/app/Http/Controllers/VoteController.php @@ -1,18 +1,34 @@ . + */ + namespace App\Http\Controllers; use App\Application; use App\Http\Requests\VoteRequest; -use App\Jobs\ProcessVoteList; use App\Vote; -use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Log; class VoteController extends Controller { - public function vote(VoteRequest $voteRequest, Application $application) { $this->authorize('create', Vote::class); @@ -23,11 +39,10 @@ class VoteController extends Controller ]); $vote->application()->attach($application->id); - - Log::info('User ' . Auth::user()->name . ' has voted in applicant ' . $application->user->name . '\'s application', [ - 'voteType' => $voteRequest->voteType + Log::info('User '.Auth::user()->name.' has voted in applicant '.$application->user->name.'\'s application', [ + 'voteType' => $voteRequest->voteType, ]); - $voteRequest->session()->flash('success', 'Your vote has been registered!'); + $voteRequest->session()->flash('success', __('Your vote has been counted!')); // Cron job will run command that processes votes return redirect()->back(); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php old mode 100644 new mode 100755 index 9a2a7f5..634033c --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -1,7 +1,27 @@ . + */ + namespace App\Http; +use App\Http\Middleware\APIAuthenticationMiddleware; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel @@ -41,6 +61,7 @@ class Kernel extends HttpKernel 'api' => [ 'throttle:60,1', \Illuminate\Routing\Middleware\SubstituteBindings::class, + APIAuthenticationMiddleware::class ], ]; @@ -66,10 +87,12 @@ class Kernel extends HttpKernel 'usernameUUID' => \App\Http\Middleware\UsernameUUID::class, 'forcelogout' => \App\Http\Middleware\ForceLogoutMiddleware::class, '2fa' => \PragmaRX\Google2FALaravel\Middleware::class, + 'passwordexpiration' => \App\Http\Middleware\PasswordExpirationMiddleware::class, + 'passwordredirect' => \App\Http\Middleware\PasswordExpirationRedirectMiddleware::class, 'localize' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class, 'localizationRedirect' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class, 'localeSessionRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleSessionRedirect::class, 'localeCookieRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleCookieRedirect::class, - 'localeViewPath' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class + 'localeViewPath' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class, ]; } diff --git a/app/Http/Middleware/APIAuthenticationMiddleware.php b/app/Http/Middleware/APIAuthenticationMiddleware.php new file mode 100755 index 0000000..866fd83 --- /dev/null +++ b/app/Http/Middleware/APIAuthenticationMiddleware.php @@ -0,0 +1,65 @@ +bearerToken(); + + if (!is_null($key)) + { + // we have a valid discriminator + $discriminator = Str::before($key, '.'); + $loneKey = Str::after($key, '.'); + + $keyRecord = ApiKey::where('discriminator', $discriminator)->first(); + + if ($keyRecord && Hash::check($loneKey, $keyRecord->secret) && $keyRecord->status == 'active') + { + $keyRecord->last_used = Carbon::now(); + $keyRecord->save(); + + Log::info('Recording API call, see context', [ + 'uri' => $request->url(), + 'name' => Route::currentRouteName(), + 'discriminator' => $discriminator, + 'ip' => $request->ip() + ]); + + return $next($request); + } + + return JSON::setResponseType('error') + ->setStatus('authfail') + ->setMessage('Invalid / Revoked API key.') + ->setCode(401) + ->build(); + } + + return JSON::setResponseType('error') + ->setStatus('malformed_key') + ->setMessage('Missing or malformed API key.') + ->setCode(400) + ->build(); + + } +} diff --git a/app/Http/Middleware/ApplicationEligibility.php b/app/Http/Middleware/ApplicationEligibility.php old mode 100644 new mode 100755 index f091d8e..13cb1da --- a/app/Http/Middleware/ApplicationEligibility.php +++ b/app/Http/Middleware/ApplicationEligibility.php @@ -1,12 +1,31 @@ . + */ + namespace App\Http\Middleware; use App\Application; -use Illuminate\Support\Facades\Log; use Carbon\Carbon; use Closure; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\View; class ApplicationEligibility @@ -23,37 +42,29 @@ class ApplicationEligibility { $curtime = new Carbon(now()); - - if (Auth::check()) - { + if (Auth::check()) { $applications = Application::where('applicantUserID', Auth::user()->id)->get(); $eligible = true; $daysRemaining = 0; - if (!$applications->isEmpty()) - { - foreach ($applications as $application) - { + if (! $applications->isEmpty()) { + foreach ($applications as $application) { $appTime = Carbon::parse($application->created_at); - if ($appTime->isSameMonth($curtime)) - { - - Log::warning('Notice: Application ID ' . $application->id . ' was found to be in the same month as today\'s time, making the user ' . Auth::user()->name . ' ineligible for application'); + if ($appTime->isSameMonth($curtime)) { + Log::warning('Notice: Application ID '.$application->id.' was found to be in the same month as today\'s time, making the user '.Auth::user()->name.' ineligible for application'); $eligible = false; } } $allowedTime = Carbon::parse($applications->last()->created_at)->addMonth(); $daysRemaining = $allowedTime->diffInDays(now()); - } View::share('isEligibleForApplication', $eligible); View::share('eligibilityDaysRemaining', $daysRemaining); } - return $next($request); } } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php old mode 100644 new mode 100755 index 704089a..af34268 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Middleware; use Illuminate\Auth\Middleware\Authenticate as Middleware; diff --git a/app/Http/Middleware/Bancheck.php b/app/Http/Middleware/Bancheck.php old mode 100644 new mode 100755 index 0eca7f7..6c8a8ef --- a/app/Http/Middleware/Bancheck.php +++ b/app/Http/Middleware/Bancheck.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Middleware; use Closure; @@ -20,17 +39,11 @@ class Bancheck $userIP = $request->ip(); $anonymousUser = User::where('ipAddress', $userIP)->get(); - - if (Auth::check() && Auth::user()->isBanned()) - { + if (Auth::check() && Auth::user()->isBanned()) { View::share('isBanned', true); - } - elseif(!$anonymousUser->isEmpty() && User::find($anonymousUser->id)->isBanned()) - { + } elseif (! $anonymousUser->isEmpty() && User::find($anonymousUser->id)->isBanned()) { View::share('isBanned', true); - } - else - { + } else { View::share('isBanned', false); } diff --git a/app/Http/Middleware/CheckForMaintenanceMode.php b/app/Http/Middleware/CheckForMaintenanceMode.php old mode 100644 new mode 100755 index 35b9824..c58ffff --- a/app/Http/Middleware/CheckForMaintenanceMode.php +++ b/app/Http/Middleware/CheckForMaintenanceMode.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware; diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php old mode 100644 new mode 100755 index 033136a..140dd8d --- a/app/Http/Middleware/EncryptCookies.php +++ b/app/Http/Middleware/EncryptCookies.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Middleware; use Illuminate\Cookie\Middleware\EncryptCookies as Middleware; diff --git a/app/Http/Middleware/ForceLogoutMiddleware.php b/app/Http/Middleware/ForceLogoutMiddleware.php old mode 100644 new mode 100755 index 551c287..b3b2baa --- a/app/Http/Middleware/ForceLogoutMiddleware.php +++ b/app/Http/Middleware/ForceLogoutMiddleware.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Middleware; use Closure; @@ -16,11 +35,11 @@ class ForceLogoutMiddleware */ public function handle($request, Closure $next) { - if (Auth::user()->isBanned()) - { + if (Auth::user()->isBanned()) { Auth::logout(); - $request->session()->flash('error', 'Error: Your session has been forcefully terminated. Please try again in a few days.'); + $request->session()->flash('error', __('Your account is suspended. You will not be able to login or register until the suspension is lifted.')); + return redirect('/'); } diff --git a/app/Http/Middleware/PasswordExpirationMiddleware.php b/app/Http/Middleware/PasswordExpirationMiddleware.php new file mode 100755 index 0000000..e76210c --- /dev/null +++ b/app/Http/Middleware/PasswordExpirationMiddleware.php @@ -0,0 +1,40 @@ +password_last_updated)->diffInDays(now()); + $updateThreshold = Options::getOption('password_expiry'); + + if ($updateThreshold !== 0 && $sinceUpdate > $updateThreshold) + { + session()->put('passwordExpired', true); + } + else + { + session()->put('passwordExpired', false); + } + + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/PasswordExpirationRedirectMiddleware.php b/app/Http/Middleware/PasswordExpirationRedirectMiddleware.php new file mode 100755 index 0000000..b4a687f --- /dev/null +++ b/app/Http/Middleware/PasswordExpirationRedirectMiddleware.php @@ -0,0 +1,28 @@ +. + */ + namespace App\Http\Middleware; use App\Providers\RouteServiceProvider; diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php old mode 100644 new mode 100755 index 5a50e7b..1698610 --- a/app/Http/Middleware/TrimStrings.php +++ b/app/Http/Middleware/TrimStrings.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware; diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php old mode 100644 new mode 100755 index 085cdb5..938be5d --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -1,10 +1,30 @@ . + */ + namespace App\Http\Middleware; -use Fideloper\Proxy\TrustProxies as Middleware; +use Illuminate\Http\Middleware\TrustProxies as Middleware; use Illuminate\Http\Request; + class TrustProxies extends Middleware { /** @@ -12,12 +32,18 @@ class TrustProxies extends Middleware * * @var array|string */ - protected $proxies = "*"; + protected $proxies = '*'; /** * The headers that should be used to detect proxies. * * @var int */ - protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB; + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; + } diff --git a/app/Http/Middleware/UsernameUUID.php b/app/Http/Middleware/UsernameUUID.php old mode 100644 new mode 100755 index 29a93cf..32c8a8e --- a/app/Http/Middleware/UsernameUUID.php +++ b/app/Http/Middleware/UsernameUUID.php @@ -1,15 +1,33 @@ . + */ + namespace App\Http\Middleware; -use Closure; use App\Facades\UUID; -use Illuminate\Support\Facades\Http; +use Closure; class UsernameUUID { /** - * Converts a Minecraft username found in the request body to a UUID + * Converts a Minecraft username found in the request body to a UUID. * * @param \Illuminate\Http\Request $request * @param \Closure $next @@ -18,23 +36,21 @@ class UsernameUUID public function handle($request, Closure $next) { $input = $request->all(); - if (isset($input['uuid'])) - { - try - { - $username = $input['uuid']; - $input['uuid'] = UUID::toUUID($username); - } - catch(\InvalidArgumentException $iae) - { + if (isset($input['uuid'])) { + try { + $username = $input['uuid']; + $input['uuid'] = UUID::toUUID($username); + } catch (\InvalidArgumentException $iae) { report($iae); $request->session()->flash('error', $iae->getMessage()); + return redirect(route('register')); } $request->replace($input); } + return $next($request); } } diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php old mode 100644 new mode 100755 index 0c13b85..0b6761a --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; diff --git a/app/Http/Requests/Add2FASecretRequest.php b/app/Http/Requests/Add2FASecretRequest.php old mode 100644 new mode 100755 index 13fa9dd..f1b2ca4 --- a/app/Http/Requests/Add2FASecretRequest.php +++ b/app/Http/Requests/Add2FASecretRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -13,7 +32,7 @@ class Add2FASecretRequest extends FormRequest */ public function authorize() { - // current logic only updates currently authenticated user + // current logic only updates currently authenticated user return true; } @@ -25,7 +44,7 @@ class Add2FASecretRequest extends FormRequest public function rules() { return [ - 'otp' => 'required|string|min:6|max:6' + 'otp' => 'required|string|min:6|max:6', ]; } } diff --git a/app/Http/Requests/BanUserRequest.php b/app/Http/Requests/BanUserRequest.php old mode 100644 new mode 100755 index ba25c34..943bd90 --- a/app/Http/Requests/BanUserRequest.php +++ b/app/Http/Requests/BanUserRequest.php @@ -1,11 +1,29 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Auth; - class BanUserRequest extends FormRequest { /** @@ -27,8 +45,15 @@ class BanUserRequest extends FormRequest { return [ 'reason' => 'required|string', - 'durationOperand' => 'nullable|string', - 'durationOperator' => 'nullable|string' + 'suspensionType' => 'required|string', + 'duration' => 'required_if:suspensionType,on|nullable|integer', + ]; + } + + public function messages() + { + return [ + 'duration.required_if' => __('You must provide a duration if the suspension is temporary.') ]; } } diff --git a/app/Http/Requests/CancelAppointmentRequest.php b/app/Http/Requests/CancelAppointmentRequest.php new file mode 100755 index 0000000..4ba920e --- /dev/null +++ b/app/Http/Requests/CancelAppointmentRequest.php @@ -0,0 +1,30 @@ + 'string|required' + ]; + } +} diff --git a/app/Http/Requests/ChangeEmailRequest.php b/app/Http/Requests/ChangeEmailRequest.php old mode 100644 new mode 100755 index 128a3eb..e81a473 --- a/app/Http/Requests/ChangeEmailRequest.php +++ b/app/Http/Requests/ChangeEmailRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -24,8 +43,8 @@ class ChangeEmailRequest extends FormRequest public function rules() { return [ - 'currentPassword' => 'required|password', - 'newEmail' => 'required|email|unique:users,email' + 'currentPassword' => 'required|current_password', + 'newEmail' => 'required|email|unique:users,email', ]; } } diff --git a/app/Http/Requests/ChangePasswordRequest.php b/app/Http/Requests/ChangePasswordRequest.php old mode 100644 new mode 100755 index 3feb69b..769dbeb --- a/app/Http/Requests/ChangePasswordRequest.php +++ b/app/Http/Requests/ChangePasswordRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -25,7 +44,7 @@ class ChangePasswordRequest extends FormRequest { return [ 'newPassword' => 'required|string|confirmed', - 'oldPassword' => 'required|string|password' + 'oldPassword' => 'required|string|current_password', ]; } } diff --git a/app/Http/Requests/DeleteUserRequest.php b/app/Http/Requests/DeleteUserRequest.php old mode 100644 new mode 100755 index 924635c..bdaaada --- a/app/Http/Requests/DeleteUserRequest.php +++ b/app/Http/Requests/DeleteUserRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -25,7 +44,7 @@ class DeleteUserRequest extends FormRequest public function rules() { return [ - 'confirmPrompt' => 'required|string' + 'confirmPrompt' => 'required|string', ]; } } diff --git a/app/Http/Requests/EditTeamRequest.php b/app/Http/Requests/EditTeamRequest.php new file mode 100755 index 0000000..d2ad544 --- /dev/null +++ b/app/Http/Requests/EditTeamRequest.php @@ -0,0 +1,50 @@ +. + */ + +namespace App\Http\Requests; + +use Illuminate\Foundation\Http\FormRequest; + +class EditTeamRequest extends FormRequest +{ + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'teamDescription' => 'required|string|max:200', + 'joinType' => 'required|boolean', + ]; + } +} diff --git a/app/Http/Requests/FlushSessionsRequest.php b/app/Http/Requests/FlushSessionsRequest.php old mode 100644 new mode 100755 index f274ebd..b7d9dc0 --- a/app/Http/Requests/FlushSessionsRequest.php +++ b/app/Http/Requests/FlushSessionsRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -24,7 +43,7 @@ class FlushSessionsRequest extends FormRequest public function rules() { return [ - 'currentPasswordFlush' => 'required|password' + 'currentPasswordFlush' => 'required|current_password', ]; } } diff --git a/app/Http/Requests/NewCommentRequest.php b/app/Http/Requests/NewCommentRequest.php old mode 100644 new mode 100755 index e1470bc..9d05a95 --- a/app/Http/Requests/NewCommentRequest.php +++ b/app/Http/Requests/NewCommentRequest.php @@ -1,11 +1,29 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Auth; - class NewCommentRequest extends FormRequest { /** @@ -27,7 +45,7 @@ class NewCommentRequest extends FormRequest public function rules() { return [ - 'comment' => 'required|string|max:600|min:20' + 'comment' => 'required|string|max:600|min:20', ]; } } diff --git a/app/Http/Requests/NewTeamRequest.php b/app/Http/Requests/NewTeamRequest.php new file mode 100755 index 0000000..a4fcb4e --- /dev/null +++ b/app/Http/Requests/NewTeamRequest.php @@ -0,0 +1,49 @@ +. + */ + +namespace App\Http\Requests; + +use Illuminate\Foundation\Http\FormRequest; + +class NewTeamRequest extends FormRequest +{ + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'teamName' => 'required|max:200|string', + ]; + } +} diff --git a/app/Http/Requests/ProfileSave.php b/app/Http/Requests/ProfileSave.php old mode 100644 new mode 100755 index 75278be..7d79846 --- a/app/Http/Requests/ProfileSave.php +++ b/app/Http/Requests/ProfileSave.php @@ -1,10 +1,28 @@ . + */ + namespace App\Http\Requests; use App\Profile; use Illuminate\Foundation\Http\FormRequest; -use Illuminate\Support\Facades\Auth; class ProfileSave extends FormRequest { @@ -33,7 +51,7 @@ class ProfileSave extends FormRequest 'socialInsta' => 'nullable|string', 'socialTwitter' => 'nullable|string', 'socialDiscord' => 'nullable|string', - 'socialGithub' => 'nullable|string' + 'socialGithub' => 'nullable|string', ]; } } diff --git a/app/Http/Requests/Remove2FASecretRequest.php b/app/Http/Requests/Remove2FASecretRequest.php old mode 100644 new mode 100755 index 6583b93..136d283 --- a/app/Http/Requests/Remove2FASecretRequest.php +++ b/app/Http/Requests/Remove2FASecretRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -24,8 +43,8 @@ class Remove2FASecretRequest extends FormRequest public function rules() { return [ - 'currentPassword' => 'required|password', - 'consent' => 'required|accepted' + 'currentPassword' => 'required|current_password', + 'consent' => 'required|accepted', ]; } } diff --git a/app/Http/Requests/SaveNotesRequest.php b/app/Http/Requests/SaveNotesRequest.php old mode 100644 new mode 100755 index b6dd782..7b89a98 --- a/app/Http/Requests/SaveNotesRequest.php +++ b/app/Http/Requests/SaveNotesRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -24,7 +43,7 @@ class SaveNotesRequest extends FormRequest public function rules() { return [ - 'noteText' => 'required|string' + 'noteText' => 'required|string', ]; } } diff --git a/app/Http/Requests/SaveSecuritySettings.php b/app/Http/Requests/SaveSecuritySettings.php new file mode 100755 index 0000000..245d630 --- /dev/null +++ b/app/Http/Requests/SaveSecuritySettings.php @@ -0,0 +1,34 @@ + 'required|string', + 'graceperiod' => 'required|integer', + 'pwExpiry' => 'required|integer', + 'enforce2fa' => 'required|boolean', + 'requirePMC' => 'required|boolean' + ]; + } +} diff --git a/app/Http/Requests/SearchPlayerRequest.php b/app/Http/Requests/SearchPlayerRequest.php old mode 100644 new mode 100755 index 4689a49..23c7e78 --- a/app/Http/Requests/SearchPlayerRequest.php +++ b/app/Http/Requests/SearchPlayerRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -25,7 +44,7 @@ class SearchPlayerRequest extends FormRequest public function rules() { return [ - 'searchTerm' => 'required|string|max:17' // max user char limit set by Mojang + 'searchTerm' => 'required|string|max:17', // max user char limit set by Mojang ]; } } diff --git a/app/Http/Requests/SendInviteRequest.php b/app/Http/Requests/SendInviteRequest.php new file mode 100755 index 0000000..234ed89 --- /dev/null +++ b/app/Http/Requests/SendInviteRequest.php @@ -0,0 +1,49 @@ +. + */ + +namespace App\Http\Requests; + +use Illuminate\Foundation\Http\FormRequest; + +class SendInviteRequest extends FormRequest +{ + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'user' => 'required|integer', + ]; + } +} diff --git a/app/Http/Requests/StoreAbsenceRequest.php b/app/Http/Requests/StoreAbsenceRequest.php new file mode 100755 index 0000000..77d9355 --- /dev/null +++ b/app/Http/Requests/StoreAbsenceRequest.php @@ -0,0 +1,36 @@ +hasPermissionTo('reviewer.requestAbsence'); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'reason' => 'required|string', + 'start_date' => 'required|date', + 'predicted_end' => 'required|date|after:start_date', + 'available_assist' => 'required|string', + 'invalidAbsenceAgreement' => 'required|accepted' + ]; + } +} diff --git a/app/Http/Requests/UpdateAbsenceRequest.php b/app/Http/Requests/UpdateAbsenceRequest.php new file mode 100755 index 0000000..643ecc6 --- /dev/null +++ b/app/Http/Requests/UpdateAbsenceRequest.php @@ -0,0 +1,30 @@ +. + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -28,7 +47,7 @@ class UpdateUserRequest extends FormRequest 'email' => 'required|email', 'name' => 'required|string', 'uuid' => 'required|max:32|min:32', - 'roles' => 'required_without_all' + 'roles' => 'required_without_all', ]; } } diff --git a/app/Http/Requests/UploadFileRequest.php b/app/Http/Requests/UploadFileRequest.php new file mode 100755 index 0000000..46b5ea7 --- /dev/null +++ b/app/Http/Requests/UploadFileRequest.php @@ -0,0 +1,32 @@ + 'required|string|max:100', + 'description' => 'required|string|max:800', + 'file' => 'required|file|mimes:jpeg,jpg,png,bmp,tiff,docx,doc,odt,ott,xls,xlsx,ods,ots,gif,pdf,mp3,mp4,pptx,ppt,odp,ppsx,pub,psd,svg' + ]; + } +} diff --git a/app/Http/Requests/UserDeleteRequest.php b/app/Http/Requests/UserDeleteRequest.php new file mode 100755 index 0000000..2869d13 --- /dev/null +++ b/app/Http/Requests/UserDeleteRequest.php @@ -0,0 +1,57 @@ +. + */ + +namespace App\Http\Requests; + +use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Auth; + +class UserDeleteRequest extends FormRequest +{ + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + if (Auth::user()->has2FA()) { + return [ + 'currentPassword' => 'required|current_password:web', + 'otp' => 'required|integer|max:6', + ]; + } + + return [ + 'currentPassword' => 'required|current_password:web', + ]; + } +} diff --git a/app/Http/Requests/VacancyEditRequest.php b/app/Http/Requests/VacancyEditRequest.php old mode 100644 new mode 100755 index c7ba958..b9c4c3e --- a/app/Http/Requests/VacancyEditRequest.php +++ b/app/Http/Requests/VacancyEditRequest.php @@ -1,11 +1,29 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Auth; - class VacancyEditRequest extends FormRequest { /** @@ -28,7 +46,7 @@ class VacancyEditRequest extends FormRequest return [ 'vacancyDescription' => 'required|string', 'vacancyFullDescription' => 'nullable|string', - 'vacancyCount' => 'required|integer|min:1' + 'vacancyCount' => 'required|integer|min:1', ]; } } diff --git a/app/Http/Requests/VacancyRequest.php b/app/Http/Requests/VacancyRequest.php old mode 100644 new mode 100755 index 176610d..07e333c --- a/app/Http/Requests/VacancyRequest.php +++ b/app/Http/Requests/VacancyRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -30,7 +49,7 @@ class VacancyRequest extends FormRequest 'permissionGroup' => 'required|string', 'discordRole' => 'required|string', 'vacancyCount' => 'required|integer', - 'vacancyFormID' => 'required|integer' + 'vacancyFormID' => 'required|integer', ]; } } diff --git a/app/Http/Requests/VoteRequest.php b/app/Http/Requests/VoteRequest.php old mode 100644 new mode 100755 index fdcf8c9..67e30a9 --- a/app/Http/Requests/VoteRequest.php +++ b/app/Http/Requests/VoteRequest.php @@ -1,5 +1,24 @@ . + */ + namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; @@ -24,7 +43,7 @@ class VoteRequest extends FormRequest public function rules() { return [ - 'voteType' => 'required|string|in:VOTE_DENY,VOTE_APPROVE' + 'voteType' => 'required|string|in:VOTE_DENY,VOTE_APPROVE', ]; } } diff --git a/app/Http/Resources/ApplicationResource.php b/app/Http/Resources/ApplicationResource.php new file mode 100755 index 0000000..3994e00 --- /dev/null +++ b/app/Http/Resources/ApplicationResource.php @@ -0,0 +1,28 @@ + $this->id, + 'applicationStatus' => $this->applicationStatus, + 'applicant' => new UserResource(User::findOrFail($this->applicantUserID)), + 'response' => new ResponseResource(Response::findOrFail($this->applicantFormResponseID)), + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at + ]; + } +} diff --git a/app/Http/Resources/AppointmentResource.php b/app/Http/Resources/AppointmentResource.php new file mode 100755 index 0000000..4b71947 --- /dev/null +++ b/app/Http/Resources/AppointmentResource.php @@ -0,0 +1,19 @@ + $this->id, + 'formName' => $this->formName, + 'formStructure' => json_decode($this->formStructure), + 'formStatus' => $this->formStatus, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at + ]; + } +} diff --git a/app/Http/Resources/OptionResource.php b/app/Http/Resources/OptionResource.php new file mode 100755 index 0000000..0315068 --- /dev/null +++ b/app/Http/Resources/OptionResource.php @@ -0,0 +1,19 @@ + $this->id, + 'form' => new FormResource(Form::findOrFail($this->responseFormID)), + 'responseData' => json_decode($this->responseData), + 'vacancy' => new VacancyResource(Vacancy::findOrFail($this->associatedVacancyID)), + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at + ]; + } +} diff --git a/app/Http/Resources/TeamFileResource.php b/app/Http/Resources/TeamFileResource.php new file mode 100755 index 0000000..efad411 --- /dev/null +++ b/app/Http/Resources/TeamFileResource.php @@ -0,0 +1,19 @@ + $this->id, + 'uuid' => $this->uuid, + 'name' => $this->name, + 'email' => $this->email, + 'username' => $this->username, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'current_team_id' => $this->current_team_id + ]; + } +} diff --git a/app/Http/Resources/VacancyResource.php b/app/Http/Resources/VacancyResource.php new file mode 100755 index 0000000..dc87ae1 --- /dev/null +++ b/app/Http/Resources/VacancyResource.php @@ -0,0 +1,19 @@ +bans as $ban) - { - $bannedUntil = Carbon::parse($ban->bannedUntil); - - if ($bannedUntil->equalTo(now())) - { - Log::debug('Deleted ban ' . $ban->id . ' belonging to ' . $ban->user->name); - $ban->delete(); - } - } - } - - } -} diff --git a/app/Jobs/ProcessDueSuspensions.php b/app/Jobs/ProcessDueSuspensions.php new file mode 100755 index 0000000..ca9e352 --- /dev/null +++ b/app/Jobs/ProcessDueSuspensions.php @@ -0,0 +1,58 @@ +. + */ + +namespace App\Jobs; + +use App\Ban; +use App\Services\AccountSuspensionService; +use Carbon\Carbon; +use Illuminate\Bus\Queueable; +use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Foundation\Bus\Dispatchable; +use Illuminate\Queue\InteractsWithQueue; +use Illuminate\Queue\SerializesModels; +use Illuminate\Support\Facades\Log; + +class ProcessDueSuspensions implements ShouldQueue +{ + use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + + /** + * Create a new job instance. + * + * @return void + */ + public function __construct() + { + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(AccountSuspensionService $service) + { + Log::info('(suspension cleaner) Purging all expired suspension records.'); + + $service->purgeExpired(); + } +} diff --git a/app/Listeners/DenyUser.php b/app/Listeners/DenyUser.php old mode 100644 new mode 100755 index 0670cc3..34095ca --- a/app/Listeners/DenyUser.php +++ b/app/Listeners/DenyUser.php @@ -1,11 +1,28 @@ . + */ + namespace App\Listeners; use App\Events\ApplicationDeniedEvent; use App\Notifications\ApplicationDenied; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Facades\Log; class DenyUser @@ -29,9 +46,8 @@ class DenyUser public function handle(ApplicationDeniedEvent $event) { $event->application->setStatus('DENIED'); - Log::info('User ' . $event->application->user->name . ' just had their application denied.'); + Log::info('User '.$event->application->user->name.' just had their application denied.'); $event->application->user->notify(new ApplicationDenied($event->application)); - } } diff --git a/app/Listeners/LogAuthenticationFailure.php b/app/Listeners/LogAuthenticationFailure.php old mode 100644 new mode 100755 index afe1fee..15ce404 --- a/app/Listeners/LogAuthenticationFailure.php +++ b/app/Listeners/LogAuthenticationFailure.php @@ -1,9 +1,26 @@ . + */ + namespace App\Listeners; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Facades\Log; class LogAuthenticationFailure @@ -27,10 +44,9 @@ class LogAuthenticationFailure public function handle($event) { $targetAccountID = 0; - $originalIP = "0.0.0.0"; + $originalIP = '0.0.0.0'; - if (isset($event->user->id)) - { + if (isset($event->user->id)) { $targetAccountID = $event->user->id; } diff --git a/app/Listeners/LogAuthenticationSuccess.php b/app/Listeners/LogAuthenticationSuccess.php old mode 100644 new mode 100755 index 40781d9..7dd3ef3 --- a/app/Listeners/LogAuthenticationSuccess.php +++ b/app/Listeners/LogAuthenticationSuccess.php @@ -1,9 +1,26 @@ . + */ + namespace App\Listeners; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Facades\Log; class LogAuthenticationSuccess diff --git a/app/Listeners/OnUserBanned.php b/app/Listeners/OnUserBanned.php old mode 100644 new mode 100755 index 897a280..804aac5 --- a/app/Listeners/OnUserBanned.php +++ b/app/Listeners/OnUserBanned.php @@ -1,15 +1,30 @@ . + */ + namespace App\Listeners; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Queue\InteractsWithQueue; use App\Events\UserBannedEvent; use App\Notifications\UserBanned; - -use Illuminate\Support\Facades\Log; - use App\User; +use Illuminate\Support\Facades\Log; class OnUserBanned { @@ -31,16 +46,12 @@ class OnUserBanned */ public function handle(UserBannedEvent $event) { + Log::warning('User '.$event->user->name.' has just been banned from the site!'); - Log::warning("User " . $event->user->name . " has just been banned from the site!"); - - foreach(User::all() as $user) - { - if ($user->isStaffMember()) - { - $user->notify((new UserBanned($event->user, $event->ban))->delay(now()->addSeconds(10))); - } + foreach (User::all() as $user) { + if ($user->isStaffMember()) { + $user->notify((new UserBanned($event->user, $event->ban))->delay(now()->addSeconds(10))); + } } - } } diff --git a/app/Listeners/OnUserRegistration.php b/app/Listeners/OnUserRegistration.php old mode 100644 new mode 100755 index 7ab08f9..f2fa814 --- a/app/Listeners/OnUserRegistration.php +++ b/app/Listeners/OnUserRegistration.php @@ -1,14 +1,30 @@ . + */ + namespace App\Listeners; -use Illuminate\Support\Facades\Log; -use Illuminate\Auth\Events\Registered; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Queue\InteractsWithQueue; - -use App\User; use App\Notifications\NewUser; +use App\User; +use Illuminate\Auth\Events\Registered; +use Illuminate\Support\Facades\Log; class OnUserRegistration { @@ -31,12 +47,10 @@ class OnUserRegistration public function handle(Registered $event) { // TODO: Send push notification to online admins via browser (w/ pusher) - Log::info('User ' . $event->user->name . ' has just registered for an account.'); + Log::info('User '.$event->user->name.' has just registered for an account.'); - foreach(User::all() as $user) - { - if ($user->hasRole('admin')) - { + foreach (User::all() as $user) { + if ($user->hasRole('admin')) { $user->notify(new NewUser($event->user)); } } diff --git a/app/Listeners/PromoteUser.php b/app/Listeners/PromoteUser.php old mode 100644 new mode 100755 index 62760b0..e53493b --- a/app/Listeners/PromoteUser.php +++ b/app/Listeners/PromoteUser.php @@ -1,13 +1,28 @@ . + */ + namespace App\Listeners; use App\Events\ApplicationApprovedEvent; -use App\StaffProfile; use App\Notifications\ApplicationApproved; -use Carbon\Carbon; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Facades\Log; class PromoteUser @@ -30,24 +45,12 @@ class PromoteUser */ public function handle(ApplicationApprovedEvent $event) { + Log::info('User '.$event->application->user->name . 'has just been promoted (application approved)'); + $event->application->setStatus('APPROVED'); - - $staffProfile = StaffProfile::create([ - 'userID' => $event->application->user->id, - 'approvalDate' => now()->toDateTimeString(), - 'memberNotes' => 'Approved by staff members. Welcome them to the team!' - ]); - + $event->application->response->vacancy->decrease(); $event->application->user->assignRole('reviewer'); - Log::info('User ' . $event->application->user->name . ' has just been promoted!', [ - 'newRank' => $event->application->response->vacancy->permissionGroupName, - 'staffProfileID' => $staffProfile->id - ]); - $event->application->user->notify(new ApplicationApproved($event->application)); - // note: Also notify staff - // TODO: Also assign new app role based on the permission group name - } } diff --git a/app/Mail/InviteToTeam.php b/app/Mail/InviteToTeam.php new file mode 100755 index 0000000..5e2714d --- /dev/null +++ b/app/Mail/InviteToTeam.php @@ -0,0 +1,68 @@ +. + */ + +namespace App\Mail; + +use Illuminate\Bus\Queueable; +use Illuminate\Mail\Mailable; +use Illuminate\Queue\SerializesModels; +use Mpociot\Teamwork\TeamInvite; + +class InviteToTeam extends Mailable +{ + use Queueable, SerializesModels; + + public $teamName; + + public $name; + + public $inviterName; + + public $denyToken; + + public $acceptToken; + + /** + * Create a new message instance. + * + * @return void + */ + public function __construct(TeamInvite $invite) + { + $this->teamName = $invite->team->name; + $this->name = $invite->user->name; + $this->inviterName = $invite->inviter->name; + $this->acceptToken = $invite->accept_token; + $this->denyToken = $invite->deny_token; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + return $this + ->subject('You have just been invited to '.$this->teamName) + ->view('mail.invited-to-team'); + } +} diff --git a/app/Mail/NewContactSubmission.php b/app/Mail/NewContactSubmission.php old mode 100644 new mode 100755 index 24373f8..15e2cdf --- a/app/Mail/NewContactSubmission.php +++ b/app/Mail/NewContactSubmission.php @@ -1,9 +1,27 @@ . + */ + namespace App\Mail; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; diff --git a/app/Mail/UserAccountDeleteConfirmation.php b/app/Mail/UserAccountDeleteConfirmation.php new file mode 100755 index 0000000..33b021f --- /dev/null +++ b/app/Mail/UserAccountDeleteConfirmation.php @@ -0,0 +1,67 @@ +. + */ + +namespace App\Mail; + +use App\User; +use Illuminate\Bus\Queueable; +use Illuminate\Mail\Mailable; +use Illuminate\Queue\SerializesModels; + +class UserAccountDeleteConfirmation extends Mailable +{ + use Queueable, SerializesModels; + + public $deleteToken; + + public $cancelToken; + + public $originalIP; + + public $name; + + public $userID; + + /** + * Create a new message instance. + * + * @return void + */ + public function __construct(User $user, array $tokens, string $originalIP) + { + $this->deleteToken = $tokens['delete']; + $this->cancelToken = $tokens['cancel']; + + $this->originalIP = $originalIP; + $this->name = $user->name; + $this->userID = $user->id; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + return $this->view('mail.deleted-account'); + } +} diff --git a/app/Notifications/ApplicationApproved.php b/app/Notifications/ApplicationApproved.php old mode 100644 new mode 100755 index bfde408..d4c6ca3 --- a/app/Notifications/ApplicationApproved.php +++ b/app/Notifications/ApplicationApproved.php @@ -1,21 +1,51 @@ . + */ + namespace App\Notifications; +use App\Application; use App\Facades\Options; use App\Traits\Cancellable; +use App\User; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; -use App\Application; class ApplicationApproved extends Notification implements ShouldQueue { use Queueable, Cancellable; - public $application; + + /** + * @var Application The application we're notifying about + */ + public Application $application; + + + /** + * @var User The candidate + */ + public User $user; /** * Create a new notification instance. @@ -34,7 +64,7 @@ class ApplicationApproved extends Notification implements ShouldQueue public function optOut($notifiable) { - return Options::getOption('notify_applicant_approved') !== 1; + return Options::getOption('notify_applicant_approved') != 1; } /** @@ -45,36 +75,32 @@ class ApplicationApproved extends Notification implements ShouldQueue */ public function toMail($notifiable) { - return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - ' . $this->application->response->vacancy->vacancyName . ' application approved') - ->line('
') - ->line('Congratulations! Our Staff team has reviewed your application today, and your application has been approved.') + ->subject(config('app.name').' - application approved') + ->line('Congratulations! Your most recent application has been approved by the reviewing team.') ->line('You have just received the Reviewer role, which allows you to view and vote on other applications.') - ->line('Your in-game rank should be updated network-wide in the next few minutes, allowing you to perform staff duties.') - ->line('Please join a voice channel when possible for your training meeting, if this has been mentioned by your interviewer.') - ->line('
') + ->line('You should have received more information about your onboarding process by now.') ->line('Good luck and welcome aboard!') ->action('Sign in', url(route('login'))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } public function toSlack($notifiable) { - $url = route('showSingleProfile', ['user' => $notifiable->id]); $roles = implode(', ', $notifiable->roles->pluck('name')->all()); return (new SlackMessage) ->success() ->content('A user has been approved on the team. Welcome aboard!') - ->attachment(function($attachment) use ($notifiable, $url, $roles){ + ->attachment(function ($attachment) use ($notifiable, $url, $roles) { $attachment->title('New staff member') ->fields([ 'Name' => $notifiable->name, 'Email' => $notifiable->email, - 'Roles' => $roles + 'Roles' => $roles, ]) ->action('View profile', $url); }); diff --git a/app/Notifications/ApplicationConfirmed.php b/app/Notifications/ApplicationConfirmed.php new file mode 100755 index 0000000..33148d2 --- /dev/null +++ b/app/Notifications/ApplicationConfirmed.php @@ -0,0 +1,68 @@ +application = $application; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') + ->from(config('notification.sender.address'), config('notification.sender.name')) + ->subject(config('app.name') . ' - application confirmed') + ->line('We\'re writing you to let you know that your recent application with us has been received, and will be processed in 24/48 hours.') + ->line('You will receive regular notifications about your application\'s status.') + ->action('View active applications', url(route('showUserApps'))) + ->salutation('The team at ' . config('app.name')); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Notifications/ApplicationDenied.php b/app/Notifications/ApplicationDenied.php old mode 100644 new mode 100755 index 03a4382..427d75e --- a/app/Notifications/ApplicationDenied.php +++ b/app/Notifications/ApplicationDenied.php @@ -1,19 +1,37 @@ . + */ + namespace App\Notifications; +use App\Application; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; -use App\Application; class ApplicationDenied extends Notification implements ShouldQueue { use Queueable; - public $application; /** @@ -45,31 +63,30 @@ class ApplicationDenied extends Notification implements ShouldQueue */ public function toMail($notifiable) { - return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - ' . $this->application->response->vacancy->vacancyName . ' application denied') - ->line('Your most recent application has been denied.') - ->line('Our review team denies applications for several reasons, including poor answers.') - ->line('Please review your application and try again in 30 days.') + ->subject(config('app.name').' - application denied') + ->line('We\'re sorry to inform you that your application with us has been reviewed and declined.') + ->line('Our review team denies applications for several reasons, including poor answers, missing information, or lacking qualifications.') + ->line('Please review your application and try again later. You can view your account\'s eligibility status in your dashboard.') ->action('Review application', url(route('showUserApp', ['application' => $this->application->id]))) - ->line('Better luck next time!'); + ->salutation('The team at ' . config('app.name')); } - public function toSlack($notifiable) { - $notifiableName = $notifiable->name; + $notifiableName = $notifiable->name; - return (new SlackMessage) + return (new SlackMessage) ->error() ->content('An application has just been denied.') - ->attachment(function($attachment) use ($notifiableName){ + ->attachment(function ($attachment) use ($notifiableName) { $attachment->title('Application denied!') - ->content($notifiableName . '\'s application has just been denied. They can try again in 30 days.'); + ->content($notifiableName.'\'s application has just been denied. They can try again in 30 days.'); }); - } + /** * Get the array representation of the notification. * diff --git a/app/Notifications/ApplicationMoved.php b/app/Notifications/ApplicationMoved.php old mode 100644 new mode 100755 index 9598258..b8d8d56 --- a/app/Notifications/ApplicationMoved.php +++ b/app/Notifications/ApplicationMoved.php @@ -1,13 +1,33 @@ . + */ + namespace App\Notifications; +use App\Facades\Options; +use App\Traits\Cancellable; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; -use App\Traits\Cancellable; -use App\Facades\Options; +use Illuminate\Support\Facades\Log; class ApplicationMoved extends Notification implements ShouldQueue { @@ -23,9 +43,21 @@ class ApplicationMoved extends Notification implements ShouldQueue // } + public function channels() + { + Log::debug('Application moved notification: channels chosen', [ + 'channels' => $this->chooseChannelsViaOptions() + ]); + return $this->chooseChannelsViaOptions(); + } + public function optOut($notifiable) { - return Options::getOption('notify_application_status_change') !== 1; + Log::debug('Application moved notification: opt out verified', [ + 'opt-out' => Options::getOption('notify_application_status_change') != 1 + ]); + + return Options::getOption('notify_application_status_change') != 1; } /** @@ -37,12 +69,13 @@ class ApplicationMoved extends Notification implements ShouldQueue public function toMail($notifiable) { return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - Application Updated') - ->line('Your most recent application has been moved up a stage.') - ->line('This means our team has reviewed it and an interview will be scheduled ASAP.') + ->subject(config('app.name').' - application updated') + ->line('Your application has been moved to the next step.') + ->line('This means our team has reviewed it and an interview will be scheduled soon.') ->action('Sign in', url(route('login'))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } /** diff --git a/app/Notifications/AppointmentCancelled.php b/app/Notifications/AppointmentCancelled.php new file mode 100755 index 0000000..3bfc80e --- /dev/null +++ b/app/Notifications/AppointmentCancelled.php @@ -0,0 +1,78 @@ +application = $app; + $this->reason = $reason; + $this->appointmentDate = $appointmentDate; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + // TODO: Switch to HTML & Blade. + + return (new MailMessage) + ->greeting("Hi " . $notifiable->name . ",") + ->from(config('notification.sender.address'), config('notification.sender.name')) + ->subject(config('app.name').' - interview cancelled') + ->line('The interview that was previously scheduled with you has been cancelled.') + ->line('Date and time of the old appointment: '.$this->appointmentDate) + ->line('Your appointment was cancelled for the following reason: ' . $this->reason) + ->line('A team member may contact you to reschedule within a new timeframe - you may also let us know of a date and time that suits you.') + ->line('Your application will likely be declined if you do not reschedule an interview.') + ->action('View active applications', url(route('showUserApps'))) + ->salutation('The team at ' . config('app.name')); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Notifications/AppointmentFinished.php b/app/Notifications/AppointmentFinished.php old mode 100644 new mode 100755 index c1e879a..a16b2b2 --- a/app/Notifications/AppointmentFinished.php +++ b/app/Notifications/AppointmentFinished.php @@ -1,7 +1,27 @@ . + */ + namespace App\Notifications; +use App\Appointment; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; @@ -11,14 +31,17 @@ class AppointmentFinished extends Notification implements ShouldQueue { use Queueable; + + public $appointment; + /** * Create a new notification instance. * * @return void */ - public function __construct() + public function __construct(Appointment $appointment) { - // + $this->appointment = $appointment; } /** @@ -41,12 +64,14 @@ class AppointmentFinished extends Notification implements ShouldQueue public function toMail($notifiable) { return (new MailMessage) + ->greeting("Hi " . $notifiable->name . ",") ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - Appointment completed') - ->line('Your appointment has been marked as completed!') + ->subject(config('app.name').' - appointment completed') + ->line('Your appointment, "' . $this->appointment->appointmentDescription . '", has been marked as completed!') ->line('Please allow an additional day for your application to be fully processed.') ->action('View applications', url(route('showUserApps'))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); + } /** diff --git a/app/Notifications/AppointmentScheduled.php b/app/Notifications/AppointmentScheduled.php old mode 100644 new mode 100755 index 3ad3f60..74c062d --- a/app/Notifications/AppointmentScheduled.php +++ b/app/Notifications/AppointmentScheduled.php @@ -1,19 +1,36 @@ . + */ + namespace App\Notifications; +use App\Appointment; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; -use App\Appointment; - class AppointmentScheduled extends Notification implements ShouldQueue { use Queueable; - protected $appointment; /** @@ -46,14 +63,14 @@ class AppointmentScheduled extends Notification implements ShouldQueue public function toMail($notifiable) { return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - Interview scheduled') - ->line('A voice interview has been scheduled for you @ ' . $this->appointment->appointmentDate . '.') - ->line('With the following details: ' . $this->appointment->appointmentDescription) - ->line('This meeting will take place @ ' . $this->appointment->appointmentLocation . '. You will receive an email soon with details on how to join this meeting.') - ->line('You are expected to show up at least 5 minutes before the scheduled date.') + ->subject(config('app.name').' - Interview scheduled') + ->line('An interview has been scheduled for you @ '.$this->appointment->appointmentDate.'.') + ->line('With the following details: '.$this->appointment->appointmentDescription) + ->line('This meeting will take place @ '.$this->appointment->appointmentLocation.'.') ->action('Sign in', url(route('login'))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } /** diff --git a/app/Notifications/ChangedPassword.php b/app/Notifications/ChangedPassword.php old mode 100644 new mode 100755 index bc4cca5..9c6df1f --- a/app/Notifications/ChangedPassword.php +++ b/app/Notifications/ChangedPassword.php @@ -1,5 +1,24 @@ . + */ + namespace App\Notifications; use Illuminate\Bus\Queueable; @@ -41,12 +60,13 @@ class ChangedPassword extends Notification implements ShouldQueue public function toMail($notifiable) { return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - Account password changed') + ->subject(config('app.name').' - Account password changed') ->line('The password for the account registered to this email address has just been changed.') ->line('If this was not you, please contact an administrator immediately.') ->action('Sign in', url(route('login'))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } /** diff --git a/app/Notifications/EmailChanged.php b/app/Notifications/EmailChanged.php old mode 100644 new mode 100755 index e946102..26dbd6c --- a/app/Notifications/EmailChanged.php +++ b/app/Notifications/EmailChanged.php @@ -1,5 +1,24 @@ . + */ + namespace App\Notifications; use Illuminate\Bus\Queueable; @@ -41,11 +60,13 @@ class EmailChanged extends Notification implements ShouldQueue public function toMail($notifiable) { return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - Email address changed') - ->line('The email address for your account has just been updated, either by you or an administrator.') + ->subject(config('app.name').' - Email address changed') + ->line('The email address for your account has just been updated.') + ->line('If this was not you, please change your password immediately. We recommend you also activate multi-factor authentication.') ->action('Sign in', url(route('login'))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } /** diff --git a/app/Notifications/NewApplicant.php b/app/Notifications/NewApplicant.php old mode 100644 new mode 100755 index 0fdbac9..70b70dd --- a/app/Notifications/NewApplicant.php +++ b/app/Notifications/NewApplicant.php @@ -1,26 +1,42 @@ . + */ + namespace App\Notifications; +use App\Application; +use App\Facades\Options; +use App\Traits\Cancellable; +use App\Vacancy; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; -use App\Application; -use App\Vacancy; - -use App\Traits\Cancellable; -use App\Facades\Options; class NewApplicant extends Notification implements ShouldQueue { use Queueable, Cancellable; - protected $application; - protected $vacancy; /** @@ -36,8 +52,7 @@ class NewApplicant extends Notification implements ShouldQueue public function channels() { - if (Options::getOption('enable_slack_notifications') == 1) - { + if (Options::getOption('enable_slack_notifications') == 1) { return ['slack']; } @@ -46,7 +61,7 @@ class NewApplicant extends Notification implements ShouldQueue public function optOut($notifiable) { - return Options::getOption('notify_new_user') !== 1; + return Options::getOption('notify_new_user') != 1; } /** @@ -58,18 +73,17 @@ class NewApplicant extends Notification implements ShouldQueue public function toMail($notifiable) { return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - New application') + ->subject(config('app.name').' - New application') ->line('Someone has just applied for a position. Check it out!') - ->line('You are receiving this because you\'re a staff member at ' . config('app.name') . '.') + ->line('You are receiving this because you\'re a staff member at '.config('app.name').'.') ->action('View Application', url(route('showUserApp', ['application' => $this->application->id]))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } - public function toSlack($notifiable) { - $vacancyDetails = []; $vacancyDetails['name'] = $this->vacancy->vacancyName; $vacancyDetails['slots'] = $this->vacancy->vacancyCount; @@ -80,16 +94,17 @@ class NewApplicant extends Notification implements ShouldQueue return (new SlackMessage) ->success() ->content('Notice: New application coming through. Please review as soon as possible.') - ->attachment(function($attachment) use ($vacancyDetails, $url, $applicant){ + ->attachment(function ($attachment) use ($vacancyDetails, $url, $applicant) { $attachment->title('Application details') ->fields([ - 'Applied for' => $vacancyDetails['name'], - 'Avaiable positions' => $vacancyDetails['slots'], - 'Applicant' => $applicant + 'Applied for' => $vacancyDetails['name'], + 'Available positions' => $vacancyDetails['slots'], + 'Applicant' => $applicant, ]) ->action('Review application', $url); }); } + /** * Get the array representation of the notification. * diff --git a/app/Notifications/NewComment.php b/app/Notifications/NewComment.php old mode 100644 new mode 100755 index 10c7bfc..571b5a9 --- a/app/Notifications/NewComment.php +++ b/app/Notifications/NewComment.php @@ -1,21 +1,39 @@ . + */ + namespace App\Notifications; +use App\Application; +use App\Comment; +use App\Facades\Options; +use App\Traits\Cancellable; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; -use App\Comment; -use App\Application; -use App\Traits\Cancellable; -use App\Facades\Options; class NewComment extends Notification implements ShouldQueue { use Queueable, Cancellable; - protected $application; /** @@ -30,7 +48,7 @@ class NewComment extends Notification implements ShouldQueue public function optOut($notifiable) { - return Options::getOption('notify_application_comment') !== 1; + return Options::getOption('notify_application_comment') != 1; } /** @@ -42,12 +60,13 @@ class NewComment extends Notification implements ShouldQueue public function toMail($notifiable) { return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - New comment') + ->subject(config('app.name').' - New comment') ->line('Someone has just posted a new comment on an application you follow.') ->line('You\'re receiving this email because you\'ve voted/commented on this application.') ->action('Check it out', url(route('showUserApp', ['application' => $this->application->id]))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } /** diff --git a/app/Notifications/NewContact.php b/app/Notifications/NewContact.php old mode 100644 new mode 100755 index 761f27c..2edba6e --- a/app/Notifications/NewContact.php +++ b/app/Notifications/NewContact.php @@ -1,9 +1,27 @@ . + */ + namespace App\Notifications; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; use Illuminate\Support\Collection; @@ -44,23 +62,23 @@ class NewContact extends Notification public function toMail($notifiable) { if ($this->message->has([ - 'message', - 'ip', - 'email' - ])) - { - return (new MailMessage) + 'message', + 'ip', + 'email', + ])) { + return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->line('We\'ve received a new contact form submission in the StaffManagement app center.') ->line('This is what they sent: ') ->line('') ->line($this->message->get('message')) ->line('') - ->line('This message was received from ' . $this->message->get('ip') . ' and submitted by ' . $this->message->get('email') . '.') + ->line('This message was received from '.$this->message->get('ip').' and submitted by '.$this->message->get('email').'.') ->action('Sign in', url(route('login'))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } - throw new \InvalidArgumentException("Invalid arguments supplied to NewContact!"); + throw new \InvalidArgumentException('Invalid arguments supplied to NewContact!'); } /** diff --git a/app/Notifications/NewUser.php b/app/Notifications/NewUser.php old mode 100644 new mode 100755 index ec31cd6..a5048bb --- a/app/Notifications/NewUser.php +++ b/app/Notifications/NewUser.php @@ -1,17 +1,35 @@ . + */ + namespace App\Notifications; +use App\Facades\Options; +use App\Facades\UUID; +use App\Traits\Cancellable; +use App\User; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; -use Illuminate\Notifications\Notification; use Illuminate\Notifications\Messages\SlackMessage; - -use App\User; -use App\Facades\UUID; -use App\Traits\Cancellable; -use App\Facades\Options; +use Illuminate\Notifications\Notification; class NewUser extends Notification implements ShouldQueue { @@ -36,7 +54,7 @@ class NewUser extends Notification implements ShouldQueue public function optOut($notifiable) { - return Options::getOption('notify_new_user') !== 1; + return Options::getOption('notify_new_user') != 1; } /** @@ -48,38 +66,37 @@ class NewUser extends Notification implements ShouldQueue public function toMail($notifiable) { return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - New user') - ->line($this->user->name . ' has just registered to our site.') + ->subject(config('app.name').' - New user') + ->line($this->user->name.' has just registered to our site.') ->line('You are receiving this email because you opted to receive new user notifications.') ->action('View profile', url(route('showSingleProfile', ['user' => $this->user->id]))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } public function toSlack($notifiable) { - $user = []; + $user = []; - $user['name'] = $this->user->name; - $user['email'] = $this->user->email; - $user['username'] = UUID::toUsername($this->user->uuid); + $user['name'] = $this->user->name; + $user['email'] = $this->user->email; + $user['username'] = UUID::toUsername($this->user->uuid); - $date = \Carbon\Carbon::parse($this->user->created_at); - $user['created_at'] = $date->englishMonth . ' ' . $date->day . ' ' . $date->year; + $date = \Carbon\Carbon::parse($this->user->created_at); + $user['created_at'] = $date->englishMonth.' '.$date->day.' '.$date->year; return (new SlackMessage) ->success() ->content('A new user has signed up!') - ->attachment(function($attachment) use ($user){ - + ->attachment(function ($attachment) use ($user) { $attachment->title('User details') ->fields([ - 'Email address' => $user['email'], - 'Name' => $user['name'], - 'Minecraft Username' => $user['username'], - 'Registration date' => $user['created_at'] + 'Email address' => $user['email'], + 'Name' => $user['name'], + 'Minecraft Username' => $user['username'], + 'Registration date' => $user['created_at'], ]); - }); } diff --git a/app/Notifications/UserBanned.php b/app/Notifications/UserBanned.php old mode 100644 new mode 100755 index f5d5c4e..76f5217 --- a/app/Notifications/UserBanned.php +++ b/app/Notifications/UserBanned.php @@ -1,15 +1,33 @@ . + */ + namespace App\Notifications; +use App\Ban; +use App\User; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; -use App\User; -use App\Ban; - class UserBanned extends Notification implements ShouldQueue { use Queueable; @@ -17,6 +35,7 @@ class UserBanned extends Notification implements ShouldQueue protected $user; protected $ban; + /** * Create a new notification instance. * @@ -48,12 +67,13 @@ class UserBanned extends Notification implements ShouldQueue public function toMail($notifiable) { return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') ->from(config('notification.sender.address'), config('notification.sender.name')) ->line('Hello, ') - ->line('Moderators have just banned user ' . $this->user->name . ' for ' . $this->ban->reason) - ->line('This ban will remain in effect until ' . $this->ban->bannedUntil . '.') + ->line('Moderators have just banned user '.$this->user->name.' for '.$this->ban->reason) + ->line('This ban will remain in effect until '.$this->ban->bannedUntil.'.') ->action('View profile', url(route('showSingleProfile', ['user' => $this->user->id]))) - ->line('Thank you!'); + ->salutation('The team at ' . config('app.name')); } /** diff --git a/app/Notifications/VacancyClosed.php b/app/Notifications/VacancyClosed.php deleted file mode 100644 index 8ae85e4..0000000 --- a/app/Notifications/VacancyClosed.php +++ /dev/null @@ -1,65 +0,0 @@ -vacancy = $vacancy; - } - - public function optOut($notifiable) - { - return Options::getOption('notify_vacancystatus_change') !== 1; - } - - /** - * Get the mail representation of the notification. - * - * @param mixed $notifiable - * @return \Illuminate\Notifications\Messages\MailMessage - */ - public function toMail($notifiable) - { - return (new MailMessage) - ->from(config('notification.sender.address'), config('notification.sender.name')) - ->subject(config('app.name') . ' - Vacancy Closed') - ->line('The vacancy ' . $this->vacancy->vacancyName . ', with ' . $this->vacancy->vacancyCount . ' remaining slots, has just been closed.') - ->line('Please be aware that this position may be deleted/reopened any time.') - ->action('View positions', url(route('showPositions'))) - ->line('Thank you!'); - } - - /** - * Get the array representation of the notification. - * - * @param mixed $notifiable - * @return array - */ - public function toArray($notifiable) - { - return [ - // - ]; - } -} diff --git a/app/Notifications/VacancyStatusUpdated.php b/app/Notifications/VacancyStatusUpdated.php new file mode 100755 index 0000000..d3c1359 --- /dev/null +++ b/app/Notifications/VacancyStatusUpdated.php @@ -0,0 +1,96 @@ +. + */ + +namespace App\Notifications; + +use App\Facades\Options; +use App\Traits\Cancellable; +use App\Vacancy; +use Illuminate\Bus\Queueable; +use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Notifications\Messages\MailMessage; +use Illuminate\Notifications\Notification; +use Illuminate\Queue\SerializesModels; + +class VacancyStatusUpdated extends Notification implements ShouldQueue +{ + use Queueable, SerializesModels, Cancellable; + + protected string $status; + + + protected Vacancy $vacancy; + + /** + * Create a new notification instance. + * + * @return void + */ + public function __construct(Vacancy $vacancy, $status) + { + // there's no simpler solution to this for now, but an array works + $statusDict = [ + 'open' => 'opened', + 'close' => 'closed' + ]; + + $this->vacancy = $vacancy; + $this->status = $statusDict[$status]; + } + + public function optOut($notifiable) + { + return Options::getOption('notify_vacancystatus_change') != 1; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + + return (new MailMessage) + ->greeting('Hi ' . $notifiable->name . ',') + ->from(config('notification.sender.address'), config('notification.sender.name')) + ->subject(config('app.name').' - Vacancy ' . $this->status) + ->line('The vacancy '.$this->vacancy->vacancyName.', with '.$this->vacancy->vacancyCount.' remaining slots, has just been ' . $this->status . '.') + ->line('Please be aware that this position may be change at any time.') + ->line('You are receiving this email because you currently have staff/team member privileges. Depending on your access level, you may not be able to view the list of positions on the backoffice.') + ->action('View positions', url(route('showPositions'))) + ->salutation('The team at ' . config('app.name')); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Observers/ApplicationObserver.php b/app/Observers/ApplicationObserver.php old mode 100644 new mode 100755 index 8821414..16b6615 --- a/app/Observers/ApplicationObserver.php +++ b/app/Observers/ApplicationObserver.php @@ -1,5 +1,24 @@ . + */ + namespace App\Observers; use App\Application; @@ -34,24 +53,20 @@ class ApplicationObserver $application->response()->delete(); $votes = $application->votes; - foreach ($votes as $vote) - { - Log::debug('Referential integrity cleanup: Deleting and detaching vote ' . $vote->id); + foreach ($votes as $vote) { + Log::debug('Referential integrity cleanup: Deleting and detaching vote '.$vote->id); $vote->application()->detach($application->id); $vote->delete(); } - if (!is_null($application->appointment)) - { + if (! is_null($application->appointment)) { Log::debug('RIC: Deleting appointment!'); $application->appointment()->delete(); } - if (!$application->comments->isEmpty()) - { + if (! $application->comments->isEmpty()) { Log::debug('RIC: Deleting comments!'); - foreach($application->comments as $comment) - { + foreach ($application->comments as $comment) { $comment->delete(); } } diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php old mode 100644 new mode 100755 index 38f7660..16d2cdb --- a/app/Observers/UserObserver.php +++ b/app/Observers/UserObserver.php @@ -1,5 +1,24 @@ . + */ + namespace App\Observers; use App\Profile; @@ -8,6 +27,11 @@ use Illuminate\Support\Facades\Log; class UserObserver { + public function __construct() + { + Log::debug('User observer has been initialised and ready for use!'); + } + /** * Handle the user "created" event. * @@ -21,7 +45,7 @@ class UserObserver 'profileShortBio' => 'Write a one-liner about you here!', 'profileAboutMe' => 'Tell us a bit about you.', 'socialLinks' => '{}', - 'userID' => $user->id + 'userID' => $user->id, ]); } @@ -39,20 +63,22 @@ class UserObserver public function deleting(User $user) { - $user->profile()->delete(); - Log::debug('Referential integrity cleanup: Deleted profile!'); - $applications = $user->applications; - - if (!$applications->isEmpty()) - { - Log::debug('RIC: Now trying to delete applications and responses...'); - foreach($applications as $application) - { - // code moved to Application observer, where it gets rid of attached elements individually - Log::debug('RIC: Deleting application ' . $application->id); - $application->delete(); + Log::debug("Deleting observer running"); + if ($user->isForceDeleting()) { + $user->profile->delete(); + Log::debug('Referential integrity cleanup: Deleted profile!'); + $applications = $user->applications; + if (! $applications->isEmpty()) { + Log::debug('RIC: Now trying to delete applications and responses...'); + foreach ($applications as $application) { + // code moved to Application observer, where it gets rid of attached elements individually + Log::debug('RIC: Deleting application '.$application->id); + $application->delete(); + } } + } else { + Log::debug('RIC: Not cleaning up soft deleted models!'); } Log::debug('RIC: Cleanup done!'); @@ -66,7 +92,6 @@ class UserObserver */ public function deleted(User $user) { - // } /** @@ -88,6 +113,8 @@ class UserObserver */ public function forceDeleted(User $user) { - // + Log::info('Model has been force deleted', [ + 'modelID' => $user->id, + ]); } } diff --git a/app/Observers/VacancyObserver.php b/app/Observers/VacancyObserver.php old mode 100644 new mode 100755 index decf1f7..c0752c0 --- a/app/Observers/VacancyObserver.php +++ b/app/Observers/VacancyObserver.php @@ -1,9 +1,29 @@ . + */ + namespace App\Observers; +use App\Application; use App\Vacancy; - +use Illuminate\Support\Facades\Log; class VacancyObserver { @@ -29,6 +49,16 @@ class VacancyObserver // } + public function deleting(Vacancy $vacancy) + { + foreach(Application::with('response.vacancy')->get() as $app) { + if ($app->response->vacancy->id == $vacancy->id) + { + $app->delete(); + } + } + } + /** * Handle the vacancy "deleted" event. * @@ -37,7 +67,7 @@ class VacancyObserver */ public function deleted(Vacancy $vacancy) { - // TODO: Handle deletion of children's data + } /** diff --git a/app/OneoffApplicant.php b/app/OneoffApplicant.php new file mode 100755 index 0000000..9a25c9e --- /dev/null +++ b/app/OneoffApplicant.php @@ -0,0 +1,17 @@ +belongsTo('App\Application', 'id', 'application_id'); + } +} + diff --git a/app/Options.php b/app/Options.php old mode 100644 new mode 100755 index e650bbc..895fe88 --- a/app/Options.php +++ b/app/Options.php @@ -1,5 +1,24 @@ . + */ + namespace App; use Illuminate\Database\Eloquent\Model; @@ -8,6 +27,6 @@ class Options extends Model { public $fillable = [ 'option_name', - 'option_value' + 'option_value', ]; } diff --git a/app/Policies/AbsencePolicy.php b/app/Policies/AbsencePolicy.php new file mode 100755 index 0000000..7e5c68f --- /dev/null +++ b/app/Policies/AbsencePolicy.php @@ -0,0 +1,126 @@ +hasPermissionTo('admin.viewAllAbsences')) + { + return true; + } + + return false; + } + + + public function viewOwn(User $user): bool + { + if ($user->hasPermissionTo('reviewer.viewAbsence')) { + return true; + } + + return false; + } + + /** + * Determine whether the user can view the model. + * + * @param \App\User $user + * @param \App\Absence $absence + * @return \Illuminate\Auth\Access\Response|bool + */ + public function view(User $user, Absence $absence) + { + if ($user->hasPermissionTo('reviewer.viewAbsence') && $user->is($absence->requester) || $user->hasPermissionTo('admin.manageAbsences')) + { + return true; + } + + return false; + } + + /** + * Determine whether the user can create models. + * + * @param \App\User $user + * @return \Illuminate\Auth\Access\Response|bool + */ + public function create(User $user) + { + return $user->hasPermissionTo('reviewer.requestAbsence'); + } + + + /** + * Determine whether the user can approve the absence request + * + * @param User $user + * @param Absence $absence + * @return bool + */ + public function approve(User $user, Absence $absence): bool + { + if ($user->can('admin.manageAbsences') && $user->isNot($absence->requester)) + { + return true; + } + + return false; + } + + + public function decline(User $user, Absence $absence): bool + { + if ($user->can('admin.manageAbsences') && $user->isNot($absence->requester)) + { + return true; + } + + return false; + } + + /** + * Determine whether the user can cancel the absence request + * + * @param User $user + * @param Absence $absence + * @return bool + */ + public function cancel(User $user, Absence $absence): bool { + + if($user->is($absence->requester) && $user->can('reviewer.withdrawAbsence')) { + return true; + } + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \App\User $user + * @param \App\Absence $absence + * @return \Illuminate\Auth\Access\Response|bool + */ + public function delete(User $user, Absence $absence) + { + return $user->hasPermissionTo('admin.manageAbsences'); + } + + +} diff --git a/app/Policies/ApiKeyPolicy.php b/app/Policies/ApiKeyPolicy.php new file mode 100755 index 0000000..eb728bc --- /dev/null +++ b/app/Policies/ApiKeyPolicy.php @@ -0,0 +1,72 @@ +hasRole('admin')) + return true; + + return false; + } + + + /** + * Determine whether the user can create models. + * + * @param \App\User $user + * @return mixed + */ + public function create(User $user) + { + if ($user->hasRole('admin')) + return true; + + return false; + } + + /** + * Determine whether the user can update the model. + * + * @param \App\User $user + * @param \App\ApiKey $apiKey + * @return mixed + */ + public function update(User $user, ApiKey $apiKey) + { + if ($user->hasRole('admin')) + return true; + + return false; + } + + /** + * Determine whether the user can delete the model. + * + * @param \App\User $user + * @param \App\ApiKey $apiKey + * @return mixed + */ + public function delete(User $user, ApiKey $apiKey) + { + if ($user->hasRole('admin')) + return true; + + return false; + } + +} diff --git a/app/Policies/ApplicationPolicy.php b/app/Policies/ApplicationPolicy.php old mode 100644 new mode 100755 index 07edbca..6c7c2b9 --- a/app/Policies/ApplicationPolicy.php +++ b/app/Policies/ApplicationPolicy.php @@ -1,11 +1,30 @@ . + */ + namespace App\Policies; use App\Application; -use Illuminate\Auth\Access\Response; use App\User; use Illuminate\Auth\Access\HandlesAuthorization; +use Illuminate\Auth\Access\Response; class ApplicationPolicy { @@ -23,22 +42,20 @@ class ApplicationPolicy public function viewAny(User $user) { - if ($user->can('applications.view.all')) - { - return Response::allow(); - } + if ($user->can('applications.view.all')) { + return Response::allow(); + } - return Response::deny('Forbidden'); + return Response::deny('Forbidden'); } public function view(User $user, Application $application) { - if ($user->is($application->user) && $user->can('applications.view.own') || $user->can('applications.view.all')) - { - return Response::allow(); - } + if ($user->is($application->user) && $user->can('applications.view.own') || $user->can('applications.view.all')) { + return Response::allow(); + } - return Response::deny('You are not authorised to view this application'); + return Response::deny('You are not authorised to view this application'); } public function update(User $user) @@ -48,8 +65,6 @@ class ApplicationPolicy public function delete(User $user, Application $application) { - - return $user->hasRole('admin'); - + return $user->hasRole('admin'); } } diff --git a/app/Policies/AppointmentPolicy.php b/app/Policies/AppointmentPolicy.php old mode 100644 new mode 100755 index e541e4c..29a5b50 --- a/app/Policies/AppointmentPolicy.php +++ b/app/Policies/AppointmentPolicy.php @@ -1,5 +1,24 @@ . + */ + namespace App\Policies; use App\Appointment; diff --git a/app/Policies/BanPolicy.php b/app/Policies/BanPolicy.php old mode 100644 new mode 100755 index 754458e..0eaa62e --- a/app/Policies/BanPolicy.php +++ b/app/Policies/BanPolicy.php @@ -1,5 +1,24 @@ . + */ + namespace App\Policies; use App\Ban; @@ -44,12 +63,13 @@ class BanPolicy */ public function create(User $user, User $targetUser) { - Log::debug("Authorization check started", [ + Log::debug('Authorization check started', [ 'requiredRoles' => 'admin', 'hasRequiredRole' => $user->hasRole('admin'), 'targetUser' => $targetUser->username, - 'isCurrentUser' => Auth::user()->is($user) + 'isCurrentUser' => Auth::user()->is($user), ]); + return $user->hasRole('admin') && $user->isNot($targetUser); } diff --git a/app/Policies/CommentPolicy.php b/app/Policies/CommentPolicy.php old mode 100644 new mode 100755 index 477b445..b9ce668 --- a/app/Policies/CommentPolicy.php +++ b/app/Policies/CommentPolicy.php @@ -1,5 +1,24 @@ . + */ + namespace App\Policies; use App\Comment; @@ -65,8 +84,7 @@ class CommentPolicy */ public function delete(User $user, Comment $comment) { - if ($user->is($comment->user) || $user->hasRole('admin')) - { + if ($user->is($comment->user) || $user->hasRole('admin')) { return true; } diff --git a/app/Policies/FormPolicy.php b/app/Policies/FormPolicy.php old mode 100644 new mode 100755 index c382190..ca6e808 --- a/app/Policies/FormPolicy.php +++ b/app/Policies/FormPolicy.php @@ -1,5 +1,24 @@ . + */ + namespace App\Policies; use App\Form; @@ -35,8 +54,9 @@ class FormPolicy public function viewFormbuilder(User $user) { - return $user->can('admin.hiring.formbuilder'); + return $user->can('admin.hiring.formbuilder'); } + /** * Determine whether the user can create models. * diff --git a/app/Policies/ProfilePolicy.php b/app/Policies/ProfilePolicy.php old mode 100644 new mode 100755 index bd3bc01..d19801f --- a/app/Policies/ProfilePolicy.php +++ b/app/Policies/ProfilePolicy.php @@ -1,5 +1,24 @@ . + */ + namespace App\Policies; use App\Profile; @@ -17,7 +36,6 @@ class ProfilePolicy */ public function __construct() { - } public function edit(User $user, Profile $profile) diff --git a/app/Policies/TeamFilePolicy.php b/app/Policies/TeamFilePolicy.php new file mode 100755 index 0000000..494e34c --- /dev/null +++ b/app/Policies/TeamFilePolicy.php @@ -0,0 +1,42 @@ +hasPermissionTo('teams.files.view'); + } + + public function store(User $user, Team $team) + { + return $user->hasPermissionTo('teams.files.upload') || $user->hasTeam($team); + } + + public function download(User $user) + { + return $user->hasPermissionTo('teams.files.download'); + } + + public function delete(User $user) + { + return $user->hasPermissionTo('teams.files.delete'); + } +} diff --git a/app/Policies/TeamPolicy.php b/app/Policies/TeamPolicy.php new file mode 100755 index 0000000..ad135cf --- /dev/null +++ b/app/Policies/TeamPolicy.php @@ -0,0 +1,56 @@ +hasPermissionTo('teams.view'); + } + + public function create(User $user) + { + return $user->hasPermissionTo('teams.create'); + } + + public function update(User $user, Team $team) + { + // Team owners can update their team regardless of perm. + // This perm would let admins change all teams + return $user->isOwnerOfTeam($team) || $user->hasPermissionTo('teams.update'); + } + + + public function invite(User $user, Team $team) + { + if (!$team->openJoin && $user->isOwnerOfTeam($team) || !$team->openJoin && $user->hasPermissionTo('teams.invite')) + { + return true; + } + + return false; + } + + public function switchTeam(User $user, Team $team): bool + { + // is the user in the team they're trying to switch to? + return $user->hasTeam($team); + } +} diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php old mode 100644 new mode 100755 index b98f105..f87838a --- a/app/Policies/UserPolicy.php +++ b/app/Policies/UserPolicy.php @@ -1,5 +1,24 @@ . + */ + namespace App\Policies; use App\User; @@ -16,7 +35,6 @@ class UserPolicy */ public function __construct() { - } public function edit(User $authUser, User $user) @@ -27,7 +45,7 @@ class UserPolicy // This refers to the admin tools that let staff update more information than users themselves can public function adminEdit(User $authUser, User $user) { - return $authUser->hasRole('admin') && $authUser->isNot($user); + return $authUser->hasRole('admin') && $authUser->isNot($user); } public function viewStaff(User $user) @@ -42,11 +60,11 @@ class UserPolicy public function terminate(User $authUser) { - return $authUser->hasRole('admin'); + return $authUser->hasRole('admin'); } public function delete(User $authUser, User $subject) { - return $authUser->hasRole('admin') && $authUser->isNot($subject); + return $authUser->hasRole('admin') && $authUser->isNot($subject); } } diff --git a/app/Policies/VacancyPolicy.php b/app/Policies/VacancyPolicy.php old mode 100644 new mode 100755 index 7e547f2..9e67fe0 --- a/app/Policies/VacancyPolicy.php +++ b/app/Policies/VacancyPolicy.php @@ -1,5 +1,24 @@ . + */ + namespace App\Policies; use App\User; @@ -10,6 +29,7 @@ class VacancyPolicy { use HandlesAuthorization; // TODO: Switch to permissions (there are no specific permissions yet) + /** * Determine whether the user can view any models. * @@ -65,7 +85,7 @@ class VacancyPolicy */ public function delete(User $user, Vacancy $vacancy) { - // + return $user->hasAnyRole('admin', 'hiringManager'); } /** diff --git a/app/Policies/VotePolicy.php b/app/Policies/VotePolicy.php old mode 100644 new mode 100755 index 9337aa4..570e145 --- a/app/Policies/VotePolicy.php +++ b/app/Policies/VotePolicy.php @@ -1,5 +1,24 @@ . + */ + namespace App\Policies; use App\User; diff --git a/app/Profile.php b/app/Profile.php old mode 100644 new mode 100755 index 9a64243..0367189 --- a/app/Profile.php +++ b/app/Profile.php @@ -1,19 +1,37 @@ . + */ + namespace App; use Illuminate\Database\Eloquent\Model; class Profile extends Model { - public $fillable = [ 'profileShortBio', 'profileAboutMe', 'avatarPreference', 'socialLinks', - 'userID' + 'userID', ]; @@ -21,5 +39,4 @@ class Profile extends Model { return $this->belongsTo('App\User', 'userID', 'id'); } - } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php old mode 100644 new mode 100755 index 8d8144e..c383be6 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -1,15 +1,41 @@ . + */ + namespace App\Providers; +use App\Facades\Options; use App\Application; use App\Observers\ApplicationObserver; use App\Observers\UserObserver; +use App\Observers\VacancyObserver; use App\User; +use App\Vacancy; +use Illuminate\Pagination\Paginator; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; use Sentry; + class AppServiceProvider extends ServiceProvider { /** @@ -30,14 +56,31 @@ class AppServiceProvider extends ServiceProvider public function boot() { Sentry\init([ - 'release' => env('RELEASE') + 'release' => env('RELEASE'), ]); Schema::defaultStringLength(191); + Paginator::useBootstrap(); + // Register observers User::observe(UserObserver::class); Application::observe(ApplicationObserver::class); + Vacancy::observe(VacancyObserver::class); - $this->app['request']->server->set('HTTPS', $this->app->environment() != 'local'); + $https = ($this->app->environment() != 'local'); + $collect = true; + + if(config('app.force_secure') && $this->app->environment() != 'production') + $https = true; + + if (config('app.hide_ips') || config('demo.is_enabled')) + { + $collect = false; + } + + $this->app['request']->server->set('HTTPS', $https); + + View::share('shouldCollect', $collect); + View::share('demoActive', config('demo.is_enabled')); } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php old mode 100644 new mode 100755 index 52563b4..9c6a62d --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -1,27 +1,50 @@ . + */ + namespace App\Providers; -use App\Policies\ProfilePolicy; -use App\Policies\VacancyPolicy; -use App\Policies\UserPolicy; -use App\Policies\BanPolicy; -use App\Policies\FormPolicy; -use App\Policies\VotePolicy; -use App\Policies\ApplicationPolicy; -use App\Policies\AppointmentPolicy; - -use App\User; -use App\Form; -use App\Vote; -use App\Vacancy; +use App\Absence; +use App\ApiKey; use App\Application; use App\Appointment; use App\Ban; - - +use App\Form; +use App\Policies\AbsencePolicy; +use App\Policies\ApiKeyPolicy; +use App\Policies\ApplicationPolicy; +use App\Policies\AppointmentPolicy; +use App\Policies\BanPolicy; +use App\Policies\FormPolicy; +use App\Policies\ProfilePolicy; +use App\Policies\TeamFilePolicy; +use App\Policies\TeamPolicy; +use App\Policies\UserPolicy; +use App\Policies\VacancyPolicy; +use App\Policies\VotePolicy; +use App\Team; +use App\TeamFile; +use App\User; +use App\Vacancy; +use App\Vote; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; -use Illuminate\Support\Facades\Gate; class AuthServiceProvider extends ServiceProvider { @@ -40,7 +63,10 @@ class AuthServiceProvider extends ServiceProvider 'App\Form' => 'App\Policies\FormPolicy', Vote::class => VotePolicy::class, Ban::class => BanPolicy::class, - Appointment::class => AppointmentPolicy::class + Appointment::class => AppointmentPolicy::class, + Team::class => TeamPolicy::class, + TeamFile::class => TeamFilePolicy::class, + Absence::class => AbsencePolicy::class ]; /** diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php old mode 100644 new mode 100755 index 395c518..f3d62bd --- a/app/Providers/BroadcastServiceProvider.php +++ b/app/Providers/BroadcastServiceProvider.php @@ -1,5 +1,24 @@ . + */ + namespace App\Providers; use Illuminate\Support\Facades\Broadcast; diff --git a/app/Providers/ContextAwareValidatorProvider.php b/app/Providers/ContextAwareValidatorProvider.php old mode 100644 new mode 100755 index 749de88..bc4f309 --- a/app/Providers/ContextAwareValidatorProvider.php +++ b/app/Providers/ContextAwareValidatorProvider.php @@ -1,10 +1,28 @@ . + */ + namespace App\Providers; -use Illuminate\Support\ServiceProvider; - use App; +use Illuminate\Support\ServiceProvider; class ContextAwareValidatorProvider extends ServiceProvider { @@ -25,10 +43,8 @@ class ContextAwareValidatorProvider extends ServiceProvider */ public function boot() { - App::bind('contextAwareValidator', function(){ - - return new App\Helpers\ContextAwareValidator(); - - }); + App::bind('contextAwareValidator', function () { + return new App\Helpers\ContextAwareValidator(); + }); } } diff --git a/app/Providers/DigitalStorageProvider.php b/app/Providers/DigitalStorageProvider.php new file mode 100755 index 0000000..fe594ef --- /dev/null +++ b/app/Providers/DigitalStorageProvider.php @@ -0,0 +1,31 @@ +. + */ + namespace App\Providers; use App\Listeners\LogAuthenticationFailure; @@ -11,6 +30,8 @@ use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Listeners\SendEmailVerificationNotification; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Event; +use SocialiteProviders\Discord\DiscordExtendSocialite; +use SocialiteProviders\Manager\SocialiteWasCalled; class EventServiceProvider extends ServiceProvider { @@ -22,23 +43,27 @@ class EventServiceProvider extends ServiceProvider protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, - OnUserRegistration::class + OnUserRegistration::class, ], Failed::class => [ - LogAuthenticationFailure::class + LogAuthenticationFailure::class, ], Login::class => [ - LogAuthenticationSuccess::class + LogAuthenticationSuccess::class, + ], + SocialiteWasCalled::class => [ + // ... other providers + DiscordExtendSocialite::class.'@handle', ], 'App\Events\ApplicationApprovedEvent' => [ - 'App\Listeners\PromoteUser' + 'App\Listeners\PromoteUser', ], 'App\Events\ApplicationDeniedEvent' => [ - 'App\Listeners\DenyUser' + 'App\Listeners\DenyUser', ], 'App\Events\UserBannedEvent' => [ - 'App\Listeners\OnUserBanned' - ] + 'App\Listeners\OnUserBanned', + ], ]; /** @@ -48,7 +73,6 @@ class EventServiceProvider extends ServiceProvider */ public function boot() { - parent::boot(); // diff --git a/app/Providers/IPInfoProvider.php b/app/Providers/IPInfoProvider.php old mode 100644 new mode 100755 index 3b7150a..5ebe6f8 --- a/app/Providers/IPInfoProvider.php +++ b/app/Providers/IPInfoProvider.php @@ -1,9 +1,28 @@ . + */ + namespace App\Providers; -use Illuminate\Support\ServiceProvider; use App; +use Illuminate\Support\ServiceProvider; class IPInfoProvider extends ServiceProvider { @@ -24,10 +43,8 @@ class IPInfoProvider extends ServiceProvider */ public function boot() { - App::bind('ipInformationFacade', function(){ - + App::bind('ipInformationFacade', function () { return new App\CustomFacades\IP(); - }); } } diff --git a/app/Providers/JSONProvider.php b/app/Providers/JSONProvider.php new file mode 100755 index 0000000..b5ef403 --- /dev/null +++ b/app/Providers/JSONProvider.php @@ -0,0 +1,32 @@ +body()), now()->addDays(3)); - } - catch(ConnectException $connectException) - { - Log::critical('Could not connect to Mojang servers: Cannot check/refresh status', [ - 'message' => $connectException->getMessage() - ]); - } - } - - View::share('mcstatus', json_decode(base64_decode(Cache::get('mojang_status')), true)); - } -} diff --git a/app/Providers/OptionsProvider.php b/app/Providers/OptionsProvider.php old mode 100644 new mode 100755 index 3bc98db..7c70e8e --- a/app/Providers/OptionsProvider.php +++ b/app/Providers/OptionsProvider.php @@ -1,9 +1,28 @@ . + */ + namespace App\Providers; -use Illuminate\Support\ServiceProvider; use App; +use Illuminate\Support\ServiceProvider; class OptionsProvider extends ServiceProvider { @@ -24,7 +43,7 @@ class OptionsProvider extends ServiceProvider */ public function boot() { - App::bind('smOptions', function (){ + App::bind('smOptions', function () { return new App\Helpers\Options(); }); } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php old mode 100644 new mode 100755 index 1235909..1c5f6b7 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -1,5 +1,24 @@ . + */ + namespace App\Providers; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; @@ -7,15 +26,6 @@ use Illuminate\Support\Facades\Route; class RouteServiceProvider extends ServiceProvider { - /** - * This namespace is applied to your controller routes. - * - * In addition, it is set as the URL generator's root namespace. - * - * @var string - */ - protected $namespace = 'App\Http\Controllers'; - /** * The path to the "home" route for your application. * @@ -59,7 +69,6 @@ class RouteServiceProvider extends ServiceProvider protected function mapWebRoutes() { Route::middleware('web') - ->namespace($this->namespace) ->group(base_path('routes/web.php')); } diff --git a/app/Providers/UUIDConversionProvider.php b/app/Providers/UUIDConversionProvider.php old mode 100644 new mode 100755 index 6ce7fad..7f26d6b --- a/app/Providers/UUIDConversionProvider.php +++ b/app/Providers/UUIDConversionProvider.php @@ -1,9 +1,28 @@ . + */ + namespace App\Providers; -use Illuminate\Support\ServiceProvider; use App; +use Illuminate\Support\ServiceProvider; class UUIDConversionProvider extends ServiceProvider { @@ -24,10 +43,8 @@ class UUIDConversionProvider extends ServiceProvider */ public function boot() { - App::bind('uuidConversionFacade', function(){ - + App::bind('uuidConversionFacade', function () { return new App\UUID\UUID(); - }); } } diff --git a/app/Response.php b/app/Response.php old mode 100644 new mode 100755 index 08312ea..dfa96d0 --- a/app/Response.php +++ b/app/Response.php @@ -1,5 +1,24 @@ . + */ + namespace App; use Illuminate\Database\Eloquent\Model; @@ -9,10 +28,9 @@ class Response extends Model public $fillable = [ 'responseFormID', 'associatedVacancyID', - 'responseData' + 'responseData', ]; - public function form() { return $this->hasOne('App\Form', 'id', 'responseFormID'); diff --git a/app/Services/AccountSuspensionService.php b/app/Services/AccountSuspensionService.php new file mode 100755 index 0000000..6676efd --- /dev/null +++ b/app/Services/AccountSuspensionService.php @@ -0,0 +1,106 @@ + $target->email, + 'suspended_by' => Auth::user()->email, + 'reason' => $reason + ]); + + if ($type == "on") { + $expiryDate = now()->addDays($duration); + } + + $ban = Ban::create([ + 'userID' => $target->id, + 'reason' => $reason, + 'bannedUntil' => ($type == "on") ? $expiryDate->format('Y-m-d H:i:s') : null, + 'authorUserID' => Auth::user()->id, + 'isPermanent' => ($type == "off") ? true : false + ]); + + return $ban; + } + + /** + * Lifts someone's suspension + * + * @param User $user The user to unsuspend + */ + public function unsuspend(User $user): void { + + Log::alert("A suspension has just been lifted.", [ + 'target_email' => $user->email, + ]); + + $user->bans->delete(); + } + + /** + * Checks whether a user is suspended + * + * @param User $user The user to check + * @return bool Whether the mentioned user is suspended + */ + public function isSuspended(User $user): bool { + return !is_null($user->bans); + } + + + /** + * Takes a suspension directly and makes it permanent. + * + * @param Ban $ban The suspension to make permanent + */ + public function makePermanent(Ban $ban): void { + + Log::alert('A suspension has just been made permanent.', [ + 'target_email' => $ban->user->email + ]); + + $ban->bannedUntil = null; + $ban->isPermanent = true; + + $ban->save(); + + } + + /** + * Purges old, expired suspensions from the database + * + * @return bool Whether any suspensions were lifted + */ + public function purgeExpired() + { + // Unban on the last day, not on the exact time (with Carbon::now()). + return (bool) Ban::whereDate('bannedUntil', '=', Carbon::today())->delete(); + } + + +} diff --git a/app/Services/ApplicationService.php b/app/Services/ApplicationService.php new file mode 100755 index 0000000..27ef2e9 --- /dev/null +++ b/app/Services/ApplicationService.php @@ -0,0 +1,160 @@ +where('vacancySlug', $vacancySlug)->get(); + + $firstVacancy = $vacancyWithForm->first(); + + if (!$vacancyWithForm->isEmpty() && $firstVacancy->vacancyCount !== 0 && $firstVacancy->vacancyStatus == 'OPEN') { + return view('dashboard.application-rendering.apply') + ->with([ + 'vacancy' => $vacancyWithForm->first(), + 'preprocessedForm' => json_decode($vacancyWithForm->first()->forms->formStructure, true), + ]); + } else { + + throw new ApplicationNotFoundException('The application you\'re looking for could not be found or it is currently unavailable.', 404); + + } + } + + /** + * Fills a vacancy's form with submitted data. + * + * @throws UnavailableApplicationException Thrown when the application has no vacancies or is closed + * @throws VacancyNotFoundException Thrown when the associated vacancy is not found + * @throws IncompleteApplicationException Thrown when there are missing fields + */ + public function fillForm(User $applicant, array $formData, $vacancySlug): bool + { + $vacancy = Vacancy::with('forms')->where('vacancySlug', $vacancySlug)->get(); + + if ($vacancy->isEmpty()) { + + throw new VacancyNotFoundException('This vacancy doesn\'t exist; Please use the proper buttons to apply to one.', 404); + + } + + if ($vacancy->first()->vacancyCount == 0 || $vacancy->first()->vacancyStatus !== 'OPEN') { + + throw new UnavailableApplicationException("This application is unavailable."); + } + + Log::info('Processing new application!'); + + $formStructure = json_decode($vacancy->first()->forms->formStructure, true); + $responseValidation = ContextAwareValidator::getResponseValidator($formData, $formStructure); + + + Log::info('Built response & validator structure!'); + + if (!$responseValidation->get('validator')->fails()) { + $response = Response::create([ + 'responseFormID' => $vacancy->first()->forms->id, + 'associatedVacancyID' => $vacancy->first()->id, // Since a form can be used by multiple vacancies, we can only know which specific vacancy this response ties to by using a vacancy ID + 'responseData' => $responseValidation->get('responseStructure'), + ]); + + Log::info('Registered form response!', [ + 'applicant' => $applicant->name, + 'vacancy' => $vacancy->first()->vacancyName + ]); + + $application = Application::create([ + 'applicantUserID' => $applicant->id, + 'applicantFormResponseID' => $response->id, + 'applicationStatus' => 'STAGE_SUBMITTED', + ]); + + Log::info('Submitted an application!', [ + 'responseID' => $response->id, + 'applicant' => $applicant->name + ]); + + foreach (User::all() as $user) { + if ($user->hasRole('admin')) { + $user->notify((new NewApplicant($application, $vacancy->first()))); + } + } + $application->user->notify(new ApplicationConfirmed($application)); + + return true; + + } + + Log::warning('Application form for ' . $applicant->name . ' contained errors, resetting!'); + + throw new IncompleteApplicationException('There are one or more errors in your application. Please make sure none of your fields are empty, since they are all required.'); + } + + public function updateStatus(Application $application, $newStatus) + { + switch ($newStatus) { + case 'deny': + + event(new ApplicationDeniedEvent($application)); + $message = __("Application denied successfully."); + + break; + + case 'interview': + Log::info(' Moved application ID ' . $application->id . 'to interview stage!'); + $message = __('Application moved to interview stage!'); + + $application->setStatus('STAGE_INTERVIEW'); + $application->user->notify(new ApplicationMoved()); + + break; + + default: + throw new \LogicException("Wrong status parameter. Please notify a developer."); + } + + return $message; + } + + /** + * @throws \Exception + */ + public function delete(Application $application): ?bool + { + return $application->delete(); + } + + + public function canVote($votes): bool + { + $allvotes = collect([]); + + foreach ($votes as $vote) { + if ($vote->userID == Auth::user()->id) { + $allvotes->push($vote); + } + } + + return !(($allvotes->count() == 1)); + } +} diff --git a/app/Services/AppointmentService.php b/app/Services/AppointmentService.php new file mode 100755 index 0000000..9e976f4 --- /dev/null +++ b/app/Services/AppointmentService.php @@ -0,0 +1,126 @@ + $appointmentDescription, + 'appointmentDate' => $appointmentDate->toDateTimeString(), + 'applicationID' => $application->id, + 'appointmentLocation' => (in_array($appointmentLocation, $this->allowedPlatforms)) ? $appointmentLocation : 'DISCORD', + ]); + $application->setStatus('STAGE_INTERVIEW_SCHEDULED'); + + Log::info('User '.Auth::user()->name.' has scheduled an appointment with '.$application->user->name.' for application ID'.$application->id, [ + 'datetime' => $appointmentDate->toDateTimeString(), + 'scheduled' => now(), + ]); + + $application->user->notify(new AppointmentScheduled($appointment)); + + + return true; + } + + + /** + * Cancels an appointment for the provided application. + * + * @param Application $application The target application. + * @param string $reason The reason for cancelling the appointment. + * @throws \Exception Thrown when there's no appointment to cancel + */ + public function deleteAppointment(Application $application, string $reason): bool + { + if (!empty($application->appointment)) + { + $application->user->notify(new AppointmentCancelled($application, Carbon::parse($application->appointment->appointmentDate), $reason)); + $application->appointment->delete(); + + $application->setStatus('STAGE_INTERVIEW'); + + Log::info('An interview appointment has just been cancelled.', [ + 'actor' => Auth::user()->name, + 'applicant' => $application->user->name, + 'reason' => $reason + ]); + + return true; + } + + throw new \Exception("This application doesn't have an appointment!"); + + } + + /** + * Updates the appointment with the new $status. + * It also sets the application's status to peer approval. + * + * Set $updateApplication to false to only update its status + * + * @throws InvalidAppointmentStatusException + */ + public function updateAppointment(Application $application, $status, $updateApplication = true) + { + if ($status == 'SCHEDULED' || $status == 'concluded') + { + $application->appointment->appointmentStatus = strtoupper($status); + $application->appointment->save(); + + if ($updateApplication) + { + $application->setStatus('STAGE_PEERAPPROVAL'); + $application->user->notify(new AppointmentFinished($application->appointment)); + } + } + else + { + throw new InvalidAppointmentStatusException("Invalid appointment status!"); + } + + } + + /** + * @return string[] + */ + public function getAllowedPlatforms(): array + { + return $this->allowedPlatforms; + } + +} diff --git a/app/Services/CommentService.php b/app/Services/CommentService.php new file mode 100755 index 0000000..545d3d5 --- /dev/null +++ b/app/Services/CommentService.php @@ -0,0 +1,27 @@ + Auth::user()->id, + 'applicationID' => $application->id, + 'text' => $comment, + ]); + } + + public function deleteComment(Comment $comment): ?bool + { + return $comment->delete(); + } + +} diff --git a/app/Services/ConfigurationService.php b/app/Services/ConfigurationService.php new file mode 100755 index 0000000..249a24d --- /dev/null +++ b/app/Services/ConfigurationService.php @@ -0,0 +1,75 @@ + $option) { + try { + + Log::debug('Going through option '.$optionName); + if (Options::optionExists($optionName)) { + Log::debug('Option exists, updating to new values', [ + 'opt' => $optionName, + 'new_value' => $option, + ]); + Options::changeOption($optionName, $option); + } + + } catch (\Exception $ex) { + + Log::error('Unable to update options!', [ + 'msg' => $ex->getMessage(), + 'trace' => $ex->getTraceAsString(), + ]); + + // Let service caller handle this without failing here + throw $ex; + } + } + } + + /** + * Saves the chosen game integration + * + * @throws InvalidGamePreferenceException + * @returns bool + */ + public function saveGameIntegration($gamePreference): bool + { + + // TODO: Find solution to dynamically support games + + $supportedGames = [ + 'RUST', + 'MINECRAFT', + 'SE', + 'GMOD' + ]; + + if (!is_null($gamePreference) && in_array($gamePreference, $supportedGames)) + { + Options::changeOption('currentGame', $gamePreference); + return true; + } + + throw new InvalidGamePreferenceException("Unsupported game " . $gamePreference); + } + +} diff --git a/app/Services/ContactService.php b/app/Services/ContactService.php new file mode 100755 index 0000000..86c7938 --- /dev/null +++ b/app/Services/ContactService.php @@ -0,0 +1,47 @@ +post(config('recaptcha.verify.apiurl'), [ + 'secret' => config('recaptcha.keys.secret'), + 'response' => $challenge, + 'remoteip' => $ipAddress, + ]); + + $response = json_decode($verifyrequest->getBody(), true); + + if (! $response['success']) { + throw new FailedCaptchaException('Beep beep boop... Robot? Submission failed.'); + } + + foreach (User::all() as $user) { + if ($user->hasRole('admin')) { + $user->notify(new NewContact(collect([ + 'message' => $message, + 'ip' => $ipAddress, + 'email' => $email, + ]))); + } + } + } + + +} diff --git a/app/Services/DemoService.php b/app/Services/DemoService.php new file mode 100755 index 0000000..969de1d --- /dev/null +++ b/app/Services/DemoService.php @@ -0,0 +1,11 @@ +get('validator')->fails()) { + $storableFormStructure = $contextValidation->get('structure'); + + Form::create( + [ + 'formName' => $fields['formName'], + 'formStructure' => $storableFormStructure, + 'formStatus' => 'ACTIVE', + ] + ); + return true; + } + return $contextValidation->get('validator')->errors()->getMessages(); + } + + public function deleteForm(Form $form) { + + $deletable = true; + + if (! is_null($form) && ! is_null($form->vacancies) && $form->vacancies->count() !== 0 || ! is_null($form->responses)) { + $deletable = false; + } + + if ($deletable) { + + $form->delete(); + return true; + + } else { + + throw new FormHasConstraintsException(__('You cannot delete this form because it\'s tied to one or more applications and ranks, or because it doesn\'t exist.')); + + } + } + + public function updateForm(Form $form, $fields) { + + $contextValidation = ContextAwareValidator::getValidator($fields, true); + + if (! $contextValidation->get('validator')->fails()) { + // Add the new structure into the form. New, subsquent fields will be identified by the "new" prefix + // This prefix doesn't actually change the app's behavior when it receives applications. + // Additionally, old applications won't of course display new and updated fields, because we can't travel into the past and get data for them + $form->formStructure = $contextValidation->get('structure'); + $form->save(); + + return $form; + + } else { + return $contextValidation->get('validator')->errors()->getMessages(); + } + } + +} diff --git a/app/Services/MeetingNoteService.php b/app/Services/MeetingNoteService.php new file mode 100755 index 0000000..e1136e9 --- /dev/null +++ b/app/Services/MeetingNoteService.php @@ -0,0 +1,36 @@ +load('appointment'); + + $application->appointment->meetingNotes = $noteText; + $application->appointment->save(); + + return true; + + } else { + throw new InvalidAppointmentException('There\'s no appointment to save notes to!'); + } + + } + +} diff --git a/app/Services/ProfileService.php b/app/Services/ProfileService.php new file mode 100755 index 0000000..438527b --- /dev/null +++ b/app/Services/ProfileService.php @@ -0,0 +1,50 @@ +profile; + $social = []; + + if (! is_null($profile)) { + switch ($request->avatarPref) { + case 'MOJANG': + $avatarPref = 'crafatar'; + + break; + case 'GRAVATAR': + $avatarPref = strtolower($request->avatarPref); + + break; + } + + $social['links']['github'] = $request->socialGithub; + $social['links']['twitter'] = $request->socialTwitter; + $social['links']['insta'] = $request->socialInsta; + $social['links']['discord'] = $request->socialDiscord; + + $profile->profileShortBio = $request->shortBio; + $profile->profileAboutMe = $request->aboutMe; + $profile->avatarPreference = $avatarPref; + $profile->socialLinks = json_encode($social); + + return $profile->save(); + } + + throw new ProfileNotFoundException("This profile does not exist."); + } + +} diff --git a/app/Services/SecuritySettingsService.php b/app/Services/SecuritySettingsService.php new file mode 100755 index 0000000..1f84477 --- /dev/null +++ b/app/Services/SecuritySettingsService.php @@ -0,0 +1,54 @@ + $policy + ]); + } + else + { + Log::debug('[WARN] Ignoring bogus policy', [ + 'avaliable' => $validPolicies, + 'given' => $policy + ]); + } + + Options::changeOption('graceperiod', $options['graceperiod']); + Options::changeOption('password_expiry', $options['pwExpiry']); + Options::changeOption('force2fa', $options['enforce2fa']); + Options::changeOption('requireGameLicense', $options['requirePMC']); + + return true; + + } + +} diff --git a/app/Services/TeamFileService.php b/app/Services/TeamFileService.php new file mode 100755 index 0000000..c94719c --- /dev/null +++ b/app/Services/TeamFileService.php @@ -0,0 +1,42 @@ +store('uploads'); + $originalFileName = $upload->getClientOriginalName(); + $originalFileExtension = $upload->extension(); + $originalFileSize = $upload->getSize(); + + $fileEntry = TeamFile::create([ + 'uploaded_by' => $uploader, + 'team_id' => $team, + 'name' => $originalFileName, + 'caption' => $caption, + 'description' => $description, + 'fs_location' => $file, + 'extension' => $originalFileExtension, + 'size' => $originalFileSize + ]); + + if ($fileEntry && !is_bool($file)) + { + return $fileEntry; + } + + throw new FileUploadException("There was an unknown error whilst trying to upload your file."); + + } + +} diff --git a/app/Services/TeamService.php b/app/Services/TeamService.php new file mode 100755 index 0000000..9e7c8c0 --- /dev/null +++ b/app/Services/TeamService.php @@ -0,0 +1,165 @@ + $teamName, + 'owner_id' => $ownerID, + ]); + + Auth::user()->teams()->attach($team->id); + + return $team; + } + + public function updateTeam(Team $team, $teamDescription, $joinType): bool + { + + $team->description = $teamDescription; + $team->openJoin = $joinType; + + return $team->save(); + } + + /** + * Invites a user to a $team. + * + * @throws PublicTeamInviteException Thrown when trying to invite a user to a public team + * @throws UserAlreadyInvitedException Thrown when a user is already invited + */ + public function inviteUser(Team $team, $userID): bool + { + + $user = User::findOrFail($userID); + + if (! $team->openJoin) { + if (! Teamwork::hasPendingInvite($user->email, $team)) { + Teamwork::inviteToTeam($user, $team, function (TeamInvite $invite) use ($user) { + Mail::to($user)->send(new InviteToTeam($invite)); + }); + return true; + } else { + throw new UserAlreadyInvitedException('This user has already been invited.'); + } + } else { + throw new PublicTeamInviteException('You can\'t invite users to public teams.'); + } + + } + + /** + * Accepts or denies a user invite + * + * @param Authenticatable $user + * @param $action + * @param $token + * @return bool True on success or exception on failure + * @throws InvalidInviteException Thrown when the invite code / url is invalid + */ + public function processInvite(Authenticatable $user, $action, $token): bool { + + switch ($action) { + case 'accept': + + $invite = Teamwork::getInviteFromAcceptToken($token); + + if ($invite && $invite->user->is($user)) { + Teamwork::acceptInvite($invite); + + } else { + + throw new InvalidInviteException('Invalid or expired invite URL.'); + } + + break; + + case 'deny': + + $invite = Teamwork::getInviteFromDenyToken($token); + + if ($invite && $invite->user->is($user)) { + + Teamwork::denyInvite($invite); + + } else { + + throw new InvalidInviteException('Invalid or expired invite URL.'); + } + + break; + + default: + throw new InvalidInviteException('Sorry, but the invite URL you followed was malformed.'); + } + + return true; + + } + + + /** + * @param Team $team + * @param $associatedVacancies + * @return string The success message, exception/bool if error + */ + public function updateVacancies(Team $team, $associatedVacancies): string + { + + // P.S. To future developers + // This method gave me a lot of trouble lol. It's hard to write code when you're half asleep. + // There may be an n+1 query in the view and I don't think there's a way to avoid that without writing a lot of extra code. + + $requestVacancies = $associatedVacancies; + $currentVacancies = $team->vacancies->pluck('id')->all(); + + if (is_null($requestVacancies)) { + foreach ($team->vacancies as $vacancy) { + $team->vacancies()->detach($vacancy->id); + } + + return 'Removed all vacancy associations.'; + } + + $vacancyDiff = array_diff($requestVacancies, $currentVacancies); + $deselectedDiff = array_diff($currentVacancies, $requestVacancies); + + if (! empty($vacancyDiff) || ! empty($deselectedDiff)) { + foreach ($vacancyDiff as $selectedVacancy) { + $team->vacancies()->attach($selectedVacancy); + } + + foreach ($deselectedDiff as $deselectedVacancy) { + $team->vacancies()->detach($deselectedVacancy); + } + } else { + $team->vacancies()->attach($requestVacancies); + } + return 'Assignments changed successfully.'; + } +} diff --git a/app/Services/VacancyApplicationService.php b/app/Services/VacancyApplicationService.php new file mode 100755 index 0000000..c1fbddc --- /dev/null +++ b/app/Services/VacancyApplicationService.php @@ -0,0 +1,47 @@ +. + */ + +namespace App\Services; + +use App\Application; +use App\Vacancy; + +class VacancyApplicationService +{ + /** + * Finds all applications associated with $model. + * + * @param Vacancy $model The model you want to search through. + * @return Illuminate\Support\Collection A collection of applications + */ + public function findApplications(Vacancy $model) + { + $applications = collect([]); + + foreach (Application::all() as $application) { + if ($application->response->vacancy->id == $model->id) { + $applications->push($application); + } + } + + return $applications; + } +} diff --git a/app/StaffProfile.php b/app/StaffProfile.php deleted file mode 100644 index 8d6cfba..0000000 --- a/app/StaffProfile.php +++ /dev/null @@ -1,18 +0,0 @@ -. + */ + +namespace App; + +use Mpociot\Teamwork\TeamworkTeam; + +class Team extends TeamworkTeam +{ + public $fillable = [ + 'owner_id', + 'name', + 'description', + 'openJoin', + ]; + + public function vacancies() + { + return $this->belongsToMany('App\Vacancy', 'team_has_vacancy'); + } + + + + public function files() + { + return $this->hasMany('App\TeamFile', 'team_id'); + } +} diff --git a/app/TeamFile.php b/app/TeamFile.php new file mode 100755 index 0000000..8a5fedb --- /dev/null +++ b/app/TeamFile.php @@ -0,0 +1,41 @@ +belongsTo('App\User', 'uploaded_by', 'id'); + } + + public function team() + { + return $this->belongsTo('App\Team'); + } + + + public function getSizeAttribute($value) + { + return DigitalStorageHelper::setValue($value)->formatBytes(2, true); + } +} diff --git a/app/Traits/AuthenticatesTwoFactor.php b/app/Traits/AuthenticatesTwoFactor.php old mode 100644 new mode 100755 index 4b6ab31..9a36d51 --- a/app/Traits/AuthenticatesTwoFactor.php +++ b/app/Traits/AuthenticatesTwoFactor.php @@ -1,40 +1,54 @@ . + */ + namespace App\Traits; -use Google2FA; use App\Http\Requests\Add2FASecretRequest; +use Google2FA; use Illuminate\Support\Facades\Log; - trait AuthenticatesTwoFactor { - public function verify2FA(Add2FASecretRequest $request) { $isValid = Google2FA::verifyKey($request->user()->twofa_secret, $request->otp); - if ($isValid) - { - Google2FA::login(); + if ($isValid) { + Google2FA::login(); - Log::info('SECURITY (postauth): One-time password verification succeeded', [ - 'initiator' => $request->user()->email, - 'ip' => $request->ip() - ]); + Log::info('SECURITY (postauth): One-time password verification succeeded', [ + 'initiator' => $request->user()->email, + 'ip' => $request->ip(), + ]); - return redirect()->to($this->redirectTo); - } - else - { - Log::warning('SECURITY (preauth): One-time password verification failed', [ - 'initiator' => $request->user()->email, - 'ip' => $request->ip() - ]); + return redirect()->to($this->redirectTo); + } else { + Log::warning('SECURITY (preauth): One-time password verification failed', [ + 'initiator' => $request->user()->email, + 'ip' => $request->ip(), + ]); - $request->session()->flash('error', 'Your one time password is invalid.'); - return redirect()->back(); + $request->session()->flash('error', 'Your one time password is invalid.'); + + return redirect()->back(); } } - } diff --git a/app/Traits/Cancellable.php b/app/Traits/Cancellable.php old mode 100644 new mode 100755 index cbccb67..1139202 --- a/app/Traits/Cancellable.php +++ b/app/Traits/Cancellable.php @@ -1,26 +1,44 @@ . + */ namespace App\Traits; - use App\Facades\Options; +use Illuminate\Support\Facades\Log; trait Cancellable { - public function chooseChannelsViaOptions() { $channels = []; - - if (Options::getOption('enable_slack_notifications') == 1) - { + // FIXME: This is not letting Slack and Email work at the same time + if (Options::getOption('enable_slack_notifications') == 1) { array_push($channels, 'slack'); + } elseif (Options::getOption('enable_email_notifications') == 1) { + array_push($channels, 'mail'); } - elseif(Options::getOption('enable_email_notifications') == 1) - { - array_push($channels, 'email'); - } + + Log::debug('Cancellable: current channels list', [ + 'channels' => $channels + ]); return $channels; } @@ -32,18 +50,15 @@ trait Cancellable public function via($notifiable) { - if ($this->optOut($notifiable)) - { + if ($this->optOut($notifiable)) { return []; } return $this->channels(); } - public function optOut($notifiable) { return false; } - } diff --git a/app/Traits/HandlesAccountTokens.php b/app/Traits/HandlesAccountTokens.php new file mode 100755 index 0000000..965e54a --- /dev/null +++ b/app/Traits/HandlesAccountTokens.php @@ -0,0 +1,62 @@ +. + */ + +namespace App\Traits; + +use Illuminate\Support\Facades\Hash; + +trait HandlesAccountTokens +{ + public function generateAccountTokens() + { + $deleteToken = bin2hex(openssl_random_pseudo_bytes(32)); + $cancelToken = bin2hex(openssl_random_pseudo_bytes(32)); + + $tokens = [ + + 'delete' => Hash::make($deleteToken), + 'cancel' => Hash::make($cancelToken), + + ]; + + $this->account_tokens = json_encode($tokens); + $this->save(); + + return [ + + 'delete' => $deleteToken, + 'cancel' => $cancelToken, + ]; + } + + public function verifyAccountToken(string $token, string $type): bool + { + $tokens = json_decode($this->account_tokens); + + if ($type == 'deleteToken') { + return Hash::check($token, $tokens->delete); + } elseif ($type == 'cancelToken') { + return Hash::check($token, $tokens->cancel); + } + + return false; + } +} diff --git a/app/Traits/ReceivesAccountTokens.php b/app/Traits/ReceivesAccountTokens.php new file mode 100755 index 0000000..7ed9de3 --- /dev/null +++ b/app/Traits/ReceivesAccountTokens.php @@ -0,0 +1,113 @@ +. + */ + +namespace App\Traits; + +use App\Http\Requests\UserDeleteRequest; +use App\Mail\UserAccountDeleteConfirmation; +use App\User; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Mail; + +trait ReceivesAccountTokens +{ + public function userDelete(UserDeleteRequest $request) + { + //Fixme: TEMPORARY, PLEASE REMOVE UNTIL FIXED OR DURING DEVELOPMENT + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + + if (config('demo.is_enabled')) + { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } + + // a little verbose + $user = User::find(Auth::user()->id); + $tokens = $user->generateAccountTokens(); + + Mail::to($user)->send(new UserAccountDeleteConfirmation($user, $tokens, $request->ip())); + + $user->delete(); + Auth::logout(); + + $request->session()->flash('success', __('Please check your email to finish deleting your account.')); + + return redirect()->to('/'); + } + + public function processDeleteConfirmation(Request $request, $ID, $action, $token) + { + if (config('demo.is_enabled')) + { + return redirect() + ->back() + ->with('error', 'This feature is disabled'); + } + + // We can't rely on Laravel's route model injection, because it'll ignore soft-deleted models, + // so we have to use a special scope to find them ourselves. + $user = User::withTrashed()->findOrFail($ID); + $email = $user->email; + + switch ($action) { + case 'confirm': + + if ($user->verifyAccountToken($token, 'deleteToken')) { + Log::info('SECURITY: User deleted account!', [ + + 'confirmDeleteToken' => $token, + 'ipAddress' => $request->ip(), + 'email' => $user->email, + + ]); + + $user->forceDelete(); + + $request->session()->flash('success', __('Account permanently deleted. Thank you for using our service.')); + + return redirect()->to('/'); + } + + break; + + case 'cancel': + + if ($user->verifyAccountToken($token, 'cancelToken')) { + $user->restore(); + $request->session()->flash('success', __('Account deletion cancelled! You may now login.')); + + return redirect()->to(route('login')); + } + + break; + + default: + + abort(404, __('The page you were trying to access may not exist or may be expired.')); + } + } +} diff --git a/app/UUID/UUID.php b/app/UUID/UUID.php old mode 100644 new mode 100755 index cee10d1..9a7ab32 --- a/app/UUID/UUID.php +++ b/app/UUID/UUID.php @@ -1,59 +1,59 @@ . + */ namespace App\UUID; -use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; class UUID { - // Caching would not be needed here since this method won't be used in pages that loop over a collection of usernames. - public function toUUID($username) + public function toUUID(string $username) { - if (is_null($username)) - { - throw new \LogicException('Argument username for ' . __METHOD__ . ' cannot be null!'); - } - - $response = json_decode(Http::post(trim(config('general.urls.mojang.api')) . '/profiles/minecraft', [ - $username + $response = json_decode(Http::post(trim(config('general.urls.mojang.api')).'/profiles/minecraft', [ + $username, ])->body(), true); - if (isset($response[0])) - { - return $response[0]['id']; - + if (isset($response[0])) { + return $response[0]['id']; } - throw new \InvalidArgumentException("You must supply a valid, premium Minecraft account to sign up."); + throw new \InvalidArgumentException('You must supply a valid, premium Minecraft account to sign up.'); } // Note: Caching could simply be assigning the username to it's UUID, however, to make this work, we'd need to loop over all cache items, which would be slighly ineffective - public function toUsername($uuid) + public function toUsername(string $uuid) { - if (is_null($uuid)) - { - throw new \LogicException('Argument uuid for ' . __METHOD__ . ' cannot be null!'); - } + $shortUUID = substr($uuid, 0, 8); + $username = Cache::remember('uuid_'.$shortUUID, now()->addDays(30), function () use ($shortUUID, $uuid) { + $response = json_decode(Http::get(trim(config('general.urls.mojang.session')).'/session/minecraft/profile/'.$uuid)->body(), true); - $shortUUID = substr($uuid, 0, 8); - $username = Cache::remember('uuid_' . $shortUUID, now()->addDays(30), function() use ($shortUUID, $uuid) { + Log::debug('Caching '.$shortUUID.'for thirty days'); - $response = json_decode(Http::get(trim(config('general.urls.mojang.session')) . '/session/minecraft/profile/' . $uuid)->body(), true); - - Log::debug('Caching ' . $shortUUID . 'for thirty days'); return $response['name']; + }); - }); - - return $username; - + return $username; } - - } diff --git a/app/User.php b/app/User.php old mode 100644 new mode 100755 index 06f555f..752c47b --- a/app/User.php +++ b/app/User.php @@ -1,16 +1,37 @@ . + */ + namespace App; +use App\Traits\HandlesAccountTokens; use Illuminate\Contracts\Auth\MustVerifyEmail; +use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Mpociot\Teamwork\Traits\UserHasTeams; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable implements MustVerifyEmail { - use Notifiable; - use HasRoles; + use UserHasTeams, Notifiable, HasRoles, SoftDeletes, HandlesAccountTokens; /** * The attributes that are mass assignable. @@ -18,7 +39,7 @@ class User extends Authenticatable implements MustVerifyEmail * @var array */ protected $fillable = [ - 'name', 'email', 'password', 'originalIP', 'username', 'uuid', 'dob' + 'name', 'email', 'password', 'originalIP', 'username', 'uuid', 'dob', ]; /** @@ -39,8 +60,8 @@ class User extends Authenticatable implements MustVerifyEmail 'email_verified_at' => 'datetime', ]; + // RELATIONSHIPS -// public function applications() { return $this->hasMany('App\Application', 'applicantUserID', 'id'); @@ -66,14 +87,24 @@ class User extends Authenticatable implements MustVerifyEmail return $this->hasMany('App\Comment', 'authorID', 'id'); } - - public function isBanned() + public function files() { - return !$this->bans()->get()->isEmpty(); + return $this->hasMany('App\TeamFile', 'uploaded_by'); + } + + public function absences() + { + return $this->hasMany('App\Absence', 'requesterID'); } + // UTILITY LOGIC + + public function isBanned() + { + return ! $this->bans()->get()->isEmpty(); + } public function isStaffMember() { @@ -82,13 +113,27 @@ class User extends Authenticatable implements MustVerifyEmail public function has2FA() { - return !is_null($this->twofa_secret); + return ! is_null($this->twofa_secret); } + public function hasTeam($team): bool + { + if ($team instanceof Team || is_int($team)) + { + return $this->teams->contains($team); + } + else + { + /** + * In PHP 8, we can just use union types and let PHP enforce this for us. + */ + throw new \InvalidArgumentException('Please pass either a Team object or an integer identifying a Team.'); + } + } public function routeNotificationForSlack($notification) { - return config('slack.webhook.integrationURL'); + return config('slack.webhook.integrationURL'); } } diff --git a/app/Vacancy.php b/app/Vacancy.php old mode 100644 new mode 100755 index 1a84996..0223f06 --- a/app/Vacancy.php +++ b/app/Vacancy.php @@ -1,16 +1,36 @@ . + */ + namespace App; +use GrahamCampbell\Markdown\Facades\Markdown; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Log; - -use GrahamCampbell\Markdown\Facades\Markdown; - +use Mpociot\Teamwork\Traits\UsedByTeams; class Vacancy extends Model { + //use UsedByTeams; + public $fillable = [ 'permissionGroupName', @@ -21,29 +41,30 @@ class Vacancy extends Model 'vacancyFormID', 'vacancyCount', 'vacancyStatus', - 'vacancySlug' + 'vacancySlug', + 'team_id', ]; - /** - * Get the HTML variant of the vacancyFullDescription attribute. - * - * @param string $value The original value - * @return string - */ + * Get the HTML variant of the vacancyFullDescription attribute. + * + * @param string $value The original value + * @return string + */ public function getVacancyFullDescriptionAttribute($value) { - if (!is_null($value)) - { - return Markdown::convertToHTML($value); - } - else - { - return null; + if (! is_null($value)) { + return Markdown::convertToHTML($value); + } else { + return null; } } + public function teams() + { + return $this->belongsToMany('App\Team', 'team_has_vacancy'); + } public function forms() { @@ -53,20 +74,57 @@ class Vacancy extends Model public function open() { $this->update([ - 'vacancyStatus' => 'OPEN' + 'vacancyStatus' => 'OPEN', ]); - Log::info("Vacancies: Vacancy " . $this->id . " (" . $this->vacancyName . ") opened by " . Auth::user()->name); + Log::info('Vacancies: Vacancy '.$this->id.' ('.$this->vacancyName.') opened by '.Auth::user()->name); } public function close() { $this->update([ - 'vacancyStatus' => 'CLOSED' + 'vacancyStatus' => 'CLOSED', ]); - Log::warning("Vacancies: Vacancy " . $this->id . " (" . $this->vacancyName . ") closed by " . Auth::user()->name); - + Log::warning('Vacancies: Vacancy '.$this->id.' ('.$this->vacancyName.') closed by '.Auth::user()->name); } + public function decrease() + { + if ($this->vacancyCount !== 0) + { + $this->update([ + 'vacancyCount' => $this->vacancyCount - 1 + ]); + + Log::info('Vacancies: Decreased vacancy slots by one.', [ + 'vacancyId' => $this->id, + 'vacancyName' => $this->vacancyName + ]); + } + } + + /** + * Check if the Modal is attached to the $checkingTeam Model. + * + * @param Team $checkingTeam The mdoel you want to check against + * @return bool Whether the models are attached + */ + public function hasTeam(Team $checkingTeam): bool + { + $myTeams = $this->teams; + + if (empty($myTeams)) { + // no associated teams + return false; + } + + foreach ($myTeams as $team) { + if ($team->id === $checkingTeam->id) { + return true; + } + } + + return false; + } } diff --git a/app/View/Components/AccountStatus.php b/app/View/Components/AccountStatus.php new file mode 100755 index 0000000..0c6bf6f --- /dev/null +++ b/app/View/Components/AccountStatus.php @@ -0,0 +1,31 @@ +user = User::findOrFail($userId); + } + + /** + * Get the view / contents that represent the component. + * + * @return \Illuminate\Contracts\View\View|\Closure|string + */ + public function render() + { + return view('components.account-status'); + } +} diff --git a/app/View/Components/Alert.php b/app/View/Components/Alert.php old mode 100644 new mode 100755 index 04b5f3c..a7586df --- a/app/View/Components/Alert.php +++ b/app/View/Components/Alert.php @@ -1,26 +1,50 @@ . + */ + namespace App\View\Components; use Illuminate\View\Component; class Alert extends Component { - - public $alertType; - - public $extraStyling; + public + $alertType, + $extraStyling, + $title, + $icon; /** * Create a new component instance. * - * @param $alertType - * @param string $extraStyling + * @param string $alertType The color the alert should have. + * @param string $title The alert's title + * @param string $icon The alert's icon, placed before the title + * @param string $extraStyling Any extra CSS classes to add */ - public function __construct($alertType, $extraStyling = '') + public function __construct(string $alertType, string $title = '', string $icon = '', string $extraStyling = '') { $this->alertType = $alertType; $this->extraStyling = $extraStyling; + $this->icon = $icon; + $this->title = $title; } /** diff --git a/app/View/Components/Button.php b/app/View/Components/Button.php new file mode 100755 index 0000000..71761c1 --- /dev/null +++ b/app/View/Components/Button.php @@ -0,0 +1,40 @@ +link = $link; + $this->disabled = $disabled; + $this->type = $type; + $this->target = $target; + $this->size = $size; + $this->color = $color; + $this->id = $id; + $this->icon = $icon; + } + + /** + * Get the view / contents that represent the component. + * + * @return \Illuminate\Contracts\View\View|\Closure|string + */ + public function render() + { + return view('components.button'); + } +} diff --git a/app/View/Components/Card.php b/app/View/Components/Card.php old mode 100644 new mode 100755 index 6a5a953..ee20d0d --- a/app/View/Components/Card.php +++ b/app/View/Components/Card.php @@ -1,5 +1,24 @@ . + */ + namespace App\View\Components; use Illuminate\View\Component; @@ -8,14 +27,10 @@ class Card extends Component { public $id; - public $cardTitle; - - public $footerStyle; - /** * Create a new component instance. * diff --git a/app/View/Components/Form.php b/app/View/Components/Form.php old mode 100644 new mode 100755 index 06e868d..821ea5d --- a/app/View/Components/Form.php +++ b/app/View/Components/Form.php @@ -1,16 +1,34 @@ . + */ + namespace App\View\Components; use Illuminate\View\Component; class Form extends Component { - public $formFields; - public $disableFields = false; + /** * Create a new component instance. * @@ -18,7 +36,7 @@ class Form extends Component */ public function __construct($disableFields = false) { - $this->disableFields = $disableFields; + $this->disableFields = $disableFields; } /** diff --git a/app/View/Components/GlobalErrors.php b/app/View/Components/GlobalErrors.php old mode 100644 new mode 100755 index ab130be..5360e13 --- a/app/View/Components/GlobalErrors.php +++ b/app/View/Components/GlobalErrors.php @@ -1,5 +1,24 @@ . + */ + namespace App\View\Components; use Illuminate\View\Component; diff --git a/app/View/Components/Modal.php b/app/View/Components/Modal.php old mode 100644 new mode 100755 index 4ab43d3..fd23b3f --- a/app/View/Components/Modal.php +++ b/app/View/Components/Modal.php @@ -1,5 +1,24 @@ . + */ + namespace App\View\Components; use Illuminate\View\Component; @@ -8,13 +27,10 @@ class Modal extends Component { public $id; - public $modalLabel; - public $modalTitle; - public $includeCloseButton; /** diff --git a/app/View/Components/NoPermission.php b/app/View/Components/NoPermission.php old mode 100644 new mode 100755 index 6da51a1..f55f30a --- a/app/View/Components/NoPermission.php +++ b/app/View/Components/NoPermission.php @@ -1,5 +1,24 @@ . + */ + namespace App\View\Components; use Illuminate\View\Component; @@ -9,6 +28,7 @@ class NoPermission extends Component public $type; public $inDashboard; + /** * Create a new component instance. * @@ -16,9 +36,9 @@ class NoPermission extends Component */ public function __construct($type, $inDashboard = true) { - $this->type = $type; + $this->type = $type; - $this->inDashboard = $inDashboard; + $this->inDashboard = $inDashboard; } /** diff --git a/app/Vote.php b/app/Vote.php old mode 100644 new mode 100755 index 6a89b21..74a5aa0 --- a/app/Vote.php +++ b/app/Vote.php @@ -1,5 +1,24 @@ . + */ + namespace App; use Illuminate\Database\Eloquent\Model; @@ -14,7 +33,7 @@ class Vote extends Model ]; public $touches = [ - 'application' + 'application', ]; public function user() diff --git a/artisan b/artisan old mode 100644 new mode 100755 diff --git a/bootstrap/app.php b/bootstrap/app.php old mode 100644 new mode 100755 index 037e17d..c89db0b --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,15 +1,23 @@ . + */ $app = new Illuminate\Foundation\Application( $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) diff --git a/composer.json b/composer.json old mode 100644 new mode 100755 index 6e7374b..3fcc595 --- a/composer.json +++ b/composer.json @@ -8,33 +8,37 @@ ], "license": "MIT", "require": { - "php": "^7.2.5", - "ext-imagick": "*", + "php": "^8.0", "ext-json": "*", - "arcanedev/log-viewer": "^7.0", + "arcanedev/log-viewer": "^9.0.0", "doctrine/dbal": "^2.10", - "fideloper/proxy": "^4.2", - "fruitcake/laravel-cors": "^1.0", - "geo-sot/laravel-env-editor": "^0.9.9", - "graham-campbell/markdown": "^12.0", - "guzzlehttp/guzzle": "^6.5", + "fruitcake/laravel-cors": "^2.1", + "geo-sot/laravel-env-editor": "^1.1.0", + "graham-campbell/markdown": "14.0.x-dev", + "guzzlehttp/guzzle": "^7.0.1", "jeroennoten/laravel-adminlte": "^3.2", - "laravel/framework": "^7.0", + "laravel-notification-channels/discord": "^1.3", + "laravel-notification-channels/pusher-push-notifications": "^3.0", + "laravel/framework": "^9.0", "laravel/slack-notification-channel": "^2.0", + "laravel/socialite": "^5.2", "laravel/tinker": "^2.0", - "laravel/ui": "^2.0", - "mcamara/laravel-localization": "^1.5", + "laravel/ui": "^3.0", + "mcamara/laravel-localization": "^1.7", + "mpociot/teamwork": "^7.0", "pragmarx/google2fa-laravel": "^1.3", - "sentry/sentry-laravel": "1.7.1", - "spatie/laravel-permission": "^3.13" + "sentry/sentry-laravel": "2.11.*", + "socialiteproviders/discord": "^4.1", + "spatie/laravel-permission": "^5.5" }, "require-dev": { + "ext-xdebug": "*", "barryvdh/laravel-debugbar": "^3.3", - "facade/ignition": "^2.0", - "fzaninotto/faker": "^1.9.1", + "fakerphp/faker": "^1.19", "mockery/mockery": "^1.3.1", - "nunomaduro/collision": "^4.1", - "phpunit/phpunit": "^8.5" + "nunomaduro/collision": "^6.1", + "phpunit/phpunit": "^9.3", + "spatie/laravel-ignition": "^1.0" }, "config": { "optimize-autoloader": true, @@ -48,12 +52,10 @@ }, "autoload": { "psr-4": { - "App\\": "app/" - }, - "classmap": [ - "database/seeds", - "database/factories" - ] + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } }, "autoload-dev": { "psr-4": { diff --git a/composer.lock b/composer.lock old mode 100644 new mode 100755 index 4f7d9d4..4fba88e --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7a6e859cac39fc7ff3a85d5e4d1219e1", + "content-hash": "5236a1e4db7f680486ecae2886a46354", "packages": [ { "name": "almasaeed2010/adminlte", - "version": "v3.0.5", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/ColorlibHQ/AdminLTE.git", - "reference": "6b8b69261f1aacbb4be037c934f3c3652e6dff27" + "reference": "bd4d9c72931f1dd28601b6bfb387554a381ad540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ColorlibHQ/AdminLTE/zipball/6b8b69261f1aacbb4be037c934f3c3652e6dff27", - "reference": "6b8b69261f1aacbb4be037c934f3c3652e6dff27", + "url": "https://api.github.com/repos/ColorlibHQ/AdminLTE/zipball/bd4d9c72931f1dd28601b6bfb387554a381ad540", + "reference": "bd4d9c72931f1dd28601b6bfb387554a381ad540", "shasum": "" }, "type": "library", @@ -31,7 +31,7 @@ } ], "description": "AdminLTE - admin control panel and dashboard that's based on Bootstrap 4", - "homepage": "http://adminlte.io/", + "homepage": "https://adminlte.io/", "keywords": [ "JS", "admin", @@ -43,34 +43,43 @@ "theme", "web" ], - "time": "2020-05-19T20:41:11+00:00" + "support": { + "issues": "https://github.com/ColorlibHQ/AdminLTE/issues", + "source": "https://github.com/ColorlibHQ/AdminLTE/tree/v3.2.0" + }, + "time": "2022-02-07T20:33:09+00:00" }, { "name": "arcanedev/log-viewer", - "version": "7.0.0", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/ARCANEDEV/LogViewer.git", - "reference": "fd976c90f19e5f2446f7a2d6eeb6c5705cb67178" + "reference": "ba0c14ef65c93fae6745ff0607a14d83d39e3faa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ARCANEDEV/LogViewer/zipball/fd976c90f19e5f2446f7a2d6eeb6c5705cb67178", - "reference": "fd976c90f19e5f2446f7a2d6eeb6c5705cb67178", + "url": "https://api.github.com/repos/ARCANEDEV/LogViewer/zipball/ba0c14ef65c93fae6745ff0607a14d83d39e3faa", + "reference": "ba0c14ef65c93fae6745ff0607a14d83d39e3faa", "shasum": "" }, "require": { - "arcanedev/support": "^7.0", + "arcanedev/support": "^9.0", "ext-json": "*", - "php": "^7.2.5", - "psr/log": "^1.0" + "php": "^8.0", + "psr/log": "^1.0|^2.0|^3.0" }, "require-dev": { - "orchestra/testbench": "^5.0", - "phpunit/phpunit": "^8.0|^9.0" + "laravel/framework": "^9.0", + "mockery/mockery": "^1.4.4", + "orchestra/testbench-core": "^7.0", + "phpunit/phpunit": "^9.5.10" }, "type": "library", "extra": { + "branch-alias": { + "dev-develop": "10.x-dev" + }, "laravel": { "providers": [ "Arcanedev\\LogViewer\\LogViewerServiceProvider", @@ -79,12 +88,12 @@ } }, "autoload": { - "psr-4": { - "Arcanedev\\LogViewer\\": "src/" - }, "files": [ "helpers.php" - ] + ], + "psr-4": { + "Arcanedev\\LogViewer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -98,7 +107,7 @@ "role": "Developer" } ], - "description": "Provides a Log Viewer for Laravel 5/6", + "description": "Provides a Log Viewer for Laravel", "homepage": "https://github.com/ARCANEDEV/LogViewer", "keywords": [ "arcanedev", @@ -109,44 +118,49 @@ "log-viewer", "logviewer" ], - "time": "2020-03-04T08:47:57+00:00" + "support": { + "issues": "https://github.com/ARCANEDEV/LogViewer/issues", + "source": "https://github.com/ARCANEDEV/LogViewer/tree/9.0.0" + }, + "time": "2022-02-10T21:20:19+00:00" }, { "name": "arcanedev/support", - "version": "7.1.2", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/ARCANEDEV/Support.git", - "reference": "7e4199d30f04c611ba5d895e663f111c217ff5a3" + "reference": "046d87b2d638cd0687b4ba06991947df2422970d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ARCANEDEV/Support/zipball/7e4199d30f04c611ba5d895e663f111c217ff5a3", - "reference": "7e4199d30f04c611ba5d895e663f111c217ff5a3", + "url": "https://api.github.com/repos/ARCANEDEV/Support/zipball/046d87b2d638cd0687b4ba06991947df2422970d", + "reference": "046d87b2d638cd0687b4ba06991947df2422970d", "shasum": "" }, "require": { - "illuminate/filesystem": "^7.0", - "illuminate/support": "^7.0", - "php": "^7.2.5" + "illuminate/contracts": "^9.0", + "illuminate/support": "^9.0", + "php": "^8.0.2" }, "require-dev": { - "orchestra/testbench": "^5.0", - "phpunit/phpunit": "^8.0|^9.0" + "laravel/framework": "^9.0", + "orchestra/testbench-core": "^7.0", + "phpunit/phpunit": "^9.5.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.x-dev" + "dev-develop": "10.x-dev" } }, "autoload": { - "psr-4": { - "Arcanedev\\Support\\": "src/" - }, "files": [ "helpers.php" - ] + ], + "psr-4": { + "Arcanedev\\Support\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -167,82 +181,35 @@ "laravel", "support" ], - "time": "2020-03-12T09:28:19+00:00" - }, - { - "name": "asm89/stack-cors", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/asm89/stack-cors.git", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08" + "support": { + "issues": "https://github.com/ARCANEDEV/Support/issues", + "source": "https://github.com/ARCANEDEV/Support/tree/9.0.0" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08", - "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0", - "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.0 || ^4.8.10", - "squizlabs/php_codesniffer": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Asm89\\Stack\\": "src/Asm89/Stack/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander", - "email": "iam.asm89@gmail.com" - } - ], - "description": "Cross-origin resource sharing library and stack middleware", - "homepage": "https://github.com/asm89/stack-cors", - "keywords": [ - "cors", - "stack" - ], - "time": "2019-12-24T22:41:47+00:00" + "time": "2022-02-10T19:52:50+00:00" }, { "name": "bacon/bacon-qr-code", - "version": "2.0.2", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "add6d9ff97336b62f95a3b94f75cea4e085465b2" + "reference": "0069435e2a01a57193b25790f105a5d3168653c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/add6d9ff97336b62f95a3b94f75cea4e085465b2", - "reference": "add6d9ff97336b62f95a3b94f75cea4e085465b2", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/0069435e2a01a57193b25790f105a5d3168653c1", + "reference": "0069435e2a01a57193b25790f105a5d3168653c1", "shasum": "" }, "require": { - "dasprid/enum": "^1.0", + "dasprid/enum": "^1.0.3", "ext-iconv": "*", - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phly/keep-a-changelog": "^1.4", + "phly/keep-a-changelog": "^2.1", "phpunit/phpunit": "^7 | ^8 | ^9", + "spatie/phpunit-snapshot-assertions": "^4.2.9", "squizlabs/php_codesniffer": "^3.4" }, "suggest": { @@ -268,7 +235,11 @@ ], "description": "BaconQrCode is a QR code generator for PHP.", "homepage": "https://github.com/Bacon/BaconQrCode", - "time": "2020-07-30T16:40:58+00:00" + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.6" + }, + "time": "2022-02-04T20:16:05+00:00" }, { "name": "brick/math", @@ -314,6 +285,10 @@ "brick", "math" ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.3" + }, "funding": [ { "url": "https://github.com/BenMorel", @@ -328,32 +303,32 @@ }, { "name": "clue/stream-filter", - "version": "v1.4.1", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/clue/stream-filter.git", - "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71" + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", - "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e", "shasum": "" }, "require": { "php": ">=5.3" }, "require-dev": { - "phpunit/phpunit": "^5.0 || ^4.8" + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { - "psr-4": { - "Clue\\StreamFilter\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -362,7 +337,7 @@ "authors": [ { "name": "Christian Lück", - "email": "christian@lueck.tv" + "email": "christian@clue.engineering" } ], "description": "A simple and modern approach to stream filtering in PHP", @@ -376,6 +351,10 @@ "stream_filter_append", "stream_filter_register" ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.6.0" + }, "funding": [ { "url": "https://clue.engineering/support", @@ -386,89 +365,20 @@ "type": "github" } ], - "time": "2019-04-09T12:31:48+00:00" - }, - { - "name": "composer/package-versions-deprecated", - "version": "1.11.99", - "source": { - "type": "git", - "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855", - "reference": "c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7 || ^8" - }, - "replace": { - "ocramius/package-versions": "1.11.99" - }, - "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "ext-zip": "^1.13", - "phpunit/phpunit": "^6.5 || ^7" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "PackageVersions\\": "src/PackageVersions" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2020-08-25T05:50:16+00:00" + "time": "2022-02-21T13:15:14+00:00" }, { "name": "dasprid/enum", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07" + "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07", - "reference": "6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2", + "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2", "shasum": "" }, "require-dev": { @@ -498,53 +408,99 @@ "enum", "map" ], - "time": "2020-07-30T16:37:13+00:00" + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.3" + }, + "time": "2020-10-02T16:03:48+00:00" }, { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", + "name": "dflydev/dot-access-data", + "version": "v3.0.1", "source": { "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.14" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { - "XdgBaseDir\\": "src/" + "Dflydev\\DotAccessData\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "implementation of xdg base directory specification for php", - "time": "2019-12-04T15:06:13+00:00" + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + }, + "time": "2021-08-13T13:06:58+00:00" }, { "name": "doctrine/cache", - "version": "1.10.2", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "13e3381b25847283a91948d04640543941309727" + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", - "reference": "13e3381b25847283a91948d04640543941309727", + "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", "shasum": "" }, "require": { @@ -555,20 +511,19 @@ }, "require-dev": { "alcaeus/mongo-php-adapter": "^1.1", - "doctrine/coding-standard": "^6.0", + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^8.0", "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0", - "predis/predis": "~1.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "predis/predis": "~1.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", + "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" }, "suggest": { "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" @@ -613,6 +568,10 @@ "redis", "xcache" ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.1.1" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -627,37 +586,39 @@ "type": "tidelift" } ], - "time": "2020-07-07T18:54:01+00:00" + "time": "2021-07-17T14:49:29+00:00" }, { "name": "doctrine/dbal", - "version": "2.10.3", + "version": "2.13.7", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "03ca23afc2ee062f5d3e32426ad37c34a4770dcf" + "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/03ca23afc2ee062f5d3e32426ad37c34a4770dcf", - "reference": "03ca23afc2ee062f5d3e32426ad37c34a4770dcf", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/6e22f6012b42d7932674857989fcf184e9e9b1c3", + "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3", "shasum": "" }, "require": { - "doctrine/cache": "^1.0", + "doctrine/cache": "^1.0|^2.0", + "doctrine/deprecations": "^0.5.3", "doctrine/event-manager": "^1.0", "ext-pdo": "*", - "php": "^7.2" + "php": "^7.1 || ^8" }, "require-dev": { - "doctrine/coding-standard": "^8.1", - "jetbrains/phpstorm-stubs": "^2019.1", - "nikic/php-parser": "^4.4", - "phpstan/phpstan": "^0.12.40", - "phpunit/phpunit": "^8.5.5", - "psalm/plugin-phpunit": "^0.10.0", + "doctrine/coding-standard": "9.0.0", + "jetbrains/phpstorm-stubs": "2021.1", + "phpstan/phpstan": "1.3.0", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.11", + "psalm/plugin-phpunit": "0.16.1", + "squizlabs/php_codesniffer": "3.6.2", + "symfony/cache": "^4.4", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.14.2" + "vimeo/psalm": "4.16.1" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -666,12 +627,6 @@ "bin/doctrine-dbal" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.10.x-dev", - "dev-develop": "3.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" @@ -722,6 +677,10 @@ "sqlserver", "sqlsrv" ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/2.13.7" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -736,7 +695,50 @@ "type": "tidelift" } ], - "time": "2020-09-02T01:35:42+00:00" + "time": "2022-01-06T09:08:04+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v0.5.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0|^7.0|^8.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + }, + "time": "2021-03-21T12:59:47+00:00" }, { "name": "doctrine/event-manager", @@ -812,6 +814,10 @@ "event system", "events" ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -899,6 +905,10 @@ "uppercase", "words" ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.4" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -917,32 +927,28 @@ }, { "name": "doctrine/lexer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", + "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" @@ -975,6 +981,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.2" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -989,34 +999,36 @@ "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2022-01-12T08:27:12+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v2.3.1", + "version": "v3.3.1", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2" + "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2", - "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa", + "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa", "shasum": "" }, "require": { - "php": "^7.0|^8.0" + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -1027,11 +1039,6 @@ "MIT" ], "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, { "name": "Chris Tankersley", "email": "chris@ctankersley.com", @@ -1043,37 +1050,41 @@ "cron", "schedule" ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1" + }, "funding": [ { "url": "https://github.com/dragonmantank", "type": "github" } ], - "time": "2020-10-13T00:52:37+00:00" + "time": "2022-01-18T15:43:28+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.25", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + "reference": "ee0db30118f661fb166bcffbf5d82032df484697" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697", + "reference": "ee0db30118f661fb166bcffbf5d82032df484697", "shasum": "" }, "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" + "doctrine/lexer": "^1.2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" }, "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -1081,7 +1092,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -1107,101 +1118,105 @@ "validation", "validator" ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.1.2" + }, "funding": [ { "url": "https://github.com/egulias", "type": "github" } ], - "time": "2020-12-29T14:50:06+00:00" + "time": "2021-10-11T09:18:27+00:00" }, { - "name": "fideloper/proxy", - "version": "4.4.0", + "name": "firebase/php-jwt", + "version": "v5.5.1", "source": { "type": "git", - "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8" + "url": "https://github.com/firebase/php-jwt.git", + "reference": "83b609028194aa042ea33b5af2d41a7427de80e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8", - "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/83b609028194aa042ea33b5af2d41a7427de80e6", + "reference": "83b609028194aa042ea33b5af2d41a7427de80e6", "shasum": "" }, "require": { - "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0", - "php": ">=5.4.0" + "php": ">=5.3.0" }, "require-dev": { - "illuminate/http": "^5.0|^6.0|^7.0|^8.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": ">=4.8 <=9" + }, + "suggest": { + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" }, "type": "library", - "extra": { - "laravel": { - "providers": [ - "Fideloper\\Proxy\\TrustedProxyServiceProvider" - ] - } - }, "autoload": { "psr-4": { - "Fideloper\\Proxy\\": "src/" + "Firebase\\JWT\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Chris Fidao", - "email": "fideloper@gmail.com" + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" } ], - "description": "Set trusted proxies for Laravel", + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", "keywords": [ - "load balancing", - "proxy", - "trusted proxy" + "jwt", + "php" ], - "time": "2020-06-23T01:36:47+00:00" + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v5.5.1" + }, + "time": "2021-11-08T20:18:51+00:00" }, { "name": "fruitcake/laravel-cors", - "version": "v1.0.6", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6" + "reference": "361d71f00a0eea8b74da26ae75d0d207c53aa5b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/1d127dbec313e2e227d65e0c483765d8d7559bf6", - "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/361d71f00a0eea8b74da26ae75d0d207c53aa5b3", + "reference": "361d71f00a0eea8b74da26ae75d0d207c53aa5b3", "shasum": "" }, "require": { - "asm89/stack-cors": "^1.3", - "illuminate/contracts": "^5.5|^6.0|^7.0|^8.0", - "illuminate/support": "^5.5|^6.0|^7.0|^8.0", - "php": ">=7", - "symfony/http-foundation": "^3.3|^4.0|^5.0", - "symfony/http-kernel": "^3.3|^4.0|^5.0" + "fruitcake/php-cors": "^1", + "illuminate/contracts": "^6|^7|^8|^9", + "illuminate/support": "^6|^7|^8|^9", + "php": ">=7.2" }, "require-dev": { - "laravel/framework": "^5.5|^6.0|^7.0|^8.0", - "orchestra/testbench": "^3.5|^4.0|^5.0|^6.0", - "phpro/grumphp": "^0.16|^0.17", - "phpunit/phpunit": "^6.0|^7.0|^8.0", + "laravel/framework": "^6|^7.24|^8", + "orchestra/testbench-dusk": "^4|^5|^6|^7", + "phpunit/phpunit": "^6|^7|^8|^9", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.1-dev" }, "laravel": { "providers": [ @@ -1235,40 +1250,118 @@ "crossdomain", "laravel" ], + "support": { + "issues": "https://github.com/fruitcake/laravel-cors/issues", + "source": "https://github.com/fruitcake/laravel-cors/tree/v2.1.0" + }, "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, { "url": "https://github.com/barryvdh", "type": "github" } ], - "time": "2020-04-28T08:47:37+00:00" + "time": "2022-02-19T14:17:28+00:00" }, { - "name": "geo-sot/laravel-env-editor", - "version": "v0.9.9", + "name": "fruitcake/php-cors", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/GeoSot/Laravel-EnvEditor.git", - "reference": "e828d3d3310890286d0b53045de9381187258605" + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GeoSot/Laravel-EnvEditor/zipball/e828d3d3310890286d0b53045de9381187258605", - "reference": "e828d3d3310890286d0b53045de9381187258605", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", "shasum": "" }, "require": { - "laravel/framework": "~5.5.0|~5.6.0|~5.7.0|~5.8.0|~6.0|~7.0", - "php": "^7.1" + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" }, "require-dev": { - "orchestra/testbench": "^3" + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.9.*-dev" + "dev-main": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, + { + "name": "geo-sot/laravel-env-editor", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/GeoSot/Laravel-EnvEditor.git", + "reference": "d519594fcbc5dd9d35d47d56a96aae17f12c685f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GeoSot/Laravel-EnvEditor/zipball/d519594fcbc5dd9d35d47d56a96aae17f12c685f", + "reference": "d519594fcbc5dd9d35d47d56a96aae17f12c685f", + "shasum": "" + }, + "require": { + "laravel/framework": ">=8", + "php": ">=7.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.4", + "nunomaduro/larastan": "^1.0", + "orchestra/testbench": "^6" + }, + "type": "library", + "extra": { "laravel": { "providers": [ "GeoSot\\EnvEditor\\ServiceProvider" @@ -1293,47 +1386,49 @@ "email": "geo.sotis@gmail.com" } ], - "description": "A laravel Package that Supports .Env File editing and backup ", + "description": "A laravel Package that supports .Env File, editing and backup ", "keywords": [ "EnvEditor", "geo-sot", "laravel", "laravel-env-editor" ], - "time": "2020-04-17T23:33:36+00:00" + "support": { + "issues": "https://github.com/GeoSot/Laravel-EnvEditor/issues", + "source": "https://github.com/GeoSot/Laravel-EnvEditor/tree/v1.1.0" + }, + "time": "2022-01-25T17:13:30+00:00" }, { "name": "graham-campbell/markdown", - "version": "v12.0.2", + "version": "14.0.x-dev", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Laravel-Markdown.git", - "reference": "584eb9f24004238b80ee98b6e7be82f0933554dd" + "reference": "e31023678538fafeb53b6d351e69e6e8dd7ac31e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/584eb9f24004238b80ee98b6e7be82f0933554dd", - "reference": "584eb9f24004238b80ee98b6e7be82f0933554dd", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/e31023678538fafeb53b6d351e69e6e8dd7ac31e", + "reference": "e31023678538fafeb53b6d351e69e6e8dd7ac31e", "shasum": "" }, "require": { - "illuminate/contracts": "^6.0|^7.0", - "illuminate/support": "^6.0|^7.0", - "illuminate/view": "^6.0|^7.0", - "league/commonmark": "^1.3", - "php": "^7.2.5" + "illuminate/contracts": "^8.75 || ^9.0", + "illuminate/filesystem": "^8.75 || ^9.0", + "illuminate/support": "^8.75 || ^9.0", + "illuminate/view": "^8.75 || ^9.0", + "league/commonmark": "^2.2", + "php": "^7.4.15 || ^8.0.2" }, "require-dev": { "graham-campbell/analyzer": "^3.0", - "graham-campbell/testbench": "^5.4", - "mockery/mockery": "^1.3.1", - "phpunit/phpunit": "^8.5|^9.0" + "graham-campbell/testbench": "^5.7", + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "12.0-dev" - }, "laravel": { "providers": [ "GrahamCampbell\\Markdown\\MarkdownServiceProvider" @@ -1352,7 +1447,8 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], "description": "Markdown Is A CommonMark Wrapper For Laravel", @@ -1367,6 +1463,10 @@ "laravel", "markdown" ], + "support": { + "issues": "https://github.com/GrahamCampbell/Laravel-Markdown/issues", + "source": "https://github.com/GrahamCampbell/Laravel-Markdown/tree/14.0" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -1377,99 +1477,218 @@ "type": "tidelift" } ], - "time": "2020-04-14T16:14:52+00:00" + "time": "2022-01-24T16:21:25+00:00" }, { - "name": "guzzlehttp/guzzle", - "version": "6.5.5", + "name": "graham-campbell/result-type", + "version": "v1.0.4", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "0690bde05318336c7221785f2a932467f98b64ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca", + "reference": "0690bde05318336c7221785f2a932467f98b64ca", "shasum": "" }, "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" + "php": "^7.0 || ^8.0", + "phpoption/phpoption": "^1.8" }, "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, "autoload": { "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + "GrahamCampbell\\ResultType\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2021-11-21T21:41:47+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.4-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", "framework", "http", "http client", + "psr-18", + "psr-7", "rest", "web service" ], - "time": "2020-06-16T21:01:06+00:00" + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2021-12-06T18:43:05+00:00" }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", "shasum": "" }, "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -1485,74 +1704,133 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle promises library", "keywords": [ "promise" ], - "time": "2016-12-20T10:07:11+00:00" + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.6.1", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" }, "provide": { + "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "2.1-dev" } }, "autoload": { "psr-4": { "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, { "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "PSR-7 message implementation that also provides common utility methods", @@ -1566,32 +1844,54 @@ "uri", "url" ], - "time": "2019-07-01T23:21:34+00:00" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2021-10-06T17:43:30+00:00" }, { "name": "http-interop/http-factory-guzzle", - "version": "1.0.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/http-interop/http-factory-guzzle.git", - "reference": "34861658efb9899a6618cef03de46e2a52c80fc0" + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/34861658efb9899a6618cef03de46e2a52c80fc0", - "reference": "34861658efb9899a6618cef03de46e2a52c80fc0", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.4.2", + "guzzlehttp/psr7": "^1.7||^2.0", + "php": ">=7.3", "psr/http-factory": "^1.0" }, "provide": { "psr/http-factory-implementation": "^1.0" }, "require-dev": { - "http-interop/http-factory-tests": "^0.5", - "phpunit/phpunit": "^6.5" + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" }, "type": "library", "autoload": { @@ -1616,28 +1916,36 @@ "psr-17", "psr-7" ], - "time": "2018-07-31T19:32:56+00:00" + "support": { + "issues": "https://github.com/http-interop/http-factory-guzzle/issues", + "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" + }, + "time": "2021-07-21T13:50:14+00:00" }, { "name": "jean85/pretty-package-versions", - "version": "1.5.0", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "e9f4324e88b8664be386d90cf60fbc202e1f7fc9" + "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/e9f4324e88b8664be386d90cf60fbc202e1f7fc9", - "reference": "e9f4324e88b8664be386d90cf60fbc202e1f7fc9", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af", + "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8.0", - "php": "^7.0" + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "friendsofphp/php-cs-fixer": "^2.17", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^0.12.66", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" }, "type": "library", "extra": { @@ -1660,31 +1968,35 @@ "email": "alessandro.lai85@gmail.com" } ], - "description": "A wrapper for ocramius/package-versions to get pretty versions strings", + "description": "A library to get pretty versions strings of installed dependencies", "keywords": [ "composer", "package", "release", "versions" ], - "time": "2020-06-23T06:23:06+00:00" + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5" + }, + "time": "2021-10-08T21:21:46+00:00" }, { "name": "jeroennoten/laravel-adminlte", - "version": "v3.4.4", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/jeroennoten/Laravel-AdminLTE.git", - "reference": "496e7cb3a770fcf05e78627d1b3cb0f3e4c865f3" + "reference": "5ba9fcebbdd889e4d05fdcfba927ffe1335f91ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jeroennoten/Laravel-AdminLTE/zipball/496e7cb3a770fcf05e78627d1b3cb0f3e4c865f3", - "reference": "496e7cb3a770fcf05e78627d1b3cb0f3e4c865f3", + "url": "https://api.github.com/repos/jeroennoten/Laravel-AdminLTE/zipball/5ba9fcebbdd889e4d05fdcfba927ffe1335f91ee", + "reference": "5ba9fcebbdd889e4d05fdcfba927ffe1335f91ee", "shasum": "" }, "require": { - "almasaeed2010/adminlte": "^3.0", + "almasaeed2010/adminlte": "3.2.*", "laravel/framework": ">=6.0", "php": ">=7.2.0" }, @@ -1722,64 +2034,218 @@ "administrator", "laravel" ], - "time": "2020-07-17T17:35:17+00:00" + "support": { + "issues": "https://github.com/jeroennoten/Laravel-AdminLTE/issues", + "source": "https://github.com/jeroennoten/Laravel-AdminLTE/tree/v3.8.0" + }, + "time": "2022-02-10T17:50:18+00:00" }, { - "name": "laravel/framework", - "version": "v7.30.6", + "name": "laravel-notification-channels/discord", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "ecdafad1dda3c790af186a6d18479ea4757ef9ee" + "url": "https://github.com/laravel-notification-channels/discord.git", + "reference": "e6526cd0903b51abe39d3a80b6b1f60c391598e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/ecdafad1dda3c790af186a6d18479ea4757ef9ee", - "reference": "ecdafad1dda3c790af186a6d18479ea4757ef9ee", + "url": "https://api.github.com/repos/laravel-notification-channels/discord/zipball/e6526cd0903b51abe39d3a80b6b1f60c391598e1", + "reference": "e6526cd0903b51abe39d3a80b6b1f60c391598e1", "shasum": "" }, "require": { - "doctrine/inflector": "^1.4|^2.0", - "dragonmantank/cron-expression": "^2.3.1", - "egulias/email-validator": "^2.1.10", "ext-json": "*", + "guzzlehttp/guzzle": "^6.3 || ^7.0", + "illuminate/console": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/notifications": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/queue": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "php": "^7.2|^8.0", + "textalk/websocket": "^1.2" + }, + "require-dev": { + "mockery/mockery": "^1.3.3", + "orchestra/testbench": "^5.0 || ^6.0 || ^7.0", + "phpunit/phpunit": "^8.5 || ^9.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NotificationChannels\\Discord\\DiscordServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NotificationChannels\\Discord\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cody Scott", + "email": "cs475x@icloud.com", + "role": "Developer" + } + ], + "description": "Laravel notification driver for Discord.", + "homepage": "https://github.com/laravel-notification-channels/discord", + "keywords": [ + "channel", + "discord", + "driver", + "laravel", + "notification" + ], + "support": { + "issues": "https://github.com/laravel-notification-channels/discord/issues", + "source": "https://github.com/laravel-notification-channels/discord/tree/v1.3.0" + }, + "time": "2022-02-13T23:55:52+00:00" + }, + { + "name": "laravel-notification-channels/pusher-push-notifications", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel-notification-channels/pusher-push-notifications.git", + "reference": "a3bfe644808768ba89745c8d8f74d280bddd0688" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel-notification-channels/pusher-push-notifications/zipball/a3bfe644808768ba89745c8d8f74d280bddd0688", + "reference": "a3bfe644808768ba89745c8d8f74d280bddd0688", + "shasum": "" + }, + "require": { + "illuminate/events": "~7.0 || ~8.0 || ~9.0", + "illuminate/notifications": "~7.0 || ~8.0 || ~9.0", + "illuminate/queue": "~7.0 || ~8.0 || ~9.0", + "illuminate/support": "~7.0 || ~8.0 || ~9.0", + "php": ">=7.4", + "pusher/pusher-push-notifications": "^1.1" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NotificationChannels\\PusherPushNotifications\\PusherPushNotificationsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NotificationChannels\\PusherPushNotifications\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mohamed Said", + "email": "themsaid@gmail.com", + "homepage": "https://themsaid.com" + }, + { + "name": "Marcel Pociot", + "email": "hello@marcelpociot.com", + "homepage": "http://marcelpociot.com" + }, + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be" + }, + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://sebastiandedeyne.com" + } + ], + "description": "Pusher native Push Notifications driver.", + "homepage": "https://github.com/LaravelNotificationChannels/pusher-push-notifications", + "keywords": [ + "laravel", + "notifications", + "pusher", + "pusher-push-notifications" + ], + "support": { + "issues": "https://github.com/laravel-notification-channels/pusher-push-notifications/issues", + "source": "https://github.com/laravel-notification-channels/pusher-push-notifications/tree/3.0.0" + }, + "time": "2022-02-07T00:09:50+00:00" + }, + { + "name": "laravel/framework", + "version": "v9.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "13372872bed31ae75df8709b9de5cde01d50646e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/13372872bed31ae75df8709b9de5cde01d50646e", + "reference": "13372872bed31ae75df8709b9de5cde01d50646e", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "dragonmantank/cron-expression": "^3.1", + "egulias/email-validator": "^3.1", "ext-mbstring": "*", "ext-openssl": "*", - "league/commonmark": "^1.3", - "league/flysystem": "^1.1", + "fruitcake/php-cors": "^1.2", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^2.2", + "league/flysystem": "^3.0", "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.31", - "opis/closure": "^3.6", - "php": "^7.2.5|^8.0", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7|^4.0", - "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^5.0", - "symfony/error-handler": "^5.0", - "symfony/finder": "^5.0", - "symfony/http-foundation": "^5.0", - "symfony/http-kernel": "^5.0", - "symfony/mime": "^5.0", - "symfony/polyfill-php73": "^1.17", - "symfony/process": "^5.0", - "symfony/routing": "^5.0", - "symfony/var-dumper": "^5.0", + "nesbot/carbon": "^2.53.1", + "php": "^8.0.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.2.2", + "symfony/console": "^6.0", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/var-dumper": "^6.0", "tijsverkoyen/css-to-inline-styles": "^2.2.2", - "vlucas/phpdotenv": "^4.0", - "voku/portable-ascii": "^1.4.8" + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" }, "conflict": { "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", "illuminate/bus": "self.version", "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", "illuminate/container": "self.version", @@ -1792,6 +2258,7 @@ "illuminate/hashing": "self.version", "illuminate/http": "self.version", "illuminate/log": "self.version", + "illuminate/macroable": "self.version", "illuminate/mail": "self.version", "illuminate/notifications": "self.version", "illuminate/pagination": "self.version", @@ -1807,22 +2274,27 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.155", - "doctrine/dbal": "^2.6", - "filp/whoops": "^2.8", - "guzzlehttp/guzzle": "^6.3.1|^7.0.1", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "~1.3.3|^1.4.2", - "moontoast/math": "^1.1", - "orchestra/testbench-core": "^5.8", + "aws/aws-sdk-php": "^3.198.1", + "doctrine/dbal": "^2.13.3|^3.1.4", + "fakerphp/faker": "^1.9.2", + "guzzlehttp/guzzle": "^7.2", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.4.4", + "orchestra/testbench-core": "^7.1", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.4|^9.3.3", - "predis/predis": "^1.1.1", - "symfony/cache": "^5.0" + "phpstan/phpstan": "^1.0", + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9", + "symfony/cache": "^6.0" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.198.1).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-bcmath": "Required to use the multiple_of validation rule.", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", @@ -1830,38 +2302,46 @@ "ext-posix": "Required to use all features of the queue worker.", "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.8).", - "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.2).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", - "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.4.4).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3).", - "predis/predis": "Required to use the predis connector (^1.1.2).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", - "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", - "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.x-dev" + "dev-master": "9.x-dev" } }, "autoload": { "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { - "Illuminate\\": "src/Illuminate/" + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -1880,26 +2360,89 @@ "framework", "laravel" ], - "time": "2021-12-07T14:56:47+00:00" + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-02-22T15:30:23+00:00" }, { - "name": "laravel/slack-notification-channel", - "version": "v2.2.0", + "name": "laravel/serializable-closure", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/laravel/slack-notification-channel.git", - "reference": "98e0fe5c8dda645e6af914285af7b742e167462a" + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/98e0fe5c8dda645e6af914285af7b742e167462a", - "reference": "98e0fe5c8dda645e6af914285af7b742e167462a", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e", + "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.18", + "phpstan/phpstan": "^0.12.98", + "symfony/var-dumper": "^5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2022-02-11T19:23:53+00:00" + }, + { + "name": "laravel/slack-notification-channel", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "060617a31562c88656c95c5971a36989122d4b53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/060617a31562c88656c95c5971a36989122d4b53", + "reference": "060617a31562c88656c95c5971a36989122d4b53", "shasum": "" }, "require": { "guzzlehttp/guzzle": "^6.0|^7.0", - "illuminate/notifications": "~5.8.0|^6.0|^7.0|^8.0", - "php": "^7.1.3" + "illuminate/notifications": "~5.8.0|^6.0|^7.0|^8.0|^9.0", + "php": "^7.1.3|^8.0" }, "require-dev": { "mockery/mockery": "^1.0", @@ -1937,36 +2480,109 @@ "notifications", "slack" ], - "time": "2020-08-25T18:21:34+00:00" + "support": { + "issues": "https://github.com/laravel/slack-notification-channel/issues", + "source": "https://github.com/laravel/slack-notification-channel/tree/v2.4.0" + }, + "time": "2022-01-12T18:07:54+00:00" }, { - "name": "laravel/tinker", - "version": "v2.4.2", + "name": "laravel/socialite", + "version": "v5.5.1", "source": { "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "58424c24e8aec31c3a3ac54eb3adb15e8a0a067b" + "url": "https://github.com/laravel/socialite.git", + "reference": "9b96dfd69e9c1de69c23205cb390550bc71c357e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/58424c24e8aec31c3a3ac54eb3adb15e8a0a067b", - "reference": "58424c24e8aec31c3a3ac54eb3adb15e8a0a067b", + "url": "https://api.github.com/repos/laravel/socialite/zipball/9b96dfd69e9c1de69c23205cb390550bc71c357e", + "reference": "9b96dfd69e9c1de69c23205cb390550bc71c357e", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0", - "illuminate/contracts": "^6.0|^7.0|^8.0", - "illuminate/support": "^6.0|^7.0|^8.0", - "php": "^7.2", - "psy/psysh": "^0.10.3", - "symfony/var-dumper": "^4.3|^5.0" + "ext-json": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "illuminate/http": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "league/oauth1-client": "^1.0", + "php": "^7.2|^8.0" }, "require-dev": { - "mockery/mockery": "^1.3.1", - "phpunit/phpunit": "^8.4|^9.0" + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0", + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Socialite\\SocialiteServiceProvider" + ], + "aliases": { + "Socialite": "Laravel\\Socialite\\Facades\\Socialite" + } + } + }, + "autoload": { + "psr-4": { + "Laravel\\Socialite\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", + "homepage": "https://laravel.com", + "keywords": [ + "laravel", + "oauth" + ], + "support": { + "issues": "https://github.com/laravel/socialite/issues", + "source": "https://github.com/laravel/socialite" + }, + "time": "2022-02-07T16:08:19+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/5f2f9815b7631b9f586a3de7933c25f9327d4073", + "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." }, "type": "library", "extra": { @@ -2001,34 +2617,41 @@ "laravel", "psysh" ], - "time": "2020-08-11T19:28:08+00:00" + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.7.0" + }, + "time": "2022-01-10T08:52:49+00:00" }, { "name": "laravel/ui", - "version": "v2.2.0", + "version": "v3.4.5", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "fb1404f04ece6eee128e3fb750d3a1e064238b33" + "reference": "f11d295de1508c5bb56206a620b00b6616de414c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/fb1404f04ece6eee128e3fb750d3a1e064238b33", - "reference": "fb1404f04ece6eee128e3fb750d3a1e064238b33", + "url": "https://api.github.com/repos/laravel/ui/zipball/f11d295de1508c5bb56206a620b00b6616de414c", + "reference": "f11d295de1508c5bb56206a620b00b6616de414c", "shasum": "" }, "require": { - "illuminate/console": "^7.0|^8.0", - "illuminate/filesystem": "^7.0|^8.0", - "illuminate/support": "^7.0|^8.0", - "php": "^7.2.5" + "illuminate/console": "^8.42|^9.0", + "illuminate/filesystem": "^8.42|^9.0", + "illuminate/support": "^8.82|^9.0", + "illuminate/validation": "^8.42|^9.0", + "php": "^7.3|^8.0" }, "require-dev": { - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^8.0|^9.0" + "orchestra/testbench": "^6.23|^7.0" }, "type": "library", "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, "laravel": { "providers": [ "Laravel\\Ui\\UiServiceProvider" @@ -2056,46 +2679,59 @@ "laravel", "ui" ], - "time": "2020-08-25T18:30:43+00:00" + "support": { + "source": "https://github.com/laravel/ui/tree/v3.4.5" + }, + "time": "2022-02-21T14:59:16+00:00" }, { "name": "league/commonmark", - "version": "1.6.6", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf" + "reference": "13d7751377732637814f0cda0e3f6d3243f9f769" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c4228d11e30d7493c6836d20872f9582d8ba6dcf", - "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/13d7751377732637814f0cda0e3f6d3243f9f769", + "reference": "13d7751377732637814f0cda0e3f6d3243f9f769", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "scrutinizer/ocular": "1.7.*" + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.29.2", - "erusev/parsedown": "~1.0", + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", - "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "^1.4", - "phpstan/phpstan": "^0.12.90", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", - "scrutinizer/ocular": "^1.5", - "symfony/finder": "^4.2" + "michelf/php-markdown": "^1.4", + "phpstan/phpstan": "^0.12.88 || ^1.0.0", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" }, - "bin": [ - "bin/commonmark" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.3-dev" + } + }, "autoload": { "psr-4": { "League\\CommonMark\\": "src" @@ -2113,7 +2749,7 @@ "role": "Lead Developer" } ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", "homepage": "https://commonmark.thephpleague.com", "keywords": [ "commonmark", @@ -2125,11 +2761,14 @@ "md", "parser" ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, "funding": [ - { - "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", - "type": "custom" - }, { "url": "https://www.colinodell.com/sponsor", "type": "custom" @@ -2142,67 +2781,138 @@ "url": "https://github.com/colinodell", "type": "github" }, - { - "url": "https://www.patreon.com/colinodell", - "type": "patreon" - }, { "url": "https://tidelift.com/funding/github/packagist/league/commonmark", "type": "tidelift" } ], - "time": "2021-07-17T17:13:23+00:00" + "time": "2022-02-13T15:00:57+00:00" }, { - "name": "league/flysystem", - "version": "1.1.9", + "name": "league/config", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99" + "url": "https://github.com/thephpleague/config.git", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99", + "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "1.2-dev" } }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2021-08-14T12:15:32+00:00" + }, + { + "name": "league/flysystem", + "version": "3.0.9", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "fb0801a60b7f9ea4188f01c25cb48aed26db7fb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/fb0801a60b7f9ea4188f01c25cb48aed26db7fb6", + "reference": "fb0801a60b7f9ea4188f01c25cb48aed26db7fb6", + "shasum": "" + }, + "require": { + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.0", + "aws/aws-sdk-php": "^3.198.1", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^2.0", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2212,36 +2922,42 @@ "authors": [ { "name": "Frank de Jonge", - "email": "info@frenky.net" + "email": "info@frankdejonge.nl" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "description": "File storage abstraction for PHP", "keywords": [ - "Cloud Files", "WebDAV", - "abstraction", "aws", "cloud", - "copy.com", - "dropbox", - "file systems", + "file", "files", "filesystem", "filesystems", "ftp", - "rackspace", - "remote", "s3", "sftp", "storage" ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.0.9" + }, "funding": [ { "url": "https://offset.earth/frankdejonge", - "type": "other" + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" } ], - "time": "2021-12-09T09:40:50+00:00" + "time": "2022-02-22T07:37:40+00:00" }, { "name": "league/mime-type-detection", @@ -2283,6 +2999,10 @@ } ], "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.9.0" + }, "funding": [ { "url": "https://github.com/frankdejonge", @@ -2296,21 +3016,97 @@ "time": "2021-11-21T11:48:40+00:00" }, { - "name": "mcamara/laravel-localization", - "version": "1.5.0", + "name": "league/oauth1-client", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/mcamara/laravel-localization.git", - "reference": "13a51715f8e066b0bfb637fd9065d7496c3579ec" + "url": "https://github.com/thephpleague/oauth1-client.git", + "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/13a51715f8e066b0bfb637fd9065d7496c3579ec", - "reference": "13a51715f8e066b0bfb637fd9065d7496c3579ec", + "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/88dd16b0cff68eb9167bfc849707d2c40ad91ddc", + "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc", "shasum": "" }, "require": { - "laravel/framework": "~5.2.0||~5.3.0||~5.4.0||~5.5.0||~5.6.0||~5.7.0||~5.8.0||^6.0||^7.0", + "ext-json": "*", + "ext-openssl": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "guzzlehttp/psr7": "^1.7|^2.0", + "php": ">=7.1||>=8.0" + }, + "require-dev": { + "ext-simplexml": "*", + "friendsofphp/php-cs-fixer": "^2.17", + "mockery/mockery": "^1.3.3", + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5||9.5" + }, + "suggest": { + "ext-simplexml": "For decoding XML-based responses." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev", + "dev-develop": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "League\\OAuth1\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Corlett", + "email": "bencorlett@me.com", + "homepage": "http://www.webcomm.com.au", + "role": "Developer" + } + ], + "description": "OAuth 1.0 Client Library", + "keywords": [ + "Authentication", + "SSO", + "authorization", + "bitbucket", + "identity", + "idp", + "oauth", + "oauth1", + "single sign on", + "trello", + "tumblr", + "twitter" + ], + "support": { + "issues": "https://github.com/thephpleague/oauth1-client/issues", + "source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.0" + }, + "time": "2021-08-15T23:05:49+00:00" + }, + { + "name": "mcamara/laravel-localization", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/mcamara/laravel-localization.git", + "reference": "27565315c585e90d8d93aa06afd49d6a5992fe5a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/27565315c585e90d8d93aa06afd49d6a5992fe5a", + "reference": "27565315c585e90d8d93aa06afd49d6a5992fe5a", + "shasum": "" + }, + "require": { + "laravel/framework": "~5.2.0||~5.3.0||~5.4.0||~5.5.0||~5.6.0||~5.7.0||~5.8.0||^6.0||^7.0||^8.0||^9.0", "php": ">=7.1.0" }, "require-dev": { @@ -2355,6 +3151,10 @@ "localization", "php" ], + "support": { + "issues": "https://github.com/mcamara/laravel-localization/issues", + "source": "https://github.com/mcamara/laravel-localization/tree/v1.7.0" + }, "funding": [ { "url": "https://github.com/iwasherefirst2", @@ -2365,7 +3165,7 @@ "type": "github" } ], - "time": "2020-03-05T15:19:05+00:00" + "time": "2022-01-26T10:27:45+00:00" }, { "name": "monolog/monolog", @@ -2450,6 +3250,10 @@ "logging", "psr-3" ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + }, "funding": [ { "url": "https://github.com/Seldaek", @@ -2463,17 +3267,83 @@ "time": "2021-10-01T21:08:31+00:00" }, { - "name": "nesbot/carbon", - "version": "2.55.2", + "name": "mpociot/teamwork", + "version": "7.0.0", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2" + "url": "https://github.com/mpociot/teamwork.git", + "reference": "261debfee8382be6570f9bbb6f3fea936eadb676" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8c2a18ce3e67c34efc1b29f64fe61304368259a2", - "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2", + "url": "https://api.github.com/repos/mpociot/teamwork/zipball/261debfee8382be6570f9bbb6f3fea936eadb676", + "reference": "261debfee8382be6570f9bbb6f3fea936eadb676", + "shasum": "" + }, + "require": { + "laravel/framework": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.2.5|^8.0" + }, + "require-dev": { + "doctrine/dbal": "^2.10", + "illuminate/database": "^6.0|^7.0|^8.0|^9.0", + "mockery/mockery": "^1.3.3", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Mpociot\\Teamwork\\TeamworkServiceProvider" + ], + "aliases": { + "Teamwork": "Mpociot\\Teamwork\\Facades\\Teamwork" + } + } + }, + "autoload": { + "psr-4": { + "Mpociot\\Teamwork\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marcel Pociot", + "email": "m.pociot@gmail.com" + }, + { + "name": "Oliver Kaufmann", + "email": "okaufmann91@gmail.com" + } + ], + "description": "User to Team associations for the Laravel 5 Framework", + "homepage": "http://github.com/mpociot/teamwork", + "keywords": [ + "Invite", + "Teams" + ], + "support": { + "issues": "https://github.com/mpociot/teamwork/issues", + "source": "https://github.com/mpociot/teamwork" + }, + "time": "2022-02-16T22:36:43+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.57.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78", + "reference": "4a54375c21eea4811dbd1149fe6b246517554e78", "shasum": "" }, "require": { @@ -2490,7 +3360,7 @@ "kylekatarnls/multi-tester": "^2.0", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54", + "phpstan/phpstan": "^0.12.54 || ^1.0", "phpunit/phpunit": "^7.5.20 || ^8.5.14", "squizlabs/php_codesniffer": "^3.4" }, @@ -2541,6 +3411,11 @@ "datetime", "time" ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, "funding": [ { "url": "https://opencollective.com/Carbon", @@ -2551,20 +3426,167 @@ "type": "tidelift" } ], - "time": "2021-12-03T14:59:52+00:00" + "time": "2022-02-13T18:13:33+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.9.1", + "name": "nette/schema", + "version": "v1.2.2", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "88e519766fc58bd46b8265561fb79b54e2e00b28" + "url": "https://github.com/nette/schema.git", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/88e519766fc58bd46b8265561fb79b54e2e00b28", - "reference": "88e519766fc58bd46b8265561fb79b54e2e00b28", + "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.2" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^0.12", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.2" + }, + "time": "2021-10-15T11:40:02+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.7", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99", + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.2" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.7" + }, + "time": "2022-01-24T11:29:14+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.13.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", "shasum": "" }, "require": { @@ -2603,42 +3625,52 @@ "parser", "php" ], - "time": "2020-08-30T16:15:20+00:00" + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + }, + "time": "2021-11-30T19:35:32+00:00" }, { - "name": "opis/closure", - "version": "3.6.2", + "name": "nyholm/psr7", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" + "url": "https://github.com/Nyholm/psr7.git", + "reference": "1461e07a0f2a975a52082ca3b769ca912b816226" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/1461e07a0f2a975a52082ca3b769ca912b816226", + "reference": "1461e07a0f2a975a52082ca3b769ca912b816226", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0 || ^8.0" + "php": ">=7.1", + "php-http/message-factory": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" }, "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + "http-interop/http-factory-tests": "^0.9", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || 8.5 || 9.4", + "symfony/error-handler": "^4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.6.x-dev" + "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] + "Nyholm\\Psr7\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2646,46 +3678,56 @@ ], "authors": [ { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" }, { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" } ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" + "psr-17", + "psr-7" ], - "time": "2021-04-09T13:42:10+00:00" + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.5.0" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2022-02-02T18:37:57+00:00" }, { "name": "paragonie/constant_time_encoding", - "version": "v2.3.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "47a1cedd2e4d52688eb8c96469c05ebc8fd28fa2" + "reference": "9229e15f2e6ba772f0c55dd6986c563b937170a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/47a1cedd2e4d52688eb8c96469c05ebc8fd28fa2", - "reference": "47a1cedd2e4d52688eb8c96469c05ebc8fd28fa2", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/9229e15f2e6ba772f0c55dd6986c563b937170a8", + "reference": "9229e15f2e6ba772f0c55dd6986c563b937170a8", "shasum": "" }, "require": { "php": "^7|^8" }, "require-dev": { - "phpunit/phpunit": "^6|^7", - "vimeo/psalm": "^1|^2|^3" + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" }, "type": "library", "autoload": { @@ -2726,65 +3768,25 @@ "hex2bin", "rfc4648" ], - "time": "2019-11-06T19:20:29+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.100", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", - "shasum": "" - }, - "require": { - "php": ">= 7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "time": "2020-10-15T08:29:30+00:00" + "time": "2022-01-17T05:32:27+00:00" }, { "name": "php-http/client-common", - "version": "2.3.0", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/php-http/client-common.git", - "reference": "e37e46c610c87519753135fb893111798c69076a" + "reference": "d135751167d57e27c74de674d6a30cef2dc8e054" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/e37e46c610c87519753135fb893111798c69076a", - "reference": "e37e46c610c87519753135fb893111798c69076a", + "url": "https://api.github.com/repos/php-http/client-common/zipball/d135751167d57e27c74de674d6a30cef2dc8e054", + "reference": "d135751167d57e27c74de674d6a30cef2dc8e054", "shasum": "" }, "require": { @@ -2795,14 +3797,14 @@ "psr/http-client": "^1.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.0", - "symfony/options-resolver": "^2.6 || ^3.4.20 || ~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", "symfony/polyfill-php80": "^1.17" }, "require-dev": { "doctrine/instantiator": "^1.1", "guzzlehttp/psr7": "^1.4", "nyholm/psr7": "^1.2", - "phpspec/phpspec": "^5.1 || ^6.0", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", "phpspec/prophecy": "^1.10.2", "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" }, @@ -2842,20 +3844,24 @@ "http", "httplug" ], - "time": "2020-07-21T10:04:13+00:00" + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.5.0" + }, + "time": "2021-11-26T15:01:24+00:00" }, { "name": "php-http/discovery", - "version": "1.9.1", + "version": "1.14.1", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "64a18cc891957e05d91910b3c717d6bd11fbede9" + "reference": "de90ab2b41d7d61609f504e031339776bc8c7223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/64a18cc891957e05d91910b3c717d6bd11fbede9", - "reference": "64a18cc891957e05d91910b3c717d6bd11fbede9", + "url": "https://api.github.com/repos/php-http/discovery/zipball/de90ab2b41d7d61609f504e031339776bc8c7223", + "reference": "de90ab2b41d7d61609f504e031339776bc8c7223", "shasum": "" }, "require": { @@ -2872,8 +3878,7 @@ "puli/composer-plugin": "1.0.0-beta10" }, "suggest": { - "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories", - "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details." + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" }, "type": "library", "extra": { @@ -2907,83 +3912,24 @@ "message", "psr7" ], - "time": "2020-07-13T15:44:45+00:00" - }, - { - "name": "php-http/guzzle6-adapter", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/guzzle6-adapter.git", - "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f" + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.14.1" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/6074a4b1f4d5c21061b70bab3b8ad484282fe31f", - "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.0", - "php": "^7.1", - "php-http/httplug": "^2.0", - "psr/http-client": "^1.0" - }, - "provide": { - "php-http/async-client-implementation": "1.0", - "php-http/client-implementation": "1.0", - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "ext-curl": "*", - "php-http/client-integration-tests": "^2.0", - "phpunit/phpunit": "^7.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Adapter\\Guzzle6\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - }, - { - "name": "David de Boer", - "email": "david@ddeboer.nl" - } - ], - "description": "Guzzle 6 HTTP Adapter", - "homepage": "http://httplug.io", - "keywords": [ - "Guzzle", - "http" - ], - "time": "2018-12-16T14:44:03+00:00" + "time": "2021-09-18T07:57:46+00:00" }, { "name": "php-http/httplug", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/php-http/httplug.git", - "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9" + "reference": "f640739f80dfa1152533976e3c112477f69274eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/191a0a1b41ed026b717421931f8d3bd2514ffbf9", - "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9", + "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb", + "reference": "f640739f80dfa1152533976e3c112477f69274eb", "shasum": "" }, "require": { @@ -3028,25 +3974,29 @@ "client", "http" ], - "time": "2020-07-13T15:43:23+00:00" + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.3.0" + }, + "time": "2022-02-21T09:52:22+00:00" }, { "name": "php-http/message", - "version": "1.9.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/php-http/message.git", - "reference": "2c7256e3c1aba0bfca70f099810f1c7712e00945" + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/2c7256e3c1aba0bfca70f099810f1c7712e00945", - "reference": "2c7256e3c1aba0bfca70f099810f1c7712e00945", + "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361", "shasum": "" }, "require": { - "clue/stream-filter": "^1.4.1", - "php": "^7.1", + "clue/stream-filter": "^1.5", + "php": "^7.1 || ^8.0", "php-http/message-factory": "^1.0.2", "psr/http-message": "^1.0" }, @@ -3054,35 +4004,32 @@ "php-http/message-factory-implementation": "1.0" }, "require-dev": { - "akeneo/phpspec-skip-example-extension": "^1.0", - "coduo/phpspec-data-provider-extension": "^1.0", - "ergebnis/composer-normalize": "^2.1", + "ergebnis/composer-normalize": "^2.6", "ext-zlib": "*", "guzzlehttp/psr7": "^1.0", - "henrikbjorn/phpspec-code-coverage": "^1.0", - "phpspec/phpspec": "^2.4", - "slim/slim": "^3.0", - "zendframework/zend-diactoros": "^1.0" + "laminas/laminas-diactoros": "^2.0", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" }, "suggest": { "ext-zlib": "Used with compressor/decompressor streams", "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation", - "zendframework/zend-diactoros": "Used with Diactoros Factories" + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.10-dev" } }, "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - }, "files": [ "src/filters.php" - ] + ], + "psr-4": { + "Http\\Message\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3101,7 +4048,11 @@ "message", "psr-7" ], - "time": "2020-08-17T06:33:14+00:00" + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.13.0" + }, + "time": "2022-02-11T13:41:14+00:00" }, { "name": "php-http/message-factory", @@ -3151,6 +4102,10 @@ "stream", "uri" ], + "support": { + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/master" + }, "time": "2015-12-19T14:08:53+00:00" }, { @@ -3204,6 +4159,10 @@ "keywords": [ "promise" ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.1.0" + }, "time": "2020-07-07T09:29:14+00:00" }, { @@ -3261,6 +4220,10 @@ "php", "type" ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -3319,29 +4282,33 @@ "Two Factor Authentication", "google2fa" ], + "support": { + "issues": "https://github.com/antonioribeiro/google2fa/issues", + "source": "https://github.com/antonioribeiro/google2fa/tree/8.0.0" + }, "time": "2020-04-05T10:47:18+00:00" }, { "name": "pragmarx/google2fa-laravel", - "version": "v1.3.3", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/antonioribeiro/google2fa-laravel.git", - "reference": "ed6e0a9ea1519550688ffb5afb4919204e46ecea" + "reference": "f9014fd7ea36a1f7fffa233109cf59b209469647" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antonioribeiro/google2fa-laravel/zipball/ed6e0a9ea1519550688ffb5afb4919204e46ecea", - "reference": "ed6e0a9ea1519550688ffb5afb4919204e46ecea", + "url": "https://api.github.com/repos/antonioribeiro/google2fa-laravel/zipball/f9014fd7ea36a1f7fffa233109cf59b209469647", + "reference": "f9014fd7ea36a1f7fffa233109cf59b209469647", "shasum": "" }, "require": { - "laravel/framework": ">=5.4.36", + "laravel/framework": ">=5.4.36|^8.0", "php": ">=7.0", "pragmarx/google2fa-qrcode": "^1.0" }, "require-dev": { - "orchestra/testbench": "3.4.*|3.5.*|3.6.*|3.7.*|4.*", + "orchestra/testbench": "3.4.*|3.5.*|3.6.*|3.7.*|4.*|5.*|6.*", "phpunit/phpunit": "~5|~6|~7|~8" }, "suggest": { @@ -3390,7 +4357,11 @@ "google2fa", "laravel" ], - "time": "2020-04-05T17:39:30+00:00" + "support": { + "issues": "https://github.com/antonioribeiro/google2fa-laravel/issues", + "source": "https://github.com/antonioribeiro/google2fa-laravel/tree/v1.4.1" + }, + "time": "2020-09-20T21:01:48+00:00" }, { "name": "pragmarx/google2fa-qrcode", @@ -3448,26 +4419,35 @@ "qr code", "qrcode" ], + "support": { + "issues": "https://github.com/antonioribeiro/google2fa-qrcode/issues", + "source": "https://github.com/antonioribeiro/google2fa-qrcode/tree/master" + }, "time": "2019-03-20T16:42:58+00:00" }, { "name": "psr/container", - "version": "1.1.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -3492,7 +4472,11 @@ "container-interop", "psr" ], - "time": "2021-03-05T17:36:06+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -3538,6 +4522,10 @@ "psr", "psr-14" ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, "time": "2019-01-08T18:20:26+00:00" }, { @@ -3587,6 +4575,9 @@ "psr", "psr-18" ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, "time": "2020-06-29T06:28:15+00:00" }, { @@ -3639,6 +4630,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, "time": "2019-04-30T12:38:16+00:00" }, { @@ -3689,34 +4683,37 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3736,29 +4733,32 @@ "psr", "psr-3" ], - "time": "2021-05-03T11:20:27+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" }, { "name": "psr/simple-cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -3773,7 +4773,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -3784,34 +4784,36 @@ "psr-16", "simple-cache" ], - "time": "2017-10-23T01:57:42+00:00" + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" }, { "name": "psy/psysh", - "version": "v0.10.4", + "version": "v0.11.1", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560" + "reference": "570292577277f06f590635381a7f761a6cf4f026" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560", - "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/570292577277f06f590635381a7f761a6cf4f026", + "reference": "570292577277f06f590635381a7f761a6cf4f026", "shasum": "" }, "require": { - "dnoegel/php-xdg-base-dir": "0.1.*", "ext-json": "*", "ext-tokenizer": "*", - "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", - "php": "^8.0 || ^7.0 || ^5.5.9", - "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", - "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.*" + "hoa/console": "3.17.05.02" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", @@ -3826,7 +4828,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "0.10.x-dev" + "dev-main": "0.11.x-dev" } }, "autoload": { @@ -3856,7 +4858,51 @@ "interactive", "shell" ], - "time": "2020-05-03T19:32:03+00:00" + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.1" + }, + "time": "2022-01-03T13:58:38+00:00" + }, + { + "name": "pusher/pusher-push-notifications", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/pusher/push-notifications-php.git", + "reference": "c8926f956ba4f7e681b4261220efd77f008a131d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pusher/push-notifications-php/zipball/c8926f956ba4f7e681b4261220efd77f008a131d", + "reference": "c8926f956ba4f7e681b4261220efd77f008a131d", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "^5.0", + "guzzlehttp/guzzle": "~6.0 || ~7.0", + "php": ">=5.6.0" + }, + "require-dev": { + "doctrine/instantiator": "1.0.5", + "phpunit/phpunit": "~5.7.0", + "symfony/yaml": "~3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Pusher\\PushNotifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/pusher/push-notifications-php/issues", + "source": "https://github.com/pusher/push-notifications-php/tree/1.1.2" + }, + "time": "2020-10-23T09:37:07+00:00" }, { "name": "ralouphie/getallheaders", @@ -3896,6 +4942,10 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" }, { @@ -3961,6 +5011,10 @@ "queue", "set" ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.2.2" + }, "funding": [ { "url": "https://github.com/ramsey", @@ -4055,6 +5109,10 @@ "identifier", "uuid" ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.2.3" + }, "funding": [ { "url": "https://github.com/ramsey", @@ -4069,22 +5127,22 @@ }, { "name": "sentry/sdk", - "version": "2.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php-sdk.git", - "reference": "18921af9c2777517ef9fb480845c22a98554d6af" + "reference": "2de7de3233293f80d1e244bd950adb2121a3731c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/18921af9c2777517ef9fb480845c22a98554d6af", - "reference": "18921af9c2777517ef9fb480845c22a98554d6af", + "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/2de7de3233293f80d1e244bd950adb2121a3731c", + "reference": "2de7de3233293f80d1e244bd950adb2121a3731c", "shasum": "" }, "require": { "http-interop/http-factory-guzzle": "^1.0", - "php-http/guzzle6-adapter": "^1.1|^2.0", - "sentry/sentry": "^2.3" + "sentry/sentry": "^3.1", + "symfony/http-client": "^4.3|^5.0|^6.0" }, "type": "metapackage", "notification-url": "https://packagist.org/downloads/", @@ -4097,30 +5155,53 @@ "email": "accounts@sentry.io" } ], - "description": "This is a metapackage shipping sentry/sentry with a recommended http client.", - "time": "2020-01-08T19:16:29+00:00" + "description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" + ], + "support": { + "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.1.1" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2021-11-30T11:54:41+00:00" }, { "name": "sentry/sentry", - "version": "2.4.3", + "version": "3.3.7", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "89fd1f91657b33ec9139f33f8a201eb086276103" + "reference": "32e5415803ff0349ccb5e5b5e77b016320762786" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/89fd1f91657b33ec9139f33f8a201eb086276103", - "reference": "89fd1f91657b33ec9139f33f8a201eb086276103", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/32e5415803ff0349ccb5e5b5e77b016320762786", + "reference": "32e5415803ff0349ccb5e5b5e77b016320762786", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", - "guzzlehttp/promises": "^1.3", - "guzzlehttp/psr7": "^1.6", - "jean85/pretty-package-versions": "^1.2", - "php": "^7.1", + "guzzlehttp/promises": "^1.4", + "guzzlehttp/psr7": "^1.7|^2.0", + "jean85/pretty-package-versions": "^1.5|^2.0.4", + "php": "^7.2|^8.0", "php-http/async-client-implementation": "^1.0", "php-http/client-common": "^1.5|^2.0", "php-http/discovery": "^1.6.1", @@ -4128,8 +5209,9 @@ "php-http/message": "^1.5", "psr/http-factory": "^1.0", "psr/http-message-implementation": "^1.0", - "psr/log": "^1.0", - "symfony/options-resolver": "^2.7|^3.0|^4.0|^5.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0", + "symfony/polyfill-php80": "^1.17", "symfony/polyfill-uuid": "^1.13.1" }, "conflict": { @@ -4137,15 +5219,18 @@ "raven/raven": "*" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", + "friendsofphp/php-cs-fixer": "^2.19|3.4.*", + "http-interop/http-factory-guzzle": "^1.0", "monolog/monolog": "^1.3|^2.0", + "nikic/php-parser": "^4.10.3", "php-http/mock-client": "^1.3", + "phpbench/phpbench": "^1.0", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.5.18", - "symfony/phpunit-bridge": "^4.3|^5.0", - "vimeo/psalm": "^3.4" + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5.14|^9.4", + "symfony/phpunit-bridge": "^5.2|^6.0", + "vimeo/psalm": "^4.17" }, "suggest": { "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." @@ -4153,7 +5238,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "3.3.x-dev" } }, "autoload": { @@ -4185,6 +5270,10 @@ "logging", "sentry" ], + "support": { + "issues": "https://github.com/getsentry/sentry-php/issues", + "source": "https://github.com/getsentry/sentry-php/tree/3.3.7" + }, "funding": [ { "url": "https://sentry.io/", @@ -4195,42 +5284,50 @@ "type": "custom" } ], - "time": "2020-08-13T10:54:32+00:00" + "time": "2022-01-19T08:46:27+00:00" }, { "name": "sentry/sentry-laravel", - "version": "1.7.1", + "version": "2.11.1", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "8ec4695c5c6fa28d952c0f361e02997e84920354" + "reference": "183866ec5dc367efe4d5aa22906860e837aa6685" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/8ec4695c5c6fa28d952c0f361e02997e84920354", - "reference": "8ec4695c5c6fa28d952c0f361e02997e84920354", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/183866ec5dc367efe4d5aa22906860e837aa6685", + "reference": "183866ec5dc367efe4d5aa22906860e837aa6685", "shasum": "" }, "require": { - "illuminate/support": "5.0 - 5.8 | ^6.0 | ^7.0", - "php": "^7.1", - "sentry/sdk": "^2.1" + "illuminate/support": "5.0 - 5.8 | ^6.0 | ^7.0 | ^8.0 | ^9.0", + "nyholm/psr7": "^1.0", + "php": "^7.2 | ^8.0", + "sentry/sdk": "^3.1", + "sentry/sentry": "^3.3", + "symfony/psr-http-message-bridge": "^1.0 | ^2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "2.14.*", - "laravel/framework": "^6.0", - "orchestra/testbench": "^3.9", - "phpunit/phpunit": "^8.0" + "friendsofphp/php-cs-fixer": "2.18.*", + "laravel/framework": "5.0 - 5.8 | ^6.0 | ^7.0 | ^8.0 | ^9.0", + "mockery/mockery": "^1.3", + "orchestra/testbench": "3.1 - 3.8 | ^4.7 | ^5.1 | ^6.0 | ^7.0", + "phpunit/phpunit": "^5.7 | ^6.5 | ^7.5 | ^8.4 | ^9.3" + }, + "suggest": { + "zendframework/zend-diactoros": "When using Laravel >=5.1 - <=6.9 this package can help get more accurate request info, not used on Laravel >=6.10 anymore (https://laravel.com/docs/5.8/requests#psr7-requests)" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev", + "dev-master": "2.x-dev", "dev-0.x": "0.x-dev" }, "laravel": { "providers": [ - "Sentry\\Laravel\\ServiceProvider" + "Sentry\\Laravel\\ServiceProvider", + "Sentry\\Laravel\\Tracing\\ServiceProvider" ], "aliases": { "Sentry": "Sentry\\Laravel\\Facade" @@ -4264,6 +5361,10 @@ "logging", "sentry" ], + "support": { + "issues": "https://github.com/getsentry/sentry-laravel/issues", + "source": "https://github.com/getsentry/sentry-laravel/tree/2.11.1" + }, "funding": [ { "url": "https://sentry.io/", @@ -4274,32 +5375,147 @@ "type": "custom" } ], - "time": "2020-04-01T10:30:44+00:00" + "time": "2022-02-14T20:00:19+00:00" }, { - "name": "spatie/laravel-permission", - "version": "3.16.0", + "name": "socialiteproviders/discord", + "version": "4.1.1", "source": { "type": "git", - "url": "https://github.com/spatie/laravel-permission.git", - "reference": "c5082ee84e0d128896b4a6864a8502d8c5f1df08" + "url": "https://github.com/SocialiteProviders/Discord.git", + "reference": "c6eddeb07ace7473e82d02d4db852dfacf5ef574" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/c5082ee84e0d128896b4a6864a8502d8c5f1df08", - "reference": "c5082ee84e0d128896b4a6864a8502d8c5f1df08", + "url": "https://api.github.com/repos/SocialiteProviders/Discord/zipball/c6eddeb07ace7473e82d02d4db852dfacf5ef574", + "reference": "c6eddeb07ace7473e82d02d4db852dfacf5ef574", "shasum": "" }, "require": { - "illuminate/auth": "^5.8|^6.0|^7.0|^8.0", - "illuminate/container": "^5.8|^6.0|^7.0|^8.0", - "illuminate/contracts": "^5.8|^6.0|^7.0|^8.0", - "illuminate/database": "^5.8|^6.0|^7.0|^8.0", - "php": "^7.2.5" + "ext-json": "*", + "php": "^7.2 || ^8.0", + "socialiteproviders/manager": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Discord\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christopher Eklund", + "email": "eklundchristopher@gmail.com" + } + ], + "description": "Discord OAuth2 Provider for Laravel Socialite", + "support": { + "source": "https://github.com/SocialiteProviders/Discord/tree/4.1.1" + }, + "time": "2021-01-05T22:03:58+00:00" + }, + { + "name": "socialiteproviders/manager", + "version": "v4.1.0", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Manager.git", + "reference": "4e63afbd26dc45ff263591de2a0970436a6a0bf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/4e63afbd26dc45ff263591de2a0970436a6a0bf9", + "reference": "4e63afbd26dc45ff263591de2a0970436a6a0bf9", + "shasum": "" + }, + "require": { + "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "laravel/socialite": "~4.0 || ~5.0", + "php": "^7.2 || ^8.0" }, "require-dev": { - "orchestra/testbench": "^3.8|^4.0|^5.0|^6.0", - "phpunit/phpunit": "^8.0|^9.0", + "mockery/mockery": "^1.2", + "phpunit/phpunit": "^6.0 || ^9.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "SocialiteProviders\\Manager\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "SocialiteProviders\\Manager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andy Wendt", + "email": "andy@awendt.com" + }, + { + "name": "Anton Komarev", + "email": "a.komarev@cybercog.su" + }, + { + "name": "Miguel Piedrafita", + "email": "soy@miguelpiedrafita.com" + }, + { + "name": "atymic", + "email": "atymicq@gmail.com", + "homepage": "https://atymic.dev" + } + ], + "description": "Easily add new or override built-in providers in Laravel Socialite.", + "homepage": "https://socialiteproviders.com", + "keywords": [ + "laravel", + "manager", + "oauth", + "providers", + "socialite" + ], + "support": { + "issues": "https://github.com/socialiteproviders/manager/issues", + "source": "https://github.com/socialiteproviders/manager" + }, + "time": "2022-01-23T22:40:23+00:00" + }, + { + "name": "spatie/laravel-permission", + "version": "5.5.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-permission.git", + "reference": "6a3ed627cee28a552b5176c172ae0abc5eb30925" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/6a3ed627cee28a552b5176c172ae0abc5eb30925", + "reference": "6a3ed627cee28a552b5176c172ae0abc5eb30925", + "shasum": "" + }, + "require": { + "illuminate/auth": "^7.0|^8.0|^9.0", + "illuminate/container": "^7.0|^8.0|^9.0", + "illuminate/contracts": "^7.0|^8.0|^9.0", + "illuminate/database": "^7.0|^8.0|^9.0", + "php": "^7.3|^8.0|^8.1" + }, + "require-dev": { + "orchestra/testbench": "^5.0|^6.0|^7.0", + "phpunit/phpunit": "^9.4", "predis/predis": "^1.1" }, "type": "library", @@ -4308,15 +5524,19 @@ "providers": [ "Spatie\\Permission\\PermissionServiceProvider" ] + }, + "branch-alias": { + "dev-main": "5.x-dev", + "dev-master": "5.x-dev" } }, "autoload": { - "psr-4": { - "Spatie\\Permission\\": "src" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Spatie\\Permission\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4330,7 +5550,7 @@ "role": "Developer" } ], - "description": "Permission handling for Laravel 5.8 and up", + "description": "Permission handling for Laravel 6.0 and up", "homepage": "https://github.com/spatie/laravel-permission", "keywords": [ "acl", @@ -4342,128 +5562,56 @@ "security", "spatie" ], + "support": { + "issues": "https://github.com/spatie/laravel-permission/issues", + "source": "https://github.com/spatie/laravel-permission/tree/5.5.0" + }, "funding": [ { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - } - ], - "time": "2020-08-18T17:14:06+00:00" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.4" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "funding": [ - { - "url": "https://github.com/fabpot", + "url": "https://github.com/spatie", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" } ], - "abandoned": "symfony/mailer", - "time": "2021-10-18T15:26:12+00:00" + "time": "2022-01-11T15:06:21+00:00" }, { "name": "symfony/console", - "version": "v5.4.1", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4" + "reference": "22e8efd019c3270c4f79376234a3f8752cd25490" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4", - "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4", + "url": "https://api.github.com/repos/symfony/console/zipball/22e8efd019c3270c4f79376234a3f8752cd25490", + "reference": "22e8efd019c3270c4f79376234a3f8752cd25490", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/string": "^5.4|^6.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -4502,6 +5650,9 @@ "console", "terminal" ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4516,25 +5667,24 @@ "type": "tidelift" } ], - "time": "2021-12-09T11:22:43+00:00" + "time": "2022-01-26T17:23:29+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc" + "reference": "1955d595c12c111629cc814d3f2a2ff13580508a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/44b933f98bb4b5220d10bed9ce5662f8c2d13dcc", - "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1955d595c12c111629cc814d3f2a2ff13580508a", + "reference": "1955d595c12c111629cc814d3f2a2ff13580508a", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -4565,6 +5715,9 @@ ], "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4579,29 +5732,29 @@ "type": "tidelift" } ], - "time": "2021-09-09T08:06:01+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -4629,6 +5782,9 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4643,31 +5799,31 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2021-11-01T23:48:49+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.1", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9" + "reference": "20343b3bad7ebafa38138ddcb97290a24722b57b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1e3cb3565af49cd5f93e5787500134500a29f0d9", - "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/20343b3bad7ebafa38138ddcb97290a24722b57b", + "reference": "20343b3bad7ebafa38138ddcb97290a24722b57b", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "symfony/var-dumper": "^5.4|^6.0" }, "require-dev": { "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -4697,6 +5853,9 @@ ], "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4711,44 +5870,42 @@ "type": "tidelift" } ], - "time": "2021-12-01T15:04:08+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb" + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/27d39ae126352b9fa3be5e196ccf4617897be3eb", - "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934", + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2", + "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -4779,6 +5936,9 @@ ], "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4793,24 +5953,24 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + "reference": "aa5422287b75594b90ee9cd807caf8f0df491385" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385", + "reference": "aa5422287b75594b90ee9cd807caf8f0df491385", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "psr/event-dispatcher": "^1" }, "suggest": { @@ -4819,7 +5979,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -4855,6 +6015,9 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4869,26 +6032,24 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2021-07-15T12:33:35+00:00" }, { "name": "symfony/finder", - "version": "v5.4.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590" + "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590", + "url": "https://api.github.com/repos/symfony/finder/zipball/8661b74dbabc23223f38c9b99d3f8ade71170430", + "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -4915,6 +6076,9 @@ ], "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4929,33 +6093,194 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2022-01-26T17:23:29+00:00" }, { - "name": "symfony/http-foundation", - "version": "v5.4.1", + "name": "symfony/http-client", + "version": "v6.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c" + "url": "https://github.com/symfony/http-client.git", + "reference": "45b95017f6a20d564584bdee6a376c9a79caa316" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5dad3780023a707f4c24beac7d57aead85c1ce3c", - "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c", + "url": "https://api.github.com/repos/symfony/http-client/zipball/45b95017f6a20d564584bdee6a376c9a79caa316", + "reference": "45b95017f6a20d564584bdee6a376c9a79caa316", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/http-client-contracts": "^3", + "symfony/service-contracts": "^1.0|^2|^3" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-client/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-22T06:58:00+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "265f03fed057044a8e4dc159aa33596d0f48ed3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/265f03fed057044a8e4dc159aa33596d0f48ed3f", + "reference": "265f03fed057044a8e4dc159aa33596d0f48ed3f", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.0.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-03T13:44:55+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "ad157299ced81a637fade1efcadd688d6deba5c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ad157299ced81a637fade1efcadd688d6deba5c1", + "reference": "ad157299ced81a637fade1efcadd688d6deba5c1", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0" + "symfony/cache": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0" }, "suggest": { "symfony/mime": "To use the file extension guesser" @@ -4985,6 +6310,9 @@ ], "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4999,67 +6327,64 @@ "type": "tidelift" } ], - "time": "2021-12-09T12:46:57+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.1", + "version": "v6.0.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "2bdace75c9d6a6eec7e318801b7dc87a72375052" + "reference": "9dce179ce52b0f4f669c07fd5e465e5d809a5d3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2bdace75c9d6a6eec7e318801b7dc87a72375052", - "reference": "2bdace75c9d6a6eec7e318801b7dc87a72375052", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9dce179ce52b0f4f669c07fd5e465e5d809a5d3b", + "reference": "9dce179ce52b0f4f669c07fd5e465e5d809a5d3b", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.3.7|^6.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", + "symfony/cache": "<5.4", + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", "symfony/translation-contracts": "^1.1|^2|^3", "twig/twig": "^2.13|^3.0.4" }, @@ -5094,6 +6419,9 @@ ], "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.0.4" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5108,39 +6436,114 @@ "type": "tidelift" } ], - "time": "2021-12-09T13:36:09+00:00" + "time": "2022-01-29T18:12:46+00:00" }, { - "name": "symfony/mime", - "version": "v5.2.1", + "name": "symfony/mailer", + "version": "v6.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "de97005aef7426ba008c46ba840fc301df577ada" + "url": "https://github.com/symfony/mailer.git", + "reference": "d958befe7dbee9d2b2157ef6dfa9b103efa94f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/de97005aef7426ba008c46ba840fc301df577ada", - "reference": "de97005aef7426ba008c46ba840fc301df577ada", + "url": "https://api.github.com/repos/symfony/mailer/zipball/d958befe7dbee9d2b2157ef6dfa9b103efa94f82", + "reference": "d958befe7dbee9d2b2157ef6dfa9b103efa94f82", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.15" + "egulias/email-validator": "^2.1.10|^3", + "php": ">=8.0.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" }, "conflict": { - "symfony/mailer": "<4.4" + "symfony/http-kernel": "<5.4" }, "require-dev": { - "egulias/email-validator": "^2.1.10", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "2cd9601efd040e56f43360daa68f3c6b0534923a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/2cd9601efd040e56f43360daa68f3c6b0534923a", + "reference": "2cd9601efd040e56f43360daa68f3c6b0534923a", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.1", - "symfony/property-info": "^4.4|^5.1", - "symfony/serializer": "^5.2" + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -5165,12 +6568,15 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "A library to manipulate MIME messages", + "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", "keywords": [ "mime", "mime-type" ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5185,33 +6591,27 @@ "type": "tidelift" } ], - "time": "2020-12-09T18:54:12+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.1.5", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "9ff59517938f88d90b6e65311fef08faa640f681" + "reference": "51f7006670febe4cbcbae177cbffe93ff833250d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9ff59517938f88d90b6e65311fef08faa640f681", - "reference": "9ff59517938f88d90b6e65311fef08faa640f681", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/51f7006670febe4cbcbae177cbffe93ff833250d", + "reference": "51f7006670febe4cbcbae177cbffe93ff833250d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.1|^3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\OptionsResolver\\": "" @@ -5234,13 +6634,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony OptionsResolver Component", + "description": "Provides an improved replacement for the array_replace PHP function", "homepage": "https://symfony.com", "keywords": [ "config", "configuration", "options" ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5255,25 +6658,28 @@ "type": "tidelift" } ], - "time": "2020-07-12T12:58:00+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "30885182c981ab175d4d034db0f6f469898070ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, @@ -5317,6 +6723,9 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5331,97 +6740,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-10-20T20:35:02+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", "shasum": "" }, "require": { @@ -5441,12 +6773,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5472,6 +6804,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5486,20 +6821,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2021-11-23T21:10:46+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "749045c69efb97c70d25d7463abba812e91f3a44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44", "shasum": "" }, "require": { @@ -5521,12 +6856,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5556,6 +6891,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5570,11 +6908,11 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-09-14T14:02:44+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -5603,12 +6941,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -5637,6 +6975,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5655,21 +6996,24 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, @@ -5684,12 +7028,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5714,6 +7058,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5728,11 +7075,11 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2021-11-30T18:21:41+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", @@ -5758,12 +7105,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5787,6 +7134,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5803,94 +7153,18 @@ ], "time": "2021-05-27T09:17:38+00:00" }, - { - "name": "symfony/polyfill-php73", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, { "name": "symfony/polyfill-php80", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", "shasum": "" }, "require": { @@ -5907,12 +7181,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -5943,6 +7217,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5957,20 +7234,20 @@ "type": "tidelift" } ], - "time": "2021-07-28T13:41:28+00:00" + "time": "2021-09-13T13:58:33+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", "shasum": "" }, "require": { @@ -5987,12 +7264,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6002,6 +7279,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6019,6 +7300,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -6033,25 +7317,27 @@ "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2021-09-13T13:58:11+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.18.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "da48e2cccd323e48c16c26481bf5800f6ab1c49d" + "reference": "7529922412d23ac44413d0f308861d50cf68d3ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/da48e2cccd323e48c16c26481bf5800f6ab1c49d", - "reference": "da48e2cccd323e48c16c26481bf5800f6ab1c49d", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/7529922412d23ac44413d0f308861d50cf68d3ee", + "reference": "7529922412d23ac44413d0f308861d50cf68d3ee", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" }, "suggest": { "ext-uuid": "For best performance" @@ -6059,7 +7345,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6067,12 +7353,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6096,6 +7382,9 @@ "portable", "uuid" ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.24.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -6110,25 +7399,24 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2021-10-20T20:35:02+00:00" }, { "name": "symfony/process", - "version": "v5.4.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5be20b3830f726e019162b26223110c8f47cf274" + "reference": "298ed357274c1868c20a0061df256a1250a6c4af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274", - "reference": "5be20b3830f726e019162b26223110c8f47cf274", + "url": "https://api.github.com/repos/symfony/process/zipball/298ed357274c1868c20a0061df256a1250a6c4af", + "reference": "298ed357274c1868c20a0061df256a1250a6c4af", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -6155,6 +7443,9 @@ ], "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -6169,41 +7460,127 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2022-01-26T17:23:29+00:00" }, { - "name": "symfony/routing", - "version": "v5.4.0", + "name": "symfony/psr-http-message-bridge", + "version": "v2.1.2", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1" + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9eeae93c32ca86746e5d38f3679e9569981038b1", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34", + "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=7.1", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "psr/log": "^1.1 || ^2 || ^3", + "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.4@dev || ^6.0" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-main": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/symfony/psr-http-message-bridge/issues", + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-05T13:13:39+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "b1debdf7a40e6bc7eee0f363ab9dd667fe04f099" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/b1debdf7a40e6bc7eee0f363ab9dd667fe04f099", + "reference": "b1debdf7a40e6bc7eee0f363ab9dd667fe04f099", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.12", "psr/log": "^1|^2|^3", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/config": "For using the all-in-one router or any loader", @@ -6242,6 +7619,9 @@ "uri", "url" ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -6256,26 +7636,25 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "36715ebf9fb9db73db0cb24263c79077c6fe8603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/36715ebf9fb9db73db0cb24263c79077c6fe8603", + "reference": "36715ebf9fb9db73db0cb24263c79077c6fe8603", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "php": ">=8.0.2", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -6286,7 +7665,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -6322,6 +7701,9 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.0.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -6336,38 +7718,37 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2021-11-04T17:53:12+00:00" }, { "name": "symfony/string", - "version": "v5.4.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d" + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", + "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -6405,6 +7786,9 @@ "utf-8", "utf8" ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -6419,52 +7803,50 @@ "type": "tidelift" } ], - "time": "2021-11-24T10:02:00+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/translation", - "version": "v5.4.1", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "8c82cd35ed861236138d5ae1c78c0c7ebcd62107" + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/8c82cd35ed861236138d5ae1c78c0c7ebcd62107", - "reference": "8c82cd35ed861236138d5ae1c78c0c7ebcd62107", + "url": "https://api.github.com/repos/symfony/translation/zipball/71bb15335798f8c4da110911bcf2d2fead7a430d", + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.3|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -6499,6 +7881,9 @@ ], "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -6513,24 +7898,24 @@ "type": "tidelift" } ], - "time": "2021-12-05T20:33:52+00:00" + "time": "2022-01-07T00:29:03+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" + "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", + "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.0.2" }, "suggest": { "symfony/translation-implementation": "" @@ -6538,7 +7923,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -6574,6 +7959,9 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -6588,36 +7976,35 @@ "type": "tidelift" } ], - "time": "2021-08-17T14:20:01+00:00" + "time": "2021-09-07T12:43:40+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.1", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc" + "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2366ac8d8abe0c077844613c1a4f0c0a9f522dcc", - "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7b701676fc64f9ef11f9b4870f16b48f66be4834", + "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" + "symfony/console": "<5.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -6660,6 +8047,9 @@ "debug", "dump" ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.0.3" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -6674,7 +8064,56 @@ "type": "tidelift" } ], - "time": "2021-12-01T15:04:08+00:00" + "time": "2022-01-17T16:30:44+00:00" + }, + { + "name": "textalk/websocket", + "version": "1.5.5", + "source": { + "type": "git", + "url": "https://github.com/Textalk/websocket-php.git", + "reference": "846542f82658132cd36acb7a7e8ce0f03960c295" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Textalk/websocket-php/zipball/846542f82658132cd36acb7a7e8ce0f03960c295", + "reference": "846542f82658132cd36acb7a7e8ce0f03960c295", + "shasum": "" + }, + "require": { + "php": "^7.2 | ^8.0", + "psr/log": "^1 | ^2 | ^3" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpunit/phpunit": "^8.0|^9.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "WebSocket\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Fredrik Liljegren" + }, + { + "name": "Sören Jensen", + "email": "soren@abicart.se" + } + ], + "description": "WebSocket client and server", + "support": { + "issues": "https://github.com/Textalk/websocket-php/issues", + "source": "https://github.com/Textalk/websocket-php/tree/1.5.5" + }, + "time": "2021-08-07T10:21:40+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -6723,41 +8162,47 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + }, "time": "2021-12-08T09:12:39+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v4.2.2", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "77e974614d2ead521f18069dccc571696f52b8dc" + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/77e974614d2ead521f18069dccc571696f52b8dc", - "reference": "77e974614d2ead521f18069dccc571696f52b8dc", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", - "phpoption/phpoption": "^1.7.3", - "symfony/polyfill-ctype": "^1.17" + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", "ext-filter": "*", - "ext-pcre": "*", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21" + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" }, "suggest": { - "ext-filter": "Required to use the boolean validator.", - "ext-pcre": "Required to use most of the library." + "ext-filter": "Required to use the boolean validator." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.4-dev" } }, "autoload": { @@ -6787,6 +8232,10 @@ "env", "environment" ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + }, "funding": [ { "url": "https://github.com/GrahamCampbell", @@ -6797,20 +8246,20 @@ "type": "tidelift" } ], - "time": "2021-12-12T23:07:53+00:00" + "time": "2021-12-12T23:22:04+00:00" }, { "name": "voku/portable-ascii", - "version": "1.5.6", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" + "reference": "9bd89e83cecdf8c37b64909454249eaed98b2c89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/9bd89e83cecdf8c37b64909454249eaed98b2c89", + "reference": "9bd89e83cecdf8c37b64909454249eaed98b2c89", "shasum": "" }, "require": { @@ -6845,6 +8294,10 @@ "clean", "php" ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.0" + }, "funding": [ { "url": "https://www.paypal.me/moelleken", @@ -6867,58 +8320,118 @@ "type": "tidelift" } ], - "time": "2020-11-12T00:07:28+00:00" + "time": "2022-01-24T18:59:03+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" } ], "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.4.2", + "version": "v3.6.7", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac" + "reference": "b96f9820aaf1ff9afe945207883149e1c7afb298" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/91ee8b3acf0d72a4937f4855bd245acbda9910ac", - "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/b96f9820aaf1ff9afe945207883149e1c7afb298", + "reference": "b96f9820aaf1ff9afe945207883149e1c7afb298", "shasum": "" }, "require": { - "illuminate/routing": "^5.5|^6|^7", - "illuminate/session": "^5.5|^6|^7", - "illuminate/support": "^5.5|^6|^7", - "maximebf/debugbar": "^1.16.3", - "php": ">=7.0", - "symfony/debug": "^3|^4|^5", - "symfony/finder": "^3|^4|^5" + "illuminate/routing": "^6|^7|^8|^9", + "illuminate/session": "^6|^7|^8|^9", + "illuminate/support": "^6|^7|^8|^9", + "maximebf/debugbar": "^1.17.2", + "php": ">=7.2", + "symfony/debug": "^4.3|^5|^6", + "symfony/finder": "^4.3|^5|^6" }, "require-dev": { - "orchestra/testbench": "^3.5|^4.0|^5.0", - "phpunit/phpunit": "^6.0|^7.0|^8.5|^9.0" + "mockery/mockery": "^1.3.3", + "orchestra/testbench-dusk": "^4|^5|^6|^7", + "phpunit/phpunit": "^8.5|^9.0", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.6-dev" }, "laravel": { "providers": [ "Barryvdh\\Debugbar\\ServiceProvider" ], "aliases": { - "Debugbar": "Barryvdh\\Debugbar\\Facade" + "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" } } }, "autoload": { - "psr-4": { - "Barryvdh\\Debugbar\\": "src/" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6938,46 +8451,49 @@ "profiler", "webprofiler" ], + "support": { + "issues": "https://github.com/barryvdh/laravel-debugbar/issues", + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.6.7" + }, "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, { "url": "https://github.com/barryvdh", "type": "github" } ], - "time": "2020-08-30T07:08:17+00:00" + "time": "2022-02-09T07:52:32+00:00" }, { "name": "doctrine/instantiator", - "version": "1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", - "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.0", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -6991,7 +8507,7 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", @@ -7000,6 +8516,10 @@ "constructor", "instantiate" ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -7014,140 +8534,7 @@ "type": "tidelift" } ], - "time": "2020-05-29T17:27:14+00:00" - }, - { - "name": "facade/flare-client-php", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/facade/flare-client-php.git", - "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed", - "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed", - "shasum": "" - }, - "require": { - "facade/ignition-contracts": "~1.0", - "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", - "php": "^7.1|^8.0", - "symfony/http-foundation": "^3.3|^4.1|^5.0", - "symfony/mime": "^3.4|^4.0|^5.1", - "symfony/var-dumper": "^3.4|^4.0|^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "phpunit/phpunit": "^7.5.16", - "spatie/phpunit-snapshot-assertions": "^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Facade\\FlareClient\\": "src" - }, - "files": [ - "src/helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/facade/flare-client-php", - "keywords": [ - "exception", - "facade", - "flare", - "reporting" - ], - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2021-09-13T12:16:46+00:00" - }, - { - "name": "facade/ignition", - "version": "2.4.2", - "source": { - "type": "git", - "url": "https://github.com/facade/ignition.git", - "reference": "2179568bdfddfa56c90c845a0be1a0b52adbf52a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/2179568bdfddfa56c90c845a0be1a0b52adbf52a", - "reference": "2179568bdfddfa56c90c845a0be1a0b52adbf52a", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "facade/flare-client-php": "^1.0", - "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.4", - "illuminate/support": "^7.0|^8.0", - "monolog/monolog": "^2.0", - "php": "^7.2.5", - "scrivo/highlight.php": "^9.15", - "symfony/console": "^5.0", - "symfony/var-dumper": "^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "mockery/mockery": "^1.3", - "orchestra/testbench": "^5.0|^6.0", - "psalm/plugin-laravel": "^1.2" - }, - "suggest": { - "laravel/telescope": "^3.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Facade\\Ignition\\IgnitionServiceProvider" - ], - "aliases": { - "Flare": "Facade\\Ignition\\Facades\\Flare" - } - } - }, - "autoload": { - "psr-4": { - "Facade\\Ignition\\": "src" - }, - "files": [ - "src/helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://github.com/facade/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "time": "2021-03-08T13:56:01+00:00" + "time": "2020-11-10T18:47:58+00:00" }, { "name": "facade/ignition-contracts", @@ -7196,20 +8583,91 @@ "flare", "ignition" ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, "time": "2020-10-16T08:27:54+00:00" }, { - "name": "filp/whoops", - "version": "2.14.4", + "name": "fakerphp/faker", + "version": "v1.19.0", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "f056f1fe935d9ed86e698905a957334029899895" + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/f056f1fe935d9ed86e698905a957334029899895", - "reference": "f056f1fe935d9ed86e698905a957334029899895", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75", + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.19-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0" + }, + "time": "2022-02-02T17:38:57+00:00" + }, + { + "name": "filp/whoops", + "version": "2.14.5", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", "shasum": "" }, "require": { @@ -7257,64 +8715,17 @@ "throwable", "whoops" ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.5" + }, "funding": [ { "url": "https://github.com/denis-sokolov", "type": "github" } ], - "time": "2021-10-03T12:00:00+00:00" - }, - { - "name": "fzaninotto/faker", - "version": "v1.9.1", - "source": { - "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "abandoned": true, - "time": "2019-12-12T13:22:17+00:00" + "time": "2022-01-07T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -7361,29 +8772,34 @@ "keywords": [ "test" ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, "time": "2020-07-09T08:09:16+00:00" }, { "name": "maximebf/debugbar", - "version": "v1.16.3", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372" + "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/1a1605b8e9bacb34cc0c6278206d699772e1d372", - "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6", + "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6", "shasum": "" }, "require": { - "php": "^7.1", - "psr/log": "^1.0", - "symfony/var-dumper": "^2.6|^3|^4|^5" + "php": "^7.1|^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^2.6|^3|^4|^5|^6" }, "require-dev": { - "phpunit/phpunit": "^5" + "phpunit/phpunit": "^7.5.20 || ^9.4.2", + "twig/twig": "^1.38|^2.7|^3.0" }, "suggest": { "kriswallsmith/assetic": "The best way to manage assets", @@ -7393,7 +8809,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.16-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -7422,20 +8838,24 @@ "debug", "debugbar" ], - "time": "2020-05-06T07:06:27+00:00" + "support": { + "issues": "https://github.com/maximebf/php-debugbar/issues", + "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.0" + }, + "time": "2021-12-27T18:49:48+00:00" }, { "name": "mockery/mockery", - "version": "1.4.2", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "20cab678faed06fac225193be281ea0fddb43b93" + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93", - "reference": "20cab678faed06fac225193be281ea0fddb43b93", + "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", "shasum": "" }, "require": { @@ -7490,20 +8910,24 @@ "test double", "testing" ], - "time": "2020-08-11T18:10:13+00:00" + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.5.0" + }, + "time": "2022-01-20T13:18:17+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.1", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", - "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", "shasum": "" }, "require": { @@ -7519,12 +8943,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7538,48 +8962,51 @@ "object", "object graph" ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", "type": "tidelift" } ], - "time": "2020-06-29T13:22:24+00:00" + "time": "2020-11-13T09:40:50+00:00" }, { "name": "nunomaduro/collision", - "version": "v4.2.0", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "d50490417eded97be300a92cd7df7badc37a9018" + "reference": "df09e21a5e5d5a7d51a8b9ecd44d3dd150d97fec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/d50490417eded97be300a92cd7df7badc37a9018", - "reference": "d50490417eded97be300a92cd7df7badc37a9018", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/df09e21a5e5d5a7d51a8b9ecd44d3dd150d97fec", + "reference": "df09e21a5e5d5a7d51a8b9ecd44d3dd150d97fec", "shasum": "" }, "require": { - "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.4", - "php": "^7.2.5", - "symfony/console": "^5.0" + "facade/ignition-contracts": "^1.0.2", + "filp/whoops": "^2.14.5", + "php": "^8.0.0", + "symfony/console": "^6.0.2" }, "require-dev": { - "facade/ignition": "^2.0", - "fideloper/proxy": "^4.2", - "friendsofphp/php-cs-fixer": "^2.16", - "fruitcake/laravel-cors": "^1.0", - "laravel/framework": "^7.0", - "laravel/tinker": "^2.0", - "nunomaduro/larastan": "^0.5", - "orchestra/testbench": "^5.0", - "phpstan/phpstan": "^0.12.3", - "phpunit/phpunit": "^8.5.1 || ^9.0" + "brianium/paratest": "^6.4.1", + "laravel/framework": "^9.0", + "nunomaduro/larastan": "^1.0.2", + "nunomaduro/mock-final-classes": "^1.1.0", + "orchestra/testbench": "^7.0.0", + "phpunit/phpunit": "^9.5.11" }, "type": "library", "extra": { + "branch-alias": { + "dev-develop": "6.x-dev" + }, "laravel": { "providers": [ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" @@ -7614,9 +9041,13 @@ "php", "symfony" ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, "funding": [ { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "url": "https://www.paypal.com/paypalme/enunomaduro", "type": "custom" }, { @@ -7628,32 +9059,33 @@ "type": "patreon" } ], - "time": "2020-04-04T19:56:08+00:00" + "time": "2022-01-18T17:49:08+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.3", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -7683,24 +9115,28 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -7730,7 +9166,11 @@ } ], "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -7779,20 +9219,24 @@ "reflection", "static analysis" ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.1", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d870572532cd70bc3fab58f2e23ad423c8404c44", - "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { @@ -7803,7 +9247,8 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -7831,20 +9276,24 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-08-15T11:14:08+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.3.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", "shasum": "" }, "require": { @@ -7852,7 +9301,8 @@ "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "*" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -7876,37 +9326,41 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-06-27T10:12:23+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + }, + "time": "2022-01-04T19:58:01+00:00" }, { "name": "phpspec/prophecy", - "version": "1.11.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", - "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2", - "phpdocumentor/reflection-docblock": "^5.0", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0" + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -7939,44 +9393,52 @@ "spy", "stub" ], - "time": "2020-07-08T12:44:21+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + }, + "time": "2021-12-08T12:19:24+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "7.0.10", + "version": "9.2.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" + "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/665a1ac0a763c51afc30d6d130dac0813092b17f", + "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-xdebug": "^2.7.2" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -8002,32 +9464,42 @@ "testing", "xunit" ], - "time": "2019-11-20T13:55:58+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.11" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-18T12:46:09+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -8052,26 +9524,107 @@ "filesystem", "iterator" ], - "time": "2018-09-13T20:33:42+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -8093,32 +9646,42 @@ "keywords": [ "template" ], - "time": "2015-06-21T13:50:34+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" }, { "name": "phpunit/php-timer", - "version": "2.1.2", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -8142,106 +9705,69 @@ "keywords": [ "timer" ], - "time": "2019-06-07T04:22:29+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ + "funding": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "abandoned": true, - "time": "2019-09-17T06:23:10+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", - "version": "8.5.8", + "version": "9.5.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997" + "reference": "1883687169c017d6ae37c58883ca3994cfc34189" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/34c18baa6a44f1d1fbf0338907139e9dce95b997", - "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1883687169c017d6ae37c58883ca3994cfc34189", + "reference": "1883687169c017d6ae37c58883ca3994cfc34189", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2.0", + "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.9.1", - "phar-io/manifest": "^1.0.3", - "phar-io/version": "^2.0.1", - "php": "^7.2", - "phpspec/prophecy": "^1.8.1", - "phpunit/php-code-coverage": "^7.0.7", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.2", - "sebastian/exporter": "^3.1.1", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3.4", + "sebastian/version": "^3.0.2" }, "require-dev": { - "ext-pdo": "*" + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" }, "suggest": { "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" + "ext-xdebug": "*" }, "bin": [ "phpunit" @@ -8249,10 +9775,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.5-dev" + "dev-master": "9.5-dev" } }, "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], "classmap": [ "src/" ] @@ -8275,9 +9804,13 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.14" + }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { @@ -8285,43 +9818,37 @@ "type": "github" } ], - "time": "2020-06-22T07:06:58+00:00" + "time": "2022-02-18T12:54:07+00:00" }, { - "name": "scrivo/highlight.php", - "version": "v9.18.1.8", + "name": "sebastian/cli-parser", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/scrivo/highlight.php.git", - "reference": "6d5049cd2578e19a06adbb6ac77879089be1e3f9" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/6d5049cd2578e19a06adbb6ac77879089be1e3f9", - "reference": "6d5049cd2578e19a06adbb6ac77879089be1e3f9", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", "shasum": "" }, "require": { - "ext-json": "*", - "php": ">=5.4" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^4.8|^5.7", - "sabberworm/php-css-parser": "^8.3", - "symfony/finder": "^2.8|^3.4", - "symfony/var-dumper": "^2.8|^3.4" - }, - "suggest": { - "ext-mbstring": "Allows highlighting code with unicode characters and supports language with unicode keywords" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { - "psr-0": { - "Highlight\\": "", - "HighlightUtilities\\": "" - }, - "files": [ - "HighlightUtilities/functions.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -8330,61 +9857,105 @@ ], "authors": [ { - "name": "Geert Bergman", - "homepage": "http://www.scrivo.org/", - "role": "Project Author" - }, - { - "name": "Vladimir Jimenez", - "homepage": "https://allejo.io", - "role": "Maintainer" - }, - { - "name": "Martin Folkers", - "homepage": "https://twobrain.io", - "role": "Contributor" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js", - "keywords": [ - "code", - "highlight", - "highlight.js", - "highlight.php", - "syntax" - ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, "funding": [ { - "url": "https://github.com/allejo", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2021-10-24T00:28:14+00:00" + "time": "2020-09-28T06:08:49+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" } }, "autoload": { @@ -8404,34 +9975,44 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.2", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -8444,6 +10025,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -8455,10 +10040,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -8468,33 +10049,43 @@ "compare", "equality" ], - "time": "2018-07-12T15:12:46+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" }, { - "name": "sebastian/diff", - "version": "3.0.2", + "name": "sebastian/complexity", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", "shasum": "" }, "require": { - "php": "^7.1" + "nikic/php-parser": "^4.7", + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -8508,12 +10099,69 @@ ], "authors": [ { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", @@ -8524,27 +10172,37 @@ "unidiff", "unified diff" ], - "time": "2019-02-04T06:01:07+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" }, { "name": "sebastian/environment", - "version": "4.2.3", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" @@ -8552,7 +10210,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -8577,34 +10235,44 @@ "environment", "hhvm" ], - "time": "2019-11-20T08:46:58+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -8639,35 +10307,45 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], - "time": "2019-09-14T09:02:43+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T14:18:36+00:00" }, { "name": "sebastian/global-state", - "version": "3.0.0", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { - "php": "^7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-uopz": "*" @@ -8675,7 +10353,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -8698,34 +10376,101 @@ "keywords": [ "global state" ], - "time": "2019-02-01T05:30:01+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "3.0.3", + "name": "sebastian/lines-of-code", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "nikic/php-parser": "^4.6", + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" } }, "autoload": { @@ -8745,122 +10490,37 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.1", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "shasum": "" - }, - "require": { - "php": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -8883,34 +10543,162 @@ "email": "sebastian@phpunit.de" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" }, { - "name": "sebastian/type", - "version": "1.1.3", + "name": "sebastian/recursion-context", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", "shasum": "" }, "require": { - "php": "^7.2" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^8.2" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" } }, "autoload": { @@ -8931,29 +10719,39 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", - "time": "2019-07-02T08:10:15+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-15T12:49:02+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -8974,26 +10772,319 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" }, { - "name": "symfony/debug", - "version": "v4.4.13", + "name": "spatie/backtrace", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e" + "url": "https://github.com/spatie/backtrace.git", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e", - "reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-11-09T10:57:15+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "5d48e00716e3bab813cafffe223bc85c5732a410" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5d48e00716e3bab813cafffe223bc85c5732a410", + "reference": "5d48e00716e3bab813cafffe223bc85c5732a410", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0", + "php": "^8.0", + "spatie/backtrace": "^1.2", + "symfony/http-foundation": "^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", + "symfony/process": "^5.2|^6.0", + "symfony/var-dumper": "^5.2|^6.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.3.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-02-16T16:14:24+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "6b7bb804f4834b080f5ac941f6ac6800a485011e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/6b7bb804f4834b080f5ac941f6ac6800a485011e", + "reference": "6b7bb804f4834b080f5ac941f6ac6800a485011e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "monolog/monolog": "^2.0", + "php": "^8.0", + "spatie/flare-client-php": "^1.0", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/ray": "^1.32", + "symfony/process": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-02-17T21:40:47+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "d349854331789aba9205fd755e0c1d1934ef1463" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/d349854331789aba9205fd755e0c1d1934ef1463", + "reference": "d349854331789aba9205fd755e0c1d1934ef1463", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^8.77|^9.0", + "monolog/monolog": "^2.3", + "php": "^8.0", + "spatie/flare-client-php": "^1.0.1", + "spatie/ignition": "^1.0", + "symfony/console": "^5.0|^6.0", + "symfony/var-dumper": "^5.0|^6.0" + }, + "require-dev": { + "filp/whoops": "^2.14", + "livewire/livewire": "^2.8|dev-develop", + "mockery/mockery": "^1.4", + "nunomaduro/larastan": "^1.0", + "orchestra/testbench": "^6.23|^7.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.27" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + } + }, + "autoload": { + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-02-15T11:02:15+00:00" + }, + { + "name": "symfony/debug", + "version": "v4.4.37", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "5de6c6e7f52b364840e53851c126be4d71e60470" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/5de6c6e7f52b364840e53851c126be4d71e60470", + "reference": "5de6c6e7f52b364840e53851c126be4d71e60470", "shasum": "" }, "require": { "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" + "psr/log": "^1|^2|^3" }, "conflict": { "symfony/http-kernel": "<3.4" @@ -9002,11 +11093,6 @@ "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Debug\\": "" @@ -9029,8 +11115,11 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug/tree/v4.4.37" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -9045,20 +11134,20 @@ "type": "tidelift" } ], - "time": "2020-08-10T07:47:39+00:00" + "time": "2022-01-02T09:41:36+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -9085,74 +11174,32 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, "funding": [ { "url": "https://github.com/theseer", "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-07-28T10:34:58+00:00" } ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": { + "graham-campbell/markdown": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^7.2.5", - "ext-imagick": "*", + "php": "^8.0", "ext-json": "*" }, - "platform-dev": [], - "plugin-api-version": "1.1.0" + "platform-dev": { + "ext-xdebug": "*" + }, + "plugin-api-version": "2.1.0" } diff --git a/config/adminlte.php b/config/adminlte.php old mode 100644 new mode 100755 index 9c71a48..f343716 --- a/config/adminlte.php +++ b/config/adminlte.php @@ -1,5 +1,24 @@ . + */ + return [ /* @@ -50,7 +69,7 @@ return [ 'logo_img_class' => 'brand-image img-circle elevation-3', 'logo_img_xl' => null, 'logo_img_xl_class' => 'brand-image-xs', - 'logo_img_alt' => env('APP_NAME') . '\'s Temporary Logo', + 'logo_img_alt' => env('APP_NAME').'\'s Temporary Logo', /* |-------------------------------------------------------------------------- @@ -211,17 +230,17 @@ return [ [ 'text' => 'm_home', 'icon' => 'fas fa-home', - 'url' => 'dashboard' + 'url' => 'dashboard', ], [ 'text' => 'm_directory', 'icon' => 'fas fa-users', 'url' => 'users/directory', - 'can' => 'profiles.view.others' + 'can' => 'profiles.view.others', ], [ 'header' => 'h_applications', - 'can' => 'applications.view.own' + 'can' => 'applications.view.own', ], [ 'text' => 'm_my_applications', @@ -231,8 +250,8 @@ return [ [ 'text' => 'm_curr_applications', 'icon' => 'fas fa-fw fa-check-double', - 'url' => '/applications/my-applications' - ] + 'url' => '/applications/my-applications', + ], ], ], @@ -242,40 +261,72 @@ return [ [ 'text' => 'm_profile_settings', 'url' => '/profile/settings', - 'icon' => 'fas fa-fw fa-cog' + 'icon' => 'fas fa-fw fa-cog', ], [ 'text' => 'm_account_settings', 'icon' => 'fas fa-user-circle', - 'url' => '/profile/settings/account' + 'url' => '/profile/settings/account', + ], + [ + 'header' => 'Human Resources', + 'can' => 'reviewer.requestAbsence' + ], + [ + 'text' => 'Absence Management', + 'icon' => 'fas fa-user-clock', + 'can' => 'reviewer.requestAbsence', + 'submenu' => [ + [ + 'text' => 'New request', + 'icon' => 'fas fa-plus', + 'can' => 'reviewer.requestAbsence', + 'route' => 'absences.create' + ], + [ + 'text' => 'My requests', + 'icon' => 'fas fa-business-time', + 'can' => 'reviewer.viewAbsence', + 'route' => 'showUserAbsences' + ], + + ], + ], + [ + 'text' => 'Absence requests', + 'icon' => 'fas fa-address-card', + 'can' => 'admin.manageAbsences', + 'route' => 'absences.index' ], [ 'header' => 'h_app_management', - 'can' => ['applications.view.all', 'applications.vote'] + 'can' => ['applications.view.all', 'applications.vote'], ], [ 'text' => 'm_all_apps', 'url' => 'applications/staff/all', 'icon' => 'fas fa-list-ol', - 'can' => 'applications.view.all' + 'can' => 'applications.view.all', ], [ - 'text' => 'm_outstanding_apps', - 'url' => '/applications/staff/outstanding', - 'icon' => 'far fa-folder-open', - 'can' => 'applications.view.all' - ], - [ - 'text' => 'm_interview_queue', - 'url' => '/applications/staff/pending-interview', - 'icon' => 'fas fa-fw fa-microphone-alt', - 'can' => 'applications.view.all' - ], - [ - 'text' => 'm_peer_approval', - 'url' => '/applications/staff/peer-review', - 'icon' => 'fas fa-fw fa-search', - 'can' => 'applications.view.all' + 'text' => 'Teams', + 'icon' => 'fas fa-user-friends', + 'url' => 'teams', + 'can' => 'teams.view', + 'submenu' => [ + [ + 'text' => 'Available Teams', + 'icon' => 'fas fa-clipboard', + 'url' => 'teams', + 'can' => 'teams.view' + ], + [ + 'text' => 'Files', + 'icon' => 'fas fa-file-alt', + 'url' => 'team/files', + 'can' => 'teams.view' + ], + ] ], [ 'header' => 'h_admin', @@ -284,20 +335,14 @@ return [ 'admin.userlist', 'admin.stafflist', 'admin.hiring.*', - 'admin.notificationsettings.*' - ] + 'admin.notificationsettings.*', + ], ], [ - 'text' => 'm_staff_m', - 'icon' => 'fas fa-fw fa-users', - 'url' => '/hr/staff-members', - 'can' => 'admin.stafflist' - ], - [ // players who haven't been promoted yet - 'text' => 'm_reg_players', + 'text' => 'Users', 'icon' => 'fas fa-fw fa-user-friends', - 'url' => '/hr/players', - 'can' => 'admin.userlist' + 'route' => 'registeredPlayerList', + 'can' => 'admin.userlist', ], [ 'text' => 'sm_hiring_man', @@ -307,7 +352,7 @@ return [ [ 'text' => 'm_open_pos', 'icon' => 'fas fa-box-open', - 'url' => '/admin/positions' + 'url' => '/admin/positions', ], [ 'text' => 'sm_forms', @@ -316,16 +361,16 @@ return [ [ 'text' => 'sm_all_forms', 'icon' => 'far fa-list-alt', - 'url' => '/admin/forms' + 'url' => '/admin/forms', ], [ 'text' => 'm_form_builder', 'icon' => 'fas fa-fw fa-hammer', - 'url' => '/admin/forms/builder' - ] - ] - ] - ] + 'url' => '/admin/forms/builder', + ], + ], + ], + ], ], [ 'text' => 'sm_app_settings', @@ -336,22 +381,22 @@ return [ 'text' => 'm_global_app_s', 'icon' => 'fas fa-cogs', 'url' => '/admin/settings', - 'can' => 'admin.settings.view' + 'can' => 'admin.settings.view', ], [ 'text' => 'm_devtools', 'icon' => 'fas fa-code', 'url' => '/admin/devtools', - 'can' => 'admin.developertools.use' - ] - ] + 'can' => 'admin.developertools.use', + ], + ], ], [ 'text' => 'm_s_logs', 'url' => '/admin/maintenance/system-logs', 'icon' => 'fas fa-clipboard-list', - 'can' => 'admin.maintenance.logs.view' - ] + 'can' => 'admin.maintenance.logs.view', + ], ], /* @@ -417,9 +462,9 @@ return [ [ 'type' => 'js', 'asset' => false, - 'location' => '/js/formbuilder.js' - ] - ] + 'location' => '/js/formbuilder.js', + ], + ], ], [ 'name' => 'Select2', @@ -482,14 +527,14 @@ return [ [ 'type' => 'js', 'asset' => false, - 'location' => 'https://cdn.jsdelivr.net/npm/toastr@2.1.4/toastr.min.js' + 'location' => 'https://cdn.jsdelivr.net/npm/toastr@2.1.4/toastr.min.js', ], [ 'type' => 'css', 'asset' => false, - 'location' => 'https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css' - ] - ] + 'location' => 'https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css', + ], + ], ], [ 'name' => 'GlobalTooltip', @@ -498,47 +543,123 @@ return [ [ 'type' => 'js', 'asset' => false, - 'location' => '/js/globaltooltip.js' - ] - ] + 'location' => '/js/globaltooltip.js', + ], + ], ], [ - 'name' => 'DatePickApp', + 'name' => 'Fullcalendar', 'active' => true, 'files' => [ [ 'type' => 'js', 'asset' => false, - 'location' => '/js/datepick.js' + 'location' => 'https://cdn.jsdelivr.net/npm/fullcalendar@5.0.1/main.min.js', + ], + [ + 'type' => 'css', + 'asset' => false, + 'location' => 'https://cdn.jsdelivr.net/npm/fullcalendar@5.0.1/main.min.css', + ], + ], + ], + [ + 'name' => 'CheckboxValues', + 'active' => true, + 'files' => [ + [ + 'type' => 'js', + 'asset' => false, + 'location' => '/js/switches.js', + ], + ], + ], + [ + 'name' => 'AuthCustomisations', + 'active' => true, + 'files' => [ + [ + 'type' => 'css', + 'asset' => false, + 'location' => '/css/authpages.css', + ], + ], + ], + [ + 'name' => 'BootstrapMultiselectDropdown', + 'active' => true, + 'files' => [ + [ + 'type' => 'js', + 'asset' => 'false', + 'location' => 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/js/bootstrap-multiselect.min.js', + ], + [ + 'type' => 'css', + 'asset' => false, + 'location' => 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/css/bootstrap-multiselect.css', + ], + ], + + ], + [ + 'name' => 'BootstrapSwitch', + 'active' => true, + 'files' => [ + [ + 'type' => 'js', + 'asset' => false, + 'location' => 'https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/js/bootstrap4-toggle.min.js' + ], + [ + 'type' => 'css', + 'asset' => false, + 'location' => 'https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/css/bootstrap4-toggle.min.css' + ] + ] + ], + [ + 'name' => 'BootstrapToggleButton', + 'active' => true, + 'files' => [ + [ + 'type' => 'css', + 'asset' => false, + 'location' => 'https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css', + ], + [ + 'type' => 'js', + 'asset' => false, + 'location' => 'https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js', + ], + ], + ], + [ + 'name' => 'Flatpickr', + 'active' => true, + 'files' => [ + [ + 'type' => 'css', + 'asset' => false, + 'location' => 'https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css' + ], + [ + 'type' => 'js', + 'asset' => false, + 'location' => 'https://cdn.jsdelivr.net/npm/flatpickr' ] ] ], [ - 'name' => 'Fullcalendar', - 'active' => true, - 'files' => [ - [ - 'type' => 'js', - 'asset' => false, - 'location' => 'https://cdn.jsdelivr.net/npm/fullcalendar@5.0.1/main.min.js', - ], - [ - 'type' => 'css', - 'asset' => false, - 'location' => 'https://cdn.jsdelivr.net/npm/fullcalendar@5.0.1/main.min.css' + 'name' => 'Pusher', + 'active' => true, + 'files' => [ + [ + 'type' => 'js', + 'asset' => false, + 'location' => 'https://js.pusher.com/beams/1.0/push-notifications-cdn.js' + ] ] - ] - ], - [ - 'name' => 'AuthCustomisations', - 'active' => true, - 'files' => [ - [ - 'type' => 'css', - 'asset' => false, - 'location' => '/css/authpages.css' - ] - ] ] ], ]; diff --git a/config/api.php b/config/api.php new file mode 100755 index 0000000..d6e8836 --- /dev/null +++ b/config/api.php @@ -0,0 +1,232 @@ + env('API_STANDARDS_TREE', 'x'), + + /* + |-------------------------------------------------------------------------- + | API Subtype + |-------------------------------------------------------------------------- + | + | Your subtype will follow the standards tree you use when used in the + | "Accept" header to negotiate the content type and version. + | + | For example: Accept: application/x.SUBTYPE.v1+json + | + */ + + 'subtype' => env('API_SUBTYPE', ''), + + /* + |-------------------------------------------------------------------------- + | Default API Version + |-------------------------------------------------------------------------- + | + | This is the default version when strict mode is disabled and your API + | is accessed via a web browser. It's also used as the default version + | when generating your APIs documentation. + | + */ + + 'version' => env('API_VERSION', 'v1'), + + /* + |-------------------------------------------------------------------------- + | Default API Prefix + |-------------------------------------------------------------------------- + | + | A default prefix to use for your API routes so you don't have to + | specify it for each group. + | + */ + + 'prefix' => env('API_PREFIX', null), + + /* + |-------------------------------------------------------------------------- + | Default API Domain + |-------------------------------------------------------------------------- + | + | A default domain to use for your API routes so you don't have to + | specify it for each group. + | + */ + + 'domain' => env('API_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | Name + |-------------------------------------------------------------------------- + | + | When documenting your API using the API Blueprint syntax you can + | configure a default name to avoid having to manually specify + | one when using the command. + | + */ + + 'name' => env('API_NAME', null), + + /* + |-------------------------------------------------------------------------- + | Conditional Requests + |-------------------------------------------------------------------------- + | + | Globally enable conditional requests so that an ETag header is added to + | any successful response. Subsequent requests will perform a check and + | will return a 304 Not Modified. This can also be enabled or disabled + | on certain groups or routes. + | + */ + + 'conditionalRequest' => env('API_CONDITIONAL_REQUEST', true), + + /* + |-------------------------------------------------------------------------- + | Strict Mode + |-------------------------------------------------------------------------- + | + | Enabling strict mode will require clients to send a valid Accept header + | with every request. This also voids the default API version, meaning + | your API will not be browsable via a web browser. + | + */ + + 'strict' => env('API_STRICT', false), + + /* + |-------------------------------------------------------------------------- + | Debug Mode + |-------------------------------------------------------------------------- + | + | Enabling debug mode will result in error responses caused by thrown + | exceptions to have a "debug" key that will be populated with + | more detailed information on the exception. + | + */ + + 'debug' => env('API_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Generic Error Format + |-------------------------------------------------------------------------- + | + | When some HTTP exceptions are not caught and dealt with the API will + | generate a generic error response in the format provided. Any + | keys that aren't replaced with corresponding values will be + | removed from the final response. + | + */ + + 'errorFormat' => [ + 'message' => ':message', + 'errors' => ':errors', + 'code' => ':code', + 'status_code' => ':status_code', + 'debug' => ':debug', + ], + + /* + |-------------------------------------------------------------------------- + | API Middleware + |-------------------------------------------------------------------------- + | + | Middleware that will be applied globally to all API requests. + | + */ + + 'middleware' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Providers + |-------------------------------------------------------------------------- + | + | The authentication providers that should be used when attempting to + | authenticate an incoming API request. + | + */ + + 'auth' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Throttling / Rate Limiting + |-------------------------------------------------------------------------- + | + | Consumers of your API can be limited to the amount of requests they can + | make. You can create your own throttles or simply change the default + | throttles. + | + */ + + 'throttling' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Response Transformer + |-------------------------------------------------------------------------- + | + | Responses can be transformed so that they are easier to format. By + | default a Fractal transformer will be used to transform any + | responses prior to formatting. You can easily replace + | this with your own transformer. + | + */ + + 'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class), + + /* + |-------------------------------------------------------------------------- + | Response Formats + |-------------------------------------------------------------------------- + | + | Responses can be returned in multiple formats by registering different + | response formatters. You can also customize an existing response + | formatter with a number of options to configure its output. + | + */ + + 'defaultFormat' => env('API_DEFAULT_FORMAT', 'json'), + + 'formats' => [ + + 'json' => Dingo\Api\Http\Response\Format\Json::class, + + ], + + 'formatsOptions' => [ + + 'json' => [ + 'pretty_print' => env('API_JSON_FORMAT_PRETTY_PRINT_ENABLED', false), + 'indent_style' => env('API_JSON_FORMAT_INDENT_STYLE', 'space'), + 'indent_size' => env('API_JSON_FORMAT_INDENT_SIZE', 2), + ], + + ], + +]; diff --git a/config/app.php b/config/app.php old mode 100644 new mode 100755 index 96e5484..86e1e75 --- a/config/app.php +++ b/config/app.php @@ -1,5 +1,24 @@ . + */ + return [ /* @@ -15,7 +34,6 @@ return [ 'name' => env('APP_NAME', 'Laravel'), - /* |-------------------------------------------------------------------------- | Application Homepage @@ -28,6 +46,54 @@ return [ */ 'sitehomepage' => env('APP_SITEHOMEPAGE', 'https://google.com'), + + + + /* + |-------------------------------------------------------------------------- + | Application Version + |-------------------------------------------------------------------------- + | + | This value is the application's version. + | It's used for informational purposes, and it'll be used for an auto-update system + | in the near future. + | Should always be the latest minor release. + | + */ + 'release' => env('RELEASE', '(unknown)'), + + /* + |-------------------------------------------------------------------------- + | SSL for non-production environments + |-------------------------------------------------------------------------- + | + | If you're a developer, and need to use SSL locally for testing, + | enable this setting. + | It forces Laravel to load all assets via HTTPS, even when the environment is + | set to "local". This setting is useless in production because it's already enforced. + | If you don't enable this when using SSL locally, the pages won't load properly. + | If you're a regular user, don't touch this setting. + | + */ + 'force_secure' => env('NONPROD_FORCE_SECURE', false), + + + /* + |-------------------------------------------------------------------------- + | IP address anonymity + |-------------------------------------------------------------------------- + | + | RB Recruiter collects IP addresses and stores them in the database in order to + | display them to site admins. + | + | This feature allows you to disable the display and collection of IP addresses, + | just like in demo mode, without needing to be in demo mode. + | + | If enabled, demo mode will override this feature if it's set to false. + | + */ + 'hide_ips' => env('HIDE_IPS'), + /* |-------------------------------------------------------------------------- | Application Environment @@ -192,8 +258,9 @@ return [ // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, - \App\Providers\MojangStatusProvider::class, - \App\Providers\OptionsProvider::class + \App\Providers\OptionsProvider::class, + App\Providers\DigitalStorageProvider::class, + App\Providers\JSONProvider::class, ], @@ -250,7 +317,8 @@ return [ 'IP' => App\Facades\IP::class, 'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class, 'ContextAwareValidator' => App\Facades\ContextAwareValidation::class, - 'Settings' => App\Facades\Options::class + 'Settings' => App\Facades\Options::class, + 'JSON' => App\Facades\JSON::class ], diff --git a/config/auth.php b/config/auth.php old mode 100644 new mode 100755 index aaf982b..071543c --- a/config/auth.php +++ b/config/auth.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/config/broadcasting.php b/config/broadcasting.php old mode 100644 new mode 100755 index 3bba110..2fa0dee --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/config/cache.php b/config/cache.php old mode 100644 new mode 100755 index 4f41fdf..475421a --- a/config/cache.php +++ b/config/cache.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Support\Str; return [ diff --git a/config/cors.php b/config/cors.php old mode 100644 new mode 100755 index 558369d..c06d99f --- a/config/cors.php +++ b/config/cors.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/config/customization.php b/config/customization.php new file mode 100755 index 0000000..26b502a --- /dev/null +++ b/config/customization.php @@ -0,0 +1,7 @@ + env('APP_AUTH_BANNER') + +]; diff --git a/config/database.php b/config/database.php old mode 100644 new mode 100755 index b42d9b3..493e1af --- a/config/database.php +++ b/config/database.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Support\Str; return [ diff --git a/config/debugbar.php b/config/debugbar.php new file mode 100755 index 0000000..87b003e --- /dev/null +++ b/config/debugbar.php @@ -0,0 +1,235 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Debugbar Settings + |-------------------------------------------------------------------------- + | + | Debugbar is enabled by default, when debug is set to true in app.php. + | You can override the value by setting enable to true or false instead of null. + | + | You can provide an array of URI's that must be ignored (eg. 'api/*') + | + */ + + 'enabled' => env('DEBUGBAR_ENABLED', null), + 'except' => [ + 'telescope*', + 'horizon*', + ], + + /* + |-------------------------------------------------------------------------- + | Storage settings + |-------------------------------------------------------------------------- + | + | DebugBar stores data for session/ajax requests. + | You can disable this, so the debugbar stores data in headers/session, + | but this can cause problems with large data collectors. + | By default, file storage (in the storage folder) is used. Redis and PDO + | can also be used. For PDO, run the package migrations first. + | + */ + 'storage' => [ + 'enabled' => true, + 'driver' => 'file', // redis, file, pdo, custom + 'path' => storage_path('debugbar'), // For file driver + 'connection' => null, // Leave null for default connection (Redis/PDO) + 'provider' => '', // Instance of StorageInterface for custom driver + ], + + /* + |-------------------------------------------------------------------------- + | Vendors + |-------------------------------------------------------------------------- + | + | Vendor files are included by default, but can be set to false. + | This can also be set to 'js' or 'css', to only include javascript or css vendor files. + | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files) + | and for js: jquery and and highlight.js + | So if you want syntax highlighting, set it to true. + | jQuery is set to not conflict with existing jQuery scripts. + | + */ + + 'include_vendors' => true, + + /* + |-------------------------------------------------------------------------- + | Capture Ajax Requests + |-------------------------------------------------------------------------- + | + | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors), + | you can use this option to disable sending the data through the headers. + | + | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools. + */ + + 'capture_ajax' => true, + 'add_ajax_timing' => false, + + /* + |-------------------------------------------------------------------------- + | Custom Error Handler for Deprecated warnings + |-------------------------------------------------------------------------- + | + | When enabled, the Debugbar shows deprecated warnings for Symfony components + | in the Messages tab. + | + */ + 'error_handler' => false, + + /* + |-------------------------------------------------------------------------- + | Clockwork integration + |-------------------------------------------------------------------------- + | + | The Debugbar can emulate the Clockwork headers, so you can use the Chrome + | Extension, without the server-side code. It uses Debugbar collectors instead. + | + */ + 'clockwork' => false, + + /* + |-------------------------------------------------------------------------- + | DataCollectors + |-------------------------------------------------------------------------- + | + | Enable/disable DataCollectors + | + */ + + 'collectors' => [ + 'phpinfo' => true, // Php version + 'messages' => true, // Messages + 'time' => true, // Time Datalogger + 'memory' => true, // Memory usage + 'exceptions' => true, // Exception displayer + 'log' => true, // Logs from Monolog (merged in messages if enabled) + 'db' => true, // Show database (PDO) queries and bindings + 'views' => true, // Views with their data + 'route' => true, // Current route information + 'auth' => false, // Display Laravel authentication status + 'gate' => true, // Display Laravel Gate checks + 'session' => true, // Display session data + 'symfony_request' => true, // Only one can be enabled.. + 'mail' => true, // Catch mail messages + 'laravel' => false, // Laravel version and environment + 'events' => false, // All events fired + 'default_request' => false, // Regular or special Symfony request logger + 'logs' => false, // Add the latest log messages + 'files' => false, // Show the included files + 'config' => false, // Display config settings + 'cache' => false, // Display cache events + 'models' => true, // Display models + 'livewire' => true, // Display Livewire (when available) + ], + + /* + |-------------------------------------------------------------------------- + | Extra options + |-------------------------------------------------------------------------- + | + | Configure some DataCollectors + | + */ + + 'options' => [ + 'auth' => [ + 'show_name' => true, // Also show the users name/email in the debugbar + ], + 'db' => [ + 'with_params' => true, // Render SQL with the parameters substituted + 'backtrace' => true, // Use a backtrace to find the origin of the query in your files. + 'backtrace_exclude_paths' => [], // Paths to exclude from backtrace. (in addition to defaults) + 'timeline' => false, // Add the queries to the timeline + 'explain' => [ // Show EXPLAIN output on queries + 'enabled' => false, + 'types' => ['SELECT'], // Deprecated setting, is always only SELECT + ], + 'hints' => false, // Show hints for common mistakes + 'show_copy' => false, // Show copy button next to the query + ], + 'mail' => [ + 'full_log' => false, + ], + 'views' => [ + 'data' => false, //Note: Can slow down the application, because the data can be quite large.. + ], + 'route' => [ + 'label' => true, // show complete route on bar + ], + 'logs' => [ + 'file' => null, + ], + 'cache' => [ + 'values' => true, // collect cache values + ], + ], + + /* + |-------------------------------------------------------------------------- + | Inject Debugbar in Response + |-------------------------------------------------------------------------- + | + | Usually, the debugbar is added just before , by listening to the + | Response after the App is done. If you disable this, you have to add them + | in your template yourself. See http://phpdebugbar.com/docs/rendering.html + | + */ + + 'inject' => true, + + /* + |-------------------------------------------------------------------------- + | DebugBar route prefix + |-------------------------------------------------------------------------- + | + | Sometimes you want to set route prefix to be used by DebugBar to load + | its resources from. Usually the need comes from misconfigured web server or + | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97 + | + */ + 'route_prefix' => '_debugbar', + + /* + |-------------------------------------------------------------------------- + | DebugBar route domain + |-------------------------------------------------------------------------- + | + | By default DebugBar route served from the same domain that request served. + | To override default domain, specify it as a non-empty value. + */ + 'route_domain' => null, + + /* + |-------------------------------------------------------------------------- + | DebugBar theme + |-------------------------------------------------------------------------- + | + | Switches between light and dark theme. If set to auto it will respect system preferences + | Possible values: auto, light, dark + */ + 'theme' => 'auto', +]; diff --git a/config/demo.php b/config/demo.php new file mode 100755 index 0000000..a9824c3 --- /dev/null +++ b/config/demo.php @@ -0,0 +1,7 @@ + env('DEMO_MODE', false) + +]; diff --git a/config/env-editor.php b/config/env-editor.php new file mode 100755 index 0000000..7b56924 --- /dev/null +++ b/config/env-editor.php @@ -0,0 +1,65 @@ +. + */ + +return [ + /* + |-------------------------------------------------------------------------- + | Files Config + |-------------------------------------------------------------------------- + */ + 'paths' => [ + // .env file directory + 'env' => base_path(), + //backup files directory + 'backupDirectory' => 'env-editor', + ], + // .env file name + 'envFileName' => '.env', + + /* + |-------------------------------------------------------------------------- + | Routes group config + |-------------------------------------------------------------------------- + | + */ + 'route' => [ + // Prefix url for route Group + 'prefix' => 'env-editor', + // Routes base name + 'name' => 'env-editor', + // Middleware(s) applied on route Group + 'middleware' => ['web'], + ], + + /* ------------------------------------------------------------------------------------------------ + | Time Format for Views and parsed backups + | ------------------------------------------------------------------------------------------------ + */ + 'timeFormat' => 'd/m/Y H:i:s', + + /* ------------------------------------------------------------------------------------------------ + | Set Views options + | ------------------------------------------------------------------------------------------------ + | Here you can set The "extends" blade of index.blade.php + */ + 'layout' => 'env-editor::layout', + +]; diff --git a/config/filesystems.php b/config/filesystems.php old mode 100644 new mode 100755 index 94c8112..7ae4a84 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/config/general.php b/config/general.php old mode 100644 new mode 100755 index 7749c97..bdc5e90 --- a/config/general.php +++ b/config/general.php @@ -1,27 +1,45 @@ . + */ + return [ - 'urls' => - [ + 'urls' => [ 'mojang' => [ 'statuscheck' => env('MOJANG_STATUS_URL') ?? 'https://status.mojang.com/check', 'api' => env('MOJANG_API_URL') ?? ' https://api.mojang.com', - 'session' => env('MOJANG_SESSIONAPI_URL') ?? 'https://sessionserver.mojang.com' + 'session' => env('MOJANG_SESSIONAPI_URL') ?? 'https://sessionserver.mojang.com', ], 'ipapi' => [ - 'ipcheck' => env('IPGEO_API_URL') ?? 'https://api.ipgeolocation.io/ipgeo' - ] + 'ipcheck' => env('IPGEO_API_URL') ?? 'https://api.ipgeolocation.io/ipgeo', + ], ], 'keys' => [ 'ipapi' => [ - 'apikey' => env('IPGEO_API_KEY') - ] + 'apikey' => env('IPGEO_API_KEY'), + ], - ] + ], ]; diff --git a/config/google2fa.php b/config/google2fa.php old mode 100644 new mode 100755 index 4dd5824..6cd127d --- a/config/google2fa.php +++ b/config/google2fa.php @@ -1,5 +1,24 @@ . + */ + return [ /* @@ -59,7 +78,7 @@ return [ * One Time Password error message. */ 'error_messages' => [ - 'wrong_otp' => "Your one time code was incorrect.", + 'wrong_otp' => 'Your one time code was incorrect.', 'cannot_be_empty' => 'The one time code cannot be empty.', 'unknown' => 'An unknown error has occurred. Please try again.', ], @@ -74,6 +93,6 @@ return [ * * Supports imagemagick, svg and eps */ - 'qrcode_image_backend' => \PragmaRX\Google2FALaravel\Support\Constants::QRCODE_IMAGE_BACKEND_IMAGEMAGICK, + 'qrcode_image_backend' => \PragmaRX\Google2FALaravel\Support\Constants::QRCODE_IMAGE_BACKEND_SVG, ]; diff --git a/config/hashing.php b/config/hashing.php old mode 100644 new mode 100755 index 8425770..e7a93bf --- a/config/hashing.php +++ b/config/hashing.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/config/ignition.php b/config/ignition.php new file mode 100755 index 0000000..b465423 --- /dev/null +++ b/config/ignition.php @@ -0,0 +1,126 @@ + env('IGNITION_EDITOR', 'phpstorm'), + + /* + |-------------------------------------------------------------------------- + | Theme + |-------------------------------------------------------------------------- + | + | Here you may specify which theme Ignition should use. + | + | Supported: "light", "dark", "auto" + | + */ + + 'theme' => env('IGNITION_THEME', 'dark'), + + /* + |-------------------------------------------------------------------------- + | Sharing + |-------------------------------------------------------------------------- + | + | You can share local errors with colleagues or others around the world. + | Sharing is completely free and doesn't require an account on Flare. + | + | If necessary, you can completely disable sharing below. + | + */ + + 'enable_share_button' => env('IGNITION_SHARING_ENABLED', true), + + /* + |-------------------------------------------------------------------------- + | Register Ignition commands + |-------------------------------------------------------------------------- + | + | Ignition comes with an additional make command that lets you create + | new solution classes more easily. To keep your default Laravel + | installation clean, this command is not registered by default. + | + | You can enable the command registration below. + | + */ + 'register_commands' => env('REGISTER_IGNITION_COMMANDS', false), + + /* + |-------------------------------------------------------------------------- + | Ignored Solution Providers + |-------------------------------------------------------------------------- + | + | You may specify a list of solution providers (as fully qualified class + | names) that shouldn't be loaded. Ignition will ignore these classes + | and possible solutions provided by them will never be displayed. + | + */ + + 'ignored_solution_providers' => [ + \Facade\Ignition\SolutionProviders\MissingPackageSolutionProvider::class, + ], + + /* + |-------------------------------------------------------------------------- + | Runnable Solutions + |-------------------------------------------------------------------------- + | + | Some solutions that Ignition displays are runnable and can perform + | various tasks. Runnable solutions are enabled when your app has + | debug mode enabled. You may also fully disable this feature. + | + */ + + 'enable_runnable_solutions' => env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS', null), + + /* + |-------------------------------------------------------------------------- + | Remote Path Mapping + |-------------------------------------------------------------------------- + | + | If you are using a remote dev server, like Laravel Homestead, Docker, or + | even a remote VPS, it will be necessary to specify your path mapping. + | + | Leaving one, or both of these, empty or null will not trigger the remote + | URL changes and Ignition will treat your editor links as local files. + | + | "remote_sites_path" is an absolute base path for your sites or projects + | in Homestead, Vagrant, Docker, or another remote development server. + | + | Example value: "/home/vagrant/Code" + | + | "local_sites_path" is an absolute base path for your sites or projects + | on your local computer where your IDE or code editor is running on. + | + | Example values: "/Users//Code", "C:\Users\\Documents\Code" + | + */ + + 'remote_sites_path' => env('IGNITION_REMOTE_SITES_PATH', ''), + 'local_sites_path' => env('IGNITION_LOCAL_SITES_PATH', ''), + + /* + |-------------------------------------------------------------------------- + | Housekeeping Endpoint Prefix + |-------------------------------------------------------------------------- + | + | Ignition registers a couple of routes when it is enabled. Below you may + | specify a route prefix that will be used to host all internal links. + | + */ + 'housekeeping_endpoint_prefix' => '_ignition', + +]; diff --git a/config/laravellocalization.php b/config/laravellocalization.php old mode 100644 new mode 100755 index 37578d7..4b2df1e --- a/config/laravellocalization.php +++ b/config/laravellocalization.php @@ -1,14 +1,33 @@ . + */ + return [ // Uncomment the languages that your site supports - or add new ones. // These are sorted by the native name, which is the order you might show them in a language selector. // Regional languages are sorted by their base language, so "British English" sorts as "English, British" 'supportedLocales' => [ + 'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'Português', 'regional' => 'pt_PT'], 'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'], 'es' => ['name' => 'Spanish', 'script' => 'Latn', 'native' => 'Español', 'regional' => 'es_ES'], - 'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'Português', 'regional' => 'pt_PT'], 'fr' => ['name' => 'French', 'script' => 'Latn', 'native' => 'Français', 'regional' => 'fr_FR'], ], @@ -45,7 +64,7 @@ return [ // If you want to display the locales in particular order in the language selector you should write the order here. //CAUTION: Please consider using the appropriate locale code otherwise it will not work //Example: 'localesOrder' => ['es','en'], - 'localesOrder' => ['en', 'pt', 'fr', 'es'], + 'localesOrder' => ['pt', 'en', 'fr', 'es'], // If you want to use custom lang url segments like 'at' instead of 'de-AT', you can use the mapping to tallow the LanguageNegotiator to assign the descired locales based on HTTP Accept Language Header. For example you want ot use 'at', so map HTTP Accept Language Header 'de-AT' to 'at' (['de-AT' => 'at']). 'localesMapping' => [], @@ -64,7 +83,7 @@ return [ '/app.css', '/robots.txt', '/slides/*', - '/auth/logout' + '/auth/logout', ], ]; diff --git a/config/log-viewer.php b/config/log-viewer.php old mode 100644 new mode 100755 index b0532ba..c733cb7 --- a/config/log-viewer.php +++ b/config/log-viewer.php @@ -1,5 +1,24 @@ . + */ + use Arcanedev\LogViewer\Contracts\Utilities\Filesystem; return [ @@ -95,7 +114,7 @@ return [ 'icons' => [ /** * Font awesome >= 4.3 - * http://fontawesome.io/icons/ + * http://fontawesome.io/icons/. */ 'all' => 'fa fa-fw fa-list', // http://fontawesome.io/icon/list/ 'emergency' => 'fa fa-fw fa-bug', // http://fontawesome.io/icon/bug/ diff --git a/config/logging.php b/config/logging.php old mode 100644 new mode 100755 index 088c204..283cdeb --- a/config/logging.php +++ b/config/logging.php @@ -1,5 +1,24 @@ . + */ + use Monolog\Handler\NullHandler; use Monolog\Handler\StreamHandler; use Monolog\Handler\SyslogUdpHandler; diff --git a/config/mail.php b/config/mail.php old mode 100644 new mode 100755 index 5201bb7..bf9953d --- a/config/mail.php +++ b/config/mail.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/config/markdown.php b/config/markdown.php old mode 100644 new mode 100755 index 6408d6f..718e37a --- a/config/markdown.php +++ b/config/markdown.php @@ -5,7 +5,7 @@ declare(strict_types=1); /* * This file is part of Laravel Markdown. * - * (c) Graham Campbell + * (c) Graham Campbell * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -37,11 +37,17 @@ return [ | This option specifies what extensions will be automatically enabled. | Simply provide your extension class names here. | - | Default: [] + | Default: [ + | League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension::class, + | League\CommonMark\Extension\Table\TableExtension::class, + | ] | */ - 'extensions' => [], + 'extensions' => [ + League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension::class, + League\CommonMark\Extension\Table\TableExtension::class, + ], /* |-------------------------------------------------------------------------- @@ -66,55 +72,28 @@ return [ /* |-------------------------------------------------------------------------- - | Enable Em Tag Parsing + | Commonmark Configuration |-------------------------------------------------------------------------- | - | This option specifies if `` parsing is enabled. + | This option specifies an array of options for commonmark. | - | Default: true + | Default: [ + | 'enable_em' => true, + | 'enable_strong' => true, + | 'use_asterisk' => true, + | 'use_underscore' => true, + | 'unordered_list_markers' => ['-', '+', '*'], + | ] | */ - 'enable_em' => true, - - /* - |-------------------------------------------------------------------------- - | Enable Strong Tag Parsing - |-------------------------------------------------------------------------- - | - | This option specifies if `` parsing is enabled. - | - | Default: true - | - */ - - 'enable_strong' => true, - - /* - |-------------------------------------------------------------------------- - | Enable Asterisk Parsing - |-------------------------------------------------------------------------- - | - | This option specifies if `*` should be parsed for emphasis. - | - | Default: true - | - */ - - 'use_asterisk' => true, - - /* - |-------------------------------------------------------------------------- - | Enable Underscore Parsing - |-------------------------------------------------------------------------- - | - | This option specifies if `_` should be parsed for emphasis. - | - | Default: true - | - */ - - 'use_underscore' => true, + 'commonmark' => [ + 'enable_em' => true, + 'enable_strong' => true, + 'use_asterisk' => true, + 'use_underscore' => true, + 'unordered_list_markers' => ['-', '+', '*'], + ], /* |-------------------------------------------------------------------------- @@ -140,7 +119,7 @@ return [ | */ - 'allow_unsafe_links' => false, + 'allow_unsafe_links' => true, /* |-------------------------------------------------------------------------- @@ -149,10 +128,29 @@ return [ | | This option specifies the maximum permitted block nesting level. | - | Default: INF + | Default: PHP_INT_MAX | */ - 'max_nesting_level' => INF, + 'max_nesting_level' => PHP_INT_MAX, + + /* + |-------------------------------------------------------------------------- + | Slug Normalizer + |-------------------------------------------------------------------------- + | + | This option specifies an array of options for slug normalization. + | + | Default: [ + | 'max_length' => 255, + | 'unique' => 'document', + | ] + | + */ + + 'slug_normalizer' => [ + 'max_length' => 255, + 'unique' => 'document', + ], ]; diff --git a/config/notification.php b/config/notification.php old mode 100644 new mode 100755 index 8f3da66..cc1a74e --- a/config/notification.php +++ b/config/notification.php @@ -1,12 +1,31 @@ . + */ + return [ - 'sender' => [ + 'sender' => [ - 'address' => 'teams@spacejewel-hosting.com', - 'name' => 'RaspberryNet Teams' + 'address' => env('MAIL_FROM_ADDRESS'), + 'name' => env('MAIL_FROM_NAME'), - ] + ], ]; diff --git a/config/onesignal.php b/config/onesignal.php new file mode 100755 index 0000000..aa03903 --- /dev/null +++ b/config/onesignal.php @@ -0,0 +1,42 @@ +. + */ + +return [ + /* + |-------------------------------------------------------------------------- + | One Signal App Id + |-------------------------------------------------------------------------- + | + | + */ + 'app_id' => 'YOUR-APP-ID-HERE', + + /* + |-------------------------------------------------------------------------- + | Rest API Key + |-------------------------------------------------------------------------- + | + | + | + */ + 'rest_api_key' => 'YOUR-REST-API-KEY-HERE', + 'user_auth_key' => 'YOUR-USER-AUTH-KEY', +]; diff --git a/config/permission.php b/config/permission.php old mode 100644 new mode 100755 index d4a7764..23d28d1 --- a/config/permission.php +++ b/config/permission.php @@ -1,5 +1,24 @@ . + */ + return [ 'models' => [ diff --git a/config/queue.php b/config/queue.php old mode 100644 new mode 100755 index 00b76d6..e9edb7e --- a/config/queue.php +++ b/config/queue.php @@ -1,5 +1,24 @@ . + */ + return [ /* @@ -81,7 +100,7 @@ return [ */ 'failed' => [ - 'driver' => env('QUEUE_FAILED_DRIVER', 'database'), + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), 'database' => env('DB_CONNECTION', 'mysql'), 'table' => 'failed_jobs', ], diff --git a/config/recaptcha.php b/config/recaptcha.php old mode 100644 new mode 100755 index 82e0813..3487b17 --- a/config/recaptcha.php +++ b/config/recaptcha.php @@ -1,14 +1,33 @@ . + */ + return [ 'keys' => [ 'sitekey' => env('RECAPTCHA_SITE_KEY'), - 'secret' => env('RECAPTCHA_PRIVATE_KEY') + 'secret' => env('RECAPTCHA_PRIVATE_KEY'), ], 'verify' => [ - 'apiurl' => env('RECAPTCHA_VERIFY_URL') - ] + 'apiurl' => env('RECAPTCHA_VERIFY_URL'), + ], ]; diff --git a/config/sanctum.php b/config/sanctum.php new file mode 100755 index 0000000..835e880 --- /dev/null +++ b/config/sanctum.php @@ -0,0 +1,50 @@ + explode(',', env( + 'SANCTUM_STATEFUL_DOMAINS', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1' + )), + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/config/sentry.php b/config/sentry.php old mode 100644 new mode 100755 index 4d9ef4d..f8e2b20 --- a/config/sentry.php +++ b/config/sentry.php @@ -1,5 +1,24 @@ . + */ + return [ 'dsn' => env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')), diff --git a/config/services.php b/config/services.php old mode 100644 new mode 100755 index 2a1d616..b897270 --- a/config/services.php +++ b/config/services.php @@ -1,5 +1,24 @@ . + */ + return [ /* @@ -14,6 +33,16 @@ return [ | */ + 'discord' => [ + 'client_id' => env('DISCORD_CLIENT_ID'), + 'client_secret' => env('DISCORD_CLIENT_SECRET'), + 'redirect' => env('DISCORD_REDIRECT_URI'), + + // optional + 'allow_gif_avatars' => (bool)env('DISCORD_AVATAR_GIF', true), + 'avatar_default_extension' => env('DISCORD_EXTENSION_DEFAULT', 'jpg'), // only pick from jpg, png, webp + ], + 'mailgun' => [ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), @@ -30,4 +59,9 @@ return [ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], + 'pusher' => [ + 'beams_instance_id' => env(''), + 'beams_secret_key' => 'Your Secret Key', + ], + ]; diff --git a/config/session.php b/config/session.php old mode 100644 new mode 100755 index 37ae384..a5b0c90 --- a/config/session.php +++ b/config/session.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Support\Str; return [ diff --git a/config/slack.php b/config/slack.php old mode 100644 new mode 100755 index 2651cc4..02627e7 --- a/config/slack.php +++ b/config/slack.php @@ -1,12 +1,30 @@ . + */ + return [ - 'webhook' => [ + 'webhook' => [ - 'integrationURL' => env('SLACK_INTEGRATION_WEBHOOK') - - ] + 'integrationURL' => env('SLACK_INTEGRATION_WEBHOOK'), + ], ]; diff --git a/config/teamwork.php b/config/teamwork.php new file mode 100755 index 0000000..cdc823f --- /dev/null +++ b/config/teamwork.php @@ -0,0 +1,103 @@ +. + */ + +return [ + /* + |-------------------------------------------------------------------------- + | Auth Model + |-------------------------------------------------------------------------- + | + | This is the Auth model used by Teamwork. + | + */ + 'user_model' => config('auth.providers.users.model', App\User::class), + + /* + |-------------------------------------------------------------------------- + | Teamwork users Table + |-------------------------------------------------------------------------- + | + | This is the users table name used by Teamwork. + | + */ + 'users_table' => 'users', + + /* + |-------------------------------------------------------------------------- + | Teamwork Team Model + |-------------------------------------------------------------------------- + | + | This is the Team model used by Teamwork to create correct relations. Update + | the team if it is in a different namespace. + | + */ + 'team_model' => Mpociot\Teamwork\TeamworkTeam::class, + + /* + |-------------------------------------------------------------------------- + | Teamwork teams Table + |-------------------------------------------------------------------------- + | + | This is the teams table name used by Teamwork to save teams to the database. + | + */ + 'teams_table' => 'teams', + + /* + |-------------------------------------------------------------------------- + | Teamwork team_user Table + |-------------------------------------------------------------------------- + | + | This is the team_user table used by Teamwork to save assigned teams to the + | database. + | + */ + 'team_user_table' => 'team_user', + + /* + |-------------------------------------------------------------------------- + | User Foreign key on Teamwork's team_user Table (Pivot) + |-------------------------------------------------------------------------- + */ + 'user_foreign_key' => 'id', + + /* + |-------------------------------------------------------------------------- + | Teamwork Team Invite Model + |-------------------------------------------------------------------------- + | + | This is the Team Invite model used by Teamwork to create correct relations. + | Update the team if it is in a different namespace. + | + */ + 'invite_model' => Mpociot\Teamwork\TeamInvite::class, + + /* + |-------------------------------------------------------------------------- + | Teamwork team invites Table + |-------------------------------------------------------------------------- + | + | This is the team invites table name used by Teamwork to save sent/pending + | invitation into teams to the database. + | + */ + 'team_invites_table' => 'team_invites', +]; diff --git a/config/view.php b/config/view.php old mode 100644 new mode 100755 index 22b8a18..44a66b9 --- a/config/view.php +++ b/config/view.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/crowdin.yml b/crowdin.yml old mode 100644 new mode 100755 diff --git a/database/.gitignore b/database/.gitignore old mode 100644 new mode 100755 diff --git a/database/factories/AbsenceFactory.php b/database/factories/AbsenceFactory.php new file mode 100755 index 0000000..08e2eb3 --- /dev/null +++ b/database/factories/AbsenceFactory.php @@ -0,0 +1,20 @@ +. + */ + +namespace Database\Factories; + +use App\TeamFile; +use Illuminate\Database\Eloquent\Factories\Factory; +use Illuminate\Support\Facades\Storage; + +class TeamFileFactory extends Factory +{ + /** + * The name of the factory's corresponding model. + * + * @var string + */ + protected $model = TeamFile::class; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + $prefix = Storage::disk('local')->getAdapter()->getPathPrefix(); + + return [ + 'uploaded_by' => rand(1, 10), // Also assuming that the user seeder has ran before + 'team_id' => rand(1, 3), // Assuming you create 3 teams beforehand + 'name' => $this->faker->file($prefix.'factory_files', $prefix.'uploads', false), + 'caption' => $this->faker->sentence(), + 'description' => $this->faker->paragraphs(3, true), + 'fs_location' => $this->faker->file($prefix.'factory_files', $prefix.'uploads'), + 'extension' => 'txt', + 'size' => rand(1, 1000), // random fake size between 0 bytes and 1 mb + ]; + } +} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php old mode 100644 new mode 100755 index 741edea..1bbe73f --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -1,6 +1,25 @@ . + */ + +namespace Database\Factories; use App\User; use Faker\Generator as Faker; diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php old mode 100644 new mode 100755 index 4ee8c3e..2596a64 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php old mode 100644 new mode 100755 index 0ee0a36..7715044 --- a/database/migrations/2014_10_12_100000_create_password_resets_table.php +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php old mode 100644 new mode 100755 index 9bddee3..b348447 --- a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100755 index 0000000..3ce0002 --- /dev/null +++ b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +} diff --git a/database/migrations/2020_04_29_022245_create_profiles_table.php b/database/migrations/2020_04_29_022245_create_profiles_table.php old mode 100644 new mode 100755 index b3ac735..bc21b71 --- a/database/migrations/2020_04_29_022245_create_profiles_table.php +++ b/database/migrations/2020_04_29_022245_create_profiles_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -19,7 +38,7 @@ class CreateProfilesTable extends Migration $table->text('profileAboutMe')->nullable(); $table->enum('avatarPreference', [ 'crafatar', // Mojang Profile - 'gravatar' // Email profile + 'gravatar', // Email profile ])->default('gravatar'); $table->text('socialLinks')->nullable(); $table->bigInteger('userID')->unsigned(); diff --git a/database/migrations/2020_04_29_022402_create_applications_table.php b/database/migrations/2020_04_29_022402_create_applications_table.php old mode 100644 new mode 100755 index 3074f8e..529e046 --- a/database/migrations/2020_04_29_022402_create_applications_table.php +++ b/database/migrations/2020_04_29_022402_create_applications_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -28,7 +47,7 @@ class CreateApplicationsTable extends Migration 'STAGE_INTERVIEW', 'STAGE_INTERVIEW_SCHEDULED', 'APPROVED', - 'DENIED' + 'DENIED', ])->default('STAGE_SUBMITTED'); $table->timestamps(); diff --git a/database/migrations/2020_04_29_022421_create_votes_table.php b/database/migrations/2020_04_29_022421_create_votes_table.php old mode 100644 new mode 100755 index 9062e22..6164f56 --- a/database/migrations/2020_04_29_022421_create_votes_table.php +++ b/database/migrations/2020_04_29_022421_create_votes_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -18,7 +37,7 @@ class CreateVotesTable extends Migration $table->bigInteger('userID')->unsigned(); $table->enum('allowedVoteType', [ 'VOTE_DENY', - 'VOTE_APPROVE' + 'VOTE_APPROVE', ]); $table->timestamps(); diff --git a/database/migrations/2020_04_29_022442_create_appointments_table.php b/database/migrations/2020_04_29_022442_create_appointments_table.php old mode 100644 new mode 100755 index 77cce6e..08d60f2 --- a/database/migrations/2020_04_29_022442_create_appointments_table.php +++ b/database/migrations/2020_04_29_022442_create_appointments_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -23,11 +42,11 @@ class CreateAppointmentsTable extends Migration 'DISCORD', 'SKYPE', 'MEET', - 'TEAMSPEAK' + 'TEAMSPEAK', ]); $table->enum('appointmentStatus', [ - 'SCHEDULED', - 'CONCLUDED' // TODO: Review whether this status is necessary + 'SCHEDULED', + 'CONCLUDED', // TODO: Review whether this status is necessary ])->default('SCHEDULED'); $table->boolean('userAccepted')->default(false); $table->longText('meetingNotes')->nullable(); diff --git a/database/migrations/2020_04_29_022541_create_forms_table.php b/database/migrations/2020_04_29_022541_create_forms_table.php old mode 100644 new mode 100755 index 610a6d7..32fbc27 --- a/database/migrations/2020_04_29_022541_create_forms_table.php +++ b/database/migrations/2020_04_29_022541_create_forms_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -19,7 +38,7 @@ class CreateFormsTable extends Migration $table->string('formStructure'); $table->enum('formStatus', [ 'ACTIVE', - 'SUSPENDED' + 'SUSPENDED', ]); $table->timestamps(); }); diff --git a/database/migrations/2020_04_29_022542_create_vacancies_table.php b/database/migrations/2020_04_29_022542_create_vacancies_table.php old mode 100644 new mode 100755 index dfa3aa0..7f17357 --- a/database/migrations/2020_04_29_022542_create_vacancies_table.php +++ b/database/migrations/2020_04_29_022542_create_vacancies_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -26,7 +45,6 @@ class CreateVacanciesTable extends Migration $table->foreign('vacancyFormID') ->references('id') ->on('forms'); - }); } diff --git a/database/migrations/2020_04_29_023647_create_staff_profiles_table.php b/database/migrations/2020_04_29_023647_create_staff_profiles_table.php deleted file mode 100644 index 352dbca..0000000 --- a/database/migrations/2020_04_29_023647_create_staff_profiles_table.php +++ /dev/null @@ -1,40 +0,0 @@ -id(); - $table->bigInteger('userID')->unsigned(); - $table->dateTime('approvalDate'); - $table->dateTime('terminationDate')->nullable(); - $table->dateTime('resignationDate')->nullable(); - $table->text('memberNotes')->nullable(); - $table->timestamps(); - - $table->foreign('userID') - ->references('id') - ->on('users'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('staff_profiles'); - } -} diff --git a/database/migrations/2020_04_29_030107_create_responses_table.php b/database/migrations/2020_04_29_030107_create_responses_table.php old mode 100644 new mode 100755 index 35ea926..02acc46 --- a/database/migrations/2020_04_29_030107_create_responses_table.php +++ b/database/migrations/2020_04_29_030107_create_responses_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -23,7 +42,6 @@ class CreateResponsesTable extends Migration $table->foreign('responseFormID') ->references('id') ->on('forms'); - }); } diff --git a/database/migrations/2020_04_29_195848_votes_has_application.php b/database/migrations/2020_04_29_195848_votes_has_application.php old mode 100644 new mode 100755 index 4464737..8ccf13f --- a/database/migrations/2020_04_29_195848_votes_has_application.php +++ b/database/migrations/2020_04_29_195848_votes_has_application.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -13,8 +32,7 @@ class VotesHasApplication extends Migration */ public function up() { - Schema::create('votes_has_application', function (Blueprint $table){ - + Schema::create('votes_has_application', function (Blueprint $table) { $table->id('id'); $table->bigInteger('vote_id')->unsigned(); $table->bigInteger('application_id')->unsigned(); @@ -22,7 +40,6 @@ class VotesHasApplication extends Migration $table->foreign('vote_id')->references('id')->on('votes'); $table->foreign('application_id')->references('id')->on('applications'); - }); } diff --git a/database/migrations/2020_05_02_223355_create_cache_table.php b/database/migrations/2020_05_02_223355_create_cache_table.php old mode 100644 new mode 100755 index 7b73e5f..f50d132 --- a/database/migrations/2020_05_02_223355_create_cache_table.php +++ b/database/migrations/2020_05_02_223355_create_cache_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2020_05_07_021604_add_status_to_vacancies.php b/database/migrations/2020_05_07_021604_add_status_to_vacancies.php old mode 100644 new mode 100755 index 1d40c92..830bec4 --- a/database/migrations/2020_05_07_021604_add_status_to_vacancies.php +++ b/database/migrations/2020_05_07_021604_add_status_to_vacancies.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -16,7 +35,7 @@ class AddStatusToVacancies extends Migration Schema::table('vacancies', function (Blueprint $table) { $table->enum('vacancyStatus', [ 'OPEN', - 'CLOSED' + 'CLOSED', ])->after('vacancyCount'); }); } diff --git a/database/migrations/2020_05_08_024654_add_slug_to_vacancy.php b/database/migrations/2020_05_08_024654_add_slug_to_vacancy.php old mode 100644 new mode 100755 index 5daa2c6..e14f42e --- a/database/migrations/2020_05_08_024654_add_slug_to_vacancy.php +++ b/database/migrations/2020_05_08_024654_add_slug_to_vacancy.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2020_05_08_063141_add_vacancy_i_d_to_responses.php b/database/migrations/2020_05_08_063141_add_vacancy_i_d_to_responses.php old mode 100644 new mode 100755 index e8b8591..f2a3ea4 --- a/database/migrations/2020_05_08_063141_add_vacancy_i_d_to_responses.php +++ b/database/migrations/2020_05_08_063141_add_vacancy_i_d_to_responses.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2020_05_14_004542_change_form_structure_length.php b/database/migrations/2020_05_14_004542_change_form_structure_length.php old mode 100644 new mode 100755 index 9ba0006..eb699ca --- a/database/migrations/2020_05_14_004542_change_form_structure_length.php +++ b/database/migrations/2020_05_14_004542_change_form_structure_length.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -13,8 +32,8 @@ class ChangeFormStructureLength extends Migration */ public function up() { - Schema::table('forms', function (Blueprint $schema){ - $schema->longText('formStructure')->change(); + Schema::table('forms', function (Blueprint $schema) { + $schema->longText('formStructure')->change(); }); } diff --git a/database/migrations/2020_05_29_234431_create_permission_tables.php b/database/migrations/2020_05_29_234431_create_permission_tables.php old mode 100644 new mode 100755 index 3f9448d..e790941 --- a/database/migrations/2020_05_29_234431_create_permission_tables.php +++ b/database/migrations/2020_05_29_234431_create_permission_tables.php @@ -1,8 +1,27 @@ . + */ + use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; class CreatePermissionTables extends Migration { diff --git a/database/migrations/2020_06_08_153602_create_bans_table.php b/database/migrations/2020_06_08_153602_create_bans_table.php old mode 100644 new mode 100755 index 7674c17..dd18593 --- a/database/migrations/2020_06_08_153602_create_bans_table.php +++ b/database/migrations/2020_06_08_153602_create_bans_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -25,7 +44,6 @@ class CreateBansTable extends Migration $table->foreign('userID') ->references('id') ->on('users'); - }); } diff --git a/database/migrations/2020_06_20_210255_create_comments_table.php b/database/migrations/2020_06_20_210255_create_comments_table.php old mode 100644 new mode 100755 index 501254f..fc9c1d2 --- a/database/migrations/2020_06_20_210255_create_comments_table.php +++ b/database/migrations/2020_06_20_210255_create_comments_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -28,8 +47,6 @@ class CreateCommentsTable extends Migration ->references('id') ->on('applications'); }); - - } /** diff --git a/database/migrations/2020_06_25_093708_create_jobs_table.php b/database/migrations/2020_06_25_093708_create_jobs_table.php old mode 100644 new mode 100755 index 1be9e8a..55d71dd --- a/database/migrations/2020_06_25_093708_create_jobs_table.php +++ b/database/migrations/2020_06_25_093708_create_jobs_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2020_07_11_020743_add_detailed_description_to_vacancy.php b/database/migrations/2020_07_11_020743_add_detailed_description_to_vacancy.php old mode 100644 new mode 100755 index d049d3f..e443101 --- a/database/migrations/2020_07_11_020743_add_detailed_description_to_vacancy.php +++ b/database/migrations/2020_07_11_020743_add_detailed_description_to_vacancy.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2020_07_17_053247_add_twofa_secret_to_users.php b/database/migrations/2020_07_17_053247_add_twofa_secret_to_users.php old mode 100644 new mode 100755 index b4dd0a9..5ebf83d --- a/database/migrations/2020_07_17_053247_add_twofa_secret_to_users.php +++ b/database/migrations/2020_07_17_053247_add_twofa_secret_to_users.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2020_08_30_152900_create_options_table.php b/database/migrations/2020_08_30_152900_create_options_table.php old mode 100644 new mode 100755 index 2c0537c..570a08f --- a/database/migrations/2020_08_30_152900_create_options_table.php +++ b/database/migrations/2020_08_30_152900_create_options_table.php @@ -1,5 +1,24 @@ . + */ + use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; diff --git a/database/migrations/2020_09_10_174112_teamwork_setup_tables.php b/database/migrations/2020_09_10_174112_teamwork_setup_tables.php new file mode 100755 index 0000000..954ff5d --- /dev/null +++ b/database/migrations/2020_09_10_174112_teamwork_setup_tables.php @@ -0,0 +1,102 @@ +. + */ + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; + +class TeamworkSetupTables extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table(\Config::get('teamwork.users_table'), function (Blueprint $table) { + $table->integer('current_team_id')->unsigned()->nullable(); + }); + + Schema::create(\Config::get('teamwork.teams_table'), function (Blueprint $table) { + $table->increments('id')->unsigned(); + $table->integer('owner_id')->unsigned()->nullable(); + $table->string('name'); + $table->timestamps(); + }); + + Schema::create(\Config::get('teamwork.team_user_table'), function (Blueprint $table) { + $table->bigInteger('user_id')->unsigned(); + $table->integer('team_id')->unsigned(); + $table->timestamps(); + + $table->foreign('user_id') + ->references(\Config::get('teamwork.user_foreign_key')) + ->on(\Config::get('teamwork.users_table')) + ->onUpdate('cascade') + ->onDelete('cascade'); + + $table->foreign('team_id') + ->references('id') + ->on(\Config::get('teamwork.teams_table')) + ->onDelete('cascade'); + }); + + Schema::create(\Config::get('teamwork.team_invites_table'), function (Blueprint $table) { + $table->increments('id'); + $table->bigInteger('user_id')->unsigned(); + $table->integer('team_id')->unsigned(); + $table->enum('type', ['invite', 'request']); + $table->string('email'); + $table->string('accept_token'); + $table->string('deny_token'); + $table->timestamps(); + $table->foreign('team_id') + ->references('id') + ->on(\Config::get('teamwork.teams_table')) + ->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table(\Config::get('teamwork.users_table'), function (Blueprint $table) { + $table->dropColumn('current_team_id'); + }); + + Schema::table(\Config::get('teamwork.team_user_table'), function (Blueprint $table) { + if (DB::getDriverName() !== 'sqlite') { + $table->dropForeign(\Config::get('teamwork.team_user_table').'_user_id_foreign'); + } + if (DB::getDriverName() !== 'sqlite') { + $table->dropForeign(\Config::get('teamwork.team_user_table').'_team_id_foreign'); + } + }); + + Schema::drop(\Config::get('teamwork.team_user_table')); + Schema::drop(\Config::get('teamwork.team_invites_table')); + Schema::drop(\Config::get('teamwork.teams_table')); + } +} diff --git a/database/migrations/2020_10_02_112730_add_team_details.php b/database/migrations/2020_10_02_112730_add_team_details.php new file mode 100755 index 0000000..7b82190 --- /dev/null +++ b/database/migrations/2020_10_02_112730_add_team_details.php @@ -0,0 +1,55 @@ +. + */ + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class AddTeamDetails extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table(config('teamwork.teams_table'), function (Blueprint $table) { + $table->text('description')->after('name')->nullable(); + $table->enum('status', ['ACTIVE', 'SUSPENDED'])->after('description'); + $table->boolean('openJoin')->default(false)->after('status'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table(config('teamwork.teams_table'), function (Blueprint $table) { + $table->dropColumn('description'); + $table->dropColumn('status'); + $table->dropColumn('openJoin'); + }); + } +} diff --git a/database/migrations/2020_10_04_163715_team_has_vacancy.php b/database/migrations/2020_10_04_163715_team_has_vacancy.php new file mode 100755 index 0000000..d766d23 --- /dev/null +++ b/database/migrations/2020_10_04_163715_team_has_vacancy.php @@ -0,0 +1,60 @@ +. + */ + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class TeamHasVacancy extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('team_has_vacancy', function (Blueprint $table) { + $table->id(); + $table->integer('team_id')->unsigned(); + $table->bigInteger('vacancy_id')->unsigned(); + $table->timestamps(); + + $table->foreign('team_id') + ->references('id') + ->on(config('teamwork.teams_table')); + + $table->foreign('vacancy_id') + ->references('id') + ->on('vacancies'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2020_10_07_095240_add_account_tokens_to_user.php b/database/migrations/2020_10_07_095240_add_account_tokens_to_user.php new file mode 100755 index 0000000..616742c --- /dev/null +++ b/database/migrations/2020_10_07_095240_add_account_tokens_to_user.php @@ -0,0 +1,51 @@ +. + */ + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class AddAccountTokensToUser extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table('users', function (Blueprint $table) { + $table->string('account_tokens')->after('password')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('account_tokens'); + }); + } +} diff --git a/database/migrations/2020_10_07_100540_add_soft_deletes_to_users.php b/database/migrations/2020_10_07_100540_add_soft_deletes_to_users.php new file mode 100755 index 0000000..c54d27c --- /dev/null +++ b/database/migrations/2020_10_07_100540_add_soft_deletes_to_users.php @@ -0,0 +1,51 @@ +. + */ + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class AddSoftDeletesToUsers extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table('users', function (Blueprint $table) { + $table->softDeletes()->after('account_tokens'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropSoftDeletes(); + }); + } +} diff --git a/database/migrations/2020_10_08_203356_add_uuid_to_failed_jobs.php b/database/migrations/2020_10_08_203356_add_uuid_to_failed_jobs.php new file mode 100755 index 0000000..f5e5921 --- /dev/null +++ b/database/migrations/2020_10_08_203356_add_uuid_to_failed_jobs.php @@ -0,0 +1,51 @@ +. + */ + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class AddUuidToFailedJobs extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table('failed_jobs', function (Blueprint $table) { + $table->string('uuid')->after('id')->nullable()->unique(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('failed_jobs', function (Blueprint $table) { + $table->dropColumn('uuid'); + }); + } +} diff --git a/database/migrations/2020_10_10_185952_create_team_files_table.php b/database/migrations/2020_10_10_185952_create_team_files_table.php new file mode 100755 index 0000000..38a6714 --- /dev/null +++ b/database/migrations/2020_10_10_185952_create_team_files_table.php @@ -0,0 +1,67 @@ +. + */ + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class CreateTeamFilesTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('team_files', function (Blueprint $table) { + $table->id(); + $table->bigInteger('uploaded_by')->unsigned()->index(); + $table->integer('team_id')->unsigned()->index(); + $table->string('name'); + $table->string('fs_location'); // filesystem location + $table->string('extension'); + $table->timestamps(); + + $table->foreign('uploaded_by') + ->references('id') + ->on('users') + ->cascadeOnDelete() + ->cascadeOnUpdate(); + + $table->foreign('team_id') + ->references('id') + ->on('teams') + ->cascadeOnDelete() + ->cascadeOnUpdate(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('team_files'); + } +} diff --git a/database/migrations/2020_10_10_235319_add_details_to_team_files.php b/database/migrations/2020_10_10_235319_add_details_to_team_files.php new file mode 100755 index 0000000..577baf0 --- /dev/null +++ b/database/migrations/2020_10_10_235319_add_details_to_team_files.php @@ -0,0 +1,55 @@ +. + */ + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class AddDetailsToTeamFiles extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table('team_files', function (Blueprint $table) { + $table->integer('size')->nullable()->after('extension'); + $table->string('caption')->nullable()->after('name'); + $table->mediumText('description')->nullable()->after('caption'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('team_files', function (Blueprint $table) { + $table->dropColumn('size'); + $table->dropColumn('caption'); + $table->dropColumn('description'); + }); + } +} diff --git a/database/migrations/2021_01_01_201604_oneoff_applicants.php b/database/migrations/2021_01_01_201604_oneoff_applicants.php new file mode 100755 index 0000000..192100d --- /dev/null +++ b/database/migrations/2021_01_01_201604_oneoff_applicants.php @@ -0,0 +1,43 @@ +id(); + $table->string('name'); + $table->string('email'); + $table->bigInteger('application_id')->unsigned(); + $table->timestamps(); + + $table->foreign('application_id') + ->references('id') + ->on('applications') + + ->onDelete('cascade') + ->onUpdate('cascade'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('oneoff_applicants'); + } +} diff --git a/database/migrations/2021_01_06_011207_add_category_to_options.php b/database/migrations/2021_01_06_011207_add_category_to_options.php new file mode 100755 index 0000000..1986f56 --- /dev/null +++ b/database/migrations/2021_01_06_011207_add_category_to_options.php @@ -0,0 +1,32 @@ +string('option_category')->after('friendly_name')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('options', function (Blueprint $table) { + $table->dropColumn('option_category'); + }); + } +} diff --git a/database/migrations/2021_01_06_040550_add_password_last_updated_to_users.php b/database/migrations/2021_01_06_040550_add_password_last_updated_to_users.php new file mode 100755 index 0000000..f20acb5 --- /dev/null +++ b/database/migrations/2021_01_06_040550_add_password_last_updated_to_users.php @@ -0,0 +1,34 @@ +timestamp('password_last_updated')->after('remember_token')->nullable(); + $table->boolean('administratively_locked')->after('email')->default(false)->comment('Account locked by settings changes, e.g. 2fa grace period timeout'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('password_last_updated'); + $table->dropColumn('administratively_locked'); + }); + } +} diff --git a/database/migrations/2021_07_20_094139_change_bans_table.php b/database/migrations/2021_07_20_094139_change_bans_table.php new file mode 100755 index 0000000..422ba10 --- /dev/null +++ b/database/migrations/2021_07_20_094139_change_bans_table.php @@ -0,0 +1,36 @@ +dropColumn('userAgent'); + $table->boolean('isPermanent')->default(false); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bans', function (Blueprint $table) { + $table->dropColumn('isPermanent'); + $table->string('userAgent')->after('bannedUntil'); + }); + } +} diff --git a/database/migrations/2021_10_26_000036_add_linked_accounts_table.php b/database/migrations/2021_10_26_000036_add_linked_accounts_table.php new file mode 100755 index 0000000..712b9fb --- /dev/null +++ b/database/migrations/2021_10_26_000036_add_linked_accounts_table.php @@ -0,0 +1,28 @@ +id(); + $table->bigInteger('requesterID')->unsigned(); + $table->date('start'); + $table->date('predicted_end'); + $table->boolean('available_assist'); + $table->string('reason'); + $table->enum('status', ['PENDING', 'APPROVED', 'DECLINED', 'CANCELLED', 'ENDED']); + $table->bigInteger('reviewer')->unsigned()->nullable(); + $table->date('reviewed_date')->nullable(); + $table->timestamps(); + + $table->foreign('requesterID') + ->references('id') + ->on('users'); + + $table->foreign('reviewer') + ->references('id') + ->on('users'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('absences'); + } +} diff --git a/database/seeders/AbsenceSeeder.php b/database/seeders/AbsenceSeeder.php new file mode 100755 index 0000000..da77778 --- /dev/null +++ b/database/seeders/AbsenceSeeder.php @@ -0,0 +1,18 @@ +. + */ + +namespace Database\Seeders; + + +use Illuminate\Database\Seeder; + +class DatabaseSeeder extends Seeder +{ + /** + * Seed the application's database. + * + * @return void + */ + public function run() + { + $this->call(\Database\Seeders\PermissionSeeder::class); + $this->call(\Database\Seeders\UserSeeder::class); + $this->call(\Database\Seeders\DefaultOptionsSeeder::class); + $this->call(\Database\Seeders\NewPermissions::class); + $this->call(\Database\Seeders\TeamSeeder::class); + } +} diff --git a/database/seeders/DefaultOptionsSeeder.php b/database/seeders/DefaultOptionsSeeder.php new file mode 100755 index 0000000..b4ed1ce --- /dev/null +++ b/database/seeders/DefaultOptionsSeeder.php @@ -0,0 +1,60 @@ +. + */ + + +namespace Database\Seeders; + +use App\Facades\Options; +use Illuminate\Database\Seeder; + +class DefaultOptionsSeeder extends Seeder +{ + /** + * Run the database seeds. + * + * @return void + */ + public function run() + { + Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through', 'notifications'); // done + Options::setOption('notify_application_comment', false, 'Notify when someone comments on an application', 'notifications'); // done + Options::setOption('notify_new_user', true, 'Notify when someone signs up', 'notifications'); // done + Options::setOption('notify_application_status_change', true, 'Notify when an application changes status', 'notifications'); // done + Options::setOption('notify_applicant_approved', true, 'Notify when an applicant is approved', 'notifications'); // done + Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes', 'notifications'); // done + + + // added in 0.6.2 + Options::setOption('pw_security_policy', 'low', 'Describes the current password security policy.', 'app_security'); + Options::setOption('graceperiod', 7, '2FA Grace Period', 'app_security'); + Options::setOption('password_expiry', '0', 'Defines wether passwords must be reset after $value', 'app_security'); + Options::setOption('force2fa', false, 'Defines whether 2fa is forced upon users', 'app_security'); + Options::setOption('force2faRole', 'reviewer', 'Defines which role to force 2fa for', 'app_security'); + Options::setOption('requireGameLicense', true, 'Defines whether people need to validate their game license', 'app_security'); + + Options::setOption('currentGame', 'MINECRAFT', 'Defines what game we\'re working with', 'app_integration'); + + + Options::setOption('enable_slack_notifications', true, 'Enable slack notifications', 'notifications'); + Options::setOption('enable_email_notifications', true, 'Enable e-mail notifications', 'notifications'); + + } +} diff --git a/database/seeders/NewPermissions.php b/database/seeders/NewPermissions.php new file mode 100755 index 0000000..6c3f118 --- /dev/null +++ b/database/seeders/NewPermissions.php @@ -0,0 +1,51 @@ +. + */ + +namespace Database\Seeders; + +use Illuminate\Database\Seeder; +use Spatie\Permission\Models\Permission; +use Spatie\Permission\Models\Role; + +class NewPermissions extends Seeder +{ + /** + * Run the database seeds. + * + * @return void + */ + public function run() + { + $developer = Role::create([ + 'name' => 'developer' + ]); + + $admin = Role::where('name', 'admin')->first(); + + Permission::create(['name' => 'admin.settings.view']); + Permission::create(['name' => 'admin.settings.edit']); + + $developer->givePermissionTo('admin.developertools.use'); + $admin->givePermissionTo('admin.settings.view'); + $admin->givePermissionTo('admin.settings.edit'); + + + } +} diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php new file mode 100755 index 0000000..03c6118 --- /dev/null +++ b/database/seeders/PermissionSeeder.php @@ -0,0 +1,134 @@ +. + */ + +namespace Database\Seeders; + +use Illuminate\Database\Seeder; +use Spatie\Permission\Models\Permission; +use Spatie\Permission\Models\Role; + +class PermissionSeeder extends Seeder +{ + /** + * Run the database seeds. + * + * @return void + */ + public function run() + { + app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions(); + + // + $user = Role::create( + [ + 'name' => 'user' + ] + ); + + $reviewer = Role::create( + [ + 'name' => 'reviewer' + ] + ); + + $hiringManager = Role::create( + [ + 'name' => 'hiringManager' + ] + ); + + $admin = Role::create([ + 'name' => 'admin' + ]); + + // Spatie wildcard permissions (same concept of MC permissions) + // TODO: Wildcard permissions are not suitable for the app, switch to simpler permission model, starting with permissions for new features + + $permissions = [ + 'applications.submit', + 'applications.stages.deny', + 'applications.stages.approve', + 'applications.view.all', + 'applications.view.own', + 'applications.vote', + 'appointments.schedule', + 'appointments.schedule.edit', + 'appointments.schedule.cancel', + 'applications.*', + 'appointments.*', + + 'profiles.view.others', + 'profiles.edit.others', + + 'admin.viewAllAbsences', + 'admin.manageAbsences', + 'reviewer.viewAbsence', + 'reviewer.requestAbsence', + 'reviewer.withdrawAbsence', + + 'admin.userlist', + 'admin.stafflist', + 'admin.hiring.forms', + 'admin.hiring.formbuilder', + 'admin.hiring.vacancy', + 'admin.hiring.vacancy.edit,delete', + 'admin.notificationsettings', + 'admin.notificationsettings.edit', + 'admin.hiring.*', + 'admin.notificationsettings.*', + 'admin.maintenance.logs.view', + 'admin.developertools.use', + ]; + + foreach ($permissions as $permission) + { + Permission::create(['name' => $permission]); + } + + $user->givePermissionTo([ + 'applications.submit', + 'applications.view.own', + 'profiles.view.others' + ]); + + // Able to view applications and vote on them once they reach the right stage, but not approve applications up to said stage + $reviewer->givePermissionTo([ + 'applications.view.all', + 'applications.vote', + 'reviewer.viewAbsence', + 'reviewer.requestAbsence', + 'reviewer.withdrawAbsence', + ]); + + $hiringManager->givePermissionTo('appointments.*', 'applications.*', 'admin.hiring.*'); + + $admin->givePermissionTo([ + 'appointments.*', + 'admin.userlist', + 'admin.stafflist', + 'admin.hiring.*', + 'admin.notificationsettings.*', + 'profiles.view.others', + 'profiles.edit.others', + 'admin.viewAllAbsences', + 'admin.manageAbsences', + ]); + } +} diff --git a/database/seeders/TeamSeeder.php b/database/seeders/TeamSeeder.php new file mode 100755 index 0000000..ddbc45f --- /dev/null +++ b/database/seeders/TeamSeeder.php @@ -0,0 +1,84 @@ +. + */ + +namespace Database\Seeders; + +use Illuminate\Database\Seeder; +use Illuminate\Support\Collection; +use Spatie\Permission\Models\Permission; +use Spatie\Permission\Models\Role; + +class TeamSeeder extends Seeder +{ + + /** + * Run the database seeds. + * + * @return void + */ + public function run() + { + $teamUserPermissions = [ + + 'teams.files.view', + 'teams.files.upload', + 'teams.files.download', + 'teams.files.delete', + ]; + + // Some of these perms also check whether the user is a member or owner to determine access to resources. + $teamPermissions = [ + + 'teams.view', + 'teams.create', + 'teams.update', + 'teams.invite' + ]; + + $admin = Role::where('name', 'admin')->first(); + $reviewer = Role::where('name', 'reviewer')->first(); + + foreach($teamPermissions as $permission) + { + foreach ($teamUserPermissions as $userPermission) + { + $permCheck = Permission::where('name', $permission)->get()->all(); + + if (empty($permCheck)) + { + Permission::create(['name' => $permission]); + } + + $userPermCheck = Permission::where('name', $userPermission)->get()->all(); + + if (empty($userPermCheck)) + { + Permission::create(['name' => $userPermission]); + } + } + } + + $admin->givePermissionTo($teamPermissions); + $reviewer->givePermissionTo($teamUserPermissions); + + + } +} diff --git a/database/seeds/UserSeeder.php b/database/seeders/UserSeeder.php old mode 100644 new mode 100755 similarity index 78% rename from database/seeds/UserSeeder.php rename to database/seeders/UserSeeder.php index 8ba2603..d76b7ff --- a/database/seeds/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -1,4 +1,24 @@ . + */ + +namespace Database\Seeders; use App\Profile; use App\User; @@ -14,6 +34,17 @@ class UserSeeder extends Seeder */ public function run() { + + $ghostAccount = User::create([ + 'uuid' => 'b741345057274a519144881927be0290', // Ghost + 'name' => 'Ghost (deleted account)', + 'email' => 'blackhole@example.com', + 'email_verified_at' => now(), + 'username' => 'ghost', + 'originalIP' => '0.0.0.0', + 'password' => 'locked' + ])->assignRole('user'); // There can't be role-less users + $staffUsers = [ [ diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php deleted file mode 100644 index 0db89f7..0000000 --- a/database/seeds/DatabaseSeeder.php +++ /dev/null @@ -1,18 +0,0 @@ -call(PermissionSeeder::class); - $this->call(UserSeeder::class); - $this->call(DefaultOptionsSeeder::class); - } -} diff --git a/database/seeds/DefaultOptionsSeeder.php b/database/seeds/DefaultOptionsSeeder.php deleted file mode 100644 index 90e73c5..0000000 --- a/database/seeds/DefaultOptionsSeeder.php +++ /dev/null @@ -1,27 +0,0 @@ - 'developer' - ]); - - $admin = Role::where('name', 'admin')->first(); - - Permission::create(['name' => 'admin.settings.view']); - Permission::create(['name' => 'admin.settings.edit']); - - $developer->givePermissionTo('admin.developertools.use'); - $admin->givePermissionTo('admin.settings.view'); - $admin->givePermissionTo('admin.settings.edit'); - - - } -} diff --git a/database/seeds/PermissionSeeder.php b/database/seeds/PermissionSeeder.php deleted file mode 100644 index 2fde5f4..0000000 --- a/database/seeds/PermissionSeeder.php +++ /dev/null @@ -1,98 +0,0 @@ -forgetCachedPermissions(); - - // - $user = Role::create( - [ - 'name' => 'user' - ] - ); - - $reviewer = Role::create( - [ - 'name' => 'reviewer' - ] - ); - - $hiringManager = Role::create( - [ - 'name' => 'hiringManager' - ] - ); - - $admin = Role::create([ - 'name' => 'admin' - ]); - - // Spatie wildcard permissions (same concept of MC permissions) - - Permission::create(['name' => 'applications.submit']); - Permission::create(['name' => 'applications.stages.deny']); - Permission::create(['name' => 'applications.stages.approve']); - Permission::create(['name' => 'applications.view.all']); - Permission::create(['name' => 'applications.view.own']); - Permission::create(['name' => 'applications.vote']); - Permission::create(['name' => 'appointments.schedule']); - Permission::create(['name' => 'appointments.schedule.edit']); - Permission::create(['name' => 'appointments.schedule.cancel']); - Permission::create(['name' => 'applications.*']); - Permission::create(['name' => 'appointments.*']); - - Permission::create(['name' => 'profiles.view.others']); - Permission::create(['name' => 'profiles.edit.others']); - - Permission::create(['name' => 'admin.userlist']); - Permission::create(['name' => 'admin.stafflist']); - Permission::create(['name' => 'admin.hiring.forms']); - Permission::create(['name' => 'admin.hiring.formbuilder']); - Permission::create(['name' => 'admin.hiring.vacancy']); - Permission::create(['name' => 'admin.hiring.vacancy.edit,delete']); - Permission::create(['name' => 'admin.notificationsettings']); - Permission::create(['name' => 'admin.notificationsettings.edit']); - Permission::create(['name' => 'admin.hiring.*']); - Permission::create(['name' => 'admin.notificationsettings.*']); - Permission::create(['name' => 'admin.maintenance.logs.view']); - - - Permission::create(['name' => 'admin.developertools.use']); - - $user->givePermissionTo([ - 'applications.submit', - 'applications.view.own', - 'profiles.view.others' - ]); - - // Able to view applications and vote on them once they reach the right stage, but not approve applications up to said stage - $reviewer->givePermissionTo([ - 'applications.view.all', - 'applications.vote' - ]); - - $hiringManager->givePermissionTo('appointments.*', 'applications.*', 'admin.hiring.*'); - - $admin->givePermissionTo([ - 'appointments.*', - 'admin.userlist', - 'admin.stafflist', - 'admin.hiring.*', - 'admin.notificationsettings.*', - 'profiles.view.others', - 'profiles.edit.others', - 'admin.maintenance.logs.view' - ]); - } -} diff --git a/lang/en/auth.php b/lang/en/auth.php new file mode 100755 index 0000000..f7c5c88 --- /dev/null +++ b/lang/en/auth.php @@ -0,0 +1,38 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Authentication Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used during authentication for various + | messages that we need to display to the user. You are free to modify + | these language lines according to your application's requirements. + | + */ + + 'failed' => 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/resources/lang/fr/messages.php b/lang/en/messages.php old mode 100644 new mode 100755 similarity index 93% rename from resources/lang/fr/messages.php rename to lang/en/messages.php index 9be7687..87f4b9c --- a/resources/lang/fr/messages.php +++ b/lang/en/messages.php @@ -1,24 +1,28 @@ 'translate-me' - * Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon. - * Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as: - * auth.php, pagination.php, passwords.php, and validation.php. - * It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote + * Copyright © 2020 Miguel Nogueira * - * Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters. - * If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly. + * This file is part of Raspberry Staff Manager. * - * Thank you for translating! + * Raspberry Staff Manager is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Raspberry Staff Manager is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Raspberry Staff Manager. If not, see . */ return [ // ============== MENU TRANSLATIONS ====================== - 'menu' => [ 'my_apps' => 'My Applications', @@ -28,11 +32,9 @@ return [ 'all_forms' => 'All Forms', 'app_settings' => 'App Settings', 'global_app_settings' => 'Global App Settings', - 'system_logs' => 'System Logs' + 'system_logs' => 'System Logs', ], - - // ============== REUSABLE, GENERIC STRINGS =============== 'reusable' => [ @@ -79,10 +81,9 @@ return [ 'platform' => 'Platform', 'notepad' => 'Shared Notepad', // Context: The shared notepad that appears when votes are needed, 'appointment_info' => 'Appointment Information', - 'ip_info' => 'IP Address Information for' + 'ip_info' => 'IP Address Information for', ], - // ============== HOMEPAGE MESSAGES ====================== 'home' => 'Home', @@ -125,8 +126,6 @@ return [ 'contactlabel_subject' => 'Subject (ex. Site Suggestion)', 'contactlabel_send' => 'Send', - - // ======================== AUTHENTICATION MESSAGES =========================== '2fa_txt' => 'Two-Factor Authentication', @@ -151,7 +150,7 @@ return [ 'line4' => 'A minimum of 10 characters;', 'line5' => 'At least 3 uppercase characters;', 'line6' => 'At least 3 numbers;', - 'line7' => 'Any number of special characters.' + 'line7' => 'Any number of special characters.', ], 'sronly_confirmpassword' => 'Confirm Password', // hint: sronly stands for screen-reader only 'sronly_mcusername' => 'Minecraft Username (Premium)', @@ -180,7 +179,6 @@ return [ 'upcoming' => 'Your upcoming interviews', 'soon' => 'Coming soon', - //=================== ADMINISTRATION MESSAGES (for all administration pages) =============== 'adm' => 'Administration', @@ -198,7 +196,6 @@ return [ 'artisan_evaluate' => 'Artisan: Evaluate Votes Now', // Tip: Artisan is a program name, therefore not translatable 'devtools_info' => 'This panel may be also used to completely override the vote system in stalemate scenarios', - 'forms' => 'Forms', 'positions' => 'Positions', // Context: Positions as in job opening 'edit_form' => 'Edit Form', @@ -234,7 +231,7 @@ return [ 'cancel' => 'Cancel', 'close_vacancy' => 'Close Position', 'description_tooltip' => 'Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary', - '' + '', ], @@ -252,7 +249,7 @@ return [ 'title' => 'Application Form Preview', 'looks' => 'This is how your form looks like to applicants', 'f_info' => 'You may edit it and add more fields later.', - '' + '', ], 'forms_p' => [ @@ -260,7 +257,7 @@ return [ 'available_forms' => 'Available forms', 'form_title' => 'Form title', 'empty_noforms' => 'Nothing to see here! Please add some forms first.', - 'new_form' => 'NEW FORM' + 'new_form' => 'NEW FORM', ], 'players' => [ @@ -281,7 +278,7 @@ return [ Registered players are those without a staff role in the team management application. There may be other users registered in the platform, but they won't be displayed here. ", - 'see_staff' => 'See Staff Members' + 'see_staff' => 'See Staff Members', ], @@ -305,7 +302,7 @@ return [ 'settings' => 'Settings', 'settings_header' => 'Notification Settings', 'settings_p' => 'Change which notifications are sent here.', - 'back_btn' => 'Back to Dashboard' + 'back_btn' => 'Back to Dashboard', ], @@ -331,19 +328,17 @@ return [ 'yrs_old' => 'Years old', // Context: "years old" as in: Tom is 24 years old 'line1' => 'We\'re glad you\'ve decided to apply. Generally, applications take 48 hours to be processed and reviewed. Depending on the circumstances and the volume of applications, you may receive an answer in a shorter time.', 'line2' => 'Please fill out the form below. Keep all answers concise and complete. Please keep in mind that the age requirement is at least :agerqr.', - 'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.' + 'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.', ], - 'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.' + 'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.', ], - 'application_m' => [ 'title' => 'Application Management', 'all_apps' => 'All Applications', 'modal_confirm' => 'Are you sure?', 'really_delete' => 'Really delete this?', - 'outstanding_sm' => 'Outstanding', 'outstanding_apps' => 'Outstanding Applications', 'outstanding_subm' => 'Outstanding (Submitted)', @@ -400,7 +395,7 @@ return [ 'title' => 'Voting Reminder', 'line1' => 'Applications which gain more than 50% of positive votes are automatically approved after one day.', 'line2' => 'Conversely, applications that do not reach this number are automatically denied.', - 'line3' => 'Please note that the vote system can be overridden' + 'line3' => 'Please note that the vote system can be overridden', ], @@ -416,14 +411,13 @@ return [ 'title' => ':name\'s profile', 'profile' => 'Profile', 'users' => 'Users', - 'account_banned' => 'Account banned', - 'account_banned_exp' => 'This user has been banned by the moderators.', - 'ban_confirm' => 'Please confirm that you want to ban this user account. You\'ll need to add a reason and expiration date to confirm this. Bans don\'t transfer to connected Minecraft networks (yet).', - 'leave_empty' => 'Leave empty for a permanent ban', + 'account_banned' => 'Account suspended', + 'account_banned_exp' => 'This user has been suspended by the admins.', + 'ban_confirm' => 'Please confirm that you want to suspend this account. You\'ll need to add a reason and expiration date to confirm this.', 'duration' => 'Duration', - 'p_duration' => 'Punishment duration', + 'p_duration' => 'Suspension duration', 'p_duration_exp' => 'e.g. Spamming', - 'ban' => 'Ban', + 'ban' => 'Suspend', 'terminate_notice' => 'You are about to terminate a staff member', 'terminate_notice_warning' => 'Terminating a staff member will remove their privileges on the team management site and Network. @@ -521,7 +515,7 @@ return [ 'insta_user' => 'Instagram Username', 'discord_user' => 'Discord Handle', - 'update_prfl' => 'Update Profile' + 'update_prfl' => 'Update Profile', ], @@ -532,7 +526,7 @@ return [ 'app_process' => [ 'title' => 'Application Process', 'line1' => 'Please allow up to three days for your application to be processed. Your application will be reviewed by every team member, and will move up in stages.', - 'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.' + 'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.', ], 'account_standing' => 'Account Standing', @@ -551,9 +545,9 @@ return [ 'itsyou' => 'It\'s you!', 'title' => 'User Directory', - 'directory' => 'Directory' + 'directory' => 'Directory', - ] + ], ], @@ -590,7 +584,7 @@ return [ 'line1' => 'If you weren\'t present during this meeting, you can view the shared meeting notepad to help you make a decision.', 'line2' => 'You may vote on as many applications as needed; However, you can only vote once per application.', - 'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.' + 'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.', ], @@ -605,7 +599,13 @@ return [ 'max_chars' => 'max characters', // Context: A number is added before max characters 'post' => 'Post', // Context: Post as in post comment - ] + ], + + 'teams' => [ + + 'm_teams_page' => 'Teams', + + ], // ==================== END OF MAIN I18N FILE ====================== diff --git a/lang/en/pagination.php b/lang/en/pagination.php new file mode 100755 index 0000000..59d8a5d --- /dev/null +++ b/lang/en/pagination.php @@ -0,0 +1,38 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Pagination Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used by the paginator library to build + | the simple pagination links. You are free to change them to anything + | you want to customize your views to better match your application. + | + */ + + 'previous' => '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/en/passwords.php b/lang/en/passwords.php new file mode 100755 index 0000000..8957598 --- /dev/null +++ b/lang/en/passwords.php @@ -0,0 +1,41 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Password Reset Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are the default lines which match reasons + | that are given by the password broker for a password update attempt + | has failed, such as for an invalid token or invalid new password. + | + */ + + 'reset' => 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/resources/lang/fr/validation.php b/lang/en/validation.php old mode 100644 new mode 100755 similarity index 90% rename from resources/lang/fr/validation.php rename to lang/en/validation.php index a65914f..b5f1b29 --- a/resources/lang/fr/validation.php +++ b/lang/en/validation.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/lang/es/auth.php b/lang/es/auth.php new file mode 100755 index 0000000..f7c5c88 --- /dev/null +++ b/lang/es/auth.php @@ -0,0 +1,38 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Authentication Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used during authentication for various + | messages that we need to display to the user. You are free to modify + | these language lines according to your application's requirements. + | + */ + + 'failed' => 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/resources/lang/en/messages.php b/lang/es/messages.php old mode 100644 new mode 100755 similarity index 95% rename from resources/lang/en/messages.php rename to lang/es/messages.php index 9be7687..cb43ba7 --- a/resources/lang/en/messages.php +++ b/lang/es/messages.php @@ -1,24 +1,28 @@ 'translate-me' - * Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon. - * Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as: - * auth.php, pagination.php, passwords.php, and validation.php. - * It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote + * Copyright © 2020 Miguel Nogueira * - * Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters. - * If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly. + * This file is part of Raspberry Staff Manager. * - * Thank you for translating! + * Raspberry Staff Manager is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Raspberry Staff Manager is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Raspberry Staff Manager. If not, see . */ return [ // ============== MENU TRANSLATIONS ====================== - 'menu' => [ 'my_apps' => 'My Applications', @@ -28,11 +32,9 @@ return [ 'all_forms' => 'All Forms', 'app_settings' => 'App Settings', 'global_app_settings' => 'Global App Settings', - 'system_logs' => 'System Logs' + 'system_logs' => 'System Logs', ], - - // ============== REUSABLE, GENERIC STRINGS =============== 'reusable' => [ @@ -79,10 +81,9 @@ return [ 'platform' => 'Platform', 'notepad' => 'Shared Notepad', // Context: The shared notepad that appears when votes are needed, 'appointment_info' => 'Appointment Information', - 'ip_info' => 'IP Address Information for' + 'ip_info' => 'IP Address Information for', ], - // ============== HOMEPAGE MESSAGES ====================== 'home' => 'Home', @@ -125,8 +126,6 @@ return [ 'contactlabel_subject' => 'Subject (ex. Site Suggestion)', 'contactlabel_send' => 'Send', - - // ======================== AUTHENTICATION MESSAGES =========================== '2fa_txt' => 'Two-Factor Authentication', @@ -151,7 +150,7 @@ return [ 'line4' => 'A minimum of 10 characters;', 'line5' => 'At least 3 uppercase characters;', 'line6' => 'At least 3 numbers;', - 'line7' => 'Any number of special characters.' + 'line7' => 'Any number of special characters.', ], 'sronly_confirmpassword' => 'Confirm Password', // hint: sronly stands for screen-reader only 'sronly_mcusername' => 'Minecraft Username (Premium)', @@ -180,7 +179,6 @@ return [ 'upcoming' => 'Your upcoming interviews', 'soon' => 'Coming soon', - //=================== ADMINISTRATION MESSAGES (for all administration pages) =============== 'adm' => 'Administration', @@ -198,7 +196,6 @@ return [ 'artisan_evaluate' => 'Artisan: Evaluate Votes Now', // Tip: Artisan is a program name, therefore not translatable 'devtools_info' => 'This panel may be also used to completely override the vote system in stalemate scenarios', - 'forms' => 'Forms', 'positions' => 'Positions', // Context: Positions as in job opening 'edit_form' => 'Edit Form', @@ -234,7 +231,7 @@ return [ 'cancel' => 'Cancel', 'close_vacancy' => 'Close Position', 'description_tooltip' => 'Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary', - '' + '', ], @@ -252,7 +249,7 @@ return [ 'title' => 'Application Form Preview', 'looks' => 'This is how your form looks like to applicants', 'f_info' => 'You may edit it and add more fields later.', - '' + '', ], 'forms_p' => [ @@ -260,7 +257,7 @@ return [ 'available_forms' => 'Available forms', 'form_title' => 'Form title', 'empty_noforms' => 'Nothing to see here! Please add some forms first.', - 'new_form' => 'NEW FORM' + 'new_form' => 'NEW FORM', ], 'players' => [ @@ -281,7 +278,7 @@ return [ Registered players are those without a staff role in the team management application. There may be other users registered in the platform, but they won't be displayed here. ", - 'see_staff' => 'See Staff Members' + 'see_staff' => 'See Staff Members', ], @@ -305,7 +302,7 @@ return [ 'settings' => 'Settings', 'settings_header' => 'Notification Settings', 'settings_p' => 'Change which notifications are sent here.', - 'back_btn' => 'Back to Dashboard' + 'back_btn' => 'Back to Dashboard', ], @@ -331,19 +328,17 @@ return [ 'yrs_old' => 'Years old', // Context: "years old" as in: Tom is 24 years old 'line1' => 'We\'re glad you\'ve decided to apply. Generally, applications take 48 hours to be processed and reviewed. Depending on the circumstances and the volume of applications, you may receive an answer in a shorter time.', 'line2' => 'Please fill out the form below. Keep all answers concise and complete. Please keep in mind that the age requirement is at least :agerqr.', - 'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.' + 'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.', ], - 'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.' + 'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.', ], - 'application_m' => [ 'title' => 'Application Management', 'all_apps' => 'All Applications', 'modal_confirm' => 'Are you sure?', 'really_delete' => 'Really delete this?', - 'outstanding_sm' => 'Outstanding', 'outstanding_apps' => 'Outstanding Applications', 'outstanding_subm' => 'Outstanding (Submitted)', @@ -400,7 +395,7 @@ return [ 'title' => 'Voting Reminder', 'line1' => 'Applications which gain more than 50% of positive votes are automatically approved after one day.', 'line2' => 'Conversely, applications that do not reach this number are automatically denied.', - 'line3' => 'Please note that the vote system can be overridden' + 'line3' => 'Please note that the vote system can be overridden', ], @@ -521,7 +516,7 @@ return [ 'insta_user' => 'Instagram Username', 'discord_user' => 'Discord Handle', - 'update_prfl' => 'Update Profile' + 'update_prfl' => 'Update Profile', ], @@ -532,7 +527,7 @@ return [ 'app_process' => [ 'title' => 'Application Process', 'line1' => 'Please allow up to three days for your application to be processed. Your application will be reviewed by every team member, and will move up in stages.', - 'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.' + 'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.', ], 'account_standing' => 'Account Standing', @@ -551,9 +546,9 @@ return [ 'itsyou' => 'It\'s you!', 'title' => 'User Directory', - 'directory' => 'Directory' + 'directory' => 'Directory', - ] + ], ], @@ -590,7 +585,7 @@ return [ 'line1' => 'If you weren\'t present during this meeting, you can view the shared meeting notepad to help you make a decision.', 'line2' => 'You may vote on as many applications as needed; However, you can only vote once per application.', - 'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.' + 'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.', ], @@ -605,7 +600,7 @@ return [ 'max_chars' => 'max characters', // Context: A number is added before max characters 'post' => 'Post', // Context: Post as in post comment - ] + ], // ==================== END OF MAIN I18N FILE ====================== diff --git a/lang/es/pagination.php b/lang/es/pagination.php new file mode 100755 index 0000000..59d8a5d --- /dev/null +++ b/lang/es/pagination.php @@ -0,0 +1,38 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Pagination Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used by the paginator library to build + | the simple pagination links. You are free to change them to anything + | you want to customize your views to better match your application. + | + */ + + 'previous' => '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/es/passwords.php b/lang/es/passwords.php new file mode 100755 index 0000000..8957598 --- /dev/null +++ b/lang/es/passwords.php @@ -0,0 +1,41 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Password Reset Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are the default lines which match reasons + | that are given by the password broker for a password update attempt + | has failed, such as for an invalid token or invalid new password. + | + */ + + 'reset' => 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/resources/lang/en/validation.php b/lang/es/validation.php old mode 100644 new mode 100755 similarity index 90% rename from resources/lang/en/validation.php rename to lang/es/validation.php index a65914f..b5f1b29 --- a/resources/lang/en/validation.php +++ b/lang/es/validation.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/lang/fr/auth.php b/lang/fr/auth.php new file mode 100755 index 0000000..f7c5c88 --- /dev/null +++ b/lang/fr/auth.php @@ -0,0 +1,38 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Authentication Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used during authentication for various + | messages that we need to display to the user. You are free to modify + | these language lines according to your application's requirements. + | + */ + + 'failed' => 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/resources/lang/es/messages.php b/lang/fr/messages.php old mode 100644 new mode 100755 similarity index 95% rename from resources/lang/es/messages.php rename to lang/fr/messages.php index 9be7687..cb43ba7 --- a/resources/lang/es/messages.php +++ b/lang/fr/messages.php @@ -1,24 +1,28 @@ 'translate-me' - * Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon. - * Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as: - * auth.php, pagination.php, passwords.php, and validation.php. - * It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote + * Copyright © 2020 Miguel Nogueira * - * Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters. - * If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly. + * This file is part of Raspberry Staff Manager. * - * Thank you for translating! + * Raspberry Staff Manager is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Raspberry Staff Manager is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Raspberry Staff Manager. If not, see . */ return [ // ============== MENU TRANSLATIONS ====================== - 'menu' => [ 'my_apps' => 'My Applications', @@ -28,11 +32,9 @@ return [ 'all_forms' => 'All Forms', 'app_settings' => 'App Settings', 'global_app_settings' => 'Global App Settings', - 'system_logs' => 'System Logs' + 'system_logs' => 'System Logs', ], - - // ============== REUSABLE, GENERIC STRINGS =============== 'reusable' => [ @@ -79,10 +81,9 @@ return [ 'platform' => 'Platform', 'notepad' => 'Shared Notepad', // Context: The shared notepad that appears when votes are needed, 'appointment_info' => 'Appointment Information', - 'ip_info' => 'IP Address Information for' + 'ip_info' => 'IP Address Information for', ], - // ============== HOMEPAGE MESSAGES ====================== 'home' => 'Home', @@ -125,8 +126,6 @@ return [ 'contactlabel_subject' => 'Subject (ex. Site Suggestion)', 'contactlabel_send' => 'Send', - - // ======================== AUTHENTICATION MESSAGES =========================== '2fa_txt' => 'Two-Factor Authentication', @@ -151,7 +150,7 @@ return [ 'line4' => 'A minimum of 10 characters;', 'line5' => 'At least 3 uppercase characters;', 'line6' => 'At least 3 numbers;', - 'line7' => 'Any number of special characters.' + 'line7' => 'Any number of special characters.', ], 'sronly_confirmpassword' => 'Confirm Password', // hint: sronly stands for screen-reader only 'sronly_mcusername' => 'Minecraft Username (Premium)', @@ -180,7 +179,6 @@ return [ 'upcoming' => 'Your upcoming interviews', 'soon' => 'Coming soon', - //=================== ADMINISTRATION MESSAGES (for all administration pages) =============== 'adm' => 'Administration', @@ -198,7 +196,6 @@ return [ 'artisan_evaluate' => 'Artisan: Evaluate Votes Now', // Tip: Artisan is a program name, therefore not translatable 'devtools_info' => 'This panel may be also used to completely override the vote system in stalemate scenarios', - 'forms' => 'Forms', 'positions' => 'Positions', // Context: Positions as in job opening 'edit_form' => 'Edit Form', @@ -234,7 +231,7 @@ return [ 'cancel' => 'Cancel', 'close_vacancy' => 'Close Position', 'description_tooltip' => 'Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary', - '' + '', ], @@ -252,7 +249,7 @@ return [ 'title' => 'Application Form Preview', 'looks' => 'This is how your form looks like to applicants', 'f_info' => 'You may edit it and add more fields later.', - '' + '', ], 'forms_p' => [ @@ -260,7 +257,7 @@ return [ 'available_forms' => 'Available forms', 'form_title' => 'Form title', 'empty_noforms' => 'Nothing to see here! Please add some forms first.', - 'new_form' => 'NEW FORM' + 'new_form' => 'NEW FORM', ], 'players' => [ @@ -281,7 +278,7 @@ return [ Registered players are those without a staff role in the team management application. There may be other users registered in the platform, but they won't be displayed here. ", - 'see_staff' => 'See Staff Members' + 'see_staff' => 'See Staff Members', ], @@ -305,7 +302,7 @@ return [ 'settings' => 'Settings', 'settings_header' => 'Notification Settings', 'settings_p' => 'Change which notifications are sent here.', - 'back_btn' => 'Back to Dashboard' + 'back_btn' => 'Back to Dashboard', ], @@ -331,19 +328,17 @@ return [ 'yrs_old' => 'Years old', // Context: "years old" as in: Tom is 24 years old 'line1' => 'We\'re glad you\'ve decided to apply. Generally, applications take 48 hours to be processed and reviewed. Depending on the circumstances and the volume of applications, you may receive an answer in a shorter time.', 'line2' => 'Please fill out the form below. Keep all answers concise and complete. Please keep in mind that the age requirement is at least :agerqr.', - 'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.' + 'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.', ], - 'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.' + 'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.', ], - 'application_m' => [ 'title' => 'Application Management', 'all_apps' => 'All Applications', 'modal_confirm' => 'Are you sure?', 'really_delete' => 'Really delete this?', - 'outstanding_sm' => 'Outstanding', 'outstanding_apps' => 'Outstanding Applications', 'outstanding_subm' => 'Outstanding (Submitted)', @@ -400,7 +395,7 @@ return [ 'title' => 'Voting Reminder', 'line1' => 'Applications which gain more than 50% of positive votes are automatically approved after one day.', 'line2' => 'Conversely, applications that do not reach this number are automatically denied.', - 'line3' => 'Please note that the vote system can be overridden' + 'line3' => 'Please note that the vote system can be overridden', ], @@ -521,7 +516,7 @@ return [ 'insta_user' => 'Instagram Username', 'discord_user' => 'Discord Handle', - 'update_prfl' => 'Update Profile' + 'update_prfl' => 'Update Profile', ], @@ -532,7 +527,7 @@ return [ 'app_process' => [ 'title' => 'Application Process', 'line1' => 'Please allow up to three days for your application to be processed. Your application will be reviewed by every team member, and will move up in stages.', - 'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.' + 'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.', ], 'account_standing' => 'Account Standing', @@ -551,9 +546,9 @@ return [ 'itsyou' => 'It\'s you!', 'title' => 'User Directory', - 'directory' => 'Directory' + 'directory' => 'Directory', - ] + ], ], @@ -590,7 +585,7 @@ return [ 'line1' => 'If you weren\'t present during this meeting, you can view the shared meeting notepad to help you make a decision.', 'line2' => 'You may vote on as many applications as needed; However, you can only vote once per application.', - 'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.' + 'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.', ], @@ -605,7 +600,7 @@ return [ 'max_chars' => 'max characters', // Context: A number is added before max characters 'post' => 'Post', // Context: Post as in post comment - ] + ], // ==================== END OF MAIN I18N FILE ====================== diff --git a/lang/fr/pagination.php b/lang/fr/pagination.php new file mode 100755 index 0000000..59d8a5d --- /dev/null +++ b/lang/fr/pagination.php @@ -0,0 +1,38 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Pagination Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used by the paginator library to build + | the simple pagination links. You are free to change them to anything + | you want to customize your views to better match your application. + | + */ + + 'previous' => '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/fr/passwords.php b/lang/fr/passwords.php new file mode 100755 index 0000000..8957598 --- /dev/null +++ b/lang/fr/passwords.php @@ -0,0 +1,41 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Password Reset Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are the default lines which match reasons + | that are given by the password broker for a password update attempt + | has failed, such as for an invalid token or invalid new password. + | + */ + + 'reset' => 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/resources/lang/es/validation.php b/lang/fr/validation.php old mode 100644 new mode 100755 similarity index 90% rename from resources/lang/es/validation.php rename to lang/fr/validation.php index a65914f..b5f1b29 --- a/resources/lang/es/validation.php +++ b/lang/fr/validation.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/lang/pt/auth.php b/lang/pt/auth.php new file mode 100755 index 0000000..bb63a28 --- /dev/null +++ b/lang/pt/auth.php @@ -0,0 +1,38 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Authentication Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used during authentication for various + | messages that we need to display to the user. You are free to modify + | these language lines according to your application's requirements. + | + */ + + 'failed' => 'Estas credenciais não coincidem com os nossos registos.', + 'throttle' => 'Demasiadas tentativas de acesso. Tente novamente em :seconds segundos.', + +]; diff --git a/resources/lang/pt/messages.php b/lang/pt/messages.php old mode 100644 new mode 100755 similarity index 95% rename from resources/lang/pt/messages.php rename to lang/pt/messages.php index bc83c18..78123b1 --- a/resources/lang/pt/messages.php +++ b/lang/pt/messages.php @@ -1,24 +1,28 @@ 'translate-me' - * Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon. - * Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as: - * auth.php, pagination.php, passwords.php, and validation.php. - * It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote + * Copyright © 2020 Miguel Nogueira * - * Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters. - * If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly. + * This file is part of Raspberry Staff Manager. * - * Thank you for translating! + * Raspberry Staff Manager is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Raspberry Staff Manager is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Raspberry Staff Manager. If not, see . */ return [ // ============== MENU TRANSLATIONS ====================== - 'menu' => [ 'my_apps' => 'As minhas Candidaturas', @@ -28,11 +32,9 @@ return [ 'all_forms' => 'Todos os Formulários', 'app_settings' => 'Configurações da App', 'global_app_settings' => 'Configurações globais do aplicativo', - 'system_logs' => 'Registos do Sistema' + 'system_logs' => 'Registos do Sistema', ], - - // ============== REUSABLE, GENERIC STRINGS =============== 'reusable' => [ @@ -79,10 +81,9 @@ return [ 'platform' => 'Plataforma', 'notepad' => 'Bloco Notas Partilhado', // Context: The shared notepad that appears when votes are needed, 'appointment_info' => 'Informação da Marcação', - 'ip_info' => 'Informação de Endereço IP para' + 'ip_info' => 'Informação de Endereço IP para', ], - // ============== HOMEPAGE MESSAGES ====================== 'home' => 'Início', @@ -125,8 +126,6 @@ return [ 'contactlabel_subject' => 'Assunto (ex. sugestão do site)', 'contactlabel_send' => 'Enviar', - - // ======================== AUTHENTICATION MESSAGES =========================== '2fa_txt' => 'Autenticação de dois Fatores', @@ -151,7 +150,7 @@ return [ 'line4' => 'Um mínimo de 10 caracteres;', 'line5' => 'Pelo menos 3 caracteres maiúsculos;', 'line6' => 'Pelo menos 3 números;', - 'line7' => 'Números e caracteres especiais.' + 'line7' => 'Números e caracteres especiais.', ], 'sronly_confirmpassword' => 'Confirmar palavra-passe', // hint: sronly stands for screen-reader only 'sronly_mcusername' => 'Utilizador do Minecraft (Premium)', @@ -180,7 +179,6 @@ return [ 'upcoming' => 'As suas próximas entrevistas', 'soon' => 'Disponível em breve', - //=================== ADMINISTRATION MESSAGES (for all administration pages) =============== 'adm' => 'Administração', @@ -198,7 +196,6 @@ return [ 'artisan_evaluate' => 'Artisan: Avaliar Votos Agora', // Tip: Artisan is a program name, therefore not translatable 'devtools_info' => 'Este painel também pode ser usado para substituir completamente o sistema de votação em cenários de impasse', - 'forms' => 'Formulários', 'positions' => 'Vagas', // Context: Positions as in job opening 'edit_form' => 'Editar Formulário', @@ -234,7 +231,7 @@ return [ 'cancel' => 'Cancelar', 'close_vacancy' => 'Fechar vaga', 'description_tooltip' => 'Adicione coisas como requisitos de admissão, responsabilidades e funções, e qualquer outra coisa que você ache necessária', - '' + '', ], @@ -252,7 +249,7 @@ return [ 'title' => 'Pré-visualização do Formulário de Candidatura', 'looks' => 'É assim que o seu formulário aparece para os candidatos', 'f_info' => 'Você pode editá-lo e adicionar mais campos posteriormente.', - '' + '', ], 'forms_p' => [ @@ -260,7 +257,7 @@ return [ 'available_forms' => 'Formulários disponíveis', 'form_title' => 'Título do Formulário', 'empty_noforms' => 'Nada para ver aqui! Por favor, crie alguns formulários primeiro.', - 'new_form' => 'NOVO FORMULÁRIO' + 'new_form' => 'NOVO FORMULÁRIO', ], 'players' => [ @@ -277,11 +274,11 @@ return [ 'banned' => 'Banido', 'active' => 'Ativo', 'no_reg' => 'Não há jogadores inscritos!', - 'no_reg_exp' => " + 'no_reg_exp' => ' Jogadores registados são aqueles que não possuem uma função administrativa no aplicativo de gestão de equipa. Pode haver outros utilizadores registados na plataforma, mas eles não serão exibidos aqui. -", - 'see_staff' => 'Ver Membros da Equipa' +', + 'see_staff' => 'Ver Membros da Equipa', ], @@ -289,11 +286,11 @@ return [ 'application_form' => 'Formulário de Candidatura', 'select_form' => 'Selecione um formulário...', - 'no_form_error' => " + 'no_form_error' => ' Não pode criar uma vaga sem qualquer formulário cujos quais as pessoas se poderiam candidatar. Crie um formulário primeiro, e depois crie uma vaga. Um único formulário pode ter várias vagas, para que possa anexar futuras vagas ao mesmo formulário, se quiser. -", +', 'new_pos' => 'NOVA VAGA', 'empty_pos_warning' => 'Nada para ver aqui! Abra algumas vagas primeiro. Isso fará os candidatos aparecerem! (esperançoso)', 'manage_forms' => 'GERIR FORMULÁRIOS DE CANDIDATURA', @@ -305,7 +302,7 @@ return [ 'settings' => 'Definições', 'settings_header' => 'Configuração das notificações', 'settings_p' => 'Altere quais notificações são enviadas aqui.', - 'back_btn' => 'Voltar ao painel' + 'back_btn' => 'Voltar ao painel', ], @@ -331,19 +328,17 @@ return [ 'yrs_old' => 'Anos de idade', // Context: "years old" as in: Tom is 24 years old 'line1' => 'Estamos felizes que você decidiu se candidatar. Geralmente, as candidaturas levam 48 horas para serem processadas e revisadas. Dependendo das circunstâncias e do volume de candidaturas, você poderá receber uma resposta em um período mais curto de tempo.', 'line2' => 'Por favor, preencha o formulário abaixo. Mantenha todas as respostas concisas e completas. Lembre-se de que o requisito de idade é de pelo menos :agerqr.', - 'line3' => 'Perguntar sobre a sua candidatura resultará em ser negado instantaneamente. Tudo o que você precisa saber está aqui.' + 'line3' => 'Perguntar sobre a sua candidatura resultará em ser negado instantaneamente. Tudo o que você precisa saber está aqui.', ], - 'app_timeout' => 'A sua conta não pode enviar outra candidatura. Por favor, espere :days mais dias antes de tentar enviar uma candidatura.' + 'app_timeout' => 'A sua conta não pode enviar outra candidatura. Por favor, espere :days mais dias antes de tentar enviar uma candidatura.', ], - 'application_m' => [ 'title' => 'Gestão de Candidaturas', 'all_apps' => 'Todas as Candidaturas', 'modal_confirm' => 'Tem a certeza?', 'really_delete' => 'Deseja realmente excluir isto?', - 'outstanding_sm' => 'Pendente', 'outstanding_apps' => 'Candidaturas Pendendes', 'outstanding_subm' => 'Pendente (Enviado)', @@ -400,7 +395,7 @@ return [ 'title' => 'Lembrete de votação', 'line1' => 'Candidaturas que obtêm mais de 50% dos votos positivos são automaticamente aprovadas após um dia.', 'line2' => 'Inversamente, candidaturas que não atingem esse número são automaticamente negadas.', - 'line3' => 'Por favor, lembre-se que o sistema de votação pode ser substituído' + 'line3' => 'Por favor, lembre-se que o sistema de votação pode ser substituído', ], @@ -521,7 +516,7 @@ return [ 'insta_user' => 'Nome de Utilizador do Instagram', 'discord_user' => '"Handle" do Discord', - 'update_prfl' => 'Atualizar Perfil' + 'update_prfl' => 'Atualizar Perfil', ], @@ -532,7 +527,7 @@ return [ 'app_process' => [ 'title' => 'Processo de Candidatura', 'line1' => 'Por favor, aguarde pelo menos três dias para que sua candidatura seja processada. A inscrição será revisada por todos os membros da equipa, e será promovida em fases.', - 'line2' => 'Se uma entrevista estiver programada, você precisará abrir o aplicativo aqui e confirmar a hora, data e local atribuídos para você.' + 'line2' => 'Se uma entrevista estiver programada, você precisará abrir o aplicativo aqui e confirmar a hora, data e local atribuídos para você.', ], 'account_standing' => 'Estado da Conta', @@ -551,9 +546,9 @@ return [ 'itsyou' => 'É você!', 'title' => 'Diretório de Utilizadores', - 'directory' => 'Diretório' + 'directory' => 'Diretório', - ] + ], ], @@ -590,7 +585,7 @@ return [ 'line1' => 'Se você não estava presente durante esta reunião, pode visualizar o bloco de notas da reunião partilhado para ajudá-lo a tomar uma decisão.', 'line2' => 'Você pode votar em quantas candidaturas forem necessárias; no entanto, só pode votar uma vez por candidatura.', - 'line3' => 'Os votos não têm peso baseado no cargo. Esse sistema foi projetado com justiça e facilidade de uso em mente.' + 'line3' => 'Os votos não têm peso baseado no cargo. Esse sistema foi projetado com justiça e facilidade de uso em mente.', ], @@ -605,7 +600,7 @@ return [ 'max_chars' => 'caracteres no máximo', // Context: A number is added before max characters 'post' => 'Publicar', // Context: Post as in post comment - ] + ], // ==================== END OF MAIN I18N FILE ====================== diff --git a/lang/pt/pagination.php b/lang/pt/pagination.php new file mode 100755 index 0000000..bed9cc9 --- /dev/null +++ b/lang/pt/pagination.php @@ -0,0 +1,38 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Pagination Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are used by the paginator library to build + | the simple pagination links. You are free to change them to anything + | you want to customize your views to better match your application. + | + */ + + 'previous' => '« Anterior', + 'next' => 'Seguinte »', + +]; diff --git a/lang/pt/passwords.php b/lang/pt/passwords.php new file mode 100755 index 0000000..0f19f79 --- /dev/null +++ b/lang/pt/passwords.php @@ -0,0 +1,41 @@ +. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | Password Reset Language Lines + |-------------------------------------------------------------------------- + | + | The following language lines are the default lines which match reasons + | that are given by the password broker for a password update attempt + | has failed, such as for an invalid token or invalid new password. + | + */ + + 'reset' => 'Sua palavra-passe foi redefinida!', + 'sent' => 'Enviamos um e-mail com um link para redefinir a sua password!', + 'throttled' => 'Por favor, aguarde antes de tentar novamente.', + 'token' => 'Token para recuperação de senha inválido.', + 'user' => 'Não foi possível encontrar um utilizador com este e-mail.', + +]; diff --git a/resources/lang/pt/validation.php b/lang/pt/validation.php old mode 100644 new mode 100755 similarity index 91% rename from resources/lang/pt/validation.php rename to lang/pt/validation.php index c167208..6e69bb1 --- a/resources/lang/pt/validation.php +++ b/lang/pt/validation.php @@ -1,5 +1,24 @@ . + */ + return [ /* diff --git a/resources/lang/vendor/adminlte/en/adminlte.php b/lang/vendor/adminlte/en/adminlte.php old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/adminlte/en/adminlte.php rename to lang/vendor/adminlte/en/adminlte.php diff --git a/resources/lang/vendor/adminlte/en/menu.php b/lang/vendor/adminlte/en/menu.php old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/adminlte/en/menu.php rename to lang/vendor/adminlte/en/menu.php diff --git a/resources/lang/vendor/adminlte/es/adminlte.php b/lang/vendor/adminlte/es/adminlte.php old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/adminlte/es/adminlte.php rename to lang/vendor/adminlte/es/adminlte.php diff --git a/resources/lang/vendor/adminlte/es/menu.php b/lang/vendor/adminlte/es/menu.php old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/adminlte/es/menu.php rename to lang/vendor/adminlte/es/menu.php diff --git a/resources/lang/vendor/adminlte/fr/adminlte.php b/lang/vendor/adminlte/fr/adminlte.php old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/adminlte/fr/adminlte.php rename to lang/vendor/adminlte/fr/adminlte.php diff --git a/resources/lang/vendor/adminlte/fr/menu.php b/lang/vendor/adminlte/fr/menu.php old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/adminlte/fr/menu.php rename to lang/vendor/adminlte/fr/menu.php diff --git a/resources/lang/vendor/adminlte/pt/adminlte.php b/lang/vendor/adminlte/pt/adminlte.php old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/adminlte/pt/adminlte.php rename to lang/vendor/adminlte/pt/adminlte.php diff --git a/resources/lang/vendor/adminlte/pt/menu.php b/lang/vendor/adminlte/pt/menu.php old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/adminlte/pt/menu.php rename to lang/vendor/adminlte/pt/menu.php diff --git a/resources/lang/vendor/log-viewer/ar.json b/lang/vendor/log-viewer/ar.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/ar.json rename to lang/vendor/log-viewer/ar.json diff --git a/resources/lang/vendor/log-viewer/bg.json b/lang/vendor/log-viewer/bg.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/bg.json rename to lang/vendor/log-viewer/bg.json diff --git a/resources/lang/vendor/log-viewer/de.json b/lang/vendor/log-viewer/de.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/de.json rename to lang/vendor/log-viewer/de.json diff --git a/resources/lang/vendor/log-viewer/es.json b/lang/vendor/log-viewer/es.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/es.json rename to lang/vendor/log-viewer/es.json diff --git a/resources/lang/vendor/log-viewer/et.json b/lang/vendor/log-viewer/et.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/et.json rename to lang/vendor/log-viewer/et.json diff --git a/resources/lang/vendor/log-viewer/fa.json b/lang/vendor/log-viewer/fa.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/fa.json rename to lang/vendor/log-viewer/fa.json diff --git a/resources/lang/vendor/log-viewer/fr.json b/lang/vendor/log-viewer/fr.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/fr.json rename to lang/vendor/log-viewer/fr.json diff --git a/resources/lang/vendor/log-viewer/hu.json b/lang/vendor/log-viewer/hu.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/hu.json rename to lang/vendor/log-viewer/hu.json diff --git a/resources/lang/vendor/log-viewer/hy.json b/lang/vendor/log-viewer/hy.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/hy.json rename to lang/vendor/log-viewer/hy.json diff --git a/resources/lang/vendor/log-viewer/id.json b/lang/vendor/log-viewer/id.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/id.json rename to lang/vendor/log-viewer/id.json diff --git a/resources/lang/vendor/log-viewer/it.json b/lang/vendor/log-viewer/it.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/it.json rename to lang/vendor/log-viewer/it.json diff --git a/resources/lang/vendor/log-viewer/ja.json b/lang/vendor/log-viewer/ja.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/ja.json rename to lang/vendor/log-viewer/ja.json diff --git a/resources/lang/vendor/log-viewer/ko.json b/lang/vendor/log-viewer/ko.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/ko.json rename to lang/vendor/log-viewer/ko.json diff --git a/resources/lang/vendor/log-viewer/ms.json b/lang/vendor/log-viewer/ms.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/ms.json rename to lang/vendor/log-viewer/ms.json diff --git a/resources/lang/vendor/log-viewer/nl.json b/lang/vendor/log-viewer/nl.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/nl.json rename to lang/vendor/log-viewer/nl.json diff --git a/resources/lang/vendor/log-viewer/pl.json b/lang/vendor/log-viewer/pl.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/pl.json rename to lang/vendor/log-viewer/pl.json diff --git a/resources/lang/vendor/log-viewer/pt-BR.json b/lang/vendor/log-viewer/pt-BR.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/pt-BR.json rename to lang/vendor/log-viewer/pt-BR.json diff --git a/resources/lang/vendor/log-viewer/ro.json b/lang/vendor/log-viewer/ro.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/ro.json rename to lang/vendor/log-viewer/ro.json diff --git a/resources/lang/vendor/log-viewer/ru.json b/lang/vendor/log-viewer/ru.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/ru.json rename to lang/vendor/log-viewer/ru.json diff --git a/resources/lang/vendor/log-viewer/sv.json b/lang/vendor/log-viewer/sv.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/sv.json rename to lang/vendor/log-viewer/sv.json diff --git a/resources/lang/vendor/log-viewer/th.json b/lang/vendor/log-viewer/th.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/th.json rename to lang/vendor/log-viewer/th.json diff --git a/resources/lang/vendor/log-viewer/tr.json b/lang/vendor/log-viewer/tr.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/tr.json rename to lang/vendor/log-viewer/tr.json diff --git a/resources/lang/vendor/log-viewer/uk.json b/lang/vendor/log-viewer/uk.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/uk.json rename to lang/vendor/log-viewer/uk.json diff --git a/resources/lang/vendor/log-viewer/zh-TW.json b/lang/vendor/log-viewer/zh-TW.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/zh-TW.json rename to lang/vendor/log-viewer/zh-TW.json diff --git a/resources/lang/vendor/log-viewer/zh.json b/lang/vendor/log-viewer/zh.json old mode 100644 new mode 100755 similarity index 100% rename from resources/lang/vendor/log-viewer/zh.json rename to lang/vendor/log-viewer/zh.json diff --git a/package-lock.json b/package-lock.json old mode 100644 new mode 100755 index 403047e..b7417ef --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "7.10.4" + "@babel/highlight": "^7.10.4" } }, "@babel/compat-data": { @@ -17,9 +17,9 @@ "integrity": "sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw==", "dev": true, "requires": { - "browserslist": "4.13.0", - "invariant": "2.2.4", - "semver": "5.7.1" + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" } }, "@babel/core": { @@ -28,22 +28,22 @@ "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", "dev": true, "requires": { - "@babel/code-frame": "7.10.4", - "@babel/generator": "7.10.5", - "@babel/helper-module-transforms": "7.10.5", - "@babel/helpers": "7.10.4", - "@babel/parser": "7.10.5", - "@babel/template": "7.10.4", - "@babel/traverse": "7.10.5", - "@babel/types": "7.10.5", - "convert-source-map": "1.7.0", - "debug": "4.1.1", - "gensync": "1.0.0-beta.1", - "json5": "2.1.3", - "lodash": "4.17.19", - "resolve": "1.17.0", - "semver": "5.7.1", - "source-map": "0.5.7" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.5", + "@babel/types": "^7.10.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" }, "dependencies": { "debug": { @@ -52,7 +52,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.1" } }, "ms": { @@ -69,9 +69,9 @@ "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "dev": true, "requires": { - "@babel/types": "7.10.5", - "jsesc": "2.5.2", - "source-map": "0.5.7" + "@babel/types": "^7.10.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { @@ -80,7 +80,7 @@ "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "dev": true, "requires": { - "@babel/types": "7.10.5" + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -89,8 +89,8 @@ "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "7.10.4", - "@babel/types": "7.10.5" + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-compilation-targets": { @@ -99,11 +99,11 @@ "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", "dev": true, "requires": { - "@babel/compat-data": "7.10.5", - "browserslist": "4.13.0", - "invariant": "2.2.4", - "levenary": "1.1.1", - "semver": "5.7.1" + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" } }, "@babel/helper-create-class-features-plugin": { @@ -112,12 +112,12 @@ "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", "dev": true, "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/helper-member-expression-to-functions": "7.10.5", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-replace-supers": "7.10.4", - "@babel/helper-split-export-declaration": "7.10.4" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" } }, "@babel/helper-create-regexp-features-plugin": { @@ -126,9 +126,9 @@ "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-regex": "7.10.5", - "regexpu-core": "4.7.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { @@ -137,9 +137,9 @@ "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "dev": true, "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/types": "7.10.5", - "lodash": "4.17.19" + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" } }, "@babel/helper-explode-assignable-expression": { @@ -148,8 +148,8 @@ "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", "dev": true, "requires": { - "@babel/traverse": "7.10.5", - "@babel/types": "7.10.5" + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-function-name": { @@ -158,9 +158,9 @@ "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.10.4", - "@babel/template": "7.10.4", - "@babel/types": "7.10.5" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { @@ -169,7 +169,7 @@ "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "7.10.5" + "@babel/types": "^7.10.4" } }, "@babel/helper-hoist-variables": { @@ -178,7 +178,7 @@ "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "dev": true, "requires": { - "@babel/types": "7.10.5" + "@babel/types": "^7.10.4" } }, "@babel/helper-member-expression-to-functions": { @@ -187,7 +187,7 @@ "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", "dev": true, "requires": { - "@babel/types": "7.10.5" + "@babel/types": "^7.10.5" } }, "@babel/helper-module-imports": { @@ -196,7 +196,7 @@ "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "dev": true, "requires": { - "@babel/types": "7.10.5" + "@babel/types": "^7.10.4" } }, "@babel/helper-module-transforms": { @@ -205,13 +205,13 @@ "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.10.4", - "@babel/helper-replace-supers": "7.10.4", - "@babel/helper-simple-access": "7.10.4", - "@babel/helper-split-export-declaration": "7.10.4", - "@babel/template": "7.10.4", - "@babel/types": "7.10.5", - "lodash": "4.17.19" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { @@ -220,7 +220,7 @@ "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "dev": true, "requires": { - "@babel/types": "7.10.5" + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { @@ -235,7 +235,7 @@ "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", "dev": true, "requires": { - "lodash": "4.17.19" + "lodash": "^4.17.19" } }, "@babel/helper-remap-async-to-generator": { @@ -244,11 +244,11 @@ "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-wrap-function": "7.10.4", - "@babel/template": "7.10.4", - "@babel/traverse": "7.10.5", - "@babel/types": "7.10.5" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-replace-supers": { @@ -257,10 +257,10 @@ "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "7.10.5", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/traverse": "7.10.5", - "@babel/types": "7.10.5" + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-simple-access": { @@ -269,8 +269,8 @@ "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "dev": true, "requires": { - "@babel/template": "7.10.4", - "@babel/types": "7.10.5" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { @@ -279,7 +279,7 @@ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "7.10.5" + "@babel/types": "^7.10.4" } }, "@babel/helper-validator-identifier": { @@ -294,10 +294,10 @@ "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", "dev": true, "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/template": "7.10.4", - "@babel/traverse": "7.10.5", - "@babel/types": "7.10.5" + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helpers": { @@ -306,9 +306,9 @@ "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "dev": true, "requires": { - "@babel/template": "7.10.4", - "@babel/traverse": "7.10.5", - "@babel/types": "7.10.5" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/highlight": { @@ -317,9 +317,9 @@ "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "7.10.4", - "chalk": "2.4.2", - "js-tokens": "4.0.0" + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, "@babel/parser": { @@ -334,9 +334,9 @@ "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-remap-async-to-generator": "7.10.4", - "@babel/plugin-syntax-async-generators": "7.8.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { @@ -345,8 +345,8 @@ "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "7.10.5", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-dynamic-import": { @@ -355,8 +355,8 @@ "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-dynamic-import": "7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, "@babel/plugin-proposal-json-strings": { @@ -365,8 +365,8 @@ "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-json-strings": "7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { @@ -375,8 +375,8 @@ "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, "@babel/plugin-proposal-numeric-separator": { @@ -385,8 +385,8 @@ "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-numeric-separator": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { @@ -395,9 +395,9 @@ "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@babel/plugin-transform-parameters": "7.10.5" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -406,8 +406,8 @@ "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, "@babel/plugin-proposal-optional-chaining": { @@ -416,8 +416,8 @@ "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-syntax-optional-chaining": "7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-private-methods": { @@ -426,8 +426,8 @@ "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "7.10.5", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-unicode-property-regex": { @@ -436,8 +436,8 @@ "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-async-generators": { @@ -446,7 +446,7 @@ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-class-properties": { @@ -455,7 +455,7 @@ "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-dynamic-import": { @@ -464,7 +464,7 @@ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-json-strings": { @@ -473,7 +473,7 @@ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-nullish-coalescing-operator": { @@ -482,7 +482,7 @@ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-numeric-separator": { @@ -491,7 +491,7 @@ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { @@ -500,7 +500,7 @@ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { @@ -509,7 +509,7 @@ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-chaining": { @@ -518,7 +518,7 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-top-level-await": { @@ -527,7 +527,7 @@ "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { @@ -536,7 +536,7 @@ "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { @@ -545,9 +545,9 @@ "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-remap-async-to-generator": "7.10.4" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" } }, "@babel/plugin-transform-block-scoped-functions": { @@ -556,7 +556,7 @@ "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { @@ -565,7 +565,7 @@ "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { @@ -574,14 +574,14 @@ "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-define-map": "7.10.5", - "@babel/helper-function-name": "7.10.4", - "@babel/helper-optimise-call-expression": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-replace-supers": "7.10.4", - "@babel/helper-split-export-declaration": "7.10.4", - "globals": "11.12.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { @@ -590,7 +590,7 @@ "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { @@ -599,7 +599,7 @@ "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { @@ -608,8 +608,8 @@ "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { @@ -618,7 +618,7 @@ "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { @@ -627,8 +627,8 @@ "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-for-of": { @@ -637,7 +637,7 @@ "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { @@ -646,8 +646,8 @@ "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", "dev": true, "requires": { - "@babel/helper-function-name": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-literals": { @@ -656,7 +656,7 @@ "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { @@ -665,7 +665,7 @@ "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { @@ -674,9 +674,9 @@ "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "7.10.5", - "@babel/helper-plugin-utils": "7.10.4", - "babel-plugin-dynamic-import-node": "2.3.3" + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { @@ -685,10 +685,10 @@ "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", "dev": true, "requires": { - "@babel/helper-module-transforms": "7.10.5", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-simple-access": "7.10.4", - "babel-plugin-dynamic-import-node": "2.3.3" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { @@ -697,10 +697,10 @@ "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "7.10.4", - "@babel/helper-module-transforms": "7.10.5", - "@babel/helper-plugin-utils": "7.10.4", - "babel-plugin-dynamic-import-node": "2.3.3" + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { @@ -709,8 +709,8 @@ "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "7.10.5", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { @@ -719,7 +719,7 @@ "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4" } }, "@babel/plugin-transform-new-target": { @@ -728,7 +728,7 @@ "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { @@ -737,8 +737,8 @@ "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-replace-supers": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" } }, "@babel/plugin-transform-parameters": { @@ -747,8 +747,8 @@ "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { @@ -757,7 +757,7 @@ "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { @@ -766,7 +766,7 @@ "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", "dev": true, "requires": { - "regenerator-transform": "0.14.5" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { @@ -775,7 +775,7 @@ "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-runtime": { @@ -784,10 +784,10 @@ "integrity": "sha512-tV4V/FjElJ9lQtyjr5xD2IFFbgY46r7EeVu5a8CpEKT5laheHKSlFeHjpkPppW3PqzGLAuv5k2qZX5LgVZIX5w==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4", - "resolve": "1.17.0", - "semver": "5.7.1" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" } }, "@babel/plugin-transform-shorthand-properties": { @@ -796,7 +796,7 @@ "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { @@ -805,7 +805,7 @@ "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-sticky-regex": { @@ -814,8 +814,8 @@ "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/helper-regex": "7.10.5" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { @@ -824,8 +824,8 @@ "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { @@ -834,7 +834,7 @@ "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-escapes": { @@ -843,7 +843,7 @@ "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { @@ -852,8 +852,8 @@ "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { @@ -862,70 +862,70 @@ "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", "dev": true, "requires": { - "@babel/compat-data": "7.10.5", - "@babel/helper-compilation-targets": "7.10.4", - "@babel/helper-module-imports": "7.10.4", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-async-generator-functions": "7.10.5", - "@babel/plugin-proposal-class-properties": "7.10.4", - "@babel/plugin-proposal-dynamic-import": "7.10.4", - "@babel/plugin-proposal-json-strings": "7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.10.4", - "@babel/plugin-proposal-numeric-separator": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.10.4", - "@babel/plugin-proposal-optional-catch-binding": "7.10.4", - "@babel/plugin-proposal-optional-chaining": "7.10.4", - "@babel/plugin-proposal-private-methods": "7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "7.10.4", - "@babel/plugin-syntax-async-generators": "7.8.4", - "@babel/plugin-syntax-class-properties": "7.10.4", - "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/plugin-syntax-json-strings": "7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3", - "@babel/plugin-syntax-numeric-separator": "7.10.4", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "7.8.3", - "@babel/plugin-syntax-optional-chaining": "7.8.3", - "@babel/plugin-syntax-top-level-await": "7.10.4", - "@babel/plugin-transform-arrow-functions": "7.10.4", - "@babel/plugin-transform-async-to-generator": "7.10.4", - "@babel/plugin-transform-block-scoped-functions": "7.10.4", - "@babel/plugin-transform-block-scoping": "7.10.5", - "@babel/plugin-transform-classes": "7.10.4", - "@babel/plugin-transform-computed-properties": "7.10.4", - "@babel/plugin-transform-destructuring": "7.10.4", - "@babel/plugin-transform-dotall-regex": "7.10.4", - "@babel/plugin-transform-duplicate-keys": "7.10.4", - "@babel/plugin-transform-exponentiation-operator": "7.10.4", - "@babel/plugin-transform-for-of": "7.10.4", - "@babel/plugin-transform-function-name": "7.10.4", - "@babel/plugin-transform-literals": "7.10.4", - "@babel/plugin-transform-member-expression-literals": "7.10.4", - "@babel/plugin-transform-modules-amd": "7.10.5", - "@babel/plugin-transform-modules-commonjs": "7.10.4", - "@babel/plugin-transform-modules-systemjs": "7.10.5", - "@babel/plugin-transform-modules-umd": "7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "7.10.4", - "@babel/plugin-transform-new-target": "7.10.4", - "@babel/plugin-transform-object-super": "7.10.4", - "@babel/plugin-transform-parameters": "7.10.5", - "@babel/plugin-transform-property-literals": "7.10.4", - "@babel/plugin-transform-regenerator": "7.10.4", - "@babel/plugin-transform-reserved-words": "7.10.4", - "@babel/plugin-transform-shorthand-properties": "7.10.4", - "@babel/plugin-transform-spread": "7.10.4", - "@babel/plugin-transform-sticky-regex": "7.10.4", - "@babel/plugin-transform-template-literals": "7.10.5", - "@babel/plugin-transform-typeof-symbol": "7.10.4", - "@babel/plugin-transform-unicode-escapes": "7.10.4", - "@babel/plugin-transform-unicode-regex": "7.10.4", - "@babel/preset-modules": "0.1.3", - "@babel/types": "7.10.5", - "browserslist": "4.13.0", - "core-js-compat": "3.6.5", - "invariant": "2.2.4", - "levenary": "1.1.1", - "semver": "5.7.1" + "@babel/compat-data": "^7.10.4", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.10.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.10.4", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.10.4", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.10.4", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" } }, "@babel/preset-modules": { @@ -934,11 +934,11 @@ "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "7.10.4", - "@babel/plugin-transform-dotall-regex": "7.10.4", - "@babel/types": "7.10.5", - "esutils": "2.0.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" } }, "@babel/runtime": { @@ -947,7 +947,7 @@ "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", "dev": true, "requires": { - "regenerator-runtime": "0.13.5" + "regenerator-runtime": "^0.13.4" } }, "@babel/template": { @@ -956,9 +956,9 @@ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "7.10.4", - "@babel/parser": "7.10.5", - "@babel/types": "7.10.5" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { @@ -967,15 +967,15 @@ "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", "dev": true, "requires": { - "@babel/code-frame": "7.10.4", - "@babel/generator": "7.10.5", - "@babel/helper-function-name": "7.10.4", - "@babel/helper-split-export-declaration": "7.10.4", - "@babel/parser": "7.10.5", - "@babel/types": "7.10.5", - "debug": "4.1.1", - "globals": "11.12.0", - "lodash": "4.17.19" + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" }, "dependencies": { "debug": { @@ -984,7 +984,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.1" } }, "ms": { @@ -1001,9 +1001,9 @@ "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "7.10.4", - "lodash": "4.17.19", - "to-fast-properties": "2.0.0" + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" } }, "@fullcalendar/core": { @@ -1026,7 +1026,7 @@ "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-4.4.2.tgz", "integrity": "sha512-M5an7qii8OUmI4ogY47k5pn2j/qUbLp6sa6Vo0gO182HR5pb9YtrEZnoQhnScok+I0BkDkLFzMQoiAMTjBm2PQ==", "requires": { - "@fullcalendar/daygrid": "4.4.2" + "@fullcalendar/daygrid": "~4.4.0" } }, "@fullcalendar/timeline": { @@ -1040,8 +1040,8 @@ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, "requires": { - "call-me-maybe": "1.0.1", - "glob-to-regexp": "0.3.0" + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" } }, "@nodelib/fs.stat": { @@ -1056,8 +1056,8 @@ "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "requires": { - "@types/minimatch": "3.0.3", - "@types/node": "14.0.23" + "@types/minimatch": "*", + "@types/node": "*" } }, "@types/json-schema": { @@ -1090,15 +1090,15 @@ "integrity": "sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug==", "dev": true, "requires": { - "consolidate": "0.15.1", - "hash-sum": "1.0.2", - "lru-cache": "4.1.5", - "merge-source-map": "1.1.0", - "postcss": "7.0.32", - "postcss-selector-parser": "6.0.2", - "prettier": "1.19.1", - "source-map": "0.6.1", - "vue-template-es2015-compiler": "1.9.1" + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" }, "dependencies": { "lru-cache": { @@ -1107,8 +1107,8 @@ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "source-map": { @@ -1202,7 +1202,7 @@ "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { @@ -1318,7 +1318,7 @@ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "2.1.27", + "mime-types": "~2.1.24", "negotiator": "0.6.2" } }, @@ -1334,13 +1334,13 @@ "integrity": "sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ==", "dev": true, "requires": { - "assert": "1.5.0", - "camelcase": "1.2.1", - "loader-utils": "1.4.0", - "lodash.assign": "4.2.0", - "lodash.defaults": "3.1.2", - "object-path": "0.9.2", - "regex-parser": "2.2.10" + "assert": "^1.3.0", + "camelcase": "^1.2.1", + "loader-utils": "^1.1.0", + "lodash.assign": "^4.0.1", + "lodash.defaults": "^3.1.2", + "object-path": "^0.9.2", + "regex-parser": "^2.2.9" }, "dependencies": { "camelcase": { @@ -1355,8 +1355,8 @@ "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", "dev": true, "requires": { - "lodash.assign": "3.2.0", - "lodash.restparam": "3.6.1" + "lodash.assign": "^3.0.0", + "lodash.restparam": "^3.0.0" }, "dependencies": { "lodash.assign": { @@ -1365,9 +1365,9 @@ "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", "dev": true, "requires": { - "lodash._baseassign": "3.2.0", - "lodash._createassigner": "3.1.1", - "lodash.keys": "3.1.2" + "lodash._baseassign": "^3.0.0", + "lodash._createassigner": "^3.0.0", + "lodash.keys": "^3.0.0" } } } @@ -1380,8 +1380,8 @@ "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", "dev": true, "requires": { - "clean-stack": "2.2.0", - "indent-string": "4.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, "ajv": { @@ -1390,10 +1390,10 @@ "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "dev": true, "requires": { - "fast-deep-equal": "3.1.3", - "fast-json-stable-stringify": "2.1.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-errors": { @@ -1438,7 +1438,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -1447,8 +1447,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" }, "dependencies": { "normalize-path": { @@ -1457,7 +1457,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } } } @@ -1474,7 +1474,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -1507,7 +1507,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -1534,9 +1534,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.9", - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" }, "dependencies": { "bn.js": { @@ -1553,7 +1553,7 @@ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { - "object-assign": "4.1.1", + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -1592,7 +1592,7 @@ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { - "lodash": "4.17.19" + "lodash": "^4.17.14" } }, "async-each": { @@ -1619,13 +1619,13 @@ "integrity": "sha512-C2p5KkumJlsTHoNv9w31NrBRgXhf6eCMteJuHZi2xhkgC+5Vm40MEtCKPhc0qdgAOhox0YPy1SQHTAky05UoKg==", "dev": true, "requires": { - "browserslist": "4.13.0", - "caniuse-lite": "1.0.30001102", - "colorette": "1.2.1", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "7.0.32", - "postcss-value-parser": "4.1.0" + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001097", + "colorette": "^1.2.0", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" } }, "axios": { @@ -1651,9 +1651,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.3", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { "ansi-styles": { @@ -1668,11 +1668,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "js-tokens": { @@ -1695,11 +1695,11 @@ "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "dev": true, "requires": { - "find-cache-dir": "2.1.0", - "loader-utils": "1.4.0", - "mkdirp": "0.5.5", - "pify": "4.0.1", - "schema-utils": "2.7.0" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" } }, "babel-merge": { @@ -1708,9 +1708,9 @@ "integrity": "sha512-puTQQxuzS+0JlMyVdfsTVaCgzqjBXKPMv7oUANpYcHFY+7IptWZ4PZDYX+qBxrRMtrriuBA44LkKpS99EJzqVA==", "dev": true, "requires": { - "@babel/core": "7.10.5", - "deepmerge": "2.2.1", - "object.omit": "3.0.0" + "@babel/core": "^7.0.0-beta.49", + "deepmerge": "^2.1.0", + "object.omit": "^3.0.0" } }, "babel-plugin-dynamic-import-node": { @@ -1719,7 +1719,7 @@ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { - "object.assign": "4.1.0" + "object.assign": "^4.1.0" } }, "balanced-match": { @@ -1734,13 +1734,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.3.0", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.2", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -1749,7 +1749,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -1758,7 +1758,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.3" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1767,7 +1767,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.3" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1776,9 +1776,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1836,15 +1836,15 @@ "dev": true, "requires": { "bytes": "3.1.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", + "depd": "~1.1.2", "http-errors": "1.7.2", "iconv-lite": "0.4.24", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.7.0", "raw-body": "2.4.0", - "type-is": "1.6.18" + "type-is": "~1.6.17" }, "dependencies": { "bytes": { @@ -1870,12 +1870,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.2", - "deep-equal": "1.1.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "boolbase": { @@ -1896,7 +1896,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1906,16 +1906,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -1924,7 +1924,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -1947,12 +1947,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -1961,9 +1961,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -1972,10 +1972,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.1", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -1984,8 +1984,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.9", - "randombytes": "2.1.0" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" }, "dependencies": { "bn.js": { @@ -2002,15 +2002,15 @@ "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", "dev": true, "requires": { - "bn.js": "5.1.2", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.5.3", - "inherits": "2.0.4", - "parse-asn1": "5.1.5", - "readable-stream": "3.6.0", - "safe-buffer": "5.2.1" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "dependencies": { "readable-stream": { @@ -2019,9 +2019,9 @@ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "inherits": "2.0.4", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "safe-buffer": { @@ -2038,7 +2038,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.11" + "pako": "~1.0.5" } }, "browserslist": { @@ -2047,10 +2047,10 @@ "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", "dev": true, "requires": { - "caniuse-lite": "1.0.30001102", - "electron-to-chromium": "1.3.499", - "escalade": "3.0.2", - "node-releases": "1.1.59" + "caniuse-lite": "^1.0.30001093", + "electron-to-chromium": "^1.3.488", + "escalade": "^3.0.1", + "node-releases": "^1.1.58" } }, "buffer": { @@ -2059,9 +2059,9 @@ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { - "base64-js": "1.3.1", - "ieee754": "1.1.13", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -2100,24 +2100,24 @@ "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", "dev": true, "requires": { - "chownr": "1.1.4", - "figgy-pudding": "3.5.2", - "fs-minipass": "2.1.0", - "glob": "7.1.6", - "graceful-fs": "4.2.4", - "infer-owner": "1.0.4", - "lru-cache": "5.1.1", - "minipass": "3.1.3", - "minipass-collect": "1.0.2", - "minipass-flush": "1.0.5", - "minipass-pipeline": "1.2.3", - "mkdirp": "0.5.5", - "move-concurrently": "1.0.1", - "p-map": "3.0.0", - "promise-inflight": "1.0.1", - "rimraf": "2.7.1", - "ssri": "7.1.0", - "unique-filename": "1.1.1" + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" } }, "cache-base": { @@ -2126,15 +2126,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.3.0", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.1", - "to-object-path": "0.3.0", - "union-value": "1.0.1", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "call-me-maybe": { @@ -2149,7 +2149,7 @@ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { - "callsites": "2.0.0" + "callsites": "^2.0.0" } }, "caller-path": { @@ -2158,7 +2158,7 @@ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { - "caller-callsite": "2.0.0" + "caller-callsite": "^2.0.0" } }, "callsites": { @@ -2173,8 +2173,8 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { @@ -2189,10 +2189,10 @@ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "requires": { - "browserslist": "4.13.0", - "caniuse-lite": "1.0.30001102", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "caniuse-lite": { @@ -2207,9 +2207,9 @@ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "charenc": { @@ -2223,8 +2223,8 @@ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.3.tgz", "integrity": "sha512-+2jlOobSk52c1VU6fzkh3UwqHMdSlgH1xFv9FKMqHiNCpXsGPQa/+81AFa+i3jZ253Mq9aAycPwDjnn1XbRNNw==", "requires": { - "chartjs-color": "2.4.1", - "moment": "2.27.0" + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" } }, "chartjs-color": { @@ -2232,8 +2232,8 @@ "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", "requires": { - "chartjs-color-string": "0.6.0", - "color-convert": "1.9.3" + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" } }, "chartjs-color-string": { @@ -2241,7 +2241,7 @@ "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", "requires": { - "color-name": "1.1.4" + "color-name": "^1.0.0" } }, "chokidar": { @@ -2250,18 +2250,18 @@ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.3", - "braces": "2.3.2", - "fsevents": "1.2.13", - "glob-parent": "3.1.0", - "inherits": "2.0.4", - "is-binary-path": "1.0.1", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.2.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, "chownr": { @@ -2276,7 +2276,7 @@ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, "requires": { - "tslib": "1.13.0" + "tslib": "^1.9.0" } }, "cipher-base": { @@ -2285,8 +2285,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "class-utils": { @@ -2295,10 +2295,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -2307,7 +2307,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -2318,7 +2318,7 @@ "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "~0.6.0" }, "dependencies": { "source-map": { @@ -2341,9 +2341,9 @@ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "3.1.0", - "strip-ansi": "5.2.0", - "wrap-ansi": "5.1.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { @@ -2358,9 +2358,9 @@ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, "strip-ansi": { @@ -2369,7 +2369,7 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "4.1.0" + "ansi-regex": "^4.1.0" } } } @@ -2380,9 +2380,9 @@ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "is-plain-object": "2.0.4", - "kind-of": "6.0.3", - "shallow-clone": "3.0.1" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "coa": { @@ -2391,9 +2391,9 @@ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, "requires": { - "@types/q": "1.5.4", - "chalk": "2.4.2", - "q": "1.5.1" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" } }, "code-point-at": { @@ -2414,8 +2414,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -2424,8 +2424,8 @@ "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", "dev": true, "requires": { - "color-convert": "1.9.3", - "color-string": "1.5.3" + "color-convert": "^1.9.1", + "color-string": "^1.5.2" } }, "color-convert": { @@ -2454,8 +2454,8 @@ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", "dev": true, "requires": { - "color-name": "1.1.4", - "simple-swizzle": "0.2.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "colorette": { @@ -2488,7 +2488,7 @@ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": ">= 1.43.0 < 2" } }, "compression": { @@ -2497,13 +2497,13 @@ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { - "accepts": "1.3.7", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.18", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "1.0.2", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "debug": { @@ -2529,10 +2529,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "concatenate": { @@ -2541,7 +2541,7 @@ "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=", "dev": true, "requires": { - "globs": "0.1.4" + "globs": "^0.1.2" } }, "connect-history-api-fallback": { @@ -2562,7 +2562,7 @@ "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", "dev": true, "requires": { - "bluebird": "3.7.2" + "bluebird": "^3.1.1" } }, "constants-browserify": { @@ -2592,7 +2592,7 @@ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.1" } }, "cookie": { @@ -2613,12 +2613,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.5", - "rimraf": "2.7.1", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -2633,7 +2633,7 @@ "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", "dev": true, "requires": { - "browserslist": "4.13.0", + "browserslist": "^4.8.5", "semver": "7.0.0" }, "dependencies": { @@ -2657,10 +2657,10 @@ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "requires": { - "import-fresh": "2.0.0", - "is-directory": "0.3.1", - "js-yaml": "3.14.0", - "parse-json": "4.0.0" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" } }, "create-ecdh": { @@ -2669,8 +2669,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.9", - "elliptic": "6.5.3" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" }, "dependencies": { "bn.js": { @@ -2687,11 +2687,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.4", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -2700,12 +2700,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.4", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-env": { @@ -2714,7 +2714,7 @@ "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", "dev": true, "requires": { - "cross-spawn": "7.0.3" + "cross-spawn": "^7.0.1" } }, "cross-spawn": { @@ -2723,9 +2723,9 @@ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "path-key": "3.1.1", - "shebang-command": "2.0.0", - "which": "2.0.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, "crypt": { @@ -2740,17 +2740,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.2.0", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.4", - "pbkdf2": "3.1.1", - "public-encrypt": "4.0.3", - "randombytes": "2.1.0", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css": { @@ -2759,10 +2759,10 @@ "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, "requires": { - "inherits": "2.0.4", - "source-map": "0.6.1", - "source-map-resolve": "0.5.3", - "urix": "0.1.0" + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" }, "dependencies": { "source-map": { @@ -2785,8 +2785,8 @@ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", "dev": true, "requires": { - "postcss": "7.0.32", - "timsort": "0.3.0" + "postcss": "^7.0.1", + "timsort": "^0.3.0" } }, "css-loader": { @@ -2795,18 +2795,18 @@ "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.2", - "icss-utils": "2.1.0", - "loader-utils": "1.4.0", - "lodash": "4.17.19", - "postcss": "6.0.23", - "postcss-modules-extract-imports": "1.2.1", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.1", - "source-list-map": "2.0.1" + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash": "^4.17.11", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" }, "dependencies": { "postcss": { @@ -2815,9 +2815,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "postcss-value-parser": { @@ -2840,10 +2840,10 @@ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "3.3.0", - "domutils": "1.7.0", - "nth-check": "1.0.2" + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, "css-select-base-adapter": { @@ -2858,9 +2858,9 @@ "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", "dev": true, "requires": { - "cssesc": "3.0.0", - "fastparse": "1.1.2", - "regexpu-core": "4.7.0" + "cssesc": "^3.0.0", + "fastparse": "^1.1.2", + "regexpu-core": "^4.6.0" } }, "css-tree": { @@ -2870,7 +2870,7 @@ "dev": true, "requires": { "mdn-data": "2.0.4", - "source-map": "0.6.1" + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -2899,10 +2899,10 @@ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", "dev": true, "requires": { - "cosmiconfig": "5.2.1", - "cssnano-preset-default": "4.0.7", - "is-resolvable": "1.1.0", - "postcss": "7.0.32" + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" } }, "cssnano-preset-default": { @@ -2911,36 +2911,36 @@ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", "dev": true, "requires": { - "css-declaration-sorter": "4.0.1", - "cssnano-util-raw-cache": "4.0.1", - "postcss": "7.0.32", - "postcss-calc": "7.0.2", - "postcss-colormin": "4.0.3", - "postcss-convert-values": "4.0.1", - "postcss-discard-comments": "4.0.2", - "postcss-discard-duplicates": "4.0.2", - "postcss-discard-empty": "4.0.1", - "postcss-discard-overridden": "4.0.1", - "postcss-merge-longhand": "4.0.11", - "postcss-merge-rules": "4.0.3", - "postcss-minify-font-values": "4.0.2", - "postcss-minify-gradients": "4.0.2", - "postcss-minify-params": "4.0.2", - "postcss-minify-selectors": "4.0.2", - "postcss-normalize-charset": "4.0.1", - "postcss-normalize-display-values": "4.0.2", - "postcss-normalize-positions": "4.0.2", - "postcss-normalize-repeat-style": "4.0.2", - "postcss-normalize-string": "4.0.2", - "postcss-normalize-timing-functions": "4.0.2", - "postcss-normalize-unicode": "4.0.1", - "postcss-normalize-url": "4.0.1", - "postcss-normalize-whitespace": "4.0.2", - "postcss-ordered-values": "4.1.2", - "postcss-reduce-initial": "4.0.3", - "postcss-reduce-transforms": "4.0.2", - "postcss-svgo": "4.0.2", - "postcss-unique-selectors": "4.0.1" + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" } }, "cssnano-util-get-arguments": { @@ -2961,7 +2961,7 @@ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", "dev": true, "requires": { - "postcss": "7.0.32" + "postcss": "^7.0.0" } }, "cssnano-util-same-parent": { @@ -2986,7 +2986,7 @@ "dev": true, "requires": { "mdn-data": "2.0.6", - "source-map": "0.6.1" + "source-map": "^0.6.1" } }, "mdn-data": { @@ -3042,12 +3042,12 @@ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, "requires": { - "is-arguments": "1.0.4", - "is-date-object": "1.0.2", - "is-regex": "1.1.0", - "object-is": "1.1.2", - "object-keys": "1.1.1", - "regexp.prototype.flags": "1.3.0" + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" } }, "deepmerge": { @@ -3062,8 +3062,8 @@ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, "requires": { - "execa": "1.0.0", - "ip-regex": "2.1.0" + "execa": "^1.0.0", + "ip-regex": "^2.1.0" } }, "define-properties": { @@ -3072,7 +3072,7 @@ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "object-keys": "1.1.1" + "object-keys": "^1.0.12" } }, "define-property": { @@ -3081,8 +3081,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -3091,7 +3091,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.3" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3100,7 +3100,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.3" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3109,9 +3109,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -3122,13 +3122,13 @@ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "@types/glob": "7.1.3", - "globby": "6.1.0", - "is-path-cwd": "2.2.0", - "is-path-in-cwd": "2.1.0", - "p-map": "2.1.0", - "pify": "4.0.1", - "rimraf": "2.7.1" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { "globby": { @@ -3137,11 +3137,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.6", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -3172,8 +3172,8 @@ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -3200,9 +3200,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.9", - "miller-rabin": "4.0.1", - "randombytes": "2.1.0" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" }, "dependencies": { "bn.js": { @@ -3219,8 +3219,8 @@ "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "dev": true, "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" + "arrify": "^1.0.1", + "path-type": "^3.0.0" } }, "dns-equal": { @@ -3235,8 +3235,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -3245,7 +3245,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "dom-serializer": { @@ -3254,8 +3254,8 @@ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { - "domelementtype": "2.0.1", - "entities": "2.0.3" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" }, "dependencies": { "domelementtype": { @@ -3284,8 +3284,8 @@ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { - "dom-serializer": "0.2.2", - "domelementtype": "1.3.1" + "dom-serializer": "0", + "domelementtype": "1" } }, "dot-prop": { @@ -3294,7 +3294,7 @@ "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", "dev": true, "requires": { - "is-obj": "2.0.0" + "is-obj": "^2.0.0" } }, "dotenv": { @@ -3315,10 +3315,10 @@ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { - "end-of-stream": "1.4.4", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "stream-shift": "1.0.1" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ee-first": { @@ -3339,13 +3339,13 @@ "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { - "bn.js": "4.11.9", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" }, "dependencies": { "bn.js": { @@ -3386,7 +3386,7 @@ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -3395,9 +3395,9 @@ "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "dev": true, "requires": { - "graceful-fs": "4.2.4", - "memory-fs": "0.5.0", - "tapable": "1.1.3" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" }, "dependencies": { "memory-fs": { @@ -3406,8 +3406,8 @@ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.7" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } } } @@ -3424,7 +3424,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { @@ -3433,7 +3433,7 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "error-stack-parser": { @@ -3442,7 +3442,7 @@ "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", "dev": true, "requires": { - "stackframe": "1.2.0" + "stackframe": "^1.1.1" } }, "es-abstract": { @@ -3451,17 +3451,17 @@ "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", "dev": true, "requires": { - "es-to-primitive": "1.2.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "has-symbols": "1.0.1", - "is-callable": "1.2.0", - "is-regex": "1.1.0", - "object-inspect": "1.8.0", - "object-keys": "1.1.1", - "object.assign": "4.1.0", - "string.prototype.trimend": "1.0.1", - "string.prototype.trimstart": "1.0.1" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, "es-to-primitive": { @@ -3470,9 +3470,9 @@ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "is-callable": "1.2.0", - "is-date-object": "1.0.2", - "is-symbol": "1.0.3" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "es6-templates": { @@ -3481,8 +3481,8 @@ "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", "dev": true, "requires": { - "recast": "0.11.23", - "through": "2.3.8" + "recast": "~0.11.12", + "through": "~2.3.6" } }, "escalade": { @@ -3509,8 +3509,8 @@ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.3.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esprima": { @@ -3525,7 +3525,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.3.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -3564,7 +3564,7 @@ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "1.0.2" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -3573,8 +3573,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -3583,13 +3583,13 @@ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.3", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { @@ -3598,11 +3598,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.7.1", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "path-key": { @@ -3617,7 +3617,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -3632,7 +3632,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -3643,13 +3643,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "debug": { @@ -3667,7 +3667,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -3676,7 +3676,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -3693,7 +3693,7 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.3" + "homedir-polyfill": "^1.0.1" } }, "express": { @@ -3702,36 +3702,36 @@ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { - "accepts": "1.3.7", + "accepts": "~1.3.7", "array-flatten": "1.1.1", "body-parser": "1.19.0", "content-disposition": "0.5.3", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.2", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.3", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.6", + "proxy-addr": "~2.0.5", "qs": "6.7.0", - "range-parser": "1.2.1", + "range-parser": "~1.2.1", "safe-buffer": "5.1.2", "send": "0.17.1", "serve-static": "1.14.1", "setprototypeof": "1.1.1", - "statuses": "1.5.0", - "type-is": "1.6.18", + "statuses": "~1.5.0", + "type-is": "~1.6.18", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "array-flatten": { @@ -3757,8 +3757,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "extglob": { @@ -3767,14 +3767,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -3783,7 +3783,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -3792,7 +3792,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -3801,7 +3801,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.3" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3810,7 +3810,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.3" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3819,9 +3819,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-extendable": { @@ -3838,10 +3838,10 @@ "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==", "dev": true, "requires": { - "async": "2.6.3", - "loader-utils": "1.4.0", - "schema-utils": "0.4.7", - "webpack-sources": "1.4.3" + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5", + "webpack-sources": "^1.1.0" }, "dependencies": { "schema-utils": { @@ -3850,8 +3850,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "6.12.3", - "ajv-keywords": "3.5.1" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } } } @@ -3868,12 +3868,12 @@ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "2.2.1", - "@nodelib/fs.stat": "1.1.3", - "glob-parent": "3.1.0", - "is-glob": "4.0.1", - "merge2": "1.4.1", - "micromatch": "3.1.10" + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" } }, "fast-json-stable-stringify": { @@ -3894,7 +3894,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.6.5" + "websocket-driver": ">=0.5.1" } }, "figgy-pudding": { @@ -3909,8 +3909,8 @@ "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", "dev": true, "requires": { - "loader-utils": "1.4.0", - "schema-utils": "1.0.0" + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" }, "dependencies": { "schema-utils": { @@ -3919,9 +3919,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.12.3", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.1" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } @@ -3945,10 +3945,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -3957,7 +3957,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -3975,12 +3975,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.3", - "statuses": "1.5.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "dependencies": { "debug": { @@ -4000,9 +4000,9 @@ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "2.1.0", - "pkg-dir": "3.0.0" + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { @@ -4011,7 +4011,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "findup-sync": { @@ -4020,10 +4020,10 @@ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { - "detect-file": "1.0.0", - "is-glob": "4.0.1", - "micromatch": "3.1.10", - "resolve-dir": "1.0.1" + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" } }, "flatpickr": { @@ -4037,8 +4037,8 @@ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "follow-redirects": { @@ -4047,7 +4047,7 @@ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "=3.1.0" } }, "for-in": { @@ -4068,7 +4068,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -4083,9 +4083,9 @@ "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", "dev": true, "requires": { - "chalk": "1.1.3", - "error-stack-parser": "2.0.6", - "string-width": "2.1.1" + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" }, "dependencies": { "ansi-styles": { @@ -4100,11 +4100,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -4121,8 +4121,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-extra": { @@ -4131,9 +4131,9 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "graceful-fs": "4.2.4", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-minipass": { @@ -4142,7 +4142,7 @@ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { - "minipass": "3.1.3" + "minipass": "^3.0.0" } }, "fs-write-stream-atomic": { @@ -4151,10 +4151,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.2.4", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.7" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -4170,8 +4170,8 @@ "dev": true, "optional": true, "requires": { - "bindings": "1.5.0", - "nan": "2.14.1" + "bindings": "^1.5.0", + "nan": "^2.12.1" } }, "function-bind": { @@ -4198,7 +4198,7 @@ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { - "pump": "3.0.0" + "pump": "^3.0.0" } }, "get-value": { @@ -4213,12 +4213,12 @@ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.4", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -4227,8 +4227,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -4237,7 +4237,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -4254,7 +4254,7 @@ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "requires": { - "global-prefix": "3.0.0" + "global-prefix": "^3.0.0" }, "dependencies": { "global-prefix": { @@ -4263,9 +4263,9 @@ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "requires": { - "ini": "1.3.5", - "kind-of": "6.0.3", - "which": "1.3.1" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" } }, "which": { @@ -4274,7 +4274,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -4285,11 +4285,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.3", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.1" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" }, "dependencies": { "which": { @@ -4298,7 +4298,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -4315,13 +4315,13 @@ "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", "dev": true, "requires": { - "array-union": "1.0.2", + "array-union": "^1.0.1", "dir-glob": "2.0.0", - "fast-glob": "2.2.7", - "glob": "7.1.6", - "ignore": "3.3.10", - "pify": "3.0.0", - "slash": "1.0.0" + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" }, "dependencies": { "pify": { @@ -4338,7 +4338,7 @@ "integrity": "sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ==", "dev": true, "requires": { - "glob": "7.1.6" + "glob": "^7.1.1" } }, "graceful-fs": { @@ -4365,7 +4365,7 @@ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -4374,7 +4374,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -4395,9 +4395,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -4406,8 +4406,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -4416,7 +4416,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4427,9 +4427,9 @@ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "2.0.4", - "readable-stream": "3.6.0", - "safe-buffer": "5.2.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "dependencies": { "readable-stream": { @@ -4438,9 +4438,9 @@ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "inherits": "2.0.4", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "safe-buffer": { @@ -4463,8 +4463,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "2.0.4", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "he": { @@ -4485,9 +4485,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "homedir-polyfill": { @@ -4496,7 +4496,7 @@ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hpack.js": { @@ -4505,10 +4505,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.4", - "obuf": "1.1.2", - "readable-stream": "2.3.7", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "hsl-regex": { @@ -4541,11 +4541,11 @@ "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", "dev": true, "requires": { - "es6-templates": "0.2.3", - "fastparse": "1.1.2", - "html-minifier": "3.5.21", - "loader-utils": "1.4.0", - "object-assign": "4.1.1" + "es6-templates": "^0.2.3", + "fastparse": "^1.1.1", + "html-minifier": "^3.5.8", + "loader-utils": "^1.1.0", + "object-assign": "^4.1.1" } }, "html-minifier": { @@ -4554,13 +4554,13 @@ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", "dev": true, "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.3", - "commander": "2.17.1", - "he": "1.2.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.10" + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" } }, "http-deceiver": { @@ -4575,10 +4575,10 @@ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.1", - "statuses": "1.5.0", + "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" }, "dependencies": { @@ -4596,9 +4596,9 @@ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { - "eventemitter3": "4.0.4", - "follow-redirects": "1.5.10", - "requires-port": "1.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { @@ -4607,10 +4607,10 @@ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "requires": { - "http-proxy": "1.18.1", - "is-glob": "4.0.1", - "lodash": "4.17.19", - "micromatch": "3.1.10" + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, "https-browserify": { @@ -4625,7 +4625,7 @@ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "icss-replace-symbols": { @@ -4640,7 +4640,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -4649,9 +4649,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -4686,12 +4686,12 @@ "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", "dev": true, "requires": { - "file-type": "10.11.0", - "globby": "8.0.2", - "make-dir": "1.3.0", - "p-pipe": "1.2.0", - "pify": "4.0.1", - "replace-ext": "1.0.1" + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" }, "dependencies": { "make-dir": { @@ -4700,7 +4700,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -4719,7 +4719,7 @@ "integrity": "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==", "dev": true, "requires": { - "loader-utils": "1.4.0" + "loader-utils": "^1.1.0" } }, "import-cwd": { @@ -4728,7 +4728,7 @@ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "import-from": "2.1.0" + "import-from": "^2.1.0" } }, "import-fresh": { @@ -4737,8 +4737,8 @@ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "caller-path": "2.0.0", - "resolve-from": "3.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, "import-from": { @@ -4747,7 +4747,7 @@ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "import-local": { @@ -4756,8 +4756,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, "imurmurhash": { @@ -4790,8 +4790,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4812,8 +4812,8 @@ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "requires": { - "default-gateway": "4.2.0", - "ipaddr.js": "1.9.1" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, "interpret": { @@ -4828,7 +4828,7 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "1.4.0" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -4867,7 +4867,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4876,7 +4876,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4899,7 +4899,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.13.1" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -4920,12 +4920,12 @@ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "requires": { - "css-color-names": "0.0.4", - "hex-color-regex": "1.1.0", - "hsl-regex": "1.0.0", - "hsla-regex": "1.0.0", - "rgb-regex": "1.0.1", - "rgba-regex": "1.0.0" + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" } }, "is-data-descriptor": { @@ -4934,7 +4934,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4943,7 +4943,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4960,9 +4960,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -4985,7 +4985,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } }, "is-extglob": { @@ -5006,7 +5006,7 @@ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -5015,7 +5015,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5024,7 +5024,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5047,7 +5047,7 @@ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "is-path-inside": "2.1.0" + "is-path-inside": "^2.1.0" } }, "is-path-inside": { @@ -5056,7 +5056,7 @@ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.2" } }, "is-plain-object": { @@ -5065,7 +5065,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-regex": { @@ -5074,7 +5074,7 @@ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", "dev": true, "requires": { - "has-symbols": "1.0.1" + "has-symbols": "^1.0.1" } }, "is-resolvable": { @@ -5095,7 +5095,7 @@ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", "dev": true, "requires": { - "html-comment-regex": "1.1.2" + "html-comment-regex": "^1.1.0" } }, "is-symbol": { @@ -5104,7 +5104,7 @@ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "has-symbols": "1.0.1" + "has-symbols": "^1.0.1" } }, "is-windows": { @@ -5143,8 +5143,8 @@ "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", "dev": true, "requires": { - "merge-stream": "2.0.0", - "supports-color": "7.1.0" + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" }, "dependencies": { "has-flag": { @@ -5159,7 +5159,7 @@ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "has-flag": "4.0.0" + "has-flag": "^4.0.0" } } } @@ -5182,8 +5182,8 @@ "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { "esprima": { @@ -5224,7 +5224,7 @@ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "minimist": "1.2.5" + "minimist": "^1.2.5" } }, "jsonfile": { @@ -5233,7 +5233,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "4.2.4" + "graceful-fs": "^4.1.6" } }, "killable": { @@ -5254,44 +5254,44 @@ "integrity": "sha512-/fkcMdlxhGDBcH+kFDqKONlAfhJinMAWd+fjQ+VLii4UzIeXUF5Q8FbS4+ZrZs9JO3Y1E4KoNq3hMw0t/soahA==", "dev": true, "requires": { - "@babel/core": "7.10.5", - "@babel/plugin-proposal-object-rest-spread": "7.10.4", - "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/plugin-transform-runtime": "7.10.5", - "@babel/preset-env": "7.10.4", - "@babel/runtime": "7.10.5", - "autoprefixer": "9.8.5", - "babel-loader": "8.1.0", - "babel-merge": "2.0.1", - "chokidar": "2.1.8", - "clean-css": "4.2.3", - "collect.js": "4.28.0", + "@babel/core": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-transform-runtime": "^7.2.0", + "@babel/preset-env": "^7.2.0", + "@babel/runtime": "^7.2.0", + "autoprefixer": "^9.4.2", + "babel-loader": "^8.0.4", + "babel-merge": "^2.0.1", + "chokidar": "^2.0.3", + "clean-css": "^4.1.3", + "collect.js": "^4.12.8", "concatenate": "0.0.2", - "css-loader": "1.0.1", - "dotenv": "6.2.0", - "dotenv-expand": "4.2.0", - "extract-text-webpack-plugin": "4.0.0-beta.0", - "file-loader": "2.0.0", - "friendly-errors-webpack-plugin": "1.7.0", - "fs-extra": "7.0.1", - "glob": "7.1.6", - "html-loader": "0.5.5", - "imagemin": "6.1.0", - "img-loader": "3.0.1", - "lodash": "4.17.19", - "md5": "2.2.1", - "optimize-css-assets-webpack-plugin": "5.0.3", - "postcss-loader": "3.0.0", - "style-loader": "0.23.1", - "terser": "3.17.0", - "terser-webpack-plugin": "2.3.7", - "vue-loader": "15.9.3", - "webpack": "4.43.0", - "webpack-cli": "3.3.12", - "webpack-dev-server": "3.11.0", - "webpack-merge": "4.2.2", - "webpack-notifier": "1.8.0", - "yargs": "12.0.5" + "css-loader": "^1.0.1", + "dotenv": "^6.2.0", + "dotenv-expand": "^4.2.0", + "extract-text-webpack-plugin": "v4.0.0-beta.0", + "file-loader": "^2.0.0", + "friendly-errors-webpack-plugin": "^1.6.1", + "fs-extra": "^7.0.1", + "glob": "^7.1.2", + "html-loader": "^0.5.5", + "imagemin": "^6.0.0", + "img-loader": "^3.0.0", + "lodash": "^4.17.15", + "md5": "^2.2.1", + "optimize-css-assets-webpack-plugin": "^5.0.1", + "postcss-loader": "^3.0.0", + "style-loader": "^0.23.1", + "terser": "^3.11.0", + "terser-webpack-plugin": "^2.2.3", + "vue-loader": "^15.4.2", + "webpack": "^4.36.1", + "webpack-cli": "^3.1.2", + "webpack-dev-server": "^3.1.14", + "webpack-merge": "^4.1.0", + "webpack-notifier": "^1.5.1", + "yargs": "^12.0.5" } }, "last-call-webpack-plugin": { @@ -5300,8 +5300,8 @@ "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", "dev": true, "requires": { - "lodash": "4.17.19", - "webpack-sources": "1.4.3" + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" } }, "lcid": { @@ -5310,7 +5310,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "leven": { @@ -5325,7 +5325,7 @@ "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", "dev": true, "requires": { - "leven": "3.1.0" + "leven": "^3.1.0" } }, "loader-runner": { @@ -5340,9 +5340,9 @@ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "big.js": "5.2.2", - "emojis-list": "3.0.0", - "json5": "1.0.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "dependencies": { "json5": { @@ -5351,7 +5351,7 @@ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "minimist": "1.2.5" + "minimist": "^1.2.0" } } } @@ -5367,8 +5367,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -5383,8 +5383,8 @@ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" } }, "lodash._basecopy": { @@ -5405,9 +5405,9 @@ "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", "dev": true, "requires": { - "lodash._bindcallback": "3.0.1", - "lodash._isiterateecall": "3.0.9", - "lodash.restparam": "3.6.1" + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash.restparam": "^3.0.0" } }, "lodash._getnative": { @@ -5452,9 +5452,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.memoize": { @@ -5487,7 +5487,7 @@ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "4.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "lower-case": { @@ -5502,7 +5502,7 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "yallist": "3.1.1" + "yallist": "^3.0.2" }, "dependencies": { "yallist": { @@ -5519,8 +5519,8 @@ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "pify": "4.0.1", - "semver": "5.7.1" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, "map-age-cleaner": { @@ -5529,7 +5529,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -5544,7 +5544,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5": { @@ -5553,9 +5553,9 @@ "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", "dev": true, "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "1.1.6" + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" } }, "md5.js": { @@ -5564,9 +5564,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.1.0", - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "mdn-data": { @@ -5587,9 +5587,9 @@ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "2.1.0", - "p-is-promise": "2.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" } }, "memory-fs": { @@ -5598,8 +5598,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.7" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "merge-descriptors": { @@ -5614,7 +5614,7 @@ "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -5649,19 +5649,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.3", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -5670,8 +5670,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.9", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" }, "dependencies": { "bn.js": { @@ -5727,7 +5727,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -5742,7 +5742,7 @@ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dev": true, "requires": { - "yallist": "4.0.0" + "yallist": "^4.0.0" } }, "minipass-collect": { @@ -5751,7 +5751,7 @@ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "requires": { - "minipass": "3.1.3" + "minipass": "^3.0.0" } }, "minipass-flush": { @@ -5760,7 +5760,7 @@ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "requires": { - "minipass": "3.1.3" + "minipass": "^3.0.0" } }, "minipass-pipeline": { @@ -5769,7 +5769,7 @@ "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", "dev": true, "requires": { - "minipass": "3.1.3" + "minipass": "^3.0.0" } }, "mississippi": { @@ -5778,16 +5778,16 @@ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.7.1", - "end-of-stream": "1.4.4", - "flush-write-stream": "1.1.1", - "from2": "2.3.0", - "parallel-transform": "1.2.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -5796,8 +5796,8 @@ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" } }, "mkdirp": { @@ -5806,7 +5806,7 @@ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "1.2.5" + "minimist": "^1.2.5" } }, "moment": { @@ -5820,12 +5820,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.5", - "rimraf": "2.7.1", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -5840,8 +5840,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.1.0" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -5863,17 +5863,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.3", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -5900,7 +5900,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "node-forge": { @@ -5915,29 +5915,29 @@ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { - "assert": "1.5.0", - "browserify-zlib": "0.2.0", - "buffer": "4.9.2", - "console-browserify": "1.2.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "3.1.0", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.1", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.7", - "stream-browserify": "2.0.2", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.11", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.11.1", - "vm-browserify": "1.1.2" + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" }, "dependencies": { "punycode": { @@ -5954,11 +5954,11 @@ "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", "dev": true, "requires": { - "growly": "1.3.0", - "is-wsl": "1.1.0", - "semver": "5.7.1", - "shellwords": "0.1.1", - "which": "1.3.1" + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" }, "dependencies": { "which": { @@ -5967,7 +5967,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -6002,7 +6002,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" }, "dependencies": { "path-key": { @@ -6019,7 +6019,7 @@ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "num2fraction": { @@ -6046,9 +6046,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -6057,7 +6057,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -6066,7 +6066,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6083,8 +6083,8 @@ "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.6" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "object-keys": { @@ -6105,7 +6105,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.assign": { @@ -6114,10 +6114,10 @@ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "define-properties": "1.1.3", - "function-bind": "1.1.1", - "has-symbols": "1.0.1", - "object-keys": "1.1.1" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.getownpropertydescriptors": { @@ -6126,8 +6126,8 @@ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.6" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.omit": { @@ -6136,7 +6136,7 @@ "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", "dev": true, "requires": { - "is-extendable": "1.0.1" + "is-extendable": "^1.0.0" } }, "object.pick": { @@ -6145,7 +6145,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "object.values": { @@ -6154,10 +6154,10 @@ "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.6", - "function-bind": "1.1.1", - "has": "1.0.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, "obuf": { @@ -6187,7 +6187,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opn": { @@ -6196,7 +6196,7 @@ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "optimize-css-assets-webpack-plugin": { @@ -6205,8 +6205,8 @@ "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", "dev": true, "requires": { - "cssnano": "4.1.10", - "last-call-webpack-plugin": "3.0.0" + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" } }, "original": { @@ -6215,7 +6215,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "1.4.7" + "url-parse": "^1.4.3" } }, "os-browserify": { @@ -6230,9 +6230,9 @@ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "execa": "1.0.0", - "lcid": "2.0.0", - "mem": "4.3.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "p-defer": { @@ -6259,7 +6259,7 @@ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "p-try": "2.2.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -6268,7 +6268,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.3.0" + "p-limit": "^2.0.0" } }, "p-map": { @@ -6277,7 +6277,7 @@ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { - "aggregate-error": "3.0.1" + "aggregate-error": "^3.0.0" } }, "p-pipe": { @@ -6292,7 +6292,7 @@ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", "dev": true, "requires": { - "retry": "0.12.0" + "retry": "^0.12.0" } }, "p-try": { @@ -6313,9 +6313,9 @@ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "requires": { - "cyclist": "1.0.1", - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "param-case": { @@ -6324,7 +6324,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parse-asn1": { @@ -6333,12 +6333,12 @@ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.1.1", - "safe-buffer": "5.1.2" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-json": { @@ -6347,8 +6347,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "parse-passwd": { @@ -6423,7 +6423,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -6440,11 +6440,11 @@ "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "picomatch": { @@ -6472,7 +6472,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -6481,7 +6481,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } }, "popper.js": { @@ -6496,9 +6496,9 @@ "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", "dev": true, "requires": { - "async": "2.6.3", - "debug": "3.2.6", - "mkdirp": "0.5.5" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" }, "dependencies": { "debug": { @@ -6507,7 +6507,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.1" } }, "ms": { @@ -6530,9 +6530,9 @@ "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "6.1.0" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" }, "dependencies": { "source-map": { @@ -6547,7 +6547,7 @@ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -6558,9 +6558,9 @@ "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", "dev": true, "requires": { - "postcss": "7.0.32", - "postcss-selector-parser": "6.0.2", - "postcss-value-parser": "4.1.0" + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" } }, "postcss-colormin": { @@ -6569,11 +6569,11 @@ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "dev": true, "requires": { - "browserslist": "4.13.0", - "color": "3.1.2", - "has": "1.0.3", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -6590,8 +6590,8 @@ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", "dev": true, "requires": { - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -6608,7 +6608,7 @@ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "dev": true, "requires": { - "postcss": "7.0.32" + "postcss": "^7.0.0" } }, "postcss-discard-duplicates": { @@ -6617,7 +6617,7 @@ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", "dev": true, "requires": { - "postcss": "7.0.32" + "postcss": "^7.0.0" } }, "postcss-discard-empty": { @@ -6626,7 +6626,7 @@ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", "dev": true, "requires": { - "postcss": "7.0.32" + "postcss": "^7.0.0" } }, "postcss-discard-overridden": { @@ -6635,7 +6635,7 @@ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", "dev": true, "requires": { - "postcss": "7.0.32" + "postcss": "^7.0.0" } }, "postcss-load-config": { @@ -6644,8 +6644,8 @@ "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", "dev": true, "requires": { - "cosmiconfig": "5.2.1", - "import-cwd": "2.1.0" + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" } }, "postcss-loader": { @@ -6654,10 +6654,10 @@ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "dev": true, "requires": { - "loader-utils": "1.4.0", - "postcss": "7.0.32", - "postcss-load-config": "2.1.0", - "schema-utils": "1.0.0" + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" }, "dependencies": { "schema-utils": { @@ -6666,9 +6666,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.12.3", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.1" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } @@ -6680,9 +6680,9 @@ "dev": true, "requires": { "css-color-names": "0.0.4", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1", - "stylehacks": "4.0.3" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" }, "dependencies": { "postcss-value-parser": { @@ -6699,12 +6699,12 @@ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "dev": true, "requires": { - "browserslist": "4.13.0", - "caniuse-api": "3.0.0", - "cssnano-util-same-parent": "4.0.1", - "postcss": "7.0.32", - "postcss-selector-parser": "3.1.2", - "vendors": "1.0.4" + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" }, "dependencies": { "postcss-selector-parser": { @@ -6713,9 +6713,9 @@ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "5.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -6726,8 +6726,8 @@ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", "dev": true, "requires": { - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -6744,10 +6744,10 @@ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", "dev": true, "requires": { - "cssnano-util-get-arguments": "4.0.0", - "is-color-stop": "1.1.0", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -6764,12 +6764,12 @@ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "browserslist": "4.13.0", - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" }, "dependencies": { "postcss-value-parser": { @@ -6786,10 +6786,10 @@ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "7.0.32", - "postcss-selector-parser": "3.1.2" + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" }, "dependencies": { "postcss-selector-parser": { @@ -6798,9 +6798,9 @@ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "5.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -6811,7 +6811,7 @@ "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -6820,9 +6820,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -6839,8 +6839,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.2", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -6849,9 +6849,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -6868,8 +6868,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.2", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -6878,9 +6878,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -6897,8 +6897,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.23" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -6907,9 +6907,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -6926,7 +6926,7 @@ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", "dev": true, "requires": { - "postcss": "7.0.32" + "postcss": "^7.0.0" } }, "postcss-normalize-display-values": { @@ -6935,9 +6935,9 @@ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "dev": true, "requires": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -6954,10 +6954,10 @@ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", "dev": true, "requires": { - "cssnano-util-get-arguments": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -6974,10 +6974,10 @@ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "dev": true, "requires": { - "cssnano-util-get-arguments": "4.0.0", - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -6994,9 +6994,9 @@ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -7013,9 +7013,9 @@ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", "dev": true, "requires": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -7032,9 +7032,9 @@ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", "dev": true, "requires": { - "browserslist": "4.13.0", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -7051,10 +7051,10 @@ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "3.3.0", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -7071,8 +7071,8 @@ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "dev": true, "requires": { - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -7089,9 +7089,9 @@ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "dev": true, "requires": { - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -7108,10 +7108,10 @@ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", "dev": true, "requires": { - "browserslist": "4.13.0", - "caniuse-api": "3.0.0", - "has": "1.0.3", - "postcss": "7.0.32" + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" } }, "postcss-reduce-transforms": { @@ -7120,10 +7120,10 @@ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "dev": true, "requires": { - "cssnano-util-get-match": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { "postcss-value-parser": { @@ -7140,9 +7140,9 @@ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", "dev": true, "requires": { - "cssesc": "3.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -7151,10 +7151,10 @@ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", "dev": true, "requires": { - "is-svg": "3.0.0", - "postcss": "7.0.32", - "postcss-value-parser": "3.3.1", - "svgo": "1.3.2" + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" }, "dependencies": { "postcss-value-parser": { @@ -7171,9 +7171,9 @@ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "7.0.32", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { @@ -7219,7 +7219,7 @@ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "dev": true, "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.9.1" } }, @@ -7241,12 +7241,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.9", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.5", - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" }, "dependencies": { "bn.js": { @@ -7263,8 +7263,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.4", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -7273,9 +7273,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.7.1", - "inherits": "2.0.4", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" }, "dependencies": { "pump": { @@ -7284,8 +7284,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.4", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } @@ -7332,7 +7332,7 @@ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -7341,8 +7341,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -7377,13 +7377,13 @@ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.4", - "isarray": "1.0.0", - "process-nextick-args": "2.0.1", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -7392,9 +7392,9 @@ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "4.2.4", - "micromatch": "3.1.10", - "readable-stream": "2.3.7" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "recast": { @@ -7404,9 +7404,9 @@ "dev": true, "requires": { "ast-types": "0.9.6", - "esprima": "3.1.3", - "private": "0.1.8", - "source-map": "0.5.7" + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" } }, "regenerate": { @@ -7421,7 +7421,7 @@ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { - "regenerate": "1.4.1" + "regenerate": "^1.4.0" } }, "regenerator-runtime": { @@ -7436,7 +7436,7 @@ "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "requires": { - "@babel/runtime": "7.10.5" + "@babel/runtime": "^7.8.4" } }, "regex-not": { @@ -7445,8 +7445,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regex-parser": { @@ -7461,8 +7461,8 @@ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.6" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "regexpu-core": { @@ -7471,12 +7471,12 @@ "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "dev": true, "requires": { - "regenerate": "1.4.1", - "regenerate-unicode-properties": "8.2.0", - "regjsgen": "0.5.2", - "regjsparser": "0.6.4", - "unicode-match-property-ecmascript": "1.0.4", - "unicode-match-property-value-ecmascript": "1.2.0" + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { @@ -7491,7 +7491,7 @@ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -7556,7 +7556,7 @@ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "requires": { - "path-parse": "1.0.6" + "path-parse": "^1.0.6" } }, "resolve-cwd": { @@ -7565,7 +7565,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-dir": { @@ -7574,8 +7574,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" }, "dependencies": { "global-modules": { @@ -7584,9 +7584,9 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } } } @@ -7609,15 +7609,15 @@ "integrity": "sha512-sc/UVgiADdoTc+4cGPB7cUCnlEkzlxD1NXHw4oa9qA0fp30H8mAQ2ePJBP9MQ029DUuhEPouhNdvzT37pBCV0g==", "dev": true, "requires": { - "adjust-sourcemap-loader": "1.2.0", - "camelcase": "4.1.0", - "convert-source-map": "1.7.0", - "loader-utils": "1.4.0", - "lodash.defaults": "4.2.0", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.5.7", - "urix": "0.1.0" + "adjust-sourcemap-loader": "^1.1.0", + "camelcase": "^4.1.0", + "convert-source-map": "^1.5.1", + "loader-utils": "^1.1.0", + "lodash.defaults": "^4.0.0", + "rework": "^1.0.1", + "rework-visit": "^1.0.0", + "source-map": "^0.5.7", + "urix": "^0.1.0" }, "dependencies": { "camelcase": { @@ -7646,8 +7646,8 @@ "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", "dev": true, "requires": { - "convert-source-map": "0.3.5", - "css": "2.2.4" + "convert-source-map": "^0.3.3", + "css": "^2.0.0" }, "dependencies": { "convert-source-map": { @@ -7682,7 +7682,7 @@ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "glob": "7.1.6" + "glob": "^7.1.3" } }, "ripemd160": { @@ -7691,8 +7691,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.1.0", - "inherits": "2.0.4" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -7701,7 +7701,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -7716,7 +7716,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -7731,7 +7731,7 @@ "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", "dev": true, "requires": { - "chokidar": "2.1.8" + "chokidar": ">=2.0.0 <4.0.0" } }, "sass-loader": { @@ -7740,11 +7740,11 @@ "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", "dev": true, "requires": { - "clone-deep": "4.0.1", - "loader-utils": "1.4.0", - "neo-async": "2.6.2", - "schema-utils": "2.7.0", - "semver": "6.3.0" + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" }, "dependencies": { "semver": { @@ -7767,9 +7767,9 @@ "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "dev": true, "requires": { - "@types/json-schema": "7.0.5", - "ajv": "6.12.3", - "ajv-keywords": "3.5.1" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" } }, "select-hose": { @@ -7800,18 +7800,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.7.2", + "http-errors": "~1.7.2", "mime": "1.6.0", "ms": "2.1.1", - "on-finished": "2.3.0", - "range-parser": "1.2.1", - "statuses": "1.5.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { "debug": { @@ -7845,7 +7845,7 @@ "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", "dev": true, "requires": { - "randombytes": "2.1.0" + "randombytes": "^2.1.0" } }, "serve-index": { @@ -7854,13 +7854,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.7", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.27", - "parseurl": "1.3.3" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "dependencies": { "debug": { @@ -7878,10 +7878,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.5.0" + "statuses": ">= 1.4.0 < 2" } }, "inherits": { @@ -7904,9 +7904,9 @@ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.3", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", "send": "0.17.1" } }, @@ -7922,10 +7922,10 @@ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -7934,7 +7934,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -7963,8 +7963,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.4", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shallow-clone": { @@ -7973,7 +7973,7 @@ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "kind-of": "6.0.3" + "kind-of": "^6.0.2" } }, "shebang-command": { @@ -7982,7 +7982,7 @@ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "3.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { @@ -8009,7 +8009,7 @@ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dev": true, "requires": { - "is-arrayish": "0.3.2" + "is-arrayish": "^0.3.1" }, "dependencies": { "is-arrayish": { @@ -8032,14 +8032,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.3", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "debug": { @@ -8057,7 +8057,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -8066,7 +8066,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -8083,9 +8083,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -8094,7 +8094,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -8103,7 +8103,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.3" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -8112,7 +8112,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.3" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -8121,9 +8121,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.3" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -8134,7 +8134,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -8143,7 +8143,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8154,8 +8154,8 @@ "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.4.0", + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", "websocket-driver": "0.6.5" } }, @@ -8165,12 +8165,12 @@ "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "dev": true, "requires": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.3", - "inherits": "2.0.4", - "json3": "3.3.3", - "url-parse": "1.4.7" + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { "debug": { @@ -8179,7 +8179,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.1" } }, "faye-websocket": { @@ -8188,7 +8188,7 @@ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { - "websocket-driver": "0.6.5" + "websocket-driver": ">=0.5.1" } }, "ms": { @@ -8217,11 +8217,11 @@ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -8230,8 +8230,8 @@ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { @@ -8254,11 +8254,11 @@ "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { - "debug": "4.1.1", - "handle-thing": "2.0.1", - "http-deceiver": "1.2.7", - "select-hose": "2.0.0", - "spdy-transport": "3.0.0" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "dependencies": { "debug": { @@ -8267,7 +8267,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.1" } }, "ms": { @@ -8284,12 +8284,12 @@ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "4.1.1", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "3.6.0", - "wbuf": "1.7.3" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" }, "dependencies": { "debug": { @@ -8298,7 +8298,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.1" } }, "ms": { @@ -8313,9 +8313,9 @@ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "inherits": "2.0.4", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } @@ -8326,7 +8326,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -8341,8 +8341,8 @@ "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", "dev": true, "requires": { - "figgy-pudding": "3.5.2", - "minipass": "3.1.3" + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" } }, "stable": { @@ -8363,8 +8363,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -8373,7 +8373,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -8390,8 +8390,8 @@ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { - "inherits": "2.0.4", - "readable-stream": "2.3.7" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -8400,8 +8400,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.4", - "stream-shift": "1.0.1" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -8410,11 +8410,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.4", - "readable-stream": "2.3.7", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.2" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -8429,8 +8429,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -8445,7 +8445,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -8456,8 +8456,8 @@ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.6" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string.prototype.trimstart": { @@ -8466,8 +8466,8 @@ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.6" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -8476,7 +8476,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -8485,7 +8485,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-eof": { @@ -8500,8 +8500,8 @@ "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", "dev": true, "requires": { - "loader-utils": "1.4.0", - "schema-utils": "1.0.0" + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0" }, "dependencies": { "schema-utils": { @@ -8510,9 +8510,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.12.3", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.1" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } @@ -8523,9 +8523,9 @@ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "dev": true, "requires": { - "browserslist": "4.13.0", - "postcss": "7.0.32", - "postcss-selector-parser": "3.1.2" + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" }, "dependencies": { "postcss-selector-parser": { @@ -8534,9 +8534,9 @@ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "5.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -8547,7 +8547,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "svgo": { @@ -8556,19 +8556,19 @@ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dev": true, "requires": { - "chalk": "2.4.2", - "coa": "2.0.2", - "css-select": "2.1.0", - "css-select-base-adapter": "0.1.1", + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", "css-tree": "1.0.0-alpha.37", - "csso": "4.0.3", - "js-yaml": "3.14.0", - "mkdirp": "0.5.5", - "object.values": "1.1.1", - "sax": "1.2.4", - "stable": "0.1.8", - "unquote": "1.1.1", - "util.promisify": "1.0.1" + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" } }, "tapable": { @@ -8583,9 +8583,9 @@ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "dev": true, "requires": { - "commander": "2.20.3", - "source-map": "0.6.1", - "source-map-support": "0.5.19" + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" }, "dependencies": { "commander": { @@ -8608,15 +8608,15 @@ "integrity": "sha512-xzYyaHUNhzgaAdBsXxk2Yvo/x1NJdslUaussK3fdpBbvttm1iIwU+c26dj9UxJcwk2c5UWt5F55MUTIA8BE7Dg==", "dev": true, "requires": { - "cacache": "13.0.1", - "find-cache-dir": "3.3.1", - "jest-worker": "25.5.0", - "p-limit": "2.3.0", - "schema-utils": "2.7.0", - "serialize-javascript": "3.1.0", - "source-map": "0.6.1", - "terser": "4.8.0", - "webpack-sources": "1.4.3" + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^3.1.0", + "source-map": "^0.6.1", + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" }, "dependencies": { "commander": { @@ -8631,9 +8631,9 @@ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "3.1.0", - "pkg-dir": "4.2.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, "find-up": { @@ -8642,8 +8642,8 @@ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "5.0.0", - "path-exists": "4.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "locate-path": { @@ -8652,7 +8652,7 @@ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "4.1.0" + "p-locate": "^4.1.0" } }, "make-dir": { @@ -8661,7 +8661,7 @@ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "semver": "6.3.0" + "semver": "^6.0.0" } }, "p-locate": { @@ -8670,7 +8670,7 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "2.3.0" + "p-limit": "^2.2.0" } }, "path-exists": { @@ -8685,7 +8685,7 @@ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "4.1.0" + "find-up": "^4.0.0" } }, "semver": { @@ -8706,9 +8706,9 @@ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "requires": { - "commander": "2.20.3", - "source-map": "0.6.1", - "source-map-support": "0.5.19" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" } } } @@ -8725,8 +8725,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.7", - "xtend": "4.0.2" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "thunky": { @@ -8741,7 +8741,7 @@ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "timsort": { @@ -8768,7 +8768,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8777,7 +8777,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8788,10 +8788,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -8800,8 +8800,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "toidentifier": { @@ -8829,7 +8829,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.27" + "mime-types": "~2.1.24" } }, "typedarray": { @@ -8844,8 +8844,8 @@ "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", "dev": true, "requires": { - "commander": "2.19.0", - "source-map": "0.6.1" + "commander": "~2.19.0", + "source-map": "~0.6.1" }, "dependencies": { "commander": { @@ -8874,8 +8874,8 @@ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "1.0.4", - "unicode-property-aliases-ecmascript": "1.1.0" + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" } }, "unicode-match-property-value-ecmascript": { @@ -8896,10 +8896,10 @@ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "2.0.1" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" }, "dependencies": { "is-extendable": { @@ -8928,7 +8928,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.2" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -8937,7 +8937,7 @@ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "universalify": { @@ -8964,8 +8964,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -8974,9 +8974,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -9016,7 +9016,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -9049,8 +9049,8 @@ "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "2.1.1", - "requires-port": "1.0.0" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, "use": { @@ -9088,10 +9088,10 @@ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.17.6", - "has-symbols": "1.0.1", - "object.getownpropertydescriptors": "2.1.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" } }, "utils-merge": { @@ -9148,11 +9148,11 @@ "integrity": "sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA==", "dev": true, "requires": { - "@vue/component-compiler-utils": "3.1.2", - "hash-sum": "1.0.2", - "loader-utils": "1.4.0", - "vue-hot-reload-api": "2.3.4", - "vue-style-loader": "4.1.2" + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" } }, "vue-style-loader": { @@ -9161,8 +9161,8 @@ "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", "dev": true, "requires": { - "hash-sum": "1.0.2", - "loader-utils": "1.4.0" + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" } }, "vue-template-compiler": { @@ -9171,8 +9171,8 @@ "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", "dev": true, "requires": { - "de-indent": "1.0.2", - "he": "1.2.0" + "de-indent": "^1.0.2", + "he": "^1.1.0" } }, "vue-template-es2015-compiler": { @@ -9187,10 +9187,10 @@ "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", "dev": true, "requires": { - "chokidar": "3.4.1", - "graceful-fs": "4.2.4", - "neo-async": "2.6.2", - "watchpack-chokidar2": "2.0.0" + "chokidar": "^3.4.0", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" }, "dependencies": { "anymatch": { @@ -9200,8 +9200,8 @@ "dev": true, "optional": true, "requires": { - "normalize-path": "3.0.0", - "picomatch": "2.2.2" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "binary-extensions": { @@ -9218,7 +9218,7 @@ "dev": true, "optional": true, "requires": { - "fill-range": "7.0.1" + "fill-range": "^7.0.1" } }, "chokidar": { @@ -9228,14 +9228,14 @@ "dev": true, "optional": true, "requires": { - "anymatch": "3.1.1", - "braces": "3.0.2", - "fsevents": "2.1.3", - "glob-parent": "5.1.1", - "is-binary-path": "2.1.0", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "readdirp": "3.4.0" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" } }, "fill-range": { @@ -9245,7 +9245,7 @@ "dev": true, "optional": true, "requires": { - "to-regex-range": "5.0.1" + "to-regex-range": "^5.0.1" } }, "fsevents": { @@ -9262,7 +9262,7 @@ "dev": true, "optional": true, "requires": { - "is-glob": "4.0.1" + "is-glob": "^4.0.1" } }, "is-binary-path": { @@ -9272,7 +9272,7 @@ "dev": true, "optional": true, "requires": { - "binary-extensions": "2.1.0" + "binary-extensions": "^2.0.0" } }, "is-number": { @@ -9289,7 +9289,7 @@ "dev": true, "optional": true, "requires": { - "picomatch": "2.2.2" + "picomatch": "^2.2.1" } }, "to-regex-range": { @@ -9299,7 +9299,7 @@ "dev": true, "optional": true, "requires": { - "is-number": "7.0.0" + "is-number": "^7.0.0" } } } @@ -9311,7 +9311,7 @@ "dev": true, "optional": true, "requires": { - "chokidar": "2.1.8" + "chokidar": "^2.1.8" } }, "wbuf": { @@ -9320,7 +9320,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, "webpack": { @@ -9333,25 +9333,25 @@ "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/wasm-edit": "1.9.0", "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "6.4.1", - "ajv": "6.12.3", - "ajv-keywords": "3.5.1", - "chrome-trace-event": "1.0.2", - "enhanced-resolve": "4.3.0", - "eslint-scope": "4.0.3", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.4.0", - "loader-utils": "1.4.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.5", - "neo-async": "2.6.2", - "node-libs-browser": "2.2.1", - "schema-utils": "1.0.0", - "tapable": "1.1.3", - "terser-webpack-plugin": "1.4.4", - "watchpack": "1.7.2", - "webpack-sources": "1.4.3" + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.1", + "webpack-sources": "^1.4.1" }, "dependencies": { "cacache": { @@ -9360,21 +9360,21 @@ "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { - "bluebird": "3.7.2", - "chownr": "1.1.4", - "figgy-pudding": "3.5.2", - "glob": "7.1.6", - "graceful-fs": "4.2.4", - "infer-owner": "1.0.4", - "lru-cache": "5.1.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.5", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.7.1", - "ssri": "6.0.1", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" } }, "commander": { @@ -9389,9 +9389,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.12.3", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.1" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "source-map": { @@ -9406,7 +9406,7 @@ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "figgy-pudding": "3.5.2" + "figgy-pudding": "^3.5.1" } }, "terser": { @@ -9415,9 +9415,9 @@ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "requires": { - "commander": "2.20.3", - "source-map": "0.6.1", - "source-map-support": "0.5.19" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" } }, "terser-webpack-plugin": { @@ -9426,15 +9426,15 @@ "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", "dev": true, "requires": { - "cacache": "12.0.4", - "find-cache-dir": "2.1.0", - "is-wsl": "1.1.0", - "schema-utils": "1.0.0", - "serialize-javascript": "3.1.0", - "source-map": "0.6.1", - "terser": "4.8.0", - "webpack-sources": "1.4.3", - "worker-farm": "1.7.0" + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^3.1.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" } } } @@ -9445,17 +9445,17 @@ "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", "dev": true, "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.3.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.4.0", - "loader-utils": "1.4.0", - "supports-color": "6.1.0", - "v8-compile-cache": "2.1.1", - "yargs": "13.3.2" + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" }, "dependencies": { "ansi-regex": { @@ -9470,11 +9470,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.7.1", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "path-key": { @@ -9489,7 +9489,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -9504,9 +9504,9 @@ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, "strip-ansi": { @@ -9515,7 +9515,7 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "4.1.0" + "ansi-regex": "^4.1.0" } }, "supports-color": { @@ -9524,7 +9524,7 @@ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "which": { @@ -9533,7 +9533,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "yargs": { @@ -9542,16 +9542,16 @@ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "5.0.0", - "find-up": "3.0.0", - "get-caller-file": "2.0.5", - "require-directory": "2.1.1", - "require-main-filename": "2.0.0", - "set-blocking": "2.0.0", - "string-width": "3.1.0", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "13.1.2" + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } } } @@ -9562,11 +9562,11 @@ "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "2.4.6", - "mkdirp": "0.5.5", - "range-parser": "1.2.1", - "webpack-log": "2.0.0" + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" }, "dependencies": { "mime": { @@ -9584,38 +9584,38 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.1.8", - "compression": "1.7.4", - "connect-history-api-fallback": "1.6.0", - "debug": "4.1.1", - "del": "4.1.1", - "express": "4.17.1", - "html-entities": "1.3.1", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", "http-proxy-middleware": "0.19.1", - "import-local": "2.0.0", - "internal-ip": "4.3.0", - "ip": "1.1.5", - "is-absolute-url": "3.0.3", - "killable": "1.0.1", - "loglevel": "1.6.8", - "opn": "5.5.0", - "p-retry": "3.0.1", - "portfinder": "1.0.26", - "schema-utils": "1.0.0", - "selfsigned": "1.10.7", - "semver": "6.3.0", - "serve-index": "1.9.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", "sockjs": "0.3.20", "sockjs-client": "1.4.0", - "spdy": "4.0.2", - "strip-ansi": "3.0.1", - "supports-color": "6.1.0", - "url": "0.11.0", - "webpack-dev-middleware": "3.7.2", - "webpack-log": "2.0.0", - "ws": "6.2.1", - "yargs": "13.3.2" + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" }, "dependencies": { "ansi-regex": { @@ -9630,7 +9630,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.1" } }, "is-absolute-url": { @@ -9651,9 +9651,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.12.3", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.5.1" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "semver": { @@ -9668,9 +9668,9 @@ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" }, "dependencies": { "strip-ansi": { @@ -9679,7 +9679,7 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "4.1.0" + "ansi-regex": "^4.1.0" } } } @@ -9690,7 +9690,7 @@ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "yargs": { @@ -9699,16 +9699,16 @@ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "5.0.0", - "find-up": "3.0.0", - "get-caller-file": "2.0.5", - "require-directory": "2.1.1", - "require-main-filename": "2.0.0", - "set-blocking": "2.0.0", - "string-width": "3.1.0", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "13.1.2" + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } } } @@ -9719,8 +9719,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "3.2.4", - "uuid": "3.4.0" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, "webpack-merge": { @@ -9729,7 +9729,7 @@ "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", "dev": true, "requires": { - "lodash": "4.17.19" + "lodash": "^4.17.15" } }, "webpack-notifier": { @@ -9738,9 +9738,9 @@ "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", "dev": true, "requires": { - "node-notifier": "5.4.3", - "object-assign": "4.1.1", - "strip-ansi": "3.0.1" + "node-notifier": "^5.1.2", + "object-assign": "^4.1.0", + "strip-ansi": "^3.0.1" } }, "webpack-sources": { @@ -9749,8 +9749,8 @@ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -9767,7 +9767,7 @@ "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true, "requires": { - "websocket-extensions": "0.1.4" + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -9782,7 +9782,7 @@ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -9797,7 +9797,7 @@ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -9806,9 +9806,9 @@ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "string-width": "3.1.0", - "strip-ansi": "5.2.0" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { "ansi-regex": { @@ -9823,9 +9823,9 @@ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, "strip-ansi": { @@ -9834,7 +9834,7 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "4.1.0" + "ansi-regex": "^4.1.0" } } } @@ -9851,7 +9851,7 @@ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { - "async-limiter": "1.0.1" + "async-limiter": "~1.0.0" } }, "xtend": { @@ -9878,18 +9878,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" }, "dependencies": { "ansi-regex": { @@ -9904,9 +9904,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "get-caller-file": { @@ -9921,7 +9921,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "require-main-filename": { @@ -9936,7 +9936,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "wrap-ansi": { @@ -9945,8 +9945,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -9961,9 +9961,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -9972,7 +9972,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -9983,8 +9983,8 @@ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -9995,8 +9995,8 @@ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } diff --git a/package.json b/package.json old mode 100644 new mode 100755 index d30e990..832a513 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "scripts": { - "postinstall": "npm run prod", + "postinstall": "npm run prod", "dev": "npm run development", "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "npm run development -- --watch", @@ -20,7 +20,7 @@ "lodash": "^4.17.13", "popper.js": "^1.12", "resolve-url-loader": "^2.3.1", - "sass": "^1.20.1", + "sass": "^1.15.2", "sass-loader": "^8.0.0", "vue": "^2.5.17", "vue-template-compiler": "^2.6.10" diff --git a/phpunit.xml b/phpunit.xml old mode 100644 new mode 100755 diff --git a/public/.htaccess b/public/.htaccess old mode 100644 new mode 100755 diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100755 index 0000000..7e2e006 Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100755 index 0000000..f563fe5 Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/app.css b/public/app.css old mode 100644 new mode 100755 index 5eebd65..09ba0b5 --- a/public/app.css +++ b/public/app.css @@ -1,5 +1,5 @@ .view { - background: url("/slides/06.png")no-repeat center center; + background: url("/slides/homepage.jpg")no-repeat center center; background-size: cover; } @@ -29,3 +29,9 @@ header, .view { height: 100%; } + +.jumbotron-header { + height: 200px; + width: 100%; + margin-bottom: 20px; +} diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100755 index 0000000..845872a Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/community.svg b/public/community.svg new file mode 100755 index 0000000..3bb1107 --- /dev/null +++ b/public/community.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/css/acc.css b/public/css/acc.css old mode 100644 new mode 100755 diff --git a/public/css/app.css b/public/css/app.css old mode 100644 new mode 100755 index 41395b9..a3b54df --- a/public/css/app.css +++ b/public/css/app.css @@ -1,10884 +1,8 @@ -@import url(https://fonts.googleapis.com/css?family=Nunito);@charset "UTF-8"; +@import url(https://fonts.googleapis.com/css?family=Nunito); /*! - * Bootstrap v4.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. + * Bootstrap v4.5.0 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -:root { - --blue: #3490dc; - --indigo: #6574cd; - --purple: #9561e2; - --pink: #f66d9b; - --red: #e3342f; - --orange: #f6993f; - --yellow: #ffed4a; - --green: #38c172; - --teal: #4dc0b5; - --cyan: #6cb2eb; - --white: #fff; - --gray: #6c757d; - --gray-dark: #343a40; - --primary: #3490dc; - --secondary: #6c757d; - --success: #38c172; - --info: #6cb2eb; - --warning: #ffed4a; - --danger: #e3342f; - --light: #f8f9fa; - --dark: #343a40; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: "Nunito", sans-serif; - --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -article, -aside, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section { - display: block; -} - -body { - margin: 0; - font-family: "Nunito", sans-serif; - font-size: 0.9rem; - font-weight: 400; - line-height: 1.6; - color: #212529; - text-align: left; - background-color: #f8fafc; -} - -[tabindex="-1"]:focus:not(:focus-visible) { - outline: 0 !important; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: 0.5rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title], -abbr[data-original-title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; - -webkit-text-decoration-skip-ink: none; - text-decoration-skip-ink: none; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul, -dl { - margin-top: 0; - margin-bottom: 1rem; -} - -ol ol, -ul ul, -ol ul, -ul ol { - margin-bottom: 0; -} - -dt { - font-weight: 700; -} - -dd { - margin-bottom: 0.5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -b, -strong { - font-weight: bolder; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -a { - color: #3490dc; - text-decoration: none; - background-color: transparent; -} - -a:hover { - color: #1d68a7; - text-decoration: underline; -} - -a:not([href]) { - color: inherit; - text-decoration: none; -} - -a:not([href]):hover { - color: inherit; - text-decoration: none; -} - -pre, -code, -kbd, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 1em; -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; -} - -figure { - margin: 0 0 1rem; -} - -img { - vertical-align: middle; - border-style: none; -} - -svg { - overflow: hidden; - vertical-align: middle; -} - -table { - border-collapse: collapse; -} - -caption { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - color: #6c757d; - text-align: left; - caption-side: bottom; -} - -th { - text-align: inherit; -} - -label { - display: inline-block; - margin-bottom: 0.5rem; -} - -button { - border-radius: 0; -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -select { - word-wrap: normal; -} - -button, -[type=button], -[type=reset], -[type=submit] { - -webkit-appearance: button; -} - -button:not(:disabled), -[type=button]:not(:disabled), -[type=reset]:not(:disabled), -[type=submit]:not(:disabled) { - cursor: pointer; -} - -button::-moz-focus-inner, -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner { - padding: 0; - border-style: none; -} - -input[type=radio], -input[type=checkbox] { - box-sizing: border-box; - padding: 0; -} - -input[type=date], -input[type=time], -input[type=datetime-local], -input[type=month] { - -webkit-appearance: listbox; -} - -textarea { - overflow: auto; - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: 0.5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal; -} - -progress { - vertical-align: baseline; -} - -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { - height: auto; -} - -[type=search] { - outline-offset: -2px; - -webkit-appearance: none; -} - -[type=search]::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} - -output { - display: inline-block; -} - -summary { - display: list-item; - cursor: pointer; -} - -template { - display: none; -} - -[hidden] { - display: none !important; -} - -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - margin-bottom: 0.5rem; - font-weight: 500; - line-height: 1.2; -} - -h1, -.h1 { - font-size: 2.25rem; -} - -h2, -.h2 { - font-size: 1.8rem; -} - -h3, -.h3 { - font-size: 1.575rem; -} - -h4, -.h4 { - font-size: 1.35rem; -} - -h5, -.h5 { - font-size: 1.125rem; -} - -h6, -.h6 { - font-size: 0.9rem; -} - -.lead { - font-size: 1.125rem; - font-weight: 300; -} - -.display-1 { - font-size: 6rem; - font-weight: 300; - line-height: 1.2; -} - -.display-2 { - font-size: 5.5rem; - font-weight: 300; - line-height: 1.2; -} - -.display-3 { - font-size: 4.5rem; - font-weight: 300; - line-height: 1.2; -} - -.display-4 { - font-size: 3.5rem; - font-weight: 300; - line-height: 1.2; -} - -hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid rgba(0, 0, 0, 0.1); -} - -small, -.small { - font-size: 80%; - font-weight: 400; -} - -mark, -.mark { - padding: 0.2em; - background-color: #fcf8e3; -} - -.list-unstyled { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline-item { - display: inline-block; -} - -.list-inline-item:not(:last-child) { - margin-right: 0.5rem; -} - -.initialism { - font-size: 90%; - text-transform: uppercase; -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.125rem; -} - -.blockquote-footer { - display: block; - font-size: 80%; - color: #6c757d; -} - -.blockquote-footer::before { - content: "\2014\A0"; -} - -.img-fluid { - max-width: 100%; - height: auto; -} - -.img-thumbnail { - padding: 0.25rem; - background-color: #f8fafc; - border: 1px solid #dee2e6; - border-radius: 0.25rem; - max-width: 100%; - height: auto; -} - -.figure { - display: inline-block; -} - -.figure-img { - margin-bottom: 0.5rem; - line-height: 1; -} - -.figure-caption { - font-size: 90%; - color: #6c757d; -} - -code { - font-size: 87.5%; - color: #f66d9b; - word-wrap: break-word; -} - -a > code { - color: inherit; -} - -kbd { - padding: 0.2rem 0.4rem; - font-size: 87.5%; - color: #fff; - background-color: #212529; - border-radius: 0.2rem; -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700; -} - -pre { - display: block; - font-size: 87.5%; - color: #212529; -} - -pre code { - font-size: inherit; - color: inherit; - word-break: normal; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -.container { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1140px; - } -} - -.container-fluid, -.container-xl, -.container-lg, -.container-md, -.container-sm { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container-sm, - .container { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container-md, - .container-sm, - .container { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container-lg, - .container-md, - .container-sm, - .container { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container-xl, - .container-lg, - .container-md, - .container-sm, - .container { - max-width: 1140px; - } -} - -.row { - display: flex; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; -} - -.no-gutters { - margin-right: 0; - margin-left: 0; -} - -.no-gutters > .col, -.no-gutters > [class*=col-] { - padding-right: 0; - padding-left: 0; -} - -.col-xl, -.col-xl-auto, -.col-xl-12, -.col-xl-11, -.col-xl-10, -.col-xl-9, -.col-xl-8, -.col-xl-7, -.col-xl-6, -.col-xl-5, -.col-xl-4, -.col-xl-3, -.col-xl-2, -.col-xl-1, -.col-lg, -.col-lg-auto, -.col-lg-12, -.col-lg-11, -.col-lg-10, -.col-lg-9, -.col-lg-8, -.col-lg-7, -.col-lg-6, -.col-lg-5, -.col-lg-4, -.col-lg-3, -.col-lg-2, -.col-lg-1, -.col-md, -.col-md-auto, -.col-md-12, -.col-md-11, -.col-md-10, -.col-md-9, -.col-md-8, -.col-md-7, -.col-md-6, -.col-md-5, -.col-md-4, -.col-md-3, -.col-md-2, -.col-md-1, -.col-sm, -.col-sm-auto, -.col-sm-12, -.col-sm-11, -.col-sm-10, -.col-sm-9, -.col-sm-8, -.col-sm-7, -.col-sm-6, -.col-sm-5, -.col-sm-4, -.col-sm-3, -.col-sm-2, -.col-sm-1, -.col, -.col-auto, -.col-12, -.col-11, -.col-10, -.col-9, -.col-8, -.col-7, -.col-6, -.col-5, -.col-4, -.col-3, -.col-2, -.col-1 { - position: relative; - width: 100%; - padding-right: 15px; - padding-left: 15px; -} - -.col { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; -} - -.row-cols-1 > * { - flex: 0 0 100%; - max-width: 100%; -} - -.row-cols-2 > * { - flex: 0 0 50%; - max-width: 50%; -} - -.row-cols-3 > * { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; -} - -.row-cols-4 > * { - flex: 0 0 25%; - max-width: 25%; -} - -.row-cols-5 > * { - flex: 0 0 20%; - max-width: 20%; -} - -.row-cols-6 > * { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; -} - -.col-auto { - flex: 0 0 auto; - width: auto; - max-width: 100%; -} - -.col-1 { - flex: 0 0 8.3333333333%; - max-width: 8.3333333333%; -} - -.col-2 { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; -} - -.col-3 { - flex: 0 0 25%; - max-width: 25%; -} - -.col-4 { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; -} - -.col-5 { - flex: 0 0 41.6666666667%; - max-width: 41.6666666667%; -} - -.col-6 { - flex: 0 0 50%; - max-width: 50%; -} - -.col-7 { - flex: 0 0 58.3333333333%; - max-width: 58.3333333333%; -} - -.col-8 { - flex: 0 0 66.6666666667%; - max-width: 66.6666666667%; -} - -.col-9 { - flex: 0 0 75%; - max-width: 75%; -} - -.col-10 { - flex: 0 0 83.3333333333%; - max-width: 83.3333333333%; -} - -.col-11 { - flex: 0 0 91.6666666667%; - max-width: 91.6666666667%; -} - -.col-12 { - flex: 0 0 100%; - max-width: 100%; -} - -.order-first { - order: -1; -} - -.order-last { - order: 13; -} - -.order-0 { - order: 0; -} - -.order-1 { - order: 1; -} - -.order-2 { - order: 2; -} - -.order-3 { - order: 3; -} - -.order-4 { - order: 4; -} - -.order-5 { - order: 5; -} - -.order-6 { - order: 6; -} - -.order-7 { - order: 7; -} - -.order-8 { - order: 8; -} - -.order-9 { - order: 9; -} - -.order-10 { - order: 10; -} - -.order-11 { - order: 11; -} - -.order-12 { - order: 12; -} - -.offset-1 { - margin-left: 8.3333333333%; -} - -.offset-2 { - margin-left: 16.6666666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.3333333333%; -} - -.offset-5 { - margin-left: 41.6666666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.3333333333%; -} - -.offset-8 { - margin-left: 66.6666666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.3333333333%; -} - -.offset-11 { - margin-left: 91.6666666667%; -} - -@media (min-width: 576px) { - .col-sm { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - - .row-cols-sm-1 > * { - flex: 0 0 100%; - max-width: 100%; - } - - .row-cols-sm-2 > * { - flex: 0 0 50%; - max-width: 50%; - } - - .row-cols-sm-3 > * { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; - } - - .row-cols-sm-4 > * { - flex: 0 0 25%; - max-width: 25%; - } - - .row-cols-sm-5 > * { - flex: 0 0 20%; - max-width: 20%; - } - - .row-cols-sm-6 > * { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; - } - - .col-sm-auto { - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - - .col-sm-1 { - flex: 0 0 8.3333333333%; - max-width: 8.3333333333%; - } - - .col-sm-2 { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; - } - - .col-sm-3 { - flex: 0 0 25%; - max-width: 25%; - } - - .col-sm-4 { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; - } - - .col-sm-5 { - flex: 0 0 41.6666666667%; - max-width: 41.6666666667%; - } - - .col-sm-6 { - flex: 0 0 50%; - max-width: 50%; - } - - .col-sm-7 { - flex: 0 0 58.3333333333%; - max-width: 58.3333333333%; - } - - .col-sm-8 { - flex: 0 0 66.6666666667%; - max-width: 66.6666666667%; - } - - .col-sm-9 { - flex: 0 0 75%; - max-width: 75%; - } - - .col-sm-10 { - flex: 0 0 83.3333333333%; - max-width: 83.3333333333%; - } - - .col-sm-11 { - flex: 0 0 91.6666666667%; - max-width: 91.6666666667%; - } - - .col-sm-12 { - flex: 0 0 100%; - max-width: 100%; - } - - .order-sm-first { - order: -1; - } - - .order-sm-last { - order: 13; - } - - .order-sm-0 { - order: 0; - } - - .order-sm-1 { - order: 1; - } - - .order-sm-2 { - order: 2; - } - - .order-sm-3 { - order: 3; - } - - .order-sm-4 { - order: 4; - } - - .order-sm-5 { - order: 5; - } - - .order-sm-6 { - order: 6; - } - - .order-sm-7 { - order: 7; - } - - .order-sm-8 { - order: 8; - } - - .order-sm-9 { - order: 9; - } - - .order-sm-10 { - order: 10; - } - - .order-sm-11 { - order: 11; - } - - .order-sm-12 { - order: 12; - } - - .offset-sm-0 { - margin-left: 0; - } - - .offset-sm-1 { - margin-left: 8.3333333333%; - } - - .offset-sm-2 { - margin-left: 16.6666666667%; - } - - .offset-sm-3 { - margin-left: 25%; - } - - .offset-sm-4 { - margin-left: 33.3333333333%; - } - - .offset-sm-5 { - margin-left: 41.6666666667%; - } - - .offset-sm-6 { - margin-left: 50%; - } - - .offset-sm-7 { - margin-left: 58.3333333333%; - } - - .offset-sm-8 { - margin-left: 66.6666666667%; - } - - .offset-sm-9 { - margin-left: 75%; - } - - .offset-sm-10 { - margin-left: 83.3333333333%; - } - - .offset-sm-11 { - margin-left: 91.6666666667%; - } -} - -@media (min-width: 768px) { - .col-md { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - - .row-cols-md-1 > * { - flex: 0 0 100%; - max-width: 100%; - } - - .row-cols-md-2 > * { - flex: 0 0 50%; - max-width: 50%; - } - - .row-cols-md-3 > * { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; - } - - .row-cols-md-4 > * { - flex: 0 0 25%; - max-width: 25%; - } - - .row-cols-md-5 > * { - flex: 0 0 20%; - max-width: 20%; - } - - .row-cols-md-6 > * { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; - } - - .col-md-auto { - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - - .col-md-1 { - flex: 0 0 8.3333333333%; - max-width: 8.3333333333%; - } - - .col-md-2 { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; - } - - .col-md-3 { - flex: 0 0 25%; - max-width: 25%; - } - - .col-md-4 { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; - } - - .col-md-5 { - flex: 0 0 41.6666666667%; - max-width: 41.6666666667%; - } - - .col-md-6 { - flex: 0 0 50%; - max-width: 50%; - } - - .col-md-7 { - flex: 0 0 58.3333333333%; - max-width: 58.3333333333%; - } - - .col-md-8 { - flex: 0 0 66.6666666667%; - max-width: 66.6666666667%; - } - - .col-md-9 { - flex: 0 0 75%; - max-width: 75%; - } - - .col-md-10 { - flex: 0 0 83.3333333333%; - max-width: 83.3333333333%; - } - - .col-md-11 { - flex: 0 0 91.6666666667%; - max-width: 91.6666666667%; - } - - .col-md-12 { - flex: 0 0 100%; - max-width: 100%; - } - - .order-md-first { - order: -1; - } - - .order-md-last { - order: 13; - } - - .order-md-0 { - order: 0; - } - - .order-md-1 { - order: 1; - } - - .order-md-2 { - order: 2; - } - - .order-md-3 { - order: 3; - } - - .order-md-4 { - order: 4; - } - - .order-md-5 { - order: 5; - } - - .order-md-6 { - order: 6; - } - - .order-md-7 { - order: 7; - } - - .order-md-8 { - order: 8; - } - - .order-md-9 { - order: 9; - } - - .order-md-10 { - order: 10; - } - - .order-md-11 { - order: 11; - } - - .order-md-12 { - order: 12; - } - - .offset-md-0 { - margin-left: 0; - } - - .offset-md-1 { - margin-left: 8.3333333333%; - } - - .offset-md-2 { - margin-left: 16.6666666667%; - } - - .offset-md-3 { - margin-left: 25%; - } - - .offset-md-4 { - margin-left: 33.3333333333%; - } - - .offset-md-5 { - margin-left: 41.6666666667%; - } - - .offset-md-6 { - margin-left: 50%; - } - - .offset-md-7 { - margin-left: 58.3333333333%; - } - - .offset-md-8 { - margin-left: 66.6666666667%; - } - - .offset-md-9 { - margin-left: 75%; - } - - .offset-md-10 { - margin-left: 83.3333333333%; - } - - .offset-md-11 { - margin-left: 91.6666666667%; - } -} - -@media (min-width: 992px) { - .col-lg { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - - .row-cols-lg-1 > * { - flex: 0 0 100%; - max-width: 100%; - } - - .row-cols-lg-2 > * { - flex: 0 0 50%; - max-width: 50%; - } - - .row-cols-lg-3 > * { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; - } - - .row-cols-lg-4 > * { - flex: 0 0 25%; - max-width: 25%; - } - - .row-cols-lg-5 > * { - flex: 0 0 20%; - max-width: 20%; - } - - .row-cols-lg-6 > * { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; - } - - .col-lg-auto { - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - - .col-lg-1 { - flex: 0 0 8.3333333333%; - max-width: 8.3333333333%; - } - - .col-lg-2 { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; - } - - .col-lg-3 { - flex: 0 0 25%; - max-width: 25%; - } - - .col-lg-4 { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; - } - - .col-lg-5 { - flex: 0 0 41.6666666667%; - max-width: 41.6666666667%; - } - - .col-lg-6 { - flex: 0 0 50%; - max-width: 50%; - } - - .col-lg-7 { - flex: 0 0 58.3333333333%; - max-width: 58.3333333333%; - } - - .col-lg-8 { - flex: 0 0 66.6666666667%; - max-width: 66.6666666667%; - } - - .col-lg-9 { - flex: 0 0 75%; - max-width: 75%; - } - - .col-lg-10 { - flex: 0 0 83.3333333333%; - max-width: 83.3333333333%; - } - - .col-lg-11 { - flex: 0 0 91.6666666667%; - max-width: 91.6666666667%; - } - - .col-lg-12 { - flex: 0 0 100%; - max-width: 100%; - } - - .order-lg-first { - order: -1; - } - - .order-lg-last { - order: 13; - } - - .order-lg-0 { - order: 0; - } - - .order-lg-1 { - order: 1; - } - - .order-lg-2 { - order: 2; - } - - .order-lg-3 { - order: 3; - } - - .order-lg-4 { - order: 4; - } - - .order-lg-5 { - order: 5; - } - - .order-lg-6 { - order: 6; - } - - .order-lg-7 { - order: 7; - } - - .order-lg-8 { - order: 8; - } - - .order-lg-9 { - order: 9; - } - - .order-lg-10 { - order: 10; - } - - .order-lg-11 { - order: 11; - } - - .order-lg-12 { - order: 12; - } - - .offset-lg-0 { - margin-left: 0; - } - - .offset-lg-1 { - margin-left: 8.3333333333%; - } - - .offset-lg-2 { - margin-left: 16.6666666667%; - } - - .offset-lg-3 { - margin-left: 25%; - } - - .offset-lg-4 { - margin-left: 33.3333333333%; - } - - .offset-lg-5 { - margin-left: 41.6666666667%; - } - - .offset-lg-6 { - margin-left: 50%; - } - - .offset-lg-7 { - margin-left: 58.3333333333%; - } - - .offset-lg-8 { - margin-left: 66.6666666667%; - } - - .offset-lg-9 { - margin-left: 75%; - } - - .offset-lg-10 { - margin-left: 83.3333333333%; - } - - .offset-lg-11 { - margin-left: 91.6666666667%; - } -} - -@media (min-width: 1200px) { - .col-xl { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - - .row-cols-xl-1 > * { - flex: 0 0 100%; - max-width: 100%; - } - - .row-cols-xl-2 > * { - flex: 0 0 50%; - max-width: 50%; - } - - .row-cols-xl-3 > * { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; - } - - .row-cols-xl-4 > * { - flex: 0 0 25%; - max-width: 25%; - } - - .row-cols-xl-5 > * { - flex: 0 0 20%; - max-width: 20%; - } - - .row-cols-xl-6 > * { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; - } - - .col-xl-auto { - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - - .col-xl-1 { - flex: 0 0 8.3333333333%; - max-width: 8.3333333333%; - } - - .col-xl-2 { - flex: 0 0 16.6666666667%; - max-width: 16.6666666667%; - } - - .col-xl-3 { - flex: 0 0 25%; - max-width: 25%; - } - - .col-xl-4 { - flex: 0 0 33.3333333333%; - max-width: 33.3333333333%; - } - - .col-xl-5 { - flex: 0 0 41.6666666667%; - max-width: 41.6666666667%; - } - - .col-xl-6 { - flex: 0 0 50%; - max-width: 50%; - } - - .col-xl-7 { - flex: 0 0 58.3333333333%; - max-width: 58.3333333333%; - } - - .col-xl-8 { - flex: 0 0 66.6666666667%; - max-width: 66.6666666667%; - } - - .col-xl-9 { - flex: 0 0 75%; - max-width: 75%; - } - - .col-xl-10 { - flex: 0 0 83.3333333333%; - max-width: 83.3333333333%; - } - - .col-xl-11 { - flex: 0 0 91.6666666667%; - max-width: 91.6666666667%; - } - - .col-xl-12 { - flex: 0 0 100%; - max-width: 100%; - } - - .order-xl-first { - order: -1; - } - - .order-xl-last { - order: 13; - } - - .order-xl-0 { - order: 0; - } - - .order-xl-1 { - order: 1; - } - - .order-xl-2 { - order: 2; - } - - .order-xl-3 { - order: 3; - } - - .order-xl-4 { - order: 4; - } - - .order-xl-5 { - order: 5; - } - - .order-xl-6 { - order: 6; - } - - .order-xl-7 { - order: 7; - } - - .order-xl-8 { - order: 8; - } - - .order-xl-9 { - order: 9; - } - - .order-xl-10 { - order: 10; - } - - .order-xl-11 { - order: 11; - } - - .order-xl-12 { - order: 12; - } - - .offset-xl-0 { - margin-left: 0; - } - - .offset-xl-1 { - margin-left: 8.3333333333%; - } - - .offset-xl-2 { - margin-left: 16.6666666667%; - } - - .offset-xl-3 { - margin-left: 25%; - } - - .offset-xl-4 { - margin-left: 33.3333333333%; - } - - .offset-xl-5 { - margin-left: 41.6666666667%; - } - - .offset-xl-6 { - margin-left: 50%; - } - - .offset-xl-7 { - margin-left: 58.3333333333%; - } - - .offset-xl-8 { - margin-left: 66.6666666667%; - } - - .offset-xl-9 { - margin-left: 75%; - } - - .offset-xl-10 { - margin-left: 83.3333333333%; - } - - .offset-xl-11 { - margin-left: 91.6666666667%; - } -} - -.table { - width: 100%; - margin-bottom: 1rem; - color: #212529; -} - -.table th, -.table td { - padding: 0.75rem; - vertical-align: top; - border-top: 1px solid #dee2e6; -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #dee2e6; -} - -.table tbody + tbody { - border-top: 2px solid #dee2e6; -} - -.table-sm th, -.table-sm td { - padding: 0.3rem; -} - -.table-bordered { - border: 1px solid #dee2e6; -} - -.table-bordered th, -.table-bordered td { - border: 1px solid #dee2e6; -} - -.table-bordered thead th, -.table-bordered thead td { - border-bottom-width: 2px; -} - -.table-borderless th, -.table-borderless td, -.table-borderless thead th, -.table-borderless tbody + tbody { - border: 0; -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(0, 0, 0, 0.05); -} - -.table-hover tbody tr:hover { - color: #212529; - background-color: rgba(0, 0, 0, 0.075); -} - -.table-primary, -.table-primary > th, -.table-primary > td { - background-color: #c6e0f5; -} - -.table-primary th, -.table-primary td, -.table-primary thead th, -.table-primary tbody + tbody { - border-color: #95c5ed; -} - -.table-hover .table-primary:hover { - background-color: #b0d4f1; -} - -.table-hover .table-primary:hover > td, -.table-hover .table-primary:hover > th { - background-color: #b0d4f1; -} - -.table-secondary, -.table-secondary > th, -.table-secondary > td { - background-color: #d6d8db; -} - -.table-secondary th, -.table-secondary td, -.table-secondary thead th, -.table-secondary tbody + tbody { - border-color: #b3b7bb; -} - -.table-hover .table-secondary:hover { - background-color: #c8cbcf; -} - -.table-hover .table-secondary:hover > td, -.table-hover .table-secondary:hover > th { - background-color: #c8cbcf; -} - -.table-success, -.table-success > th, -.table-success > td { - background-color: #c7eed8; -} - -.table-success th, -.table-success td, -.table-success thead th, -.table-success tbody + tbody { - border-color: #98dfb6; -} - -.table-hover .table-success:hover { - background-color: #b3e8ca; -} - -.table-hover .table-success:hover > td, -.table-hover .table-success:hover > th { - background-color: #b3e8ca; -} - -.table-info, -.table-info > th, -.table-info > td { - background-color: #d6e9f9; -} - -.table-info th, -.table-info td, -.table-info thead th, -.table-info tbody + tbody { - border-color: #b3d7f5; -} - -.table-hover .table-info:hover { - background-color: #c0ddf6; -} - -.table-hover .table-info:hover > td, -.table-hover .table-info:hover > th { - background-color: #c0ddf6; -} - -.table-warning, -.table-warning > th, -.table-warning > td { - background-color: #fffacc; -} - -.table-warning th, -.table-warning td, -.table-warning thead th, -.table-warning tbody + tbody { - border-color: #fff6a1; -} - -.table-hover .table-warning:hover { - background-color: #fff8b3; -} - -.table-hover .table-warning:hover > td, -.table-hover .table-warning:hover > th { - background-color: #fff8b3; -} - -.table-danger, -.table-danger > th, -.table-danger > td { - background-color: #f7c6c5; -} - -.table-danger th, -.table-danger td, -.table-danger thead th, -.table-danger tbody + tbody { - border-color: #f09593; -} - -.table-hover .table-danger:hover { - background-color: #f4b0af; -} - -.table-hover .table-danger:hover > td, -.table-hover .table-danger:hover > th { - background-color: #f4b0af; -} - -.table-light, -.table-light > th, -.table-light > td { - background-color: #fdfdfe; -} - -.table-light th, -.table-light td, -.table-light thead th, -.table-light tbody + tbody { - border-color: #fbfcfc; -} - -.table-hover .table-light:hover { - background-color: #ececf6; -} - -.table-hover .table-light:hover > td, -.table-hover .table-light:hover > th { - background-color: #ececf6; -} - -.table-dark, -.table-dark > th, -.table-dark > td { - background-color: #c6c8ca; -} - -.table-dark th, -.table-dark td, -.table-dark thead th, -.table-dark tbody + tbody { - border-color: #95999c; -} - -.table-hover .table-dark:hover { - background-color: #b9bbbe; -} - -.table-hover .table-dark:hover > td, -.table-hover .table-dark:hover > th { - background-color: #b9bbbe; -} - -.table-active, -.table-active > th, -.table-active > td { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover > td, -.table-hover .table-active:hover > th { - background-color: rgba(0, 0, 0, 0.075); -} - -.table .thead-dark th { - color: #fff; - background-color: #343a40; - border-color: #454d55; -} - -.table .thead-light th { - color: #495057; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.table-dark { - color: #fff; - background-color: #343a40; -} - -.table-dark th, -.table-dark td, -.table-dark thead th { - border-color: #454d55; -} - -.table-dark.table-bordered { - border: 0; -} - -.table-dark.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(255, 255, 255, 0.05); -} - -.table-dark.table-hover tbody tr:hover { - color: #fff; - background-color: rgba(255, 255, 255, 0.075); -} - -@media (max-width: 575.98px) { - .table-responsive-sm { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - - .table-responsive-sm > .table-bordered { - border: 0; - } -} - -@media (max-width: 767.98px) { - .table-responsive-md { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - - .table-responsive-md > .table-bordered { - border: 0; - } -} - -@media (max-width: 991.98px) { - .table-responsive-lg { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - - .table-responsive-lg > .table-bordered { - border: 0; - } -} - -@media (max-width: 1199.98px) { - .table-responsive-xl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - - .table-responsive-xl > .table-bordered { - border: 0; - } -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; -} - -.table-responsive > .table-bordered { - border: 0; -} - -.form-control { - display: block; - width: 100%; - height: calc(1.6em + 0.75rem + 2px); - padding: 0.375rem 0.75rem; - font-size: 0.9rem; - font-weight: 400; - line-height: 1.6; - color: #495057; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: 0.25rem; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .form-control { - transition: none; - } -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0; -} - -.form-control:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 #495057; -} - -.form-control:focus { - color: #495057; - background-color: #fff; - border-color: #a1cbef; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(52, 144, 220, 0.25); -} - -.form-control::-webkit-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::-moz-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control:-ms-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::-ms-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control:disabled, -.form-control[readonly] { - background-color: #e9ecef; - opacity: 1; -} - -select.form-control:focus::-ms-value { - color: #495057; - background-color: #fff; -} - -.form-control-file, -.form-control-range { - display: block; - width: 100%; -} - -.col-form-label { - padding-top: calc(0.375rem + 1px); - padding-bottom: calc(0.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.6; -} - -.col-form-label-lg { - padding-top: calc(0.5rem + 1px); - padding-bottom: calc(0.5rem + 1px); - font-size: 1.125rem; - line-height: 1.5; -} - -.col-form-label-sm { - padding-top: calc(0.25rem + 1px); - padding-bottom: calc(0.25rem + 1px); - font-size: 0.7875rem; - line-height: 1.5; -} - -.form-control-plaintext { - display: block; - width: 100%; - padding: 0.375rem 0; - margin-bottom: 0; - font-size: 0.9rem; - line-height: 1.6; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0; -} - -.form-control-plaintext.form-control-sm, -.form-control-plaintext.form-control-lg { - padding-right: 0; - padding-left: 0; -} - -.form-control-sm { - height: calc(1.5em + 0.5rem + 2px); - padding: 0.25rem 0.5rem; - font-size: 0.7875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.form-control-lg { - height: calc(1.5em + 1rem + 2px); - padding: 0.5rem 1rem; - font-size: 1.125rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -select.form-control[size], -select.form-control[multiple] { - height: auto; -} - -textarea.form-control { - height: auto; -} - -.form-group { - margin-bottom: 1rem; -} - -.form-text { - display: block; - margin-top: 0.25rem; -} - -.form-row { - display: flex; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px; -} - -.form-row > .col, -.form-row > [class*=col-] { - padding-right: 5px; - padding-left: 5px; -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem; -} - -.form-check-input { - position: absolute; - margin-top: 0.3rem; - margin-left: -1.25rem; -} - -.form-check-input[disabled] ~ .form-check-label, -.form-check-input:disabled ~ .form-check-label { - color: #6c757d; -} - -.form-check-label { - margin-bottom: 0; -} - -.form-check-inline { - display: inline-flex; - align-items: center; - padding-left: 0; - margin-right: 0.75rem; -} - -.form-check-inline .form-check-input { - position: static; - margin-top: 0; - margin-right: 0.3125rem; - margin-left: 0; -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 80%; - color: #38c172; -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: 0.1rem; - font-size: 0.7875rem; - line-height: 1.6; - color: #fff; - background-color: rgba(56, 193, 114, 0.9); - border-radius: 0.25rem; -} - -.was-validated :valid ~ .valid-feedback, -.was-validated :valid ~ .valid-tooltip, -.is-valid ~ .valid-feedback, -.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .form-control:valid, -.form-control.is-valid { - border-color: #38c172; - padding-right: calc(1.6em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2338c172' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(0.4em + 0.1875rem) center; - background-size: calc(0.8em + 0.375rem) calc(0.8em + 0.375rem); -} - -.was-validated .form-control:valid:focus, -.form-control.is-valid:focus { - border-color: #38c172; - box-shadow: 0 0 0 0.2rem rgba(56, 193, 114, 0.25); -} - -.was-validated textarea.form-control:valid, -textarea.form-control.is-valid { - padding-right: calc(1.6em + 0.75rem); - background-position: top calc(0.4em + 0.1875rem) right calc(0.4em + 0.1875rem); -} - -.was-validated .custom-select:valid, -.custom-select.is-valid { - border-color: #38c172; - padding-right: calc(0.75em + 2.3125rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2338c172' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.8em + 0.375rem) calc(0.8em + 0.375rem); -} - -.was-validated .custom-select:valid:focus, -.custom-select.is-valid:focus { - border-color: #38c172; - box-shadow: 0 0 0 0.2rem rgba(56, 193, 114, 0.25); -} - -.was-validated .form-check-input:valid ~ .form-check-label, -.form-check-input.is-valid ~ .form-check-label { - color: #38c172; -} - -.was-validated .form-check-input:valid ~ .valid-feedback, -.was-validated .form-check-input:valid ~ .valid-tooltip, -.form-check-input.is-valid ~ .valid-feedback, -.form-check-input.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .custom-control-input:valid ~ .custom-control-label, -.custom-control-input.is-valid ~ .custom-control-label { - color: #38c172; -} - -.was-validated .custom-control-input:valid ~ .custom-control-label::before, -.custom-control-input.is-valid ~ .custom-control-label::before { - border-color: #38c172; -} - -.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, -.custom-control-input.is-valid:checked ~ .custom-control-label::before { - border-color: #5cd08d; - background-color: #5cd08d; -} - -.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, -.custom-control-input.is-valid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 0.2rem rgba(56, 193, 114, 0.25); -} - -.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, -.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { - border-color: #38c172; -} - -.was-validated .custom-file-input:valid ~ .custom-file-label, -.custom-file-input.is-valid ~ .custom-file-label { - border-color: #38c172; -} - -.was-validated .custom-file-input:valid:focus ~ .custom-file-label, -.custom-file-input.is-valid:focus ~ .custom-file-label { - border-color: #38c172; - box-shadow: 0 0 0 0.2rem rgba(56, 193, 114, 0.25); -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 80%; - color: #e3342f; -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: 0.1rem; - font-size: 0.7875rem; - line-height: 1.6; - color: #fff; - background-color: rgba(227, 52, 47, 0.9); - border-radius: 0.25rem; -} - -.was-validated :invalid ~ .invalid-feedback, -.was-validated :invalid ~ .invalid-tooltip, -.is-invalid ~ .invalid-feedback, -.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .form-control:invalid, -.form-control.is-invalid { - border-color: #e3342f; - padding-right: calc(1.6em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e3342f' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e3342f' stroke='none'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(0.4em + 0.1875rem) center; - background-size: calc(0.8em + 0.375rem) calc(0.8em + 0.375rem); -} - -.was-validated .form-control:invalid:focus, -.form-control.is-invalid:focus { - border-color: #e3342f; - box-shadow: 0 0 0 0.2rem rgba(227, 52, 47, 0.25); -} - -.was-validated textarea.form-control:invalid, -textarea.form-control.is-invalid { - padding-right: calc(1.6em + 0.75rem); - background-position: top calc(0.4em + 0.1875rem) right calc(0.4em + 0.1875rem); -} - -.was-validated .custom-select:invalid, -.custom-select.is-invalid { - border-color: #e3342f; - padding-right: calc(0.75em + 2.3125rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e3342f' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e3342f' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.8em + 0.375rem) calc(0.8em + 0.375rem); -} - -.was-validated .custom-select:invalid:focus, -.custom-select.is-invalid:focus { - border-color: #e3342f; - box-shadow: 0 0 0 0.2rem rgba(227, 52, 47, 0.25); -} - -.was-validated .form-check-input:invalid ~ .form-check-label, -.form-check-input.is-invalid ~ .form-check-label { - color: #e3342f; -} - -.was-validated .form-check-input:invalid ~ .invalid-feedback, -.was-validated .form-check-input:invalid ~ .invalid-tooltip, -.form-check-input.is-invalid ~ .invalid-feedback, -.form-check-input.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .custom-control-input:invalid ~ .custom-control-label, -.custom-control-input.is-invalid ~ .custom-control-label { - color: #e3342f; -} - -.was-validated .custom-control-input:invalid ~ .custom-control-label::before, -.custom-control-input.is-invalid ~ .custom-control-label::before { - border-color: #e3342f; -} - -.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, -.custom-control-input.is-invalid:checked ~ .custom-control-label::before { - border-color: #e9605c; - background-color: #e9605c; -} - -.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, -.custom-control-input.is-invalid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 0.2rem rgba(227, 52, 47, 0.25); -} - -.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, -.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { - border-color: #e3342f; -} - -.was-validated .custom-file-input:invalid ~ .custom-file-label, -.custom-file-input.is-invalid ~ .custom-file-label { - border-color: #e3342f; -} - -.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, -.custom-file-input.is-invalid:focus ~ .custom-file-label { - border-color: #e3342f; - box-shadow: 0 0 0 0.2rem rgba(227, 52, 47, 0.25); -} - -.form-inline { - display: flex; - flex-flow: row wrap; - align-items: center; -} - -.form-inline .form-check { - width: 100%; -} - -@media (min-width: 576px) { - .form-inline label { - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 0; - } - - .form-inline .form-group { - display: flex; - flex: 0 0 auto; - flex-flow: row wrap; - align-items: center; - margin-bottom: 0; - } - - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - - .form-inline .form-control-plaintext { - display: inline-block; - } - - .form-inline .input-group, - .form-inline .custom-select { - width: auto; - } - - .form-inline .form-check { - display: flex; - align-items: center; - justify-content: center; - width: auto; - padding-left: 0; - } - - .form-inline .form-check-input { - position: relative; - flex-shrink: 0; - margin-top: 0; - margin-right: 0.25rem; - margin-left: 0; - } - - .form-inline .custom-control { - align-items: center; - justify-content: center; - } - - .form-inline .custom-control-label { - margin-bottom: 0; - } -} - -.btn { - display: inline-block; - font-weight: 400; - color: #212529; - text-align: center; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 0.9rem; - line-height: 1.6; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .btn { - transition: none; - } -} - -.btn:hover { - color: #212529; - text-decoration: none; -} - -.btn:focus, -.btn.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(52, 144, 220, 0.25); -} - -.btn.disabled, -.btn:disabled { - opacity: 0.65; -} - -a.btn.disabled, -fieldset:disabled a.btn { - pointer-events: none; -} - -.btn-primary { - color: #fff; - background-color: #3490dc; - border-color: #3490dc; -} - -.btn-primary:hover { - color: #fff; - background-color: #227dc7; - border-color: #2176bd; -} - -.btn-primary:focus, -.btn-primary.focus { - color: #fff; - background-color: #227dc7; - border-color: #2176bd; - box-shadow: 0 0 0 0.2rem rgba(82, 161, 225, 0.5); -} - -.btn-primary.disabled, -.btn-primary:disabled { - color: #fff; - background-color: #3490dc; - border-color: #3490dc; -} - -.btn-primary:not(:disabled):not(.disabled):active, -.btn-primary:not(:disabled):not(.disabled).active, -.show > .btn-primary.dropdown-toggle { - color: #fff; - background-color: #2176bd; - border-color: #1f6fb2; -} - -.btn-primary:not(:disabled):not(.disabled):active:focus, -.btn-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(82, 161, 225, 0.5); -} - -.btn-secondary { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-secondary:hover { - color: #fff; - background-color: #5a6268; - border-color: #545b62; -} - -.btn-secondary:focus, -.btn-secondary.focus { - color: #fff; - background-color: #5a6268; - border-color: #545b62; - box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); -} - -.btn-secondary.disabled, -.btn-secondary:disabled { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-secondary:not(:disabled):not(.disabled):active, -.btn-secondary:not(:disabled):not(.disabled).active, -.show > .btn-secondary.dropdown-toggle { - color: #fff; - background-color: #545b62; - border-color: #4e555b; -} - -.btn-secondary:not(:disabled):not(.disabled):active:focus, -.btn-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); -} - -.btn-success { - color: #fff; - background-color: #38c172; - border-color: #38c172; -} - -.btn-success:hover { - color: #fff; - background-color: #2fa360; - border-color: #2d995b; -} - -.btn-success:focus, -.btn-success.focus { - color: #fff; - background-color: #2fa360; - border-color: #2d995b; - box-shadow: 0 0 0 0.2rem rgba(86, 202, 135, 0.5); -} - -.btn-success.disabled, -.btn-success:disabled { - color: #fff; - background-color: #38c172; - border-color: #38c172; -} - -.btn-success:not(:disabled):not(.disabled):active, -.btn-success:not(:disabled):not(.disabled).active, -.show > .btn-success.dropdown-toggle { - color: #fff; - background-color: #2d995b; - border-color: #2a9055; -} - -.btn-success:not(:disabled):not(.disabled):active:focus, -.btn-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(86, 202, 135, 0.5); -} - -.btn-info { - color: #212529; - background-color: #6cb2eb; - border-color: #6cb2eb; -} - -.btn-info:hover { - color: #fff; - background-color: #4aa0e6; - border-color: #3f9ae5; -} - -.btn-info:focus, -.btn-info.focus { - color: #fff; - background-color: #4aa0e6; - border-color: #3f9ae5; - box-shadow: 0 0 0 0.2rem rgba(97, 157, 206, 0.5); -} - -.btn-info.disabled, -.btn-info:disabled { - color: #212529; - background-color: #6cb2eb; - border-color: #6cb2eb; -} - -.btn-info:not(:disabled):not(.disabled):active, -.btn-info:not(:disabled):not(.disabled).active, -.show > .btn-info.dropdown-toggle { - color: #fff; - background-color: #3f9ae5; - border-color: #3495e3; -} - -.btn-info:not(:disabled):not(.disabled):active:focus, -.btn-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(97, 157, 206, 0.5); -} - -.btn-warning { - color: #212529; - background-color: #ffed4a; - border-color: #ffed4a; -} - -.btn-warning:hover { - color: #212529; - background-color: #ffe924; - border-color: #ffe817; -} - -.btn-warning:focus, -.btn-warning.focus { - color: #212529; - background-color: #ffe924; - border-color: #ffe817; - box-shadow: 0 0 0 0.2rem rgba(222, 207, 69, 0.5); -} - -.btn-warning.disabled, -.btn-warning:disabled { - color: #212529; - background-color: #ffed4a; - border-color: #ffed4a; -} - -.btn-warning:not(:disabled):not(.disabled):active, -.btn-warning:not(:disabled):not(.disabled).active, -.show > .btn-warning.dropdown-toggle { - color: #212529; - background-color: #ffe817; - border-color: #ffe70a; -} - -.btn-warning:not(:disabled):not(.disabled):active:focus, -.btn-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(222, 207, 69, 0.5); -} - -.btn-danger { - color: #fff; - background-color: #e3342f; - border-color: #e3342f; -} - -.btn-danger:hover { - color: #fff; - background-color: #d0211c; - border-color: #c51f1a; -} - -.btn-danger:focus, -.btn-danger.focus { - color: #fff; - background-color: #d0211c; - border-color: #c51f1a; - box-shadow: 0 0 0 0.2rem rgba(231, 82, 78, 0.5); -} - -.btn-danger.disabled, -.btn-danger:disabled { - color: #fff; - background-color: #e3342f; - border-color: #e3342f; -} - -.btn-danger:not(:disabled):not(.disabled):active, -.btn-danger:not(:disabled):not(.disabled).active, -.show > .btn-danger.dropdown-toggle { - color: #fff; - background-color: #c51f1a; - border-color: #b91d19; -} - -.btn-danger:not(:disabled):not(.disabled):active:focus, -.btn-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(231, 82, 78, 0.5); -} - -.btn-light { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-light:hover { - color: #212529; - background-color: #e2e6ea; - border-color: #dae0e5; -} - -.btn-light:focus, -.btn-light.focus { - color: #212529; - background-color: #e2e6ea; - border-color: #dae0e5; - box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); -} - -.btn-light.disabled, -.btn-light:disabled { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-light:not(:disabled):not(.disabled):active, -.btn-light:not(:disabled):not(.disabled).active, -.show > .btn-light.dropdown-toggle { - color: #212529; - background-color: #dae0e5; - border-color: #d3d9df; -} - -.btn-light:not(:disabled):not(.disabled):active:focus, -.btn-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); -} - -.btn-dark { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-dark:hover { - color: #fff; - background-color: #23272b; - border-color: #1d2124; -} - -.btn-dark:focus, -.btn-dark.focus { - color: #fff; - background-color: #23272b; - border-color: #1d2124; - box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); -} - -.btn-dark.disabled, -.btn-dark:disabled { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-dark:not(:disabled):not(.disabled):active, -.btn-dark:not(:disabled):not(.disabled).active, -.show > .btn-dark.dropdown-toggle { - color: #fff; - background-color: #1d2124; - border-color: #171a1d; -} - -.btn-dark:not(:disabled):not(.disabled):active:focus, -.btn-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); -} - -.btn-outline-primary { - color: #3490dc; - border-color: #3490dc; -} - -.btn-outline-primary:hover { - color: #fff; - background-color: #3490dc; - border-color: #3490dc; -} - -.btn-outline-primary:focus, -.btn-outline-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 144, 220, 0.5); -} - -.btn-outline-primary.disabled, -.btn-outline-primary:disabled { - color: #3490dc; - background-color: transparent; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active, -.btn-outline-primary:not(:disabled):not(.disabled).active, -.show > .btn-outline-primary.dropdown-toggle { - color: #fff; - background-color: #3490dc; - border-color: #3490dc; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active:focus, -.btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(52, 144, 220, 0.5); -} - -.btn-outline-secondary { - color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:hover { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:focus, -.btn-outline-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-secondary.disabled, -.btn-outline-secondary:disabled { - color: #6c757d; - background-color: transparent; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active, -.btn-outline-secondary:not(:disabled):not(.disabled).active, -.show > .btn-outline-secondary.dropdown-toggle { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, -.btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-success { - color: #38c172; - border-color: #38c172; -} - -.btn-outline-success:hover { - color: #fff; - background-color: #38c172; - border-color: #38c172; -} - -.btn-outline-success:focus, -.btn-outline-success.focus { - box-shadow: 0 0 0 0.2rem rgba(56, 193, 114, 0.5); -} - -.btn-outline-success.disabled, -.btn-outline-success:disabled { - color: #38c172; - background-color: transparent; -} - -.btn-outline-success:not(:disabled):not(.disabled):active, -.btn-outline-success:not(:disabled):not(.disabled).active, -.show > .btn-outline-success.dropdown-toggle { - color: #fff; - background-color: #38c172; - border-color: #38c172; -} - -.btn-outline-success:not(:disabled):not(.disabled):active:focus, -.btn-outline-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(56, 193, 114, 0.5); -} - -.btn-outline-info { - color: #6cb2eb; - border-color: #6cb2eb; -} - -.btn-outline-info:hover { - color: #212529; - background-color: #6cb2eb; - border-color: #6cb2eb; -} - -.btn-outline-info:focus, -.btn-outline-info.focus { - box-shadow: 0 0 0 0.2rem rgba(108, 178, 235, 0.5); -} - -.btn-outline-info.disabled, -.btn-outline-info:disabled { - color: #6cb2eb; - background-color: transparent; -} - -.btn-outline-info:not(:disabled):not(.disabled):active, -.btn-outline-info:not(:disabled):not(.disabled).active, -.show > .btn-outline-info.dropdown-toggle { - color: #212529; - background-color: #6cb2eb; - border-color: #6cb2eb; -} - -.btn-outline-info:not(:disabled):not(.disabled):active:focus, -.btn-outline-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(108, 178, 235, 0.5); -} - -.btn-outline-warning { - color: #ffed4a; - border-color: #ffed4a; -} - -.btn-outline-warning:hover { - color: #212529; - background-color: #ffed4a; - border-color: #ffed4a; -} - -.btn-outline-warning:focus, -.btn-outline-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 237, 74, 0.5); -} - -.btn-outline-warning.disabled, -.btn-outline-warning:disabled { - color: #ffed4a; - background-color: transparent; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active, -.btn-outline-warning:not(:disabled):not(.disabled).active, -.show > .btn-outline-warning.dropdown-toggle { - color: #212529; - background-color: #ffed4a; - border-color: #ffed4a; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active:focus, -.btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 237, 74, 0.5); -} - -.btn-outline-danger { - color: #e3342f; - border-color: #e3342f; -} - -.btn-outline-danger:hover { - color: #fff; - background-color: #e3342f; - border-color: #e3342f; -} - -.btn-outline-danger:focus, -.btn-outline-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(227, 52, 47, 0.5); -} - -.btn-outline-danger.disabled, -.btn-outline-danger:disabled { - color: #e3342f; - background-color: transparent; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active, -.btn-outline-danger:not(:disabled):not(.disabled).active, -.show > .btn-outline-danger.dropdown-toggle { - color: #fff; - background-color: #e3342f; - border-color: #e3342f; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active:focus, -.btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(227, 52, 47, 0.5); -} - -.btn-outline-light { - color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:hover { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:focus, -.btn-outline-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-light.disabled, -.btn-outline-light:disabled { - color: #f8f9fa; - background-color: transparent; -} - -.btn-outline-light:not(:disabled):not(.disabled):active, -.btn-outline-light:not(:disabled):not(.disabled).active, -.show > .btn-outline-light.dropdown-toggle { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:not(:disabled):not(.disabled):active:focus, -.btn-outline-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-dark { - color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:hover { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:focus, -.btn-outline-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-outline-dark.disabled, -.btn-outline-dark:disabled { - color: #343a40; - background-color: transparent; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active, -.btn-outline-dark:not(:disabled):not(.disabled).active, -.show > .btn-outline-dark.dropdown-toggle { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active:focus, -.btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-link { - font-weight: 400; - color: #3490dc; - text-decoration: none; -} - -.btn-link:hover { - color: #1d68a7; - text-decoration: underline; -} - -.btn-link:focus, -.btn-link.focus { - text-decoration: underline; - box-shadow: none; -} - -.btn-link:disabled, -.btn-link.disabled { - color: #6c757d; - pointer-events: none; -} - -.btn-lg, -.btn-group-lg > .btn { - padding: 0.5rem 1rem; - font-size: 1.125rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -.btn-sm, -.btn-group-sm > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.7875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.btn-block { - display: block; - width: 100%; -} - -.btn-block + .btn-block { - margin-top: 0.5rem; -} - -input[type=submit].btn-block, -input[type=reset].btn-block, -input[type=button].btn-block { - width: 100%; -} - -.fade { - transition: opacity 0.15s linear; -} - -@media (prefers-reduced-motion: reduce) { - .fade { - transition: none; - } -} - -.fade:not(.show) { - opacity: 0; -} - -.collapse:not(.show) { - display: none; -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - transition: height 0.35s ease; -} - -@media (prefers-reduced-motion: reduce) { - .collapsing { - transition: none; - } -} - -.dropup, -.dropright, -.dropdown, -.dropleft { - position: relative; -} - -.dropdown-toggle { - white-space: nowrap; -} - -.dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; -} - -.dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: 0.5rem 0; - margin: 0.125rem 0 0; - font-size: 0.9rem; - color: #212529; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 0.25rem; -} - -.dropdown-menu-left { - right: auto; - left: 0; -} - -.dropdown-menu-right { - right: 0; - left: auto; -} - -@media (min-width: 576px) { - .dropdown-menu-sm-left { - right: auto; - left: 0; - } - - .dropdown-menu-sm-right { - right: 0; - left: auto; - } -} - -@media (min-width: 768px) { - .dropdown-menu-md-left { - right: auto; - left: 0; - } - - .dropdown-menu-md-right { - right: 0; - left: auto; - } -} - -@media (min-width: 992px) { - .dropdown-menu-lg-left { - right: auto; - left: 0; - } - - .dropdown-menu-lg-right { - right: 0; - left: auto; - } -} - -@media (min-width: 1200px) { - .dropdown-menu-xl-left { - right: auto; - left: 0; - } - - .dropdown-menu-xl-right { - right: 0; - left: auto; - } -} - -.dropup .dropdown-menu { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: 0.125rem; -} - -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0; - border-right: 0.3em solid transparent; - border-bottom: 0.3em solid; - border-left: 0.3em solid transparent; -} - -.dropup .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropright .dropdown-menu { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: 0.125rem; -} - -.dropright .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0; - border-bottom: 0.3em solid transparent; - border-left: 0.3em solid; -} - -.dropright .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropright .dropdown-toggle::after { - vertical-align: 0; -} - -.dropleft .dropdown-menu { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: 0.125rem; -} - -.dropleft .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; -} - -.dropleft .dropdown-toggle::after { - display: none; -} - -.dropleft .dropdown-toggle::before { - display: inline-block; - margin-right: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0.3em solid; - border-bottom: 0.3em solid transparent; -} - -.dropleft .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropleft .dropdown-toggle::before { - vertical-align: 0; -} - -.dropdown-menu[x-placement^=top], -.dropdown-menu[x-placement^=right], -.dropdown-menu[x-placement^=bottom], -.dropdown-menu[x-placement^=left] { - right: auto; - bottom: auto; -} - -.dropdown-divider { - height: 0; - margin: 0.5rem 0; - overflow: hidden; - border-top: 1px solid #e9ecef; -} - -.dropdown-item { - display: block; - width: 100%; - padding: 0.25rem 1.5rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - white-space: nowrap; - background-color: transparent; - border: 0; -} - -.dropdown-item:hover, -.dropdown-item:focus { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa; -} - -.dropdown-item.active, -.dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #3490dc; -} - -.dropdown-item.disabled, -.dropdown-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: transparent; -} - -.dropdown-menu.show { - display: block; -} - -.dropdown-header { - display: block; - padding: 0.5rem 1.5rem; - margin-bottom: 0; - font-size: 0.7875rem; - color: #6c757d; - white-space: nowrap; -} - -.dropdown-item-text { - display: block; - padding: 0.25rem 1.5rem; - color: #212529; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-flex; - vertical-align: middle; -} - -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - flex: 1 1 auto; -} - -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover { - z-index: 1; -} - -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn:focus, -.btn-group-vertical > .btn:active, -.btn-group-vertical > .btn.active { - z-index: 1; -} - -.btn-toolbar { - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} - -.btn-toolbar .input-group { - width: auto; -} - -.btn-group > .btn:not(:first-child), -.btn-group > .btn-group:not(:first-child) { - margin-left: -1px; -} - -.btn-group > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group > .btn:not(:first-child), -.btn-group > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.dropdown-toggle-split { - padding-right: 0.5625rem; - padding-left: 0.5625rem; -} - -.dropdown-toggle-split::after, -.dropup .dropdown-toggle-split::after, -.dropright .dropdown-toggle-split::after { - margin-left: 0; -} - -.dropleft .dropdown-toggle-split::before { - margin-right: 0; -} - -.btn-sm + .dropdown-toggle-split, -.btn-group-sm > .btn + .dropdown-toggle-split { - padding-right: 0.375rem; - padding-left: 0.375rem; -} - -.btn-lg + .dropdown-toggle-split, -.btn-group-lg > .btn + .dropdown-toggle-split { - padding-right: 0.75rem; - padding-left: 0.75rem; -} - -.btn-group-vertical { - flex-direction: column; - align-items: flex-start; - justify-content: center; -} - -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group { - width: 100%; -} - -.btn-group-vertical > .btn:not(:first-child), -.btn-group-vertical > .btn-group:not(:first-child) { - margin-top: -1px; -} - -.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group-vertical > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical > .btn:not(:first-child), -.btn-group-vertical > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.btn-group-toggle > .btn, -.btn-group-toggle > .btn-group > .btn { - margin-bottom: 0; -} - -.btn-group-toggle > .btn input[type=radio], -.btn-group-toggle > .btn input[type=checkbox], -.btn-group-toggle > .btn-group > .btn input[type=radio], -.btn-group-toggle > .btn-group > .btn input[type=checkbox] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} - -.input-group { - position: relative; - display: flex; - flex-wrap: wrap; - align-items: stretch; - width: 100%; -} - -.input-group > .form-control, -.input-group > .form-control-plaintext, -.input-group > .custom-select, -.input-group > .custom-file { - position: relative; - flex: 1 1 0%; - min-width: 0; - margin-bottom: 0; -} - -.input-group > .form-control + .form-control, -.input-group > .form-control + .custom-select, -.input-group > .form-control + .custom-file, -.input-group > .form-control-plaintext + .form-control, -.input-group > .form-control-plaintext + .custom-select, -.input-group > .form-control-plaintext + .custom-file, -.input-group > .custom-select + .form-control, -.input-group > .custom-select + .custom-select, -.input-group > .custom-select + .custom-file, -.input-group > .custom-file + .form-control, -.input-group > .custom-file + .custom-select, -.input-group > .custom-file + .custom-file { - margin-left: -1px; -} - -.input-group > .form-control:focus, -.input-group > .custom-select:focus, -.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { - z-index: 3; -} - -.input-group > .custom-file .custom-file-input:focus { - z-index: 4; -} - -.input-group > .form-control:not(:last-child), -.input-group > .custom-select:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .form-control:not(:first-child), -.input-group > .custom-select:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.input-group > .custom-file { - display: flex; - align-items: center; -} - -.input-group > .custom-file:not(:last-child) .custom-file-label, -.input-group > .custom-file:not(:last-child) .custom-file-label::after { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .custom-file:not(:first-child) .custom-file-label { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.input-group-prepend, -.input-group-append { - display: flex; -} - -.input-group-prepend .btn, -.input-group-append .btn { - position: relative; - z-index: 2; -} - -.input-group-prepend .btn:focus, -.input-group-append .btn:focus { - z-index: 3; -} - -.input-group-prepend .btn + .btn, -.input-group-prepend .btn + .input-group-text, -.input-group-prepend .input-group-text + .input-group-text, -.input-group-prepend .input-group-text + .btn, -.input-group-append .btn + .btn, -.input-group-append .btn + .input-group-text, -.input-group-append .input-group-text + .input-group-text, -.input-group-append .input-group-text + .btn { - margin-left: -1px; -} - -.input-group-prepend { - margin-right: -1px; -} - -.input-group-append { - margin-left: -1px; -} - -.input-group-text { - display: flex; - align-items: center; - padding: 0.375rem 0.75rem; - margin-bottom: 0; - font-size: 0.9rem; - font-weight: 400; - line-height: 1.6; - color: #495057; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.input-group-text input[type=radio], -.input-group-text input[type=checkbox] { - margin-top: 0; -} - -.input-group-lg > .form-control:not(textarea), -.input-group-lg > .custom-select { - height: calc(1.5em + 1rem + 2px); -} - -.input-group-lg > .form-control, -.input-group-lg > .custom-select, -.input-group-lg > .input-group-prepend > .input-group-text, -.input-group-lg > .input-group-append > .input-group-text, -.input-group-lg > .input-group-prepend > .btn, -.input-group-lg > .input-group-append > .btn { - padding: 0.5rem 1rem; - font-size: 1.125rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -.input-group-sm > .form-control:not(textarea), -.input-group-sm > .custom-select { - height: calc(1.5em + 0.5rem + 2px); -} - -.input-group-sm > .form-control, -.input-group-sm > .custom-select, -.input-group-sm > .input-group-prepend > .input-group-text, -.input-group-sm > .input-group-append > .input-group-text, -.input-group-sm > .input-group-prepend > .btn, -.input-group-sm > .input-group-append > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.7875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.input-group-lg > .custom-select, -.input-group-sm > .custom-select { - padding-right: 1.75rem; -} - -.input-group > .input-group-prepend > .btn, -.input-group > .input-group-prepend > .input-group-text, -.input-group > .input-group-append:not(:last-child) > .btn, -.input-group > .input-group-append:not(:last-child) > .input-group-text, -.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .input-group-append > .btn, -.input-group > .input-group-append > .input-group-text, -.input-group > .input-group-prepend:not(:first-child) > .btn, -.input-group > .input-group-prepend:not(:first-child) > .input-group-text, -.input-group > .input-group-prepend:first-child > .btn:not(:first-child), -.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.custom-control { - position: relative; - display: block; - min-height: 1.44rem; - padding-left: 1.5rem; -} - -.custom-control-inline { - display: inline-flex; - margin-right: 1rem; -} - -.custom-control-input { - position: absolute; - left: 0; - z-index: -1; - width: 1rem; - height: 1.22rem; - opacity: 0; -} - -.custom-control-input:checked ~ .custom-control-label::before { - color: #fff; - border-color: #3490dc; - background-color: #3490dc; -} - -.custom-control-input:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 0.2rem rgba(52, 144, 220, 0.25); -} - -.custom-control-input:focus:not(:checked) ~ .custom-control-label::before { - border-color: #a1cbef; -} - -.custom-control-input:not(:disabled):active ~ .custom-control-label::before { - color: #fff; - background-color: #cce3f6; - border-color: #cce3f6; -} - -.custom-control-input[disabled] ~ .custom-control-label, -.custom-control-input:disabled ~ .custom-control-label { - color: #6c757d; -} - -.custom-control-input[disabled] ~ .custom-control-label::before, -.custom-control-input:disabled ~ .custom-control-label::before { - background-color: #e9ecef; -} - -.custom-control-label { - position: relative; - margin-bottom: 0; - vertical-align: top; -} - -.custom-control-label::before { - position: absolute; - top: 0.22rem; - left: -1.5rem; - display: block; - width: 1rem; - height: 1rem; - pointer-events: none; - content: ""; - background-color: #fff; - border: #adb5bd solid 1px; -} - -.custom-control-label::after { - position: absolute; - top: 0.22rem; - left: -1.5rem; - display: block; - width: 1rem; - height: 1rem; - content: ""; - background: no-repeat 50%/50% 50%; -} - -.custom-checkbox .custom-control-label::before { - border-radius: 0.25rem; -} - -.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); -} - -.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { - border-color: #3490dc; - background-color: #3490dc; -} - -.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); -} - -.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(52, 144, 220, 0.5); -} - -.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { - background-color: rgba(52, 144, 220, 0.5); -} - -.custom-radio .custom-control-label::before { - border-radius: 50%; -} - -.custom-radio .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); -} - -.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(52, 144, 220, 0.5); -} - -.custom-switch { - padding-left: 2.25rem; -} - -.custom-switch .custom-control-label::before { - left: -2.25rem; - width: 1.75rem; - pointer-events: all; - border-radius: 0.5rem; -} - -.custom-switch .custom-control-label::after { - top: calc(0.22rem + 2px); - left: calc(-2.25rem + 2px); - width: calc(1rem - 4px); - height: calc(1rem - 4px); - background-color: #adb5bd; - border-radius: 0.5rem; - transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .custom-switch .custom-control-label::after { - transition: none; - } -} - -.custom-switch .custom-control-input:checked ~ .custom-control-label::after { - background-color: #fff; - transform: translateX(0.75rem); -} - -.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(52, 144, 220, 0.5); -} - -.custom-select { - display: inline-block; - width: 100%; - height: calc(1.6em + 0.75rem + 2px); - padding: 0.375rem 1.75rem 0.375rem 0.75rem; - font-size: 0.9rem; - font-weight: 400; - line-height: 1.6; - color: #495057; - vertical-align: middle; - background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; - border: 1px solid #ced4da; - border-radius: 0.25rem; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.custom-select:focus { - border-color: #a1cbef; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(52, 144, 220, 0.25); -} - -.custom-select:focus::-ms-value { - color: #495057; - background-color: #fff; -} - -.custom-select[multiple], -.custom-select[size]:not([size="1"]) { - height: auto; - padding-right: 0.75rem; - background-image: none; -} - -.custom-select:disabled { - color: #6c757d; - background-color: #e9ecef; -} - -.custom-select::-ms-expand { - display: none; -} - -.custom-select:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 #495057; -} - -.custom-select-sm { - height: calc(1.5em + 0.5rem + 2px); - padding-top: 0.25rem; - padding-bottom: 0.25rem; - padding-left: 0.5rem; - font-size: 0.7875rem; -} - -.custom-select-lg { - height: calc(1.5em + 1rem + 2px); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - font-size: 1.125rem; -} - -.custom-file { - position: relative; - display: inline-block; - width: 100%; - height: calc(1.6em + 0.75rem + 2px); - margin-bottom: 0; -} - -.custom-file-input { - position: relative; - z-index: 2; - width: 100%; - height: calc(1.6em + 0.75rem + 2px); - margin: 0; - opacity: 0; -} - -.custom-file-input:focus ~ .custom-file-label { - border-color: #a1cbef; - box-shadow: 0 0 0 0.2rem rgba(52, 144, 220, 0.25); -} - -.custom-file-input[disabled] ~ .custom-file-label, -.custom-file-input:disabled ~ .custom-file-label { - background-color: #e9ecef; -} - -.custom-file-input:lang(en) ~ .custom-file-label::after { - content: "Browse"; -} - -.custom-file-input ~ .custom-file-label[data-browse]::after { - content: attr(data-browse); -} - -.custom-file-label { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 1; - height: calc(1.6em + 0.75rem + 2px); - padding: 0.375rem 0.75rem; - font-weight: 400; - line-height: 1.6; - color: #495057; - background-color: #fff; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.custom-file-label::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 3; - display: block; - height: calc(1.6em + 0.75rem); - padding: 0.375rem 0.75rem; - line-height: 1.6; - color: #495057; - content: "Browse"; - background-color: #e9ecef; - border-left: inherit; - border-radius: 0 0.25rem 0.25rem 0; -} - -.custom-range { - width: 100%; - height: 1.4rem; - padding: 0; - background-color: transparent; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.custom-range:focus { - outline: none; -} - -.custom-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #f8fafc, 0 0 0 0.2rem rgba(52, 144, 220, 0.25); -} - -.custom-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #f8fafc, 0 0 0 0.2rem rgba(52, 144, 220, 0.25); -} - -.custom-range:focus::-ms-thumb { - box-shadow: 0 0 0 1px #f8fafc, 0 0 0 0.2rem rgba(52, 144, 220, 0.25); -} - -.custom-range::-moz-focus-outer { - border: 0; -} - -.custom-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -0.25rem; - background-color: #3490dc; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - -webkit-appearance: none; - appearance: none; -} - -@media (prefers-reduced-motion: reduce) { - .custom-range::-webkit-slider-thumb { - -webkit-transition: none; - transition: none; - } -} - -.custom-range::-webkit-slider-thumb:active { - background-color: #cce3f6; -} - -.custom-range::-webkit-slider-runnable-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} - -.custom-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #3490dc; - border: 0; - border-radius: 1rem; - -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - -moz-appearance: none; - appearance: none; -} - -@media (prefers-reduced-motion: reduce) { - .custom-range::-moz-range-thumb { - -moz-transition: none; - transition: none; - } -} - -.custom-range::-moz-range-thumb:active { - background-color: #cce3f6; -} - -.custom-range::-moz-range-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} - -.custom-range::-ms-thumb { - width: 1rem; - height: 1rem; - margin-top: 0; - margin-right: 0.2rem; - margin-left: 0.2rem; - background-color: #3490dc; - border: 0; - border-radius: 1rem; - -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - appearance: none; -} - -@media (prefers-reduced-motion: reduce) { - .custom-range::-ms-thumb { - -ms-transition: none; - transition: none; - } -} - -.custom-range::-ms-thumb:active { - background-color: #cce3f6; -} - -.custom-range::-ms-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: transparent; - border-color: transparent; - border-width: 0.5rem; -} - -.custom-range::-ms-fill-lower { - background-color: #dee2e6; - border-radius: 1rem; -} - -.custom-range::-ms-fill-upper { - margin-right: 15px; - background-color: #dee2e6; - border-radius: 1rem; -} - -.custom-range:disabled::-webkit-slider-thumb { - background-color: #adb5bd; -} - -.custom-range:disabled::-webkit-slider-runnable-track { - cursor: default; -} - -.custom-range:disabled::-moz-range-thumb { - background-color: #adb5bd; -} - -.custom-range:disabled::-moz-range-track { - cursor: default; -} - -.custom-range:disabled::-ms-thumb { - background-color: #adb5bd; -} - -.custom-control-label::before, -.custom-file-label, -.custom-select { - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .custom-control-label::before, - .custom-file-label, - .custom-select { - transition: none; - } -} - -.nav { - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav-link { - display: block; - padding: 0.5rem 1rem; -} - -.nav-link:hover, -.nav-link:focus { - text-decoration: none; -} - -.nav-link.disabled { - color: #6c757d; - pointer-events: none; - cursor: default; -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6; -} - -.nav-tabs .nav-item { - margin-bottom: -1px; -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.nav-tabs .nav-link:hover, -.nav-tabs .nav-link:focus { - border-color: #e9ecef #e9ecef #dee2e6; -} - -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent; -} - -.nav-tabs .nav-link.active, -.nav-tabs .nav-item.show .nav-link { - color: #495057; - background-color: #f8fafc; - border-color: #dee2e6 #dee2e6 #f8fafc; -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.nav-pills .nav-link { - border-radius: 0.25rem; -} - -.nav-pills .nav-link.active, -.nav-pills .show > .nav-link { - color: #fff; - background-color: #3490dc; -} - -.nav-fill .nav-item { - flex: 1 1 auto; - text-align: center; -} - -.nav-justified .nav-item { - flex-basis: 0; - flex-grow: 1; - text-align: center; -} - -.tab-content > .tab-pane { - display: none; -} - -.tab-content > .active { - display: block; -} - -.navbar { - position: relative; - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - padding: 0.5rem 1rem; -} - -.navbar .container, -.navbar .container-fluid, -.navbar .container-sm, -.navbar .container-md, -.navbar .container-lg, -.navbar .container-xl { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; -} - -.navbar-brand { - display: inline-block; - padding-top: 0.32rem; - padding-bottom: 0.32rem; - margin-right: 1rem; - font-size: 1.125rem; - line-height: inherit; - white-space: nowrap; -} - -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} - -.navbar-nav { - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.navbar-nav .nav-link { - padding-right: 0; - padding-left: 0; -} - -.navbar-nav .dropdown-menu { - position: static; - float: none; -} - -.navbar-text { - display: inline-block; - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.navbar-collapse { - flex-basis: 100%; - flex-grow: 1; - align-items: center; -} - -.navbar-toggler { - padding: 0.25rem 0.75rem; - font-size: 1.125rem; - line-height: 1; - background-color: transparent; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.navbar-toggler:hover, -.navbar-toggler:focus { - text-decoration: none; -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: ""; - background: no-repeat center center; - background-size: 100% 100%; -} - -@media (max-width: 575.98px) { - .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid, - .navbar-expand-sm > .container-sm, - .navbar-expand-sm > .container-md, - .navbar-expand-sm > .container-lg, - .navbar-expand-sm > .container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 576px) { - .navbar-expand-sm { - flex-flow: row nowrap; - justify-content: flex-start; - } - - .navbar-expand-sm .navbar-nav { - flex-direction: row; - } - - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute; - } - - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - - .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid, - .navbar-expand-sm > .container-sm, - .navbar-expand-sm > .container-md, - .navbar-expand-sm > .container-lg, - .navbar-expand-sm > .container-xl { - flex-wrap: nowrap; - } - - .navbar-expand-sm .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - - .navbar-expand-sm .navbar-toggler { - display: none; - } -} - -@media (max-width: 767.98px) { - .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid, - .navbar-expand-md > .container-sm, - .navbar-expand-md > .container-md, - .navbar-expand-md > .container-lg, - .navbar-expand-md > .container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 768px) { - .navbar-expand-md { - flex-flow: row nowrap; - justify-content: flex-start; - } - - .navbar-expand-md .navbar-nav { - flex-direction: row; - } - - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute; - } - - .navbar-expand-md .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - - .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid, - .navbar-expand-md > .container-sm, - .navbar-expand-md > .container-md, - .navbar-expand-md > .container-lg, - .navbar-expand-md > .container-xl { - flex-wrap: nowrap; - } - - .navbar-expand-md .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - - .navbar-expand-md .navbar-toggler { - display: none; - } -} - -@media (max-width: 991.98px) { - .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid, - .navbar-expand-lg > .container-sm, - .navbar-expand-lg > .container-md, - .navbar-expand-lg > .container-lg, - .navbar-expand-lg > .container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 992px) { - .navbar-expand-lg { - flex-flow: row nowrap; - justify-content: flex-start; - } - - .navbar-expand-lg .navbar-nav { - flex-direction: row; - } - - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute; - } - - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - - .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid, - .navbar-expand-lg > .container-sm, - .navbar-expand-lg > .container-md, - .navbar-expand-lg > .container-lg, - .navbar-expand-lg > .container-xl { - flex-wrap: nowrap; - } - - .navbar-expand-lg .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - - .navbar-expand-lg .navbar-toggler { - display: none; - } -} - -@media (max-width: 1199.98px) { - .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid, - .navbar-expand-xl > .container-sm, - .navbar-expand-xl > .container-md, - .navbar-expand-xl > .container-lg, - .navbar-expand-xl > .container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 1200px) { - .navbar-expand-xl { - flex-flow: row nowrap; - justify-content: flex-start; - } - - .navbar-expand-xl .navbar-nav { - flex-direction: row; - } - - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute; - } - - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - - .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid, - .navbar-expand-xl > .container-sm, - .navbar-expand-xl > .container-md, - .navbar-expand-xl > .container-lg, - .navbar-expand-xl > .container-xl { - flex-wrap: nowrap; - } - - .navbar-expand-xl .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - - .navbar-expand-xl .navbar-toggler { - display: none; - } -} - -.navbar-expand { - flex-flow: row nowrap; - justify-content: flex-start; -} - -.navbar-expand > .container, -.navbar-expand > .container-fluid, -.navbar-expand > .container-sm, -.navbar-expand > .container-md, -.navbar-expand > .container-lg, -.navbar-expand > .container-xl { - padding-right: 0; - padding-left: 0; -} - -.navbar-expand .navbar-nav { - flex-direction: row; -} - -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute; -} - -.navbar-expand .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; -} - -.navbar-expand > .container, -.navbar-expand > .container-fluid, -.navbar-expand > .container-sm, -.navbar-expand > .container-md, -.navbar-expand > .container-lg, -.navbar-expand > .container-xl { - flex-wrap: nowrap; -} - -.navbar-expand .navbar-collapse { - display: flex !important; - flex-basis: auto; -} - -.navbar-expand .navbar-toggler { - display: none; -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-brand:hover, -.navbar-light .navbar-brand:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, 0.5); -} - -.navbar-light .navbar-nav .nav-link:hover, -.navbar-light .navbar-nav .nav-link:focus { - color: rgba(0, 0, 0, 0.7); -} - -.navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, 0.3); -} - -.navbar-light .navbar-nav .show > .nav-link, -.navbar-light .navbar-nav .active > .nav-link, -.navbar-light .navbar-nav .nav-link.show, -.navbar-light .navbar-nav .nav-link.active { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-toggler { - color: rgba(0, 0, 0, 0.5); - border-color: rgba(0, 0, 0, 0.1); -} - -.navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); -} - -.navbar-light .navbar-text { - color: rgba(0, 0, 0, 0.5); -} - -.navbar-light .navbar-text a { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-text a:hover, -.navbar-light .navbar-text a:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-dark .navbar-brand { - color: #fff; -} - -.navbar-dark .navbar-brand:hover, -.navbar-dark .navbar-brand:focus { - color: #fff; -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, 0.5); -} - -.navbar-dark .navbar-nav .nav-link:hover, -.navbar-dark .navbar-nav .nav-link:focus { - color: rgba(255, 255, 255, 0.75); -} - -.navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, 0.25); -} - -.navbar-dark .navbar-nav .show > .nav-link, -.navbar-dark .navbar-nav .active > .nav-link, -.navbar-dark .navbar-nav .nav-link.show, -.navbar-dark .navbar-nav .nav-link.active { - color: #fff; -} - -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, 0.5); - border-color: rgba(255, 255, 255, 0.1); -} - -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); -} - -.navbar-dark .navbar-text { - color: rgba(255, 255, 255, 0.5); -} - -.navbar-dark .navbar-text a { - color: #fff; -} - -.navbar-dark .navbar-text a:hover, -.navbar-dark .navbar-text a:focus { - color: #fff; -} - -.card { - position: relative; - display: flex; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(0, 0, 0, 0.125); - border-radius: 0.25rem; -} - -.card > hr { - margin-right: 0; - margin-left: 0; -} - -.card > .list-group:first-child .list-group-item:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.card > .list-group:last-child .list-group-item:last-child { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.card-body { - flex: 1 1 auto; - min-height: 1px; - padding: 1.25rem; -} - -.card-title { - margin-bottom: 0.75rem; -} - -.card-subtitle { - margin-top: -0.375rem; - margin-bottom: 0; -} - -.card-text:last-child { - margin-bottom: 0; -} - -.card-link:hover { - text-decoration: none; -} - -.card-link + .card-link { - margin-left: 1.25rem; -} - -.card-header { - padding: 0.75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, 0.03); - border-bottom: 1px solid rgba(0, 0, 0, 0.125); -} - -.card-header:first-child { - border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; -} - -.card-header + .list-group .list-group-item:first-child { - border-top: 0; -} - -.card-footer { - padding: 0.75rem 1.25rem; - background-color: rgba(0, 0, 0, 0.03); - border-top: 1px solid rgba(0, 0, 0, 0.125); -} - -.card-footer:last-child { - border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); -} - -.card-header-tabs { - margin-right: -0.625rem; - margin-bottom: -0.75rem; - margin-left: -0.625rem; - border-bottom: 0; -} - -.card-header-pills { - margin-right: -0.625rem; - margin-left: -0.625rem; -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem; -} - -.card-img, -.card-img-top, -.card-img-bottom { - flex-shrink: 0; - width: 100%; -} - -.card-img, -.card-img-top { - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} - -.card-img, -.card-img-bottom { - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); -} - -.card-deck .card { - margin-bottom: 15px; -} - -@media (min-width: 576px) { - .card-deck { - display: flex; - flex-flow: row wrap; - margin-right: -15px; - margin-left: -15px; - } - - .card-deck .card { - flex: 1 0 0%; - margin-right: 15px; - margin-bottom: 0; - margin-left: 15px; - } -} - -.card-group > .card { - margin-bottom: 15px; -} - -@media (min-width: 576px) { - .card-group { - display: flex; - flex-flow: row wrap; - } - - .card-group > .card { - flex: 1 0 0%; - margin-bottom: 0; - } - - .card-group > .card + .card { - margin-left: 0; - border-left: 0; - } - - .card-group > .card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .card-group > .card:not(:last-child) .card-img-top, - .card-group > .card:not(:last-child) .card-header { - border-top-right-radius: 0; - } - - .card-group > .card:not(:last-child) .card-img-bottom, - .card-group > .card:not(:last-child) .card-footer { - border-bottom-right-radius: 0; - } - - .card-group > .card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .card-group > .card:not(:first-child) .card-img-top, - .card-group > .card:not(:first-child) .card-header { - border-top-left-radius: 0; - } - - .card-group > .card:not(:first-child) .card-img-bottom, - .card-group > .card:not(:first-child) .card-footer { - border-bottom-left-radius: 0; - } -} - -.card-columns .card { - margin-bottom: 0.75rem; -} - -@media (min-width: 576px) { - .card-columns { - -moz-column-count: 3; - column-count: 3; - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; - orphans: 1; - widows: 1; - } - - .card-columns .card { - display: inline-block; - width: 100%; - } -} - -.accordion > .card { - overflow: hidden; -} - -.accordion > .card:not(:last-of-type) { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.accordion > .card:not(:first-of-type) { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.accordion > .card > .card-header { - border-radius: 0; - margin-bottom: -1px; -} - -.breadcrumb { - display: flex; - flex-wrap: wrap; - padding: 0.75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.breadcrumb-item + .breadcrumb-item { - padding-left: 0.5rem; -} - -.breadcrumb-item + .breadcrumb-item::before { - display: inline-block; - padding-right: 0.5rem; - color: #6c757d; - content: "/"; -} - -.breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: underline; -} - -.breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: none; -} - -.breadcrumb-item.active { - color: #6c757d; -} - -.pagination { - display: flex; - padding-left: 0; - list-style: none; - border-radius: 0.25rem; -} - -.page-link { - position: relative; - display: block; - padding: 0.5rem 0.75rem; - margin-left: -1px; - line-height: 1.25; - color: #3490dc; - background-color: #fff; - border: 1px solid #dee2e6; -} - -.page-link:hover { - z-index: 2; - color: #1d68a7; - text-decoration: none; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.page-link:focus { - z-index: 3; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(52, 144, 220, 0.25); -} - -.page-item:first-child .page-link { - margin-left: 0; - border-top-left-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.page-item:last-child .page-link { - border-top-right-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; -} - -.page-item.active .page-link { - z-index: 3; - color: #fff; - background-color: #3490dc; - border-color: #3490dc; -} - -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - cursor: auto; - background-color: #fff; - border-color: #dee2e6; -} - -.pagination-lg .page-link { - padding: 0.75rem 1.5rem; - font-size: 1.125rem; - line-height: 1.5; -} - -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 0.3rem; - border-bottom-left-radius: 0.3rem; -} - -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 0.3rem; - border-bottom-right-radius: 0.3rem; -} - -.pagination-sm .page-link { - padding: 0.25rem 0.5rem; - font-size: 0.7875rem; - line-height: 1.5; -} - -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: 0.2rem; - border-bottom-left-radius: 0.2rem; -} - -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: 0.2rem; - border-bottom-right-radius: 0.2rem; -} - -.badge { - display: inline-block; - padding: 0.25em 0.4em; - font-size: 75%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .badge { - transition: none; - } -} - -a.badge:hover, -a.badge:focus { - text-decoration: none; -} - -.badge:empty { - display: none; -} - -.btn .badge { - position: relative; - top: -1px; -} - -.badge-pill { - padding-right: 0.6em; - padding-left: 0.6em; - border-radius: 10rem; -} - -.badge-primary { - color: #fff; - background-color: #3490dc; -} - -a.badge-primary:hover, -a.badge-primary:focus { - color: #fff; - background-color: #2176bd; -} - -a.badge-primary:focus, -a.badge-primary.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(52, 144, 220, 0.5); -} - -.badge-secondary { - color: #fff; - background-color: #6c757d; -} - -a.badge-secondary:hover, -a.badge-secondary:focus { - color: #fff; - background-color: #545b62; -} - -a.badge-secondary:focus, -a.badge-secondary.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.badge-success { - color: #fff; - background-color: #38c172; -} - -a.badge-success:hover, -a.badge-success:focus { - color: #fff; - background-color: #2d995b; -} - -a.badge-success:focus, -a.badge-success.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(56, 193, 114, 0.5); -} - -.badge-info { - color: #212529; - background-color: #6cb2eb; -} - -a.badge-info:hover, -a.badge-info:focus { - color: #212529; - background-color: #3f9ae5; -} - -a.badge-info:focus, -a.badge-info.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(108, 178, 235, 0.5); -} - -.badge-warning { - color: #212529; - background-color: #ffed4a; -} - -a.badge-warning:hover, -a.badge-warning:focus { - color: #212529; - background-color: #ffe817; -} - -a.badge-warning:focus, -a.badge-warning.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(255, 237, 74, 0.5); -} - -.badge-danger { - color: #fff; - background-color: #e3342f; -} - -a.badge-danger:hover, -a.badge-danger:focus { - color: #fff; - background-color: #c51f1a; -} - -a.badge-danger:focus, -a.badge-danger.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(227, 52, 47, 0.5); -} - -.badge-light { - color: #212529; - background-color: #f8f9fa; -} - -a.badge-light:hover, -a.badge-light:focus { - color: #212529; - background-color: #dae0e5; -} - -a.badge-light:focus, -a.badge-light.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.badge-dark { - color: #fff; - background-color: #343a40; -} - -a.badge-dark:hover, -a.badge-dark:focus { - color: #fff; - background-color: #1d2124; -} - -a.badge-dark:focus, -a.badge-dark.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 0.3rem; -} - -@media (min-width: 576px) { - .jumbotron { - padding: 4rem 2rem; - } -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0; -} - -.alert { - position: relative; - padding: 0.75rem 1.25rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: 700; -} - -.alert-dismissible { - padding-right: 3.85rem; -} - -.alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 0.75rem 1.25rem; - color: inherit; -} - -.alert-primary { - color: #1b4b72; - background-color: #d6e9f8; - border-color: #c6e0f5; -} - -.alert-primary hr { - border-top-color: #b0d4f1; -} - -.alert-primary .alert-link { - color: #113049; -} - -.alert-secondary { - color: #383d41; - background-color: #e2e3e5; - border-color: #d6d8db; -} - -.alert-secondary hr { - border-top-color: #c8cbcf; -} - -.alert-secondary .alert-link { - color: #202326; -} - -.alert-success { - color: #1d643b; - background-color: #d7f3e3; - border-color: #c7eed8; -} - -.alert-success hr { - border-top-color: #b3e8ca; -} - -.alert-success .alert-link { - color: #123c24; -} - -.alert-info { - color: #385d7a; - background-color: #e2f0fb; - border-color: #d6e9f9; -} - -.alert-info hr { - border-top-color: #c0ddf6; -} - -.alert-info .alert-link { - color: #284257; -} - -.alert-warning { - color: #857b26; - background-color: #fffbdb; - border-color: #fffacc; -} - -.alert-warning hr { - border-top-color: #fff8b3; -} - -.alert-warning .alert-link { - color: #5d561b; -} - -.alert-danger { - color: #761b18; - background-color: #f9d6d5; - border-color: #f7c6c5; -} - -.alert-danger hr { - border-top-color: #f4b0af; -} - -.alert-danger .alert-link { - color: #4c110f; -} - -.alert-light { - color: #818182; - background-color: #fefefe; - border-color: #fdfdfe; -} - -.alert-light hr { - border-top-color: #ececf6; -} - -.alert-light .alert-link { - color: #686868; -} - -.alert-dark { - color: #1b1e21; - background-color: #d6d8d9; - border-color: #c6c8ca; -} - -.alert-dark hr { - border-top-color: #b9bbbe; -} - -.alert-dark .alert-link { - color: #040505; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - - to { - background-position: 0 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - - to { - background-position: 0 0; - } -} - -.progress { - display: flex; - height: 1rem; - overflow: hidden; - font-size: 0.675rem; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.progress-bar { - display: flex; - flex-direction: column; - justify-content: center; - overflow: hidden; - color: #fff; - text-align: center; - white-space: nowrap; - background-color: #3490dc; - transition: width 0.6s ease; -} - -@media (prefers-reduced-motion: reduce) { - .progress-bar { - transition: none; - } -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem; -} - -.progress-bar-animated { - -webkit-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite; -} - -@media (prefers-reduced-motion: reduce) { - .progress-bar-animated { - -webkit-animation: none; - animation: none; - } -} - -.media { - display: flex; - align-items: flex-start; -} - -.media-body { - flex: 1; -} - -.list-group { - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit; -} - -.list-group-item-action:hover, -.list-group-item-action:focus { - z-index: 1; - color: #495057; - text-decoration: none; - background-color: #f8f9fa; -} - -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef; -} - -.list-group-item { - position: relative; - display: block; - padding: 0.75rem 1.25rem; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, 0.125); -} - -.list-group-item:first-child { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.list-group-item:last-child { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.list-group-item.disabled, -.list-group-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: #fff; -} - -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #3490dc; - border-color: #3490dc; -} - -.list-group-item + .list-group-item { - border-top-width: 0; -} - -.list-group-item + .list-group-item.active { - margin-top: -1px; - border-top-width: 1px; -} - -.list-group-horizontal { - flex-direction: row; -} - -.list-group-horizontal .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; -} - -.list-group-horizontal .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; -} - -.list-group-horizontal .list-group-item.active { - margin-top: 0; -} - -.list-group-horizontal .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; -} - -.list-group-horizontal .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; -} - -@media (min-width: 576px) { - .list-group-horizontal-sm { - flex-direction: row; - } - - .list-group-horizontal-sm .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - - .list-group-horizontal-sm .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - - .list-group-horizontal-sm .list-group-item.active { - margin-top: 0; - } - - .list-group-horizontal-sm .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - - .list-group-horizontal-sm .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} - -@media (min-width: 768px) { - .list-group-horizontal-md { - flex-direction: row; - } - - .list-group-horizontal-md .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - - .list-group-horizontal-md .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - - .list-group-horizontal-md .list-group-item.active { - margin-top: 0; - } - - .list-group-horizontal-md .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - - .list-group-horizontal-md .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} - -@media (min-width: 992px) { - .list-group-horizontal-lg { - flex-direction: row; - } - - .list-group-horizontal-lg .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - - .list-group-horizontal-lg .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - - .list-group-horizontal-lg .list-group-item.active { - margin-top: 0; - } - - .list-group-horizontal-lg .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - - .list-group-horizontal-lg .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} - -@media (min-width: 1200px) { - .list-group-horizontal-xl { - flex-direction: row; - } - - .list-group-horizontal-xl .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - - .list-group-horizontal-xl .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - - .list-group-horizontal-xl .list-group-item.active { - margin-top: 0; - } - - .list-group-horizontal-xl .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - - .list-group-horizontal-xl .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} - -.list-group-flush .list-group-item { - border-right-width: 0; - border-left-width: 0; - border-radius: 0; -} - -.list-group-flush .list-group-item:first-child { - border-top-width: 0; -} - -.list-group-flush:last-child .list-group-item:last-child { - border-bottom-width: 0; -} - -.list-group-item-primary { - color: #1b4b72; - background-color: #c6e0f5; -} - -.list-group-item-primary.list-group-item-action:hover, -.list-group-item-primary.list-group-item-action:focus { - color: #1b4b72; - background-color: #b0d4f1; -} - -.list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #1b4b72; - border-color: #1b4b72; -} - -.list-group-item-secondary { - color: #383d41; - background-color: #d6d8db; -} - -.list-group-item-secondary.list-group-item-action:hover, -.list-group-item-secondary.list-group-item-action:focus { - color: #383d41; - background-color: #c8cbcf; -} - -.list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #383d41; - border-color: #383d41; -} - -.list-group-item-success { - color: #1d643b; - background-color: #c7eed8; -} - -.list-group-item-success.list-group-item-action:hover, -.list-group-item-success.list-group-item-action:focus { - color: #1d643b; - background-color: #b3e8ca; -} - -.list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #1d643b; - border-color: #1d643b; -} - -.list-group-item-info { - color: #385d7a; - background-color: #d6e9f9; -} - -.list-group-item-info.list-group-item-action:hover, -.list-group-item-info.list-group-item-action:focus { - color: #385d7a; - background-color: #c0ddf6; -} - -.list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #385d7a; - border-color: #385d7a; -} - -.list-group-item-warning { - color: #857b26; - background-color: #fffacc; -} - -.list-group-item-warning.list-group-item-action:hover, -.list-group-item-warning.list-group-item-action:focus { - color: #857b26; - background-color: #fff8b3; -} - -.list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #857b26; - border-color: #857b26; -} - -.list-group-item-danger { - color: #761b18; - background-color: #f7c6c5; -} - -.list-group-item-danger.list-group-item-action:hover, -.list-group-item-danger.list-group-item-action:focus { - color: #761b18; - background-color: #f4b0af; -} - -.list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #761b18; - border-color: #761b18; -} - -.list-group-item-light { - color: #818182; - background-color: #fdfdfe; -} - -.list-group-item-light.list-group-item-action:hover, -.list-group-item-light.list-group-item-action:focus { - color: #818182; - background-color: #ececf6; -} - -.list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #818182; - border-color: #818182; -} - -.list-group-item-dark { - color: #1b1e21; - background-color: #c6c8ca; -} - -.list-group-item-dark.list-group-item-action:hover, -.list-group-item-dark.list-group-item-action:focus { - color: #1b1e21; - background-color: #b9bbbe; -} - -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #1b1e21; - border-color: #1b1e21; -} - -.close { - float: right; - font-size: 1.35rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: 0.5; -} - -.close:hover { - color: #000; - text-decoration: none; -} - -.close:not(:disabled):not(.disabled):hover, -.close:not(:disabled):not(.disabled):focus { - opacity: 0.75; -} - -button.close { - padding: 0; - background-color: transparent; - border: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -a.close.disabled { - pointer-events: none; -} - -.toast { - max-width: 350px; - overflow: hidden; - font-size: 0.875rem; - background-color: rgba(255, 255, 255, 0.85); - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.1); - box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - opacity: 0; - border-radius: 0.25rem; -} - -.toast:not(:last-child) { - margin-bottom: 0.75rem; -} - -.toast.showing { - opacity: 1; -} - -.toast.show { - display: block; - opacity: 1; -} - -.toast.hide { - display: none; -} - -.toast-header { - display: flex; - align-items: center; - padding: 0.25rem 0.75rem; - color: #6c757d; - background-color: rgba(255, 255, 255, 0.85); - background-clip: padding-box; - border-bottom: 1px solid rgba(0, 0, 0, 0.05); -} - -.toast-body { - padding: 0.75rem; -} - -.modal-open { - overflow: hidden; -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} - -.modal { - position: fixed; - top: 0; - left: 0; - z-index: 1050; - display: none; - width: 100%; - height: 100%; - overflow: hidden; - outline: 0; -} - -.modal-dialog { - position: relative; - width: auto; - margin: 0.5rem; - pointer-events: none; -} - -.modal.fade .modal-dialog { - transition: transform 0.3s ease-out; - transform: translate(0, -50px); -} - -@media (prefers-reduced-motion: reduce) { - .modal.fade .modal-dialog { - transition: none; - } -} - -.modal.show .modal-dialog { - transform: none; -} - -.modal.modal-static .modal-dialog { - transform: scale(1.02); -} - -.modal-dialog-scrollable { - display: flex; - max-height: calc(100% - 1rem); -} - -.modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 1rem); - overflow: hidden; -} - -.modal-dialog-scrollable .modal-header, -.modal-dialog-scrollable .modal-footer { - flex-shrink: 0; -} - -.modal-dialog-scrollable .modal-body { - overflow-y: auto; -} - -.modal-dialog-centered { - display: flex; - align-items: center; - min-height: calc(100% - 1rem); -} - -.modal-dialog-centered::before { - display: block; - height: calc(100vh - 1rem); - content: ""; -} - -.modal-dialog-centered.modal-dialog-scrollable { - flex-direction: column; - justify-content: center; - height: 100%; -} - -.modal-dialog-centered.modal-dialog-scrollable .modal-content { - max-height: none; -} - -.modal-dialog-centered.modal-dialog-scrollable::before { - content: none; -} - -.modal-content { - position: relative; - display: flex; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; - outline: 0; -} - -.modal-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop.show { - opacity: 0.5; -} - -.modal-header { - display: flex; - align-items: flex-start; - justify-content: space-between; - padding: 1rem 1rem; - border-bottom: 1px solid #dee2e6; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} - -.modal-header .close { - padding: 1rem 1rem; - margin: -1rem -1rem -1rem auto; -} - -.modal-title { - margin-bottom: 0; - line-height: 1.6; -} - -.modal-body { - position: relative; - flex: 1 1 auto; - padding: 1rem; -} - -.modal-footer { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: flex-end; - padding: 0.75rem; - border-top: 1px solid #dee2e6; - border-bottom-right-radius: calc(0.3rem - 1px); - border-bottom-left-radius: calc(0.3rem - 1px); -} - -.modal-footer > * { - margin: 0.25rem; -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} - -@media (min-width: 576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto; - } - - .modal-dialog-scrollable { - max-height: calc(100% - 3.5rem); - } - - .modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 3.5rem); - } - - .modal-dialog-centered { - min-height: calc(100% - 3.5rem); - } - - .modal-dialog-centered::before { - height: calc(100vh - 3.5rem); - } - - .modal-sm { - max-width: 300px; - } -} - -@media (min-width: 992px) { - .modal-lg, - .modal-xl { - max-width: 800px; - } -} - -@media (min-width: 1200px) { - .modal-xl { - max-width: 1140px; - } -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: "Nunito", sans-serif; - font-style: normal; - font-weight: 400; - line-height: 1.6; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 0.7875rem; - word-wrap: break-word; - opacity: 0; -} - -.tooltip.show { - opacity: 0.9; -} - -.tooltip .arrow { - position: absolute; - display: block; - width: 0.8rem; - height: 0.4rem; -} - -.tooltip .arrow::before { - position: absolute; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-tooltip-top, -.bs-tooltip-auto[x-placement^=top] { - padding: 0.4rem 0; -} - -.bs-tooltip-top .arrow, -.bs-tooltip-auto[x-placement^=top] .arrow { - bottom: 0; -} - -.bs-tooltip-top .arrow::before, -.bs-tooltip-auto[x-placement^=top] .arrow::before { - top: 0; - border-width: 0.4rem 0.4rem 0; - border-top-color: #000; -} - -.bs-tooltip-right, -.bs-tooltip-auto[x-placement^=right] { - padding: 0 0.4rem; -} - -.bs-tooltip-right .arrow, -.bs-tooltip-auto[x-placement^=right] .arrow { - left: 0; - width: 0.4rem; - height: 0.8rem; -} - -.bs-tooltip-right .arrow::before, -.bs-tooltip-auto[x-placement^=right] .arrow::before { - right: 0; - border-width: 0.4rem 0.4rem 0.4rem 0; - border-right-color: #000; -} - -.bs-tooltip-bottom, -.bs-tooltip-auto[x-placement^=bottom] { - padding: 0.4rem 0; -} - -.bs-tooltip-bottom .arrow, -.bs-tooltip-auto[x-placement^=bottom] .arrow { - top: 0; -} - -.bs-tooltip-bottom .arrow::before, -.bs-tooltip-auto[x-placement^=bottom] .arrow::before { - bottom: 0; - border-width: 0 0.4rem 0.4rem; - border-bottom-color: #000; -} - -.bs-tooltip-left, -.bs-tooltip-auto[x-placement^=left] { - padding: 0 0.4rem; -} - -.bs-tooltip-left .arrow, -.bs-tooltip-auto[x-placement^=left] .arrow { - right: 0; - width: 0.4rem; - height: 0.8rem; -} - -.bs-tooltip-left .arrow::before, -.bs-tooltip-auto[x-placement^=left] .arrow::before { - left: 0; - border-width: 0.4rem 0 0.4rem 0.4rem; - border-left-color: #000; -} - -.tooltip-inner { - max-width: 200px; - padding: 0.25rem 0.5rem; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 0.25rem; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: "Nunito", sans-serif; - font-style: normal; - font-weight: 400; - line-height: 1.6; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 0.7875rem; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; -} - -.popover .arrow { - position: absolute; - display: block; - width: 1rem; - height: 0.5rem; - margin: 0 0.3rem; -} - -.popover .arrow::before, -.popover .arrow::after { - position: absolute; - display: block; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-popover-top, -.bs-popover-auto[x-placement^=top] { - margin-bottom: 0.5rem; -} - -.bs-popover-top > .arrow, -.bs-popover-auto[x-placement^=top] > .arrow { - bottom: calc(-0.5rem - 1px); -} - -.bs-popover-top > .arrow::before, -.bs-popover-auto[x-placement^=top] > .arrow::before { - bottom: 0; - border-width: 0.5rem 0.5rem 0; - border-top-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-top > .arrow::after, -.bs-popover-auto[x-placement^=top] > .arrow::after { - bottom: 1px; - border-width: 0.5rem 0.5rem 0; - border-top-color: #fff; -} - -.bs-popover-right, -.bs-popover-auto[x-placement^=right] { - margin-left: 0.5rem; -} - -.bs-popover-right > .arrow, -.bs-popover-auto[x-placement^=right] > .arrow { - left: calc(-0.5rem - 1px); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-right > .arrow::before, -.bs-popover-auto[x-placement^=right] > .arrow::before { - left: 0; - border-width: 0.5rem 0.5rem 0.5rem 0; - border-right-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-right > .arrow::after, -.bs-popover-auto[x-placement^=right] > .arrow::after { - left: 1px; - border-width: 0.5rem 0.5rem 0.5rem 0; - border-right-color: #fff; -} - -.bs-popover-bottom, -.bs-popover-auto[x-placement^=bottom] { - margin-top: 0.5rem; -} - -.bs-popover-bottom > .arrow, -.bs-popover-auto[x-placement^=bottom] > .arrow { - top: calc(-0.5rem - 1px); -} - -.bs-popover-bottom > .arrow::before, -.bs-popover-auto[x-placement^=bottom] > .arrow::before { - top: 0; - border-width: 0 0.5rem 0.5rem 0.5rem; - border-bottom-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-bottom > .arrow::after, -.bs-popover-auto[x-placement^=bottom] > .arrow::after { - top: 1px; - border-width: 0 0.5rem 0.5rem 0.5rem; - border-bottom-color: #fff; -} - -.bs-popover-bottom .popover-header::before, -.bs-popover-auto[x-placement^=bottom] .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -0.5rem; - content: ""; - border-bottom: 1px solid #f7f7f7; -} - -.bs-popover-left, -.bs-popover-auto[x-placement^=left] { - margin-right: 0.5rem; -} - -.bs-popover-left > .arrow, -.bs-popover-auto[x-placement^=left] > .arrow { - right: calc(-0.5rem - 1px); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-left > .arrow::before, -.bs-popover-auto[x-placement^=left] > .arrow::before { - right: 0; - border-width: 0.5rem 0 0.5rem 0.5rem; - border-left-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-left > .arrow::after, -.bs-popover-auto[x-placement^=left] > .arrow::after { - right: 1px; - border-width: 0.5rem 0 0.5rem 0.5rem; - border-left-color: #fff; -} - -.popover-header { - padding: 0.5rem 0.75rem; - margin-bottom: 0; - font-size: 0.9rem; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} - -.popover-header:empty { - display: none; -} - -.popover-body { - padding: 0.5rem 0.75rem; - color: #212529; -} - -.carousel { - position: relative; -} - -.carousel.pointer-event { - touch-action: pan-y; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner::after { - display: block; - clear: both; - content: ""; -} - -.carousel-item { - position: relative; - display: none; - float: left; - width: 100%; - margin-right: -100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - transition: transform 0.6s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-item { - transition: none; - } -} - -.carousel-item.active, -.carousel-item-next, -.carousel-item-prev { - display: block; -} - -.carousel-item-next:not(.carousel-item-left), -.active.carousel-item-right { - transform: translateX(100%); -} - -.carousel-item-prev:not(.carousel-item-right), -.active.carousel-item-left { - transform: translateX(-100%); -} - -.carousel-fade .carousel-item { - opacity: 0; - transition-property: opacity; - transform: none; -} - -.carousel-fade .carousel-item.active, -.carousel-fade .carousel-item-next.carousel-item-left, -.carousel-fade .carousel-item-prev.carousel-item-right { - z-index: 1; - opacity: 1; -} - -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-right { - z-index: 0; - opacity: 0; - transition: opacity 0s 0.6s; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-right { - transition: none; - } -} - -.carousel-control-prev, -.carousel-control-next { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: flex; - align-items: center; - justify-content: center; - width: 15%; - color: #fff; - text-align: center; - opacity: 0.5; - transition: opacity 0.15s ease; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-control-prev, - .carousel-control-next { - transition: none; - } -} - -.carousel-control-prev:hover, -.carousel-control-prev:focus, -.carousel-control-next:hover, -.carousel-control-next:focus { - color: #fff; - text-decoration: none; - outline: 0; - opacity: 0.9; -} - -.carousel-control-prev { - left: 0; -} - -.carousel-control-next { - right: 0; -} - -.carousel-control-prev-icon, -.carousel-control-next-icon { - display: inline-block; - width: 20px; - height: 20px; - background: no-repeat 50%/100% 100%; -} - -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 15; - display: flex; - justify-content: center; - padding-left: 0; - margin-right: 15%; - margin-left: 15%; - list-style: none; -} - -.carousel-indicators li { - box-sizing: content-box; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: 0.5; - transition: opacity 0.6s ease; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-indicators li { - transition: none; - } -} - -.carousel-indicators .active { - opacity: 1; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; -} - -@-webkit-keyframes spinner-border { - to { - transform: rotate(360deg); - } -} - -@keyframes spinner-border { - to { - transform: rotate(360deg); - } -} - -.spinner-border { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - border: 0.25em solid currentColor; - border-right-color: transparent; - border-radius: 50%; - -webkit-animation: spinner-border 0.75s linear infinite; - animation: spinner-border 0.75s linear infinite; -} - -.spinner-border-sm { - width: 1rem; - height: 1rem; - border-width: 0.2em; -} - -@-webkit-keyframes spinner-grow { - 0% { - transform: scale(0); - } - - 50% { - opacity: 1; - } -} - -@keyframes spinner-grow { - 0% { - transform: scale(0); - } - - 50% { - opacity: 1; - } -} - -.spinner-grow { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - background-color: currentColor; - border-radius: 50%; - opacity: 0; - -webkit-animation: spinner-grow 0.75s linear infinite; - animation: spinner-grow 0.75s linear infinite; -} - -.spinner-grow-sm { - width: 1rem; - height: 1rem; -} - -.align-baseline { - vertical-align: baseline !important; -} - -.align-top { - vertical-align: top !important; -} - -.align-middle { - vertical-align: middle !important; -} - -.align-bottom { - vertical-align: bottom !important; -} - -.align-text-bottom { - vertical-align: text-bottom !important; -} - -.align-text-top { - vertical-align: text-top !important; -} - -.bg-primary { - background-color: #3490dc !important; -} - -a.bg-primary:hover, -a.bg-primary:focus, -button.bg-primary:hover, -button.bg-primary:focus { - background-color: #2176bd !important; -} - -.bg-secondary { - background-color: #6c757d !important; -} - -a.bg-secondary:hover, -a.bg-secondary:focus, -button.bg-secondary:hover, -button.bg-secondary:focus { - background-color: #545b62 !important; -} - -.bg-success { - background-color: #38c172 !important; -} - -a.bg-success:hover, -a.bg-success:focus, -button.bg-success:hover, -button.bg-success:focus { - background-color: #2d995b !important; -} - -.bg-info { - background-color: #6cb2eb !important; -} - -a.bg-info:hover, -a.bg-info:focus, -button.bg-info:hover, -button.bg-info:focus { - background-color: #3f9ae5 !important; -} - -.bg-warning { - background-color: #ffed4a !important; -} - -a.bg-warning:hover, -a.bg-warning:focus, -button.bg-warning:hover, -button.bg-warning:focus { - background-color: #ffe817 !important; -} - -.bg-danger { - background-color: #e3342f !important; -} - -a.bg-danger:hover, -a.bg-danger:focus, -button.bg-danger:hover, -button.bg-danger:focus { - background-color: #c51f1a !important; -} - -.bg-light { - background-color: #f8f9fa !important; -} - -a.bg-light:hover, -a.bg-light:focus, -button.bg-light:hover, -button.bg-light:focus { - background-color: #dae0e5 !important; -} - -.bg-dark { - background-color: #343a40 !important; -} - -a.bg-dark:hover, -a.bg-dark:focus, -button.bg-dark:hover, -button.bg-dark:focus { - background-color: #1d2124 !important; -} - -.bg-white { - background-color: #fff !important; -} - -.bg-transparent { - background-color: transparent !important; -} - -.border { - border: 1px solid #dee2e6 !important; -} - -.border-top { - border-top: 1px solid #dee2e6 !important; -} - -.border-right { - border-right: 1px solid #dee2e6 !important; -} - -.border-bottom { - border-bottom: 1px solid #dee2e6 !important; -} - -.border-left { - border-left: 1px solid #dee2e6 !important; -} - -.border-0 { - border: 0 !important; -} - -.border-top-0 { - border-top: 0 !important; -} - -.border-right-0 { - border-right: 0 !important; -} - -.border-bottom-0 { - border-bottom: 0 !important; -} - -.border-left-0 { - border-left: 0 !important; -} - -.border-primary { - border-color: #3490dc !important; -} - -.border-secondary { - border-color: #6c757d !important; -} - -.border-success { - border-color: #38c172 !important; -} - -.border-info { - border-color: #6cb2eb !important; -} - -.border-warning { - border-color: #ffed4a !important; -} - -.border-danger { - border-color: #e3342f !important; -} - -.border-light { - border-color: #f8f9fa !important; -} - -.border-dark { - border-color: #343a40 !important; -} - -.border-white { - border-color: #fff !important; -} - -.rounded-sm { - border-radius: 0.2rem !important; -} - -.rounded { - border-radius: 0.25rem !important; -} - -.rounded-top { - border-top-left-radius: 0.25rem !important; - border-top-right-radius: 0.25rem !important; -} - -.rounded-right { - border-top-right-radius: 0.25rem !important; - border-bottom-right-radius: 0.25rem !important; -} - -.rounded-bottom { - border-bottom-right-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-left { - border-top-left-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-lg { - border-radius: 0.3rem !important; -} - -.rounded-circle { - border-radius: 50% !important; -} - -.rounded-pill { - border-radius: 50rem !important; -} - -.rounded-0 { - border-radius: 0 !important; -} - -.clearfix::after { - display: block; - clear: both; - content: ""; -} - -.d-none { - display: none !important; -} - -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: flex !important; -} - -.d-inline-flex { - display: inline-flex !important; -} - -@media (min-width: 576px) { - .d-sm-none { - display: none !important; - } - - .d-sm-inline { - display: inline !important; - } - - .d-sm-inline-block { - display: inline-block !important; - } - - .d-sm-block { - display: block !important; - } - - .d-sm-table { - display: table !important; - } - - .d-sm-table-row { - display: table-row !important; - } - - .d-sm-table-cell { - display: table-cell !important; - } - - .d-sm-flex { - display: flex !important; - } - - .d-sm-inline-flex { - display: inline-flex !important; - } -} - -@media (min-width: 768px) { - .d-md-none { - display: none !important; - } - - .d-md-inline { - display: inline !important; - } - - .d-md-inline-block { - display: inline-block !important; - } - - .d-md-block { - display: block !important; - } - - .d-md-table { - display: table !important; - } - - .d-md-table-row { - display: table-row !important; - } - - .d-md-table-cell { - display: table-cell !important; - } - - .d-md-flex { - display: flex !important; - } - - .d-md-inline-flex { - display: inline-flex !important; - } -} - -@media (min-width: 992px) { - .d-lg-none { - display: none !important; - } - - .d-lg-inline { - display: inline !important; - } - - .d-lg-inline-block { - display: inline-block !important; - } - - .d-lg-block { - display: block !important; - } - - .d-lg-table { - display: table !important; - } - - .d-lg-table-row { - display: table-row !important; - } - - .d-lg-table-cell { - display: table-cell !important; - } - - .d-lg-flex { - display: flex !important; - } - - .d-lg-inline-flex { - display: inline-flex !important; - } -} - -@media (min-width: 1200px) { - .d-xl-none { - display: none !important; - } - - .d-xl-inline { - display: inline !important; - } - - .d-xl-inline-block { - display: inline-block !important; - } - - .d-xl-block { - display: block !important; - } - - .d-xl-table { - display: table !important; - } - - .d-xl-table-row { - display: table-row !important; - } - - .d-xl-table-cell { - display: table-cell !important; - } - - .d-xl-flex { - display: flex !important; - } - - .d-xl-inline-flex { - display: inline-flex !important; - } -} - -@media print { - .d-print-none { - display: none !important; - } - - .d-print-inline { - display: inline !important; - } - - .d-print-inline-block { - display: inline-block !important; - } - - .d-print-block { - display: block !important; - } - - .d-print-table { - display: table !important; - } - - .d-print-table-row { - display: table-row !important; - } - - .d-print-table-cell { - display: table-cell !important; - } - - .d-print-flex { - display: flex !important; - } - - .d-print-inline-flex { - display: inline-flex !important; - } -} - -.embed-responsive { - position: relative; - display: block; - width: 100%; - padding: 0; - overflow: hidden; -} - -.embed-responsive::before { - display: block; - content: ""; -} - -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} - -.embed-responsive-21by9::before { - padding-top: 42.8571428571%; -} - -.embed-responsive-16by9::before { - padding-top: 56.25%; -} - -.embed-responsive-4by3::before { - padding-top: 75%; -} - -.embed-responsive-1by1::before { - padding-top: 100%; -} - -.flex-row { - flex-direction: row !important; -} - -.flex-column { - flex-direction: column !important; -} - -.flex-row-reverse { - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - flex-direction: column-reverse !important; -} - -.flex-wrap { - flex-wrap: wrap !important; -} - -.flex-nowrap { - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important; -} - -.flex-fill { - flex: 1 1 auto !important; -} - -.flex-grow-0 { - flex-grow: 0 !important; -} - -.flex-grow-1 { - flex-grow: 1 !important; -} - -.flex-shrink-0 { - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - flex-shrink: 1 !important; -} - -.justify-content-start { - justify-content: flex-start !important; -} - -.justify-content-end { - justify-content: flex-end !important; -} - -.justify-content-center { - justify-content: center !important; -} - -.justify-content-between { - justify-content: space-between !important; -} - -.justify-content-around { - justify-content: space-around !important; -} - -.align-items-start { - align-items: flex-start !important; -} - -.align-items-end { - align-items: flex-end !important; -} - -.align-items-center { - align-items: center !important; -} - -.align-items-baseline { - align-items: baseline !important; -} - -.align-items-stretch { - align-items: stretch !important; -} - -.align-content-start { - align-content: flex-start !important; -} - -.align-content-end { - align-content: flex-end !important; -} - -.align-content-center { - align-content: center !important; -} - -.align-content-between { - align-content: space-between !important; -} - -.align-content-around { - align-content: space-around !important; -} - -.align-content-stretch { - align-content: stretch !important; -} - -.align-self-auto { - align-self: auto !important; -} - -.align-self-start { - align-self: flex-start !important; -} - -.align-self-end { - align-self: flex-end !important; -} - -.align-self-center { - align-self: center !important; -} - -.align-self-baseline { - align-self: baseline !important; -} - -.align-self-stretch { - align-self: stretch !important; -} - -@media (min-width: 576px) { - .flex-sm-row { - flex-direction: row !important; - } - - .flex-sm-column { - flex-direction: column !important; - } - - .flex-sm-row-reverse { - flex-direction: row-reverse !important; - } - - .flex-sm-column-reverse { - flex-direction: column-reverse !important; - } - - .flex-sm-wrap { - flex-wrap: wrap !important; - } - - .flex-sm-nowrap { - flex-wrap: nowrap !important; - } - - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - - .flex-sm-fill { - flex: 1 1 auto !important; - } - - .flex-sm-grow-0 { - flex-grow: 0 !important; - } - - .flex-sm-grow-1 { - flex-grow: 1 !important; - } - - .flex-sm-shrink-0 { - flex-shrink: 0 !important; - } - - .flex-sm-shrink-1 { - flex-shrink: 1 !important; - } - - .justify-content-sm-start { - justify-content: flex-start !important; - } - - .justify-content-sm-end { - justify-content: flex-end !important; - } - - .justify-content-sm-center { - justify-content: center !important; - } - - .justify-content-sm-between { - justify-content: space-between !important; - } - - .justify-content-sm-around { - justify-content: space-around !important; - } - - .align-items-sm-start { - align-items: flex-start !important; - } - - .align-items-sm-end { - align-items: flex-end !important; - } - - .align-items-sm-center { - align-items: center !important; - } - - .align-items-sm-baseline { - align-items: baseline !important; - } - - .align-items-sm-stretch { - align-items: stretch !important; - } - - .align-content-sm-start { - align-content: flex-start !important; - } - - .align-content-sm-end { - align-content: flex-end !important; - } - - .align-content-sm-center { - align-content: center !important; - } - - .align-content-sm-between { - align-content: space-between !important; - } - - .align-content-sm-around { - align-content: space-around !important; - } - - .align-content-sm-stretch { - align-content: stretch !important; - } - - .align-self-sm-auto { - align-self: auto !important; - } - - .align-self-sm-start { - align-self: flex-start !important; - } - - .align-self-sm-end { - align-self: flex-end !important; - } - - .align-self-sm-center { - align-self: center !important; - } - - .align-self-sm-baseline { - align-self: baseline !important; - } - - .align-self-sm-stretch { - align-self: stretch !important; - } -} - -@media (min-width: 768px) { - .flex-md-row { - flex-direction: row !important; - } - - .flex-md-column { - flex-direction: column !important; - } - - .flex-md-row-reverse { - flex-direction: row-reverse !important; - } - - .flex-md-column-reverse { - flex-direction: column-reverse !important; - } - - .flex-md-wrap { - flex-wrap: wrap !important; - } - - .flex-md-nowrap { - flex-wrap: nowrap !important; - } - - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - - .flex-md-fill { - flex: 1 1 auto !important; - } - - .flex-md-grow-0 { - flex-grow: 0 !important; - } - - .flex-md-grow-1 { - flex-grow: 1 !important; - } - - .flex-md-shrink-0 { - flex-shrink: 0 !important; - } - - .flex-md-shrink-1 { - flex-shrink: 1 !important; - } - - .justify-content-md-start { - justify-content: flex-start !important; - } - - .justify-content-md-end { - justify-content: flex-end !important; - } - - .justify-content-md-center { - justify-content: center !important; - } - - .justify-content-md-between { - justify-content: space-between !important; - } - - .justify-content-md-around { - justify-content: space-around !important; - } - - .align-items-md-start { - align-items: flex-start !important; - } - - .align-items-md-end { - align-items: flex-end !important; - } - - .align-items-md-center { - align-items: center !important; - } - - .align-items-md-baseline { - align-items: baseline !important; - } - - .align-items-md-stretch { - align-items: stretch !important; - } - - .align-content-md-start { - align-content: flex-start !important; - } - - .align-content-md-end { - align-content: flex-end !important; - } - - .align-content-md-center { - align-content: center !important; - } - - .align-content-md-between { - align-content: space-between !important; - } - - .align-content-md-around { - align-content: space-around !important; - } - - .align-content-md-stretch { - align-content: stretch !important; - } - - .align-self-md-auto { - align-self: auto !important; - } - - .align-self-md-start { - align-self: flex-start !important; - } - - .align-self-md-end { - align-self: flex-end !important; - } - - .align-self-md-center { - align-self: center !important; - } - - .align-self-md-baseline { - align-self: baseline !important; - } - - .align-self-md-stretch { - align-self: stretch !important; - } -} - -@media (min-width: 992px) { - .flex-lg-row { - flex-direction: row !important; - } - - .flex-lg-column { - flex-direction: column !important; - } - - .flex-lg-row-reverse { - flex-direction: row-reverse !important; - } - - .flex-lg-column-reverse { - flex-direction: column-reverse !important; - } - - .flex-lg-wrap { - flex-wrap: wrap !important; - } - - .flex-lg-nowrap { - flex-wrap: nowrap !important; - } - - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - - .flex-lg-fill { - flex: 1 1 auto !important; - } - - .flex-lg-grow-0 { - flex-grow: 0 !important; - } - - .flex-lg-grow-1 { - flex-grow: 1 !important; - } - - .flex-lg-shrink-0 { - flex-shrink: 0 !important; - } - - .flex-lg-shrink-1 { - flex-shrink: 1 !important; - } - - .justify-content-lg-start { - justify-content: flex-start !important; - } - - .justify-content-lg-end { - justify-content: flex-end !important; - } - - .justify-content-lg-center { - justify-content: center !important; - } - - .justify-content-lg-between { - justify-content: space-between !important; - } - - .justify-content-lg-around { - justify-content: space-around !important; - } - - .align-items-lg-start { - align-items: flex-start !important; - } - - .align-items-lg-end { - align-items: flex-end !important; - } - - .align-items-lg-center { - align-items: center !important; - } - - .align-items-lg-baseline { - align-items: baseline !important; - } - - .align-items-lg-stretch { - align-items: stretch !important; - } - - .align-content-lg-start { - align-content: flex-start !important; - } - - .align-content-lg-end { - align-content: flex-end !important; - } - - .align-content-lg-center { - align-content: center !important; - } - - .align-content-lg-between { - align-content: space-between !important; - } - - .align-content-lg-around { - align-content: space-around !important; - } - - .align-content-lg-stretch { - align-content: stretch !important; - } - - .align-self-lg-auto { - align-self: auto !important; - } - - .align-self-lg-start { - align-self: flex-start !important; - } - - .align-self-lg-end { - align-self: flex-end !important; - } - - .align-self-lg-center { - align-self: center !important; - } - - .align-self-lg-baseline { - align-self: baseline !important; - } - - .align-self-lg-stretch { - align-self: stretch !important; - } -} - -@media (min-width: 1200px) { - .flex-xl-row { - flex-direction: row !important; - } - - .flex-xl-column { - flex-direction: column !important; - } - - .flex-xl-row-reverse { - flex-direction: row-reverse !important; - } - - .flex-xl-column-reverse { - flex-direction: column-reverse !important; - } - - .flex-xl-wrap { - flex-wrap: wrap !important; - } - - .flex-xl-nowrap { - flex-wrap: nowrap !important; - } - - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - - .flex-xl-fill { - flex: 1 1 auto !important; - } - - .flex-xl-grow-0 { - flex-grow: 0 !important; - } - - .flex-xl-grow-1 { - flex-grow: 1 !important; - } - - .flex-xl-shrink-0 { - flex-shrink: 0 !important; - } - - .flex-xl-shrink-1 { - flex-shrink: 1 !important; - } - - .justify-content-xl-start { - justify-content: flex-start !important; - } - - .justify-content-xl-end { - justify-content: flex-end !important; - } - - .justify-content-xl-center { - justify-content: center !important; - } - - .justify-content-xl-between { - justify-content: space-between !important; - } - - .justify-content-xl-around { - justify-content: space-around !important; - } - - .align-items-xl-start { - align-items: flex-start !important; - } - - .align-items-xl-end { - align-items: flex-end !important; - } - - .align-items-xl-center { - align-items: center !important; - } - - .align-items-xl-baseline { - align-items: baseline !important; - } - - .align-items-xl-stretch { - align-items: stretch !important; - } - - .align-content-xl-start { - align-content: flex-start !important; - } - - .align-content-xl-end { - align-content: flex-end !important; - } - - .align-content-xl-center { - align-content: center !important; - } - - .align-content-xl-between { - align-content: space-between !important; - } - - .align-content-xl-around { - align-content: space-around !important; - } - - .align-content-xl-stretch { - align-content: stretch !important; - } - - .align-self-xl-auto { - align-self: auto !important; - } - - .align-self-xl-start { - align-self: flex-start !important; - } - - .align-self-xl-end { - align-self: flex-end !important; - } - - .align-self-xl-center { - align-self: center !important; - } - - .align-self-xl-baseline { - align-self: baseline !important; - } - - .align-self-xl-stretch { - align-self: stretch !important; - } -} - -.float-left { - float: left !important; -} - -.float-right { - float: right !important; -} - -.float-none { - float: none !important; -} - -@media (min-width: 576px) { - .float-sm-left { - float: left !important; - } - - .float-sm-right { - float: right !important; - } - - .float-sm-none { - float: none !important; - } -} - -@media (min-width: 768px) { - .float-md-left { - float: left !important; - } - - .float-md-right { - float: right !important; - } - - .float-md-none { - float: none !important; - } -} - -@media (min-width: 992px) { - .float-lg-left { - float: left !important; - } - - .float-lg-right { - float: right !important; - } - - .float-lg-none { - float: none !important; - } -} - -@media (min-width: 1200px) { - .float-xl-left { - float: left !important; - } - - .float-xl-right { - float: right !important; - } - - .float-xl-none { - float: none !important; - } -} - -.overflow-auto { - overflow: auto !important; -} - -.overflow-hidden { - overflow: hidden !important; -} - -.position-static { - position: static !important; -} - -.position-relative { - position: relative !important; -} - -.position-absolute { - position: absolute !important; -} - -.position-fixed { - position: fixed !important; -} - -.position-sticky { - position: -webkit-sticky !important; - position: sticky !important; -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030; -} - -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; -} - -@supports ((position: -webkit-sticky) or (position: sticky)) { - .sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; - } -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} - -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal; -} - -.shadow-sm { - box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; -} - -.shadow { - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; -} - -.shadow-none { - box-shadow: none !important; -} - -.w-25 { - width: 25% !important; -} - -.w-50 { - width: 50% !important; -} - -.w-75 { - width: 75% !important; -} - -.w-100 { - width: 100% !important; -} - -.w-auto { - width: auto !important; -} - -.h-25 { - height: 25% !important; -} - -.h-50 { - height: 50% !important; -} - -.h-75 { - height: 75% !important; -} - -.h-100 { - height: 100% !important; -} - -.h-auto { - height: auto !important; -} - -.mw-100 { - max-width: 100% !important; -} - -.mh-100 { - max-height: 100% !important; -} - -.min-vw-100 { - min-width: 100vw !important; -} - -.min-vh-100 { - min-height: 100vh !important; -} - -.vw-100 { - width: 100vw !important; -} - -.vh-100 { - height: 100vh !important; -} - -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - pointer-events: auto; - content: ""; - background-color: rgba(0, 0, 0, 0); -} - -.m-0 { - margin: 0 !important; -} - -.mt-0, -.my-0 { - margin-top: 0 !important; -} - -.mr-0, -.mx-0 { - margin-right: 0 !important; -} - -.mb-0, -.my-0 { - margin-bottom: 0 !important; -} - -.ml-0, -.mx-0 { - margin-left: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.mt-1, -.my-1 { - margin-top: 0.25rem !important; -} - -.mr-1, -.mx-1 { - margin-right: 0.25rem !important; -} - -.mb-1, -.my-1 { - margin-bottom: 0.25rem !important; -} - -.ml-1, -.mx-1 { - margin-left: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.mt-2, -.my-2 { - margin-top: 0.5rem !important; -} - -.mr-2, -.mx-2 { - margin-right: 0.5rem !important; -} - -.mb-2, -.my-2 { - margin-bottom: 0.5rem !important; -} - -.ml-2, -.mx-2 { - margin-left: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.mt-3, -.my-3 { - margin-top: 1rem !important; -} - -.mr-3, -.mx-3 { - margin-right: 1rem !important; -} - -.mb-3, -.my-3 { - margin-bottom: 1rem !important; -} - -.ml-3, -.mx-3 { - margin-left: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.mt-4, -.my-4 { - margin-top: 1.5rem !important; -} - -.mr-4, -.mx-4 { - margin-right: 1.5rem !important; -} - -.mb-4, -.my-4 { - margin-bottom: 1.5rem !important; -} - -.ml-4, -.mx-4 { - margin-left: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.mt-5, -.my-5 { - margin-top: 3rem !important; -} - -.mr-5, -.mx-5 { - margin-right: 3rem !important; -} - -.mb-5, -.my-5 { - margin-bottom: 3rem !important; -} - -.ml-5, -.mx-5 { - margin-left: 3rem !important; -} - -.p-0 { - padding: 0 !important; -} - -.pt-0, -.py-0 { - padding-top: 0 !important; -} - -.pr-0, -.px-0 { - padding-right: 0 !important; -} - -.pb-0, -.py-0 { - padding-bottom: 0 !important; -} - -.pl-0, -.px-0 { - padding-left: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.pt-1, -.py-1 { - padding-top: 0.25rem !important; -} - -.pr-1, -.px-1 { - padding-right: 0.25rem !important; -} - -.pb-1, -.py-1 { - padding-bottom: 0.25rem !important; -} - -.pl-1, -.px-1 { - padding-left: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.pt-2, -.py-2 { - padding-top: 0.5rem !important; -} - -.pr-2, -.px-2 { - padding-right: 0.5rem !important; -} - -.pb-2, -.py-2 { - padding-bottom: 0.5rem !important; -} - -.pl-2, -.px-2 { - padding-left: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.pt-3, -.py-3 { - padding-top: 1rem !important; -} - -.pr-3, -.px-3 { - padding-right: 1rem !important; -} - -.pb-3, -.py-3 { - padding-bottom: 1rem !important; -} - -.pl-3, -.px-3 { - padding-left: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.pt-4, -.py-4 { - padding-top: 1.5rem !important; -} - -.pr-4, -.px-4 { - padding-right: 1.5rem !important; -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important; -} - -.pl-4, -.px-4 { - padding-left: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.pt-5, -.py-5 { - padding-top: 3rem !important; -} - -.pr-5, -.px-5 { - padding-right: 3rem !important; -} - -.pb-5, -.py-5 { - padding-bottom: 3rem !important; -} - -.pl-5, -.px-5 { - padding-left: 3rem !important; -} - -.m-n1 { - margin: -0.25rem !important; -} - -.mt-n1, -.my-n1 { - margin-top: -0.25rem !important; -} - -.mr-n1, -.mx-n1 { - margin-right: -0.25rem !important; -} - -.mb-n1, -.my-n1 { - margin-bottom: -0.25rem !important; -} - -.ml-n1, -.mx-n1 { - margin-left: -0.25rem !important; -} - -.m-n2 { - margin: -0.5rem !important; -} - -.mt-n2, -.my-n2 { - margin-top: -0.5rem !important; -} - -.mr-n2, -.mx-n2 { - margin-right: -0.5rem !important; -} - -.mb-n2, -.my-n2 { - margin-bottom: -0.5rem !important; -} - -.ml-n2, -.mx-n2 { - margin-left: -0.5rem !important; -} - -.m-n3 { - margin: -1rem !important; -} - -.mt-n3, -.my-n3 { - margin-top: -1rem !important; -} - -.mr-n3, -.mx-n3 { - margin-right: -1rem !important; -} - -.mb-n3, -.my-n3 { - margin-bottom: -1rem !important; -} - -.ml-n3, -.mx-n3 { - margin-left: -1rem !important; -} - -.m-n4 { - margin: -1.5rem !important; -} - -.mt-n4, -.my-n4 { - margin-top: -1.5rem !important; -} - -.mr-n4, -.mx-n4 { - margin-right: -1.5rem !important; -} - -.mb-n4, -.my-n4 { - margin-bottom: -1.5rem !important; -} - -.ml-n4, -.mx-n4 { - margin-left: -1.5rem !important; -} - -.m-n5 { - margin: -3rem !important; -} - -.mt-n5, -.my-n5 { - margin-top: -3rem !important; -} - -.mr-n5, -.mx-n5 { - margin-right: -3rem !important; -} - -.mb-n5, -.my-n5 { - margin-bottom: -3rem !important; -} - -.ml-n5, -.mx-n5 { - margin-left: -3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mt-auto, -.my-auto { - margin-top: auto !important; -} - -.mr-auto, -.mx-auto { - margin-right: auto !important; -} - -.mb-auto, -.my-auto { - margin-bottom: auto !important; -} - -.ml-auto, -.mx-auto { - margin-left: auto !important; -} - -@media (min-width: 576px) { - .m-sm-0 { - margin: 0 !important; - } - - .mt-sm-0, - .my-sm-0 { - margin-top: 0 !important; - } - - .mr-sm-0, - .mx-sm-0 { - margin-right: 0 !important; - } - - .mb-sm-0, - .my-sm-0 { - margin-bottom: 0 !important; - } - - .ml-sm-0, - .mx-sm-0 { - margin-left: 0 !important; - } - - .m-sm-1 { - margin: 0.25rem !important; - } - - .mt-sm-1, - .my-sm-1 { - margin-top: 0.25rem !important; - } - - .mr-sm-1, - .mx-sm-1 { - margin-right: 0.25rem !important; - } - - .mb-sm-1, - .my-sm-1 { - margin-bottom: 0.25rem !important; - } - - .ml-sm-1, - .mx-sm-1 { - margin-left: 0.25rem !important; - } - - .m-sm-2 { - margin: 0.5rem !important; - } - - .mt-sm-2, - .my-sm-2 { - margin-top: 0.5rem !important; - } - - .mr-sm-2, - .mx-sm-2 { - margin-right: 0.5rem !important; - } - - .mb-sm-2, - .my-sm-2 { - margin-bottom: 0.5rem !important; - } - - .ml-sm-2, - .mx-sm-2 { - margin-left: 0.5rem !important; - } - - .m-sm-3 { - margin: 1rem !important; - } - - .mt-sm-3, - .my-sm-3 { - margin-top: 1rem !important; - } - - .mr-sm-3, - .mx-sm-3 { - margin-right: 1rem !important; - } - - .mb-sm-3, - .my-sm-3 { - margin-bottom: 1rem !important; - } - - .ml-sm-3, - .mx-sm-3 { - margin-left: 1rem !important; - } - - .m-sm-4 { - margin: 1.5rem !important; - } - - .mt-sm-4, - .my-sm-4 { - margin-top: 1.5rem !important; - } - - .mr-sm-4, - .mx-sm-4 { - margin-right: 1.5rem !important; - } - - .mb-sm-4, - .my-sm-4 { - margin-bottom: 1.5rem !important; - } - - .ml-sm-4, - .mx-sm-4 { - margin-left: 1.5rem !important; - } - - .m-sm-5 { - margin: 3rem !important; - } - - .mt-sm-5, - .my-sm-5 { - margin-top: 3rem !important; - } - - .mr-sm-5, - .mx-sm-5 { - margin-right: 3rem !important; - } - - .mb-sm-5, - .my-sm-5 { - margin-bottom: 3rem !important; - } - - .ml-sm-5, - .mx-sm-5 { - margin-left: 3rem !important; - } - - .p-sm-0 { - padding: 0 !important; - } - - .pt-sm-0, - .py-sm-0 { - padding-top: 0 !important; - } - - .pr-sm-0, - .px-sm-0 { - padding-right: 0 !important; - } - - .pb-sm-0, - .py-sm-0 { - padding-bottom: 0 !important; - } - - .pl-sm-0, - .px-sm-0 { - padding-left: 0 !important; - } - - .p-sm-1 { - padding: 0.25rem !important; - } - - .pt-sm-1, - .py-sm-1 { - padding-top: 0.25rem !important; - } - - .pr-sm-1, - .px-sm-1 { - padding-right: 0.25rem !important; - } - - .pb-sm-1, - .py-sm-1 { - padding-bottom: 0.25rem !important; - } - - .pl-sm-1, - .px-sm-1 { - padding-left: 0.25rem !important; - } - - .p-sm-2 { - padding: 0.5rem !important; - } - - .pt-sm-2, - .py-sm-2 { - padding-top: 0.5rem !important; - } - - .pr-sm-2, - .px-sm-2 { - padding-right: 0.5rem !important; - } - - .pb-sm-2, - .py-sm-2 { - padding-bottom: 0.5rem !important; - } - - .pl-sm-2, - .px-sm-2 { - padding-left: 0.5rem !important; - } - - .p-sm-3 { - padding: 1rem !important; - } - - .pt-sm-3, - .py-sm-3 { - padding-top: 1rem !important; - } - - .pr-sm-3, - .px-sm-3 { - padding-right: 1rem !important; - } - - .pb-sm-3, - .py-sm-3 { - padding-bottom: 1rem !important; - } - - .pl-sm-3, - .px-sm-3 { - padding-left: 1rem !important; - } - - .p-sm-4 { - padding: 1.5rem !important; - } - - .pt-sm-4, - .py-sm-4 { - padding-top: 1.5rem !important; - } - - .pr-sm-4, - .px-sm-4 { - padding-right: 1.5rem !important; - } - - .pb-sm-4, - .py-sm-4 { - padding-bottom: 1.5rem !important; - } - - .pl-sm-4, - .px-sm-4 { - padding-left: 1.5rem !important; - } - - .p-sm-5 { - padding: 3rem !important; - } - - .pt-sm-5, - .py-sm-5 { - padding-top: 3rem !important; - } - - .pr-sm-5, - .px-sm-5 { - padding-right: 3rem !important; - } - - .pb-sm-5, - .py-sm-5 { - padding-bottom: 3rem !important; - } - - .pl-sm-5, - .px-sm-5 { - padding-left: 3rem !important; - } - - .m-sm-n1 { - margin: -0.25rem !important; - } - - .mt-sm-n1, - .my-sm-n1 { - margin-top: -0.25rem !important; - } - - .mr-sm-n1, - .mx-sm-n1 { - margin-right: -0.25rem !important; - } - - .mb-sm-n1, - .my-sm-n1 { - margin-bottom: -0.25rem !important; - } - - .ml-sm-n1, - .mx-sm-n1 { - margin-left: -0.25rem !important; - } - - .m-sm-n2 { - margin: -0.5rem !important; - } - - .mt-sm-n2, - .my-sm-n2 { - margin-top: -0.5rem !important; - } - - .mr-sm-n2, - .mx-sm-n2 { - margin-right: -0.5rem !important; - } - - .mb-sm-n2, - .my-sm-n2 { - margin-bottom: -0.5rem !important; - } - - .ml-sm-n2, - .mx-sm-n2 { - margin-left: -0.5rem !important; - } - - .m-sm-n3 { - margin: -1rem !important; - } - - .mt-sm-n3, - .my-sm-n3 { - margin-top: -1rem !important; - } - - .mr-sm-n3, - .mx-sm-n3 { - margin-right: -1rem !important; - } - - .mb-sm-n3, - .my-sm-n3 { - margin-bottom: -1rem !important; - } - - .ml-sm-n3, - .mx-sm-n3 { - margin-left: -1rem !important; - } - - .m-sm-n4 { - margin: -1.5rem !important; - } - - .mt-sm-n4, - .my-sm-n4 { - margin-top: -1.5rem !important; - } - - .mr-sm-n4, - .mx-sm-n4 { - margin-right: -1.5rem !important; - } - - .mb-sm-n4, - .my-sm-n4 { - margin-bottom: -1.5rem !important; - } - - .ml-sm-n4, - .mx-sm-n4 { - margin-left: -1.5rem !important; - } - - .m-sm-n5 { - margin: -3rem !important; - } - - .mt-sm-n5, - .my-sm-n5 { - margin-top: -3rem !important; - } - - .mr-sm-n5, - .mx-sm-n5 { - margin-right: -3rem !important; - } - - .mb-sm-n5, - .my-sm-n5 { - margin-bottom: -3rem !important; - } - - .ml-sm-n5, - .mx-sm-n5 { - margin-left: -3rem !important; - } - - .m-sm-auto { - margin: auto !important; - } - - .mt-sm-auto, - .my-sm-auto { - margin-top: auto !important; - } - - .mr-sm-auto, - .mx-sm-auto { - margin-right: auto !important; - } - - .mb-sm-auto, - .my-sm-auto { - margin-bottom: auto !important; - } - - .ml-sm-auto, - .mx-sm-auto { - margin-left: auto !important; - } -} - -@media (min-width: 768px) { - .m-md-0 { - margin: 0 !important; - } - - .mt-md-0, - .my-md-0 { - margin-top: 0 !important; - } - - .mr-md-0, - .mx-md-0 { - margin-right: 0 !important; - } - - .mb-md-0, - .my-md-0 { - margin-bottom: 0 !important; - } - - .ml-md-0, - .mx-md-0 { - margin-left: 0 !important; - } - - .m-md-1 { - margin: 0.25rem !important; - } - - .mt-md-1, - .my-md-1 { - margin-top: 0.25rem !important; - } - - .mr-md-1, - .mx-md-1 { - margin-right: 0.25rem !important; - } - - .mb-md-1, - .my-md-1 { - margin-bottom: 0.25rem !important; - } - - .ml-md-1, - .mx-md-1 { - margin-left: 0.25rem !important; - } - - .m-md-2 { - margin: 0.5rem !important; - } - - .mt-md-2, - .my-md-2 { - margin-top: 0.5rem !important; - } - - .mr-md-2, - .mx-md-2 { - margin-right: 0.5rem !important; - } - - .mb-md-2, - .my-md-2 { - margin-bottom: 0.5rem !important; - } - - .ml-md-2, - .mx-md-2 { - margin-left: 0.5rem !important; - } - - .m-md-3 { - margin: 1rem !important; - } - - .mt-md-3, - .my-md-3 { - margin-top: 1rem !important; - } - - .mr-md-3, - .mx-md-3 { - margin-right: 1rem !important; - } - - .mb-md-3, - .my-md-3 { - margin-bottom: 1rem !important; - } - - .ml-md-3, - .mx-md-3 { - margin-left: 1rem !important; - } - - .m-md-4 { - margin: 1.5rem !important; - } - - .mt-md-4, - .my-md-4 { - margin-top: 1.5rem !important; - } - - .mr-md-4, - .mx-md-4 { - margin-right: 1.5rem !important; - } - - .mb-md-4, - .my-md-4 { - margin-bottom: 1.5rem !important; - } - - .ml-md-4, - .mx-md-4 { - margin-left: 1.5rem !important; - } - - .m-md-5 { - margin: 3rem !important; - } - - .mt-md-5, - .my-md-5 { - margin-top: 3rem !important; - } - - .mr-md-5, - .mx-md-5 { - margin-right: 3rem !important; - } - - .mb-md-5, - .my-md-5 { - margin-bottom: 3rem !important; - } - - .ml-md-5, - .mx-md-5 { - margin-left: 3rem !important; - } - - .p-md-0 { - padding: 0 !important; - } - - .pt-md-0, - .py-md-0 { - padding-top: 0 !important; - } - - .pr-md-0, - .px-md-0 { - padding-right: 0 !important; - } - - .pb-md-0, - .py-md-0 { - padding-bottom: 0 !important; - } - - .pl-md-0, - .px-md-0 { - padding-left: 0 !important; - } - - .p-md-1 { - padding: 0.25rem !important; - } - - .pt-md-1, - .py-md-1 { - padding-top: 0.25rem !important; - } - - .pr-md-1, - .px-md-1 { - padding-right: 0.25rem !important; - } - - .pb-md-1, - .py-md-1 { - padding-bottom: 0.25rem !important; - } - - .pl-md-1, - .px-md-1 { - padding-left: 0.25rem !important; - } - - .p-md-2 { - padding: 0.5rem !important; - } - - .pt-md-2, - .py-md-2 { - padding-top: 0.5rem !important; - } - - .pr-md-2, - .px-md-2 { - padding-right: 0.5rem !important; - } - - .pb-md-2, - .py-md-2 { - padding-bottom: 0.5rem !important; - } - - .pl-md-2, - .px-md-2 { - padding-left: 0.5rem !important; - } - - .p-md-3 { - padding: 1rem !important; - } - - .pt-md-3, - .py-md-3 { - padding-top: 1rem !important; - } - - .pr-md-3, - .px-md-3 { - padding-right: 1rem !important; - } - - .pb-md-3, - .py-md-3 { - padding-bottom: 1rem !important; - } - - .pl-md-3, - .px-md-3 { - padding-left: 1rem !important; - } - - .p-md-4 { - padding: 1.5rem !important; - } - - .pt-md-4, - .py-md-4 { - padding-top: 1.5rem !important; - } - - .pr-md-4, - .px-md-4 { - padding-right: 1.5rem !important; - } - - .pb-md-4, - .py-md-4 { - padding-bottom: 1.5rem !important; - } - - .pl-md-4, - .px-md-4 { - padding-left: 1.5rem !important; - } - - .p-md-5 { - padding: 3rem !important; - } - - .pt-md-5, - .py-md-5 { - padding-top: 3rem !important; - } - - .pr-md-5, - .px-md-5 { - padding-right: 3rem !important; - } - - .pb-md-5, - .py-md-5 { - padding-bottom: 3rem !important; - } - - .pl-md-5, - .px-md-5 { - padding-left: 3rem !important; - } - - .m-md-n1 { - margin: -0.25rem !important; - } - - .mt-md-n1, - .my-md-n1 { - margin-top: -0.25rem !important; - } - - .mr-md-n1, - .mx-md-n1 { - margin-right: -0.25rem !important; - } - - .mb-md-n1, - .my-md-n1 { - margin-bottom: -0.25rem !important; - } - - .ml-md-n1, - .mx-md-n1 { - margin-left: -0.25rem !important; - } - - .m-md-n2 { - margin: -0.5rem !important; - } - - .mt-md-n2, - .my-md-n2 { - margin-top: -0.5rem !important; - } - - .mr-md-n2, - .mx-md-n2 { - margin-right: -0.5rem !important; - } - - .mb-md-n2, - .my-md-n2 { - margin-bottom: -0.5rem !important; - } - - .ml-md-n2, - .mx-md-n2 { - margin-left: -0.5rem !important; - } - - .m-md-n3 { - margin: -1rem !important; - } - - .mt-md-n3, - .my-md-n3 { - margin-top: -1rem !important; - } - - .mr-md-n3, - .mx-md-n3 { - margin-right: -1rem !important; - } - - .mb-md-n3, - .my-md-n3 { - margin-bottom: -1rem !important; - } - - .ml-md-n3, - .mx-md-n3 { - margin-left: -1rem !important; - } - - .m-md-n4 { - margin: -1.5rem !important; - } - - .mt-md-n4, - .my-md-n4 { - margin-top: -1.5rem !important; - } - - .mr-md-n4, - .mx-md-n4 { - margin-right: -1.5rem !important; - } - - .mb-md-n4, - .my-md-n4 { - margin-bottom: -1.5rem !important; - } - - .ml-md-n4, - .mx-md-n4 { - margin-left: -1.5rem !important; - } - - .m-md-n5 { - margin: -3rem !important; - } - - .mt-md-n5, - .my-md-n5 { - margin-top: -3rem !important; - } - - .mr-md-n5, - .mx-md-n5 { - margin-right: -3rem !important; - } - - .mb-md-n5, - .my-md-n5 { - margin-bottom: -3rem !important; - } - - .ml-md-n5, - .mx-md-n5 { - margin-left: -3rem !important; - } - - .m-md-auto { - margin: auto !important; - } - - .mt-md-auto, - .my-md-auto { - margin-top: auto !important; - } - - .mr-md-auto, - .mx-md-auto { - margin-right: auto !important; - } - - .mb-md-auto, - .my-md-auto { - margin-bottom: auto !important; - } - - .ml-md-auto, - .mx-md-auto { - margin-left: auto !important; - } -} - -@media (min-width: 992px) { - .m-lg-0 { - margin: 0 !important; - } - - .mt-lg-0, - .my-lg-0 { - margin-top: 0 !important; - } - - .mr-lg-0, - .mx-lg-0 { - margin-right: 0 !important; - } - - .mb-lg-0, - .my-lg-0 { - margin-bottom: 0 !important; - } - - .ml-lg-0, - .mx-lg-0 { - margin-left: 0 !important; - } - - .m-lg-1 { - margin: 0.25rem !important; - } - - .mt-lg-1, - .my-lg-1 { - margin-top: 0.25rem !important; - } - - .mr-lg-1, - .mx-lg-1 { - margin-right: 0.25rem !important; - } - - .mb-lg-1, - .my-lg-1 { - margin-bottom: 0.25rem !important; - } - - .ml-lg-1, - .mx-lg-1 { - margin-left: 0.25rem !important; - } - - .m-lg-2 { - margin: 0.5rem !important; - } - - .mt-lg-2, - .my-lg-2 { - margin-top: 0.5rem !important; - } - - .mr-lg-2, - .mx-lg-2 { - margin-right: 0.5rem !important; - } - - .mb-lg-2, - .my-lg-2 { - margin-bottom: 0.5rem !important; - } - - .ml-lg-2, - .mx-lg-2 { - margin-left: 0.5rem !important; - } - - .m-lg-3 { - margin: 1rem !important; - } - - .mt-lg-3, - .my-lg-3 { - margin-top: 1rem !important; - } - - .mr-lg-3, - .mx-lg-3 { - margin-right: 1rem !important; - } - - .mb-lg-3, - .my-lg-3 { - margin-bottom: 1rem !important; - } - - .ml-lg-3, - .mx-lg-3 { - margin-left: 1rem !important; - } - - .m-lg-4 { - margin: 1.5rem !important; - } - - .mt-lg-4, - .my-lg-4 { - margin-top: 1.5rem !important; - } - - .mr-lg-4, - .mx-lg-4 { - margin-right: 1.5rem !important; - } - - .mb-lg-4, - .my-lg-4 { - margin-bottom: 1.5rem !important; - } - - .ml-lg-4, - .mx-lg-4 { - margin-left: 1.5rem !important; - } - - .m-lg-5 { - margin: 3rem !important; - } - - .mt-lg-5, - .my-lg-5 { - margin-top: 3rem !important; - } - - .mr-lg-5, - .mx-lg-5 { - margin-right: 3rem !important; - } - - .mb-lg-5, - .my-lg-5 { - margin-bottom: 3rem !important; - } - - .ml-lg-5, - .mx-lg-5 { - margin-left: 3rem !important; - } - - .p-lg-0 { - padding: 0 !important; - } - - .pt-lg-0, - .py-lg-0 { - padding-top: 0 !important; - } - - .pr-lg-0, - .px-lg-0 { - padding-right: 0 !important; - } - - .pb-lg-0, - .py-lg-0 { - padding-bottom: 0 !important; - } - - .pl-lg-0, - .px-lg-0 { - padding-left: 0 !important; - } - - .p-lg-1 { - padding: 0.25rem !important; - } - - .pt-lg-1, - .py-lg-1 { - padding-top: 0.25rem !important; - } - - .pr-lg-1, - .px-lg-1 { - padding-right: 0.25rem !important; - } - - .pb-lg-1, - .py-lg-1 { - padding-bottom: 0.25rem !important; - } - - .pl-lg-1, - .px-lg-1 { - padding-left: 0.25rem !important; - } - - .p-lg-2 { - padding: 0.5rem !important; - } - - .pt-lg-2, - .py-lg-2 { - padding-top: 0.5rem !important; - } - - .pr-lg-2, - .px-lg-2 { - padding-right: 0.5rem !important; - } - - .pb-lg-2, - .py-lg-2 { - padding-bottom: 0.5rem !important; - } - - .pl-lg-2, - .px-lg-2 { - padding-left: 0.5rem !important; - } - - .p-lg-3 { - padding: 1rem !important; - } - - .pt-lg-3, - .py-lg-3 { - padding-top: 1rem !important; - } - - .pr-lg-3, - .px-lg-3 { - padding-right: 1rem !important; - } - - .pb-lg-3, - .py-lg-3 { - padding-bottom: 1rem !important; - } - - .pl-lg-3, - .px-lg-3 { - padding-left: 1rem !important; - } - - .p-lg-4 { - padding: 1.5rem !important; - } - - .pt-lg-4, - .py-lg-4 { - padding-top: 1.5rem !important; - } - - .pr-lg-4, - .px-lg-4 { - padding-right: 1.5rem !important; - } - - .pb-lg-4, - .py-lg-4 { - padding-bottom: 1.5rem !important; - } - - .pl-lg-4, - .px-lg-4 { - padding-left: 1.5rem !important; - } - - .p-lg-5 { - padding: 3rem !important; - } - - .pt-lg-5, - .py-lg-5 { - padding-top: 3rem !important; - } - - .pr-lg-5, - .px-lg-5 { - padding-right: 3rem !important; - } - - .pb-lg-5, - .py-lg-5 { - padding-bottom: 3rem !important; - } - - .pl-lg-5, - .px-lg-5 { - padding-left: 3rem !important; - } - - .m-lg-n1 { - margin: -0.25rem !important; - } - - .mt-lg-n1, - .my-lg-n1 { - margin-top: -0.25rem !important; - } - - .mr-lg-n1, - .mx-lg-n1 { - margin-right: -0.25rem !important; - } - - .mb-lg-n1, - .my-lg-n1 { - margin-bottom: -0.25rem !important; - } - - .ml-lg-n1, - .mx-lg-n1 { - margin-left: -0.25rem !important; - } - - .m-lg-n2 { - margin: -0.5rem !important; - } - - .mt-lg-n2, - .my-lg-n2 { - margin-top: -0.5rem !important; - } - - .mr-lg-n2, - .mx-lg-n2 { - margin-right: -0.5rem !important; - } - - .mb-lg-n2, - .my-lg-n2 { - margin-bottom: -0.5rem !important; - } - - .ml-lg-n2, - .mx-lg-n2 { - margin-left: -0.5rem !important; - } - - .m-lg-n3 { - margin: -1rem !important; - } - - .mt-lg-n3, - .my-lg-n3 { - margin-top: -1rem !important; - } - - .mr-lg-n3, - .mx-lg-n3 { - margin-right: -1rem !important; - } - - .mb-lg-n3, - .my-lg-n3 { - margin-bottom: -1rem !important; - } - - .ml-lg-n3, - .mx-lg-n3 { - margin-left: -1rem !important; - } - - .m-lg-n4 { - margin: -1.5rem !important; - } - - .mt-lg-n4, - .my-lg-n4 { - margin-top: -1.5rem !important; - } - - .mr-lg-n4, - .mx-lg-n4 { - margin-right: -1.5rem !important; - } - - .mb-lg-n4, - .my-lg-n4 { - margin-bottom: -1.5rem !important; - } - - .ml-lg-n4, - .mx-lg-n4 { - margin-left: -1.5rem !important; - } - - .m-lg-n5 { - margin: -3rem !important; - } - - .mt-lg-n5, - .my-lg-n5 { - margin-top: -3rem !important; - } - - .mr-lg-n5, - .mx-lg-n5 { - margin-right: -3rem !important; - } - - .mb-lg-n5, - .my-lg-n5 { - margin-bottom: -3rem !important; - } - - .ml-lg-n5, - .mx-lg-n5 { - margin-left: -3rem !important; - } - - .m-lg-auto { - margin: auto !important; - } - - .mt-lg-auto, - .my-lg-auto { - margin-top: auto !important; - } - - .mr-lg-auto, - .mx-lg-auto { - margin-right: auto !important; - } - - .mb-lg-auto, - .my-lg-auto { - margin-bottom: auto !important; - } - - .ml-lg-auto, - .mx-lg-auto { - margin-left: auto !important; - } -} - -@media (min-width: 1200px) { - .m-xl-0 { - margin: 0 !important; - } - - .mt-xl-0, - .my-xl-0 { - margin-top: 0 !important; - } - - .mr-xl-0, - .mx-xl-0 { - margin-right: 0 !important; - } - - .mb-xl-0, - .my-xl-0 { - margin-bottom: 0 !important; - } - - .ml-xl-0, - .mx-xl-0 { - margin-left: 0 !important; - } - - .m-xl-1 { - margin: 0.25rem !important; - } - - .mt-xl-1, - .my-xl-1 { - margin-top: 0.25rem !important; - } - - .mr-xl-1, - .mx-xl-1 { - margin-right: 0.25rem !important; - } - - .mb-xl-1, - .my-xl-1 { - margin-bottom: 0.25rem !important; - } - - .ml-xl-1, - .mx-xl-1 { - margin-left: 0.25rem !important; - } - - .m-xl-2 { - margin: 0.5rem !important; - } - - .mt-xl-2, - .my-xl-2 { - margin-top: 0.5rem !important; - } - - .mr-xl-2, - .mx-xl-2 { - margin-right: 0.5rem !important; - } - - .mb-xl-2, - .my-xl-2 { - margin-bottom: 0.5rem !important; - } - - .ml-xl-2, - .mx-xl-2 { - margin-left: 0.5rem !important; - } - - .m-xl-3 { - margin: 1rem !important; - } - - .mt-xl-3, - .my-xl-3 { - margin-top: 1rem !important; - } - - .mr-xl-3, - .mx-xl-3 { - margin-right: 1rem !important; - } - - .mb-xl-3, - .my-xl-3 { - margin-bottom: 1rem !important; - } - - .ml-xl-3, - .mx-xl-3 { - margin-left: 1rem !important; - } - - .m-xl-4 { - margin: 1.5rem !important; - } - - .mt-xl-4, - .my-xl-4 { - margin-top: 1.5rem !important; - } - - .mr-xl-4, - .mx-xl-4 { - margin-right: 1.5rem !important; - } - - .mb-xl-4, - .my-xl-4 { - margin-bottom: 1.5rem !important; - } - - .ml-xl-4, - .mx-xl-4 { - margin-left: 1.5rem !important; - } - - .m-xl-5 { - margin: 3rem !important; - } - - .mt-xl-5, - .my-xl-5 { - margin-top: 3rem !important; - } - - .mr-xl-5, - .mx-xl-5 { - margin-right: 3rem !important; - } - - .mb-xl-5, - .my-xl-5 { - margin-bottom: 3rem !important; - } - - .ml-xl-5, - .mx-xl-5 { - margin-left: 3rem !important; - } - - .p-xl-0 { - padding: 0 !important; - } - - .pt-xl-0, - .py-xl-0 { - padding-top: 0 !important; - } - - .pr-xl-0, - .px-xl-0 { - padding-right: 0 !important; - } - - .pb-xl-0, - .py-xl-0 { - padding-bottom: 0 !important; - } - - .pl-xl-0, - .px-xl-0 { - padding-left: 0 !important; - } - - .p-xl-1 { - padding: 0.25rem !important; - } - - .pt-xl-1, - .py-xl-1 { - padding-top: 0.25rem !important; - } - - .pr-xl-1, - .px-xl-1 { - padding-right: 0.25rem !important; - } - - .pb-xl-1, - .py-xl-1 { - padding-bottom: 0.25rem !important; - } - - .pl-xl-1, - .px-xl-1 { - padding-left: 0.25rem !important; - } - - .p-xl-2 { - padding: 0.5rem !important; - } - - .pt-xl-2, - .py-xl-2 { - padding-top: 0.5rem !important; - } - - .pr-xl-2, - .px-xl-2 { - padding-right: 0.5rem !important; - } - - .pb-xl-2, - .py-xl-2 { - padding-bottom: 0.5rem !important; - } - - .pl-xl-2, - .px-xl-2 { - padding-left: 0.5rem !important; - } - - .p-xl-3 { - padding: 1rem !important; - } - - .pt-xl-3, - .py-xl-3 { - padding-top: 1rem !important; - } - - .pr-xl-3, - .px-xl-3 { - padding-right: 1rem !important; - } - - .pb-xl-3, - .py-xl-3 { - padding-bottom: 1rem !important; - } - - .pl-xl-3, - .px-xl-3 { - padding-left: 1rem !important; - } - - .p-xl-4 { - padding: 1.5rem !important; - } - - .pt-xl-4, - .py-xl-4 { - padding-top: 1.5rem !important; - } - - .pr-xl-4, - .px-xl-4 { - padding-right: 1.5rem !important; - } - - .pb-xl-4, - .py-xl-4 { - padding-bottom: 1.5rem !important; - } - - .pl-xl-4, - .px-xl-4 { - padding-left: 1.5rem !important; - } - - .p-xl-5 { - padding: 3rem !important; - } - - .pt-xl-5, - .py-xl-5 { - padding-top: 3rem !important; - } - - .pr-xl-5, - .px-xl-5 { - padding-right: 3rem !important; - } - - .pb-xl-5, - .py-xl-5 { - padding-bottom: 3rem !important; - } - - .pl-xl-5, - .px-xl-5 { - padding-left: 3rem !important; - } - - .m-xl-n1 { - margin: -0.25rem !important; - } - - .mt-xl-n1, - .my-xl-n1 { - margin-top: -0.25rem !important; - } - - .mr-xl-n1, - .mx-xl-n1 { - margin-right: -0.25rem !important; - } - - .mb-xl-n1, - .my-xl-n1 { - margin-bottom: -0.25rem !important; - } - - .ml-xl-n1, - .mx-xl-n1 { - margin-left: -0.25rem !important; - } - - .m-xl-n2 { - margin: -0.5rem !important; - } - - .mt-xl-n2, - .my-xl-n2 { - margin-top: -0.5rem !important; - } - - .mr-xl-n2, - .mx-xl-n2 { - margin-right: -0.5rem !important; - } - - .mb-xl-n2, - .my-xl-n2 { - margin-bottom: -0.5rem !important; - } - - .ml-xl-n2, - .mx-xl-n2 { - margin-left: -0.5rem !important; - } - - .m-xl-n3 { - margin: -1rem !important; - } - - .mt-xl-n3, - .my-xl-n3 { - margin-top: -1rem !important; - } - - .mr-xl-n3, - .mx-xl-n3 { - margin-right: -1rem !important; - } - - .mb-xl-n3, - .my-xl-n3 { - margin-bottom: -1rem !important; - } - - .ml-xl-n3, - .mx-xl-n3 { - margin-left: -1rem !important; - } - - .m-xl-n4 { - margin: -1.5rem !important; - } - - .mt-xl-n4, - .my-xl-n4 { - margin-top: -1.5rem !important; - } - - .mr-xl-n4, - .mx-xl-n4 { - margin-right: -1.5rem !important; - } - - .mb-xl-n4, - .my-xl-n4 { - margin-bottom: -1.5rem !important; - } - - .ml-xl-n4, - .mx-xl-n4 { - margin-left: -1.5rem !important; - } - - .m-xl-n5 { - margin: -3rem !important; - } - - .mt-xl-n5, - .my-xl-n5 { - margin-top: -3rem !important; - } - - .mr-xl-n5, - .mx-xl-n5 { - margin-right: -3rem !important; - } - - .mb-xl-n5, - .my-xl-n5 { - margin-bottom: -3rem !important; - } - - .ml-xl-n5, - .mx-xl-n5 { - margin-left: -3rem !important; - } - - .m-xl-auto { - margin: auto !important; - } - - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important; - } - - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important; - } - - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important; - } - - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important; - } -} - -.text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; -} - -.text-justify { - text-align: justify !important; -} - -.text-wrap { - white-space: normal !important; -} - -.text-nowrap { - white-space: nowrap !important; -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.text-left { - text-align: left !important; -} - -.text-right { - text-align: right !important; -} - -.text-center { - text-align: center !important; -} - -@media (min-width: 576px) { - .text-sm-left { - text-align: left !important; - } - - .text-sm-right { - text-align: right !important; - } - - .text-sm-center { - text-align: center !important; - } -} - -@media (min-width: 768px) { - .text-md-left { - text-align: left !important; - } - - .text-md-right { - text-align: right !important; - } - - .text-md-center { - text-align: center !important; - } -} - -@media (min-width: 992px) { - .text-lg-left { - text-align: left !important; - } - - .text-lg-right { - text-align: right !important; - } - - .text-lg-center { - text-align: center !important; - } -} - -@media (min-width: 1200px) { - .text-xl-left { - text-align: left !important; - } - - .text-xl-right { - text-align: right !important; - } - - .text-xl-center { - text-align: center !important; - } -} - -.text-lowercase { - text-transform: lowercase !important; -} - -.text-uppercase { - text-transform: uppercase !important; -} - -.text-capitalize { - text-transform: capitalize !important; -} - -.font-weight-light { - font-weight: 300 !important; -} - -.font-weight-lighter { - font-weight: lighter !important; -} - -.font-weight-normal { - font-weight: 400 !important; -} - -.font-weight-bold { - font-weight: 700 !important; -} - -.font-weight-bolder { - font-weight: bolder !important; -} - -.font-italic { - font-style: italic !important; -} - -.text-white { - color: #fff !important; -} - -.text-primary { - color: #3490dc !important; -} - -a.text-primary:hover, -a.text-primary:focus { - color: #1d68a7 !important; -} - -.text-secondary { - color: #6c757d !important; -} - -a.text-secondary:hover, -a.text-secondary:focus { - color: #494f54 !important; -} - -.text-success { - color: #38c172 !important; -} - -a.text-success:hover, -a.text-success:focus { - color: #27864f !important; -} - -.text-info { - color: #6cb2eb !important; -} - -a.text-info:hover, -a.text-info:focus { - color: #298fe2 !important; -} - -.text-warning { - color: #ffed4a !important; -} - -a.text-warning:hover, -a.text-warning:focus { - color: #fde300 !important; -} - -.text-danger { - color: #e3342f !important; -} - -a.text-danger:hover, -a.text-danger:focus { - color: #ae1c17 !important; -} - -.text-light { - color: #f8f9fa !important; -} - -a.text-light:hover, -a.text-light:focus { - color: #cbd3da !important; -} - -.text-dark { - color: #343a40 !important; -} - -a.text-dark:hover, -a.text-dark:focus { - color: #121416 !important; -} - -.text-body { - color: #212529 !important; -} - -.text-muted { - color: #6c757d !important; -} - -.text-black-50 { - color: rgba(0, 0, 0, 0.5) !important; -} - -.text-white-50 { - color: rgba(255, 255, 255, 0.5) !important; -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.text-decoration-none { - text-decoration: none !important; -} - -.text-break { - word-break: break-word !important; - overflow-wrap: break-word !important; -} - -.text-reset { - color: inherit !important; -} - -.visible { - visibility: visible !important; -} - -.invisible { - visibility: hidden !important; -} - -@media print { - *, - *::before, - *::after { - text-shadow: none !important; - box-shadow: none !important; - } - - a:not(.btn) { - text-decoration: underline; - } - - abbr[title]::after { - content: " (" attr(title) ")"; - } - - pre { - white-space: pre-wrap !important; - } - - pre, - blockquote { - border: 1px solid #adb5bd; - page-break-inside: avoid; - } - - thead { - display: table-header-group; - } - - tr, - img { - page-break-inside: avoid; - } - - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - - h2, - h3 { - page-break-after: avoid; - } - -@page { - size: a3; -} - - body { - min-width: 992px !important; - } - - .container { - min-width: 992px !important; - } - - .navbar { - display: none; - } - - .badge { - border: 1px solid #000; - } - - .table { - border-collapse: collapse !important; - } - - .table td, - .table th { - background-color: #fff !important; - } - - .table-bordered th, - .table-bordered td { - border: 1px solid #dee2e6 !important; - } - - .table-dark { - color: inherit; - } - - .table-dark th, - .table-dark td, - .table-dark thead th, - .table-dark tbody + tbody { - border-color: #dee2e6; - } - - .table .thead-dark th { - color: inherit; - border-color: #dee2e6; - } -} - + */:root{--blue:#3490dc;--indigo:#6574cd;--purple:#9561e2;--pink:#f66d9b;--red:#e3342f;--orange:#f6993f;--yellow:#ffed4a;--green:#38c172;--teal:#4dc0b5;--cyan:#6cb2eb;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#3490dc;--secondary:#6c757d;--success:#38c172;--info:#6cb2eb;--warning:#ffed4a;--danger:#e3342f;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Nunito",sans-serif;--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Nunito,sans-serif;font-size:.9rem;font-weight:400;line-height:1.6;color:#212529;text-align:left;background-color:#f8fafc}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#3490dc;text-decoration:none;background-color:transparent}a:hover{color:#1d68a7;text-decoration:underline}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.25rem}.h2,h2{font-size:1.8rem}.h3,h3{font-size:1.575rem}.h4,h4{font-size:1.35rem}.h5,h5{font-size:1.125rem}.h6,h6{font-size:.9rem}.lead{font-size:1.125rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.125rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#f8fafc;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#f66d9b;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#c6e0f5}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#95c5ed}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b0d4f1}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c7eed8}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#98dfb6}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b3e8ca}.table-info,.table-info>td,.table-info>th{background-color:#d6e9f9}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#b3d7f5}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c0ddf6}.table-warning,.table-warning>td,.table-warning>th{background-color:#fffacc}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#fff6a1}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fff8b3}.table-danger,.table-danger>td,.table-danger>th{background-color:#f7c6c5}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#f09593}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f4b0af}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.6em + .75rem + 2px);padding:.375rem .75rem;font-size:.9rem;font-weight:400;line-height:1.6;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#a1cbef;outline:0;box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.6}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.125rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.7875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:.9rem;line-height:1.6;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.7875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#38c172}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.7875rem;line-height:1.6;color:#fff;background-color:rgba(56,193,114,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#38c172;padding-right:calc(1.6em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2338c172' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.4em + .1875rem) center;background-size:calc(.8em + .375rem) calc(.8em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#38c172;box-shadow:0 0 0 .2rem rgba(56,193,114,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.6em + .75rem);background-position:top calc(.4em + .1875rem) right calc(.4em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#38c172;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2338c172' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.8em + .375rem) calc(.8em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#38c172;box-shadow:0 0 0 .2rem rgba(56,193,114,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#38c172}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#38c172}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#38c172}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#5cd08d;background-color:#5cd08d}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(56,193,114,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#38c172}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#38c172;box-shadow:0 0 0 .2rem rgba(56,193,114,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#e3342f}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.7875rem;line-height:1.6;color:#fff;background-color:rgba(227,52,47,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#e3342f;padding-right:calc(1.6em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e3342f'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23e3342f' stroke='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.4em + .1875rem) center;background-size:calc(.8em + .375rem) calc(.8em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#e3342f;box-shadow:0 0 0 .2rem rgba(227,52,47,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.6em + .75rem);background-position:top calc(.4em + .1875rem) right calc(.4em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#e3342f;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e3342f'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23e3342f' stroke='none'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.8em + .375rem) calc(.8em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#e3342f;box-shadow:0 0 0 .2rem rgba(227,52,47,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#e3342f}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#e3342f}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#e3342f}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#e9605c;background-color:#e9605c}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(227,52,47,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#e3342f}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#e3342f;box-shadow:0 0 0 .2rem rgba(227,52,47,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:.9rem;line-height:1.6;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#3490dc;border-color:#3490dc}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#227dc7;border-color:#2176bd}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(82,161,225,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#3490dc;border-color:#3490dc}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#2176bd;border-color:#1f6fb2}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,161,225,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#38c172;border-color:#38c172}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#2fa360;border-color:#2d995b}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(86,202,135,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#38c172;border-color:#38c172}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#2d995b;border-color:#2a9055}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(86,202,135,.5)}.btn-info{color:#212529;background-color:#6cb2eb;border-color:#6cb2eb}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#4aa0e6;border-color:#3f9ae5}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(97,157,206,.5)}.btn-info.disabled,.btn-info:disabled{color:#212529;background-color:#6cb2eb;border-color:#6cb2eb}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3f9ae5;border-color:#3495e3}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(97,157,206,.5)}.btn-warning{color:#212529;background-color:#ffed4a;border-color:#ffed4a}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#ffe924;border-color:#ffe817}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,207,69,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffed4a;border-color:#ffed4a}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#ffe817;border-color:#ffe70a}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,207,69,.5)}.btn-danger{color:#fff;background-color:#e3342f;border-color:#e3342f}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#d0211c;border-color:#c51f1a}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(231,82,78,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#e3342f;border-color:#e3342f}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c51f1a;border-color:#b91d19}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(231,82,78,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#3490dc;border-color:#3490dc}.btn-outline-primary:hover{color:#fff;background-color:#3490dc;border-color:#3490dc}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(52,144,220,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#3490dc;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#3490dc;border-color:#3490dc}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,144,220,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#38c172;border-color:#38c172}.btn-outline-success:hover{color:#fff;background-color:#38c172;border-color:#38c172}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(56,193,114,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#38c172;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#38c172;border-color:#38c172}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(56,193,114,.5)}.btn-outline-info{color:#6cb2eb;border-color:#6cb2eb}.btn-outline-info:hover{color:#212529;background-color:#6cb2eb;border-color:#6cb2eb}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(108,178,235,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#6cb2eb;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#212529;background-color:#6cb2eb;border-color:#6cb2eb}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,178,235,.5)}.btn-outline-warning{color:#ffed4a;border-color:#ffed4a}.btn-outline-warning:hover{color:#212529;background-color:#ffed4a;border-color:#ffed4a}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,237,74,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffed4a;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffed4a;border-color:#ffed4a}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,237,74,.5)}.btn-outline-danger{color:#e3342f;border-color:#e3342f}.btn-outline-danger:hover{color:#fff;background-color:#e3342f;border-color:#e3342f}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(227,52,47,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#e3342f;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#e3342f;border-color:#e3342f}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(227,52,47,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#3490dc;text-decoration:none}.btn-link:hover{color:#1d68a7}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.7875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.9rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#3490dc}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.7875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:.9rem;font-weight:400;line-height:1.6;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.7875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.44rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.22rem;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#3490dc;background-color:#3490dc}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#a1cbef}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#cce3f6;border-color:#cce3f6}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.22rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#3490dc;background-color:#3490dc}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(52,144,220,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(52,144,220,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(52,144,220,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.22rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(52,144,220,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.6em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:.9rem;font-weight:400;line-height:1.6;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#a1cbef;outline:0;box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.7875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.125rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.6em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#a1cbef;box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.6em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.6;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.6em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f8fafc,0 0 0 .2rem rgba(52,144,220,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f8fafc,0 0 0 .2rem rgba(52,144,220,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #f8fafc,0 0 0 .2rem rgba(52,144,220,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#3490dc;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#cce3f6}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#3490dc;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#cce3f6}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#3490dc;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#cce3f6}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#f8fafc;border-color:#dee2e6 #dee2e6 #f8fafc}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#3490dc}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.32rem;padding-bottom:.32rem;margin-right:1rem;font-size:1.125rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.125rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb,.breadcrumb-item{display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#3490dc;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#1d68a7;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(52,144,220,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#3490dc;border-color:#3490dc}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.125rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.7875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#3490dc}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#2176bd}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,144,220,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#38c172}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#2d995b}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(56,193,114,.5)}.badge-info{color:#212529;background-color:#6cb2eb}a.badge-info:focus,a.badge-info:hover{color:#212529;background-color:#3f9ae5}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,178,235,.5)}.badge-warning{color:#212529;background-color:#ffed4a}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#ffe817}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,237,74,.5)}.badge-danger{color:#fff;background-color:#e3342f}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#c51f1a}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(227,52,47,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.85rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#1b4b72;background-color:#d6e9f8;border-color:#c6e0f5}.alert-primary hr{border-top-color:#b0d4f1}.alert-primary .alert-link{color:#113049}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#1d643b;background-color:#d7f3e3;border-color:#c7eed8}.alert-success hr{border-top-color:#b3e8ca}.alert-success .alert-link{color:#123c24}.alert-info{color:#385d7a;background-color:#e2f0fb;border-color:#d6e9f9}.alert-info hr{border-top-color:#c0ddf6}.alert-info .alert-link{color:#284257}.alert-warning{color:#857b26;background-color:#fffbdb;border-color:#fffacc}.alert-warning hr{border-top-color:#fff8b3}.alert-warning .alert-link{color:#5d561b}.alert-danger{color:#761b18;background-color:#f9d6d5;border-color:#f7c6c5}.alert-danger hr{border-top-color:#f4b0af}.alert-danger .alert-link{color:#4c110f}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;line-height:0;font-size:.675rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#3490dc;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#3490dc;border-color:#3490dc}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#1b4b72;background-color:#c6e0f5}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#1b4b72;background-color:#b0d4f1}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#1b4b72;border-color:#1b4b72}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#1d643b;background-color:#c7eed8}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#1d643b;background-color:#b3e8ca}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#1d643b;border-color:#1d643b}.list-group-item-info{color:#385d7a;background-color:#d6e9f9}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#385d7a;background-color:#c0ddf6}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#385d7a;border-color:#385d7a}.list-group-item-warning{color:#857b26;background-color:#fffacc}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#857b26;background-color:#fff8b3}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#857b26;border-color:#857b26}.list-group-item-danger{color:#761b18;background-color:#f7c6c5}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#761b18;background-color:#f4b0af}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#761b18;border-color:#761b18}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.35rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.6}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Nunito,sans-serif;font-style:normal;font-weight:400;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.7875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Nunito,sans-serif;font-style:normal;font-weight:400;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.7875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.9rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(1turn)}}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#3490dc!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#2176bd!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#38c172!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#2d995b!important}.bg-info{background-color:#6cb2eb!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#3f9ae5!important}.bg-warning{background-color:#ffed4a!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#ffe817!important}.bg-danger{background-color:#e3342f!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#c51f1a!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#3490dc!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#38c172!important}.border-info{border-color:#6cb2eb!important}.border-warning{border-color:#ffed4a!important}.border-danger{border-color:#e3342f!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#3490dc!important}a.text-primary:focus,a.text-primary:hover{color:#1d68a7!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#38c172!important}a.text-success:focus,a.text-success:hover{color:#27864f!important}.text-info{color:#6cb2eb!important}a.text-info:focus,a.text-info:hover{color:#298fe2!important}.text-warning{color:#ffed4a!important}a.text-warning:focus,a.text-warning:hover{color:#fde300!important}.text-danger{color:#e3342f!important}a.text-danger:focus,a.text-danger:hover{color:#ae1c17!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} \ No newline at end of file diff --git a/public/css/basic.min.css b/public/css/basic.min.css new file mode 100755 index 0000000..5238d5c --- /dev/null +++ b/public/css/basic.min.css @@ -0,0 +1 @@ +.dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:0.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px} diff --git a/public/css/comments.css b/public/css/comments.css old mode 100644 new mode 100755 diff --git a/public/css/directory.css b/public/css/directory.css old mode 100644 new mode 100755 diff --git a/public/css/dropzone.min.css b/public/css/dropzone.min.css new file mode 100755 index 0000000..1b63110 --- /dev/null +++ b/public/css/dropzone.min.css @@ -0,0 +1 @@ +@-webkit-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-moz-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-webkit-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-moz-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-moz-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{min-height:150px;border:2px solid rgba(0,0,0,0.3);background:white;padding:20px 20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:0.5}.dropzone .dz-message{text-align:center;margin:2em 0}.dropzone .dz-message .dz-button{background:none;color:inherit;border:none;padding:0;font:inherit;cursor:pointer;outline:inherit}.dropzone .dz-preview{position:relative;display:inline-block;vertical-align:top;margin:16px;min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:#999;background:linear-gradient(to bottom, #eee, #ddd)}.dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.dropzone .dz-preview.dz-image-preview{background:white}.dropzone .dz-preview.dz-image-preview .dz-details{-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;-ms-transition:opacity 0.2s linear;-o-transition:opacity 0.2s linear;transition:opacity 0.2s linear}.dropzone .dz-preview .dz-remove{font-size:14px;text-align:center;display:block;cursor:pointer;border:none}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-details{z-index:20;position:absolute;top:0;left:0;opacity:0;font-size:13px;min-width:100%;max-width:100%;padding:2em 1em;text-align:center;color:rgba(0,0,0,0.9);line-height:150%}.dropzone .dz-preview .dz-details .dz-size{margin-bottom:1em;font-size:16px}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid rgba(200,200,200,0.8);background-color:rgba(255,255,255,0.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:rgba(255,255,255,0.4);padding:0 0.4em;border-radius:3px}.dropzone .dz-preview:hover .dz-image img{-webkit-transform:scale(1.05, 1.05);-moz-transform:scale(1.05, 1.05);-ms-transform:scale(1.05, 1.05);-o-transform:scale(1.05, 1.05);transform:scale(1.05, 1.05);-webkit-filter:blur(8px);filter:blur(8px)}.dropzone .dz-preview .dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dropzone .dz-preview .dz-image img{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{-webkit-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;-webkit-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;opacity:0;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}.dropzone .dz-preview .dz-success-mark svg,.dropzone .dz-preview .dz-error-mark svg{display:block;width:54px;height:54px}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;-webkit-transition:all 0.2s linear;-moz-transition:all 0.2s linear;-ms-transition:all 0.2s linear;-o-transition:all 0.2s linear;transition:all 0.2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;-webkit-transition:opacity 0.4s ease-in;-moz-transition:opacity 0.4s ease-in;-ms-transition:opacity 0.4s ease-in;-o-transition:opacity 0.4s ease-in;transition:opacity 0.4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{-webkit-animation:pulse 6s ease infinite;-moz-animation:pulse 6s ease infinite;-ms-animation:pulse 6s ease infinite;-o-animation:pulse 6s ease infinite;animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:16px;left:50%;top:50%;margin-top:-8px;width:80px;margin-left:-40px;background:rgba(255,255,255,0.9);-webkit-transform:scale(1);border-radius:8px;overflow:hidden}.dropzone .dz-preview .dz-progress .dz-upload{background:#333;background:linear-gradient(to bottom, #666, #444);position:absolute;top:0;left:0;bottom:0;width:0;-webkit-transition:width 300ms ease-in-out;-moz-transition:width 300ms ease-in-out;-ms-transition:width 300ms ease-in-out;-o-transition:width 300ms ease-in-out;transition:width 300ms ease-in-out}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{pointer-events:none;z-index:1000;position:absolute;display:block;display:none;opacity:0;-webkit-transition:opacity 0.3s ease;-moz-transition:opacity 0.3s ease;-ms-transition:opacity 0.3s ease;-o-transition:opacity 0.3s ease;transition:opacity 0.3s ease;border-radius:8px;font-size:13px;top:130px;left:-10px;width:140px;background:#be2626;background:linear-gradient(to bottom, #be2626, #a92222);padding:0.5em 1.2em;color:white}.dropzone .dz-preview .dz-error-message:after{content:'';position:absolute;top:-6px;left:64px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #be2626} diff --git a/public/css/fullcalendar.css b/public/css/fullcalendar.css old mode 100644 new mode 100755 diff --git a/public/css/home.css b/public/css/home.css old mode 100644 new mode 100755 diff --git a/public/css/login.css b/public/css/login.css old mode 100644 new mode 100755 diff --git a/public/css/mixed.css b/public/css/mixed.css old mode 100644 new mode 100755 index 36b514e..27eb279 --- a/public/css/mixed.css +++ b/public/css/mixed.css @@ -1,1921 +1 @@ -@charset "UTF-8"; -.fc { - direction: ltr; - text-align: left; -} - -.fc-rtl { - text-align: right; -} - -body .fc { - /* extra precedence to overcome jqui */ - font-size: 1em; -} - -/* Colors ---------------------------------------------------------------------------------------------------*/ -.fc-highlight { - /* when user is selecting cells */ - background: #bce8f1; - opacity: 0.3; -} - -.fc-bgevent { - /* default look for background events */ - background: #8fdf82; - opacity: 0.3; -} - -.fc-nonbusiness { - /* default look for non-business-hours areas */ - /* will inherit .fc-bgevent's styles */ - background: #d7d7d7; -} - -/* Popover ---------------------------------------------------------------------------------------------------*/ -.fc-popover { - position: absolute; - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); -} - -.fc-popover .fc-header { - /* TODO: be more consistent with fc-head/fc-body */ - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - padding: 2px 4px; -} - -.fc-rtl .fc-popover .fc-header { - flex-direction: row-reverse; -} - -.fc-popover .fc-header .fc-title { - margin: 0 2px; -} - -.fc-popover .fc-header .fc-close { - cursor: pointer; - opacity: 0.65; - font-size: 1.1em; -} - -/* Misc Reusable Components ---------------------------------------------------------------------------------------------------*/ -.fc-divider { - border-style: solid; - border-width: 1px; -} - -hr.fc-divider { - height: 0; - margin: 0; - padding: 0 0 2px; - /* height is unreliable across browsers, so use padding */ - border-width: 1px 0; -} - -.fc-bg, -.fc-bgevent-skeleton, -.fc-highlight-skeleton, -.fc-mirror-skeleton { - /* these element should always cling to top-left/right corners */ - position: absolute; - top: 0; - left: 0; - right: 0; -} - -.fc-bg { - bottom: 0; - /* strech bg to bottom edge */ -} - -.fc-bg table { - height: 100%; - /* strech bg to bottom edge */ -} - -/* Tables ---------------------------------------------------------------------------------------------------*/ -.fc table { - width: 100%; - box-sizing: border-box; - /* fix scrollbar issue in firefox */ - table-layout: fixed; - border-collapse: collapse; - border-spacing: 0; - font-size: 1em; - /* normalize cross-browser */ -} - -.fc th { - text-align: center; -} - -.fc th, -.fc td { - border-style: solid; - border-width: 1px; - padding: 0; - vertical-align: top; -} - -.fc td.fc-today { - border-style: double; - /* overcome neighboring borders */ -} - -/* Internal Nav Links ---------------------------------------------------------------------------------------------------*/ -a[data-goto] { - cursor: pointer; -} - -a[data-goto]:hover { - text-decoration: underline; -} - -/* Fake Table Rows ---------------------------------------------------------------------------------------------------*/ -.fc .fc-row { - /* extra precedence to overcome themes forcing a 1px border */ - /* no visible border by default. but make available if need be (scrollbar width compensation) */ - border-style: solid; - border-width: 0; -} - -.fc-row table { - /* don't put left/right border on anything within a fake row. - the outer tbody will worry about this */ - border-left: 0 hidden transparent; - border-right: 0 hidden transparent; - /* no bottom borders on rows */ - border-bottom: 0 hidden transparent; -} - -.fc-row:first-child table { - border-top: 0 hidden transparent; - /* no top border on first row */ -} - -/* Day Row (used within the header and the DayGrid) ---------------------------------------------------------------------------------------------------*/ -.fc-row { - position: relative; -} - -.fc-row .fc-bg { - z-index: 1; -} - -/* highlighting cells & background event skeleton */ -.fc-row .fc-bgevent-skeleton, -.fc-row .fc-highlight-skeleton { - bottom: 0; - /* stretch skeleton to bottom of row */ -} - -.fc-row .fc-bgevent-skeleton table, -.fc-row .fc-highlight-skeleton table { - height: 100%; - /* stretch skeleton to bottom of row */ -} - -.fc-row .fc-highlight-skeleton td, -.fc-row .fc-bgevent-skeleton td { - border-color: transparent; -} - -.fc-row .fc-bgevent-skeleton { - z-index: 2; -} - -.fc-row .fc-highlight-skeleton { - z-index: 3; -} - -/* -row content (which contains day/week numbers and events) as well as "mirror" (which contains -temporary rendered events). -*/ -.fc-row .fc-content-skeleton { - position: relative; - z-index: 4; - padding-bottom: 2px; - /* matches the space above the events */ -} - -.fc-row .fc-mirror-skeleton { - z-index: 5; -} - -.fc .fc-row .fc-content-skeleton table, -.fc .fc-row .fc-content-skeleton td, -.fc .fc-row .fc-mirror-skeleton td { - /* see-through to the background below */ - /* extra precedence to prevent theme-provided backgrounds */ - background: none; - /* in case s are globally styled */ - border-color: transparent; -} - -.fc-row .fc-content-skeleton td, -.fc-row .fc-mirror-skeleton td { - /* don't put a border between events and/or the day number */ - border-bottom: 0; -} - -.fc-row .fc-content-skeleton tbody td, -.fc-row .fc-mirror-skeleton tbody td { - /* don't put a border between event cells */ - border-top: 0; -} - -/* Scrolling Container ---------------------------------------------------------------------------------------------------*/ -.fc-scroller { - -webkit-overflow-scrolling: touch; -} - -/* TODO: move to timegrid/daygrid */ -.fc-scroller > .fc-day-grid, -.fc-scroller > .fc-time-grid { - position: relative; - /* re-scope all positions */ - width: 100%; - /* hack to force re-sizing this inner element when scrollbars appear/disappear */ -} - -/* Global Event Styles ---------------------------------------------------------------------------------------------------*/ -.fc-event { - position: relative; - /* for resize handle and other inner positioning */ - display: block; - /* make the tag block */ - font-size: 0.85em; - line-height: 1.4; - border-radius: 3px; - border: 1px solid #3788d8; -} - -.fc-event, -.fc-event-dot { - background-color: #3788d8; - /* default BACKGROUND color */ -} - -.fc-event, -.fc-event:hover { - color: #fff; - /* default TEXT color */ - text-decoration: none; - /* if has an href */ -} - -.fc-event[href], -.fc-event.fc-draggable { - cursor: pointer; - /* give events with links and draggable events a hand mouse pointer */ -} - -.fc-not-allowed, -.fc-not-allowed .fc-event { - /* to override an event's custom cursor */ - cursor: not-allowed; -} - -.fc-event .fc-content { - position: relative; - z-index: 2; -} - -/* resizer (cursor AND touch devices) */ -.fc-event .fc-resizer { - position: absolute; - z-index: 4; -} - -/* resizer (touch devices) */ -.fc-event .fc-resizer { - display: none; -} - -.fc-event.fc-allow-mouse-resize .fc-resizer, -.fc-event.fc-selected .fc-resizer { - /* only show when hovering or selected (with touch) */ - display: block; -} - -/* hit area */ -.fc-event.fc-selected .fc-resizer:before { - /* 40x40 touch area */ - content: ""; - position: absolute; - z-index: 9999; - /* user of this util can scope within a lower z-index */ - top: 50%; - left: 50%; - width: 40px; - height: 40px; - margin-left: -20px; - margin-top: -20px; -} - -/* Event Selection (only for touch devices) ---------------------------------------------------------------------------------------------------*/ -.fc-event.fc-selected { - z-index: 9999 !important; - /* overcomes inline z-index */ - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); -} - -.fc-event.fc-selected:after { - content: ""; - position: absolute; - z-index: 1; - /* same z-index as fc-bg, behind text */ - /* overcome the borders */ - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; - /* darkening effect */ - background: #000; - opacity: 0.25; -} - -/* Event Dragging ---------------------------------------------------------------------------------------------------*/ -.fc-event.fc-dragging.fc-selected { - box-shadow: 0 2px 7px rgba(0, 0, 0, 0.3); -} - -.fc-event.fc-dragging:not(.fc-selected) { - opacity: 0.75; -} - -/* Horizontal Events ---------------------------------------------------------------------------------------------------*/ -/* bigger touch area when selected */ -.fc-h-event.fc-selected:before { - content: ""; - position: absolute; - z-index: 3; - /* below resizers */ - top: -10px; - bottom: -10px; - left: 0; - right: 0; -} - -/* events that are continuing to/from another week. kill rounded corners and butt up against edge */ -.fc-ltr .fc-h-event.fc-not-start, -.fc-rtl .fc-h-event.fc-not-end { - margin-left: 0; - border-left-width: 0; - padding-left: 1px; - /* replace the border with padding */ - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.fc-ltr .fc-h-event.fc-not-end, -.fc-rtl .fc-h-event.fc-not-start { - margin-right: 0; - border-right-width: 0; - padding-right: 1px; - /* replace the border with padding */ - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -/* resizer (cursor AND touch devices) */ -/* left resizer */ -.fc-ltr .fc-h-event .fc-start-resizer, -.fc-rtl .fc-h-event .fc-end-resizer { - cursor: w-resize; - left: -1px; - /* overcome border */ -} - -/* right resizer */ -.fc-ltr .fc-h-event .fc-end-resizer, -.fc-rtl .fc-h-event .fc-start-resizer { - cursor: e-resize; - right: -1px; - /* overcome border */ -} - -/* resizer (mouse devices) */ -.fc-h-event.fc-allow-mouse-resize .fc-resizer { - width: 7px; - top: -1px; - /* overcome top border */ - bottom: -1px; - /* overcome bottom border */ -} - -/* resizer (touch devices) */ -.fc-h-event.fc-selected .fc-resizer { - /* 8x8 little dot */ - border-radius: 4px; - border-width: 1px; - width: 6px; - height: 6px; - border-style: solid; - border-color: inherit; - background: #fff; - /* vertically center */ - top: 50%; - margin-top: -4px; -} - -/* left resizer */ -.fc-ltr .fc-h-event.fc-selected .fc-start-resizer, -.fc-rtl .fc-h-event.fc-selected .fc-end-resizer { - margin-left: -4px; - /* centers the 8x8 dot on the left edge */ -} - -/* right resizer */ -.fc-ltr .fc-h-event.fc-selected .fc-end-resizer, -.fc-rtl .fc-h-event.fc-selected .fc-start-resizer { - margin-right: -4px; - /* centers the 8x8 dot on the right edge */ -} - -/* DayGrid events ----------------------------------------------------------------------------------------------------- -We use the full "fc-day-grid-event" class instead of using descendants because the event won't -be a descendant of the grid when it is being dragged. -*/ -.fc-day-grid-event { - margin: 1px 2px 0; - /* spacing between events and edges */ - padding: 0 1px; -} - -tr:first-child > td > .fc-day-grid-event { - margin-top: 2px; - /* a little bit more space before the first event */ -} - -.fc-mirror-skeleton tr:first-child > td > .fc-day-grid-event { - margin-top: 0; - /* except for mirror skeleton */ -} - -.fc-day-grid-event .fc-content { - /* force events to be one-line tall */ - white-space: nowrap; - overflow: hidden; -} - -.fc-day-grid-event .fc-time { - font-weight: bold; -} - -/* resizer (cursor devices) */ -/* left resizer */ -.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer, -.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer { - margin-left: -2px; - /* to the day cell's edge */ -} - -/* right resizer */ -.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer, -.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer { - margin-right: -2px; - /* to the day cell's edge */ -} - -/* Event Limiting ---------------------------------------------------------------------------------------------------*/ -/* "more" link that represents hidden events */ -a.fc-more { - margin: 1px 3px; - font-size: 0.85em; - cursor: pointer; - text-decoration: none; -} - -a.fc-more:hover { - text-decoration: underline; -} - -.fc-limited { - /* rows and cells that are hidden because of a "more" link */ - display: none; -} - -/* popover that appears when "more" link is clicked */ -.fc-day-grid .fc-row { - z-index: 1; - /* make the "more" popover one higher than this */ -} - -.fc-more-popover { - z-index: 2; - width: 220px; -} - -.fc-more-popover .fc-event-container { - padding: 10px; -} - -/* Now Indicator ---------------------------------------------------------------------------------------------------*/ -.fc-now-indicator { - position: absolute; - border: 0 solid red; -} - -/* Utilities ---------------------------------------------------------------------------------------------------*/ -.fc-unselectable { - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -/* -TODO: more distinction between this file and common.css -*/ -/* Colors ---------------------------------------------------------------------------------------------------*/ -.fc-unthemed th, -.fc-unthemed td, -.fc-unthemed thead, -.fc-unthemed tbody, -.fc-unthemed .fc-divider, -.fc-unthemed .fc-row, -.fc-unthemed .fc-content, -.fc-unthemed .fc-popover, -.fc-unthemed .fc-list-view, -.fc-unthemed .fc-list-heading td { - border-color: #ddd; -} - -.fc-unthemed .fc-popover { - background-color: #fff; -} - -.fc-unthemed .fc-divider, -.fc-unthemed .fc-popover .fc-header, -.fc-unthemed .fc-list-heading td { - background: #eee; -} - -.fc-unthemed td.fc-today { - background: #fcf8e3; -} - -.fc-unthemed .fc-disabled-day { - background: #d7d7d7; - opacity: 0.3; -} - -/* Icons --------------------------------------------------------------------------------------------------- -from https://feathericons.com/ and built with IcoMoon -*/ -@font-face { - font-family: "fcicons"; - src: url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype"); - font-weight: normal; - font-style: normal; -} -.fc-icon { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: "fcicons" !important; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.fc-icon-chevron-left:before { - content: ""; -} - -.fc-icon-chevron-right:before { - content: ""; -} - -.fc-icon-chevrons-left:before { - content: ""; -} - -.fc-icon-chevrons-right:before { - content: ""; -} - -.fc-icon-minus-square:before { - content: ""; -} - -.fc-icon-plus-square:before { - content: ""; -} - -.fc-icon-x:before { - content: ""; -} - -.fc-icon { - display: inline-block; - width: 1em; - height: 1em; - text-align: center; -} - -/* Buttons --------------------------------------------------------------------------------------------------- -Lots taken from Flatly (MIT): https://bootswatch.com/4/flatly/bootstrap.css -*/ -/* reset */ -.fc-button { - border-radius: 0; - overflow: visible; - text-transform: none; - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -.fc-button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -.fc-button { - -webkit-appearance: button; -} - -.fc-button:not(:disabled) { - cursor: pointer; -} - -.fc-button::-moz-focus-inner { - padding: 0; - border-style: none; -} - -/* theme */ -.fc-button { - display: inline-block; - font-weight: 400; - color: #212529; - text-align: center; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: 0.4em 0.65em; - font-size: 1em; - line-height: 1.5; - border-radius: 0.25em; -} - -.fc-button:hover { - color: #212529; - text-decoration: none; -} - -.fc-button:focus { - outline: 0; - -webkit-box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.25); - box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.25); -} - -.fc-button:disabled { - opacity: 0.65; -} - -/* "primary" coloring */ -.fc-button-primary { - color: #fff; - background-color: #2C3E50; - border-color: #2C3E50; -} - -.fc-button-primary:hover { - color: #fff; - background-color: #1e2b37; - border-color: #1a252f; -} - -.fc-button-primary:focus { - -webkit-box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); - box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); -} - -.fc-button-primary:disabled { - color: #fff; - background-color: #2C3E50; - border-color: #2C3E50; -} - -.fc-button-primary:not(:disabled):active, -.fc-button-primary:not(:disabled).fc-button-active { - color: #fff; - background-color: #1a252f; - border-color: #151e27; -} - -.fc-button-primary:not(:disabled):active:focus, -.fc-button-primary:not(:disabled).fc-button-active:focus { - -webkit-box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); - box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5); -} - -/* icons within buttons */ -.fc-button .fc-icon { - vertical-align: middle; - font-size: 1.5em; -} - -/* Buttons Groups ---------------------------------------------------------------------------------------------------*/ -.fc-button-group { - position: relative; - display: -webkit-inline-box; - display: -ms-inline-flexbox; - display: inline-flex; - vertical-align: middle; -} - -.fc-button-group > .fc-button { - position: relative; - -webkit-box-flex: 1; - -ms-flex: 1 1 auto; - flex: 1 1 auto; -} - -.fc-button-group > .fc-button:hover { - z-index: 1; -} - -.fc-button-group > .fc-button:focus, -.fc-button-group > .fc-button:active, -.fc-button-group > .fc-button.fc-button-active { - z-index: 1; -} - -.fc-button-group > .fc-button:not(:first-child) { - margin-left: -1px; -} - -.fc-button-group > .fc-button:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.fc-button-group > .fc-button:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -/* Popover ---------------------------------------------------------------------------------------------------*/ -.fc-unthemed .fc-popover { - border-width: 1px; - border-style: solid; -} - -/* List View ---------------------------------------------------------------------------------------------------*/ -.fc-unthemed .fc-list-item:hover td { - background-color: #f5f5f5; -} - -/* Toolbar ---------------------------------------------------------------------------------------------------*/ -.fc-toolbar { - display: flex; - justify-content: space-between; - align-items: center; -} - -.fc-toolbar.fc-header-toolbar { - margin-bottom: 1.5em; -} - -.fc-toolbar.fc-footer-toolbar { - margin-top: 1.5em; -} - -/* inner content */ -.fc-toolbar > * > :not(:first-child) { - margin-left: 0.75em; -} - -.fc-toolbar h2 { - font-size: 1.75em; - margin: 0; -} - -/* View Structure ---------------------------------------------------------------------------------------------------*/ -.fc-view-container { - position: relative; -} - -/* undo twitter bootstrap's box-sizing rules. normalizes positioning techniques */ -/* don't do this for the toolbar because we'll want bootstrap to style those buttons as some pt */ -.fc-view-container *, -.fc-view-container *:before, -.fc-view-container *:after { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -.fc-view, -.fc-view > table { - /* so dragged elements can be above the view's main element */ - position: relative; - z-index: 1; -} - -@media print { - .fc { - max-width: 100% !important; - } - - /* Global Event Restyling - --------------------------------------------------------------------------------------------------*/ - .fc-event { - background: #fff !important; - color: #000 !important; - page-break-inside: avoid; - } - - .fc-event .fc-resizer { - display: none; - } - - /* Table & Day-Row Restyling - --------------------------------------------------------------------------------------------------*/ - .fc th, -.fc td, -.fc hr, -.fc thead, -.fc tbody, -.fc-row { - border-color: #ccc !important; - background: #fff !important; - } - - /* kill the overlaid, absolutely-positioned components */ - /* common... */ - .fc-bg, -.fc-bgevent-skeleton, -.fc-highlight-skeleton, -.fc-mirror-skeleton, -.fc-bgevent-container, -.fc-business-container, -.fc-highlight-container, -.fc-mirror-container { - display: none; - } - - /* don't force a min-height on rows (for DayGrid) */ - .fc tbody .fc-row { - height: auto !important; - /* undo height that JS set in distributeHeight */ - min-height: 0 !important; - /* undo the min-height from each view's specific stylesheet */ - } - - .fc tbody .fc-row .fc-content-skeleton { - position: static; - /* undo .fc-rigid */ - padding-bottom: 0 !important; - /* use a more border-friendly method for this... */ - } - - .fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { - /* only works in newer browsers */ - padding-bottom: 1em; - /* ...gives space within the skeleton. also ensures min height in a way */ - } - - .fc tbody .fc-row .fc-content-skeleton table { - /* provides a min-height for the row, but only effective for IE, which exaggerates this value, - making it look more like 3em. for other browers, it will already be this tall */ - height: 1em; - } - - /* Undo month-view event limiting. Display all events and hide the "more" links - --------------------------------------------------------------------------------------------------*/ - .fc-more-cell, -.fc-more { - display: none !important; - } - - .fc tr.fc-limited { - display: table-row !important; - } - - .fc td.fc-limited { - display: table-cell !important; - } - - .fc-popover { - display: none; - /* never display the "more.." popover in print mode */ - } - - /* TimeGrid Restyling - --------------------------------------------------------------------------------------------------*/ - /* undo the min-height 100% trick used to fill the container's height */ - .fc-time-grid { - min-height: 0 !important; - } - - /* don't display the side axis at all ("all-day" and time cells) */ - .fc-timeGrid-view .fc-axis { - display: none; - } - - /* don't display the horizontal lines */ - .fc-slats, -.fc-time-grid hr { - /* this hr is used when height is underused and needs to be filled */ - display: none !important; - /* important overrides inline declaration */ - } - - /* let the container that holds the events be naturally positioned and create real height */ - .fc-time-grid .fc-content-skeleton { - position: static; - } - - /* in case there are no events, we still want some height */ - .fc-time-grid .fc-content-skeleton table { - height: 4em; - } - - /* kill the horizontal spacing made by the event container. event margins will be done below */ - .fc-time-grid .fc-event-container { - margin: 0 !important; - } - - /* TimeGrid *Event* Restyling - --------------------------------------------------------------------------------------------------*/ - /* naturally position events, vertically stacking them */ - .fc-time-grid .fc-event { - position: static !important; - margin: 3px 2px !important; - } - - /* for events that continue to a future day, give the bottom border back */ - .fc-time-grid .fc-event.fc-not-end { - border-bottom-width: 1px !important; - } - - /* indicate the event continues via "..." text */ - .fc-time-grid .fc-event.fc-not-end:after { - content: "..."; - } - - /* for events that are continuations from previous days, give the top border back */ - .fc-time-grid .fc-event.fc-not-start { - border-top-width: 1px !important; - } - - /* indicate the event is a continuation via "..." text */ - .fc-time-grid .fc-event.fc-not-start:before { - content: "..."; - } - - /* time */ - /* undo a previous declaration and let the time text span to a second line */ - .fc-time-grid .fc-event .fc-time { - white-space: normal !important; - } - - /* hide the the time that is normally displayed... */ - .fc-time-grid .fc-event .fc-time span { - display: none; - } - - /* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */ - .fc-time-grid .fc-event .fc-time:after { - content: attr(data-full); - } - - /* Vertical Scroller & Containers - --------------------------------------------------------------------------------------------------*/ - /* kill the scrollbars and allow natural height */ - .fc-scroller, -.fc-day-grid-container, -.fc-time-grid-container { - /* */ - overflow: visible !important; - height: auto !important; - } - - /* kill the horizontal border/padding used to compensate for scrollbars */ - .fc-row { - border: 0 !important; - margin: 0 !important; - } - - /* Button Controls - --------------------------------------------------------------------------------------------------*/ - .fc-button-group, -.fc button { - display: none; - /* don't display any button-related controls */ - } -} -/* DayGridView ---------------------------------------------------------------------------------------------------*/ -/* day row structure */ -.fc-dayGridWeek-view .fc-content-skeleton, -.fc-dayGridDay-view .fc-content-skeleton { - /* there may be week numbers in these views, so no padding-top */ - padding-bottom: 1em; - /* ensure a space at bottom of cell for user selecting/clicking */ -} - -.fc-dayGrid-view .fc-body .fc-row { - min-height: 4em; - /* ensure that all rows are at least this tall */ -} - -/* a "rigid" row will take up a constant amount of height because content-skeleton is absolute */ -.fc-row.fc-rigid { - overflow: hidden; -} - -.fc-row.fc-rigid .fc-content-skeleton { - position: absolute; - top: 0; - left: 0; - right: 0; -} - -/* week and day number styling */ -.fc-day-top.fc-other-month { - opacity: 0.3; -} - -.fc-dayGrid-view .fc-week-number, -.fc-dayGrid-view .fc-day-number { - padding: 2px; -} - -.fc-dayGrid-view th.fc-week-number, -.fc-dayGrid-view th.fc-day-number { - padding: 0 2px; - /* column headers can't have as much v space */ -} - -.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number { - float: right; -} - -.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number { - float: left; -} - -.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number { - float: left; - border-radius: 0 0 3px 0; -} - -.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number { - float: right; - border-radius: 0 0 0 3px; -} - -.fc-dayGrid-view .fc-day-top .fc-week-number { - min-width: 1.5em; - text-align: center; - background-color: #f2f2f2; - color: #808080; -} - -/* when week/day number have own column */ -.fc-dayGrid-view td.fc-week-number { - text-align: center; -} - -.fc-dayGrid-view td.fc-week-number > * { - /* work around the way we do column resizing and ensure a minimum width */ - display: inline-block; - min-width: 1.25em; -} -/* Scroller ---------------------------------------------------------------------------------------------------*/ -.fc-scroller-clip { - overflow: hidden; - /* for clipping scrollbars */ - position: relative; - /* so things like scrollfollowers can attach to this */ -} - -/* supresses rendering of native scrollbars */ -/* on .fc-scroller */ -.fc-no-scrollbars { - background: rgba(255, 255, 255, 0); - /* hack for dynamic DOM nodes (in Chrome OSX at least) */ -} - -.fc-no-scrollbars::-webkit-scrollbar { - width: 0; - height: 0; -} - -.fc-scroller-canvas { - position: relative; - /* origin for bg */ - box-sizing: border-box; - /* so that padding (for gutter) will be part of height */ - min-height: 100%; -} - -.fc-scroller-canvas > .fc-bg { - z-index: 1; - /* make default? */ -} - -.fc-scroller-canvas > .fc-content { - z-index: 2; - /* make default? */ - position: relative; - /* origin for inner content */ - border-style: solid; - border-width: 0; -} - -.fc-scroller-canvas.fc-gutter-left > .fc-content { - border-left-width: 1px; - margin-left: -1px; -} - -.fc-scroller-canvas.fc-gutter-right > .fc-content { - border-right-width: 1px; - margin-right: -1px; -} - -.fc-scroller-canvas.fc-gutter-top > .fc-content { - border-top-width: 1px; - margin-top: -1px; -} - -/* content is responsible for bottom border */ -/* View Structure ---------------------------------------------------------------------------------------------------*/ -.fc-rtl .fc-timeline { - direction: rtl; -} - -.fc-scrolled .fc-head .fc-scroller { - z-index: 2; - /* so drop shadow will go above body panes */ -} - -.fc-timeline.fc-scrolled .fc-head .fc-scroller { - box-shadow: 0 3px 4px rgba(0, 0, 0, 0.075); -} - -.fc-timeline .fc-body .fc-scroller { - z-index: 1; -} - -/* -on most tables that expand to the edges, kill the outer border, -because the container elements take care of it. -example tables: -.fc-scroller-canvas .fc-content table -.fc-scroller-canvas .fc-bg .fc-slats table -*/ -.fc-timeline .fc-scroller-canvas > div > table, -.fc-timeline .fc-scroller-canvas > div > div > table { - border-style: hidden; -} - -/* -for resource rows (in both the spreadsheet and timeline areas), -undo previous rule in order to always show last border. -*/ -.fc-timeline .fc-scroller-canvas > .fc-content > .fc-rows > table { - border-bottom-style: none; -} - -/* Table Cell Common ---------------------------------------------------------------------------------------------------*/ -.fc-timeline th, -.fc-timeline td { - white-space: nowrap; -} - -.fc-timeline .fc-cell-content { - overflow: hidden; -} - -.fc-timeline .fc-cell-text { - display: inline-block; - padding-left: 4px; - padding-right: 4px; -} - -/* -Cells at the start of a week -TODO: figure out better styling - -.fc-ltr .fc-timeline .fc-em-cell div { - border-left: 3px solid #eee; - height: 100%; -} -.fc-rtl .fc-timeline .fc-em-cell { - border-right-width: 3px; -} -*/ -/* head */ -.fc-timeline th { - vertical-align: middle; -} - -.fc-timeline .fc-head .fc-cell-content { - padding-top: 3px; - padding-bottom: 3px; -} - -.fc-timeline .fc-head .fc-time-area .fc-cell-content { - overflow: visible; -} - -/* Time Area ---------------------------------------------------------------------------------------------------*/ -.fc-time-area col { - min-width: 2.2em; - /* detected by JS */ -} - -/* head */ -.fc-ltr .fc-time-area .fc-chrono th { - text-align: left; -} - -.fc-rtl .fc-time-area .fc-chrono th { - text-align: right; -} - -/* body slats (vertical lines) */ -.fc-time-area .fc-slats { - /* fc-bg is responsible for a lot of this now! */ - position: absolute; - z-index: 1; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.fc-time-area .fc-slats table { - height: 100%; -} - -.fc-time-area .fc-slats .fc-minor { - border-style: dotted; -} - -.fc-time-area .fc-slats td { - border-width: 0 1px; - /* need to do this. sometimes -1 margin wouldn't hide the dotted */ -} - -.fc-ltr .fc-time-area .fc-slats td { - border-right-width: 0; -} - -.fc-rtl .fc-time-area .fc-slats td { - border-left-width: 0; -} - -/* body content containers - can be within rows or directly within the pane's content -*/ -.fc-time-area .fc-bgevent-container, -.fc-time-area .fc-highlight-container { - position: absolute; - z-index: 2; - /* only for directly within pane. not for row. overridden later */ - top: 0; - bottom: 0; - width: 0; -} - -.fc-ltr .fc-time-area .fc-mirror-container, -.fc-ltr .fc-time-area .fc-bgevent-container, -.fc-ltr .fc-time-area .fc-highlight-container { - left: 0; -} - -.fc-rtl .fc-time-area .fc-mirror-container, -.fc-rtl .fc-time-area .fc-bgevent-container, -.fc-rtl .fc-time-area .fc-highlight-container { - right: 0; -} - -.fc-time-area .fc-bgevent, -.fc-time-area .fc-highlight { - position: absolute; - top: 0; - bottom: 0; -} - -/* Now Indicator ---------------------------------------------------------------------------------------------------*/ -.fc-timeline .fc-now-indicator { - /* both the arrow and the line */ - z-index: 3; - /* one above scroller's fc-content */ - top: 0; -} - -.fc-time-area .fc-now-indicator-arrow { - margin: 0 -6px; - /* 5, then one more to counteract scroller's negative margins */ - /* triangle pointing down... */ - border-width: 6px 5px 0 5px; - border-left-color: transparent; - border-right-color: transparent; -} - -.fc-time-area .fc-now-indicator-line { - margin: 0 -1px; - /* counteract scroller's negative margins */ - bottom: 0; - border-left-width: 1px; -} - -/* Event Container ---------------------------------------------------------------------------------------------------*/ -.fc-time-area .fc-event-container { - position: relative; - z-index: 2; - /* above bgevent and highlight */ - width: 0; - /* for event positioning. will end up on correct side based on dir */ -} - -.fc-time-area .fc-mirror-container { - /* also an fc-event-container */ - position: absolute; - z-index: 3; - top: 0; -} - -.fc-time-area .fc-event-container { - padding-bottom: 8px; - top: -1px; -} - -.fc-time-area tr:first-child .fc-event-container { - top: 0; -} - -.fc-no-overlap .fc-time-area .fc-event-container { - padding-bottom: 0; - top: 0; -} - -/* Time Grid Events ---------------------------------------------------------------------------------------------------*/ -.fc-timeline-event { - position: absolute; - display: flex; - border-radius: 0; - padding: 2px 1px; - margin-bottom: 1px; -} - -.fc-no-overlap .fc-timeline-event { - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 0; -} - -.fc-ltr .fc-timeline-event { - flex-direction: row; - margin-right: 1px; -} - -.fc-rtl .fc-timeline-event { - margin-left: 1px; -} - -.fc-timeline-event .fc-time-wrap { - flex-shrink: 0; - min-width: 0; -} - -.fc-timeline-event .fc-title-wrap { - flex-grow: 1; - min-width: 0; -} - -.fc-timeline-event .fc-time, -.fc-timeline-event .fc-title { - display: inline-block; - vertical-align: top; - max-width: 100%; - padding: 0 2px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - white-space: nowrap; - overflow: hidden; -} - -.fc-timeline-event .fc-time { - font-weight: bold; -} - -.fc-timeline-event.fc-not-start:before, -.fc-timeline-event.fc-not-end:after { - content: ""; - align-self: center; - width: 0; - height: 0; - margin: 0 1px; - border: 5px solid #000; - border-top-color: transparent; - border-bottom-color: transparent; - opacity: 0.5; -} - -.fc-ltr .fc-timeline-event.fc-not-start:before, -.fc-rtl .fc-timeline-event.fc-not-end:after { - border-left: 0; -} - -.fc-ltr .fc-timeline-event.fc-not-end:after, -.fc-rtl .fc-timeline-event.fc-not-start:before { - border-right: 0; -} -@charset "UTF-8"; -/* TimeGridView all-day area ---------------------------------------------------------------------------------------------------*/ -.fc-timeGrid-view .fc-day-grid { - position: relative; - z-index: 2; - /* so the "more.." popover will be over the time grid */ -} - -.fc-timeGrid-view .fc-day-grid .fc-row { - min-height: 3em; - /* all-day section will never get shorter than this */ -} - -.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton { - padding-bottom: 1em; - /* give space underneath events for clicking/selecting days */ -} - -/* TimeGrid axis running down the side (for both the all-day area and the slot area) ---------------------------------------------------------------------------------------------------*/ -.fc .fc-axis { - /* .fc to overcome default cell styles */ - vertical-align: middle; - padding: 0 4px; - white-space: nowrap; -} - -.fc-ltr .fc-axis { - text-align: right; -} - -.fc-rtl .fc-axis { - text-align: left; -} - -/* TimeGrid Structure ---------------------------------------------------------------------------------------------------*/ -.fc-time-grid-container, -.fc-time-grid { - /* so slats/bg/content/etc positions get scoped within here */ - position: relative; - z-index: 1; -} - -.fc-time-grid { - min-height: 100%; - /* so if height setting is 'auto', .fc-bg stretches to fill height */ -} - -.fc-time-grid table { - /* don't put outer borders on slats/bg/content/etc */ - border: 0 hidden transparent; -} - -.fc-time-grid > .fc-bg { - z-index: 1; -} - -.fc-time-grid .fc-slats, -.fc-time-grid > hr { - /* the
TimeGridView injects when grid is shorter than scroller */ - position: relative; - z-index: 2; -} - -.fc-time-grid .fc-content-col { - position: relative; - /* because now-indicator lives directly inside */ -} - -.fc-time-grid .fc-content-skeleton { - position: absolute; - z-index: 3; - top: 0; - left: 0; - right: 0; -} - -/* divs within a cell within the fc-content-skeleton */ -.fc-time-grid .fc-business-container { - position: relative; - z-index: 1; -} - -.fc-time-grid .fc-bgevent-container { - position: relative; - z-index: 2; -} - -.fc-time-grid .fc-highlight-container { - position: relative; - z-index: 3; -} - -.fc-time-grid .fc-event-container { - position: relative; - z-index: 4; -} - -.fc-time-grid .fc-now-indicator-line { - z-index: 5; -} - -.fc-time-grid .fc-mirror-container { - /* also is fc-event-container */ - position: relative; - z-index: 6; -} - -/* TimeGrid Slats (lines that run horizontally) ---------------------------------------------------------------------------------------------------*/ -.fc-time-grid .fc-slats td { - height: 1.5em; - border-bottom: 0; - /* each cell is responsible for its top border */ -} - -.fc-time-grid .fc-slats .fc-minor td { - border-top-style: dotted; -} - -/* TimeGrid Highlighting Slots ---------------------------------------------------------------------------------------------------*/ -.fc-time-grid .fc-highlight-container { - /* a div within a cell within the fc-highlight-skeleton */ - position: relative; - /* scopes the left/right of the fc-highlight to be in the column */ -} - -.fc-time-grid .fc-highlight { - position: absolute; - left: 0; - right: 0; - /* top and bottom will be in by JS */ -} - -/* TimeGrid Event Containment ---------------------------------------------------------------------------------------------------*/ -.fc-ltr .fc-time-grid .fc-event-container { - /* space on the sides of events for LTR (default) */ - margin: 0 2.5% 0 2px; -} - -.fc-rtl .fc-time-grid .fc-event-container { - /* space on the sides of events for RTL */ - margin: 0 2px 0 2.5%; -} - -.fc-time-grid .fc-event, -.fc-time-grid .fc-bgevent { - position: absolute; - z-index: 1; - /* scope inner z-index's */ -} - -.fc-time-grid .fc-bgevent { - /* background events always span full width */ - left: 0; - right: 0; -} - -/* TimeGrid Event Styling ----------------------------------------------------------------------------------------------------- -We use the full "fc-time-grid-event" class instead of using descendants because the event won't -be a descendant of the grid when it is being dragged. -*/ -.fc-time-grid-event { - margin-bottom: 1px; -} - -.fc-time-grid-event-inset { - -webkit-box-shadow: 0px 0px 0px 1px #fff; - box-shadow: 0px 0px 0px 1px #fff; -} - -.fc-time-grid-event.fc-not-start { - /* events that are continuing from another day */ - /* replace space made by the top border with padding */ - border-top-width: 0; - padding-top: 1px; - /* remove top rounded corners */ - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.fc-time-grid-event.fc-not-end { - /* replace space made by the top border with padding */ - border-bottom-width: 0; - padding-bottom: 1px; - /* remove bottom rounded corners */ - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} - -.fc-time-grid-event .fc-content { - overflow: hidden; - max-height: 100%; -} - -.fc-time-grid-event .fc-time, -.fc-time-grid-event .fc-title { - padding: 0 1px; -} - -.fc-time-grid-event .fc-time { - font-size: 0.85em; - white-space: nowrap; -} - -/* short mode, where time and title are on the same line */ -.fc-time-grid-event.fc-short .fc-content { - /* don't wrap to second line (now that contents will be inline) */ - white-space: nowrap; -} - -.fc-time-grid-event.fc-short .fc-time, -.fc-time-grid-event.fc-short .fc-title { - /* put the time and title on the same line */ - display: inline-block; - vertical-align: top; -} - -.fc-time-grid-event.fc-short .fc-time span { - display: none; - /* don't display the full time text... */ -} - -.fc-time-grid-event.fc-short .fc-time:before { - content: attr(data-start); - /* ...instead, display only the start time */ -} - -.fc-time-grid-event.fc-short .fc-time:after { - content: " - "; - /* seperate with a dash, wrapped in nbsp's */ -} - -.fc-time-grid-event.fc-short .fc-title { - font-size: 0.85em; - /* make the title text the same size as the time */ - padding: 0; - /* undo padding from above */ -} - -/* resizer (cursor device) */ -.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer { - left: 0; - right: 0; - bottom: 0; - height: 8px; - overflow: hidden; - line-height: 8px; - font-size: 11px; - font-family: monospace; - text-align: center; - cursor: s-resize; -} - -.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after { - content: "="; -} - -/* resizer (touch device) */ -.fc-time-grid-event.fc-selected .fc-resizer { - /* 10x10 dot */ - border-radius: 5px; - border-width: 1px; - width: 8px; - height: 8px; - border-style: solid; - border-color: inherit; - background: #fff; - /* horizontally center */ - left: 50%; - margin-left: -5px; - /* center on the bottom edge */ - bottom: -5px; -} - -/* Now Indicator ---------------------------------------------------------------------------------------------------*/ -.fc-time-grid .fc-now-indicator-line { - border-top-width: 1px; - left: 0; - right: 0; -} - -/* arrow on axis */ -.fc-time-grid .fc-now-indicator-arrow { - margin-top: -5px; - /* vertically center on top coordinate */ -} - -.fc-ltr .fc-time-grid .fc-now-indicator-arrow { - left: 0; - /* triangle pointing right... */ - border-width: 5px 0 5px 6px; - border-top-color: transparent; - border-bottom-color: transparent; -} - -.fc-rtl .fc-time-grid .fc-now-indicator-arrow { - right: 0; - /* triangle pointing left... */ - border-width: 5px 6px 5px 0; - border-top-color: transparent; - border-bottom-color: transparent; -} -/* List View ---------------------------------------------------------------------------------------------------*/ -/* possibly reusable */ -.fc-event-dot { - display: inline-block; - width: 10px; - height: 10px; - border-radius: 5px; -} - -/* view wrapper */ -.fc-rtl .fc-list-view { - direction: rtl; - /* unlike core views, leverage browser RTL */ -} - -.fc-list-view { - border-width: 1px; - border-style: solid; -} - -/* table resets */ -.fc .fc-list-table { - table-layout: auto; - /* for shrinkwrapping cell content */ -} - -.fc-list-table td { - border-width: 1px 0 0; - padding: 8px 14px; -} - -.fc-list-table tr:first-child td { - border-top-width: 0; -} - -/* day headings with the list */ -.fc-list-heading { - border-bottom-width: 1px; -} - -.fc-list-heading td { - font-weight: bold; -} - -.fc-ltr .fc-list-heading-main { - float: left; -} - -.fc-ltr .fc-list-heading-alt { - float: right; -} - -.fc-rtl .fc-list-heading-main { - float: right; -} - -.fc-rtl .fc-list-heading-alt { - float: left; -} - -/* event list items */ -.fc-list-item.fc-has-url { - cursor: pointer; - /* whole row will be clickable */ -} - -.fc-list-item-marker, -.fc-list-item-time { - white-space: nowrap; - width: 1px; -} - -/* make the dot closer to the event title */ -.fc-ltr .fc-list-item-marker { - padding-right: 0; -} - -.fc-rtl .fc-list-item-marker { - padding-left: 0; -} - -.fc-list-item-title a { - /* every event title cell has an
tag */ - text-decoration: none; - color: inherit; -} - -.fc-list-item-title a[href]:hover { - /* hover effect only on titles with hrefs */ - text-decoration: underline; -} - -/* message when no events */ -.fc-list-empty-wrap2 { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.fc-list-empty-wrap1 { - width: 100%; - height: 100%; - display: table; -} - -.fc-list-empty { - display: table-cell; - vertical-align: middle; - text-align: center; -} - -.fc-unthemed .fc-list-empty { - /* theme will provide own background */ - background-color: #eee; -} -.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08);}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px);}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.rightMost:after{left:auto;right:22px}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9);}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{/* - /*rtl:begin:ignore*/left:0;/* - /*rtl:end:ignore*/}/* - /*rtl:begin:ignore*/ -/* - /*rtl:end:ignore*/ -.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{/* - /*rtl:begin:ignore*/right:0;/* - /*rtl:end:ignore*/}/* - /*rtl:begin:ignore*/ -/* - /*rtl:end:ignore*/ -.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9;}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px;}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto;}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%;}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,0.15);-webkit-box-sizing:border-box;box-sizing:border-box;}.numInputWrapper span:hover{background:rgba(0,0,0,0.1)}.numInputWrapper span:active{background:rgba(0,0,0,0.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0;}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,0.6);top:26%}.numInputWrapper span.arrowDown{top:50%;}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,0.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto;}.numInputWrapper span svg path{fill:rgba(0,0,0,0.5)}.numInputWrapper:hover{background:rgba(0,0,0,0.05);}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0;}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block;}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,0.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,0.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,0.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto;}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px;}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,0.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px;}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;}.dayContainer + .dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9;}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,0.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,0.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left;}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,0.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left;}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}} \ No newline at end of file +@charset "UTF-8";.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:2px 4px}.fc-rtl .fc-popover .fc-header{flex-direction:row-reverse}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer;opacity:.65;font-size:1.1em}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg,.fc-bgevent-skeleton,.fc-highlight-skeleton,.fc-mirror-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]{cursor:pointer}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-mirror-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-mirror-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-mirror-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-mirror-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.4;border-radius:3px;border:1px solid #3788d8}.fc-event,.fc-event-dot{background-color:#3788d8}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-event.fc-draggable,.fc-event[href]{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4}.fc-event .fc-resizer{display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-event.fc-dragging.fc-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event.fc-dragging:not(.fc-selected){opacity:.75}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-mirror-skeleton tr:first-child>td>.fc-day-grid-event{margin-top:0}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}@font-face{font-family:fcicons;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype");font-weight:400;font-style:normal}.fc-icon{font-family:fcicons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fc-icon-chevron-left:before{content:""}.fc-icon-chevron-right:before{content:""}.fc-icon-chevrons-left:before{content:""}.fc-icon-chevrons-right:before{content:""}.fc-icon-minus-square:before{content:""}.fc-icon-plus-square:before{content:""}.fc-icon-x:before{content:""}.fc-icon{display:inline-block;width:1em;height:1em;text-align:center}.fc-button{border-radius:0;overflow:visible;text-transform:none;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}.fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc-button{-webkit-appearance:button}.fc-button:not(:disabled){cursor:pointer}.fc-button::-moz-focus-inner{padding:0;border-style:none}.fc-button{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.4em .65em;font-size:1em;line-height:1.5;border-radius:.25em}.fc-button:hover{color:#212529;text-decoration:none}.fc-button:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(44,62,80,.25);box-shadow:0 0 0 .2rem rgba(44,62,80,.25)}.fc-button:disabled{opacity:.65}.fc-button-primary{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.fc-button-primary:hover{color:#fff;background-color:#1e2b37;border-color:#1a252f}.fc-button-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:disabled{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.fc-button-primary:not(:disabled).fc-button-active,.fc-button-primary:not(:disabled):active{color:#fff;background-color:#1a252f;border-color:#151e27}.fc-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{vertical-align:middle;font-size:1.5em}.fc-button-group{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.fc-button-group>.fc-button{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.fc-button-group>.fc-button:hover{z-index:1}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus{z-index:1}.fc-button-group>.fc-button:not(:first-child){margin-left:-1px}.fc-button-group>.fc-button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.fc-button-group>.fc-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.fc-toolbar{display:flex;justify-content:space-between;align-items:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-toolbar h2{font-size:1.75em;margin:0}.fc-view-container{position:relative}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}@media print{.fc{max-width:100%!important}.fc-event{background:#fff!important;color:#000!important;page-break-inside:avoid}.fc-event .fc-resizer{display:none}.fc hr,.fc tbody,.fc td,.fc th,.fc thead,.fc-row{border-color:#ccc!important;background:#fff!important}.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-highlight-container,.fc-highlight-skeleton,.fc-mirror-container,.fc-mirror-skeleton{display:none}.fc tbody .fc-row{height:auto!important;min-height:0!important}.fc tbody .fc-row .fc-content-skeleton{position:static;padding-bottom:0!important}.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td{padding-bottom:1em}.fc tbody .fc-row .fc-content-skeleton table{height:1em}.fc-more,.fc-more-cell{display:none!important}.fc tr.fc-limited{display:table-row!important}.fc td.fc-limited{display:table-cell!important}.fc-popover{display:none}.fc-time-grid{min-height:0!important}.fc-timeGrid-view .fc-axis{display:none}.fc-slats,.fc-time-grid hr{display:none!important}.fc-time-grid .fc-content-skeleton{position:static}.fc-time-grid .fc-content-skeleton table{height:4em}.fc-time-grid .fc-event-container{margin:0!important}.fc-time-grid .fc-event{position:static!important;margin:3px 2px!important}.fc-time-grid .fc-event.fc-not-end{border-bottom-width:1px!important}.fc-time-grid .fc-event.fc-not-end:after{content:"..."}.fc-time-grid .fc-event.fc-not-start{border-top-width:1px!important}.fc-time-grid .fc-event.fc-not-start:before{content:"..."}.fc-time-grid .fc-event .fc-time{white-space:normal!important}.fc-time-grid .fc-event .fc-time span{display:none}.fc-time-grid .fc-event .fc-time:after{content:attr(data-full)}.fc-day-grid-container,.fc-scroller,.fc-time-grid-container{overflow:visible!important;height:auto!important}.fc-row{border:0!important;margin:0!important}.fc button,.fc-button-group{display:none}}.fc-dayGridDay-view .fc-content-skeleton,.fc-dayGridWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-dayGrid-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-dayGrid-view .fc-day-number,.fc-dayGrid-view .fc-week-number{padding:2px}.fc-dayGrid-view th.fc-day-number,.fc-dayGrid-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px 0}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-dayGrid-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-dayGrid-view td.fc-week-number{text-align:center}.fc-dayGrid-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-scroller-clip{overflow:hidden;position:relative}.fc-no-scrollbars{background:rgba(255,255,255,0)}.fc-no-scrollbars::-webkit-scrollbar{width:0;height:0}.fc-scroller-canvas{position:relative;box-sizing:border-box;min-height:100%}.fc-scroller-canvas>.fc-bg{z-index:1}.fc-scroller-canvas>.fc-content{z-index:2;position:relative;border-style:solid;border-width:0}.fc-scroller-canvas.fc-gutter-left>.fc-content{border-left-width:1px;margin-left:-1px}.fc-scroller-canvas.fc-gutter-right>.fc-content{border-right-width:1px;margin-right:-1px}.fc-scroller-canvas.fc-gutter-top>.fc-content{border-top-width:1px;margin-top:-1px}.fc-rtl .fc-timeline{direction:rtl}.fc-scrolled .fc-head .fc-scroller{z-index:2}.fc-timeline.fc-scrolled .fc-head .fc-scroller{box-shadow:0 3px 4px rgba(0,0,0,.075)}.fc-timeline .fc-body .fc-scroller{z-index:1}.fc-timeline .fc-scroller-canvas>div>div>table,.fc-timeline .fc-scroller-canvas>div>table{border-style:hidden}.fc-timeline .fc-scroller-canvas>.fc-content>.fc-rows>table{border-bottom-style:none}.fc-timeline td,.fc-timeline th{white-space:nowrap}.fc-timeline .fc-cell-content{overflow:hidden}.fc-timeline .fc-cell-text{display:inline-block;padding-left:4px;padding-right:4px}.fc-timeline th{vertical-align:middle}.fc-timeline .fc-head .fc-cell-content{padding-top:3px;padding-bottom:3px}.fc-timeline .fc-head .fc-time-area .fc-cell-content{overflow:visible}.fc-time-area col{min-width:2.2em}.fc-ltr .fc-time-area .fc-chrono th{text-align:left}.fc-rtl .fc-time-area .fc-chrono th{text-align:right}.fc-time-area .fc-slats{position:absolute;z-index:1;top:0;left:0;right:0;bottom:0}.fc-time-area .fc-slats table{height:100%}.fc-time-area .fc-slats .fc-minor{border-style:dotted}.fc-time-area .fc-slats td{border-width:0 1px}.fc-ltr .fc-time-area .fc-slats td{border-right-width:0}.fc-rtl .fc-time-area .fc-slats td{border-left-width:0}.fc-time-area .fc-bgevent-container,.fc-time-area .fc-highlight-container{position:absolute;z-index:2;top:0;bottom:0;width:0}.fc-ltr .fc-time-area .fc-bgevent-container,.fc-ltr .fc-time-area .fc-highlight-container,.fc-ltr .fc-time-area .fc-mirror-container{left:0}.fc-rtl .fc-time-area .fc-bgevent-container,.fc-rtl .fc-time-area .fc-highlight-container,.fc-rtl .fc-time-area .fc-mirror-container{right:0}.fc-time-area .fc-bgevent,.fc-time-area .fc-highlight{position:absolute;top:0;bottom:0}.fc-timeline .fc-now-indicator{z-index:3;top:0}.fc-time-area .fc-now-indicator-arrow{margin:0 -6px;border-width:6px 5px 0 5px;border-left-color:transparent;border-right-color:transparent}.fc-time-area .fc-now-indicator-line{margin:0 -1px;bottom:0;border-left-width:1px}.fc-time-area .fc-event-container{position:relative;z-index:2;width:0}.fc-time-area .fc-mirror-container{position:absolute;z-index:3;top:0}.fc-time-area .fc-event-container{padding-bottom:8px;top:-1px}.fc-time-area tr:first-child .fc-event-container{top:0}.fc-no-overlap .fc-time-area .fc-event-container{padding-bottom:0;top:0}.fc-timeline-event{position:absolute;display:flex;border-radius:0;padding:2px 1px;margin-bottom:1px}.fc-no-overlap .fc-timeline-event{padding-top:5px;padding-bottom:5px;margin-bottom:0}.fc-ltr .fc-timeline-event{flex-direction:row;margin-right:1px}.fc-rtl .fc-timeline-event{margin-left:1px}.fc-timeline-event .fc-time-wrap{flex-shrink:0;min-width:0}.fc-timeline-event .fc-title-wrap{flex-grow:1;min-width:0}.fc-timeline-event .fc-time,.fc-timeline-event .fc-title{display:inline-block;vertical-align:top;max-width:100%;padding:0 2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;white-space:nowrap;overflow:hidden}.fc-timeline-event .fc-time{font-weight:700}.fc-timeline-event.fc-not-end:after,.fc-timeline-event.fc-not-start:before{content:"";align-self:center;width:0;height:0;margin:0 1px;border:5px solid #000;border-top-color:transparent;border-bottom-color:transparent;opacity:.5}.fc-ltr .fc-timeline-event.fc-not-start:before,.fc-rtl .fc-timeline-event.fc-not-end:after{border-left:0}.fc-ltr .fc-timeline-event.fc-not-end:after,.fc-rtl .fc-timeline-event.fc-not-start:before{border-right:0}.fc-timeGrid-view .fc-day-grid{position:relative;z-index:2}.fc-timeGrid-view .fc-day-grid .fc-row{min-height:3em}.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{position:relative;z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-mirror-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-time-grid-event{margin-bottom:1px}.fc-time-grid-event-inset{-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.fc-time-grid-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-time-grid-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event .fc-content{overflow:hidden;max-height:100%}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:" - "}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt{float:right}.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}.flatpickr-calendar{background:0 0;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.inline,.flatpickr-calendar.open{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasTime .dayContainer,.flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:after,.flatpickr-calendar:before{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:after,.flatpickr-calendar.rightMost:before{left:auto;right:22px}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:after,.flatpickr-calendar.arrowTop:before{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:after,.flatpickr-calendar.arrowBottom:before{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:0 0;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9)}.flatpickr-months .flatpickr-next-month.flatpickr-disabled,.flatpickr-months .flatpickr-prev-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-next-month i,.flatpickr-months .flatpickr-prev-month i{position:relative}.flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-next-month.flatpickr-next-month,.flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-next-month:hover,.flatpickr-months .flatpickr-prev-month:hover{color:#959ea9}.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-next-month svg,.flatpickr-months .flatpickr-prev-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-next-month svg path,.flatpickr-months .flatpickr-prev-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-inner-spin-button,.numInputWrapper input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{background:0 0;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,.5);background:0 0;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:0 0;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:0;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:active,.flatpickr-current-month .flatpickr-monthDropdown-months:focus{outline:0}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:0;padding:0}.flatpickr-weekdays{background:0 0;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:0 0;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:0 0;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.today.inRange,.flatpickr-day:focus,.flatpickr-day:hover{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:focus,.flatpickr-day.today:hover{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.endRange,.flatpickr-day.endRange.inRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.inRange,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.inRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.endRange.startRange,.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.endRange.endRange,.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.endRange.startRange.endRange,.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.nextMonthDay,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.prevMonthDay{color:rgba(57,57,57,.3);background:0 0;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,.3);background:0 0;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:0 0;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-am-pm,.flatpickr-time .flatpickr-time-separator{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time .flatpickr-am-pm:focus,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time input:hover{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}} diff --git a/public/css/picker.css b/public/css/picker.css old mode 100644 new mode 100755 diff --git a/public/css/profile.css b/public/css/profile.css old mode 100644 new mode 100755 diff --git a/public/css/viewapplication.css b/public/css/viewapplication.css old mode 100644 new mode 100755 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100755 index 0000000..50e6256 Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100755 index 0000000..8793378 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico old mode 100644 new mode 100755 diff --git a/public/header.png b/public/header.png new file mode 100755 index 0000000..67104d2 Binary files /dev/null and b/public/header.png differ diff --git a/public/img/401.svg b/public/img/401.svg new file mode 100644 index 0000000..4798a7a --- /dev/null +++ b/public/img/401.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/403.svg b/public/img/403.svg old mode 100644 new mode 100755 index 9c6a1b5..8614ea3 --- a/public/img/403.svg +++ b/public/img/403.svg @@ -1 +1 @@ -access_denied \ No newline at end of file + \ No newline at end of file diff --git a/public/img/404.svg b/public/img/404.svg new file mode 100644 index 0000000..afafb85 --- /dev/null +++ b/public/img/404.svg @@ -0,0 +1 @@ +searching \ No newline at end of file diff --git a/public/img/500.svg b/public/img/500.svg new file mode 100644 index 0000000..91814cd --- /dev/null +++ b/public/img/500.svg @@ -0,0 +1 @@ +server down \ No newline at end of file diff --git a/public/img/503.svg b/public/img/503.svg new file mode 100644 index 0000000..895bc82 --- /dev/null +++ b/public/img/503.svg @@ -0,0 +1 @@ +preservation \ No newline at end of file diff --git a/public/img/applications_all.svg b/public/img/applications_all.svg old mode 100644 new mode 100755 diff --git a/public/img/authbg.jpg b/public/img/authbg.jpg old mode 100644 new mode 100755 diff --git a/public/img/discord-mark-white.svg b/public/img/discord-mark-white.svg new file mode 100755 index 0000000..052a7d2 --- /dev/null +++ b/public/img/discord-mark-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/editable.svg b/public/img/editable.svg new file mode 100755 index 0000000..caae41a --- /dev/null +++ b/public/img/editable.svg @@ -0,0 +1 @@ +editable \ No newline at end of file diff --git a/public/img/editor.svg b/public/img/editor.svg old mode 100644 new mode 100755 diff --git a/public/img/file_example_PNG_3MB.png b/public/img/file_example_PNG_3MB.png new file mode 100755 index 0000000..55efaf8 Binary files /dev/null and b/public/img/file_example_PNG_3MB.png differ diff --git a/public/img/files.svg b/public/img/files.svg new file mode 100755 index 0000000..3900853 --- /dev/null +++ b/public/img/files.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/gmod.png b/public/img/gmod.png new file mode 100755 index 0000000..ad02636 Binary files /dev/null and b/public/img/gmod.png differ diff --git a/public/img/gravatar.png b/public/img/gravatar.png old mode 100644 new mode 100755 diff --git a/public/img/mc.jpg b/public/img/mc.jpg new file mode 100755 index 0000000..aa03af2 Binary files /dev/null and b/public/img/mc.jpg differ diff --git a/public/img/mojang-logo.png b/public/img/mojang-logo.png old mode 100644 new mode 100755 diff --git a/public/img/new_team.svg b/public/img/new_team.svg new file mode 100755 index 0000000..1b10234 --- /dev/null +++ b/public/img/new_team.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/img/placeholders.svg b/public/img/placeholders.svg old mode 100644 new mode 100755 diff --git a/public/img/preview.svg b/public/img/preview.svg old mode 100644 new mode 100755 diff --git a/public/img/reddit-mark-white.svg b/public/img/reddit-mark-white.svg new file mode 100755 index 0000000..f088aa3 --- /dev/null +++ b/public/img/reddit-mark-white.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/img/rust.png b/public/img/rust.png new file mode 100755 index 0000000..c634407 Binary files /dev/null and b/public/img/rust.png differ diff --git a/public/img/se.png b/public/img/se.png new file mode 100755 index 0000000..6c8e481 Binary files /dev/null and b/public/img/se.png differ diff --git a/public/img/team.svg b/public/img/team.svg new file mode 100755 index 0000000..88a5e64 --- /dev/null +++ b/public/img/team.svg @@ -0,0 +1 @@ +remote_team \ No newline at end of file diff --git a/public/img/textfile.png b/public/img/textfile.png new file mode 100755 index 0000000..b0b5011 Binary files /dev/null and b/public/img/textfile.png differ diff --git a/public/index.php b/public/index.php old mode 100644 new mode 100755 index 4584cbc..5b3bd74 --- a/public/index.php +++ b/public/index.php @@ -1,14 +1,45 @@ + * This file is part of Raspberry Staff Manager. + * + * Raspberry Staff Manager is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Raspberry Staff Manager is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Raspberry Staff Manager. If not, see . */ define('LARAVEL_START', microtime(true)); +if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) { + require __DIR__.'/../storage/framework/maintenance.php'; +} + +/* +|-------------------------------------------------------------------------- +| Check If Application Is Under Maintenance +|-------------------------------------------------------------------------- +| +| If the application is maintenance / demo mode via the "down" command we +| will require this file so that any prerendered template can be shown +| instead of starting the framework, which could cause an exception. +| +*/ + +if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) { + require __DIR__.'/../storage/framework/maintenance.php'; +} + /* |-------------------------------------------------------------------------- | Register The Auto Loader diff --git a/public/js/app.js b/public/js/app.js old mode 100644 new mode 100755 index fd12914..a03c5a1 --- a/public/js/app.js +++ b/public/js/app.js @@ -1,77214 +1,2 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./node_modules/axios/index.js": -/*!*************************************!*\ - !*** ./node_modules/axios/index.js ***! - \*************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js"); - -/***/ }), - -/***/ "./node_modules/axios/lib/adapters/xhr.js": -/*!************************************************!*\ - !*** ./node_modules/axios/lib/adapters/xhr.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); -var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js"); -var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); -var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js"); -var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js"); -var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js"); -var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js"); - -module.exports = function xhrAdapter(config) { - return new Promise(function dispatchXhrRequest(resolve, reject) { - var requestData = config.data; - var requestHeaders = config.headers; - - if (utils.isFormData(requestData)) { - delete requestHeaders['Content-Type']; // Let the browser set it - } - - var request = new XMLHttpRequest(); - - // HTTP basic authentication - if (config.auth) { - var username = config.auth.username || ''; - var password = config.auth.password || ''; - requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); - } - - var fullPath = buildFullPath(config.baseURL, config.url); - request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); - - // Set the request timeout in MS - request.timeout = config.timeout; - - // Listen for ready state - request.onreadystatechange = function handleLoad() { - if (!request || request.readyState !== 4) { - return; - } - - // The request errored out and we didn't get a response, this will be - // handled by onerror instead - // With one exception: request that using file: protocol, most browsers - // will return status as 0 even though it's a successful request - if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { - return; - } - - // Prepare the response - var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; - var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; - var response = { - data: responseData, - status: request.status, - statusText: request.statusText, - headers: responseHeaders, - config: config, - request: request - }; - - settle(resolve, reject, response); - - // Clean up request - request = null; - }; - - // Handle browser request cancellation (as opposed to a manual cancellation) - request.onabort = function handleAbort() { - if (!request) { - return; - } - - reject(createError('Request aborted', config, 'ECONNABORTED', request)); - - // Clean up request - request = null; - }; - - // Handle low level network errors - request.onerror = function handleError() { - // Real errors are hidden from us by the browser - // onerror should only fire if it's a network error - reject(createError('Network Error', config, null, request)); - - // Clean up request - request = null; - }; - - // Handle timeout - request.ontimeout = function handleTimeout() { - var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded'; - if (config.timeoutErrorMessage) { - timeoutErrorMessage = config.timeoutErrorMessage; - } - reject(createError(timeoutErrorMessage, config, 'ECONNABORTED', - request)); - - // Clean up request - request = null; - }; - - // Add xsrf header - // This is only done if running in a standard browser environment. - // Specifically not if we're in a web worker, or react-native. - if (utils.isStandardBrowserEnv()) { - var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js"); - - // Add xsrf header - var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? - cookies.read(config.xsrfCookieName) : - undefined; - - if (xsrfValue) { - requestHeaders[config.xsrfHeaderName] = xsrfValue; - } - } - - // Add headers to the request - if ('setRequestHeader' in request) { - utils.forEach(requestHeaders, function setRequestHeader(val, key) { - if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { - // Remove Content-Type if data is undefined - delete requestHeaders[key]; - } else { - // Otherwise add header to the request - request.setRequestHeader(key, val); - } - }); - } - - // Add withCredentials to request if needed - if (!utils.isUndefined(config.withCredentials)) { - request.withCredentials = !!config.withCredentials; - } - - // Add responseType to request if needed - if (config.responseType) { - try { - request.responseType = config.responseType; - } catch (e) { - // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2. - // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function. - if (config.responseType !== 'json') { - throw e; - } - } - } - - // Handle progress if needed - if (typeof config.onDownloadProgress === 'function') { - request.addEventListener('progress', config.onDownloadProgress); - } - - // Not all browsers support upload events - if (typeof config.onUploadProgress === 'function' && request.upload) { - request.upload.addEventListener('progress', config.onUploadProgress); - } - - if (config.cancelToken) { - // Handle cancellation - config.cancelToken.promise.then(function onCanceled(cancel) { - if (!request) { - return; - } - - request.abort(); - reject(cancel); - // Clean up request - request = null; - }); - } - - if (requestData === undefined) { - requestData = null; - } - - // Send the request - request.send(requestData); - }); -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/axios.js": -/*!*****************************************!*\ - !*** ./node_modules/axios/lib/axios.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); -var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); -var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js"); -var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); -var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js"); - -/** - * Create an instance of Axios - * - * @param {Object} defaultConfig The default config for the instance - * @return {Axios} A new instance of Axios - */ -function createInstance(defaultConfig) { - var context = new Axios(defaultConfig); - var instance = bind(Axios.prototype.request, context); - - // Copy axios.prototype to instance - utils.extend(instance, Axios.prototype, context); - - // Copy context to instance - utils.extend(instance, context); - - return instance; -} - -// Create the default instance to be exported -var axios = createInstance(defaults); - -// Expose Axios class to allow class inheritance -axios.Axios = Axios; - -// Factory for creating new instances -axios.create = function create(instanceConfig) { - return createInstance(mergeConfig(axios.defaults, instanceConfig)); -}; - -// Expose Cancel & CancelToken -axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); -axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js"); -axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); - -// Expose all/spread -axios.all = function all(promises) { - return Promise.all(promises); -}; -axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js"); - -module.exports = axios; - -// Allow use of default import syntax in TypeScript -module.exports.default = axios; - - -/***/ }), - -/***/ "./node_modules/axios/lib/cancel/Cancel.js": -/*!*************************************************!*\ - !*** ./node_modules/axios/lib/cancel/Cancel.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * A `Cancel` is an object that is thrown when an operation is canceled. - * - * @class - * @param {string=} message The message. - */ -function Cancel(message) { - this.message = message; -} - -Cancel.prototype.toString = function toString() { - return 'Cancel' + (this.message ? ': ' + this.message : ''); -}; - -Cancel.prototype.__CANCEL__ = true; - -module.exports = Cancel; - - -/***/ }), - -/***/ "./node_modules/axios/lib/cancel/CancelToken.js": -/*!******************************************************!*\ - !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); - -/** - * A `CancelToken` is an object that can be used to request cancellation of an operation. - * - * @class - * @param {Function} executor The executor function. - */ -function CancelToken(executor) { - if (typeof executor !== 'function') { - throw new TypeError('executor must be a function.'); - } - - var resolvePromise; - this.promise = new Promise(function promiseExecutor(resolve) { - resolvePromise = resolve; - }); - - var token = this; - executor(function cancel(message) { - if (token.reason) { - // Cancellation has already been requested - return; - } - - token.reason = new Cancel(message); - resolvePromise(token.reason); - }); -} - -/** - * Throws a `Cancel` if cancellation has been requested. - */ -CancelToken.prototype.throwIfRequested = function throwIfRequested() { - if (this.reason) { - throw this.reason; - } -}; - -/** - * Returns an object that contains a new `CancelToken` and a function that, when called, - * cancels the `CancelToken`. - */ -CancelToken.source = function source() { - var cancel; - var token = new CancelToken(function executor(c) { - cancel = c; - }); - return { - token: token, - cancel: cancel - }; -}; - -module.exports = CancelToken; - - -/***/ }), - -/***/ "./node_modules/axios/lib/cancel/isCancel.js": -/*!***************************************************!*\ - !*** ./node_modules/axios/lib/cancel/isCancel.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function isCancel(value) { - return !!(value && value.__CANCEL__); -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/Axios.js": -/*!**********************************************!*\ - !*** ./node_modules/axios/lib/core/Axios.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); -var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); -var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js"); -var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js"); -var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); - -/** - * Create a new instance of Axios - * - * @param {Object} instanceConfig The default config for the instance - */ -function Axios(instanceConfig) { - this.defaults = instanceConfig; - this.interceptors = { - request: new InterceptorManager(), - response: new InterceptorManager() - }; -} - -/** - * Dispatch a request - * - * @param {Object} config The config specific for this request (merged with this.defaults) - */ -Axios.prototype.request = function request(config) { - /*eslint no-param-reassign:0*/ - // Allow for axios('example/url'[, config]) a la fetch API - if (typeof config === 'string') { - config = arguments[1] || {}; - config.url = arguments[0]; - } else { - config = config || {}; - } - - config = mergeConfig(this.defaults, config); - - // Set config.method - if (config.method) { - config.method = config.method.toLowerCase(); - } else if (this.defaults.method) { - config.method = this.defaults.method.toLowerCase(); - } else { - config.method = 'get'; - } - - // Hook up interceptors middleware - var chain = [dispatchRequest, undefined]; - var promise = Promise.resolve(config); - - this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { - chain.unshift(interceptor.fulfilled, interceptor.rejected); - }); - - this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { - chain.push(interceptor.fulfilled, interceptor.rejected); - }); - - while (chain.length) { - promise = promise.then(chain.shift(), chain.shift()); - } - - return promise; -}; - -Axios.prototype.getUri = function getUri(config) { - config = mergeConfig(this.defaults, config); - return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); -}; - -// Provide aliases for supported request methods -utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, config) { - return this.request(utils.merge(config || {}, { - method: method, - url: url - })); - }; -}); - -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, data, config) { - return this.request(utils.merge(config || {}, { - method: method, - url: url, - data: data - })); - }; -}); - -module.exports = Axios; - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/InterceptorManager.js": -/*!***********************************************************!*\ - !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); - -function InterceptorManager() { - this.handlers = []; -} - -/** - * Add a new interceptor to the stack - * - * @param {Function} fulfilled The function to handle `then` for a `Promise` - * @param {Function} rejected The function to handle `reject` for a `Promise` - * - * @return {Number} An ID used to remove interceptor later - */ -InterceptorManager.prototype.use = function use(fulfilled, rejected) { - this.handlers.push({ - fulfilled: fulfilled, - rejected: rejected - }); - return this.handlers.length - 1; -}; - -/** - * Remove an interceptor from the stack - * - * @param {Number} id The ID that was returned by `use` - */ -InterceptorManager.prototype.eject = function eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; - } -}; - -/** - * Iterate over all the registered interceptors - * - * This method is particularly useful for skipping over any - * interceptors that may have become `null` calling `eject`. - * - * @param {Function} fn The function to call for each interceptor - */ -InterceptorManager.prototype.forEach = function forEach(fn) { - utils.forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); - } - }); -}; - -module.exports = InterceptorManager; - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/buildFullPath.js": -/*!******************************************************!*\ - !*** ./node_modules/axios/lib/core/buildFullPath.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js"); -var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js"); - -/** - * Creates a new URL by combining the baseURL with the requestedURL, - * only when the requestedURL is not already an absolute URL. - * If the requestURL is absolute, this function returns the requestedURL untouched. - * - * @param {string} baseURL The base URL - * @param {string} requestedURL Absolute or relative URL to combine - * @returns {string} The combined full path - */ -module.exports = function buildFullPath(baseURL, requestedURL) { - if (baseURL && !isAbsoluteURL(requestedURL)) { - return combineURLs(baseURL, requestedURL); - } - return requestedURL; -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/createError.js": -/*!****************************************************!*\ - !*** ./node_modules/axios/lib/core/createError.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); - -/** - * Create an Error with the specified message, config, error code, request and response. - * - * @param {string} message The error message. - * @param {Object} config The config. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - * @param {Object} [request] The request. - * @param {Object} [response] The response. - * @returns {Error} The created error. - */ -module.exports = function createError(message, config, code, request, response) { - var error = new Error(message); - return enhanceError(error, config, code, request, response); -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/dispatchRequest.js": -/*!********************************************************!*\ - !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); -var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js"); -var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); -var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); - -/** - * Throws a `Cancel` if cancellation has been requested. - */ -function throwIfCancellationRequested(config) { - if (config.cancelToken) { - config.cancelToken.throwIfRequested(); - } -} - -/** - * Dispatch a request to the server using the configured adapter. - * - * @param {object} config The config that is to be used for the request - * @returns {Promise} The Promise to be fulfilled - */ -module.exports = function dispatchRequest(config) { - throwIfCancellationRequested(config); - - // Ensure headers exist - config.headers = config.headers || {}; - - // Transform request data - config.data = transformData( - config.data, - config.headers, - config.transformRequest - ); - - // Flatten headers - config.headers = utils.merge( - config.headers.common || {}, - config.headers[config.method] || {}, - config.headers - ); - - utils.forEach( - ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], - function cleanHeaderConfig(method) { - delete config.headers[method]; - } - ); - - var adapter = config.adapter || defaults.adapter; - - return adapter(config).then(function onAdapterResolution(response) { - throwIfCancellationRequested(config); - - // Transform response data - response.data = transformData( - response.data, - response.headers, - config.transformResponse - ); - - return response; - }, function onAdapterRejection(reason) { - if (!isCancel(reason)) { - throwIfCancellationRequested(config); - - // Transform response data - if (reason && reason.response) { - reason.response.data = transformData( - reason.response.data, - reason.response.headers, - config.transformResponse - ); - } - } - - return Promise.reject(reason); - }); -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/enhanceError.js": -/*!*****************************************************!*\ - !*** ./node_modules/axios/lib/core/enhanceError.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * Update an Error with the specified config, error code, and response. - * - * @param {Error} error The error to update. - * @param {Object} config The config. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - * @param {Object} [request] The request. - * @param {Object} [response] The response. - * @returns {Error} The error. - */ -module.exports = function enhanceError(error, config, code, request, response) { - error.config = config; - if (code) { - error.code = code; - } - - error.request = request; - error.response = response; - error.isAxiosError = true; - - error.toJSON = function() { - return { - // Standard - message: this.message, - name: this.name, - // Microsoft - description: this.description, - number: this.number, - // Mozilla - fileName: this.fileName, - lineNumber: this.lineNumber, - columnNumber: this.columnNumber, - stack: this.stack, - // Axios - config: this.config, - code: this.code - }; - }; - return error; -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/mergeConfig.js": -/*!****************************************************!*\ - !*** ./node_modules/axios/lib/core/mergeConfig.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); - -/** - * Config-specific merge-function which creates a new config-object - * by merging two configuration objects together. - * - * @param {Object} config1 - * @param {Object} config2 - * @returns {Object} New object resulting from merging config2 to config1 - */ -module.exports = function mergeConfig(config1, config2) { - // eslint-disable-next-line no-param-reassign - config2 = config2 || {}; - var config = {}; - - var valueFromConfig2Keys = ['url', 'method', 'params', 'data']; - var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy']; - var defaultToConfig2Keys = [ - 'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer', - 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', - 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', - 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent', - 'httpsAgent', 'cancelToken', 'socketPath' - ]; - - utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) { - if (typeof config2[prop] !== 'undefined') { - config[prop] = config2[prop]; - } - }); - - utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) { - if (utils.isObject(config2[prop])) { - config[prop] = utils.deepMerge(config1[prop], config2[prop]); - } else if (typeof config2[prop] !== 'undefined') { - config[prop] = config2[prop]; - } else if (utils.isObject(config1[prop])) { - config[prop] = utils.deepMerge(config1[prop]); - } else if (typeof config1[prop] !== 'undefined') { - config[prop] = config1[prop]; - } - }); - - utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) { - if (typeof config2[prop] !== 'undefined') { - config[prop] = config2[prop]; - } else if (typeof config1[prop] !== 'undefined') { - config[prop] = config1[prop]; - } - }); - - var axiosKeys = valueFromConfig2Keys - .concat(mergeDeepPropertiesKeys) - .concat(defaultToConfig2Keys); - - var otherKeys = Object - .keys(config2) - .filter(function filterAxiosKeys(key) { - return axiosKeys.indexOf(key) === -1; - }); - - utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) { - if (typeof config2[prop] !== 'undefined') { - config[prop] = config2[prop]; - } else if (typeof config1[prop] !== 'undefined') { - config[prop] = config1[prop]; - } - }); - - return config; -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/settle.js": -/*!***********************************************!*\ - !*** ./node_modules/axios/lib/core/settle.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js"); - -/** - * Resolve or reject a Promise based on response status. - * - * @param {Function} resolve A function that resolves the promise. - * @param {Function} reject A function that rejects the promise. - * @param {object} response The response. - */ -module.exports = function settle(resolve, reject, response) { - var validateStatus = response.config.validateStatus; - if (!validateStatus || validateStatus(response.status)) { - resolve(response); - } else { - reject(createError( - 'Request failed with status code ' + response.status, - response.config, - null, - response.request, - response - )); - } -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/core/transformData.js": -/*!******************************************************!*\ - !*** ./node_modules/axios/lib/core/transformData.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); - -/** - * Transform the data for a request or a response - * - * @param {Object|String} data The data to be transformed - * @param {Array} headers The headers for the request or response - * @param {Array|Function} fns A single function or Array of functions - * @returns {*} The resulting transformed data - */ -module.exports = function transformData(data, headers, fns) { - /*eslint no-param-reassign:0*/ - utils.forEach(fns, function transform(fn) { - data = fn(data, headers); - }); - - return data; -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/defaults.js": -/*!********************************************!*\ - !*** ./node_modules/axios/lib/defaults.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(process) { - -var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); -var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js"); - -var DEFAULT_CONTENT_TYPE = { - 'Content-Type': 'application/x-www-form-urlencoded' -}; - -function setContentTypeIfUnset(headers, value) { - if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { - headers['Content-Type'] = value; - } -} - -function getDefaultAdapter() { - var adapter; - if (typeof XMLHttpRequest !== 'undefined') { - // For browsers use XHR adapter - adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js"); - } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { - // For node use HTTP adapter - adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js"); - } - return adapter; -} - -var defaults = { - adapter: getDefaultAdapter(), - - transformRequest: [function transformRequest(data, headers) { - normalizeHeaderName(headers, 'Accept'); - normalizeHeaderName(headers, 'Content-Type'); - if (utils.isFormData(data) || - utils.isArrayBuffer(data) || - utils.isBuffer(data) || - utils.isStream(data) || - utils.isFile(data) || - utils.isBlob(data) - ) { - return data; - } - if (utils.isArrayBufferView(data)) { - return data.buffer; - } - if (utils.isURLSearchParams(data)) { - setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); - return data.toString(); - } - if (utils.isObject(data)) { - setContentTypeIfUnset(headers, 'application/json;charset=utf-8'); - return JSON.stringify(data); - } - return data; - }], - - transformResponse: [function transformResponse(data) { - /*eslint no-param-reassign:0*/ - if (typeof data === 'string') { - try { - data = JSON.parse(data); - } catch (e) { /* Ignore */ } - } - return data; - }], - - /** - * A timeout in milliseconds to abort a request. If set to 0 (default) a - * timeout is not created. - */ - timeout: 0, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - - maxContentLength: -1, - - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - } -}; - -defaults.headers = { - common: { - 'Accept': 'application/json, text/plain, */*' - } -}; - -utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { - defaults.headers[method] = {}; -}); - -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); -}); - -module.exports = defaults; - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"))) - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/bind.js": -/*!************************************************!*\ - !*** ./node_modules/axios/lib/helpers/bind.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function bind(fn, thisArg) { - return function wrap() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - return fn.apply(thisArg, args); - }; -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/buildURL.js": -/*!****************************************************!*\ - !*** ./node_modules/axios/lib/helpers/buildURL.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); - -function encode(val) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, '+'). - replace(/%5B/gi, '['). - replace(/%5D/gi, ']'); -} - -/** - * Build a URL by appending params to the end - * - * @param {string} url The base of the url (e.g., http://www.google.com) - * @param {object} [params] The params to be appended - * @returns {string} The formatted url - */ -module.exports = function buildURL(url, params, paramsSerializer) { - /*eslint no-param-reassign:0*/ - if (!params) { - return url; - } - - var serializedParams; - if (paramsSerializer) { - serializedParams = paramsSerializer(params); - } else if (utils.isURLSearchParams(params)) { - serializedParams = params.toString(); - } else { - var parts = []; - - utils.forEach(params, function serialize(val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - - if (utils.isArray(val)) { - key = key + '[]'; - } else { - val = [val]; - } - - utils.forEach(val, function parseValue(v) { - if (utils.isDate(v)) { - v = v.toISOString(); - } else if (utils.isObject(v)) { - v = JSON.stringify(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - - serializedParams = parts.join('&'); - } - - if (serializedParams) { - var hashmarkIndex = url.indexOf('#'); - if (hashmarkIndex !== -1) { - url = url.slice(0, hashmarkIndex); - } - - url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; - } - - return url; -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/combineURLs.js": -/*!*******************************************************!*\ - !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * Creates a new URL by combining the specified URLs - * - * @param {string} baseURL The base URL - * @param {string} relativeURL The relative URL - * @returns {string} The combined URL - */ -module.exports = function combineURLs(baseURL, relativeURL) { - return relativeURL - ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') - : baseURL; -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/cookies.js": -/*!***************************************************!*\ - !*** ./node_modules/axios/lib/helpers/cookies.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); - -module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs support document.cookie - (function standardBrowserEnv() { - return { - write: function write(name, value, expires, path, domain, secure) { - var cookie = []; - cookie.push(name + '=' + encodeURIComponent(value)); - - if (utils.isNumber(expires)) { - cookie.push('expires=' + new Date(expires).toGMTString()); - } - - if (utils.isString(path)) { - cookie.push('path=' + path); - } - - if (utils.isString(domain)) { - cookie.push('domain=' + domain); - } - - if (secure === true) { - cookie.push('secure'); - } - - document.cookie = cookie.join('; '); - }, - - read: function read(name) { - var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); - return (match ? decodeURIComponent(match[3]) : null); - }, - - remove: function remove(name) { - this.write(name, '', Date.now() - 86400000); - } - }; - })() : - - // Non standard browser env (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return { - write: function write() {}, - read: function read() { return null; }, - remove: function remove() {} - }; - })() -); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js": -/*!*********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * Determines whether the specified URL is absolute - * - * @param {string} url The URL to test - * @returns {boolean} True if the specified URL is absolute, otherwise false - */ -module.exports = function isAbsoluteURL(url) { - // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). - // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed - // by any combination of letters, digits, plus, period, or hyphen. - return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js": -/*!***********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); - -module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs have full support of the APIs needed to test - // whether the request URL is of the same origin as current location. - (function standardBrowserEnv() { - var msie = /(msie|trident)/i.test(navigator.userAgent); - var urlParsingNode = document.createElement('a'); - var originURL; - - /** - * Parse a URL to discover it's components - * - * @param {String} url The URL to be parsed - * @returns {Object} - */ - function resolveURL(url) { - var href = url; - - if (msie) { - // IE needs attribute set twice to normalize properties - urlParsingNode.setAttribute('href', href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') ? - urlParsingNode.pathname : - '/' + urlParsingNode.pathname - }; - } - - originURL = resolveURL(window.location.href); - - /** - * Determine if a URL shares the same origin as the current location - * - * @param {String} requestURL The URL to test - * @returns {boolean} True if URL shares the same origin, otherwise false - */ - return function isURLSameOrigin(requestURL) { - var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; - return (parsed.protocol === originURL.protocol && - parsed.host === originURL.host); - }; - })() : - - // Non standard browser envs (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return function isURLSameOrigin() { - return true; - }; - })() -); - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js": -/*!***************************************************************!*\ - !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); - -module.exports = function normalizeHeaderName(headers, normalizedName) { - utils.forEach(headers, function processHeader(value, name) { - if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { - headers[normalizedName] = value; - delete headers[name]; - } - }); -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/parseHeaders.js": -/*!********************************************************!*\ - !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); - -// Headers whose duplicates are ignored by node -// c.f. https://nodejs.org/api/http.html#http_message_headers -var ignoreDuplicateOf = [ - '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' -]; - -/** - * Parse headers into an object - * - * ``` - * Date: Wed, 27 Aug 2014 08:58:49 GMT - * Content-Type: application/json - * Connection: keep-alive - * Transfer-Encoding: chunked - * ``` - * - * @param {String} headers Headers needing to be parsed - * @returns {Object} Headers parsed into an object - */ -module.exports = function parseHeaders(headers) { - var parsed = {}; - var key; - var val; - var i; - - if (!headers) { return parsed; } - - utils.forEach(headers.split('\n'), function parser(line) { - i = line.indexOf(':'); - key = utils.trim(line.substr(0, i)).toLowerCase(); - val = utils.trim(line.substr(i + 1)); - - if (key) { - if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { - return; - } - if (key === 'set-cookie') { - parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); - } else { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - } - }); - - return parsed; -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/helpers/spread.js": -/*!**************************************************!*\ - !*** ./node_modules/axios/lib/helpers/spread.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * Syntactic sugar for invoking a function and expanding an array for arguments. - * - * Common use case would be to use `Function.prototype.apply`. - * - * ```js - * function f(x, y, z) {} - * var args = [1, 2, 3]; - * f.apply(null, args); - * ``` - * - * With `spread` this example can be re-written. - * - * ```js - * spread(function(x, y, z) {})([1, 2, 3]); - * ``` - * - * @param {Function} callback - * @returns {Function} - */ -module.exports = function spread(callback) { - return function wrap(arr) { - return callback.apply(null, arr); - }; -}; - - -/***/ }), - -/***/ "./node_modules/axios/lib/utils.js": -/*!*****************************************!*\ - !*** ./node_modules/axios/lib/utils.js ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); - -/*global toString:true*/ - -// utils is a library of generic helper functions non-specific to axios - -var toString = Object.prototype.toString; - -/** - * Determine if a value is an Array - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Array, otherwise false - */ -function isArray(val) { - return toString.call(val) === '[object Array]'; -} - -/** - * Determine if a value is undefined - * - * @param {Object} val The value to test - * @returns {boolean} True if the value is undefined, otherwise false - */ -function isUndefined(val) { - return typeof val === 'undefined'; -} - -/** - * Determine if a value is a Buffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Buffer, otherwise false - */ -function isBuffer(val) { - return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) - && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); -} - -/** - * Determine if a value is an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an ArrayBuffer, otherwise false - */ -function isArrayBuffer(val) { - return toString.call(val) === '[object ArrayBuffer]'; -} - -/** - * Determine if a value is a FormData - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an FormData, otherwise false - */ -function isFormData(val) { - return (typeof FormData !== 'undefined') && (val instanceof FormData); -} - -/** - * Determine if a value is a view on an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false - */ -function isArrayBufferView(val) { - var result; - if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { - result = ArrayBuffer.isView(val); - } else { - result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); - } - return result; -} - -/** - * Determine if a value is a String - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a String, otherwise false - */ -function isString(val) { - return typeof val === 'string'; -} - -/** - * Determine if a value is a Number - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Number, otherwise false - */ -function isNumber(val) { - return typeof val === 'number'; -} - -/** - * Determine if a value is an Object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Object, otherwise false - */ -function isObject(val) { - return val !== null && typeof val === 'object'; -} - -/** - * Determine if a value is a Date - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Date, otherwise false - */ -function isDate(val) { - return toString.call(val) === '[object Date]'; -} - -/** - * Determine if a value is a File - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a File, otherwise false - */ -function isFile(val) { - return toString.call(val) === '[object File]'; -} - -/** - * Determine if a value is a Blob - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Blob, otherwise false - */ -function isBlob(val) { - return toString.call(val) === '[object Blob]'; -} - -/** - * Determine if a value is a Function - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Function, otherwise false - */ -function isFunction(val) { - return toString.call(val) === '[object Function]'; -} - -/** - * Determine if a value is a Stream - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Stream, otherwise false - */ -function isStream(val) { - return isObject(val) && isFunction(val.pipe); -} - -/** - * Determine if a value is a URLSearchParams object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a URLSearchParams object, otherwise false - */ -function isURLSearchParams(val) { - return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; -} - -/** - * Trim excess whitespace off the beginning and end of a string - * - * @param {String} str The String to trim - * @returns {String} The String freed of excess whitespace - */ -function trim(str) { - return str.replace(/^\s*/, '').replace(/\s*$/, ''); -} - -/** - * Determine if we're running in a standard browser environment - * - * This allows axios to run in a web worker, and react-native. - * Both environments support XMLHttpRequest, but not fully standard globals. - * - * web workers: - * typeof window -> undefined - * typeof document -> undefined - * - * react-native: - * navigator.product -> 'ReactNative' - * nativescript - * navigator.product -> 'NativeScript' or 'NS' - */ -function isStandardBrowserEnv() { - if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || - navigator.product === 'NativeScript' || - navigator.product === 'NS')) { - return false; - } - return ( - typeof window !== 'undefined' && - typeof document !== 'undefined' - ); -} - -/** - * Iterate over an Array or an Object invoking a function for each item. - * - * If `obj` is an Array callback will be called passing - * the value, index, and complete array for each item. - * - * If 'obj' is an Object callback will be called passing - * the value, key, and complete object for each property. - * - * @param {Object|Array} obj The object to iterate - * @param {Function} fn The callback to invoke for each item - */ -function forEach(obj, fn) { - // Don't bother if no value provided - if (obj === null || typeof obj === 'undefined') { - return; - } - - // Force an array if not already something iterable - if (typeof obj !== 'object') { - /*eslint no-param-reassign:0*/ - obj = [obj]; - } - - if (isArray(obj)) { - // Iterate over array values - for (var i = 0, l = obj.length; i < l; i++) { - fn.call(null, obj[i], i, obj); - } - } else { - // Iterate over object keys - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - fn.call(null, obj[key], key, obj); - } - } - } -} - -/** - * Accepts varargs expecting each argument to be an object, then - * immutably merges the properties of each object and returns result. - * - * When multiple objects contain the same key the later object in - * the arguments list will take precedence. - * - * Example: - * - * ```js - * var result = merge({foo: 123}, {foo: 456}); - * console.log(result.foo); // outputs 456 - * ``` - * - * @param {Object} obj1 Object to merge - * @returns {Object} Result of all merge properties - */ -function merge(/* obj1, obj2, obj3, ... */) { - var result = {}; - function assignValue(val, key) { - if (typeof result[key] === 'object' && typeof val === 'object') { - result[key] = merge(result[key], val); - } else { - result[key] = val; - } - } - - for (var i = 0, l = arguments.length; i < l; i++) { - forEach(arguments[i], assignValue); - } - return result; -} - -/** - * Function equal to merge with the difference being that no reference - * to original objects is kept. - * - * @see merge - * @param {Object} obj1 Object to merge - * @returns {Object} Result of all merge properties - */ -function deepMerge(/* obj1, obj2, obj3, ... */) { - var result = {}; - function assignValue(val, key) { - if (typeof result[key] === 'object' && typeof val === 'object') { - result[key] = deepMerge(result[key], val); - } else if (typeof val === 'object') { - result[key] = deepMerge({}, val); - } else { - result[key] = val; - } - } - - for (var i = 0, l = arguments.length; i < l; i++) { - forEach(arguments[i], assignValue); - } - return result; -} - -/** - * Extends object a by mutably adding to it the properties of object b. - * - * @param {Object} a The object to be extended - * @param {Object} b The object to copy properties from - * @param {Object} thisArg The object to bind function to - * @return {Object} The resulting value of object a - */ -function extend(a, b, thisArg) { - forEach(b, function assignValue(val, key) { - if (thisArg && typeof val === 'function') { - a[key] = bind(val, thisArg); - } else { - a[key] = val; - } - }); - return a; -} - -module.exports = { - isArray: isArray, - isArrayBuffer: isArrayBuffer, - isBuffer: isBuffer, - isFormData: isFormData, - isArrayBufferView: isArrayBufferView, - isString: isString, - isNumber: isNumber, - isObject: isObject, - isUndefined: isUndefined, - isDate: isDate, - isFile: isFile, - isBlob: isBlob, - isFunction: isFunction, - isStream: isStream, - isURLSearchParams: isURLSearchParams, - isStandardBrowserEnv: isStandardBrowserEnv, - forEach: forEach, - merge: merge, - deepMerge: deepMerge, - extend: extend, - trim: trim -}; - - -/***/ }), - -/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&": -/*!***************************************************************************************************************************************************************************!*\ - !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js& ***! - \***************************************************************************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -/* harmony default export */ __webpack_exports__["default"] = ({ - mounted: function mounted() { - console.log('Component mounted.'); - } -}); - -/***/ }), - -/***/ "./node_modules/bootstrap/dist/js/bootstrap.js": -/*!*****************************************************!*\ - !*** ./node_modules/bootstrap/dist/js/bootstrap.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -/*! - * Bootstrap v4.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -(function (global, factory) { - true ? factory(exports, __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")) : - undefined; -}(this, (function (exports, $, Popper) { 'use strict'; - - $ = $ && $.hasOwnProperty('default') ? $['default'] : $; - Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper; - - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; - } - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.4.1): util.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - /** - * ------------------------------------------------------------------------ - * Private TransitionEnd Helpers - * ------------------------------------------------------------------------ - */ - - var TRANSITION_END = 'transitionend'; - var MAX_UID = 1000000; - var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) - - function toType(obj) { - return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); - } - - function getSpecialTransitionEndEvent() { - return { - bindType: TRANSITION_END, - delegateType: TRANSITION_END, - handle: function handle(event) { - if ($(event.target).is(this)) { - return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params - } - - return undefined; // eslint-disable-line no-undefined - } - }; - } - - function transitionEndEmulator(duration) { - var _this = this; - - var called = false; - $(this).one(Util.TRANSITION_END, function () { - called = true; - }); - setTimeout(function () { - if (!called) { - Util.triggerTransitionEnd(_this); - } - }, duration); - return this; - } - - function setTransitionEndSupport() { - $.fn.emulateTransitionEnd = transitionEndEmulator; - $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); - } - /** - * -------------------------------------------------------------------------- - * Public Util Api - * -------------------------------------------------------------------------- - */ - - - var Util = { - TRANSITION_END: 'bsTransitionEnd', - getUID: function getUID(prefix) { - do { - // eslint-disable-next-line no-bitwise - prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here - } while (document.getElementById(prefix)); - - return prefix; - }, - getSelectorFromElement: function getSelectorFromElement(element) { - var selector = element.getAttribute('data-target'); - - if (!selector || selector === '#') { - var hrefAttr = element.getAttribute('href'); - selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; - } - - try { - return document.querySelector(selector) ? selector : null; - } catch (err) { - return null; - } - }, - getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { - if (!element) { - return 0; - } // Get transition-duration of the element - - - var transitionDuration = $(element).css('transition-duration'); - var transitionDelay = $(element).css('transition-delay'); - var floatTransitionDuration = parseFloat(transitionDuration); - var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found - - if (!floatTransitionDuration && !floatTransitionDelay) { - return 0; - } // If multiple durations are defined, take the first - - - transitionDuration = transitionDuration.split(',')[0]; - transitionDelay = transitionDelay.split(',')[0]; - return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; - }, - reflow: function reflow(element) { - return element.offsetHeight; - }, - triggerTransitionEnd: function triggerTransitionEnd(element) { - $(element).trigger(TRANSITION_END); - }, - // TODO: Remove in v5 - supportsTransitionEnd: function supportsTransitionEnd() { - return Boolean(TRANSITION_END); - }, - isElement: function isElement(obj) { - return (obj[0] || obj).nodeType; - }, - typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { - for (var property in configTypes) { - if (Object.prototype.hasOwnProperty.call(configTypes, property)) { - var expectedTypes = configTypes[property]; - var value = config[property]; - var valueType = value && Util.isElement(value) ? 'element' : toType(value); - - if (!new RegExp(expectedTypes).test(valueType)) { - throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); - } - } - } - }, - findShadowRoot: function findShadowRoot(element) { - if (!document.documentElement.attachShadow) { - return null; - } // Can find the shadow root otherwise it'll return the document - - - if (typeof element.getRootNode === 'function') { - var root = element.getRootNode(); - return root instanceof ShadowRoot ? root : null; - } - - if (element instanceof ShadowRoot) { - return element; - } // when we don't find a shadow root - - - if (!element.parentNode) { - return null; - } - - return Util.findShadowRoot(element.parentNode); - }, - jQueryDetection: function jQueryDetection() { - if (typeof $ === 'undefined') { - throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); - } - - var version = $.fn.jquery.split(' ')[0].split('.'); - var minMajor = 1; - var ltMajor = 2; - var minMinor = 9; - var minPatch = 1; - var maxMajor = 4; - - if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { - throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); - } - } - }; - Util.jQueryDetection(); - setTransitionEndSupport(); - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME = 'alert'; - var VERSION = '4.4.1'; - var DATA_KEY = 'bs.alert'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $.fn[NAME]; - var Selector = { - DISMISS: '[data-dismiss="alert"]' - }; - var Event = { - CLOSE: "close" + EVENT_KEY, - CLOSED: "closed" + EVENT_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - ALERT: 'alert', - FADE: 'fade', - SHOW: 'show' - }; - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - var Alert = - /*#__PURE__*/ - function () { - function Alert(element) { - this._element = element; - } // Getters - - - var _proto = Alert.prototype; - - // Public - _proto.close = function close(element) { - var rootElement = this._element; - - if (element) { - rootElement = this._getRootElement(element); - } - - var customEvent = this._triggerCloseEvent(rootElement); - - if (customEvent.isDefaultPrevented()) { - return; - } - - this._removeElement(rootElement); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY); - this._element = null; - } // Private - ; - - _proto._getRootElement = function _getRootElement(element) { - var selector = Util.getSelectorFromElement(element); - var parent = false; - - if (selector) { - parent = document.querySelector(selector); - } - - if (!parent) { - parent = $(element).closest("." + ClassName.ALERT)[0]; - } - - return parent; - }; - - _proto._triggerCloseEvent = function _triggerCloseEvent(element) { - var closeEvent = $.Event(Event.CLOSE); - $(element).trigger(closeEvent); - return closeEvent; - }; - - _proto._removeElement = function _removeElement(element) { - var _this = this; - - $(element).removeClass(ClassName.SHOW); - - if (!$(element).hasClass(ClassName.FADE)) { - this._destroyElement(element); - - return; - } - - var transitionDuration = Util.getTransitionDurationFromElement(element); - $(element).one(Util.TRANSITION_END, function (event) { - return _this._destroyElement(element, event); - }).emulateTransitionEnd(transitionDuration); - }; - - _proto._destroyElement = function _destroyElement(element) { - $(element).detach().trigger(Event.CLOSED).remove(); - } // Static - ; - - Alert._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $element = $(this); - var data = $element.data(DATA_KEY); - - if (!data) { - data = new Alert(this); - $element.data(DATA_KEY, data); - } - - if (config === 'close') { - data[config](this); - } - }); - }; - - Alert._handleDismiss = function _handleDismiss(alertInstance) { - return function (event) { - if (event) { - event.preventDefault(); - } - - alertInstance.close(this); - }; - }; - - _createClass(Alert, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }]); - - return Alert; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME] = Alert._jQueryInterface; - $.fn[NAME].Constructor = Alert; - - $.fn[NAME].noConflict = function () { - $.fn[NAME] = JQUERY_NO_CONFLICT; - return Alert._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$1 = 'button'; - var VERSION$1 = '4.4.1'; - var DATA_KEY$1 = 'bs.button'; - var EVENT_KEY$1 = "." + DATA_KEY$1; - var DATA_API_KEY$1 = '.data-api'; - var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1]; - var ClassName$1 = { - ACTIVE: 'active', - BUTTON: 'btn', - FOCUS: 'focus' - }; - var Selector$1 = { - DATA_TOGGLE_CARROT: '[data-toggle^="button"]', - DATA_TOGGLES: '[data-toggle="buttons"]', - DATA_TOGGLE: '[data-toggle="button"]', - DATA_TOGGLES_BUTTONS: '[data-toggle="buttons"] .btn', - INPUT: 'input:not([type="hidden"])', - ACTIVE: '.active', - BUTTON: '.btn' - }; - var Event$1 = { - CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1, - FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1), - LOAD_DATA_API: "load" + EVENT_KEY$1 + DATA_API_KEY$1 - }; - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - var Button = - /*#__PURE__*/ - function () { - function Button(element) { - this._element = element; - } // Getters - - - var _proto = Button.prototype; - - // Public - _proto.toggle = function toggle() { - var triggerChangeEvent = true; - var addAriaPressed = true; - var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLES)[0]; - - if (rootElement) { - var input = this._element.querySelector(Selector$1.INPUT); - - if (input) { - if (input.type === 'radio') { - if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) { - triggerChangeEvent = false; - } else { - var activeElement = rootElement.querySelector(Selector$1.ACTIVE); - - if (activeElement) { - $(activeElement).removeClass(ClassName$1.ACTIVE); - } - } - } else if (input.type === 'checkbox') { - if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) { - triggerChangeEvent = false; - } - } else { - // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input - triggerChangeEvent = false; - } - - if (triggerChangeEvent) { - input.checked = !this._element.classList.contains(ClassName$1.ACTIVE); - $(input).trigger('change'); - } - - input.focus(); - addAriaPressed = false; - } - } - - if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) { - if (addAriaPressed) { - this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE)); - } - - if (triggerChangeEvent) { - $(this._element).toggleClass(ClassName$1.ACTIVE); - } - } - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$1); - this._element = null; - } // Static - ; - - Button._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$1); - - if (!data) { - data = new Button(this); - $(this).data(DATA_KEY$1, data); - } - - if (config === 'toggle') { - data[config](); - } - }); - }; - - _createClass(Button, null, [{ - key: "VERSION", - get: function get() { - return VERSION$1; - } - }]); - - return Button; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { - var button = event.target; - - if (!$(button).hasClass(ClassName$1.BUTTON)) { - button = $(button).closest(Selector$1.BUTTON)[0]; - } - - if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) { - event.preventDefault(); // work around Firefox bug #1540995 - } else { - var inputBtn = button.querySelector(Selector$1.INPUT); - - if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) { - event.preventDefault(); // work around Firefox bug #1540995 - - return; - } - - Button._jQueryInterface.call($(button), 'toggle'); - } - }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { - var button = $(event.target).closest(Selector$1.BUTTON)[0]; - $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type)); - }); - $(window).on(Event$1.LOAD_DATA_API, function () { - // ensure correct active class is set to match the controls' actual values/states - // find all checkboxes/readio buttons inside data-toggle groups - var buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLES_BUTTONS)); - - for (var i = 0, len = buttons.length; i < len; i++) { - var button = buttons[i]; - var input = button.querySelector(Selector$1.INPUT); - - if (input.checked || input.hasAttribute('checked')) { - button.classList.add(ClassName$1.ACTIVE); - } else { - button.classList.remove(ClassName$1.ACTIVE); - } - } // find all button toggles - - - buttons = [].slice.call(document.querySelectorAll(Selector$1.DATA_TOGGLE)); - - for (var _i = 0, _len = buttons.length; _i < _len; _i++) { - var _button = buttons[_i]; - - if (_button.getAttribute('aria-pressed') === 'true') { - _button.classList.add(ClassName$1.ACTIVE); - } else { - _button.classList.remove(ClassName$1.ACTIVE); - } - } - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$1] = Button._jQueryInterface; - $.fn[NAME$1].Constructor = Button; - - $.fn[NAME$1].noConflict = function () { - $.fn[NAME$1] = JQUERY_NO_CONFLICT$1; - return Button._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$2 = 'carousel'; - var VERSION$2 = '4.4.1'; - var DATA_KEY$2 = 'bs.carousel'; - var EVENT_KEY$2 = "." + DATA_KEY$2; - var DATA_API_KEY$2 = '.data-api'; - var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2]; - var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key - - var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key - - var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch - - var SWIPE_THRESHOLD = 40; - var Default = { - interval: 5000, - keyboard: true, - slide: false, - pause: 'hover', - wrap: true, - touch: true - }; - var DefaultType = { - interval: '(number|boolean)', - keyboard: 'boolean', - slide: '(boolean|string)', - pause: '(string|boolean)', - wrap: 'boolean', - touch: 'boolean' - }; - var Direction = { - NEXT: 'next', - PREV: 'prev', - LEFT: 'left', - RIGHT: 'right' - }; - var Event$2 = { - SLIDE: "slide" + EVENT_KEY$2, - SLID: "slid" + EVENT_KEY$2, - KEYDOWN: "keydown" + EVENT_KEY$2, - MOUSEENTER: "mouseenter" + EVENT_KEY$2, - MOUSELEAVE: "mouseleave" + EVENT_KEY$2, - TOUCHSTART: "touchstart" + EVENT_KEY$2, - TOUCHMOVE: "touchmove" + EVENT_KEY$2, - TOUCHEND: "touchend" + EVENT_KEY$2, - POINTERDOWN: "pointerdown" + EVENT_KEY$2, - POINTERUP: "pointerup" + EVENT_KEY$2, - DRAG_START: "dragstart" + EVENT_KEY$2, - LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2, - CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2 - }; - var ClassName$2 = { - CAROUSEL: 'carousel', - ACTIVE: 'active', - SLIDE: 'slide', - RIGHT: 'carousel-item-right', - LEFT: 'carousel-item-left', - NEXT: 'carousel-item-next', - PREV: 'carousel-item-prev', - ITEM: 'carousel-item', - POINTER_EVENT: 'pointer-event' - }; - var Selector$2 = { - ACTIVE: '.active', - ACTIVE_ITEM: '.active.carousel-item', - ITEM: '.carousel-item', - ITEM_IMG: '.carousel-item img', - NEXT_PREV: '.carousel-item-next, .carousel-item-prev', - INDICATORS: '.carousel-indicators', - DATA_SLIDE: '[data-slide], [data-slide-to]', - DATA_RIDE: '[data-ride="carousel"]' - }; - var PointerType = { - TOUCH: 'touch', - PEN: 'pen' - }; - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - var Carousel = - /*#__PURE__*/ - function () { - function Carousel(element, config) { - this._items = null; - this._interval = null; - this._activeElement = null; - this._isPaused = false; - this._isSliding = false; - this.touchTimeout = null; - this.touchStartX = 0; - this.touchDeltaX = 0; - this._config = this._getConfig(config); - this._element = element; - this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS); - this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; - this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); - - this._addEventListeners(); - } // Getters - - - var _proto = Carousel.prototype; - - // Public - _proto.next = function next() { - if (!this._isSliding) { - this._slide(Direction.NEXT); - } - }; - - _proto.nextWhenVisible = function nextWhenVisible() { - // Don't call next when the page isn't visible - // or the carousel or its parent isn't visible - if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { - this.next(); - } - }; - - _proto.prev = function prev() { - if (!this._isSliding) { - this._slide(Direction.PREV); - } - }; - - _proto.pause = function pause(event) { - if (!event) { - this._isPaused = true; - } - - if (this._element.querySelector(Selector$2.NEXT_PREV)) { - Util.triggerTransitionEnd(this._element); - this.cycle(true); - } - - clearInterval(this._interval); - this._interval = null; - }; - - _proto.cycle = function cycle(event) { - if (!event) { - this._isPaused = false; - } - - if (this._interval) { - clearInterval(this._interval); - this._interval = null; - } - - if (this._config.interval && !this._isPaused) { - this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); - } - }; - - _proto.to = function to(index) { - var _this = this; - - this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeIndex = this._getItemIndex(this._activeElement); - - if (index > this._items.length - 1 || index < 0) { - return; - } - - if (this._isSliding) { - $(this._element).one(Event$2.SLID, function () { - return _this.to(index); - }); - return; - } - - if (activeIndex === index) { - this.pause(); - this.cycle(); - return; - } - - var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; - - this._slide(direction, this._items[index]); - }; - - _proto.dispose = function dispose() { - $(this._element).off(EVENT_KEY$2); - $.removeData(this._element, DATA_KEY$2); - this._items = null; - this._config = null; - this._element = null; - this._interval = null; - this._isPaused = null; - this._isSliding = null; - this._activeElement = null; - this._indicatorsElement = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread2({}, Default, {}, config); - Util.typeCheckConfig(NAME$2, config, DefaultType); - return config; - }; - - _proto._handleSwipe = function _handleSwipe() { - var absDeltax = Math.abs(this.touchDeltaX); - - if (absDeltax <= SWIPE_THRESHOLD) { - return; - } - - var direction = absDeltax / this.touchDeltaX; - this.touchDeltaX = 0; // swipe left - - if (direction > 0) { - this.prev(); - } // swipe right - - - if (direction < 0) { - this.next(); - } - }; - - _proto._addEventListeners = function _addEventListeners() { - var _this2 = this; - - if (this._config.keyboard) { - $(this._element).on(Event$2.KEYDOWN, function (event) { - return _this2._keydown(event); - }); - } - - if (this._config.pause === 'hover') { - $(this._element).on(Event$2.MOUSEENTER, function (event) { - return _this2.pause(event); - }).on(Event$2.MOUSELEAVE, function (event) { - return _this2.cycle(event); - }); - } - - if (this._config.touch) { - this._addTouchEventListeners(); - } - }; - - _proto._addTouchEventListeners = function _addTouchEventListeners() { - var _this3 = this; - - if (!this._touchSupported) { - return; - } - - var start = function start(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchStartX = event.originalEvent.clientX; - } else if (!_this3._pointerEvent) { - _this3.touchStartX = event.originalEvent.touches[0].clientX; - } - }; - - var move = function move(event) { - // ensure swiping with one touch and not pinching - if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { - _this3.touchDeltaX = 0; - } else { - _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; - } - }; - - var end = function end(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; - } - - _this3._handleSwipe(); - - if (_this3._config.pause === 'hover') { - // If it's a touch-enabled device, mouseenter/leave are fired as - // part of the mouse compatibility events on first tap - the carousel - // would stop cycling until user tapped out of it; - // here, we listen for touchend, explicitly pause the carousel - // (as if it's the second time we tap on it, mouseenter compat event - // is NOT fired) and after a timeout (to allow for mouse compatibility - // events to fire) we explicitly restart cycling - _this3.pause(); - - if (_this3.touchTimeout) { - clearTimeout(_this3.touchTimeout); - } - - _this3.touchTimeout = setTimeout(function (event) { - return _this3.cycle(event); - }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); - } - }; - - $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) { - return e.preventDefault(); - }); - - if (this._pointerEvent) { - $(this._element).on(Event$2.POINTERDOWN, function (event) { - return start(event); - }); - $(this._element).on(Event$2.POINTERUP, function (event) { - return end(event); - }); - - this._element.classList.add(ClassName$2.POINTER_EVENT); - } else { - $(this._element).on(Event$2.TOUCHSTART, function (event) { - return start(event); - }); - $(this._element).on(Event$2.TOUCHMOVE, function (event) { - return move(event); - }); - $(this._element).on(Event$2.TOUCHEND, function (event) { - return end(event); - }); - } - }; - - _proto._keydown = function _keydown(event) { - if (/input|textarea/i.test(event.target.tagName)) { - return; - } - - switch (event.which) { - case ARROW_LEFT_KEYCODE: - event.preventDefault(); - this.prev(); - break; - - case ARROW_RIGHT_KEYCODE: - event.preventDefault(); - this.next(); - break; - } - }; - - _proto._getItemIndex = function _getItemIndex(element) { - this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : []; - return this._items.indexOf(element); - }; - - _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { - var isNextDirection = direction === Direction.NEXT; - var isPrevDirection = direction === Direction.PREV; - - var activeIndex = this._getItemIndex(activeElement); - - var lastItemIndex = this._items.length - 1; - var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; - - if (isGoingToWrap && !this._config.wrap) { - return activeElement; - } - - var delta = direction === Direction.PREV ? -1 : 1; - var itemIndex = (activeIndex + delta) % this._items.length; - return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; - }; - - _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { - var targetIndex = this._getItemIndex(relatedTarget); - - var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM)); - - var slideEvent = $.Event(Event$2.SLIDE, { - relatedTarget: relatedTarget, - direction: eventDirectionName, - from: fromIndex, - to: targetIndex - }); - $(this._element).trigger(slideEvent); - return slideEvent; - }; - - _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { - if (this._indicatorsElement) { - var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE)); - $(indicators).removeClass(ClassName$2.ACTIVE); - - var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; - - if (nextIndicator) { - $(nextIndicator).addClass(ClassName$2.ACTIVE); - } - } - }; - - _proto._slide = function _slide(direction, element) { - var _this4 = this; - - var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeElementIndex = this._getItemIndex(activeElement); - - var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); - - var nextElementIndex = this._getItemIndex(nextElement); - - var isCycling = Boolean(this._interval); - var directionalClassName; - var orderClassName; - var eventDirectionName; - - if (direction === Direction.NEXT) { - directionalClassName = ClassName$2.LEFT; - orderClassName = ClassName$2.NEXT; - eventDirectionName = Direction.LEFT; - } else { - directionalClassName = ClassName$2.RIGHT; - orderClassName = ClassName$2.PREV; - eventDirectionName = Direction.RIGHT; - } - - if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) { - this._isSliding = false; - return; - } - - var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); - - if (slideEvent.isDefaultPrevented()) { - return; - } - - if (!activeElement || !nextElement) { - // Some weirdness is happening, so we bail - return; - } - - this._isSliding = true; - - if (isCycling) { - this.pause(); - } - - this._setActiveIndicatorElement(nextElement); - - var slidEvent = $.Event(Event$2.SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }); - - if ($(this._element).hasClass(ClassName$2.SLIDE)) { - $(nextElement).addClass(orderClassName); - Util.reflow(nextElement); - $(activeElement).addClass(directionalClassName); - $(nextElement).addClass(directionalClassName); - var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); - - if (nextElementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval; - this._config.interval = nextElementInterval; - } else { - this._config.interval = this._config.defaultInterval || this._config.interval; - } - - var transitionDuration = Util.getTransitionDurationFromElement(activeElement); - $(activeElement).one(Util.TRANSITION_END, function () { - $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE); - $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName); - _this4._isSliding = false; - setTimeout(function () { - return $(_this4._element).trigger(slidEvent); - }, 0); - }).emulateTransitionEnd(transitionDuration); - } else { - $(activeElement).removeClass(ClassName$2.ACTIVE); - $(nextElement).addClass(ClassName$2.ACTIVE); - this._isSliding = false; - $(this._element).trigger(slidEvent); - } - - if (isCycling) { - this.cycle(); - } - } // Static - ; - - Carousel._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$2); - - var _config = _objectSpread2({}, Default, {}, $(this).data()); - - if (typeof config === 'object') { - _config = _objectSpread2({}, _config, {}, config); - } - - var action = typeof config === 'string' ? config : _config.slide; - - if (!data) { - data = new Carousel(this, _config); - $(this).data(DATA_KEY$2, data); - } - - if (typeof config === 'number') { - data.to(config); - } else if (typeof action === 'string') { - if (typeof data[action] === 'undefined') { - throw new TypeError("No method named \"" + action + "\""); - } - - data[action](); - } else if (_config.interval && _config.ride) { - data.pause(); - data.cycle(); - } - }); - }; - - Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { - var selector = Util.getSelectorFromElement(this); - - if (!selector) { - return; - } - - var target = $(selector)[0]; - - if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) { - return; - } - - var config = _objectSpread2({}, $(target).data(), {}, $(this).data()); - - var slideIndex = this.getAttribute('data-slide-to'); - - if (slideIndex) { - config.interval = false; - } - - Carousel._jQueryInterface.call($(target), config); - - if (slideIndex) { - $(target).data(DATA_KEY$2).to(slideIndex); - } - - event.preventDefault(); - }; - - _createClass(Carousel, null, [{ - key: "VERSION", - get: function get() { - return VERSION$2; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }]); - - return Carousel; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler); - $(window).on(Event$2.LOAD_DATA_API, function () { - var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE)); - - for (var i = 0, len = carousels.length; i < len; i++) { - var $carousel = $(carousels[i]); - - Carousel._jQueryInterface.call($carousel, $carousel.data()); - } - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$2] = Carousel._jQueryInterface; - $.fn[NAME$2].Constructor = Carousel; - - $.fn[NAME$2].noConflict = function () { - $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; - return Carousel._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$3 = 'collapse'; - var VERSION$3 = '4.4.1'; - var DATA_KEY$3 = 'bs.collapse'; - var EVENT_KEY$3 = "." + DATA_KEY$3; - var DATA_API_KEY$3 = '.data-api'; - var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; - var Default$1 = { - toggle: true, - parent: '' - }; - var DefaultType$1 = { - toggle: 'boolean', - parent: '(string|element)' - }; - var Event$3 = { - SHOW: "show" + EVENT_KEY$3, - SHOWN: "shown" + EVENT_KEY$3, - HIDE: "hide" + EVENT_KEY$3, - HIDDEN: "hidden" + EVENT_KEY$3, - CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3 - }; - var ClassName$3 = { - SHOW: 'show', - COLLAPSE: 'collapse', - COLLAPSING: 'collapsing', - COLLAPSED: 'collapsed' - }; - var Dimension = { - WIDTH: 'width', - HEIGHT: 'height' - }; - var Selector$3 = { - ACTIVES: '.show, .collapsing', - DATA_TOGGLE: '[data-toggle="collapse"]' - }; - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - var Collapse = - /*#__PURE__*/ - function () { - function Collapse(element, config) { - this._isTransitioning = false; - this._element = element; - this._config = this._getConfig(config); - this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); - var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE)); - - for (var i = 0, len = toggleList.length; i < len; i++) { - var elem = toggleList[i]; - var selector = Util.getSelectorFromElement(elem); - var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { - return foundElem === element; - }); - - if (selector !== null && filterElement.length > 0) { - this._selector = selector; - - this._triggerArray.push(elem); - } - } - - this._parent = this._config.parent ? this._getParent() : null; - - if (!this._config.parent) { - this._addAriaAndCollapsedClass(this._element, this._triggerArray); - } - - if (this._config.toggle) { - this.toggle(); - } - } // Getters - - - var _proto = Collapse.prototype; - - // Public - _proto.toggle = function toggle() { - if ($(this._element).hasClass(ClassName$3.SHOW)) { - this.hide(); - } else { - this.show(); - } - }; - - _proto.show = function show() { - var _this = this; - - if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var actives; - var activesData; - - if (this._parent) { - actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) { - if (typeof _this._config.parent === 'string') { - return elem.getAttribute('data-parent') === _this._config.parent; - } - - return elem.classList.contains(ClassName$3.COLLAPSE); - }); - - if (actives.length === 0) { - actives = null; - } - } - - if (actives) { - activesData = $(actives).not(this._selector).data(DATA_KEY$3); - - if (activesData && activesData._isTransitioning) { - return; - } - } - - var startEvent = $.Event(Event$3.SHOW); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - if (actives) { - Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); - - if (!activesData) { - $(actives).data(DATA_KEY$3, null); - } - } - - var dimension = this._getDimension(); - - $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING); - this._element.style[dimension] = 0; - - if (this._triggerArray.length) { - $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true); - } - - this.setTransitioning(true); - - var complete = function complete() { - $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW); - _this._element.style[dimension] = ''; - - _this.setTransitioning(false); - - $(_this._element).trigger(Event$3.SHOWN); - }; - - var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); - var scrollSize = "scroll" + capitalizedDimension; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - this._element.style[dimension] = this._element[scrollSize] + "px"; - }; - - _proto.hide = function hide() { - var _this2 = this; - - if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var startEvent = $.Event(Event$3.HIDE); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - var dimension = this._getDimension(); - - this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; - Util.reflow(this._element); - $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW); - var triggerArrayLength = this._triggerArray.length; - - if (triggerArrayLength > 0) { - for (var i = 0; i < triggerArrayLength; i++) { - var trigger = this._triggerArray[i]; - var selector = Util.getSelectorFromElement(trigger); - - if (selector !== null) { - var $elem = $([].slice.call(document.querySelectorAll(selector))); - - if (!$elem.hasClass(ClassName$3.SHOW)) { - $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false); - } - } - } - } - - this.setTransitioning(true); - - var complete = function complete() { - _this2.setTransitioning(false); - - $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN); - }; - - this._element.style[dimension] = ''; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - }; - - _proto.setTransitioning = function setTransitioning(isTransitioning) { - this._isTransitioning = isTransitioning; - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$3); - this._config = null; - this._parent = null; - this._element = null; - this._triggerArray = null; - this._isTransitioning = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread2({}, Default$1, {}, config); - config.toggle = Boolean(config.toggle); // Coerce string values - - Util.typeCheckConfig(NAME$3, config, DefaultType$1); - return config; - }; - - _proto._getDimension = function _getDimension() { - var hasWidth = $(this._element).hasClass(Dimension.WIDTH); - return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; - }; - - _proto._getParent = function _getParent() { - var _this3 = this; - - var parent; - - if (Util.isElement(this._config.parent)) { - parent = this._config.parent; // It's a jQuery object - - if (typeof this._config.parent.jquery !== 'undefined') { - parent = this._config.parent[0]; - } - } else { - parent = document.querySelector(this._config.parent); - } - - var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; - var children = [].slice.call(parent.querySelectorAll(selector)); - $(children).each(function (i, element) { - _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); - }); - return parent; - }; - - _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { - var isOpen = $(element).hasClass(ClassName$3.SHOW); - - if (triggerArray.length) { - $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); - } - } // Static - ; - - Collapse._getTargetFromElement = function _getTargetFromElement(element) { - var selector = Util.getSelectorFromElement(element); - return selector ? document.querySelector(selector) : null; - }; - - Collapse._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $this = $(this); - var data = $this.data(DATA_KEY$3); - - var _config = _objectSpread2({}, Default$1, {}, $this.data(), {}, typeof config === 'object' && config ? config : {}); - - if (!data && _config.toggle && /show|hide/.test(config)) { - _config.toggle = false; - } - - if (!data) { - data = new Collapse(this, _config); - $this.data(DATA_KEY$3, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Collapse, null, [{ - key: "VERSION", - get: function get() { - return VERSION$3; - } - }, { - key: "Default", - get: function get() { - return Default$1; - } - }]); - - return Collapse; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) { - // preventDefault only for elements (which change the URL) not inside the collapsible element - if (event.currentTarget.tagName === 'A') { - event.preventDefault(); - } - - var $trigger = $(this); - var selector = Util.getSelectorFromElement(this); - var selectors = [].slice.call(document.querySelectorAll(selector)); - $(selectors).each(function () { - var $target = $(this); - var data = $target.data(DATA_KEY$3); - var config = data ? 'toggle' : $trigger.data(); - - Collapse._jQueryInterface.call($target, config); - }); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$3] = Collapse._jQueryInterface; - $.fn[NAME$3].Constructor = Collapse; - - $.fn[NAME$3].noConflict = function () { - $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; - return Collapse._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$4 = 'dropdown'; - var VERSION$4 = '4.4.1'; - var DATA_KEY$4 = 'bs.dropdown'; - var EVENT_KEY$4 = "." + DATA_KEY$4; - var DATA_API_KEY$4 = '.data-api'; - var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - - var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key - - var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key - - var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key - - var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key - - var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) - - var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); - var Event$4 = { - HIDE: "hide" + EVENT_KEY$4, - HIDDEN: "hidden" + EVENT_KEY$4, - SHOW: "show" + EVENT_KEY$4, - SHOWN: "shown" + EVENT_KEY$4, - CLICK: "click" + EVENT_KEY$4, - CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4 - }; - var ClassName$4 = { - DISABLED: 'disabled', - SHOW: 'show', - DROPUP: 'dropup', - DROPRIGHT: 'dropright', - DROPLEFT: 'dropleft', - MENURIGHT: 'dropdown-menu-right', - MENULEFT: 'dropdown-menu-left', - POSITION_STATIC: 'position-static' - }; - var Selector$4 = { - DATA_TOGGLE: '[data-toggle="dropdown"]', - FORM_CHILD: '.dropdown form', - MENU: '.dropdown-menu', - NAVBAR_NAV: '.navbar-nav', - VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' - }; - var AttachmentMap = { - TOP: 'top-start', - TOPEND: 'top-end', - BOTTOM: 'bottom-start', - BOTTOMEND: 'bottom-end', - RIGHT: 'right-start', - RIGHTEND: 'right-end', - LEFT: 'left-start', - LEFTEND: 'left-end' - }; - var Default$2 = { - offset: 0, - flip: true, - boundary: 'scrollParent', - reference: 'toggle', - display: 'dynamic', - popperConfig: null - }; - var DefaultType$2 = { - offset: '(number|string|function)', - flip: 'boolean', - boundary: '(string|element)', - reference: '(string|element)', - display: 'string', - popperConfig: '(null|object)' - }; - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - var Dropdown = - /*#__PURE__*/ - function () { - function Dropdown(element, config) { - this._element = element; - this._popper = null; - this._config = this._getConfig(config); - this._menu = this._getMenuElement(); - this._inNavbar = this._detectNavbar(); - - this._addEventListeners(); - } // Getters - - - var _proto = Dropdown.prototype; - - // Public - _proto.toggle = function toggle() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) { - return; - } - - var isActive = $(this._menu).hasClass(ClassName$4.SHOW); - - Dropdown._clearMenus(); - - if (isActive) { - return; - } - - this.show(true); - }; - - _proto.show = function show(usePopper) { - if (usePopper === void 0) { - usePopper = false; - } - - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event$4.SHOW, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } // Disable totally Popper.js for Dropdown in Navbar - - - if (!this._inNavbar && usePopper) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); - } - - var referenceElement = this._element; - - if (this._config.reference === 'parent') { - referenceElement = parent; - } else if (Util.isElement(this._config.reference)) { - referenceElement = this._config.reference; // Check if it's jQuery element - - if (typeof this._config.reference.jquery !== 'undefined') { - referenceElement = this._config.reference[0]; - } - } // If boundary is not `scrollParent`, then set position to `static` - // to allow the menu to "escape" the scroll parent's boundaries - // https://github.com/twbs/bootstrap/issues/24251 - - - if (this._config.boundary !== 'scrollParent') { - $(parent).addClass(ClassName$4.POSITION_STATIC); - } - - this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); - } // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - - if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) { - $(document.body).children().on('mouseover', null, $.noop); - } - - this._element.focus(); - - this._element.setAttribute('aria-expanded', true); - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); - }; - - _proto.hide = function hide() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - if (this._popper) { - this._popper.destroy(); - } - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$4); - $(this._element).off(EVENT_KEY$4); - this._element = null; - this._menu = null; - - if (this._popper !== null) { - this._popper.destroy(); - - this._popper = null; - } - }; - - _proto.update = function update() { - this._inNavbar = this._detectNavbar(); - - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Private - ; - - _proto._addEventListeners = function _addEventListeners() { - var _this = this; - - $(this._element).on(Event$4.CLICK, function (event) { - event.preventDefault(); - event.stopPropagation(); - - _this.toggle(); - }); - }; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread2({}, this.constructor.Default, {}, $(this._element).data(), {}, config); - Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); - return config; - }; - - _proto._getMenuElement = function _getMenuElement() { - if (!this._menu) { - var parent = Dropdown._getParentFromElement(this._element); - - if (parent) { - this._menu = parent.querySelector(Selector$4.MENU); - } - } - - return this._menu; - }; - - _proto._getPlacement = function _getPlacement() { - var $parentDropdown = $(this._element.parentNode); - var placement = AttachmentMap.BOTTOM; // Handle dropup - - if ($parentDropdown.hasClass(ClassName$4.DROPUP)) { - placement = AttachmentMap.TOP; - - if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.TOPEND; - } - } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) { - placement = AttachmentMap.RIGHT; - } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) { - placement = AttachmentMap.LEFT; - } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.BOTTOMEND; - } - - return placement; - }; - - _proto._detectNavbar = function _detectNavbar() { - return $(this._element).closest('.navbar').length > 0; - }; - - _proto._getOffset = function _getOffset() { - var _this2 = this; - - var offset = {}; - - if (typeof this._config.offset === 'function') { - offset.fn = function (data) { - data.offsets = _objectSpread2({}, data.offsets, {}, _this2._config.offset(data.offsets, _this2._element) || {}); - return data; - }; - } else { - offset.offset = this._config.offset; - } - - return offset; - }; - - _proto._getPopperConfig = function _getPopperConfig() { - var popperConfig = { - placement: this._getPlacement(), - modifiers: { - offset: this._getOffset(), - flip: { - enabled: this._config.flip - }, - preventOverflow: { - boundariesElement: this._config.boundary - } - } - }; // Disable Popper.js if we have a static display - - if (this._config.display === 'static') { - popperConfig.modifiers.applyStyle = { - enabled: false - }; - } - - return _objectSpread2({}, popperConfig, {}, this._config.popperConfig); - } // Static - ; - - Dropdown._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$4); - - var _config = typeof config === 'object' ? config : null; - - if (!data) { - data = new Dropdown(this, _config); - $(this).data(DATA_KEY$4, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - Dropdown._clearMenus = function _clearMenus(event) { - if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { - return; - } - - var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE)); - - for (var i = 0, len = toggles.length; i < len; i++) { - var parent = Dropdown._getParentFromElement(toggles[i]); - - var context = $(toggles[i]).data(DATA_KEY$4); - var relatedTarget = { - relatedTarget: toggles[i] - }; - - if (event && event.type === 'click') { - relatedTarget.clickEvent = event; - } - - if (!context) { - continue; - } - - var dropdownMenu = context._menu; - - if (!$(parent).hasClass(ClassName$4.SHOW)) { - continue; - } - - if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { - continue; - } - - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - continue; - } // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - toggles[i].setAttribute('aria-expanded', 'false'); - - if (context._popper) { - context._popper.destroy(); - } - - $(dropdownMenu).removeClass(ClassName$4.SHOW); - $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - } - }; - - Dropdown._getParentFromElement = function _getParentFromElement(element) { - var parent; - var selector = Util.getSelectorFromElement(element); - - if (selector) { - parent = document.querySelector(selector); - } - - return parent || element.parentNode; - } // eslint-disable-next-line complexity - ; - - Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { - // If not input/textarea: - // - And not a key in REGEXP_KEYDOWN => not a dropdown command - // If input/textarea: - // - If space key => not a dropdown command - // - If key is other than escape - // - If key is not up or down => not a dropdown command - // - If trigger inside the menu => not a dropdown command - if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { - return; - } - - event.preventDefault(); - event.stopPropagation(); - - if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this); - - var isActive = $(parent).hasClass(ClassName$4.SHOW); - - if (!isActive && event.which === ESCAPE_KEYCODE) { - return; - } - - if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { - if (event.which === ESCAPE_KEYCODE) { - var toggle = parent.querySelector(Selector$4.DATA_TOGGLE); - $(toggle).trigger('focus'); - } - - $(this).trigger('click'); - return; - } - - var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)).filter(function (item) { - return $(item).is(':visible'); - }); - - if (items.length === 0) { - return; - } - - var index = items.indexOf(event.target); - - if (event.which === ARROW_UP_KEYCODE && index > 0) { - // Up - index--; - } - - if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { - // Down - index++; - } - - if (index < 0) { - index = 0; - } - - items[index].focus(); - }; - - _createClass(Dropdown, null, [{ - key: "VERSION", - get: function get() { - return VERSION$4; - } - }, { - key: "Default", - get: function get() { - return Default$2; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$2; - } - }]); - - return Dropdown; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) { - event.preventDefault(); - event.stopPropagation(); - - Dropdown._jQueryInterface.call($(this), 'toggle'); - }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) { - e.stopPropagation(); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$4] = Dropdown._jQueryInterface; - $.fn[NAME$4].Constructor = Dropdown; - - $.fn[NAME$4].noConflict = function () { - $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; - return Dropdown._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$5 = 'modal'; - var VERSION$5 = '4.4.1'; - var DATA_KEY$5 = 'bs.modal'; - var EVENT_KEY$5 = "." + DATA_KEY$5; - var DATA_API_KEY$5 = '.data-api'; - var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; - var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key - - var Default$3 = { - backdrop: true, - keyboard: true, - focus: true, - show: true - }; - var DefaultType$3 = { - backdrop: '(boolean|string)', - keyboard: 'boolean', - focus: 'boolean', - show: 'boolean' - }; - var Event$5 = { - HIDE: "hide" + EVENT_KEY$5, - HIDE_PREVENTED: "hidePrevented" + EVENT_KEY$5, - HIDDEN: "hidden" + EVENT_KEY$5, - SHOW: "show" + EVENT_KEY$5, - SHOWN: "shown" + EVENT_KEY$5, - FOCUSIN: "focusin" + EVENT_KEY$5, - RESIZE: "resize" + EVENT_KEY$5, - CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5, - KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5, - MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5, - MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5, - CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 - }; - var ClassName$5 = { - SCROLLABLE: 'modal-dialog-scrollable', - SCROLLBAR_MEASURER: 'modal-scrollbar-measure', - BACKDROP: 'modal-backdrop', - OPEN: 'modal-open', - FADE: 'fade', - SHOW: 'show', - STATIC: 'modal-static' - }; - var Selector$5 = { - DIALOG: '.modal-dialog', - MODAL_BODY: '.modal-body', - DATA_TOGGLE: '[data-toggle="modal"]', - DATA_DISMISS: '[data-dismiss="modal"]', - FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', - STICKY_CONTENT: '.sticky-top' - }; - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - var Modal = - /*#__PURE__*/ - function () { - function Modal(element, config) { - this._config = this._getConfig(config); - this._element = element; - this._dialog = element.querySelector(Selector$5.DIALOG); - this._backdrop = null; - this._isShown = false; - this._isBodyOverflowing = false; - this._ignoreBackdropClick = false; - this._isTransitioning = false; - this._scrollbarWidth = 0; - } // Getters - - - var _proto = Modal.prototype; - - // Public - _proto.toggle = function toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget); - }; - - _proto.show = function show(relatedTarget) { - var _this = this; - - if (this._isShown || this._isTransitioning) { - return; - } - - if ($(this._element).hasClass(ClassName$5.FADE)) { - this._isTransitioning = true; - } - - var showEvent = $.Event(Event$5.SHOW, { - relatedTarget: relatedTarget - }); - $(this._element).trigger(showEvent); - - if (this._isShown || showEvent.isDefaultPrevented()) { - return; - } - - this._isShown = true; - - this._checkScrollbar(); - - this._setScrollbar(); - - this._adjustDialog(); - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) { - return _this.hide(event); - }); - $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () { - $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) { - if ($(event.target).is(_this._element)) { - _this._ignoreBackdropClick = true; - } - }); - }); - - this._showBackdrop(function () { - return _this._showElement(relatedTarget); - }); - }; - - _proto.hide = function hide(event) { - var _this2 = this; - - if (event) { - event.preventDefault(); - } - - if (!this._isShown || this._isTransitioning) { - return; - } - - var hideEvent = $.Event(Event$5.HIDE); - $(this._element).trigger(hideEvent); - - if (!this._isShown || hideEvent.isDefaultPrevented()) { - return; - } - - this._isShown = false; - var transition = $(this._element).hasClass(ClassName$5.FADE); - - if (transition) { - this._isTransitioning = true; - } - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(document).off(Event$5.FOCUSIN); - $(this._element).removeClass(ClassName$5.SHOW); - $(this._element).off(Event$5.CLICK_DISMISS); - $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS); - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, function (event) { - return _this2._hideModal(event); - }).emulateTransitionEnd(transitionDuration); - } else { - this._hideModal(); - } - }; - - _proto.dispose = function dispose() { - [window, this._element, this._dialog].forEach(function (htmlElement) { - return $(htmlElement).off(EVENT_KEY$5); - }); - /** - * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` - * Do not move `document` in `htmlElements` array - * It will remove `Event.CLICK_DATA_API` event that should remain - */ - - $(document).off(Event$5.FOCUSIN); - $.removeData(this._element, DATA_KEY$5); - this._config = null; - this._element = null; - this._dialog = null; - this._backdrop = null; - this._isShown = null; - this._isBodyOverflowing = null; - this._ignoreBackdropClick = null; - this._isTransitioning = null; - this._scrollbarWidth = null; - }; - - _proto.handleUpdate = function handleUpdate() { - this._adjustDialog(); - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread2({}, Default$3, {}, config); - Util.typeCheckConfig(NAME$5, config, DefaultType$3); - return config; - }; - - _proto._triggerBackdropTransition = function _triggerBackdropTransition() { - var _this3 = this; - - if (this._config.backdrop === 'static') { - var hideEventPrevented = $.Event(Event$5.HIDE_PREVENTED); - $(this._element).trigger(hideEventPrevented); - - if (hideEventPrevented.defaultPrevented) { - return; - } - - this._element.classList.add(ClassName$5.STATIC); - - var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, function () { - _this3._element.classList.remove(ClassName$5.STATIC); - }).emulateTransitionEnd(modalTransitionDuration); - - this._element.focus(); - } else { - this.hide(); - } - }; - - _proto._showElement = function _showElement(relatedTarget) { - var _this4 = this; - - var transition = $(this._element).hasClass(ClassName$5.FADE); - var modalBody = this._dialog ? this._dialog.querySelector(Selector$5.MODAL_BODY) : null; - - if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { - // Don't move modal's DOM position - document.body.appendChild(this._element); - } - - this._element.style.display = 'block'; - - this._element.removeAttribute('aria-hidden'); - - this._element.setAttribute('aria-modal', true); - - if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE) && modalBody) { - modalBody.scrollTop = 0; - } else { - this._element.scrollTop = 0; - } - - if (transition) { - Util.reflow(this._element); - } - - $(this._element).addClass(ClassName$5.SHOW); - - if (this._config.focus) { - this._enforceFocus(); - } - - var shownEvent = $.Event(Event$5.SHOWN, { - relatedTarget: relatedTarget - }); - - var transitionComplete = function transitionComplete() { - if (_this4._config.focus) { - _this4._element.focus(); - } - - _this4._isTransitioning = false; - $(_this4._element).trigger(shownEvent); - }; - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); - $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); - } else { - transitionComplete(); - } - }; - - _proto._enforceFocus = function _enforceFocus() { - var _this5 = this; - - $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop - .on(Event$5.FOCUSIN, function (event) { - if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) { - _this5._element.focus(); - } - }); - }; - - _proto._setEscapeEvent = function _setEscapeEvent() { - var _this6 = this; - - if (this._isShown && this._config.keyboard) { - $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) { - if (event.which === ESCAPE_KEYCODE$1) { - _this6._triggerBackdropTransition(); - } - }); - } else if (!this._isShown) { - $(this._element).off(Event$5.KEYDOWN_DISMISS); - } - }; - - _proto._setResizeEvent = function _setResizeEvent() { - var _this7 = this; - - if (this._isShown) { - $(window).on(Event$5.RESIZE, function (event) { - return _this7.handleUpdate(event); - }); - } else { - $(window).off(Event$5.RESIZE); - } - }; - - _proto._hideModal = function _hideModal() { - var _this8 = this; - - this._element.style.display = 'none'; - - this._element.setAttribute('aria-hidden', true); - - this._element.removeAttribute('aria-modal'); - - this._isTransitioning = false; - - this._showBackdrop(function () { - $(document.body).removeClass(ClassName$5.OPEN); - - _this8._resetAdjustments(); - - _this8._resetScrollbar(); - - $(_this8._element).trigger(Event$5.HIDDEN); - }); - }; - - _proto._removeBackdrop = function _removeBackdrop() { - if (this._backdrop) { - $(this._backdrop).remove(); - this._backdrop = null; - } - }; - - _proto._showBackdrop = function _showBackdrop(callback) { - var _this9 = this; - - var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : ''; - - if (this._isShown && this._config.backdrop) { - this._backdrop = document.createElement('div'); - this._backdrop.className = ClassName$5.BACKDROP; - - if (animate) { - this._backdrop.classList.add(animate); - } - - $(this._backdrop).appendTo(document.body); - $(this._element).on(Event$5.CLICK_DISMISS, function (event) { - if (_this9._ignoreBackdropClick) { - _this9._ignoreBackdropClick = false; - return; - } - - if (event.target !== event.currentTarget) { - return; - } - - _this9._triggerBackdropTransition(); - }); - - if (animate) { - Util.reflow(this._backdrop); - } - - $(this._backdrop).addClass(ClassName$5.SHOW); - - if (!callback) { - return; - } - - if (!animate) { - callback(); - return; - } - - var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); - } else if (!this._isShown && this._backdrop) { - $(this._backdrop).removeClass(ClassName$5.SHOW); - - var callbackRemove = function callbackRemove() { - _this9._removeBackdrop(); - - if (callback) { - callback(); - } - }; - - if ($(this._element).hasClass(ClassName$5.FADE)) { - var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - - $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); - } else { - callbackRemove(); - } - } else if (callback) { - callback(); - } - } // ---------------------------------------------------------------------- - // the following methods are used to handle overflowing modals - // todo (fat): these should probably be refactored out of modal.js - // ---------------------------------------------------------------------- - ; - - _proto._adjustDialog = function _adjustDialog() { - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - - if (!this._isBodyOverflowing && isModalOverflowing) { - this._element.style.paddingLeft = this._scrollbarWidth + "px"; - } - - if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + "px"; - } - }; - - _proto._resetAdjustments = function _resetAdjustments() { - this._element.style.paddingLeft = ''; - this._element.style.paddingRight = ''; - }; - - _proto._checkScrollbar = function _checkScrollbar() { - var rect = document.body.getBoundingClientRect(); - this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; - this._scrollbarWidth = this._getScrollbarWidth(); - }; - - _proto._setScrollbar = function _setScrollbar() { - var _this10 = this; - - if (this._isBodyOverflowing) { - // Note: DOMNode.style.paddingRight returns the actual value or '' if not set - // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding - - $(fixedContent).each(function (index, element) { - var actualPadding = element.style.paddingRight; - var calculatedPadding = $(element).css('padding-right'); - $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"); - }); // Adjust sticky content margin - - $(stickyContent).each(function (index, element) { - var actualMargin = element.style.marginRight; - var calculatedMargin = $(element).css('margin-right'); - $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"); - }); // Adjust body padding - - var actualPadding = document.body.style.paddingRight; - var calculatedPadding = $(document.body).css('padding-right'); - $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); - } - - $(document.body).addClass(ClassName$5.OPEN); - }; - - _proto._resetScrollbar = function _resetScrollbar() { - // Restore fixed content padding - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - $(fixedContent).each(function (index, element) { - var padding = $(element).data('padding-right'); - $(element).removeData('padding-right'); - element.style.paddingRight = padding ? padding : ''; - }); // Restore sticky content - - var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT)); - $(elements).each(function (index, element) { - var margin = $(element).data('margin-right'); - - if (typeof margin !== 'undefined') { - $(element).css('margin-right', margin).removeData('margin-right'); - } - }); // Restore body padding - - var padding = $(document.body).data('padding-right'); - $(document.body).removeData('padding-right'); - document.body.style.paddingRight = padding ? padding : ''; - }; - - _proto._getScrollbarWidth = function _getScrollbarWidth() { - // thx d.walsh - var scrollDiv = document.createElement('div'); - scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER; - document.body.appendChild(scrollDiv); - var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; - document.body.removeChild(scrollDiv); - return scrollbarWidth; - } // Static - ; - - Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { - return this.each(function () { - var data = $(this).data(DATA_KEY$5); - - var _config = _objectSpread2({}, Default$3, {}, $(this).data(), {}, typeof config === 'object' && config ? config : {}); - - if (!data) { - data = new Modal(this, _config); - $(this).data(DATA_KEY$5, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](relatedTarget); - } else if (_config.show) { - data.show(relatedTarget); - } - }); - }; - - _createClass(Modal, null, [{ - key: "VERSION", - get: function get() { - return VERSION$5; - } - }, { - key: "Default", - get: function get() { - return Default$3; - } - }]); - - return Modal; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) { - var _this11 = this; - - var target; - var selector = Util.getSelectorFromElement(this); - - if (selector) { - target = document.querySelector(selector); - } - - var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(), {}, $(this).data()); - - if (this.tagName === 'A' || this.tagName === 'AREA') { - event.preventDefault(); - } - - var $target = $(target).one(Event$5.SHOW, function (showEvent) { - if (showEvent.isDefaultPrevented()) { - // Only register focus restorer if modal will actually get shown - return; - } - - $target.one(Event$5.HIDDEN, function () { - if ($(_this11).is(':visible')) { - _this11.focus(); - } - }); - }); - - Modal._jQueryInterface.call($(target), config, this); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$5] = Modal._jQueryInterface; - $.fn[NAME$5].Constructor = Modal; - - $.fn[NAME$5].noConflict = function () { - $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; - return Modal._jQueryInterface; - }; - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.4.1): tools/sanitizer.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; - var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; - var DefaultWhitelist = { - // Global attributes allowed on any supplied element below. - '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], - a: ['target', 'href', 'title', 'rel'], - area: [], - b: [], - br: [], - col: [], - code: [], - div: [], - em: [], - hr: [], - h1: [], - h2: [], - h3: [], - h4: [], - h5: [], - h6: [], - i: [], - img: ['src', 'alt', 'title', 'width', 'height'], - li: [], - ol: [], - p: [], - pre: [], - s: [], - small: [], - span: [], - sub: [], - sup: [], - strong: [], - u: [], - ul: [] - }; - /** - * A pattern that recognizes a commonly useful subset of URLs that are safe. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts - */ - - var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; - /** - * A pattern that matches safe data URLs. Only matches image, video and audio types. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts - */ - - var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; - - function allowedAttribute(attr, allowedAttributeList) { - var attrName = attr.nodeName.toLowerCase(); - - if (allowedAttributeList.indexOf(attrName) !== -1) { - if (uriAttrs.indexOf(attrName) !== -1) { - return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); - } - - return true; - } - - var regExp = allowedAttributeList.filter(function (attrRegex) { - return attrRegex instanceof RegExp; - }); // Check if a regular expression validates the attribute. - - for (var i = 0, l = regExp.length; i < l; i++) { - if (attrName.match(regExp[i])) { - return true; - } - } - - return false; - } - - function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { - if (unsafeHtml.length === 0) { - return unsafeHtml; - } - - if (sanitizeFn && typeof sanitizeFn === 'function') { - return sanitizeFn(unsafeHtml); - } - - var domParser = new window.DOMParser(); - var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); - var whitelistKeys = Object.keys(whiteList); - var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); - - var _loop = function _loop(i, len) { - var el = elements[i]; - var elName = el.nodeName.toLowerCase(); - - if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { - el.parentNode.removeChild(el); - return "continue"; - } - - var attributeList = [].slice.call(el.attributes); - var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); - attributeList.forEach(function (attr) { - if (!allowedAttribute(attr, whitelistedAttributes)) { - el.removeAttribute(attr.nodeName); - } - }); - }; - - for (var i = 0, len = elements.length; i < len; i++) { - var _ret = _loop(i); - - if (_ret === "continue") continue; - } - - return createdDocument.body.innerHTML; - } - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$6 = 'tooltip'; - var VERSION$6 = '4.4.1'; - var DATA_KEY$6 = 'bs.tooltip'; - var EVENT_KEY$6 = "." + DATA_KEY$6; - var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; - var CLASS_PREFIX = 'bs-tooltip'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; - var DefaultType$4 = { - animation: 'boolean', - template: 'string', - title: '(string|element|function)', - trigger: 'string', - delay: '(number|object)', - html: 'boolean', - selector: '(string|boolean)', - placement: '(string|function)', - offset: '(number|string|function)', - container: '(string|element|boolean)', - fallbackPlacement: '(string|array)', - boundary: '(string|element)', - sanitize: 'boolean', - sanitizeFn: '(null|function)', - whiteList: 'object', - popperConfig: '(null|object)' - }; - var AttachmentMap$1 = { - AUTO: 'auto', - TOP: 'top', - RIGHT: 'right', - BOTTOM: 'bottom', - LEFT: 'left' - }; - var Default$4 = { - animation: true, - template: '', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - selector: false, - placement: 'top', - offset: 0, - container: false, - fallbackPlacement: 'flip', - boundary: 'scrollParent', - sanitize: true, - sanitizeFn: null, - whiteList: DefaultWhitelist, - popperConfig: null - }; - var HoverState = { - SHOW: 'show', - OUT: 'out' - }; - var Event$6 = { - HIDE: "hide" + EVENT_KEY$6, - HIDDEN: "hidden" + EVENT_KEY$6, - SHOW: "show" + EVENT_KEY$6, - SHOWN: "shown" + EVENT_KEY$6, - INSERTED: "inserted" + EVENT_KEY$6, - CLICK: "click" + EVENT_KEY$6, - FOCUSIN: "focusin" + EVENT_KEY$6, - FOCUSOUT: "focusout" + EVENT_KEY$6, - MOUSEENTER: "mouseenter" + EVENT_KEY$6, - MOUSELEAVE: "mouseleave" + EVENT_KEY$6 - }; - var ClassName$6 = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector$6 = { - TOOLTIP: '.tooltip', - TOOLTIP_INNER: '.tooltip-inner', - ARROW: '.arrow' - }; - var Trigger = { - HOVER: 'hover', - FOCUS: 'focus', - CLICK: 'click', - MANUAL: 'manual' - }; - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - var Tooltip = - /*#__PURE__*/ - function () { - function Tooltip(element, config) { - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); - } // private - - - this._isEnabled = true; - this._timeout = 0; - this._hoverState = ''; - this._activeTrigger = {}; - this._popper = null; // Protected - - this.element = element; - this.config = this._getConfig(config); - this.tip = null; - - this._setListeners(); - } // Getters - - - var _proto = Tooltip.prototype; - - // Public - _proto.enable = function enable() { - this._isEnabled = true; - }; - - _proto.disable = function disable() { - this._isEnabled = false; - }; - - _proto.toggleEnabled = function toggleEnabled() { - this._isEnabled = !this._isEnabled; - }; - - _proto.toggle = function toggle(event) { - if (!this._isEnabled) { - return; - } - - if (event) { - var dataKey = this.constructor.DATA_KEY; - var context = $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - context._activeTrigger.click = !context._activeTrigger.click; - - if (context._isWithActiveTrigger()) { - context._enter(null, context); - } else { - context._leave(null, context); - } - } else { - if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) { - this._leave(null, this); - - return; - } - - this._enter(null, this); - } - }; - - _proto.dispose = function dispose() { - clearTimeout(this._timeout); - $.removeData(this.element, this.constructor.DATA_KEY); - $(this.element).off(this.constructor.EVENT_KEY); - $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler); - - if (this.tip) { - $(this.tip).remove(); - } - - this._isEnabled = null; - this._timeout = null; - this._hoverState = null; - this._activeTrigger = null; - - if (this._popper) { - this._popper.destroy(); - } - - this._popper = null; - this.element = null; - this.config = null; - this.tip = null; - }; - - _proto.show = function show() { - var _this = this; - - if ($(this.element).css('display') === 'none') { - throw new Error('Please use show on visible elements'); - } - - var showEvent = $.Event(this.constructor.Event.SHOW); - - if (this.isWithContent() && this._isEnabled) { - $(this.element).trigger(showEvent); - var shadowRoot = Util.findShadowRoot(this.element); - var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); - - if (showEvent.isDefaultPrevented() || !isInTheDom) { - return; - } - - var tip = this.getTipElement(); - var tipId = Util.getUID(this.constructor.NAME); - tip.setAttribute('id', tipId); - this.element.setAttribute('aria-describedby', tipId); - this.setContent(); - - if (this.config.animation) { - $(tip).addClass(ClassName$6.FADE); - } - - var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; - - var attachment = this._getAttachment(placement); - - this.addAttachmentClass(attachment); - - var container = this._getContainer(); - - $(tip).data(this.constructor.DATA_KEY, this); - - if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { - $(tip).appendTo(container); - } - - $(this.element).trigger(this.constructor.Event.INSERTED); - this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment)); - $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().on('mouseover', null, $.noop); - } - - var complete = function complete() { - if (_this.config.animation) { - _this._fixTransition(); - } - - var prevHoverState = _this._hoverState; - _this._hoverState = null; - $(_this.element).trigger(_this.constructor.Event.SHOWN); - - if (prevHoverState === HoverState.OUT) { - _this._leave(null, _this); - } - }; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(this.tip); - $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - } - }; - - _proto.hide = function hide(callback) { - var _this2 = this; - - var tip = this.getTipElement(); - var hideEvent = $.Event(this.constructor.Event.HIDE); - - var complete = function complete() { - if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { - tip.parentNode.removeChild(tip); - } - - _this2._cleanTipClass(); - - _this2.element.removeAttribute('aria-describedby'); - - $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); - - if (_this2._popper !== null) { - _this2._popper.destroy(); - } - - if (callback) { - callback(); - } - }; - - $(this.element).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - this._activeTrigger[Trigger.CLICK] = false; - this._activeTrigger[Trigger.FOCUS] = false; - this._activeTrigger[Trigger.HOVER] = false; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(tip); - $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - - this._hoverState = ''; - }; - - _proto.update = function update() { - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Protected - ; - - _proto.isWithContent = function isWithContent() { - return Boolean(this.getTitle()); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var tip = this.getTipElement(); - this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle()); - $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW); - }; - - _proto.setElementContent = function setElementContent($element, content) { - if (typeof content === 'object' && (content.nodeType || content.jquery)) { - // Content is a DOM node or a jQuery - if (this.config.html) { - if (!$(content).parent().is($element)) { - $element.empty().append(content); - } - } else { - $element.text($(content).text()); - } - - return; - } - - if (this.config.html) { - if (this.config.sanitize) { - content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); - } - - $element.html(content); - } else { - $element.text(content); - } - }; - - _proto.getTitle = function getTitle() { - var title = this.element.getAttribute('data-original-title'); - - if (!title) { - title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; - } - - return title; - } // Private - ; - - _proto._getPopperConfig = function _getPopperConfig(attachment) { - var _this3 = this; - - var defaultBsConfig = { - placement: attachment, - modifiers: { - offset: this._getOffset(), - flip: { - behavior: this.config.fallbackPlacement - }, - arrow: { - element: Selector$6.ARROW - }, - preventOverflow: { - boundariesElement: this.config.boundary - } - }, - onCreate: function onCreate(data) { - if (data.originalPlacement !== data.placement) { - _this3._handlePopperPlacementChange(data); - } - }, - onUpdate: function onUpdate(data) { - return _this3._handlePopperPlacementChange(data); - } - }; - return _objectSpread2({}, defaultBsConfig, {}, this.config.popperConfig); - }; - - _proto._getOffset = function _getOffset() { - var _this4 = this; - - var offset = {}; - - if (typeof this.config.offset === 'function') { - offset.fn = function (data) { - data.offsets = _objectSpread2({}, data.offsets, {}, _this4.config.offset(data.offsets, _this4.element) || {}); - return data; - }; - } else { - offset.offset = this.config.offset; - } - - return offset; - }; - - _proto._getContainer = function _getContainer() { - if (this.config.container === false) { - return document.body; - } - - if (Util.isElement(this.config.container)) { - return $(this.config.container); - } - - return $(document).find(this.config.container); - }; - - _proto._getAttachment = function _getAttachment(placement) { - return AttachmentMap$1[placement.toUpperCase()]; - }; - - _proto._setListeners = function _setListeners() { - var _this5 = this; - - var triggers = this.config.trigger.split(' '); - triggers.forEach(function (trigger) { - if (trigger === 'click') { - $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) { - return _this5.toggle(event); - }); - } else if (trigger !== Trigger.MANUAL) { - var eventIn = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN; - var eventOut = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT; - $(_this5.element).on(eventIn, _this5.config.selector, function (event) { - return _this5._enter(event); - }).on(eventOut, _this5.config.selector, function (event) { - return _this5._leave(event); - }); - } - }); - - this._hideModalHandler = function () { - if (_this5.element) { - _this5.hide(); - } - }; - - $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler); - - if (this.config.selector) { - this.config = _objectSpread2({}, this.config, { - trigger: 'manual', - selector: '' - }); - } else { - this._fixTitle(); - } - }; - - _proto._fixTitle = function _fixTitle() { - var titleType = typeof this.element.getAttribute('data-original-title'); - - if (this.element.getAttribute('title') || titleType !== 'string') { - this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); - this.element.setAttribute('title', ''); - } - }; - - _proto._enter = function _enter(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; - } - - if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) { - context._hoverState = HoverState.SHOW; - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.SHOW; - - if (!context.config.delay || !context.config.delay.show) { - context.show(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.SHOW) { - context.show(); - } - }, context.config.delay.show); - }; - - _proto._leave = function _leave(event, context) { - var dataKey = this.constructor.DATA_KEY; - context = context || $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - if (event) { - context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; - } - - if (context._isWithActiveTrigger()) { - return; - } - - clearTimeout(context._timeout); - context._hoverState = HoverState.OUT; - - if (!context.config.delay || !context.config.delay.hide) { - context.hide(); - return; - } - - context._timeout = setTimeout(function () { - if (context._hoverState === HoverState.OUT) { - context.hide(); - } - }, context.config.delay.hide); - }; - - _proto._isWithActiveTrigger = function _isWithActiveTrigger() { - for (var trigger in this._activeTrigger) { - if (this._activeTrigger[trigger]) { - return true; - } - } - - return false; - }; - - _proto._getConfig = function _getConfig(config) { - var dataAttributes = $(this.element).data(); - Object.keys(dataAttributes).forEach(function (dataAttr) { - if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { - delete dataAttributes[dataAttr]; - } - }); - config = _objectSpread2({}, this.constructor.Default, {}, dataAttributes, {}, typeof config === 'object' && config ? config : {}); - - if (typeof config.delay === 'number') { - config.delay = { - show: config.delay, - hide: config.delay - }; - } - - if (typeof config.title === 'number') { - config.title = config.title.toString(); - } - - if (typeof config.content === 'number') { - config.content = config.content.toString(); - } - - Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); - - if (config.sanitize) { - config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); - } - - return config; - }; - - _proto._getDelegateConfig = function _getDelegateConfig() { - var config = {}; - - if (this.config) { - for (var key in this.config) { - if (this.constructor.Default[key] !== this.config[key]) { - config[key] = this.config[key]; - } - } - } - - return config; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); - - if (tabClass !== null && tabClass.length) { - $tip.removeClass(tabClass.join('')); - } - }; - - _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { - var popperInstance = popperData.instance; - this.tip = popperInstance.popper; - - this._cleanTipClass(); - - this.addAttachmentClass(this._getAttachment(popperData.placement)); - }; - - _proto._fixTransition = function _fixTransition() { - var tip = this.getTipElement(); - var initConfigAnimation = this.config.animation; - - if (tip.getAttribute('x-placement') !== null) { - return; - } - - $(tip).removeClass(ClassName$6.FADE); - this.config.animation = false; - this.hide(); - this.show(); - this.config.animation = initConfigAnimation; - } // Static - ; - - Tooltip._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$6); - - var _config = typeof config === 'object' && config; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Tooltip(this, _config); - $(this).data(DATA_KEY$6, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Tooltip, null, [{ - key: "VERSION", - get: function get() { - return VERSION$6; - } - }, { - key: "Default", - get: function get() { - return Default$4; - } - }, { - key: "NAME", - get: function get() { - return NAME$6; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY$6; - } - }, { - key: "Event", - get: function get() { - return Event$6; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY$6; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$4; - } - }]); - - return Tooltip; - }(); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $.fn[NAME$6] = Tooltip._jQueryInterface; - $.fn[NAME$6].Constructor = Tooltip; - - $.fn[NAME$6].noConflict = function () { - $.fn[NAME$6] = JQUERY_NO_CONFLICT$6; - return Tooltip._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$7 = 'popover'; - var VERSION$7 = '4.4.1'; - var DATA_KEY$7 = 'bs.popover'; - var EVENT_KEY$7 = "." + DATA_KEY$7; - var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; - var CLASS_PREFIX$1 = 'bs-popover'; - var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); - - var Default$5 = _objectSpread2({}, Tooltip.Default, { - placement: 'right', - trigger: 'click', - content: '', - template: '' - }); - - var DefaultType$5 = _objectSpread2({}, Tooltip.DefaultType, { - content: '(string|element|function)' - }); - - var ClassName$7 = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector$7 = { - TITLE: '.popover-header', - CONTENT: '.popover-body' - }; - var Event$7 = { - HIDE: "hide" + EVENT_KEY$7, - HIDDEN: "hidden" + EVENT_KEY$7, - SHOW: "show" + EVENT_KEY$7, - SHOWN: "shown" + EVENT_KEY$7, - INSERTED: "inserted" + EVENT_KEY$7, - CLICK: "click" + EVENT_KEY$7, - FOCUSIN: "focusin" + EVENT_KEY$7, - FOCUSOUT: "focusout" + EVENT_KEY$7, - MOUSEENTER: "mouseenter" + EVENT_KEY$7, - MOUSELEAVE: "mouseleave" + EVENT_KEY$7 - }; - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - var Popover = - /*#__PURE__*/ - function (_Tooltip) { - _inheritsLoose(Popover, _Tooltip); - - function Popover() { - return _Tooltip.apply(this, arguments) || this; - } - - var _proto = Popover.prototype; - - // Overrides - _proto.isWithContent = function isWithContent() { - return this.getTitle() || this._getContent(); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events - - this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle()); - - var content = this._getContent(); - - if (typeof content === 'function') { - content = content.call(this.element); - } - - this.setElementContent($tip.find(Selector$7.CONTENT), content); - $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); - } // Private - ; - - _proto._getContent = function _getContent() { - return this.element.getAttribute('data-content') || this.config.content; - }; - - _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); - - if (tabClass !== null && tabClass.length > 0) { - $tip.removeClass(tabClass.join('')); - } - } // Static - ; - - Popover._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$7); - - var _config = typeof config === 'object' ? config : null; - - if (!data && /dispose|hide/.test(config)) { - return; - } - - if (!data) { - data = new Popover(this, _config); - $(this).data(DATA_KEY$7, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Popover, null, [{ - key: "VERSION", - // Getters - get: function get() { - return VERSION$7; - } - }, { - key: "Default", - get: function get() { - return Default$5; - } - }, { - key: "NAME", - get: function get() { - return NAME$7; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY$7; - } - }, { - key: "Event", - get: function get() { - return Event$7; - } - }, { - key: "EVENT_KEY", - get: function get() { - return EVENT_KEY$7; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$5; - } - }]); - - return Popover; - }(Tooltip); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - - $.fn[NAME$7] = Popover._jQueryInterface; - $.fn[NAME$7].Constructor = Popover; - - $.fn[NAME$7].noConflict = function () { - $.fn[NAME$7] = JQUERY_NO_CONFLICT$7; - return Popover._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$8 = 'scrollspy'; - var VERSION$8 = '4.4.1'; - var DATA_KEY$8 = 'bs.scrollspy'; - var EVENT_KEY$8 = "." + DATA_KEY$8; - var DATA_API_KEY$6 = '.data-api'; - var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8]; - var Default$6 = { - offset: 10, - method: 'auto', - target: '' - }; - var DefaultType$6 = { - offset: 'number', - method: 'string', - target: '(string|element)' - }; - var Event$8 = { - ACTIVATE: "activate" + EVENT_KEY$8, - SCROLL: "scroll" + EVENT_KEY$8, - LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6 - }; - var ClassName$8 = { - DROPDOWN_ITEM: 'dropdown-item', - DROPDOWN_MENU: 'dropdown-menu', - ACTIVE: 'active' - }; - var Selector$8 = { - DATA_SPY: '[data-spy="scroll"]', - ACTIVE: '.active', - NAV_LIST_GROUP: '.nav, .list-group', - NAV_LINKS: '.nav-link', - NAV_ITEMS: '.nav-item', - LIST_ITEMS: '.list-group-item', - DROPDOWN: '.dropdown', - DROPDOWN_ITEMS: '.dropdown-item', - DROPDOWN_TOGGLE: '.dropdown-toggle' - }; - var OffsetMethod = { - OFFSET: 'offset', - POSITION: 'position' - }; - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - var ScrollSpy = - /*#__PURE__*/ - function () { - function ScrollSpy(element, config) { - var _this = this; - - this._element = element; - this._scrollElement = element.tagName === 'BODY' ? window : element; - this._config = this._getConfig(config); - this._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS); - this._offsets = []; - this._targets = []; - this._activeTarget = null; - this._scrollHeight = 0; - $(this._scrollElement).on(Event$8.SCROLL, function (event) { - return _this._process(event); - }); - this.refresh(); - - this._process(); - } // Getters - - - var _proto = ScrollSpy.prototype; - - // Public - _proto.refresh = function refresh() { - var _this2 = this; - - var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; - var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; - var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; - this._offsets = []; - this._targets = []; - this._scrollHeight = this._getScrollHeight(); - var targets = [].slice.call(document.querySelectorAll(this._selector)); - targets.map(function (element) { - var target; - var targetSelector = Util.getSelectorFromElement(element); - - if (targetSelector) { - target = document.querySelector(targetSelector); - } - - if (target) { - var targetBCR = target.getBoundingClientRect(); - - if (targetBCR.width || targetBCR.height) { - // TODO (fat): remove sketch reliance on jQuery position/offset - return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; - } - } - - return null; - }).filter(function (item) { - return item; - }).sort(function (a, b) { - return a[0] - b[0]; - }).forEach(function (item) { - _this2._offsets.push(item[0]); - - _this2._targets.push(item[1]); - }); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$8); - $(this._scrollElement).off(EVENT_KEY$8); - this._element = null; - this._scrollElement = null; - this._config = null; - this._selector = null; - this._offsets = null; - this._targets = null; - this._activeTarget = null; - this._scrollHeight = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread2({}, Default$6, {}, typeof config === 'object' && config ? config : {}); - - if (typeof config.target !== 'string') { - var id = $(config.target).attr('id'); - - if (!id) { - id = Util.getUID(NAME$8); - $(config.target).attr('id', id); - } - - config.target = "#" + id; - } - - Util.typeCheckConfig(NAME$8, config, DefaultType$6); - return config; - }; - - _proto._getScrollTop = function _getScrollTop() { - return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; - }; - - _proto._getScrollHeight = function _getScrollHeight() { - return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); - }; - - _proto._getOffsetHeight = function _getOffsetHeight() { - return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; - }; - - _proto._process = function _process() { - var scrollTop = this._getScrollTop() + this._config.offset; - - var scrollHeight = this._getScrollHeight(); - - var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); - - if (this._scrollHeight !== scrollHeight) { - this.refresh(); - } - - if (scrollTop >= maxScroll) { - var target = this._targets[this._targets.length - 1]; - - if (this._activeTarget !== target) { - this._activate(target); - } - - return; - } - - if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { - this._activeTarget = null; - - this._clear(); - - return; - } - - var offsetLength = this._offsets.length; - - for (var i = offsetLength; i--;) { - var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); - - if (isActiveTarget) { - this._activate(this._targets[i]); - } - } - }; - - _proto._activate = function _activate(target) { - this._activeTarget = target; - - this._clear(); - - var queries = this._selector.split(',').map(function (selector) { - return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; - }); - - var $link = $([].slice.call(document.querySelectorAll(queries.join(',')))); - - if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) { - $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE); - $link.addClass(ClassName$8.ACTIVE); - } else { - // Set triggered link as active - $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active - // With both