diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..fb73a09 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,11 @@ +module.exports = { + extends: [ + // add more generic rulesets here, such as: + // 'eslint:recommended', + 'plugin:vue/recommended' + ], + rules: { + // override/add rules settings here, such as: + // 'vue/no-unused-vars': 'error' + } +} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 704026c..ca3d411 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,26 +1,26 @@ # Contributing -First things first: Thanks for considering to contributing to laratomics-workshop. +First things first: Thanks for considering to contributing to oloid-laravel-patternlib. Feel free to fork our repository and send a PR to the master branch. # Setup the development environment 1. Create a standard Laravel application. -2. Link the package laratomics-workshop in composer.json +2. Link the package oloid-laravel-patternlib in composer.json ## Recommended folder structure -* laratomics +* oloid * packages - * laratomics-workshop + * oloid-laravel-patternlib * laravel This structure will be created in the following steps. -### Laratomics-workshop +### Oloid-laravel-patternlib ```bash -mkdir -p laratomics/packages -git clone git@github.com:poolingpeople/laratomics-workshop.git +mkdir -p oloid/packages +git clone git@github.com:ion2s-gmbh/oloid-laravel-patternlib.git ``` ### Laravel @@ -30,26 +30,26 @@ composer create-project --prefer-dist laravel/laravel laravel ``` ### Link the package -Finally you have to link the laravel-workshop package in the Laravel application and you're ready to go. +Finally you have to link the oloid-laravel-patternlib package in the Laravel application and you're ready to go. In Laravel's composer.json add: ``` "repositories": [ { "type":"path", - "url":"/path/to/laratomics-workshop" + "url":"/path/to/oloid-laravel-patternlib" } ], ``` And in the require-dev section add: ``` -"ion2s/laratomics-workshop": "*", +"ion2s/oloid-laravel-patternlib": "*", ``` Then run: ```bash composer update ``` -You should see ion2s/laratomics-workshop in the list of discovered packages. +You should see ion2s/oloid-laravel-patternlib in the list of discovered packages. You can execute the tests with: ```bash @@ -59,7 +59,7 @@ composer test ### Preparing the frontend Finally you have to build the frontend: ```bash -cd /path/to/laratomics-workshop +cd /path/to/oloid-laravel-patternlib npm install npm run dev ``` diff --git a/README.md b/README.md index c529b7c..b723c7c 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,31 @@

-

Laratomics Workshop

+

Oloid-laravel-patternlib Workshop

- - - - -License + + + + +License

## Introduction -Laratomics Workshop enables a development GUI besides your current project. -Using this GUI you can create and manage template snippets (patterns) and build your whole frontend +Oloid-laravel-patternlib enables a development GUI besides your current project. We call this development GUI your `workshop` +Using the workshop you can create and manage template snippets (patterns) and build your whole frontend using these reusable patterns. ## Installation & Configuration ### Installation -Laratomics Workshop is not yet available. So there is no straight forward installation process. +The package is not yet available. So there is no straight forward installation process. Stay tuned. ### Configuration #### .env configuration ``` WORKSHOP_URI=workshop -WORKSHOP_BASE_PATH=laratomics +WORKSHOP_BASE_PATH=patternlib WORKSHOP_PATTERN_PATH="${WORKSHOP_BASE_PATH}/patterns" ``` @@ -35,11 +35,11 @@ composer test ``` ## Credits -* [ion2s GmbH](https://github.com/poolingpeople) -* [All Contributors](https://github.com/poolingpeople/laratomics-workshop/graphs/contributors) +* [ion2s GmbH](https://github.com/ion2s-gmbh) +* [All Contributors](https://github.com/ion2s-gmbh/oloid-laravel-patternlib/graphs/contributors) ## Security Vulnerabilities -If you discover a security vulnerability within laratomics-workshop, please send an e-mail to Sebastian Baum via [sebastian.baum@ion2s.com](mailto:sebastian.baum@ion2s.com). +If you discover a security vulnerability within oloid-laravel-patternlib, please send an e-mail to Sebastian Baum via [sebastian.baum@ion2s.com](mailto:sebastian.baum@ion2s.com). ## License The MIT License (MIT). Please see [License File](LICENSE.md) for more information. \ No newline at end of file diff --git a/composer.json b/composer.json index 59b2bd9..00ceb6f 100644 --- a/composer.json +++ b/composer.json @@ -1,13 +1,17 @@ { - "name": "ion2s/laratomics-workshop", + "name": "ion2s/oloid-laravel-patternlib", "type": "library", - "description": "Package to add laratomics powers to your Laravel application", - "version": "0.4.0", + "description": "Package to add patternlib powers to your Laravel application", + "keywords": ["laravel","patternlib","blade"], "license": "MIT", "authors": [ { "name": "Sebastian Baum", "email": "sebastian.baum@ion2s.com" + }, + { + "name": "Marek Gebka", + "email": "marek.gebka@ion2s.com" } ], "require": { @@ -27,19 +31,19 @@ "src/helpers.php" ], "psr-4": { - "Laratomics\\": "src/" + "Oloid\\": "src/" } }, "autoload-dev": { "psr-4": { - "Laratomics\\Tests\\": "tests/" + "Tests\\": "tests/" } }, "extra": { "laravel": { "providers": [ - "Laratomics\\WorkshopServiceProvider", - "Laratomics\\Providers\\PatternServiceProvider" + "Oloid\\WorkshopServiceProvider", + "Oloid\\Providers\\PatternServiceProvider" ] } }, diff --git a/composer.lock b/composer.lock index c56161a..3e03780 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c02cf112389c9f81bf5f6ce81e775baf", + "content-hash": "b68f10a8b880aed5c35aab37b3356c3d", "packages": [ { "name": "doctrine/inflector", @@ -178,16 +178,16 @@ }, { "name": "egulias/email-validator", - "version": "2.1.6", + "version": "2.1.7", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0578b32b30b22de3e8664f797cf846fc9246f786" + "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0578b32b30b22de3e8664f797cf846fc9246f786", - "reference": "0578b32b30b22de3e8664f797cf846fc9246f786", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/709f21f92707308cdf8f9bcfa1af4cb26586521e", + "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e", "shasum": "" }, "require": { @@ -231,7 +231,7 @@ "validation", "validator" ], - "time": "2018-09-25T20:47:26+00:00" + "time": "2018-12-04T22:38:24+00:00" }, { "name": "erusev/parsedown", @@ -279,18 +279,201 @@ ], "time": "2018-03-08T01:11:30+00:00" }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-04T20:46:45+00:00" + }, { "name": "laravel/framework", - "version": "v5.7.15", + "version": "v5.7.24", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e0dbd6ab143286d81bedf2b34f8820f3d49ea15f" + "reference": "2ede55db4b8201ed0450fa7e7a4d7220aa29bc34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e0dbd6ab143286d81bedf2b34f8820f3d49ea15f", - "reference": "e0dbd6ab143286d81bedf2b34f8820f3d49ea15f", + "url": "https://api.github.com/repos/laravel/framework/zipball/2ede55db4b8201ed0450fa7e7a4d7220aa29bc34", + "reference": "2ede55db4b8201ed0450fa7e7a4d7220aa29bc34", "shasum": "" }, "require": { @@ -299,6 +482,8 @@ "erusev/parsedown": "^1.7", "ext-mbstring": "*", "ext-openssl": "*", + "laravel/nexmo-notification-channel": "^1.0", + "laravel/slack-notification-channel": "^1.0", "league/flysystem": "^1.0.8", "monolog/monolog": "^1.12", "nesbot/carbon": "^1.26.3", @@ -362,7 +547,7 @@ "moontoast/math": "^1.1", "orchestra/testbench-core": "3.7.*", "pda/pheanstalk": "^3.0", - "phpunit/phpunit": "^7.0", + "phpunit/phpunit": "^7.5", "predis/predis": "^1.1.1", "symfony/css-selector": "^4.1", "symfony/dom-crawler": "^4.1", @@ -421,20 +606,192 @@ "framework", "laravel" ], - "time": "2018-11-26T14:10:57+00:00" + "time": "2019-01-29T22:13:46+00:00" + }, + { + "name": "laravel/nexmo-notification-channel", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/nexmo-notification-channel.git", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", + "shasum": "" + }, + "require": { + "nexmo/client": "^1.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\NexmoChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Nexmo Notification Channel for laravel.", + "keywords": [ + "laravel", + "nexmo", + "notifications" + ], + "time": "2018-12-04T12:57:08+00:00" + }, + { + "name": "laravel/slack-notification-channel", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\SlackChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Slack Notification Channel for laravel.", + "keywords": [ + "laravel", + "notifications", + "slack" + ], + "time": "2018-12-12T13:12:06+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "3.2.5", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "82be04b4753f8b7693b62852b7eab30f97524f9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/82be04b4753f8b7693b62852b7eab30f97524f9b", + "reference": "82be04b4753f8b7693b62852b7eab30f97524f9b", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">=5.5" + }, + "require-dev": { + "mdanter/ecc": "~0.3.1", + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "~4.5", + "squizlabs/php_codesniffer": "~2.3" + }, + "suggest": { + "mdanter/ecc": "Required to use Elliptic Curves based algorithms." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2018-11-11T12:22:26+00:00" }, { "name": "league/flysystem", - "version": "1.0.49", + "version": "1.0.50", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd" + "reference": "dab4e7624efa543a943be978008f439c333f2249" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/dab4e7624efa543a943be978008f439c333f2249", + "reference": "dab4e7624efa543a943be978008f439c333f2249", "shasum": "" }, "require": { @@ -505,7 +862,7 @@ "sftp", "storage" ], - "time": "2018-11-23T23:41:29+00:00" + "time": "2019-02-01T08:50:36+00:00" }, { "name": "monolog/monolog", @@ -587,40 +944,348 @@ }, { "name": "nesbot/carbon", - "version": "1.36.1", + "version": "1.36.2", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "cd324b98bc30290f233dd0e75e6ce49f7ab2a6c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cd324b98bc30290f233dd0e75e6ce49f7ab2a6c9", + "reference": "cd324b98bc30290f233dd0e75e6ce49f7ab2a6c9", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/translation": "~2.6 || ~3.0 || ~4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "suggest": { + "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", + "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "http://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "time": "2018-12-28T10:07:33+00:00" + }, + { + "name": "nexmo/client", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/Nexmo/nexmo-php.git", + "reference": "3dc03ca1dab726a23b757110897740e54304fc65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/3dc03ca1dab726a23b757110897740e54304fc65", + "reference": "3dc03ca1dab726a23b757110897740e54304fc65", + "shasum": "" + }, + "require": { + "lcobucci/jwt": "^3.2", + "php": ">=5.6", + "php-http/client-implementation": "^1.0", + "php-http/guzzle6-adapter": "^1.0", + "zendframework/zend-diactoros": "^1.3" + }, + "require-dev": { + "estahn/phpunit-json-assertions": "^1.0.0", + "php-http/mock-client": "^0.3.0", + "phpunit/phpunit": "^5.7", + "squizlabs/php_codesniffer": "^3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Nexmo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tim Lytle", + "email": "tim@nexmo.com", + "homepage": "http://twitter.com/tjlytle", + "role": "Developer" + } + ], + "description": "PHP Client for using Nexmo's API.", + "time": "2019-01-02T09:06:47+00:00" + }, + { + "name": "opis/closure", + "version": "3.1.5", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "41f5da65d75cf473e5ee582df8fc7f2c733ce9d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/41f5da65d75cf473e5ee582df8fc7f2c733ce9d6", + "reference": "41f5da65d75cf473e5ee582df8fc7f2c733ce9d6", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0|^5.0|^6.0|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2019-01-14T14:45:33+00:00" + }, + { + "name": "paquettg/php-html-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/paquettg/php-html-parser.git", + "reference": "8b759abeea51df22f6a6cc473039758d95aceea4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paquettg/php-html-parser/zipball/8b759abeea51df22f6a6cc473039758d95aceea4", + "reference": "8b759abeea51df22f6a6cc473039758d95aceea4", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "paquettg/string-encode": "~1.0.0", + "php": ">=7.1" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^7.5.1" + }, + "type": "library", + "autoload": { + "psr-0": { + "PHPHtmlParser": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gilles Paquette", + "email": "paquettg@gmail.com", + "homepage": "http://gillespaquette.ca" + } + ], + "description": "An HTML DOM parser. It allows you to manipulate HTML. Find tags on an HTML page with selectors just like jQuery.", + "homepage": "https://github.com/paquettg/php-html-parser", + "keywords": [ + "dom", + "html", + "parser" + ], + "time": "2019-01-21T02:00:26+00:00" + }, + { + "name": "paquettg/string-encode", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/paquettg/string-encoder.git", + "reference": "a8708e9fac9d5ddfc8fc2aac6004e2cd05d80fee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paquettg/string-encoder/zipball/a8708e9fac9d5ddfc8fc2aac6004e2cd05d80fee", + "reference": "a8708e9fac9d5ddfc8fc2aac6004e2cd05d80fee", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5.1" + }, + "type": "library", + "autoload": { + "psr-0": { + "stringEncode": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gilles Paquette", + "email": "paquettg@gmail.com", + "homepage": "http://gillespaquette.ca" + } + ], + "description": "Facilitating the process of altering string encoding in PHP.", + "homepage": "https://github.com/paquettg/string-encoder", + "keywords": [ + "charset", + "encoding", + "string" + ], + "time": "2018-12-21T02:25:09+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "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": "2018-07-02T15:55:56+00:00" + }, + { + "name": "php-http/guzzle6-adapter", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983" + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/translation": "~2.6 || ~3.0 || ~4.0" + "guzzlehttp/guzzle": "^6.0", + "php": ">=5.5.0", + "php-http/httplug": "^1.0" }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7" + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0" }, - "suggest": { - "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", - "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." + "require-dev": { + "ext-curl": "*", + "php-http/adapter-integration-tests": "^0.4" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] + "branch-alias": { + "dev-master": "1.2-dev" } }, "autoload": { "psr-4": { - "": "src/" + "Http\\Adapter\\Guzzle6\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -629,54 +1294,55 @@ ], "authors": [ { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" } ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", "keywords": [ - "date", - "datetime", - "time" + "Guzzle", + "http" ], - "time": "2018-11-22T18:23:02+00:00" + "time": "2016-05-10T06:13:32+00:00" }, { - "name": "opis/closure", - "version": "3.1.1", + "name": "php-http/httplug", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "d3209e46ad6c69a969b705df0738fd0dbe26ef9e" + "url": "https://github.com/php-http/httplug.git", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/d3209e46ad6c69a969b705df0738fd0dbe26ef9e", - "reference": "d3209e46ad6c69a969b705df0738fd0dbe26ef9e", + "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0" + "php": ">=5.4", + "php-http/promise": "^1.0", + "psr/http-message": "^1.0" }, "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0" + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "1.1-dev" } }, "autoload": { "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] + "Http\\Client\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -684,70 +1350,71 @@ ], "authors": [ { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" }, { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" + "client", + "http" ], - "time": "2018-10-02T13:36:53+00:00" + "time": "2016-08-31T08:30:17+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.99", + "name": "php-http/promise", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", "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." + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" + "promise" ], - "time": "2018-07-02T15:55:56+00:00" + "time": "2016-01-26T13:27:02+00:00" }, { "name": "psr/container", @@ -798,6 +1465,56 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.1.0", @@ -893,6 +1610,46 @@ ], "time": "2017-10-23T01:57:42+00:00" }, + { + "name": "ralouphie/getallheaders", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7.0", + "satooshi/php-coveralls": ">=1.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2016-02-11T07:05:27+00:00" + }, { "name": "ramsey/uuid", "version": "3.8.0", @@ -1086,20 +1843,21 @@ }, { "name": "symfony/console", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c74f4d1988dfcd8760273e53551694da32b056d0" + "reference": "b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c74f4d1988dfcd8760273e53551694da32b056d0", - "reference": "c74f4d1988dfcd8760273e53551694da32b056d0", + "url": "https://api.github.com/repos/symfony/console/zipball/b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522", + "reference": "b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522", "shasum": "" }, "require": { "php": "^7.1.3", + "symfony/contracts": "^1.0", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { @@ -1123,7 +1881,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1150,20 +1908,88 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-11-26T14:00:40+00:00" + "time": "2019-01-04T15:13:53+00:00" + }, + { + "name": "symfony/contracts", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/contracts.git", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "psr/cache": "^1.0", + "psr/container": "^1.0" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "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": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2018-12-05T08:06:11+00:00" }, { "name": "symfony/css-selector", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "9e4dc57949853315561f0cd5eb84d0707465502a" + "reference": "76dac1dbe2830213e95892c7c2ec1edd74113ea4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/9e4dc57949853315561f0cd5eb84d0707465502a", - "reference": "9e4dc57949853315561f0cd5eb84d0707465502a", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/76dac1dbe2830213e95892c7c2ec1edd74113ea4", + "reference": "76dac1dbe2830213e95892c7c2ec1edd74113ea4", "shasum": "" }, "require": { @@ -1172,7 +1998,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1203,20 +2029,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:51:29+00:00" + "time": "2019-01-03T09:07:35+00:00" }, { "name": "symfony/debug", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "f9eea0cff99d14f97d69b24b17164098ece3fd32" + "reference": "64cb33c81e37d19b7715d4a6a4d49c1c382066dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/f9eea0cff99d14f97d69b24b17164098ece3fd32", - "reference": "f9eea0cff99d14f97d69b24b17164098ece3fd32", + "url": "https://api.github.com/repos/symfony/debug/zipball/64cb33c81e37d19b7715d4a6a4d49c1c382066dd", + "reference": "64cb33c81e37d19b7715d4a6a4d49c1c382066dd", "shasum": "" }, "require": { @@ -1232,7 +2058,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1259,24 +2085,25 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:51:29+00:00" + "time": "2019-01-03T09:07:35+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8b93ce06506d58485893e2da366767dcc5390862" + "reference": "887de6d34c86cf0cb6cbf910afb170cdb743cb5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8b93ce06506d58485893e2da366767dcc5390862", - "reference": "8b93ce06506d58485893e2da366767dcc5390862", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/887de6d34c86cf0cb6cbf910afb170cdb743cb5e", + "reference": "887de6d34c86cf0cb6cbf910afb170cdb743cb5e", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3", + "symfony/contracts": "^1.0" }, "conflict": { "symfony/dependency-injection": "<3.4" @@ -1295,7 +2122,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1322,20 +2149,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:26:29+00:00" + "time": "2019-01-05T16:37:49+00:00" }, { "name": "symfony/finder", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "68fbdcafe915db67adb13fddaec4532e684f6689" + "reference": "9094d69e8c6ee3fe186a0ec5a4f1401e506071ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/68fbdcafe915db67adb13fddaec4532e684f6689", - "reference": "68fbdcafe915db67adb13fddaec4532e684f6689", + "url": "https://api.github.com/repos/symfony/finder/zipball/9094d69e8c6ee3fe186a0ec5a4f1401e506071ce", + "reference": "9094d69e8c6ee3fe186a0ec5a4f1401e506071ce", "shasum": "" }, "require": { @@ -1344,7 +2171,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1371,20 +2198,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:51:29+00:00" + "time": "2019-01-03T09:07:35+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "26062b9527b6797fc6239ed698c9c0a3c5e891e0" + "reference": "a633d422a09242064ba24e44a6e1494c5126de86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/26062b9527b6797fc6239ed698c9c0a3c5e891e0", - "reference": "26062b9527b6797fc6239ed698c9c0a3c5e891e0", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a633d422a09242064ba24e44a6e1494c5126de86", + "reference": "a633d422a09242064ba24e44a6e1494c5126de86", "shasum": "" }, "require": { @@ -1398,7 +2225,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1425,25 +2252,26 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:26:29+00:00" + "time": "2019-01-05T16:37:49+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "2be29c72276ba4ef5c5488de666f9f12aa768b44" + "reference": "83de6543328917c18d5498eeb6bb6d36f7aab31b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2be29c72276ba4ef5c5488de666f9f12aa768b44", - "reference": "2be29c72276ba4ef5c5488de666f9f12aa768b44", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/83de6543328917c18d5498eeb6bb6d36f7aab31b", + "reference": "83de6543328917c18d5498eeb6bb6d36f7aab31b", "shasum": "" }, "require": { "php": "^7.1.3", "psr/log": "~1.0", + "symfony/contracts": "^1.0.2", "symfony/debug": "~3.4|~4.0", "symfony/event-dispatcher": "~4.1", "symfony/http-foundation": "^4.1.1", @@ -1451,7 +2279,8 @@ }, "conflict": { "symfony/config": "<3.4", - "symfony/dependency-injection": "<4.1", + "symfony/dependency-injection": "<4.2", + "symfony/translation": "<4.2", "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, @@ -1464,7 +2293,7 @@ "symfony/config": "~3.4|~4.0", "symfony/console": "~3.4|~4.0", "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.1", + "symfony/dependency-injection": "^4.2", "symfony/dom-crawler": "~3.4|~4.0", "symfony/expression-language": "~3.4|~4.0", "symfony/finder": "~3.4|~4.0", @@ -1472,7 +2301,7 @@ "symfony/routing": "~3.4|~4.0", "symfony/stopwatch": "~3.4|~4.0", "symfony/templating": "~3.4|~4.0", - "symfony/translation": "~3.4|~4.0", + "symfony/translation": "~4.2", "symfony/var-dumper": "^4.1.1" }, "suggest": { @@ -1485,7 +2314,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1512,7 +2341,7 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-11-26T14:52:15+00:00" + "time": "2019-01-06T16:19:23+00:00" }, { "name": "symfony/polyfill-ctype", @@ -1688,16 +2517,16 @@ }, { "name": "symfony/process", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "471f6e24172366a97365baaae588ddaafbba9b20" + "reference": "ea043ab5d8ed13b467a9087d81cb876aee7f689a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/471f6e24172366a97365baaae588ddaafbba9b20", - "reference": "471f6e24172366a97365baaae588ddaafbba9b20", + "url": "https://api.github.com/repos/symfony/process/zipball/ea043ab5d8ed13b467a9087d81cb876aee7f689a", + "reference": "ea043ab5d8ed13b467a9087d81cb876aee7f689a", "shasum": "" }, "require": { @@ -1706,7 +2535,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1733,34 +2562,34 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:14:00+00:00" + "time": "2019-01-03T14:48:52+00:00" }, { "name": "symfony/routing", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "eebc037d45c253af2349c5b25a2d0531a732efdc" + "reference": "e69b7a13a0b58af378a49b49dd7084462de16cee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/eebc037d45c253af2349c5b25a2d0531a732efdc", - "reference": "eebc037d45c253af2349c5b25a2d0531a732efdc", + "url": "https://api.github.com/repos/symfony/routing/zipball/e69b7a13a0b58af378a49b49dd7084462de16cee", + "reference": "e69b7a13a0b58af378a49b49dd7084462de16cee", "shasum": "" }, "require": { "php": "^7.1.3" }, "conflict": { - "symfony/config": "<3.4", + "symfony/config": "<4.2", "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { "doctrine/annotations": "~1.0", "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", + "symfony/config": "~4.2", "symfony/dependency-injection": "~3.4|~4.0", "symfony/expression-language": "~3.4|~4.0", "symfony/http-foundation": "~3.4|~4.0", @@ -1777,7 +2606,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1810,24 +2639,25 @@ "uri", "url" ], - "time": "2018-11-26T10:24:14+00:00" + "time": "2019-01-03T09:07:35+00:00" }, { "name": "symfony/translation", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "615e3cf75d00a7d6788316d9631957991ba9c26a" + "reference": "939fb792d73f2ce80e6ae9019d205fc480f1c9a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/615e3cf75d00a7d6788316d9631957991ba9c26a", - "reference": "615e3cf75d00a7d6788316d9631957991ba9c26a", + "url": "https://api.github.com/repos/symfony/translation/zipball/939fb792d73f2ce80e6ae9019d205fc480f1c9a0", + "reference": "939fb792d73f2ce80e6ae9019d205fc480f1c9a0", "shasum": "" }, "require": { "php": "^7.1.3", + "symfony/contracts": "^1.0.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { @@ -1835,6 +2665,9 @@ "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, + "provide": { + "symfony/translation-contracts-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.4|~4.0", @@ -1852,7 +2685,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1879,20 +2712,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:26:29+00:00" + "time": "2019-01-03T09:07:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "42a55e4a4a7421124636f6f15845187704be0423" + "reference": "85bde661b178173d85c6f11ea9d03b61d1212bb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/42a55e4a4a7421124636f6f15845187704be0423", - "reference": "42a55e4a4a7421124636f6f15845187704be0423", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/85bde661b178173d85c6f11ea9d03b61d1212bb2", + "reference": "85bde661b178173d85c6f11ea9d03b61d1212bb2", "shasum": "" }, "require": { @@ -1906,6 +2739,7 @@ }, "require-dev": { "ext-iconv": "*", + "symfony/console": "~3.4|~4.0", "symfony/process": "~3.4|~4.0", "twig/twig": "~1.34|~2.4" }, @@ -1920,7 +2754,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1954,20 +2788,20 @@ "debug", "dump" ], - "time": "2018-11-20T16:14:00+00:00" + "time": "2019-01-03T09:07:35+00:00" }, { "name": "symfony/yaml", - "version": "v4.1.8", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "fe87e3b24d15ec8948f0280ee867a65ca44fdbaa" + "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/fe87e3b24d15ec8948f0280ee867a65ca44fdbaa", - "reference": "fe87e3b24d15ec8948f0280ee867a65ca44fdbaa", + "url": "https://api.github.com/repos/symfony/yaml/zipball/d0aa6c0ea484087927b49fd513383a7d36190ca6", + "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6", "shasum": "" }, "require": { @@ -1986,7 +2820,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -2013,7 +2847,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:51:29+00:00" + "time": "2019-01-03T09:07:35+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -2064,20 +2898,21 @@ }, { "name": "vlucas/phpdotenv", - "version": "v2.5.1", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -2085,7 +2920,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -2110,7 +2945,71 @@ "env", "environment" ], - "time": "2018-07-29T20:33:41+00:00" + "time": "2019-01-29T11:11:52+00:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "1.8.6", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/20da13beba0dde8fb648be3cc19765732790f46e", + "reference": "20da13beba0dde8fb648be3cc19765732790f46e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7", + "zendframework/zend-coding-standard": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8.x-dev", + "dev-develop": "1.9.x-dev", + "dev-release-2.0": "2.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://github.com/zendframework/zend-diactoros", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2018-09-05T19:29:37+00:00" } ], "packages-dev": [ @@ -2654,16 +3553,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.1.0", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "d0230c5c77a7e3cfa69446febf340978540958c0" + "reference": "594bcae1fc0bccd3993d2f0d61a018e26ac2865a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/d0230c5c77a7e3cfa69446febf340978540958c0", - "reference": "d0230c5c77a7e3cfa69446febf340978540958c0", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/594bcae1fc0bccd3993d2f0d61a018e26ac2865a", + "reference": "594bcae1fc0bccd3993d2f0d61a018e26ac2865a", "shasum": "" }, "require": { @@ -2679,7 +3578,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -2701,26 +3600,26 @@ "parser", "php" ], - "time": "2018-10-10T09:24:14+00:00" + "time": "2019-01-12T16:31:37+00:00" }, { "name": "orchestra/testbench", - "version": "v3.7.5", + "version": "v3.7.6", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "dcde71f6743575c9586d06fe607558263a6877bb" + "reference": "57c9dc9271e60421b8402f477c44589156fb67b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/dcde71f6743575c9586d06fe607558263a6877bb", - "reference": "dcde71f6743575c9586d06fe607558263a6877bb", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/57c9dc9271e60421b8402f477c44589156fb67b6", + "reference": "57c9dc9271e60421b8402f477c44589156fb67b6", "shasum": "" }, "require": { - "laravel/framework": "~5.7.4", + "laravel/framework": "~5.7.14", "mockery/mockery": "^1.0", - "orchestra/testbench-core": "~3.7.6", + "orchestra/testbench-core": "~3.7.7", "php": ">=7.1", "phpunit/phpunit": "^7.0" }, @@ -2751,20 +3650,20 @@ "orchestral", "testing" ], - "time": "2018-11-15T01:50:49+00:00" + "time": "2018-12-04T01:01:32+00:00" }, { "name": "orchestra/testbench-core", - "version": "v3.7.6", + "version": "v3.7.7", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "6cdbb96c26b0532c3ff659a0eab9cac5a114dd95" + "reference": "b5c97f3f3ae488c9e92196c2a7fcf3def9d23e36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/6cdbb96c26b0532c3ff659a0eab9cac5a114dd95", - "reference": "6cdbb96c26b0532c3ff659a0eab9cac5a114dd95", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/b5c97f3f3ae488c9e92196c2a7fcf3def9d23e36", + "reference": "b5c97f3f3ae488c9e92196c2a7fcf3def9d23e36", "shasum": "" }, "require": { @@ -2772,12 +3671,12 @@ "php": ">=7.1" }, "require-dev": { - "laravel/framework": "~5.7.4", + "laravel/framework": "~5.7.14", "mockery/mockery": "^1.0", "phpunit/phpunit": "^7.0" }, "suggest": { - "laravel/framework": "Required for testing (~5.7.4).", + "laravel/framework": "Required for testing (~5.7.14).", "mockery/mockery": "Allow to use Mockery for testing (^1.0).", "orchestra/testbench-browser-kit": "Allow to use legacy Laravel BrowserKit for testing (~3.7).", "orchestra/testbench-dusk": "Allow to use Laravel Dusk for testing (~3.7).", @@ -2815,7 +3714,7 @@ "orchestral", "testing" ], - "time": "2018-11-13T02:38:23+00:00" + "time": "2018-12-04T00:47:44+00:00" }, { "name": "phar-io/manifest", @@ -3450,16 +4349,16 @@ }, { "name": "phpunit/phpunit", - "version": "7.4.4", + "version": "7.5.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b1be2c8530c4c29c3519a052c9fb6cee55053bbd" + "reference": "2cb759721e53bc05f56487f628c6b9fbb6c18746" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b1be2c8530c4c29c3519a052c9fb6cee55053bbd", - "reference": "b1be2c8530c4c29c3519a052c9fb6cee55053bbd", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2cb759721e53bc05f56487f628c6b9fbb6c18746", + "reference": "2cb759721e53bc05f56487f628c6b9fbb6c18746", "shasum": "" }, "require": { @@ -3480,7 +4379,7 @@ "phpunit/php-timer": "^2.0", "sebastian/comparator": "^3.0", "sebastian/diff": "^3.0", - "sebastian/environment": "^3.1 || ^4.0", + "sebastian/environment": "^4.0", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", "sebastian/object-enumerator": "^3.0.3", @@ -3504,7 +4403,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -3530,7 +4429,7 @@ "testing", "xunit" ], - "time": "2018-11-14T16:52:02+00:00" + "time": "2019-02-01T05:24:07+00:00" }, { "name": "react/event-loop", @@ -3785,28 +4684,31 @@ }, { "name": "sebastian/environment", - "version": "4.0.1", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f" + "reference": "6fda8ce1974b62b14935adc02a9ed38252eca656" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/febd209a219cea7b56ad799b30ebbea34b71eb8f", - "reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6fda8ce1974b62b14935adc02a9ed38252eca656", + "reference": "6fda8ce1974b62b14935adc02a9ed38252eca656", "shasum": "" }, "require": { "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^7.4" + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3831,7 +4733,7 @@ "environment", "hhvm" ], - "time": "2018-11-25T09:31:21+00:00" + "time": "2019-02-01T05:27:49+00:00" }, { "name": "sebastian/exporter", @@ -4183,16 +5085,16 @@ }, { "name": "spatie/phpunit-watcher", - "version": "1.8.0", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/spatie/phpunit-watcher.git", - "reference": "0e938021326609d5a081b3579123438f9a7a4296" + "reference": "45256ac3c3c49b7d4cef2c383132785fd45afc91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/phpunit-watcher/zipball/0e938021326609d5a081b3579123438f9a7a4296", - "reference": "0e938021326609d5a081b3579123438f9a7a4296", + "url": "https://api.github.com/repos/spatie/phpunit-watcher/zipball/45256ac3c3c49b7d4cef2c383132785fd45afc91", + "reference": "45256ac3c3c49b7d4cef2c383132785fd45afc91", "shasum": "" }, "require": { @@ -4234,7 +5136,7 @@ "phpunit-watcher", "spatie" ], - "time": "2018-11-12T15:25:46+00:00" + "time": "2019-01-10T22:47:54+00:00" }, { "name": "theseer/tokenizer", @@ -4278,20 +5180,21 @@ }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -4324,7 +5227,7 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-12-25T11:19:39+00:00" }, { "name": "yosymfony/resource-watcher", diff --git a/config/workshop.php b/config/workshop.php index b1fe5d4..16c53cd 100644 --- a/config/workshop.php +++ b/config/workshop.php @@ -14,11 +14,12 @@ /* |-------------------------------------------------------------------------- - | + | Package base path |-------------------------------------------------------------------------- - | + | This is the base path where all package specific files and folders are + | stored. */ - 'basePath' => resource_path(env('WORKSHOP_BASE_PATH', 'laratomics')), + 'basePath' => resource_path(env('WORKSHOP_BASE_PATH', 'patternlib')), /* |-------------------------------------------------------------------------- @@ -27,6 +28,15 @@ | Here you configure the path where your patterns are stored. This should be | a subdirectory of the package's basePath. */ - 'patternPath' => resource_path(env('WORKSHOP_PATTERN_PATH', 'laratomics/patterns')) + 'patternPath' => resource_path(env('WORKSHOP_PATTERN_PATH', 'patternlib/patterns')), + + /* + |-------------------------------------------------------------------------- + | Global dependencies file + |-------------------------------------------------------------------------- + | The name of the file, that contains global resources like fonts, styles + | and javascript libs loaded via a CDN. + */ + 'resourcesFile' => 'resources.json' ]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 32363ab..e4c4b0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,6 +2,63 @@ "requires": true, "lockfileVersion": 1, "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "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.3.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -41,6 +98,12 @@ } } }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, "adjust-sourcemap-loader": { "version": "1.2.0", "resolved": "http://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz", @@ -145,6 +208,12 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, "ansi-gray": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", @@ -373,6 +442,12 @@ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "async": { "version": "1.5.2", "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", @@ -1443,11 +1518,6 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "bootstrap": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.3.tgz", - "integrity": "sha512-rDFIzgXcof0jDyjNosjv4Sno77X4KuPeFxG2XZZv1/Kc8DRVGVADdoQyyOVDwPqL36DDmtCQbrpMCqvpPLJQ0w==" - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1820,6 +1890,12 @@ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + }, "camel-case": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", @@ -1945,6 +2021,12 @@ "supports-color": "^2.0.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -1988,6 +2070,12 @@ "safe-buffer": "^5.0.1" } }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, "clap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", @@ -2037,11 +2125,25 @@ } } }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, "clipboard": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz", "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==", - "optional": true, "requires": { "good-listener": "^1.2.2", "select": "^1.1.2", @@ -3059,6 +3161,12 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -3146,8 +3254,7 @@ "delegate": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, "delegates": { "version": "1.0.0", @@ -3234,6 +3341,15 @@ "buffer-indexof": "^1.0.0" } }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", @@ -3647,12 +3763,223 @@ "estraverse": "^4.1.1" } }, + "eslint": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", + "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "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.3.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "globals": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", + "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", + "dev": true + }, + "js-yaml": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-plugin-vue": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.1.0.tgz", + "integrity": "sha512-C7avvbGLb9J1PyGiFolPcGR4ljUc+dKm5ZJdrUKXwXFxHHx4SqOmRI29AsFyW7PbCGcnOvIlaq7NJS6HDIak+g==", + "dev": true, + "requires": { + "vue-eslint-parser": "^4.0.2" + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", + "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "acorn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.6.tgz", + "integrity": "sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA==", + "dev": true + } + } + }, "esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", @@ -4026,6 +4353,28 @@ } } }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -4143,6 +4492,12 @@ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "fastparse": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", @@ -4177,6 +4532,16 @@ "object-assign": "^4.1.0" } }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, "file-loader": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz", @@ -4303,6 +4668,18 @@ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", "dev": true }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, "flatten": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", @@ -4489,7 +4866,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -4510,12 +4888,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4530,17 +4910,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -4657,7 +5040,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -4669,6 +5053,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4683,6 +5068,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4690,12 +5076,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -4714,6 +5102,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -4794,7 +5183,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -4806,6 +5196,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -4891,7 +5282,8 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -4927,6 +5319,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4946,6 +5339,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4989,12 +5383,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -5016,6 +5412,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -5248,7 +5650,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "optional": true, "requires": { "delegate": "^3.1.2" } @@ -5812,6 +6213,12 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, "imagemin": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-5.3.1.tgz", @@ -6033,6 +6440,24 @@ "import-from": "^2.1.0" } }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, "import-from": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", @@ -6095,18 +6520,138 @@ "wrappy": "1" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "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.3.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "internal-ip": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", @@ -6458,6 +7003,12 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -6591,11 +7142,6 @@ "is-object": "^1.0.1" } }, - "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" - }, "js-base64": { "version": "2.4.9", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", @@ -6605,8 +7151,7 @@ "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "js-yaml": { "version": "3.7.0", @@ -6663,6 +7208,12 @@ "jsonify": "~0.0.0" } }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -6988,6 +7539,16 @@ "invert-kv": "^1.0.0" } }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, "limiter": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz", @@ -7253,6 +7814,11 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" + }, "lodash.mergewith": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", @@ -7330,7 +7896,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } @@ -7417,6 +7982,11 @@ "object-visit": "^1.0.0" } }, + "marked": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.2.tgz", + "integrity": "sha512-fdZvBa7/vSQIZCi4uuwo2N3q+7jJURpMVCcbaX0S1Mg65WZ5ilXvC67MviJAsdjqqgD+CEq4RKo5AYGgINkVAA==" + }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", @@ -7864,6 +8434,12 @@ } } }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, "nan": { "version": "2.11.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", @@ -7889,6 +8465,12 @@ "to-regex": "^3.0.1" } }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -8344,6 +8926,28 @@ "is-wsl": "^1.1.0" } }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, "optipng-bin": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", @@ -8524,6 +9128,15 @@ "no-case": "^2.2.0" } }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-asn1": { "version": "5.1.1", "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", @@ -8733,6 +9346,12 @@ } } }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, "pngquant-bin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-4.0.0.tgz", @@ -10340,6 +10959,12 @@ } } }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", @@ -10384,6 +11009,12 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -10783,6 +11414,12 @@ "integrity": "sha512-VncXxOF6uFlYog5prG2j+e2UGJeam5MfNiJnB/qEgo4KTnMm2XrELCg4rNZ6IlaEUZnGlb8aB6lXowCRQtTkkA==", "dev": true }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", @@ -11001,6 +11638,27 @@ } } }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -11059,6 +11717,15 @@ "inherits": "^2.0.1" } }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -11228,8 +11895,7 @@ "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "optional": true + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" }, "select-hose": { "version": "2.0.0", @@ -11464,6 +12130,34 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -12141,6 +12835,75 @@ "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", "dev": true }, + "table": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.2.tgz", + "integrity": "sha512-f8mJmuu9beQEDkKHLzOv4VxVYlU68NpdzjbGPl69i4Hx0sTopJuNxuzJd17iV2h24dAfa93u794OnDA5jqXvfQ==", + "dev": true, + "requires": { + "ajv": "^6.6.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "tapable": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", @@ -12189,6 +12952,12 @@ "uuid": "^3.0.1" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "tfunk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", @@ -12293,8 +13062,16 @@ "tiny-emitter": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", - "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==", - "optional": true + "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } }, "to-absolute-glob": { "version": "0.1.1", @@ -12422,6 +13199,12 @@ "glob": "^7.1.2" } }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -12440,6 +13223,15 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", @@ -12890,6 +13682,16 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, + "v-tooltip": { + "version": "2.0.0-rc.33", + "resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.0.0-rc.33.tgz", + "integrity": "sha1-ePfY6cNCZWIr5lup3HjGfx3AK3M=", + "requires": { + "lodash.merge": "^4.6.0", + "popper.js": "^1.12.9", + "vue-resize": "^0.4.3" + } + }, "vali-date": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", @@ -12913,9 +13715,9 @@ "dev": true }, "vee-validate": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-2.1.3.tgz", - "integrity": "sha512-j8/3z3AoW2qAzlUmBYOm/frUsGgAsRM2mGQTgDkTZj9O92aifgx61JXWzh8WKI/r2PixBfWfSE1JqUh1L8W4vw==" + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-2.1.7.tgz", + "integrity": "sha512-IyPDTTvIRY6o9y14jXlgfY76Qv+hmvYDwNaMn9JY5KbQN8a1tJAu7H/+a/+EdHg1w8Zl9tsdG8lndGqY1lyMzQ==" }, "vendors": { "version": "1.0.2", @@ -13010,9 +13812,65 @@ } }, "vue": { - "version": "2.5.17", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.17.tgz", - "integrity": "sha512-mFbcWoDIJi0w0Za4emyLiW72Jae0yjANHbCVquMKijcavBGypqlF7zHRgMa5k4sesdv7hv2rB4JPdZfR+TPfhQ==" + "version": "2.5.22", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.22.tgz", + "integrity": "sha512-pxY3ZHlXNJMFQbkjEgGVMaMMkSV1ONpz+4qB55kZuJzyJOhn6MSy/YZdzhdnumegNzVTL/Dn3Pp4UrVBYt1j/g==" + }, + "vue-clickaway": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/vue-clickaway/-/vue-clickaway-2.2.2.tgz", + "integrity": "sha512-25SpjXKetL06GLYoLoC8pqAV6Cur9cQ//2g35GRFBV4FgoljbZZjTINR8g2NuVXXDMLSUXaKx5dutgO4PaDE7A==", + "requires": { + "loose-envify": "^1.2.0" + } + }, + "vue-eslint-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-4.0.3.tgz", + "integrity": "sha512-AUeQsYdO6+7QXCems+WvGlrXd37PHv/zcRQSQdY1xdOMwdFAPEnMBsv7zPvk0TPGulXkK/5p/ITgrjiYB7k3ag==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.1.0", + "esquery": "^1.0.1", + "lodash": "^4.17.11" + }, + "dependencies": { + "acorn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.6.tgz", + "integrity": "sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } }, "vue-hot-reload-api": { "version": "2.3.1", @@ -13088,6 +13946,11 @@ } } }, + "vue-resize": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-0.4.4.tgz", + "integrity": "sha512-Lb/cnE2N9Y42ZJPw8wpjkpuX5a9ReerWNGcQRcbNCwfCnkHG6++FurNNmLIdU8dcCTH4c5rtTPdxBqFoRMK2cQ==" + }, "vue-router": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.2.tgz", @@ -13104,9 +13967,9 @@ } }, "vue-template-compiler": { - "version": "2.5.17", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz", - "integrity": "sha512-63uI4syCwtGR5IJvZM0LN5tVsahrelomHtCxvRkZPJ/Tf3ADm1U1wG6KWycK3qCfqR+ygM5vewUvmJ0REAYksg==", + "version": "2.5.22", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.22.tgz", + "integrity": "sha512-1VTw/NPTUeHNiwhkq6NkFzO7gYLjFCueBN0FX8NEiQIemd5EUMQ5hxrF7O0zCPo5tae+U9S/scETPea+hIz8Eg==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -13120,9 +13983,9 @@ "dev": true }, "vuex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz", - "integrity": "sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.0.tgz", + "integrity": "sha512-mdHeHT/7u4BncpUZMlxNaIdcN/HIt1GsGG5LKByArvYG/v6DvHcOxvDCts+7SRdCoIRGllK8IMZvQtQXLppDYg==" }, "ware": { "version": "1.3.0", @@ -13623,6 +14486,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "ws": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", diff --git a/package.json b/package.json index f5698f1..f0787ac 100644 --- a/package.json +++ b/package.json @@ -4,23 +4,31 @@ "dev": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --display-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", - "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" + "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "lint": "eslint --ext .js,.vue resources/js/", + "lint-fix": "eslint --ext .js,.vue resources/js/ --fix" }, "devDependencies": { "browser-sync": "^2.23.6", "browser-sync-webpack-plugin": "^1.2.0", "cross-env": "^5.0.1", - "laravel-mix": "^1.7.2" + "eslint": "^5.12.1", + "eslint-plugin-vue": "^5.0.0", + "laravel-mix": "^1.7.2", + "vue-template-compiler": "^2.5.22" }, "dependencies": { "axios": "^0.17.1", + "clipboard": "^2.0.4", "es6-promise": "^4.2.5", "marked": "^0.5.2", "normalize.css": "^8.0.1", "prismjs": "^1.15.0", - "vee-validate": "^2.1.3", - "vue": "^2.5.13", + "v-tooltip": "^2.0.0-rc.33", + "vee-validate": "^2.1.7", + "vue": "^2.5.22", + "vue-clickaway": "^2.2.2", "vue-router": "^3.0.2", - "vuex": "^3.0.1" + "vuex": "^3.1.0" } } diff --git a/public/css/app.css b/public/css/app.css index 45297c8..9c05cfe 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -1 +1,1710 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--brandMain:#03314b;--brandDark:#02273c;--brandCon:#fff621;--positive:#10e2ab;--alert:#ff4f4f;--warning:#ffb421;--inactive:#b9c5c5;--headerheight:66px;--gap:1rem}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;font-family:Roboto Mono,sans-serif;font-size:100%}body{background:var(--brandMain,#03314b)}:focus{outline-color:var(--positive,#10e2ab);outline-offset:-2px;outline-style:dashed;outline-width:1px}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background:#03314b}::-webkit-scrollbar-thumb{border-radius:1rem;background-color:#001b22}.window{height:100vh;grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:var(--headerheight) auto;grid-template-areas:"header header header header" "main main main main"}.view,.view--inner,.window{display:grid;overflow:hidden}.view,.view--inner{grid-area:main;grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr var(--headerheight)}@media (max-width:599px){.view,.view--inner{grid-template-areas:"code code code code" "view view view view" "view view view view" "footer footer footer footer"}}@media (min-width:600px){.view,.view--inner{grid-template-areas:"code code code code" "view view view view" "view view view view" "footer footer footer footer"}}@media (min-width:1200px){.view,.view--inner{grid-template-areas:"code view view view" "code view view view" "code view view view" ".... footer footer footer"}}.view--inner{grid-area:code/code/footer/footer}.u-hide{display:none!important}.u-right{text-align:right}@-webkit-keyframes slideIn{0%{opacity:0;-webkit-transform:scaleX(.5) translateX(-1000px);transform:scaleX(.5) translateX(-1000px)}75%{opacity:1}to{-webkit-transform:scaleX(1) translateX(0);transform:scaleX(1) translateX(0)}}@keyframes slideIn{0%{opacity:0;-webkit-transform:scaleX(.5) translateX(-1000px);transform:scaleX(.5) translateX(-1000px)}75%{opacity:1}to{-webkit-transform:scaleX(1) translateX(0);transform:scaleX(1) translateX(0)}}@-webkit-keyframes dropIn{0%{opacity:0;-webkit-transform:scaleY(.5) translateY(-1000px);transform:scaleY(.5) translateY(-1000px)}75%{opacity:1}to{-webkit-transform:scaleY(1) translateY(0);transform:scaleY(1) translateY(0)}}@keyframes dropIn{0%{opacity:0;-webkit-transform:scaleY(.5) translateY(-1000px);transform:scaleY(.5) translateY(-1000px)}75%{opacity:1}to{-webkit-transform:scaleY(1) translateY(0);transform:scaleY(1) translateY(0)}}.a-slideIn{-webkit-animation-name:slideIn;animation-name:slideIn;-webkit-animation-timing-function:cubic-bezier(.19,1,.22,1);animation-timing-function:cubic-bezier(.19,1,.22,1);-webkit-animation-iteration-count:1;animation-iteration-count:1}.a-dropIn,.a-slideIn{-webkit-animation-duration:.3s;animation-duration:.3s}.a-dropIn{-webkit-animation-name:dropIn;animation-name:dropIn;-webkit-animation-timing-function:cubic-bezier(.19,1,.22,1);animation-timing-function:cubic-bezier(.19,1,.22,1);-webkit-animation-iteration-count:1;animation-iteration-count:1}a{color:inherit;display:inline-block}.back{padding:.5rem 1rem}.btn--primary,.btn--secondary{background:none;border:1px solid #fff;color:#fff;margin:0 1rem 1rem 0;padding:0;position:relative;white-space:nowrap}.btn--primary>span,.btn--secondary>span{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;left:0;padding:1rem;position:relative;top:0;-webkit-transform:translate(5px,-5px);transform:translate(5px,-5px);-webkit-transition:-webkit-transform .15s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .15s cubic-bezier(.4,0,.2,1);transition:transform .15s cubic-bezier(.4,0,.2,1);transition:transform .15s cubic-bezier(.4,0,.2,1),-webkit-transform .15s cubic-bezier(.4,0,.2,1);z-index:1}.btn--primary>span>i,.btn--secondary>span>i{margin-right:.5rem}.btn--primary:hover>span,.btn--secondary:hover>span{-webkit-transform:translate(2px,-2px);transform:translate(2px,-2px)}.btn--primary>span{background:#fff;color:var(--brandMain,#03314b)}.btn--secondary>span{background:var(--brandMain,#03314b);border:1px solid #fff;color:#fff}.btn--sm{height:auto}.btn--sm>span{padding:.25rem .5rem;-webkit-transform:translate(3px,-3px);transform:translate(3px,-3px)}.btn--sm:hover>span{-webkit-transform:translate(0);transform:translate(0)}.btn--la{min-height:50px;min-width:calc(100px + 2rem)}.btn--cta>span{background:var(--brandCon,#fff621);color:var(--brandMain,#03314b)}.toggle-wrap{width:1rem;height:1rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:2px solid #fff;border-radius:1rem;-webkit-box-shadow:0 0 0 0 var(--positive,#10e2ab);box-shadow:0 0 0 0 var(--positive,#10e2ab);display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 .5rem;position:relative;-webkit-transition:box-shadow .15s ease-in;transition:box-shadow .15s ease-in;width:2rem}.toggle-wrap:focus-within{-webkit-box-shadow:0 0 20px 2px var(--positive,#10e2ab);box-shadow:0 0 20px 2px var(--positive,#10e2ab)}.toggle-wrap .toggle{width:100%;height:100%;opacity:0;position:relative;z-index:auto}.toggle-wrap .toggle+div{width:13px;height:13px;background:#fff;border:1px solid var(--brandMain);border-radius:100%;content:"";display:block;left:1px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:-webkit-transform .15s cubic-bezier(.19,1,.22,1);transition:-webkit-transform .15s cubic-bezier(.19,1,.22,1);transition:transform .15s cubic-bezier(.19,1,.22,1);transition:transform .15s cubic-bezier(.19,1,.22,1),-webkit-transform .15s cubic-bezier(.19,1,.22,1);position:absolute}.toggle-wrap .toggle:checked+div{-webkit-transform:translate(14px,-50%);transform:translate(14px,-50%)}.toggle-wrap span{display:none}.toggle--more{background:none;border:none;color:#fff;font-size:1rem}.toggle--more.active,.toggle--more:hover{color:#10e2ab;color:var(--positive,#10e2ab)}.form{max-width:50rem;width:100%}.form-group{padding:var(--gap,1rem) 0}.form-group--end{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem 0}.form-group+.form-group--end{margin-top:1rem}.form-group--end a{margin:0 2rem;padding:.5rem 1rem;text-decoration:none}.form-group--end a>span{display:block;-webkit-transform:translate(5px,-5px);transform:translate(5px,-5px)}label{margin-bottom:1rem}label>span{display:block}.label-hint{font-size:.8rem}input:not([type=checkbox]),textarea{background:transparent;border:1px solid #fff;color:inherit;margin:var(--gap,1rem) 0;padding:1rem;width:100%}textarea{min-height:200px}.error{color:var(--alert,#ff4f4f);display:inline-block}.headline--one,h1{font-family:"Noto serif",serif;font-size:3.75rem;font-weight:700}.headline--one>small,h1>small{display:block;font-size:2rem}.headline--two,h2{font-family:Roboto Mono,serif;font-size:1rem;font-weight:400}ul{color:inherit;list-style:none;margin:0;padding:0}.header{background:var(--brandDark);height:var(--headerheight);grid-area:header}.dashboard{-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-area:code/code/view/view;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.code,.dashboard{display:-webkit-box;display:-ms-flexbox;display:flex;padding:var(--gap,1rem)}.code{grid-area:code}@media (min-width:600px){.code{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (min-width:1200px){.code{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.code-el{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-bottom:2rem}.code-lang{margin:0}.code-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 0 1rem;position:relative}.code-header:after{background:-webkit-gradient(linear,left top,left bottom,from(#03314b),to(rgba(3,49,75,0)));background:linear-gradient(180deg,#03314b,rgba(3,49,75,0));bottom:-1rem;content:"";display:block;height:1rem;left:0;position:absolute;width:calc(100% - 8px);z-index:1}.code-type{display:inline-block}.code-tabs{height:100%;overflow:auto;padding-bottom:1rem;position:relative}.code-tabs .tab{width:100%;height:100%;left:0;position:absolute;top:0}.status-current,.status-option:before{width:1rem;height:1rem;background:var(--inactive,#b9c5c5);border-radius:100%;margin:0 .5rem 0 0}.accepted.status-current,.accepted.status-option:before{background:var(--positive,#10e2ab)}.rejected.status-current,.rejected.status-option:before{background:var(--alert,#ff4f4f)}.toCheck.status-current,.toCheck.status-option:before{background:var(--warning,#ffb421)}.wip.status-current,.wip.status-option:before{background:#fff}.preview{grid-area:view;max-height:100%;max-width:100%;position:relative;overflow:auto}.preview iframe{width:100%}.preview-infosWrap{background:var(--brandMain,#03314b);font-family:Arial,sans-serif;font-size:.75rem;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;left:0;padding:var(--gap,1rem);position:-webkit-sticky;position:sticky;top:0;width:100%;z-index:auto}.preview-infos,.preview-infosWrap{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.preview-optionsWrap{position:relative;color:red}.preview-options{background:#02273c;background:var(--brandDark,#02273c);min-width:10rem;padding:0;position:absolute;right:0;top:1.2rem;z-index:1}.preview-option{background:transparent;border:0;color:#fff;cursor:pointer;padding:calc(var(--gap, $l-gap) / 2) var(--gap,1rem);text-align:left;text-decoration:none;width:100%}.preview-option:hover{background:#03314b;background:var(--brandMain,#03314b)}.preview-description{background:rgba(3,49,75,.9);left:0;margin:0;padding:1rem;position:absolute;top:100%;width:100%;z-index:1}.statusbar{padding:0 .5rem;position:relative}.status-current{cursor:pointer;margin-right:0}.status-menue{background:var(--brandDark,#02273c);left:-.5rem;padding:calc(var(--gap, $l-gap) / 2) 0;position:absolute;top:1.2rem;z-index:500}.status-option{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:transparent;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;padding:calc(var(--gap, $l-gap) / 2) var(--gap,1rem)}.status-option:before{display:inline-block;content:""}.status-option:hover{background:var(--brandMain,#03314b)}.project-navigation{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.project-navigation a{text-decoration:none}.patterns{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;width:100%}.patterns--sub{background:var(--brandDark,#02273c);left:0;position:absolute;top:2rem;width:100%;z-index:500}.pattern{cursor:pointer;font-size:.875rem;padding:0;position:relative;text-align:center;-webkit-transition:opacity .25s;transition:opacity .25s;min-width:10rem}.pattern a,.pattern span{display:block;padding:.5rem var(--gap,1rem)}.pattern:not(:first-child){border-left:1px solid hsla(0,0%,100%,.1)}.patterns:hover .pattern:not(:hover){opacity:.5}.pattern>.patterns--sub{overflow:hidden;max-height:0;margin:0;padding:0}.pattern>.patterns--sub .pattern{border:none;text-align:left}.pattern>.patterns--sub .patterns--sub{position:static}.pattern>.patterns--sub .patterns--sub .pattern{padding:0 0 0 .5rem}.pattern i{-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.pattern.active{opacity:1!important}.pattern.active>.patterns--sub{max-height:120em}.pattern.active>a>i{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.popUp{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;top:0;width:100%;z-index:999}.popUp .popUp-inner{padding:var(--gap,1rem)}.darken,.popUp .popUp-inner{background:var(--brandMain,#03314b)}.darken{height:100%;left:0;opacity:.95;position:fixed;top:0;width:100%;z-index:-1}.popUp-controls{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.footer{height:var(--headerheight);grid-area:footer;padding:var(--gap,1rem);text-align:right}.project-info{text-align:center}.project-name{font-family:sans-serif;font-size:.75rem}.u-center{text-align:center}.navbar-laravel{background-color:#fff;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.04);box-shadow:0 2px 4px rgba(0,0,0,.04)}.state-todo{color:red}.state-review{color:orange}.state-done{color:#228b22}.design{max-height:500px;max-width:1200px} \ No newline at end of file +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #272822; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #f8f8f2; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #f92672; +} + +.token.boolean, +.token.number { + color: #ae81ff; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #a6e22e; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #f8f8f2; +} + +.token.atrule, +.token.attr-value, +.token.function, +.token.class-name { + color: #e6db74; +} + +.token.keyword { + color: #66d9ef; +} + +.token.regex, +.token.important { + color: #fd971f; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} +/* +Here we do define the variables that we are using across all pages of our project. +We use the CSS variables to keep theming a possibility in the future. +We also declare basically the same stuff as a SASS variable to be able to declare fallback +solutions for the browsers that can't use CSS vars. + +this would then look like this + +.el { + background: var(--var, $varFallback); +} + +*/ + +/* for layout*/ + +/* for colors*/ + +/* for animation timings*/ + +:root { + /* for colors*/ + --brandMain: #03314B; + --brandDark: #02273C; + --brandCon: #FFF621; + --positive: #10E2AB; + --alert: #FF4F4F; + --warning: #FFB421; + --inactive: #B9C5C5; + /* for layout*/ + --headerheight: 66px; + --gap: 1rem; +} + +/* +These are all our helpers that we might take from project to project. +*/ + +/* +These are the styles that we want to acces globally throughout the whoel project. +Here you can find the Grid-Definitions for the whole layout for example. +*/ + +*, +*::before, +*::after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: white; + font-family: 'Roboto Mono', sans-serif; + font-size: 100%; +} + +body { + background: var(--brandMain, #03314B); +} + +:focus { + outline-color: var(--positive, #10E2AB); + outline-offset: -2px; + outline-style: dashed; + outline-width: 1px; +} + +*::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +*::-webkit-scrollbar-track, +*::-webkit-scrollbar-corner { + background: #03314b; +} + +*::-webkit-scrollbar-thumb { + border-radius: 1rem; + background-color: #001B22; +} + +/* +This builds the basic structure of the viewport, +containing the header and the so called view, containing most of the UI. +*/ + +.window { + display: grid; + height: 100vh; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-template-rows: var(--headerheight) auto; + grid-template-areas: "header header header header" "main main main main"; + overflow: hidden; +} + +.view, +.view--inner { + display: grid; + grid-area: main; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-template-rows: 1fr 1fr 1fr var(--headerheight); + overflow: hidden; +} + +@media (max-width: 599px) { + .view, + .view--inner { + grid-template-areas: "code code code code" "view view view view" "view view view view" "footer footer footer footer"; + } +} + +@media (min-width: 600px) { + .view, + .view--inner { + grid-template-areas: "code code code code" "view view view view" "view view view view" "footer footer footer footer"; + } +} + +@media (min-width: 1200px) { + .view, + .view--inner { + grid-template-areas: "code view view view" "code view view view" "code view view view" ".... footer footer footer"; + } +} + +.view--inner { + grid-area: code / code/ footer / footer; +} + +.footer { + grid-area: footer; +} + +.u-hide { + display: none !important; +} + +.u-transparent { + opacity: 0; + pointer-events: none; +} + +.u-transparent#usage { + position: absolute; +} + +.u-center { + text-align: center; +} + +.u-right { + text-align: right; +} + +/* +These are the styles that we want to acces globally throughout the whole project. +Here you can find the definition & mixins for our transitions and animations. +These are the only ones that are allowed. +*/ + +@-webkit-keyframes slideIn { + 0% { + opacity: 0; + -webkit-transform: scaleX(0.5) translateX(-1000px); + transform: scaleX(0.5) translateX(-1000px); + } + + 75% { + opacity: 1; + } + + 100% { + -webkit-transform: scaleX(1) translateX(0px); + transform: scaleX(1) translateX(0px); + } +} + +@keyframes slideIn { + 0% { + opacity: 0; + -webkit-transform: scaleX(0.5) translateX(-1000px); + transform: scaleX(0.5) translateX(-1000px); + } + + 75% { + opacity: 1; + } + + 100% { + -webkit-transform: scaleX(1) translateX(0px); + transform: scaleX(1) translateX(0px); + } +} + +@-webkit-keyframes dropIn { + 0% { + opacity: 0; + -webkit-transform: scaleY(0.5) translateY(-1000px); + transform: scaleY(0.5) translateY(-1000px); + } + + 75% { + opacity: 1; + } + + 100% { + -webkit-transform: scaleY(1) translateY(0px); + transform: scaleY(1) translateY(0px); + } +} + +@keyframes dropIn { + 0% { + opacity: 0; + -webkit-transform: scaleY(0.5) translateY(-1000px); + transform: scaleY(0.5) translateY(-1000px); + } + + 75% { + opacity: 1; + } + + 100% { + -webkit-transform: scaleY(1) translateY(0px); + transform: scaleY(1) translateY(0px); + } +} + +.a-slideIn { + -webkit-animation-name: slideIn; + animation-name: slideIn; + -webkit-animation-duration: 300ms; + animation-duration: 300ms; + -webkit-animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); + animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; +} + +.a-dropIn { + -webkit-animation-name: dropIn; + animation-name: dropIn; + -webkit-animation-duration: 300ms; + animation-duration: 300ms; + -webkit-animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); + animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; +} + +.warning-includes, +.preview-menu, +.status-menue { + background: var(--brandDark, #02273C); + min-width: 10rem; + padding: calc(var(--gap, $l-gap) / 2) 0; + position: absolute; + top: 1.4rem; + z-index: 1; +} + +.warning-listItem, +.preview-option, +.status-option { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background: transparent; + cursor: pointer; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-weight: normal; + padding: calc(var(--gap, $l-gap) / 2) var(--gap, 1rem); + text-align: left; + text-decoration: none; + width: 100%; +} + +/* +These are the styles for all interactive elements that aren't buttons. +*/ + +a { + color: inherit; + display: inline-block; +} + +.back { + padding: 0.5rem 1rem; +} + +/* +These are the styles for every interactive element that is clickable but no link or doesn't look like a link. +*/ + +.btn--primary, +.btn--secondary { + background: none; + border: 1px solid #fff; + color: #fff; + margin: 0 1rem 1rem 0; + padding: 0; + position: relative; + white-space: nowrap; + text-decoration: none; +} + +.btn--primary > span, +.btn--secondary > span { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 100%; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + left: 0; + padding: 1rem; + position: relative; + top: 0; + -webkit-transform: translate(5px, -5px); + transform: translate(5px, -5px); + -webkit-transition: 150ms cubic-bezier(0.4, 0, 0.2, 1) -webkit-transform; + transition: 150ms cubic-bezier(0.4, 0, 0.2, 1) -webkit-transform; + transition: 150ms cubic-bezier(0.4, 0, 0.2, 1) transform; + transition: 150ms cubic-bezier(0.4, 0, 0.2, 1) transform, 150ms cubic-bezier(0.4, 0, 0.2, 1) -webkit-transform; + z-index: 1; +} + +.btn--primary > span > i, +.btn--secondary > span > i { + margin-right: 0.5rem; +} + +.btn--primary:hover > span, +.btn--secondary:hover > span { + -webkit-transform: translate(2px, -2px); + transform: translate(2px, -2px); +} + +.btn--primary > span { + background: white; + color: var(--brandMain, #03314B); +} + +.btn--secondary > span { + background: var(--brandMain, #03314B); + border: 1px solid white; + color: white; +} + +.btn--sm { + height: auto; +} + +.btn--sm > span { + padding: 0.25rem 0.5rem; + -webkit-transform: translate(3px, -3px); + transform: translate(3px, -3px); +} + +.btn--sm:hover > span { + -webkit-transform: translate(0px, 0px); + transform: translate(0px, 0px); +} + +.btn--la { + min-height: 50px; + min-width: calc(100px + 2rem); +} + +.btn--cta > span { + background: var(--brandCon, #FFF621); + color: var(--brandMain, #03314B); +} + +.toggle-wrap { + width: 1rem; + height: 1rem; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + border: 2px solid white; + border-radius: 1rem; + -webkit-box-shadow: 0 0 0px 0px var(--positive, #10E2AB); + box-shadow: 0 0 0px 0px var(--positive, #10E2AB); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin: 0 0.5rem; + position: relative; + -webkit-transition: 150ms ease-in box-shadow; + transition: 150ms ease-in box-shadow; + width: 2rem; +} + +.toggle-wrap:focus-within { + -webkit-box-shadow: 0 0 20px 2px var(--positive, #10E2AB); + box-shadow: 0 0 20px 2px var(--positive, #10E2AB); +} + +.toggle-wrap .toggle { + width: 100%; + height: 100%; + opacity: 0; + position: relative; + z-index: auto; +} + +.toggle-wrap .toggle + div { + width: 13px; + height: 13px; + background: white; + border: 1px solid var(--brandMain); + border-radius: 100%; + content: ''; + display: block; + left: 1px; + top: 50%; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); + -webkit-transition: 150ms cubic-bezier(0.19, 1, 0.22, 1) -webkit-transform; + transition: 150ms cubic-bezier(0.19, 1, 0.22, 1) -webkit-transform; + transition: 150ms cubic-bezier(0.19, 1, 0.22, 1) transform; + transition: 150ms cubic-bezier(0.19, 1, 0.22, 1) transform, 150ms cubic-bezier(0.19, 1, 0.22, 1) -webkit-transform; + position: absolute; +} + +.toggle-wrap .toggle:checked + div { + -webkit-transform: translate(14px, -50%); + transform: translate(14px, -50%); +} + +.toggle-wrap span { + display: none; +} + +.toggle--more { + background: none; + border: none; + color: white; + font-size: 1rem; + padding: 0 0.35rem; +} + +.toggle--more.active, +.toggle--more:hover { + color: #10E2AB; + color: var(--positive, #10E2AB); +} + +.toggle--more.shortcuts { + bottom: 0; + left: 0; + position: fixed; +} + +.toggle--showIncludes { + font-size: inherit; + text-shadow: inherit; +} + +.toggle--showIncludes:hover { + color: #fff; + text-decoration: underline; +} + +/* +These are the styles for the form elements like inputs, fieldsets & labels etc. +More special Forms might be a component. +*/ + +.form { + max-width: 50rem; + width: 100%; +} + +.form-group { + padding: var(--gap, 1rem) 0; +} + +.form-group--end { + -webkit-box-align: baseline; + -ms-flex-align: baseline; + align-items: baseline; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem 0; +} + +.form-group + .form-group--end { + margin-top: 1rem; +} + +.form-group--end a { + margin: 0 2rem; + padding: 0.5rem 1rem; + text-decoration: none; +} + +.form-group--end a > span { + display: block; + -webkit-transform: translate(5px, -5px); + transform: translate(5px, -5px); +} + +label { + margin-bottom: 1rem; +} + +label > span { + display: block; +} + +.label-hint { + font-size: 0.8rem; +} + +input:not([type="checkbox"]), +textarea { + background: transparent; + border: 1px solid white; + color: inherit; + margin: var(--gap, 1rem) 0; + padding: 1rem; + width: 100%; +} + +textarea { + min-height: 200px; +} + +.error { + color: var(--alert, #FF4F4F); + display: inline-block; +} + +/* +This is the rule set for all headings in our project. +*/ + +h1, +.headline--one { + font-family: 'Noto serif', serif; + font-size: 3.75rem; + font-weight: 700; +} + +h1 > small, +.headline--one > small { + display: block; + font-size: 2rem; +} + +h2, +.headline--two { + font-family: 'Roboto Mono', serif; + font-size: 1rem; + font-weight: 400; +} + +.welcome h2, +.welcome +.headline--two { + margin-top: 1rem; +} + +/* +These are the styles for lists. +*/ + +ul { + color: inherit; + list-style: none; + margin: 0; + padding: 0; +} + +.tooltip { + display: block !important; + font-family: sans-serif; + font-size: 0.75rem; + z-index: 10000; +} + +.tooltip .tooltip-inner { + background: black; + color: white; + border-radius: 16px; + padding: 5px 10px 4px; +} + +.tooltip .tooltip-arrow { + width: 0; + height: 0; + border-style: solid; + position: absolute; + margin: 5px; + border-color: black; + z-index: 1; +} + +.tooltip[x-placement^="top"] { + margin-bottom: 5px; +} + +.tooltip[x-placement^="top"] .tooltip-arrow { + border-width: 5px 5px 0 5px; + border-left-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + bottom: -5px; + left: calc(50% - 5px); + margin-top: 0; + margin-bottom: 0; +} + +.tooltip[x-placement^="bottom"] { + margin-top: 5px; +} + +.tooltip[x-placement^="bottom"] .tooltip-arrow { + border-width: 0 5px 5px 5px; + border-left-color: transparent !important; + border-right-color: transparent !important; + border-top-color: transparent !important; + top: -5px; + left: calc(50% - 5px); + margin-top: 0; + margin-bottom: 0; +} + +.tooltip[x-placement^="right"] { + margin-left: 5px; +} + +.tooltip[x-placement^="right"] .tooltip-arrow { + border-width: 5px 5px 5px 0; + border-left-color: transparent !important; + border-top-color: transparent !important; + border-bottom-color: transparent !important; + left: -5px; + top: calc(50% - 5px); + margin-left: 0; + margin-right: 0; +} + +.tooltip[x-placement^="left"] { + margin-right: 5px; +} + +.tooltip[x-placement^="left"] .tooltip-arrow { + border-width: 5px 0 5px 5px; + border-top-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + right: -5px; + top: calc(50% - 5px); + margin-left: 0; + margin-right: 0; +} + +.tooltip.popover .popover-inner { + background: #f9f9f9; + color: black; + padding: 24px; + border-radius: 5px; + -webkit-box-shadow: 0 5px 30px rgba(0, 0, 0, 0.1); + box-shadow: 0 5px 30px rgba(0, 0, 0, 0.1); +} + +.tooltip.popover .popover-arrow { + border-color: #f9f9f9; +} + +.tooltip[aria-hidden='true'] { + visibility: hidden; + opacity: 0; + -webkit-transition: opacity .15s, visibility .15s; + transition: opacity .15s, visibility .15s; +} + +.tooltip[aria-hidden='false'] { + visibility: visible; + opacity: 1; + -webkit-transition: opacity .15s; + transition: opacity .15s; +} + +/* +These are the styles for the feedback or warning boxes that giove the user feedback +*/ + +.warning { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background-color: var(--alert); + border-radius: 1rem; + color: #fff; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + padding: 0.5rem 1rem; + position: relative; + text-shadow: 1px 1px 1px rgba(58, 58, 58, 0.8); +} + +.warning-message { + color: inherit; + margin: 0; +} + +.warning-includes { + right: 0; +} + +.header { + background: var(--brandDark); + height: var(--headerheight); + grid-area: header; +} + +.project-info { + text-align: center; +} + +.project-name { + font-family: sans-serif; + font-size: 0.75rem; +} + +/* +These are the styles that are needed to render our welcome dashboard. +*/ + +.dashboard-container { + max-height: 100%; + overflow: hidden; + padding: 1rem; + padding: var(--gap, 1rem); +} + +.dashboard-container.welcome { + grid-column: span 2; +} + +.dashboard-info { + display: block; + font-family: sans-serif; + font-size: 0.75rem; + padding: 0.5rem 0; +} + +.dashboard-list { + height: 100%; + list-style-type: none; + margin-left: -1rem; + min-width: 300px; + overflow: auto; +} + +.dashboard-listItem > a { + background: transparent; + display: block; + padding: 1rem; + padding: var(--gap, 1rem); +} + +.dashboard-listItem > a:hover { + background: #02273C; + background: var(--brandDark, #02273C); + color: #10E2AB; + color: var(--positive, #10E2AB); +} + +.rejected .dashboard-list .dashboard-listItem > a:hover { + color: #FF4F4F; + color: var(--alert, #FF4F4F); +} + +.dashboard-list--empty { + margin-left: -1rem; + padding: 1rem; + padding: var(--gap, 1rem); +} + +.dashboard-list--empty span { + opacity: 0.6; +} + +pre[class*="language-"] { + background: var(--brandMain, #03314B); +} + +.code { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + grid-area: code; + padding: var(--gap, 1rem); +} + +@media (min-width: 600px) { + .code { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } +} + +@media (min-width: 1200px) { + .code { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + } +} + +.code-el { + width: 100%; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + margin-bottom: 2rem; +} + +.code-lang { + margin: 0; +} + +.code-header { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + padding: 0 0 1rem 0; + position: relative; +} + +.code-header:after { + background: -webkit-gradient(linear, left top, left bottom, from(#03314B), to(rgba(3, 49, 75, 0))); + background: linear-gradient(to bottom, #03314B, rgba(3, 49, 75, 0)); + bottom: -1rem; + content: ''; + display: block; + height: 1rem; + left: 0; + position: absolute; + width: calc(100% - 8px); + z-index: 1; +} + +.code-type { + display: inline-block; +} + +.code-tabs { + height: 100%; + overflow: auto; + padding-bottom: 1rem; + position: relative; +} + +.code-tabs .tab { + width: 100%; + height: 100%; + left: 0; + position: absolute; + top: 0; +} + +/* +These are the styles that are needed to render the pattern preview. +*/ + +.status-current, +.status-option:before { + width: 1rem; + height: 1rem; + background: var(--inactive, #B9C5C5); + border-radius: 100%; + margin: 0 0.5rem 0 0; +} + +.accepted.status-current, +.accepted.status-option:before { + background: var(--positive, #10E2AB); +} + +.rejected.status-current, +.rejected.status-option:before { + background: var(--alert, #FF4F4F); +} + +.toCheck.status-current, +.toCheck.status-option:before { + background: var(--warning, #FFB421); +} + +.wip.status-current, +.wip.status-option:before { + background: white; +} + +.preview { + grid-area: view; + max-height: 100%; + max-width: 100%; + position: relative; + overflow: auto; +} + +.preview iframe { + width: 100%; +} + +.preview-infosWrap { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background: var(--brandMain, #03314B); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + font-family: Arial, sans-serif; + font-size: 0.75rem; + height: 50px; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + left: 0; + padding: var(--gap, 1rem); + position: -webkit-sticky; + position: sticky; + top: 0; + width: 100%; + z-index: auto; +} + +.preview-infos { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} + +.preview-optionsWrap { + position: relative; + color: red; +} + +.preview-menu { + min-width: 10rem; + right: 0; + z-index: 1; +} + +.preview-option { + border: 0; + color: #fff; +} + +.preview-option:hover { + background: #03314B; + background: var(--brandMain, #03314B); +} + +.preview-description { + background: rgba(3, 49, 75, 0.9); + left: 0; + margin: 0; + padding: 1rem; + position: absolute; + top: 100%; + width: 100%; + z-index: 1; +} + +.statusbar { + padding: 0 0.45rem; + position: relative; +} + +.status-current { + cursor: pointer; + margin-right: 0; +} + +.status-menue { + left: -0.5rem; + z-index: 500; +} + +.status-option:before { + display: inline-block; + content: ''; +} + +.status-option:hover { + background: var(--brandMain, #03314B); +} + +/* +These are the styles for the project pattern navigation. +*/ + +.project-navigation { + -webkit-box-align: baseline; + -ms-flex-align: baseline; + align-items: baseline; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 100%; +} + +.project-navigation a { + text-decoration: none; +} + +.patterns { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + width: 100%; +} + +.patterns--sub { + background: var(--brandDark, #02273C); + left: 0; + position: absolute; + top: 2rem; + width: 100%; + z-index: 500; +} + +.pattern { + cursor: pointer; + font-size: 0.875rem; + padding: 0; + position: relative; + text-align: center; + -webkit-transition: opacity 250ms; + transition: opacity 250ms; + min-width: 10rem; +} + +.pattern a, +.pattern span { + display: block; + padding: 0.5rem var(--gap, 1rem); +} + +.pattern:not(:first-child) { + border-left: 1px solid rgba(255, 255, 255, 0.1); +} + +.patterns:hover .pattern:not(:hover) { + opacity: 0.5; +} + +.pattern > .patterns--sub { + overflow: hidden; + max-height: 0; + margin: 0; + padding: 0; +} + +.pattern > .patterns--sub .pattern { + border: none; + text-align: left; +} + +.pattern > .patterns--sub .patterns--sub { + position: static; +} + +.pattern > .patterns--sub .patterns--sub .pattern { + padding: 0 0 0 0.5rem; +} + +.pattern i { + -webkit-transition: -webkit-transform 0.2s; + transition: -webkit-transform 0.2s; + transition: transform 0.2s; + transition: transform 0.2s, -webkit-transform 0.2s; +} + +.pattern.active { + opacity: 1 !important; +} + +.pattern.active > .patterns--sub { + max-height: 120em; +} + +.pattern.active > a > i { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +/* +These are the styles for the confirmation modal. +*/ + +.popUp { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background: none; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 100%; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + left: 0; + position: fixed; + top: 0; + width: 100%; + z-index: 999; +} + +.popUp .popUp-inner { + background: var(--brandMain, #03314B); + padding: var(--gap, 1rem); +} + +.darken { + background: var(--brandMain, #03314B); + height: 100%; + left: 0; + opacity: 0.95; + position: fixed; + top: 0; + width: 100%; + z-index: -1; +} + +.popUp-controls { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} + +/* +These are the styles for the inline footer underneath the preview window - carrying the actions for each pattern. +*/ + +.footer { + height: var(--headerheight); + grid-area: footer; + padding: var(--gap, 1rem); + text-align: right; +} + +.project-info { + text-align: center; +} + +.project-name { + font-family: sans-serif; + font-size: 0.75rem; +} + +.popUp { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} + +.navbar-laravel { + background-color: #fff; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04); +} + +.state-todo { + color: red; +} + +.state-review { + color: orange; +} + +.state-done { + color: forestgreen; +} + +.design { + max-height: 500px; + max-width: 1200px; +} + diff --git a/public/images/loader.gif b/public/images/loader.gif new file mode 100644 index 0000000..2ddc2cb Binary files /dev/null and b/public/images/loader.gif differ diff --git a/public/js/app.js b/public/js/app.js index dec6107..8426d69 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -1 +1,42382 @@ -!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=17)}([function(t,e){t.exports=function(t,e,n,r,i,o){var a,s=t=t||{},u=typeof t.default;"object"!==u&&"function"!==u||(a=t,s=t.default);var c,l="function"==typeof s?s.options:s;if(e&&(l.render=e.render,l.staticRenderFns=e.staticRenderFns,l._compiled=!0),n&&(l.functional=!0),i&&(l._scopeId=i),o?(c=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(o)},l._ssrRegister=c):r&&(c=r),c){var f=l.functional,p=f?l.render:l.beforeCreate;f?(l._injectStyles=c,l.render=function(t,e){return c.call(e),p(t,e)}):l.beforeCreate=p?[].concat(p,c):[c]}return{esModule:a,exports:s,options:l}}},function(t,e,n){"use strict";var r=n(11),i=n(35),o=Object.prototype.toString;function a(t){return"[object Array]"===o.call(t)}function s(t){return null!==t&&"object"==typeof t}function u(t){return"[object Function]"===o.call(t)}function c(t,e){if(null!==t&&void 0!==t)if("object"!=typeof t&&(t=[t]),a(t))for(var n=0,r=t.length;n1)for(var n=1;n=0&&Math.floor(e)===e&&isFinite(t)}function d(t){return null==t?"":"object"==typeof t?JSON.stringify(t,null,2):String(t)}function h(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i-1)return t.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function _(t,e){return b.call(t,e)}function w(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var x=/-(\w)/g,$=w(function(t){return t.replace(x,function(t,e){return e?e.toUpperCase():""})}),k=w(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),C=/\B([A-Z])/g,A=w(function(t){return t.replace(C,"-$1").toLowerCase()});var T=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function O(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function S(t,e){for(var n in e)t[n]=e[n];return t}function D(t){for(var e={},n=0;n0,J=G&&G.indexOf("edge/")>0,Q=(G&&G.indexOf("android"),G&&/iphone|ipad|ipod|ios/.test(G)||"ios"===W),tt=(G&&/chrome\/\d+/.test(G),{}.watch),et=!1;if(B)try{var nt={};Object.defineProperty(nt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,nt)}catch(t){}var rt=function(){return void 0===H&&(H=!B&&!Z&&void 0!==e&&"server"===e.process.env.VUE_ENV),H},it=B&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ot(t){return"function"==typeof t&&/native code/.test(t.toString())}var at,st="undefined"!=typeof Symbol&&ot(Symbol)&&"undefined"!=typeof Reflect&&ot(Reflect.ownKeys);at="undefined"!=typeof Set&&ot(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ut=E,ct=0,lt=function(){this.id=ct++,this.subs=[]};lt.prototype.addSub=function(t){this.subs.push(t)},lt.prototype.removeSub=function(t){y(this.subs,t)},lt.prototype.depend=function(){lt.target&<.target.addDep(this)},lt.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e-1)if(o&&!_(i,"default"))a=!1;else if(""===a||a===A(t)){var u=qt(String,i.type);(u<0||s0&&(fe((c=t(c,(n||"")+"_"+u))[0])&&fe(f)&&(r[l]=gt(f.text+c[0].text),c.shift()),r.push.apply(r,c)):s(c)?fe(f)?r[l]=gt(f.text+c):""!==c&&r.push(gt(c)):fe(c)&&fe(f)?r[l]=gt(f.text+c.text):(a(e._isVList)&&o(c.tag)&&i(c.key)&&o(n)&&(c.key="__vlist"+n+"_"+u+"__"),r.push(c)));return r}(t):void 0}function fe(t){return o(t)&&o(t.text)&&!1===t.isComment}function pe(t,e){return(t.__esModule||st&&"Module"===t[Symbol.toStringTag])&&(t=t.default),u(t)?e.extend(t):t}function de(t){return t.isComment&&t.asyncFactory}function he(t){if(Array.isArray(t))for(var e=0;eDe&&Ce[n].id>t.id;)n--;Ce.splice(n+1,0,t)}else Ce.push(t);Oe||(Oe=!0,ee(Ee))}}(this)},je.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||u(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){Yt(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},je.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},je.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},je.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var Le={enumerable:!0,configurable:!0,get:E,set:E};function Ie(t,e,n){Le.get=function(){return this[e][n]},Le.set=function(t){this[e][n]=t},Object.defineProperty(t,n,Le)}function Ne(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var n=t.$options.propsData||{},r=t._props={},i=t.$options._propKeys=[];t.$parent&&$t(!1);var o=function(o){i.push(o);var a=Pt(o,e,n,t);Ot(r,o,a),o in t||Ie(t,"_props",o)};for(var a in e)o(a);$t(!0)}(t,e.props),e.methods&&function(t,e){t.$options.props;for(var n in e)t[n]=null==e[n]?E:T(e[n],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;l(e=t._data="function"==typeof e?function(t,e){pt();try{return t.call(e,e)}catch(t){return Yt(t,e,"data()"),{}}finally{dt()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props,i=(t.$options.methods,n.length);for(;i--;){var o=n[i];0,r&&_(r,o)||z(o)||Ie(t,"_data",o)}Tt(e,!0)}(t):Tt(t._data={},!0),e.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=rt();for(var i in e){var o=e[i],a="function"==typeof o?o:o.get;0,r||(n[i]=new je(t,a||E,E,Re)),i in t||Fe(t,i,o)}}(t,e.computed),e.watch&&e.watch!==tt&&function(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var i=0;i=0||n.indexOf(t[i])<0)&&r.push(t[i]);return r}return t}function dn(t){this._init(t)}function hn(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,i=t._Ctor||(t._Ctor={});if(i[r])return i[r];var o=t.name||n.options.name;var a=function(t){this._init(t)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=e++,a.options=Rt(n.options,t),a.super=n,a.options.props&&function(t){var e=t.options.props;for(var n in e)Ie(t.prototype,"_props",n)}(a),a.options.computed&&function(t){var e=t.options.computed;for(var n in e)Fe(t.prototype,n,e[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,F.forEach(function(t){a[t]=n[t]}),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=S({},a.options),i[r]=a,a}}function vn(t){return t&&(t.Ctor.options.name||t.tag)}function mn(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function gn(t,e){var n=t.cache,r=t.keys,i=t._vnode;for(var o in n){var a=n[o];if(a){var s=vn(a.componentOptions);s&&!e(s)&&yn(n,o,r,i)}}}function yn(t,e,n,r){var i=t[e];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),t[e]=null,y(n,e)}!function(t){t.prototype._init=function(t){var e=this;e._uid=ln++,e._isVue=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r,n._parentElm=e._parentElm,n._refElm=e._refElm;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Rt(fn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&ge(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,i=n&&n.context;t.$slots=ye(e._renderChildren,i),t.$scopedSlots=r,t._c=function(e,n,r,i){return cn(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return cn(t,e,n,r,i,!0)};var o=n&&n.data;Ot(t,"$attrs",o&&o.attrs||r,null,!0),Ot(t,"$listeners",e._parentListeners||r,null,!0)}(e),ke(e,"beforeCreate"),function(t){var e=ze(t.$options.inject,t);e&&($t(!1),Object.keys(e).forEach(function(n){Ot(t,n,e[n])}),$t(!0))}(e),Ne(e),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(e),ke(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(dn),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=St,t.prototype.$delete=Dt,t.prototype.$watch=function(t,e,n){if(l(e))return Ue(this,t,e,n);(n=n||{}).user=!0;var r=new je(this,t,e,n);return n.immediate&&e.call(this,r.value),function(){r.teardown()}}}(dn),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){if(Array.isArray(t))for(var r=0,i=t.length;r1?O(n):n;for(var r=O(arguments,1),i=0,o=n.length;iparseInt(this.max)&&yn(a,s[0],s,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return U}};Object.defineProperty(t,"config",e),t.util={warn:ut,extend:S,mergeOptions:Rt,defineReactive:Ot},t.set=St,t.delete=Dt,t.nextTick=ee,t.options=Object.create(null),F.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,S(t.options.components,_n),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=O(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Rt(this.options,t),this}}(t),hn(t),function(t){F.forEach(function(e){t[e]=function(t,n){return n?("component"===e&&l(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}})}(t)}(dn),Object.defineProperty(dn.prototype,"$isServer",{get:rt}),Object.defineProperty(dn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(dn,"FunctionalRenderContext",{value:tn}),dn.version="2.5.17";var wn=v("style,class"),xn=v("input,textarea,option,select,progress"),$n=function(t,e,n){return"value"===n&&xn(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},kn=v("contenteditable,draggable,spellcheck"),Cn=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),An="http://www.w3.org/1999/xlink",Tn=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},On=function(t){return Tn(t)?t.slice(6,t.length):""},Sn=function(t){return null==t||!1===t};function Dn(t){for(var e=t.data,n=t,r=t;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=En(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=En(e,n.data));return function(t,e){if(o(t)||o(e))return Mn(t,jn(e));return""}(e.staticClass,e.class)}function En(t,e){return{staticClass:Mn(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function Mn(t,e){return t?e?t+" "+e:t:e||""}function jn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,i=t.length;r-1?ir(t,e,n):Cn(e)?Sn(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):kn(e)?t.setAttribute(e,Sn(n)||"false"===n?"false":"true"):Tn(e)?Sn(n)?t.removeAttributeNS(An,On(e)):t.setAttributeNS(An,e,n):ir(t,e,n)}function ir(t,e,n){if(Sn(n))t.removeAttribute(e);else{if(K&&!X&&"TEXTAREA"===t.tagName&&"placeholder"===e&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var or={create:nr,update:nr};function ar(t,e){var n=e.elm,r=e.data,a=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var s=Dn(e),u=n._transitionClasses;o(u)&&(s=Mn(s,jn(u))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var sr,ur,cr,lr,fr,pr,dr={create:ar,update:ar},hr=/[\w).+\-_$\]]/;function vr(t){var e,n,r,i,o,a=!1,s=!1,u=!1,c=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(v=t.charAt(h));h--);v&&hr.test(v)||(c=!0)}}else void 0===i?(d=r+1,i=t.slice(0,r).trim()):m();function m(){(o||(o=[])).push(t.slice(d,r).trim()),d=r+1}if(void 0===i?i=t.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:t.slice(0,lr),key:'"'+t.slice(lr+1)+'"'}:{exp:t,key:null};ur=t,lr=fr=pr=0;for(;!Sr();)Dr(cr=Or())?Mr(cr):91===cr&&Er(cr);return{exp:t.slice(0,fr),key:t.slice(fr+1,pr)}}(t);return null===n.key?t+"="+e:"$set("+n.exp+", "+n.key+", "+e+")"}function Or(){return ur.charCodeAt(++lr)}function Sr(){return lr>=sr}function Dr(t){return 34===t||39===t}function Er(t){var e=1;for(fr=lr;!Sr();)if(Dr(t=Or()))Mr(t);else if(91===t&&e++,93===t&&e--,0===e){pr=lr;break}}function Mr(t){for(var e=t;!Sr()&&(t=Or())!==e;);}var jr,Lr="__r",Ir="__c";function Nr(t,e,n,r,i){var o;e=(o=e)._withTask||(o._withTask=function(){Xt=!0;var t=o.apply(null,arguments);return Xt=!1,t}),n&&(e=function(t,e,n){var r=jr;return function i(){null!==t.apply(null,arguments)&&Rr(e,i,n,r)}}(e,t,r)),jr.addEventListener(t,e,et?{capture:r,passive:i}:r)}function Rr(t,e,n,r){(r||jr).removeEventListener(t,e._withTask||e,n)}function Fr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};jr=e.elm,function(t){if(o(t[Lr])){var e=K?"change":"input";t[e]=[].concat(t[Lr],t[e]||[]),delete t[Lr]}o(t[Ir])&&(t.change=[].concat(t[Ir],t.change||[]),delete t[Ir])}(n),se(n,r,Nr,Rr,e.context),jr=void 0}}var Pr={create:Fr,update:Fr};function Ur(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,a=e.elm,s=t.data.domProps||{},u=e.data.domProps||{};for(n in o(u.__ob__)&&(u=e.data.domProps=S({},u)),s)i(u[n])&&(a[n]="");for(n in u){if(r=u[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n){a._value=r;var c=i(r)?"":String(r);zr(a,c)&&(a.value=c)}else a[n]=r}}}function zr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(o(r)){if(r.lazy)return!1;if(r.number)return h(n)!==h(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var qr={create:Ur,update:Ur},Yr=w(function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach(function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e});function Hr(t){var e=Vr(t.style);return t.staticStyle?S(t.staticStyle,e):e}function Vr(t){return Array.isArray(t)?D(t):"string"==typeof t?Yr(t):t}var Br,Zr=/^--/,Wr=/\s*!important$/,Gr=function(t,e,n){if(Zr.test(e))t.style.setProperty(e,n);else if(Wr.test(n))t.style.setProperty(e,n.replace(Wr,""),"important");else{var r=Xr(e);if(Array.isArray(n))for(var i=0,o=n.length;i-1?e.split(/\s+/).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function ei(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(/\s+/).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function ni(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&S(e,ri(t.name||"v")),S(e,t),e}return"string"==typeof t?ri(t):void 0}}var ri=w(function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}}),ii=B&&!X,oi="transition",ai="animation",si="transition",ui="transitionend",ci="animation",li="animationend";ii&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(si="WebkitTransition",ui="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ci="WebkitAnimation",li="webkitAnimationEnd"));var fi=B?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function pi(t){fi(function(){fi(t)})}function di(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),ti(t,e))}function hi(t,e){t._transitionClasses&&y(t._transitionClasses,e),ei(t,e)}function vi(t,e,n){var r=gi(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===oi?ui:li,u=0,c=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++u>=a&&c()};setTimeout(function(){u0&&(n=oi,l=a,f=o.length):e===ai?c>0&&(n=ai,l=c,f=u.length):f=(n=(l=Math.max(a,c))>0?a>c?oi:ai:null)?n===oi?o.length:u.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===oi&&mi.test(r[si+"Property"])}}function yi(t,e){for(;t.length1}function ki(t,e){!0!==e.data.show&&_i(e)}var Ci=function(t){var e,n,r={},u=t.modules,c=t.nodeOps;for(e=0;eh?b(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&w(0,e,p,h)}(u,d,h,n,s):o(h)?(o(t.text)&&c.setTextContent(u,""),b(u,null,h,0,h.length-1,n)):o(d)?w(0,d,0,d.length-1):o(t.text)&&c.setTextContent(u,""):t.text!==e.text&&c.setTextContent(u,e.text),o(p)&&o(l=p.hook)&&o(l=l.postpatch)&&l(t,e)}}}function C(t,e,n){if(a(n)&&o(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==o&&(a.selected=o);else if(L(Di(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));i||(t.selectedIndex=-1)}}function Si(t,e){return e.every(function(e){return!L(e,t)})}function Di(t){return"_value"in t?t._value:t.value}function Ei(t){t.target.composing=!0}function Mi(t){t.target.composing&&(t.target.composing=!1,ji(t.target,"input"))}function ji(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Li(t){return!t.componentInstance||t.data&&t.data.transition?t:Li(t.componentInstance._vnode)}var Ii={model:Ai,show:{bind:function(t,e,n){var r=e.value,i=(n=Li(n)).data&&n.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(n.data.show=!0,_i(n,function(){t.style.display=o})):t.style.display=r?o:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=Li(n)).data&&n.data.transition?(n.data.show=!0,r?_i(n,function(){t.style.display=t.__vOriginalDisplay}):wi(n,function(){t.style.display="none"})):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}}},Ni={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ri(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ri(he(e.children)):t}function Fi(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var o in i)e[$(o)]=i[o];return e}function Pi(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Ui={name:"transition",props:Ni,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(function(t){return t.tag||de(t)})).length){0;var r=this.mode;0;var i=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return i;var o=Ri(i);if(!o)return i;if(this._leaving)return Pi(t,i);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:s(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var u=(o.data||(o.data={})).transition=Fi(this),c=this._vnode,l=Ri(c);if(o.data.directives&&o.data.directives.some(function(t){return"show"===t.name})&&(o.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(o,l)&&!de(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=S({},u);if("out-in"===r)return this._leaving=!0,ue(f,"afterLeave",function(){e._leaving=!1,e.$forceUpdate()}),Pi(t,i);if("in-out"===r){if(de(o))return c;var p,d=function(){p()};ue(u,"afterEnter",d),ue(u,"enterCancelled",d),ue(f,"delayLeave",function(t){p=t})}}return i}}},zi=S({tag:String,moveClass:String},Ni);function qi(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Yi(t){t.data.newPos=t.elm.getBoundingClientRect()}function Hi(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-n.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete zi.mode;var Vi={Transition:Ui,TransitionGroup:{props:zi,render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=Fi(this),s=0;s-1?Pn[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Pn[t]=/HTMLUnknownElement/.test(e.toString())},S(dn.options.directives,Ii),S(dn.options.components,Vi),dn.prototype.__patch__=B?Ci:E,dn.prototype.$mount=function(t,e){return function(t,e,n){return t.$el=e,t.$options.render||(t.$options.render=mt),ke(t,"beforeMount"),new je(t,function(){t._update(t._render(),n)},E,null,!0),n=!1,null==t.$vnode&&(t._isMounted=!0,ke(t,"mounted")),t}(this,t=t&&B?zn(t):void 0,e)},B&&setTimeout(function(){U.devtools&&it&&it.emit("init",dn)},0);var Bi=/\{\{((?:.|\n)+?)\}\}/g,Zi=/[-.*+?^${}()|[\]\/\\]/g,Wi=w(function(t){var e=t[0].replace(Zi,"\\$&"),n=t[1].replace(Zi,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")});function Gi(t,e){var n=e?Wi(e):Bi;if(n.test(t)){for(var r,i,o,a=[],s=[],u=n.lastIndex=0;r=n.exec(t);){(i=r.index)>u&&(s.push(o=t.slice(u,i)),a.push(JSON.stringify(o)));var c=vr(r[1].trim());a.push("_s("+c+")"),s.push({"@binding":c}),u=i+r[0].length}return u\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,io="[a-zA-Z_][\\w\\-\\.]*",oo="((?:"+io+"\\:)?"+io+")",ao=new RegExp("^<"+oo),so=/^\s*(\/?)>/,uo=new RegExp("^<\\/"+oo+"[^>]*>"),co=/^]+>/i,lo=/^",""":'"',"&":"&"," ":"\n"," ":"\t"},go=/&(?:lt|gt|quot|amp);/g,yo=/&(?:lt|gt|quot|amp|#10|#9);/g,bo=v("pre,textarea",!0),_o=function(t,e){return t&&bo(t)&&"\n"===e[0]};function wo(t,e){var n=e?yo:go;return t.replace(n,function(t){return mo[t]})}var xo,$o,ko,Co,Ao,To,Oo,So,Do=/^@|^v-on:/,Eo=/^v-|^@|^:/,Mo=/([^]*?)\s+(?:in|of)\s+([^]*)/,jo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Lo=/^\(|\)$/g,Io=/:(.*)$/,No=/^:|^v-bind:/,Ro=/\.[^.]+/g,Fo=w(Qi);function Po(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:function(t){for(var e={},n=0,r=t.length;n]*>)","i")),p=t.replace(f,function(t,n,r){return c=r.length,ho(l)||"noscript"===l||(n=n.replace(//g,"$1").replace(//g,"$1")),_o(l,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""});u+=t.length-p.length,t=p,A(l,u-c,u)}else{var d=t.indexOf("<");if(0===d){if(lo.test(t)){var h=t.indexOf("--\x3e");if(h>=0){e.shouldKeepComment&&e.comment(t.substring(4,h)),$(h+3);continue}}if(fo.test(t)){var v=t.indexOf("]>");if(v>=0){$(v+2);continue}}var m=t.match(co);if(m){$(m[0].length);continue}var g=t.match(uo);if(g){var y=u;$(g[0].length),A(g[1],y,u);continue}var b=k();if(b){C(b),_o(r,t)&&$(1);continue}}var _=void 0,w=void 0,x=void 0;if(d>=0){for(w=t.slice(d);!(uo.test(w)||ao.test(w)||lo.test(w)||fo.test(w)||(x=w.indexOf("<",1))<0);)d+=x,w=t.slice(d);_=t.substring(0,d),$(d)}d<0&&(_=t,t=""),e.chars&&_&&e.chars(_)}if(t===n){e.chars&&e.chars(t);break}}function $(e){u+=e,t=t.substring(e)}function k(){var e=t.match(ao);if(e){var n,r,i={tagName:e[1],attrs:[],start:u};for($(e[0].length);!(n=t.match(so))&&(r=t.match(ro));)$(r[0].length),i.attrs.push(r);if(n)return i.unarySlash=n[1],$(n[0].length),i.end=u,i}}function C(t){var n=t.tagName,u=t.unarySlash;o&&("p"===r&&no(n)&&A(r),s(n)&&r===n&&A(n));for(var c=a(n)||!!u,l=t.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var c=i.length-1;c>=a;c--)e.end&&e.end(i[c].tag,n,o);i.length=a,r=a&&i[a-1].tag}else"br"===s?e.start&&e.start(t,[],!0,n,o):"p"===s&&(e.start&&e.start(t,[],!1,n,o),e.end&&e.end(t,n,o))}A()}(t,{warn:xo,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,start:function(t,o,c){var l=r&&r.ns||So(t);K&&"svg"===l&&(o=function(t){for(var e=[],n=0;n-1"+("true"===o?":("+e+")":":_q("+e+","+o+")")),$r(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Tr(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Tr(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Tr(e,"$$c")+"}",null,!0)}(t,r,i);else if("input"===o&&"radio"===a)!function(t,e,n){var r=n&&n.number,i=kr(t,"value")||"null";br(t,"checked","_q("+e+","+(i=r?"_n("+i+")":i)+")"),$r(t,"change",Tr(e,i),null,!0)}(t,r,i);else if("input"===o||"textarea"===o)!function(t,e,n){var r=t.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,u=!o&&"range"!==r,c=o?"change":"range"===r?Lr:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=Tr(e,l);u&&(f="if($event.target.composing)return;"+f),br(t,"value","("+e+")"),$r(t,c,f,null,!0),(s||a)&&$r(t,"blur","$forceUpdate()")}(t,r,i);else if(!U.isReservedTag(o))return Ar(t,r,i),!1;return!0},text:function(t,e){e.value&&br(t,"textContent","_s("+e.value+")")},html:function(t,e){e.value&&br(t,"innerHTML","_s("+e.value+")")}},isPreTag:function(t){return"pre"===t},isUnaryTag:to,mustUseProp:$n,canBeLeftOpenTag:eo,isReservedTag:Rn,getTagNamespace:Fn,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(",")}(Wo)},Jo=w(function(t){return v("type,tag,attrsList,attrsMap,plain,parent,children,attrs"+(t?","+t:""))});function Qo(t,e){t&&(Go=Jo(e.staticKeys||""),Ko=e.isReservedTag||M,function t(e){e.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||m(t.tag)||!Ko(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(Go)))}(e);if(1===e.type){if(!Ko(e.tag)&&"slot"!==e.tag&&null==e.attrsMap["inline-template"])return;for(var n=0,r=e.children.length;n|^function\s*\(/,ea=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,na={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ra={esc:"Escape",tab:"Tab",enter:"Enter",space:" ",up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete"]},ia=function(t){return"if("+t+")return null;"},oa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:ia("$event.target !== $event.currentTarget"),ctrl:ia("!$event.ctrlKey"),shift:ia("!$event.shiftKey"),alt:ia("!$event.altKey"),meta:ia("!$event.metaKey"),left:ia("'button' in $event && $event.button !== 0"),middle:ia("'button' in $event && $event.button !== 1"),right:ia("'button' in $event && $event.button !== 2")};function aa(t,e,n){var r=e?"nativeOn:{":"on:{";for(var i in t)r+='"'+i+'":'+sa(i,t[i])+",";return r.slice(0,-1)+"}"}function sa(t,e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return sa(t,e)}).join(",")+"]";var n=ea.test(e.value),r=ta.test(e.value);if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(oa[s])o+=oa[s],na[s]&&a.push(s);else if("exact"===s){var u=e.modifiers;o+=ia(["ctrl","shift","alt","meta"].filter(function(t){return!u[t]}).map(function(t){return"$event."+t+"Key"}).join("||"))}else a.push(s);return a.length&&(i+=function(t){return"if(!('button' in $event)&&"+t.map(ua).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(n?"return "+e.value+"($event)":r?"return ("+e.value+")($event)":e.value)+"}"}return n||r?e.value:"function($event){"+e.value+"}"}function ua(t){var e=parseInt(t,10);if(e)return"$event.keyCode!=="+e;var n=na[t],r=ra[t];return"_k($event.keyCode,"+JSON.stringify(t)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var ca={on:function(t,e){t.wrapListeners=function(t){return"_g("+t+","+e.value+")"}},bind:function(t,e){t.wrapData=function(n){return"_b("+n+",'"+t.tag+"',"+e.value+","+(e.modifiers&&e.modifiers.prop?"true":"false")+(e.modifiers&&e.modifiers.sync?",true":"")+")"}},cloak:E},la=function(t){this.options=t,this.warn=t.warn||gr,this.transforms=yr(t.modules,"transformCode"),this.dataGenFns=yr(t.modules,"genData"),this.directives=S(S({},ca),t.directives);var e=t.isReservedTag||M;this.maybeComponent=function(t){return!e(t.tag)},this.onceId=0,this.staticRenderFns=[]};function fa(t,e){var n=new la(e);return{render:"with(this){return "+(t?pa(t,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function pa(t,e){if(t.staticRoot&&!t.staticProcessed)return da(t,e);if(t.once&&!t.onceProcessed)return ha(t,e);if(t.for&&!t.forProcessed)return function(t,e,n,r){var i=t.for,o=t.alias,a=t.iterator1?","+t.iterator1:"",s=t.iterator2?","+t.iterator2:"";0;return t.forProcessed=!0,(r||"_l")+"(("+i+"),function("+o+a+s+"){return "+(n||pa)(t,e)+"})"}(t,e);if(t.if&&!t.ifProcessed)return va(t,e);if("template"!==t.tag||t.slotTarget){if("slot"===t.tag)return function(t,e){var n=t.slotName||'"default"',r=ya(t,e),i="_t("+n+(r?","+r:""),o=t.attrs&&"{"+t.attrs.map(function(t){return $(t.name)+":"+t.value}).join(",")+"}",a=t.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(t,e);var n;if(t.component)n=function(t,e,n){var r=e.inlineTemplate?null:ya(e,n,!0);return"_c("+t+","+ma(e,n)+(r?","+r:"")+")"}(t.component,t,e);else{var r=t.plain?void 0:ma(t,e),i=t.inlineTemplate?null:ya(t,e,!0);n="_c('"+t.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o':'
',Ca.innerHTML.indexOf(" ")>0}var Oa=!!B&&Ta(!1),Sa=!!B&&Ta(!0),Da=w(function(t){var e=zn(t);return e&&e.innerHTML}),Ea=dn.prototype.$mount;dn.prototype.$mount=function(t,e){if((t=t&&zn(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=Da(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(r){0;var i=Aa(r,{shouldDecodeNewlines:Oa,shouldDecodeNewlinesForHref:Sa,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return Ea.call(this,t,e)},dn.compile=Aa,t.exports=dn}).call(e,n(5),n(21).setImmediate)},function(t,e,n){"use strict";e.a={apiUri:"workshop/api/v1",devMode:!0}},function(t,e,n){"use strict";(function(e){var r=n(1),i=n(37),o={"Content-Type":"application/x-www-form-urlencoded"};function a(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var s,u={adapter:("undefined"!=typeof XMLHttpRequest?s=n(12):void 0!==e&&(s=n(12)),s),transformRequest:[function(t,e){return i(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t)?t:r.isArrayBufferView(t)?t.buffer:r.isURLSearchParams(t)?(a(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):r.isObject(t)?(a(e,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t)try{t=JSON.parse(t)}catch(t){}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],function(t){u.headers[t]={}}),r.forEach(["post","put","patch"],function(t){u.headers[t]=r.merge(o)}),t.exports=u}).call(e,n(6))},function(t,e,n){var r=n(0)(n(72),n(73),!1,null,null,null);t.exports=r.exports},function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r-1}function s(t,e){for(var n in e)t[n]=e[n];return t}var u={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,i=e.parent,o=e.data;o.routerView=!0;for(var a=i.$createElement,u=n.name,c=i.$route,l=i._routerViewCache||(i._routerViewCache={}),f=0,p=!1;i&&i._routerRoot!==i;)i.$vnode&&i.$vnode.data.routerView&&f++,i._inactive&&(p=!0),i=i.$parent;if(o.routerViewDepth=f,p)return a(l[u],o,r);var d=c.matched[f];if(!d)return l[u]=null,a();var h=l[u]=d.components[u];o.registerRouteInstance=function(t,e){var n=d.instances[u];(e&&n!==t||!e&&n===t)&&(d.instances[u]=e)},(o.hook||(o.hook={})).prepatch=function(t,e){d.instances[u]=e.componentInstance};var v=o.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}(c,d.props&&d.props[u]);if(v){v=o.props=s({},v);var m=o.attrs=o.attrs||{};for(var g in v)h.props&&g in h.props||(m[g]=v[g],delete v[g])}return a(h,o,r)}};var c=/[!'()*]/g,l=function(t){return"%"+t.charCodeAt(0).toString(16)},f=/%2C/g,p=function(t){return encodeURIComponent(t).replace(c,l).replace(f,",")},d=decodeURIComponent;function h(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(function(t){var n=t.replace(/\+/g," ").split("="),r=d(n.shift()),i=n.length>0?d(n.join("=")):null;void 0===e[r]?e[r]=i:Array.isArray(e[r])?e[r].push(i):e[r]=[e[r],i]}),e):e}function v(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void 0===n)return"";if(null===n)return p(e);if(Array.isArray(n)){var r=[];return n.forEach(function(t){void 0!==t&&(null===t?r.push(p(e)):r.push(p(e)+"="+p(t)))}),r.join("&")}return p(e)+"="+p(n)}).filter(function(t){return t.length>0}).join("&"):null;return e?"?"+e:""}var m=/\/?$/;function g(t,e,n,r){var i=r&&r.options.stringifyQuery,o=e.query||{};try{o=y(o)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:o,params:e.params||{},fullPath:_(e,i),matched:t?function(t){var e=[];for(;t;)e.unshift(t),t=t.parent;return e}(t):[]};return n&&(a.redirectedFrom=_(n,i)),Object.freeze(a)}function y(t){if(Array.isArray(t))return t.map(y);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=y(t[n]);return e}return t}var b=g(null,{path:"/"});function _(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var i=t.hash;return void 0===i&&(i=""),(n||"/")+(e||v)(r)+i}function w(t,e){return e===b?t===e:!!e&&(t.path&&e.path?t.path.replace(m,"")===e.path.replace(m,"")&&t.hash===e.hash&&x(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&x(t.query,e.query)&&x(t.params,e.params)))}function x(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every(function(n){var r=t[n],i=e[n];return"object"==typeof r&&"object"==typeof i?x(r,i):String(r)===String(i)})}var $,k=[String,Object],C=[String,Array],A={name:"RouterLink",props:{to:{type:k,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:C,default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,i=n.resolve(this.to,r,this.append),o=i.location,a=i.route,u=i.href,c={},l=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==l?"router-link-active":l,d=null==f?"router-link-exact-active":f,h=null==this.activeClass?p:this.activeClass,v=null==this.exactActiveClass?d:this.exactActiveClass,y=o.path?g(null,o,null,n):a;c[v]=w(r,y),c[h]=this.exact?c[v]:function(t,e){return 0===t.path.replace(m,"/").indexOf(e.path.replace(m,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,y);var b=function(t){T(t)&&(e.replace?n.replace(o):n.push(o))},_={click:T};Array.isArray(this.event)?this.event.forEach(function(t){_[t]=b}):_[this.event]=b;var x={class:c};if("a"===this.tag)x.on=_,x.attrs={href:u};else{var $=function t(e){if(e)for(var n,r=0;r=0&&(e=t.slice(r),t=t.slice(0,r));var i=t.indexOf("?");return i>=0&&(n=t.slice(i+1),t=t.slice(0,i)),{path:t,query:n,hash:e}}(i.path||""),c=e&&e.path||"/",l=u.path?D(u.path,c,n||i.append):c,f=function(t,e,n){void 0===e&&(e={});var r,i=n||h;try{r=i(t||"")}catch(t){r={}}for(var o in e)r[o]=e[o];return r}(u.query,i.query,r&&r.options.parseQuery),p=i.hash||u.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}function J(t,e){var n=K(t),r=n.pathList,i=n.pathMap,o=n.nameMap;function a(t,n,a){var s=X(t,n,!1,e),c=s.name;if(c){var l=o[c];if(!l)return u(null,s);var f=l.regex.keys.filter(function(t){return!t.optional}).map(function(t){return t.name});if("object"!=typeof s.params&&(s.params={}),n&&"object"==typeof n.params)for(var p in n.params)!(p in s.params)&&f.indexOf(p)>-1&&(s.params[p]=n.params[p]);if(l)return s.path=G(l.path,s.params),u(l,s,a)}else if(s.path){s.params={};for(var d=0;d=t.length?n():t[i]?e(t[i],function(){r(i+1)}):r(i+1)};r(0)}function gt(t){return function(e,n,r){var i=!1,o=0,s=null;yt(t,function(t,e,n,u){if("function"==typeof t&&void 0===t.cid){i=!0,o++;var c,l=wt(function(e){var i;((i=e).__esModule||_t&&"Module"===i[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:$.extend(e),n.components[u]=e,--o<=0&&r()}),f=wt(function(t){var e="Failed to resolve async component "+u+": "+t;s||(s=a(t)?t:new Error(e),r(s))});try{c=t(l,f)}catch(t){f(t)}if(c)if("function"==typeof c.then)c.then(l,f);else{var p=c.component;p&&"function"==typeof p.then&&p.then(l,f)}}}),i||r()}}function yt(t,e){return bt(t.map(function(t){return Object.keys(t.components).map(function(n){return e(t.components[n],t.instances[n],t,n)})}))}function bt(t){return Array.prototype.concat.apply([],t)}var _t="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function wt(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var xt=function(t,e){this.router=t,this.base=function(t){if(!t)if(S){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=b,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function $t(t,e,n,r){var i=yt(t,function(t,r,i,o){var a=function(t,e){"function"!=typeof t&&(t=$.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map(function(t){return n(t,r,i,o)}):n(a,r,i,o)});return bt(r?i.reverse():i)}function kt(t,e){if(e)return function(){return t.apply(e,arguments)}}xt.prototype.listen=function(t){this.cb=t},xt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},xt.prototype.onError=function(t){this.errorCbs.push(t)},xt.prototype.transitionTo=function(t,e,n){var r=this,i=this.router.match(t,this.current);this.confirmTransition(i,function(){r.updateRoute(i),e&&e(i),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach(function(t){t(i)}))},function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach(function(e){e(t)}))})},xt.prototype.confirmTransition=function(t,e,n){var r=this,i=this.current,s=function(t){a(t)&&(r.errorCbs.length?r.errorCbs.forEach(function(e){e(t)}):(o(),console.error(t))),n&&n(t)};if(w(t,i)&&t.matched.length===i.matched.length)return this.ensureURL(),s();var u=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n=0?e.slice(0,n):e)+"#"+t}function Et(t){ct?ht(Dt(t)):window.location.hash=t}function Mt(t){ct?vt(Dt(t)):window.location.replace(Dt(t))}var jt=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)},n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,function(){e.index=n,e.updateRoute(r)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(xt),Lt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=J(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ct&&!1!==t.fallback,this.fallback&&(e="hash"),S||(e="abstract"),this.mode=e,e){case"history":this.history=new Ct(this,t.base);break;case"hash":this.history=new Tt(this,t.base,this.fallback);break;case"abstract":this.history=new jt(this,t.base);break;default:0}},It={currentRoute:{configurable:!0}};function Nt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Lt.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},It.currentRoute.get=function(){return this.history&&this.history.current},Lt.prototype.init=function(t){var e=this;if(this.apps.push(t),!this.app){this.app=t;var n=this.history;if(n instanceof Ct)n.transitionTo(n.getCurrentLocation());else if(n instanceof Tt){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},Lt.prototype.beforeEach=function(t){return Nt(this.beforeHooks,t)},Lt.prototype.beforeResolve=function(t){return Nt(this.resolveHooks,t)},Lt.prototype.afterEach=function(t){return Nt(this.afterHooks,t)},Lt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Lt.prototype.onError=function(t){this.history.onError(t)},Lt.prototype.push=function(t,e,n){this.history.push(t,e,n)},Lt.prototype.replace=function(t,e,n){this.history.replace(t,e,n)},Lt.prototype.go=function(t){this.history.go(t)},Lt.prototype.back=function(){this.go(-1)},Lt.prototype.forward=function(){this.go(1)},Lt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},Lt.prototype.resolve=function(t,e,n){var r=X(t,e||this.history.current,n,this),i=this.match(r,e),o=i.redirectedFrom||i.fullPath;return{location:r,route:i,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?E(t+"/"+r):r}(this.history.base,o,this.mode),normalizedTo:r,resolved:i}},Lt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==b&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Lt.prototype,It),Lt.install=O,Lt.version="3.0.2",S&&window.Vue&&window.Vue.use(Lt);var Rt=Lt,Ft=n(23),Pt=n.n(Ft),Ut=n(29),zt=n.n(Ut),qt=n(53),Yt=n.n(qt),Ht=n(56),Vt=n.n(Ht);i.a.use(Rt);var Bt=new Rt({mode:"hash",routes:[{path:"/",component:Pt.a,name:"dashboard"},{path:"/create",component:zt.a,name:"create"},{path:"/rename/:pattern",component:Yt.a,name:"rename"},{path:"/preview/:pattern",component:Vt.a,name:"preview"}]}),Zt=function(t){if(Number(t.version.split(".")[0])>=2)t.mixin({beforeCreate:n});else{var e=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[n].concat(t.init):n,e.call(this,t)}}function n(){var t=this.$options;t.store?this.$store="function"==typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}},Wt="undefined"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function Gt(t,e){Object.keys(t).forEach(function(n){return e(t[n],n)})}var Kt=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=("function"==typeof n?n():n)||{}},Xt={namespaced:{configurable:!0}};Xt.namespaced.get=function(){return!!this._rawModule.namespaced},Kt.prototype.addChild=function(t,e){this._children[t]=e},Kt.prototype.removeChild=function(t){delete this._children[t]},Kt.prototype.getChild=function(t){return this._children[t]},Kt.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},Kt.prototype.forEachChild=function(t){Gt(this._children,t)},Kt.prototype.forEachGetter=function(t){this._rawModule.getters&&Gt(this._rawModule.getters,t)},Kt.prototype.forEachAction=function(t){this._rawModule.actions&&Gt(this._rawModule.actions,t)},Kt.prototype.forEachMutation=function(t){this._rawModule.mutations&&Gt(this._rawModule.mutations,t)},Object.defineProperties(Kt.prototype,Xt);var Jt=function(t){this.register([],t,!1)};Jt.prototype.get=function(t){return t.reduce(function(t,e){return t.getChild(e)},this.root)},Jt.prototype.getNamespace=function(t){var e=this.root;return t.reduce(function(t,n){return t+((e=e.getChild(n)).namespaced?n+"/":"")},"")},Jt.prototype.update=function(t){!function t(e,n,r){0;n.update(r);if(r.modules)for(var i in r.modules){if(!n.getChild(i))return void 0;t(e.concat(i),n.getChild(i),r.modules[i])}}([],this.root,t)},Jt.prototype.register=function(t,e,n){var r=this;void 0===n&&(n=!0);var i=new Kt(e,n);0===t.length?this.root=i:this.get(t.slice(0,-1)).addChild(t[t.length-1],i);e.modules&&Gt(e.modules,function(e,i){r.register(t.concat(i),e,n)})},Jt.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];e.getChild(n).runtime&&e.removeChild(n)};var Qt;var te=function(t){var e=this;void 0===t&&(t={}),!Qt&&"undefined"!=typeof window&&window.Vue&&ue(window.Vue);var n=t.plugins;void 0===n&&(n=[]);var r=t.strict;void 0===r&&(r=!1);var i=t.state;void 0===i&&(i={}),"function"==typeof i&&(i=i()||{}),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new Jt(t),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new Qt;var o=this,a=this.dispatch,s=this.commit;this.dispatch=function(t,e){return a.call(o,t,e)},this.commit=function(t,e,n){return s.call(o,t,e,n)},this.strict=r,oe(this,i,[],this._modules.root),ie(this,i),n.forEach(function(t){return t(e)}),Qt.config.devtools&&function(t){Wt&&(t._devtoolHook=Wt,Wt.emit("vuex:init",t),Wt.on("vuex:travel-to-state",function(e){t.replaceState(e)}),t.subscribe(function(t,e){Wt.emit("vuex:mutation",t,e)}))}(this)},ee={state:{configurable:!0}};function ne(t,e){return e.indexOf(t)<0&&e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function re(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;oe(t,n,[],t._modules.root,!0),ie(t,n,e)}function ie(t,e,n){var r=t._vm;t.getters={};var i={};Gt(t._wrappedGetters,function(e,n){i[n]=function(){return e(t)},Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})});var o=Qt.config.silent;Qt.config.silent=!0,t._vm=new Qt({data:{$$state:e},computed:i}),Qt.config.silent=o,t.strict&&function(t){t._vm.$watch(function(){return this._data.$$state},function(){0},{deep:!0,sync:!0})}(t),r&&(n&&t._withCommit(function(){r._data.$$state=null}),Qt.nextTick(function(){return r.$destroy()}))}function oe(t,e,n,r,i){var o=!n.length,a=t._modules.getNamespace(n);if(r.namespaced&&(t._modulesNamespaceMap[a]=r),!o&&!i){var s=ae(e,n.slice(0,-1)),u=n[n.length-1];t._withCommit(function(){Qt.set(s,u,r.state)})}var c=r.context=function(t,e,n){var r=""===e,i={dispatch:r?t.dispatch:function(n,r,i){var o=se(n,r,i),a=o.payload,s=o.options,u=o.type;return s&&s.root||(u=e+u),t.dispatch(u,a)},commit:r?t.commit:function(n,r,i){var o=se(n,r,i),a=o.payload,s=o.options,u=o.type;s&&s.root||(u=e+u),t.commit(u,a,s)}};return Object.defineProperties(i,{getters:{get:r?function(){return t.getters}:function(){return function(t,e){var n={},r=e.length;return Object.keys(t.getters).forEach(function(i){if(i.slice(0,r)===e){var o=i.slice(r);Object.defineProperty(n,o,{get:function(){return t.getters[i]},enumerable:!0})}}),n}(t,e)}},state:{get:function(){return ae(t.state,n)}}}),i}(t,a,n);r.forEachMutation(function(e,n){!function(t,e,n,r){(t._mutations[e]||(t._mutations[e]=[])).push(function(e){n.call(t,r.state,e)})}(t,a+n,e,c)}),r.forEachAction(function(e,n){var r=e.root?n:a+n,i=e.handler||e;!function(t,e,n,r){(t._actions[e]||(t._actions[e]=[])).push(function(e,i){var o,a=n.call(t,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:t.getters,rootState:t.state},e,i);return(o=a)&&"function"==typeof o.then||(a=Promise.resolve(a)),t._devtoolHook?a.catch(function(e){throw t._devtoolHook.emit("vuex:error",e),e}):a})}(t,r,i,c)}),r.forEachGetter(function(e,n){!function(t,e,n,r){if(t._wrappedGetters[e])return void 0;t._wrappedGetters[e]=function(t){return n(r.state,r.getters,t.state,t.getters)}}(t,a+n,e,c)}),r.forEachChild(function(r,o){oe(t,e,n.concat(o),r,i)})}function ae(t,e){return e.length?e.reduce(function(t,e){return t[e]},t):t}function se(t,e,n){var r;return null!==(r=t)&&"object"==typeof r&&t.type&&(n=e,e=t,t=t.type),{type:t,payload:e,options:n}}function ue(t){Qt&&t===Qt||Zt(Qt=t)}ee.state.get=function(){return this._vm._data.$$state},ee.state.set=function(t){0},te.prototype.commit=function(t,e,n){var r=this,i=se(t,e,n),o=i.type,a=i.payload,s=(i.options,{type:o,payload:a}),u=this._mutations[o];u&&(this._withCommit(function(){u.forEach(function(t){t(a)})}),this._subscribers.forEach(function(t){return t(s,r.state)}))},te.prototype.dispatch=function(t,e){var n=this,r=se(t,e),i=r.type,o=r.payload,a={type:i,payload:o},s=this._actions[i];if(s)return this._actionSubscribers.forEach(function(t){return t(a,n.state)}),s.length>1?Promise.all(s.map(function(t){return t(o)})):s[0](o)},te.prototype.subscribe=function(t){return ne(t,this._subscribers)},te.prototype.subscribeAction=function(t){return ne(t,this._actionSubscribers)},te.prototype.watch=function(t,e,n){var r=this;return this._watcherVM.$watch(function(){return t(r.state,r.getters)},e,n)},te.prototype.replaceState=function(t){var e=this;this._withCommit(function(){e._vm._data.$$state=t})},te.prototype.registerModule=function(t,e,n){void 0===n&&(n={}),"string"==typeof t&&(t=[t]),this._modules.register(t,e),oe(this,this.state,t,this._modules.get(t),n.preserveState),ie(this,this.state)},te.prototype.unregisterModule=function(t){var e=this;"string"==typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit(function(){var n=ae(e.state,t.slice(0,-1));Qt.delete(n,t[t.length-1])}),re(this)},te.prototype.hotUpdate=function(t){this._modules.update(t),re(this,!0)},te.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(te.prototype,ee);var ce=he(function(t,e){var n={};return de(e).forEach(function(e){var r=e.key,i=e.val;n[r]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var r=ve(this.$store,"mapState",t);if(!r)return;e=r.context.state,n=r.context.getters}return"function"==typeof i?i.call(this,e,n):e[i]},n[r].vuex=!0}),n}),le=he(function(t,e){var n={};return de(e).forEach(function(e){var r=e.key,i=e.val;n[r]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var r=this.$store.commit;if(t){var o=ve(this.$store,"mapMutations",t);if(!o)return;r=o.context.commit}return"function"==typeof i?i.apply(this,[r].concat(e)):r.apply(this.$store,[i].concat(e))}}),n}),fe=he(function(t,e){var n={};return de(e).forEach(function(e){var r=e.key,i=e.val;i=t+i,n[r]=function(){if(!t||ve(this.$store,"mapGetters",t))return this.$store.getters[i]},n[r].vuex=!0}),n}),pe=he(function(t,e){var n={};return de(e).forEach(function(e){var r=e.key,i=e.val;n[r]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var r=this.$store.dispatch;if(t){var o=ve(this.$store,"mapActions",t);if(!o)return;r=o.context.dispatch}return"function"==typeof i?i.apply(this,[r].concat(e)):r.apply(this.$store,[i].concat(e))}}),n});function de(t){return Array.isArray(t)?t.map(function(t){return{key:t,val:t}}):Object.keys(t).map(function(e){return{key:e,val:t[e]}})}function he(t){return function(e,n){return"string"!=typeof e?(n=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,n)}}function ve(t,e,n){return t._modulesNamespaceMap[n]}var me={Store:te,install:ue,version:"3.0.1",mapState:ce,mapMutations:le,mapGetters:fe,mapActions:pe,createNamespacedHelpers:function(t){return{mapState:ce.bind(null,t),mapGetters:fe.bind(null,t),mapMutations:le.bind(null,t),mapActions:pe.bind(null,t)}}},ge=n(8);i.a.use(me);var ye=new me.Store({state:{config:ge.a,appInfo:{},navi:{activeMain:"",activeSub:"",reload:!1}},mutations:{appInfo:function(t,e){t.appInfo=e.data},toggleMainMenu:function(t,e){t.navi.activeMain=e,t.navi.activeSub=""},toggleSubMenu:function(t,e){t.navi.activeSub=e},resetMainMenu:function(t){t.navi.activeMain=""},resetSubMenu:function(t){t.navi.activeSub=""},reloadNavi:function(t,e){t.navi.reload=e}}}),be=function(t){return Ve(["text","password","search","email","tel","url","textarea","number"],t.type)},_e=function(t){return Ve(["radio","checkbox"],t.type)},we=function(t,e){return t.getAttribute("data-vv-"+e)},xe=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return t.every(function(t){return null===t||void 0===t})},$e=function(t,e){if(t instanceof RegExp&&e instanceof RegExp)return $e(t.source,e.source)&&$e(t.flags,e.flags);if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(var n=0;n0;)e[n]=arguments[n+1];if(Me(Object.assign))return Object.assign.apply(Object,[t].concat(e));if(null==t)throw new TypeError("Cannot convert undefined or null to object");var r=Object(t);return e.forEach(function(t){null!=t&&Object.keys(t).forEach(function(e){r[e]=t[e]})}),r},Re=0,Fe="{id}",Pe=function(t,e){for(var n=Array.isArray(t)?t:Ie(t),r=0;r=0&&t.maxLength<524288&&(e=Te("max:"+t.maxLength,e)),t.minLength>0&&(e=Te("min:"+t.minLength,e)),"number"===t.type&&(e=Te("decimal",e),""!==t.min&&(e=Te("min_value:"+t.min,e)),""!==t.max&&(e=Te("max_value:"+t.max,e))),e;if(function(t){return Ve(["date","week","month","datetime-local","time"],t.type)}(t)){var n=t.step&&Number(t.step)<60?"HH:mm:ss":"HH:mm";if("date"===t.type)return Te("date_format:YYYY-MM-DD",e);if("datetime-local"===t.type)return Te("date_format:YYYY-MM-DDT"+n,e);if("month"===t.type)return Te("date_format:YYYY-MM",e);if("week"===t.type)return Te("date_format:YYYY-[W]WW",e);if("time"===t.type)return Te("date_format:"+n,e)}return e},He=function(t){return Me(Object.values)?Object.values(t):Object.keys(t).map(function(e){return t[e]})},Ve=function(t,e){return-1!==t.indexOf(e)},Be=function(t){return Array.isArray(t)&&0===t.length},Ze="en",We=function(t){void 0===t&&(t={}),this.container={},this.merge(t)},Ge={locale:{configurable:!0}};Ge.locale.get=function(){return Ze},Ge.locale.set=function(t){Ze=t||"en"},We.prototype.hasLocale=function(t){return!!this.container[t]},We.prototype.setDateFormat=function(t,e){this.container[t]||(this.container[t]={}),this.container[t].dateFormat=e},We.prototype.getDateFormat=function(t){return this.container[t]&&this.container[t].dateFormat?this.container[t].dateFormat:null},We.prototype.getMessage=function(t,e,n){var r=null;return r=this.hasMessage(t,e)?this.container[t].messages[e]:this._getDefaultMessage(t),Me(r)?r.apply(void 0,n):r},We.prototype.getFieldMessage=function(t,e,n,r){if(!this.hasLocale(t))return this.getMessage(t,n,r);var i=this.container[t].custom&&this.container[t].custom[e];if(!i||!i[n])return this.getMessage(t,n,r);var o=i[n];return Me(o)?o.apply(void 0,r):o},We.prototype._getDefaultMessage=function(t){return this.hasMessage(t,"_default")?this.container[t].messages._default:this.container.en.messages._default},We.prototype.getAttribute=function(t,e,n){return void 0===n&&(n=""),this.hasAttribute(t,e)?this.container[t].attributes[e]:n},We.prototype.hasMessage=function(t,e){return!!(this.hasLocale(t)&&this.container[t].messages&&this.container[t].messages[e])},We.prototype.hasAttribute=function(t,e){return!!(this.hasLocale(t)&&this.container[t].attributes&&this.container[t].attributes[e])},We.prototype.merge=function(t){qe(this.container,t)},We.prototype.setMessage=function(t,e,n){this.hasLocale(t)||(this.container[t]={messages:{},attributes:{}}),this.container[t].messages[e]=n},We.prototype.setAttribute=function(t,e,n){this.hasLocale(t)||(this.container[t]={messages:{},attributes:{}}),this.container[t].attributes[e]=n},Object.defineProperties(We.prototype,Ge);var Ke={default:new We({en:{messages:{},attributes:{},custom:{}}})},Xe="default",Je=function(){};Je._checkDriverName=function(t){if(!t)throw De("you must provide a name to the dictionary driver")},Je.setDriver=function(t,e){void 0===e&&(e=null),this._checkDriverName(t),e&&(Ke[t]=e),Xe=t},Je.getDriver=function(){return Ke[Xe]};var Qe=function t(e,n){void 0===e&&(e=null),void 0===n&&(n=null),this.vmId=n||null,this.items=e&&e instanceof t?e.items:[]};function tn(t){return t.data?t.data.model?t.data.model:!!t.data.directives&&Pe(t.data.directives,function(t){return"model"===t.name}):null}function en(t){return t.componentOptions?t.componentOptions.Ctor.options.model:null}function nn(t,e,n){if(Me(t[e])){var r=t[e];t[e]=[r]}Array.isArray(t[e])?t[e].push(n):xe(t[e])&&(t[e]=[n])}function rn(t,e,n){t.componentOptions&&function(t,e,n){t.componentOptions.listeners||(t.componentOptions.listeners={}),nn(t.componentOptions.listeners,e,n)}(t,e,n),function(t,e,n){xe(t.data.on)&&(t.data.on={}),nn(t.data.on,e,n)}(t,e,n)}function on(t,e){return t.componentOptions?(en(t)||{event:"input"}).event:e&&e.modifiers&&e.modifiers.lazy?"change":t.data.attrs&&be({type:t.data.attrs.type||"text"})?"input":"change"}function an(t,e){return Array.isArray(e)&&1===e.length?e[0]:e}Qe.prototype["function"==typeof Symbol?Symbol.iterator:"@@iterator"]=function(){var t=this,e=0;return{next:function(){return{value:t.items[e++],done:e>t.items.length}}}},Qe.prototype.add=function(t){var e;(e=this.items).push.apply(e,this._normalizeError(t))},Qe.prototype._normalizeError=function(t){var e=this;return Array.isArray(t)?t.map(function(t){return t.scope=xe(t.scope)?null:t.scope,t.vmId=xe(t.vmId)?e.vmId||null:t.vmId,t}):(t.scope=xe(t.scope)?null:t.scope,t.vmId=xe(t.vmId)?this.vmId||null:t.vmId,[t])},Qe.prototype.regenerate=function(){this.items.forEach(function(t){t.msg=Me(t.regenerate)?t.regenerate():t.msg})},Qe.prototype.update=function(t,e){var n=Pe(this.items,function(e){return e.id===t});if(n){var r=this.items.indexOf(n);this.items.splice(r,1),n.scope=e.scope,this.items.push(n)}},Qe.prototype.all=function(t){var e=this;return this.items.filter(function(n){var r=!0,i=!0;return xe(t)||(r=n.scope===t),xe(e.vmId)||(i=n.vmId===e.vmId),i&&r}).map(function(t){return t.msg})},Qe.prototype.any=function(t){var e=this;return!!this.items.filter(function(n){var r=!0,i=!0;return xe(t)||(r=n.scope===t),xe(e.vmId)||(i=n.vmId===e.vmId),i&&r}).length},Qe.prototype.clear=function(t){var e=this,n=xe(this.vmId)?function(){return!0}:function(t){return t.vmId===e.vmId};xe(t)&&(t=null);for(var r=0;r=9999&&(Re=0,Fe=Fe.replace("{id}","_{id}")),Re++,Fe.replace("{id}",String(Re))),this.el=t.el,this.updated=!1,this.dependencies=[],this.vmId=t.vmId,this.watchers=[],this.events=[],this.delay=0,this.rules={},this._cacheId(t),this.classNames=Ne({},vn.classNames),t=Ne({},vn,t),this._delay=xe(t.delay)?0:t.delay,this.validity=t.validity,this.aria=t.aria,this.flags={untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:null,invalid:null,validated:!1,pending:!1,required:!1,changed:!1},this.vm=t.vm,this.componentInstance=t.component,this.ctorConfig=this.componentInstance?Ce("$options.$_veeValidate",this.componentInstance):void 0,this.update(t),this.initialValue=this.value,this.updated=!1},gn={validator:{configurable:!0},isRequired:{configurable:!0},isDisabled:{configurable:!0},alias:{configurable:!0},value:{configurable:!0},bails:{configurable:!0},rejectsFalse:{configurable:!0}};gn.validator.get=function(){return this.vm&&this.vm.$validator?this.vm.$validator:{validate:function(){}}},gn.isRequired.get=function(){return!!this.rules.required},gn.isDisabled.get=function(){return!(!this.componentInstance||!this.componentInstance.disabled)||!(!this.el||!this.el.disabled)},gn.alias.get=function(){if(this._alias)return this._alias;var t=null;return this.ctorConfig&&this.ctorConfig.alias&&(t=Me(this.ctorConfig.alias)?this.ctorConfig.alias.call(this.componentInstance):this.ctorConfig.alias),!t&&this.el&&(t=we(this.el,"as")),!t&&this.componentInstance?this.componentInstance.$attrs&&this.componentInstance.$attrs["data-vv-as"]:t},gn.value.get=function(){if(Me(this.getter))return this.getter()},gn.bails.get=function(){return this._bails},gn.rejectsFalse.get=function(){return this.componentInstance&&this.ctorConfig?!!this.ctorConfig.rejectsFalse:!!this.el&&"checkbox"===this.el.type},mn.prototype.matches=function(t){var e=this;return!t||(t.id?this.id===t.id:!!(xe(t.vmId)?function(){return!0}:function(t){return t===e.vmId})(t.vmId)&&(void 0===t.name&&void 0===t.scope||(void 0===t.scope?this.name===t.name:void 0===t.name?this.scope===t.scope:t.name===this.name&&t.scope===this.scope)))},mn.prototype._cacheId=function(t){this.el&&!t.targetOf&&(this.el._veeValidateId=this.id)},mn.prototype.waitFor=function(t){this._waitingFor=t},mn.prototype.isWaitingFor=function(t){return this._waitingFor===t},mn.prototype.update=function(t){var e,n,r;this.targetOf=t.targetOf||null,this.immediate=t.immediate||this.immediate||!1,!xe(t.scope)&&t.scope!==this.scope&&Me(this.validator.update)&&this.validator.update(this.id,{scope:t.scope}),this.scope=xe(t.scope)?xe(this.scope)?null:this.scope:t.scope,this.name=(xe(t.name)?t.name:String(t.name))||this.name||null,this.rules=void 0!==t.rules?Oe(t.rules):this.rules,this._bails=void 0!==t.bails?t.bails:this._bails,this.model=t.model||this.model,this.listen=void 0!==t.listen?t.listen:this.listen,this.classes=!(!t.classes&&!this.classes)&&!this.componentInstance,this.classNames=Ee(t.classNames)?qe(this.classNames,t.classNames):this.classNames,this.getter=Me(t.getter)?t.getter:this.getter,this._alias=t.alias||this._alias,this.events=t.events?pn(t.events):this.events,this.delay=(e=this.events,n=t.delay||this.delay,r=this._delay,"number"==typeof n?e.reduce(function(t,e){return t[e]=n,t},{}):e.reduce(function(t,e){return"object"==typeof n&&e in n?(t[e]=n[e],t):"number"==typeof r?(t[e]=r,t):(t[e]=r&&r[e]||0,t)},{})),this.updateDependencies(),this.addActionListeners(),void 0!==t.rules&&(this.flags.required=this.isRequired),this.flags.validated&&void 0!==t.rules&&this.updated&&this.validator.validate("#"+this.id),this.updated=!0,this.addValueListeners(),this.el&&(this.updateClasses(),this.updateAriaAttrs())},mn.prototype.reset=function(){var t=this;this._cancellationToken&&(this._cancellationToken.cancelled=!0,delete this._cancellationToken);var e={untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:null,invalid:null,validated:!1,pending:!1,required:!1,changed:!1};Object.keys(this.flags).filter(function(t){return"required"!==t}).forEach(function(n){t.flags[n]=e[n]}),this.addValueListeners(),this.addActionListeners(),this.updateClasses(),this.updateAriaAttrs(),this.updateCustomValidity()},mn.prototype.setFlags=function(t){var e=this,n={pristine:"dirty",dirty:"pristine",valid:"invalid",invalid:"valid",touched:"untouched",untouched:"touched"};Object.keys(t).forEach(function(r){e.flags[r]=t[r],n[r]&&void 0===t[n[r]]&&(e.flags[n[r]]=!t[r])}),void 0===t.untouched&&void 0===t.touched&&void 0===t.dirty&&void 0===t.pristine||this.addActionListeners(),this.updateClasses(),this.updateAriaAttrs(),this.updateCustomValidity()},mn.prototype.updateDependencies=function(){var t=this;this.dependencies.forEach(function(t){return t.field.destroy()}),this.dependencies=[];var e=Object.keys(this.rules).reduce(function(e,n){return cn.isTargetRule(n)&&e.push({selector:t.rules[n][0],name:n}),e},[]);e.length&&this.vm&&this.vm.$el&&e.forEach(function(e){var n=e.selector,r=e.name,i=t.vm.$refs[n],o=Array.isArray(i)?i[0]:i;if(o){var a={vm:t.vm,classes:t.classes,classNames:t.classNames,delay:t.delay,scope:t.scope,events:t.events.join("|"),immediate:t.immediate,targetOf:t.id};Me(o.$watch)?(a.component=o,a.el=o.$el,a.getter=sn.resolveGetter(o.$el,o.$vnode)):(a.el=o,a.getter=sn.resolveGetter(o,{})),t.dependencies.push({name:r,field:new mn(a)})}})},mn.prototype.unwatch=function(t){if(void 0===t&&(t=null),!t)return this.watchers.forEach(function(t){return t.unwatch()}),void(this.watchers=[]);this.watchers.filter(function(e){return t.test(e.tag)}).forEach(function(t){return t.unwatch()}),this.watchers=this.watchers.filter(function(e){return!t.test(e.tag)})},mn.prototype.updateClasses=function(){var t=this;if(this.classes&&!this.isDisabled){var e=function(e){Le(e,t.classNames.dirty,t.flags.dirty),Le(e,t.classNames.pristine,t.flags.pristine),Le(e,t.classNames.touched,t.flags.touched),Le(e,t.classNames.untouched,t.flags.untouched),!xe(t.flags.valid)&&t.flags.validated&&Le(e,t.classNames.valid,t.flags.valid),!xe(t.flags.invalid)&&t.flags.validated&&Le(e,t.classNames.invalid,t.flags.invalid)};if(_e(this.el)){var n=document.querySelectorAll('input[name="'+this.el.name+'"]');Ie(n).forEach(e)}else e(this.el)}},mn.prototype.addActionListeners=function(){var t=this;if(this.unwatch(/class/),this.el){var e=function(){t.flags.touched=!0,t.flags.untouched=!1,t.classes&&(Le(t.el,t.classNames.touched,!0),Le(t.el,t.classNames.untouched,!1)),t.unwatch(/^class_blur$/)},n=be(this.el)?"input":"change",r=function(){t.flags.dirty=!0,t.flags.pristine=!1,t.classes&&(Le(t.el,t.classNames.pristine,!1),Le(t.el,t.classNames.dirty,!0)),t.unwatch(/^class_input$/)};if(this.componentInstance&&Me(this.componentInstance.$once))return this.componentInstance.$once("input",r),this.componentInstance.$once("blur",e),this.watchers.push({tag:"class_input",unwatch:function(){t.componentInstance.$off("input",r)}}),void this.watchers.push({tag:"class_blur",unwatch:function(){t.componentInstance.$off("blur",e)}});if(this.el){hn(this.el,n,r);var i=_e(this.el)?"change":"blur";hn(this.el,i,e),this.watchers.push({tag:"class_input",unwatch:function(){t.el.removeEventListener(n,r)}}),this.watchers.push({tag:"class_blur",unwatch:function(){t.el.removeEventListener(i,e)}})}}},mn.prototype.checkValueChanged=function(){return(null!==this.initialValue||""!==this.value||!be(this.el))&&this.value!==this.initialValue},mn.prototype._determineInputEvent=function(){return this.componentInstance?this.componentInstance.$options.model&&this.componentInstance.$options.model.event||"input":this.model&&this.model.lazy?"change":be(this.el)?"input":"change"},mn.prototype._determineEventList=function(t){var e=this;return!this.events.length||this.componentInstance||be(this.el)?[].concat(this.events).map(function(t){return"input"===t&&e.model&&e.model.lazy?"change":t}):this.events.map(function(e){return"input"===e?t:e})},mn.prototype.addValueListeners=function(){var t=this;if(this.unwatch(/^input_.+/),this.listen&&this.el){var e={cancelled:!1},n=this.targetOf?function(){t.flags.changed=t.checkValueChanged(),t.validator.validate("#"+t.targetOf)}:function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];(0===e.length||fn(e[0]))&&(e[0]=t.value),t.flags.changed=t.checkValueChanged(),t.validator.validate("#"+t.id,e[0])},r=this._determineInputEvent(),i=this._determineEventList(r);if(this.model&&Ve(i,r)){var o=null,a=this.model.expression;if(this.model.expression&&(o=this.vm,a=this.model.expression),!a&&this.componentInstance&&this.componentInstance.$options.model&&(o=this.componentInstance,a=this.componentInstance.$options.model.prop||"value"),o&&a){var s=Ae(n,this.delay[r],e),u=o.$watch(a,function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];t.flags.pending=!0,t._cancellationToken=e,s.apply(void 0,n)});this.watchers.push({tag:"input_model",unwatch:u}),i=i.filter(function(t){return t!==r})}}i.forEach(function(r){var i=Ae(n,t.delay[r],e),o=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];t.flags.pending=!0,t._cancellationToken=e,i.apply(void 0,n)};t._addComponentEventListener(r,o),t._addHTMLEventListener(r,o)})}},mn.prototype._addComponentEventListener=function(t,e){var n=this;this.componentInstance&&(this.componentInstance.$on(t,e),this.watchers.push({tag:"input_vue",unwatch:function(){n.componentInstance.$off(t,e)}}))},mn.prototype._addHTMLEventListener=function(t,e){var n=this;if(this.el&&!this.componentInstance){var r=function(r){hn(r,t,e),n.watchers.push({tag:"input_native",unwatch:function(){r.removeEventListener(t,e)}})};if(r(this.el),_e(this.el)){var i=document.querySelectorAll('input[name="'+this.el.name+'"]');Ie(i).forEach(function(t){t._veeValidateId&&t!==n.el||r(t)})}}},mn.prototype.updateAriaAttrs=function(){var t=this;if(this.aria&&this.el&&Me(this.el.setAttribute)){var e=function(e){e.setAttribute("aria-required",t.isRequired?"true":"false"),e.setAttribute("aria-invalid",t.flags.invalid?"true":"false")};if(_e(this.el)){var n=document.querySelectorAll('input[name="'+this.el.name+'"]');Ie(n).forEach(e)}else e(this.el)}},mn.prototype.updateCustomValidity=function(){this.validity&&this.el&&Me(this.el.setCustomValidity)&&this.validator.errors&&this.el.setCustomValidity(this.flags.valid?"":this.validator.errors.firstById(this.id)||"")},mn.prototype.destroy=function(){this._cancellationToken&&(this._cancellationToken.cancelled=!0),this.unwatch(),this.dependencies.forEach(function(t){return t.field.destroy()}),this.dependencies=[]},Object.defineProperties(mn.prototype,gn);var yn=function(t){void 0===t&&(t=[]),this.items=t||[]},bn={length:{configurable:!0}};yn.prototype["function"==typeof Symbol?Symbol.iterator:"@@iterator"]=function(){var t=this,e=0;return{next:function(){return{value:t.items[e++],done:e>t.items.length}}}},bn.length.get=function(){return this.items.length},yn.prototype.find=function(t){return Pe(this.items,function(e){return e.matches(t)})},yn.prototype.filter=function(t){return Array.isArray(t)?this.items.filter(function(e){return t.some(function(t){return e.matches(t)})}):this.items.filter(function(e){return e.matches(t)})},yn.prototype.map=function(t){return this.items.map(t)},yn.prototype.remove=function(t){var e=null;if(!(e=t instanceof mn?t:this.find(t)))return null;var n=this.items.indexOf(e);return this.items.splice(n,1),e},yn.prototype.push=function(t){if(!(t instanceof mn))throw De("FieldBag only accepts instances of Field that has an id defined.");if(!t.id)throw De("Field id must be defined.");if(this.find({id:t.id}))throw De("Field with id "+t.id+" is already added.");this.items.push(t)},Object.defineProperties(yn.prototype,bn);var _n=function(t,e){this.id=e._uid,this._base=t,this._paused=!1,this.errors=new Qe(t.errors,this.id)},wn={flags:{configurable:!0},rules:{configurable:!0},fields:{configurable:!0},dictionary:{configurable:!0},locale:{configurable:!0}};wn.flags.get=function(){var t=this;return this._base.fields.items.filter(function(e){return e.vmId===t.id}).reduce(function(t,e){return e.scope&&(t["$"+e.scope]||(t["$"+e.scope]={}),t["$"+e.scope][e.name]=e.flags),t[e.name]=e.flags,t},{})},wn.rules.get=function(){return this._base.rules},wn.fields.get=function(){return new yn(this._base.fields.filter({vmId:this.id}))},wn.dictionary.get=function(){return this._base.dictionary},wn.locale.get=function(){return this._base.locale},wn.locale.set=function(t){this._base.locale=t},_n.prototype.localize=function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];return(t=this._base).localize.apply(t,e)},_n.prototype.update=function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];return(t=this._base).update.apply(t,e)},_n.prototype.attach=function(t){var e=Ne({},t,{vmId:this.id});return this._base.attach(e)},_n.prototype.pause=function(){this._paused=!0},_n.prototype.resume=function(){this._paused=!1},_n.prototype.remove=function(t){return this._base.remove(t)},_n.prototype.detach=function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];return(t=this._base).detach.apply(t,e.concat([this.id]))},_n.prototype.extend=function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];return(t=this._base).extend.apply(t,e)},_n.prototype.validate=function(t,e,n){return void 0===n&&(n={}),this._paused?Promise.resolve(!0):this._base.validate(t,e,Ne({},{vmId:this.id},n||{}))},_n.prototype.validateAll=function(t,e){return void 0===e&&(e={}),this._paused?Promise.resolve(!0):this._base.validateAll(t,Ne({},{vmId:this.id},e||{}))},_n.prototype.validateScopes=function(t){return void 0===t&&(t={}),this._paused?Promise.resolve(!0):this._base.validateScopes(Ne({},{vmId:this.id},t||{}))},_n.prototype.destroy=function(){delete this.id,delete this._base},_n.prototype.reset=function(t){return this._base.reset(Object.assign({},t||{},{vmId:this.id}))},_n.prototype.flag=function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];return(t=this._base).flag.apply(t,e.concat([this.id]))},Object.defineProperties(_n.prototype,wn);var xn={provide:function(){return this.$validator&&!Ue(this.$vnode)?{$validator:this.$validator}:{}},beforeCreate:function(){if(!Ue(this.$vnode)&&!1!==this.$options.$__veeInject){this.$parent||Yn.configure(this.$options.$_veeValidate||{});var t=Yn.resolveConfig(this);(!this.$parent||this.$options.$_veeValidate&&/new/.test(this.$options.$_veeValidate.validator))&&(this.$validator=new _n(Yn._validator,this));var e,n=(e=this.$options.inject,!(!Ee(e)||!e.$validator));if(this.$validator||!t.inject||n||(this.$validator=new _n(Yn._validator,this)),n||this.$validator){if(!n&&this.$validator)this.$options._base.util.defineReactive(this.$validator,"errors",this.$validator.errors);this.$options.computed||(this.$options.computed={}),this.$options.computed[t.errorBagName||"errors"]=function(){return this.$validator.errors},this.$options.computed[t.fieldsBagName||"fields"]=function(){return this.$validator.fields.items.reduce(function(t,e){return e.scope?(t["$"+e.scope]||(t["$"+e.scope]={}),t["$"+e.scope][e.name]=e.flags,t):(t[e.name]=e.flags,t)},{})}}}},beforeDestroy:function(){this.$validator&&this._uid===this.$validator.id&&this.$validator.errors.clear()}};function $n(t,e){return e&&e.$validator?e.$validator.fields.find({id:t._veeValidateId}):null}var kn={bind:function(t,e,n){var r=n.context.$validator;if(r){var i=sn.generate(t,e,n);r.attach(i)}},inserted:function(t,e,n){var r=$n(t,n.context),i=sn.resolveScope(t,e,n);r&&i!==r.scope&&(r.update({scope:i}),r.updated=!1)},update:function(t,e,n){var r=$n(t,n.context);if(!(!r||r.updated&&$e(e.value,e.oldValue))){var i=sn.resolveScope(t,e,n),o=sn.resolveRules(t,e,n);r.update({scope:i,rules:o})}},unbind:function(t,e,n){var r=n.context,i=$n(t,r);i&&r.$validator.detach(i)}},Cn=function(t,e){void 0===e&&(e={fastExit:!0}),this.errors=new Qe,this.fields=new yn,this._createFields(t),this.paused=!1,this.fastExit=!!xe(e&&e.fastExit)||e.fastExit},An={rules:{configurable:!0},dictionary:{configurable:!0},flags:{configurable:!0},locale:{configurable:!0}},Tn={rules:{configurable:!0},dictionary:{configurable:!0},locale:{configurable:!0}};Tn.rules.get=function(){return cn.rules},An.rules.get=function(){return cn.rules},An.dictionary.get=function(){return Vn.i18nDriver},Tn.dictionary.get=function(){return Vn.i18nDriver},An.flags.get=function(){return this.fields.items.reduce(function(t,e){var n;return e.scope?(t["$"+e.scope]=((n={})[e.name]=e.flags,n),t):(t[e.name]=e.flags,t)},{})},An.locale.get=function(){return Cn.locale},An.locale.set=function(t){Cn.locale=t},Tn.locale.get=function(){return Vn.i18nDriver.locale},Tn.locale.set=function(t){var e=t!==Vn.i18nDriver.locale;Vn.i18nDriver.locale=t,e&&Vn.instance&&Vn.instance._vm&&Vn.instance._vm.$emit("localeChanged")},Cn.create=function(t,e){return new Cn(t,e)},Cn.extend=function(t,e,n){void 0===n&&(n={}),Cn._guardExtend(t,e),Cn._merge(t,{validator:e,paramNames:n&&n.paramNames,options:Ne({},{hasTarget:!1,immediate:!0},n||{})})},Cn.remove=function(t){cn.remove(t)},Cn.isTargetRule=function(t){return cn.isTargetRule(t)},Cn.prototype.localize=function(t,e){Cn.localize(t,e)},Cn.localize=function(t,e){var n;if(Ee(t))Vn.i18nDriver.merge(t);else{if(e){var r=t||e.name;e=Ne({},e),Vn.i18nDriver.merge(((n={})[r]=e,n))}t&&(Cn.locale=t)}},Cn.prototype.attach=function(t){var e=this,n=t.initialValue,r=new mn(t);return this.fields.push(r),r.immediate?Vn.instance._vm.$nextTick(function(){return e.validate("#"+r.id,n||r.value,{vmId:t.vmId})}):this._validate(r,n||r.value,{initial:!0}).then(function(t){r.flags.valid=t.valid,r.flags.invalid=!t.valid}),r},Cn.prototype.flag=function(t,e,n){void 0===n&&(n=null);var r=this._resolveField(t,void 0,n);r&&e&&r.setFlags(e)},Cn.prototype.detach=function(t,e,n){var r=Me(t.destroy)?t:this._resolveField(t,e,n);r&&(r.destroy(),this.errors.remove(r.name,r.scope,r.vmId),this.fields.remove(r))},Cn.prototype.extend=function(t,e,n){void 0===n&&(n={}),Cn.extend(t,e,n)},Cn.prototype.reset=function(t){var e=this;return Vn.instance._vm.$nextTick().then(function(){return Vn.instance._vm.$nextTick()}).then(function(){e.fields.filter(t).forEach(function(n){n.waitFor(null),n.reset(),e.errors.remove(n.name,n.scope,t&&t.vmId)})})},Cn.prototype.update=function(t,e){var n=e.scope;this._resolveField("#"+t)&&this.errors.update(t,{scope:n})},Cn.prototype.remove=function(t){Cn.remove(t)},Cn.prototype.validate=function(t,e,n){var r=this;void 0===n&&(n={});var i=n.silent,o=n.vmId;if(this.paused)return Promise.resolve(!0);if(xe(t))return this.validateScopes({silent:i,vmId:o});if("*"===t)return this.validateAll(void 0,{silent:i,vmId:o});if(/^(.+)\.\*$/.test(t)){var a=t.match(/^(.+)\.\*$/)[1];return this.validateAll(a)}var s=this._resolveField(t);if(!s)return this._handleFieldNotFound(name);i||(s.flags.pending=!0),void 0===e&&(e=s.value);var u=this._validate(s,e);return s.waitFor(u),u.then(function(t){return!i&&s.isWaitingFor(u)&&(s.waitFor(null),r._handleValidationResults([t],o)),t.valid})},Cn.prototype.pause=function(){return this.paused=!0,this},Cn.prototype.resume=function(){return this.paused=!1,this},Cn.prototype.validateAll=function(t,e){var n=this;void 0===e&&(e={});var r=e.silent,i=e.vmId;if(this.paused)return Promise.resolve(!0);var o=null,a=!1;return"string"==typeof t?o={scope:t,vmId:i}:Ee(t)?(o=Object.keys(t).map(function(t){return{name:t,vmId:i,scope:null}}),a=!0):o=Array.isArray(t)?t.map(function(t){return{name:t,vmId:i}}):{scope:null,vmId:i},Promise.all(this.fields.filter(o).map(function(e){return n._validate(e,a?t[e.name]:e.value)})).then(function(t){return r||n._handleValidationResults(t,i),t.every(function(t){return t.valid})})},Cn.prototype.validateScopes=function(t){var e=this;void 0===t&&(t={});var n=t.silent,r=t.vmId;return this.paused?Promise.resolve(!0):Promise.all(this.fields.filter({vmId:r}).map(function(t){return e._validate(t,t.value)})).then(function(t){return n||e._handleValidationResults(t,r),t.every(function(t){return t.valid})})},Cn.prototype.verify=function(t,e,n){void 0===n&&(n={});var r={name:n&&n.name||"{field}",rules:Oe(e),bails:Ce("bails",n,!0)};r.isRequired=r.rules.required;var i=Object.keys(r.rules).filter(Cn.isTargetRule);return i.length&&n&&Ee(n.values)&&i.forEach(function(t){var e=r.rules[t],i=e[0],o=e.slice(1);r.rules[t]=[n.values[i]].concat(o)}),this._validate(r,t).then(function(t){return{valid:t.valid,errors:t.errors.map(function(t){return t.msg})}})},Cn.prototype.destroy=function(){Vn.instance._vm.$off("localeChanged")},Cn.prototype._createFields=function(t){var e=this;t&&Object.keys(t).forEach(function(n){var r=Ne({},{name:n,rules:t[n]});e.attach(r)})},Cn.prototype._getDateFormat=function(t){var e=null;return t.date_format&&Array.isArray(t.date_format)&&(e=t.date_format[0]),e||Vn.i18nDriver.getDateFormat(this.locale)},Cn.prototype._formatErrorMessage=function(t,e,n,r){void 0===n&&(n={}),void 0===r&&(r=null);var i=this._getFieldDisplayName(t),o=this._getLocalizedParams(e,r);return Vn.i18nDriver.getFieldMessage(this.locale,t.name,e.name,[i,o,n])},Cn.prototype._convertParamObjectToArray=function(t,e){if(Array.isArray(t))return t;var n=cn.getParamNames(e);return n&&Ee(t)?n.reduce(function(e,n){return n in t&&e.push(t[n]),e},[]):t},Cn.prototype._getLocalizedParams=function(t,e){void 0===e&&(e=null);var n=this._convertParamObjectToArray(t.params,t.name);return t.options.hasTarget&&n&&n[0]?[e||Vn.i18nDriver.getAttribute(this.locale,n[0],n[0])].concat(n.slice(1)):n},Cn.prototype._getFieldDisplayName=function(t){return t.alias||Vn.i18nDriver.getAttribute(this.locale,t.name,t.name)},Cn.prototype._convertParamArrayToObj=function(t,e){var n=cn.getParamNames(e);if(!n)return t;if(Ee(t)){if(n.some(function(e){return-1!==Object.keys(t).indexOf(e)}))return t;t=[t]}return t.reduce(function(t,e,r){return t[n[r]]=e,t},{})},Cn.prototype._test=function(t,e,n){var r=this,i=cn.getValidatorMethod(n.name),o=Array.isArray(n.params)?Ie(n.params):n.params;o||(o=[]);var a=null;if(!i||"function"!=typeof i)return Promise.reject(De("No such validator '"+n.name+"' exists."));if(n.options.hasTarget&&t.dependencies){var s=Pe(t.dependencies,function(t){return t.name===n.name});s&&(a=s.field.alias,o=[s.field.value].concat(o.slice(1)))}else"required"===n.name&&t.rejectsFalse&&(o=o.length?o:[!0]);if(n.options.isDate){var u=this._getDateFormat(t.rules);"date_format"!==n.name&&o.push(u)}var c=i(e,this._convertParamArrayToObj(o,n.name));return Me(c.then)?c.then(function(e){var i=!0,o={};return Array.isArray(e)?i=e.every(function(t){return Ee(t)?t.valid:t}):(i=Ee(e)?e.valid:e,o=e.data),{valid:i,errors:i?[]:[r._createFieldError(t,n,o,a)]}}):(Ee(c)||(c={valid:c,data:{}}),{valid:c.valid,errors:c.valid?[]:[this._createFieldError(t,n,c.data,a)]})},Cn._merge=function(t,e){var n=e.validator,r=e.options,i=e.paramNames,o=Me(n)?n:n.validate;n.getMessage&&Vn.i18nDriver.setMessage(Cn.locale,t,n.getMessage),cn.add(t,{validate:o,options:r,paramNames:i})},Cn._guardExtend=function(t,e){if(!Me(e)&&!Me(e.validate))throw De("Extension Error: The validator '"+t+"' must be a function or have a 'validate' method.")},Cn.prototype._createFieldError=function(t,e,n,r){var i=this;return{id:t.id,vmId:t.vmId,field:t.name,msg:this._formatErrorMessage(t,e,n,r),rule:e.name,scope:t.scope,regenerate:function(){return i._formatErrorMessage(t,e,n,r)}}},Cn.prototype._resolveField=function(t,e,n){if("#"===t[0])return this.fields.find({id:t.slice(1)});if(!xe(e))return this.fields.find({name:t,scope:e,vmId:n});if(Ve(t,".")){var r=t.split("."),i=r[0],o=r.slice(1),a=this.fields.find({name:o.join("."),scope:i,vmId:n});if(a)return a}return this.fields.find({name:t,scope:null,vmId:n})},Cn.prototype._handleFieldNotFound=function(t,e){var n=xe(e)?t:(xe(e)?"":e+".")+t;return Promise.reject(De('Validating a non-existent field: "'+n+'". Use "attach()" first.'))},Cn.prototype._handleValidationResults=function(t,e){var n=this,r=t.map(function(t){return{id:t.id}});this.errors.removeById(r.map(function(t){return t.id})),t.forEach(function(t){n.errors.remove(t.field,t.scope,e)});var i=t.reduce(function(t,e){return t.push.apply(t,e.errors),t},[]);this.errors.add(i),this.fields.filter(r).forEach(function(e){var n=Pe(t,function(t){return t.id===e.id});e.setFlags({pending:!1,valid:n.valid,validated:!0})})},Cn.prototype._shouldSkip=function(t,e){return!1!==t.bails&&(!!t.isDisabled||!t.isRequired&&(xe(e)||""===e||Be(e)))},Cn.prototype._shouldBail=function(t){return void 0!==t.bails?t.bails:this.fastExit},Cn.prototype._validate=function(t,e,n){var r=this;void 0===n&&(n={});var i=n.initial;if(this._shouldSkip(t,e))return Promise.resolve({valid:!0,id:t.id,field:t.name,scope:t.scope,errors:[]});var o=[],a=[],s=!1;return Object.keys(t.rules).filter(function(t){return!i||!cn.has(t)||cn.isImmediate(t)}).some(function(n){var i=cn.getOptions(n),u=r._test(t,e,{name:n,params:t.rules[n],options:i});return Me(u.then)?o.push(u):!u.valid&&r._shouldBail(t)?(a.push.apply(a,u.errors),s=!0):o.push(new Promise(function(t){return t(u)})),s}),s?Promise.resolve({valid:!1,errors:a,id:t.id,field:t.name,scope:t.scope}):Promise.all(o).then(function(e){return e.reduce(function(t,e){var n;return e.valid||(n=t.errors).push.apply(n,e.errors),t.valid=t.valid&&e.valid,t},{valid:!0,errors:a,id:t.id,field:t.name,scope:t.scope})})},Object.defineProperties(Cn.prototype,An),Object.defineProperties(Cn,Tn);var On=function(t,e){var n={pristine:function(t,e){return t&&e},dirty:function(t,e){return t||e},touched:function(t,e){return t||e},untouched:function(t,e){return t&&e},valid:function(t,e){return t&&e},invalid:function(t,e){return t||e},pending:function(t,e){return t||e},required:function(t,e){return t||e},validated:function(t,e){return t&&e}};return Object.keys(n).reduce(function(r,i){return r[i]=n[i](t[i],e[i]),r},{})},Sn=function(t,e){return void 0===e&&(e=!0),Object.keys(t).reduce(function(n,r){if(!n)return n=Ne({},t[r]);var i=0===r.indexOf("$");return e&&i?On(Sn(t[r]),n):!e&&i?n:n=On(n,t[r])},null)},Dn=null;function En(t){return{errors:t.messages,flags:t.flags,classes:t.classes,valid:t.isValid,reset:function(){return t.reset()},validate:function(e){return t.syncValue(e),t.validate().then(t.applyResult)},aria:{"aria-invalid":t.flags.invalid?"true":"false","aria-required":t.isRequired?"true":"false"}}}function Mn(t){var e=this,n=this.value!==t.value||this._needsValidation,r=this.flags.validated;if(this.initialized||(this.initialValue=t.value),this.initialized||void 0!==t.value||(n=!0),n){this.value=t.value,this.validate().then(this.immediate||r?this.applyResult:function(t){var n=t.valid;e.setFlags({valid:n,invalid:!n})})}this._needsValidation=!1}function jn(t){return{onInput:function(e){t.syncValue(e),t.setFlags({dirty:!0,pristine:!1})},onBlur:function(){t.setFlags({touched:!0,untouched:!1})},onValidate:Ae(function(){var e=t.validate();t._waiting=e,e.then(function(n){e===t._waiting&&(t.applyResult(n),t._waiting=null)})},t.debounce)}}var Ln=0,In={$__veeInject:!1,inject:{$_veeObserver:{from:"$_veeObserver",default:function(){return this.$vnode.context.$_veeObserver||(this.$vnode.context.$_veeObserver={refs:{},$subscribe:function(t){this.refs[t.vid]=t},$unsubscribe:function(t){delete this.refs[t.vid]}}),this.$vnode.context.$_veeObserver}}},props:{vid:{type:[String,Number],default:function(){return++Ln}},name:{type:String,default:null},events:{type:[Array,String],default:function(){return["input"]}},rules:{type:[Object,String],default:null},immediate:{type:Boolean,default:!1},bails:{type:Boolean,default:function(){return Vn.config.fastExit}},debounce:{type:Number,default:function(){return Vn.config.delay||0}}},watch:{rules:{deep:!0,handler:function(){this._needsValidation=!0}}},data:function(){return{messages:[],value:void 0,initialized:!1,initialValue:void 0,flags:{untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:null,invalid:null,validated:!1,pending:!1,required:!1,changed:!1},id:null}},methods:{setFlags:function(t){var e=this;Object.keys(t).forEach(function(n){e.flags[n]=t[n]})},syncValue:function(t){var e=fn(t)?t.target.value:t;this.value=e,this.flags.changed=this.initialValue===e},reset:function(){this.messages=[],this._waiting=null,this.initialValue=this.value;var t={untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:null,invalid:null,validated:!1,pending:!1,required:!1,changed:!1};t.changed=!1,this.setFlags(t)},validate:function(){var t,e,n=this;return this.setFlags({pending:!0}),Dn.verify(this.value,this.rules,{name:this.name,values:(t=this,e=t.$_veeObserver.refs,t.fieldDeps.reduce(function(n,r){if(!e[r])return n;n[r]=e[r].value;var i="$__"+r;return Me(t[i])||(t[i]=e[r].$watch("value",function(){t.validate(t.value).then(t.applyResult),t[i]()})),n},{})),bails:this.bails}).then(function(t){return n.setFlags({pending:!1}),t})},applyResult:function(t){var e=t.errors;this.messages=e,this.setFlags({valid:!e.length,changed:this.value!==this.initialValue,invalid:!!e.length,validated:!0})},registerField:function(){var t,e,n;Dn||(Dn=Vn.instance._validator),e=(t=this).id,n=t.vid,e===n&&t.$_veeObserver.refs[e]||(e!==n&&t.$_veeObserver.refs[e]===t&&t.$_veeObserver.$unsubscribe(t),t.$_veeObserver.$subscribe(t),t.id=n)}},computed:{isValid:function(){return this.flags.valid},fieldDeps:function(){var t=Oe(this.rules);return Object.keys(t).filter(cn.isTargetRule).map(function(e){return t[e][0]})},normalizedEvents:function(){var t=this;return pn(this.events).map(function(e){return"input"===e?t._inputEventName:e})},isRequired:function(){return!!Oe(this.rules).required},classes:function(){var t=this,e=Vn.config.classNames;return Object.keys(this.flags).reduce(function(n,r){var i=e&&e[r]||r;return i&&(n[i]=t.flags[r]),n},{})}},render:function(t){var e=this;this.registerField();var n=En(this),r=this.$scopedSlots.default;if(!Me(r))return an(0,this.$slots.default);var i=r(n);return function t(e){if(tn(e))return[e];var n=Array.isArray(e)?e:e.children;return Array.isArray(n)?n.reduce(function(e,n){var r=t(n);return r.length&&e.push.apply(e,r),e},[]):[]}(i).forEach(function(t){(function(t){var e=tn(t);this._inputEventName=this._inputEventName||on(t,e),Mn.call(this,e);var n=jn(this),r=n.onInput,i=n.onBlur,o=n.onValidate;rn(t,this._inputEventName,r),rn(t,"blur",i),this.normalizedEvents.forEach(function(e){rn(t,e,o)}),this.initialized=!0}).call(e,t)}),an(0,i)},beforeDestroy:function(){this.$_veeObserver.$unsubscribe(this)}},Nn={pristine:"every",dirty:"some",touched:"some",untouched:"every",valid:"every",invalid:"some",pending:"some",validated:"every"};var Rn={name:"ValidationObserver",provide:function(){return{$_veeObserver:this}},data:function(){return{refs:{}}},methods:{$subscribe:function(t){var e;this.refs=Object.assign({},this.refs,((e={})[t.vid]=t,e))},$unsubscribe:function(t){var e=t.vid;delete this.refs[e],this.refs=Object.assign({},this.refs)},validate:function(){return Promise.all(He(this.refs).map(function(t){return t.validate().then(function(e){return t.applyResult(e),e})})).then(function(t){return t.every(function(t){return t.valid})})},reset:function(){return He(this.refs).forEach(function(t){t.reset()})}},computed:{ctx:function(){var t=this,e={errors:{},validate:function(){var e=t.validate();return{then:function(t){e.then(function(e){return e&&Me(t)?Promise.resolve(t()):Promise.resolve(e)})}}},reset:function(){return t.reset()}};return He(this.refs).reduce(function(t,e){return Object.keys(Nn).forEach(function(n){var r,i;n in t?t[n]=(r=t[n],i=e.flags[n],[r,i][Nn[n]](function(t){return t})):t[n]=e.flags[n]}),t.errors[e.vid]=e.messages,t},e)}},render:function(t){var e=this.$scopedSlots.default;return Me(e)?an(0,e(this.ctx)):an(0,this.$slots.default)}};var Fn=function(t){return Ee(t)?Object.keys(t).reduce(function(e,n){return e[n]=Fn(t[n]),e},{}):Me(t)?t("{0}",["{1}","{2}","{3}"]):t},Pn=function(t,e){this.i18n=t,this.rootKey=e},Un={locale:{configurable:!0}};Un.locale.get=function(){return this.i18n.locale},Un.locale.set=function(t){Se("Cannot set locale from the validator when using vue-i18n, use i18n.locale setter instead")},Pn.prototype.getDateFormat=function(t){return this.i18n.getDateTimeFormat(t||this.locale)},Pn.prototype.setDateFormat=function(t,e){this.i18n.setDateTimeFormat(t||this.locale,e)},Pn.prototype.getMessage=function(t,e,n){var r=this.rootKey+".messages."+e,i=this.i18n.t(r,n);return i!==r?i:this.i18n.t(this.rootKey+".messages._default",n)},Pn.prototype.getAttribute=function(t,e,n){void 0===n&&(n="");var r=this.rootKey+".attributes."+e,i=this.i18n.t(r);return i!==r?i:n},Pn.prototype.getFieldMessage=function(t,e,n,r){var i=this.rootKey+".custom."+e+"."+n,o=this.i18n.t(i,r);return o!==i?o:this.getMessage(t,n,r)},Pn.prototype.merge=function(t){var e=this;Object.keys(t).forEach(function(n){var r,i=qe({},Ce(n+"."+e.rootKey,e.i18n.messages,{})),o=qe(i,function(t){var e={};return t.messages&&(e.messages=Fn(t.messages)),t.custom&&(e.custom=Fn(t.custom)),t.attributes&&(e.attributes=t.attributes),xe(t.dateFormat)||(e.dateFormat=t.dateFormat),e}(t[n]));e.i18n.mergeLocaleMessage(n,((r={})[e.rootKey]=o,r)),o.dateFormat&&e.i18n.setDateTimeFormat(n,o.dateFormat)})},Pn.prototype.setMessage=function(t,e,n){var r,i;this.merge(((i={})[t]={messages:(r={},r[e]=n,r)},i))},Pn.prototype.setAttribute=function(t,e,n){var r,i;this.merge(((i={})[t]={attributes:(r={},r[e]=n,r)},i))},Object.defineProperties(Pn.prototype,Un);var zn,qn,Yn,Hn=Ne({},{locale:"en",delay:0,errorBagName:"errors",dictionary:null,fieldsBagName:"fields",classes:!1,classNames:null,events:"input",inject:!0,fastExit:!0,aria:!0,validity:!1,i18n:null,i18nRootKey:"validation"}),Vn=function(t,e){this.configure(t),Yn=this,e&&(zn=e),this._validator=new Cn(null,{fastExit:t&&t.fastExit}),this._initVM(this.config),this._initI18n(this.config)},Bn={i18nDriver:{configurable:!0},config:{configurable:!0}},Zn={instance:{configurable:!0},i18nDriver:{configurable:!0},config:{configurable:!0}};Vn.setI18nDriver=function(t,e){Je.setDriver(t,e)},Vn.configure=function(t){Hn=Ne({},Hn,t)},Vn.use=function(t,e){return void 0===e&&(e={}),Me(t)?Yn?void t({Validator:Cn,ErrorBag:Qe,Rules:Cn.rules},e):(qn||(qn=[]),void qn.push({plugin:t,options:e})):Se("The plugin must be a callable function")},Vn.install=function(t,e){zn&&t===zn||(zn=t,Yn=new Vn(e),function(){try{var t=Object.defineProperty({},"passive",{get:function(){dn=!0}});window.addEventListener("testPassive",null,t),window.removeEventListener("testPassive",null,t)}catch(t){dn=!1}}(),zn.mixin(xn),zn.directive("validate",kn),qn&&(qn.forEach(function(t){var e=t.plugin,n=t.options;Vn.use(e,n)}),qn=null))},Zn.instance.get=function(){return Yn},Bn.i18nDriver.get=function(){return Je.getDriver()},Zn.i18nDriver.get=function(){return Je.getDriver()},Bn.config.get=function(){return Hn},Zn.config.get=function(){return Hn},Vn.prototype._initVM=function(t){var e=this;this._vm=new zn({data:function(){return{errors:e._validator.errors,fields:e._validator.fields}}})},Vn.prototype._initI18n=function(t){var e=this,n=t.dictionary,r=t.i18n,i=t.i18nRootKey,o=t.locale,a=function(){e._validator.errors.regenerate()};r?(Vn.setI18nDriver("i18n",new Pn(r,i)),r._vm.$watch("locale",a)):"undefined"!=typeof window&&this._vm.$on("localeChanged",a),n&&this.i18nDriver.merge(n),o&&!r&&this._validator.localize(o)},Vn.prototype.configure=function(t){Vn.configure(t)},Vn.prototype.resolveConfig=function(t){var e=Ce("$options.$_veeValidate",t,{});return Ne({},this.config,e)},Object.defineProperties(Vn.prototype,Bn),Object.defineProperties(Vn,Zn),Vn.version="2.1.4",Vn.mixin=xn,Vn.directive=kn,Vn.Validator=Cn,Vn.ErrorBag=Qe,Vn.mapFields=function(t){if(!t)return function(){return Sn(this.$validator.flags)};var e=function(t){return Array.isArray(t)?t.reduce(function(t,e){return Ve(e,".")?t[e.split(".")[1]]=e:t[e]=e,t},{}):t}(t);return Object.keys(e).reduce(function(t,n){var r=e[n];return t[n]=function(){if(this.$validator.flags[r])return this.$validator.flags[r];if("*"===e[n])return Sn(this.$validator.flags,!1);if(r.indexOf(".")<=0)return{};var t=r.split("."),i=t[0],o=t.slice(1);return i=this.$validator.flags["$"+i],"*"===(o=o.join("."))&&i?Sn(i):i&&i[o]?i[o]:{}},t},{})},Vn.ValidationProvider=In,Vn.ValidationObserver=Rn,Vn.withValidation=function(t,e){void 0===e&&(e=null);var n=Me(t)?t.options:t;n.$__veeInject=!1;var r={name:(n.name||"AnonymousHoc")+"WithValidation",props:Ne({},In.props),data:In.data,computed:Ne({},In.computed),methods:Ne({},In.methods),$__veeInject:!1,beforeDestroy:In.beforeDestroy,inject:In.inject};e||(e=function(t){return t});var i=n.model&&n.model.event||"input";return r.render=function(t){var r;this.registerField();var o=En(this),a=Ne({},this.$listeners),s=tn(this.$vnode);this._inputEventName=this._inputEventName||on(this.$vnode,s),Mn.call(this,s);var u=jn(this),c=u.onInput,l=u.onBlur,f=u.onValidate;nn(a,i,c),nn(a,"blur",l),this.normalizedEvents.forEach(function(t,e){nn(a,t,f)});var p,d,h=(en(this.$vnode)||{prop:"value"}).prop,v=Ne({},this.$attrs,((r={})[h]=s.value,r),e(o));return t(n,{attrs:this.$attrs,props:v,on:a},(p=this.$slots,d=this.$vnode.context,Object.keys(p).reduce(function(t,e){return p[e].forEach(function(t){t.context||(p[e].context=d,t.data||(t.data={}),t.data.slot=e)}),t.concat(p[e])},[])))},r};var Wn,Gn={name:"en",messages:{_default:function(t){return"The "+t+" value is not valid."},after:function(t,e){var n=e[0];return"The "+t+" must be after "+(e[1]?"or equal to ":"")+n+"."},alpha:function(t){return"The "+t+" field may only contain alphabetic characters."},alpha_dash:function(t){return"The "+t+" field may contain alpha-numeric characters as well as dashes and underscores."},alpha_num:function(t){return"The "+t+" field may only contain alpha-numeric characters."},alpha_spaces:function(t){return"The "+t+" field may only contain alphabetic characters as well as spaces."},before:function(t,e){var n=e[0];return"The "+t+" must be before "+(e[1]?"or equal to ":"")+n+"."},between:function(t,e){return"The "+t+" field must be between "+e[0]+" and "+e[1]+"."},confirmed:function(t){return"The "+t+" confirmation does not match."},credit_card:function(t){return"The "+t+" field is invalid."},date_between:function(t,e){return"The "+t+" must be between "+e[0]+" and "+e[1]+"."},date_format:function(t,e){return"The "+t+" must be in the format "+e[0]+"."},decimal:function(t,e){void 0===e&&(e=[]);var n=e[0];return void 0===n&&(n="*"),"The "+t+" field must be numeric and may contain "+(n&&"*"!==n?n:"")+" decimal points."},digits:function(t,e){return"The "+t+" field must be numeric and exactly contain "+e[0]+" digits."},dimensions:function(t,e){return"The "+t+" field must be "+e[0]+" pixels by "+e[1]+" pixels."},email:function(t){return"The "+t+" field must be a valid email."},excluded:function(t){return"The "+t+" field must be a valid value."},ext:function(t){return"The "+t+" field must be a valid file."},image:function(t){return"The "+t+" field must be an image."},included:function(t){return"The "+t+" field must be a valid value."},integer:function(t){return"The "+t+" field must be an integer."},ip:function(t){return"The "+t+" field must be a valid ip address."},length:function(t,e){var n=e[0],r=e[1];return r?"The "+t+" length must be between "+n+" and "+r+".":"The "+t+" length must be "+n+"."},max:function(t,e){return"The "+t+" field may not be greater than "+e[0]+" characters."},max_value:function(t,e){return"The "+t+" field must be "+e[0]+" or less."},mimes:function(t){return"The "+t+" field must have a valid file type."},min:function(t,e){return"The "+t+" field must be at least "+e[0]+" characters."},min_value:function(t,e){return"The "+t+" field must be "+e[0]+" or more."},numeric:function(t){return"The "+t+" field may only contain numeric characters."},regex:function(t){return"The "+t+" field format is invalid."},required:function(t){return"The "+t+" field is required."},size:function(t,e){return"The "+t+" size must be less than "+function(t){var e=0==(t=1024*Number(t))?0:Math.floor(Math.log(t)/Math.log(1024));return 1*(t/Math.pow(1024,e)).toFixed(2)+" "+["Byte","KB","MB","GB","TB","PB","EB","ZB","YB"][e]}(e[0])+"."},url:function(t){return"The "+t+" field is not a valid URL."}},attributes:{}};"undefined"!=typeof VeeValidate&&VeeValidate.Validator.localize(((Wn={})[Gn.name]=Gn,Wn));var Kn=36e5,Xn=6e4,Jn=2,Qn={dateTimeDelimeter:/[T ]/,plainTime:/:/,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*)$/,timezoneZ:/^(Z)$/,timezoneHH:/^([+-])(\d{2})$/,timezoneHHMM:/^([+-])(\d{2}):?(\d{2})$/};function tr(t,e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===t)return new Date(NaN);var n=e||{},r=void 0===n.additionalDigits?Jn:Number(n.additionalDigits);if(2!==r&&1!==r&&0!==r)throw new RangeError("additionalDigits must be 0, 1 or 2");if(t instanceof Date)return new Date(t.getTime());if("string"!=typeof t)return new Date(t);var i=function(t){var e,n={},r=t.split(Qn.dateTimeDelimeter);Qn.plainTime.test(r[0])?(n.date=null,e=r[0]):(n.date=r[0],e=r[1]);if(e){var i=Qn.timezone.exec(e);i?(n.time=e.replace(i[1],""),n.timezone=i[1]):n.time=e}return n}(t),o=function(t,e){var n,r=Qn.YYY[e],i=Qn.YYYYY[e];if(n=Qn.YYYY.exec(t)||i.exec(t)){var o=n[1];return{year:parseInt(o,10),restDateString:t.slice(o.length)}}if(n=Qn.YY.exec(t)||r.exec(t)){var a=n[1];return{year:100*parseInt(a,10),restDateString:t.slice(a.length)}}return{year:null}}(i.date,r),a=o.year,s=function(t,e){if(null===e)return null;var n,r,i,o;if(0===t.length)return(r=new Date(0)).setUTCFullYear(e),r;if(n=Qn.MM.exec(t))return r=new Date(0),i=parseInt(n[1],10)-1,r.setUTCFullYear(e,i),r;if(n=Qn.DDD.exec(t)){r=new Date(0);var a=parseInt(n[1],10);return r.setUTCFullYear(e,0,a),r}if(n=Qn.MMDD.exec(t)){r=new Date(0),i=parseInt(n[1],10)-1;var s=parseInt(n[2],10);return r.setUTCFullYear(e,i,s),r}if(n=Qn.Www.exec(t))return o=parseInt(n[1],10)-1,er(e,o);if(n=Qn.WwwD.exec(t)){o=parseInt(n[1],10)-1;var u=parseInt(n[2],10)-1;return er(e,o,u)}return null}(o.restDateString,a);if(s){var u,c=s.getTime(),l=0;return i.time&&(l=function(t){var e,n,r;if(e=Qn.HH.exec(t))return(n=parseFloat(e[1].replace(",",".")))%24*Kn;if(e=Qn.HHMM.exec(t))return n=parseInt(e[1],10),r=parseFloat(e[2].replace(",",".")),n%24*Kn+r*Xn;if(e=Qn.HHMMSS.exec(t)){n=parseInt(e[1],10),r=parseInt(e[2],10);var i=parseFloat(e[3].replace(",","."));return n%24*Kn+r*Xn+1e3*i}return null}(i.time)),i.timezone?u=function(t){var e,n;if(e=Qn.timezoneZ.exec(t))return 0;if(e=Qn.timezoneHH.exec(t))return n=60*parseInt(e[2],10),"+"===e[1]?-n:n;if(e=Qn.timezoneHHMM.exec(t))return n=60*parseInt(e[2],10)+parseInt(e[3],10),"+"===e[1]?-n:n;return 0}(i.timezone):(u=new Date(c+l).getTimezoneOffset(),u=new Date(c+l+u*Xn).getTimezoneOffset()),new Date(c+l+u*Xn)}return new Date(t)}function er(t,e,n){e=e||0,n=n||0;var r=new Date(0);r.setUTCFullYear(t,0,4);var i=7*e+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+i),r}function nr(t){t=t||{};var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var rr=6e4;function ir(t,e,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");return function(t,e,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=tr(t,n).getTime(),i=Number(e);return new Date(r+i)}(t,Number(e)*rr,n)}function or(t,e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=tr(t,e);return!isNaN(n)}var ar={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};var sr=/MMMM|MM|DD|dddd/g;function ur(t){return t.replace(sr,function(t){return t.slice(1)})}var cr={lastWeek:"[last] dddd [at] LT",yesterday:"[yesterday at] LT",today:"[today at] LT",tomorrow:"[tomorrow at] LT",nextWeek:"dddd [at] LT",other:"L"};function lr(t,e,n){return function(r,i){var o=i||{},a=o.type?String(o.type):e;return(t[a]||t[e])[n?n(Number(r)):Number(r)]}}function fr(t,e){return function(n){var r=n||{},i=r.type?String(r.type):e;return t[i]||t[e]}}var pr={narrow:["Su","Mo","Tu","We","Th","Fr","Sa"],short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],long:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},dr={short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],long:["January","February","March","April","May","June","July","August","September","October","November","December"]},hr={uppercase:["AM","PM"],lowercase:["am","pm"],long:["a.m.","p.m."]};function vr(t,e){return function(n,r){var i=r||{},o=i.type?String(i.type):e,a=t[o]||t[e];return String(n).match(a)}}function mr(t,e){return function(n,r){var i=r||{},o=i.type?String(i.type):e,a=t[o]||t[e],s=n[1];return a.findIndex(function(t){return t.test(s)})}}var gr,yr={formatDistance:function(t,e,n){var r;return n=n||{},r="string"==typeof ar[t]?ar[t]:1===e?ar[t].one:ar[t].other.replace("{{count}}",e),n.addSuffix?n.comparison>0?"in "+r:r+" ago":r},formatLong:function(t){var e={LTS:t.LTS,LT:t.LT,L:t.L,LL:t.LL,LLL:t.LLL,LLLL:t.LLLL,l:t.l||ur(t.L),ll:t.ll||ur(t.LL),lll:t.lll||ur(t.LLL),llll:t.llll||ur(t.LLLL)};return function(t){return e[t]}}({LT:"h:mm aa",LTS:"h:mm:ss aa",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY h:mm aa",LLLL:"dddd, MMMM D YYYY h:mm aa"}),formatRelative:function(t,e,n,r){return cr[t]},localize:{ordinalNumber:function(t,e){var n=Number(t),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},weekday:lr(pr,"long"),weekdays:fr(pr,"long"),month:lr(dr,"long"),months:fr(dr,"long"),timeOfDay:lr(hr,"long",function(t){return t/12>=1?1:0}),timesOfDay:fr(hr,"long")},match:{ordinalNumbers:(gr=/^(\d+)(th|st|nd|rd)?/i,function(t){return String(t).match(gr)}),ordinalNumber:function(t){return parseInt(t[1],10)},weekdays:vr({narrow:/^(su|mo|tu|we|th|fr|sa)/i,short:/^(sun|mon|tue|wed|thu|fri|sat)/i,long:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},"long"),weekday:mr({any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},"any"),months:vr({short:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,long:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},"long"),month:mr({any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},"any"),timesOfDay:vr({short:/^(am|pm)/i,long:/^([ap]\.?\s?m\.?)/i},"long"),timeOfDay:mr({any:[/^a/i,/^p/i]},"any")},options:{weekStartsOn:0,firstWeekContainsDate:1}},br=864e5;function _r(t,e){var n=tr(t,e),r=n.getTime();n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0);var i=r-n.getTime();return Math.floor(i/br)+1}function wr(t,e){var n=tr(t,e),r=n.getUTCDay(),i=(r<1?7:0)+r-1;return n.setUTCDate(n.getUTCDate()-i),n.setUTCHours(0,0,0,0),n}function xr(t,e){var n=tr(t,e),r=n.getUTCFullYear(),i=new Date(0);i.setUTCFullYear(r+1,0,4),i.setUTCHours(0,0,0,0);var o=wr(i,e),a=new Date(0);a.setUTCFullYear(r,0,4),a.setUTCHours(0,0,0,0);var s=wr(a,e);return n.getTime()>=o.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function $r(t,e){var n=xr(t,e),r=new Date(0);return r.setUTCFullYear(n,0,4),r.setUTCHours(0,0,0,0),wr(r,e)}var kr=6048e5;function Cr(t,e){var n=tr(t,e),r=wr(n,e).getTime()-$r(n,e).getTime();return Math.round(r/kr)+1}var Ar={M:function(t){return t.getUTCMonth()+1},Mo:function(t,e){var n=t.getUTCMonth()+1;return e.locale.localize.ordinalNumber(n,{unit:"month"})},MM:function(t){return Or(t.getUTCMonth()+1,2)},MMM:function(t,e){return e.locale.localize.month(t.getUTCMonth(),{type:"short"})},MMMM:function(t,e){return e.locale.localize.month(t.getUTCMonth(),{type:"long"})},Q:function(t){return Math.ceil((t.getUTCMonth()+1)/3)},Qo:function(t,e){var n=Math.ceil((t.getUTCMonth()+1)/3);return e.locale.localize.ordinalNumber(n,{unit:"quarter"})},D:function(t){return t.getUTCDate()},Do:function(t,e){return e.locale.localize.ordinalNumber(t.getUTCDate(),{unit:"dayOfMonth"})},DD:function(t){return Or(t.getUTCDate(),2)},DDD:function(t){return _r(t)},DDDo:function(t,e){return e.locale.localize.ordinalNumber(_r(t),{unit:"dayOfYear"})},DDDD:function(t){return Or(_r(t),3)},dd:function(t,e){return e.locale.localize.weekday(t.getUTCDay(),{type:"narrow"})},ddd:function(t,e){return e.locale.localize.weekday(t.getUTCDay(),{type:"short"})},dddd:function(t,e){return e.locale.localize.weekday(t.getUTCDay(),{type:"long"})},d:function(t){return t.getUTCDay()},do:function(t,e){return e.locale.localize.ordinalNumber(t.getUTCDay(),{unit:"dayOfWeek"})},E:function(t){return t.getUTCDay()||7},W:function(t){return Cr(t)},Wo:function(t,e){return e.locale.localize.ordinalNumber(Cr(t),{unit:"isoWeek"})},WW:function(t){return Or(Cr(t),2)},YY:function(t){return Or(t.getUTCFullYear(),4).substr(2)},YYYY:function(t){return Or(t.getUTCFullYear(),4)},GG:function(t){return String(xr(t)).substr(2)},GGGG:function(t){return xr(t)},H:function(t){return t.getUTCHours()},HH:function(t){return Or(t.getUTCHours(),2)},h:function(t){var e=t.getUTCHours();return 0===e?12:e>12?e%12:e},hh:function(t){return Or(Ar.h(t),2)},m:function(t){return t.getUTCMinutes()},mm:function(t){return Or(t.getUTCMinutes(),2)},s:function(t){return t.getUTCSeconds()},ss:function(t){return Or(t.getUTCSeconds(),2)},S:function(t){return Math.floor(t.getUTCMilliseconds()/100)},SS:function(t){return Or(Math.floor(t.getUTCMilliseconds()/10),2)},SSS:function(t){return Or(t.getUTCMilliseconds(),3)},Z:function(t,e){return Tr((e._originalDate||t).getTimezoneOffset(),":")},ZZ:function(t,e){return Tr((e._originalDate||t).getTimezoneOffset())},X:function(t,e){var n=e._originalDate||t;return Math.floor(n.getTime()/1e3)},x:function(t,e){return(e._originalDate||t).getTime()},A:function(t,e){return e.locale.localize.timeOfDay(t.getUTCHours(),{type:"uppercase"})},a:function(t,e){return e.locale.localize.timeOfDay(t.getUTCHours(),{type:"lowercase"})},aa:function(t,e){return e.locale.localize.timeOfDay(t.getUTCHours(),{type:"long"})}};function Tr(t,e){e=e||"";var n=t>0?"-":"+",r=Math.abs(t),i=r%60;return n+Or(Math.floor(r/60),2)+e+Or(i,2)}function Or(t,e){for(var n=Math.abs(t).toString();n.lengthi.getTime()}function Lr(t,e,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=tr(t,n),i=tr(e,n);return r.getTime()=0&&s<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var u=tr(t,n),c=Number(e),l=u.getUTCDay(),f=((c%7+7)%7=0&&a<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var s=o.locale||yr,u=s.parsers||{},c=s.units||{};if(!s.match)throw new RangeError("locale must contain match property");if(!s.formatLong)throw new RangeError("locale must contain formatLong property");var l=String(e).replace(Yr,function(t){return"["===t[0]?t:"\\"===t[0]?function(t){if(t.match(/\[[\s\S]/))return t.replace(/^\[|]$/g,"");return t.replace(/\\/g,"")}(t):s.formatLong(t)});if(""===l)return""===i?tr(n,o):new Date(NaN);var f=nr(o);f.locale=s;var p,d=l.match(s.parsingTokensRegExp||Hr),h=d.length,v=[{priority:zr,set:Br,index:0}];for(p=0;p=t},ci={validate:ui,paramNames:["min","max"]},li={validate:function(t,e){var n=e.targetValue;return String(t)===String(n)},options:{hasTarget:!0},paramNames:["targetValue"]};function fi(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function pi(t,e){return t(e={exports:{}},e.exports),e.exports}var di=pi(function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.default=function(t){if(!("string"==typeof t||t instanceof String)){var e=void 0;throw e=null===t?"null":"object"===(e=void 0===t?"undefined":n(t))&&t.constructor&&t.constructor.hasOwnProperty("name")?t.constructor.name:"a "+e,new TypeError("Expected string but received "+e+".")}},t.exports=e.default});fi(di);var hi=fi(pi(function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){(0,r.default)(t);var e=t.replace(/[- ]+/g,"");if(!i.test(e))return!1;for(var n=0,o=void 0,a=void 0,s=void 0,u=e.length-1;u>=0;u--)o=e.substring(u,u+1),a=parseInt(o,10),n+=s&&(a*=2)>=10?a%10+1:a,s=!s;return!(n%10!=0||!e)};var n,r=(n=di)&&n.__esModule?n:{default:n};var i=/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11}|6[27][0-9]{14})$/;t.exports=e.default})),vi={validate:function(t){return hi(String(t))}},mi={validate:function(t,e){void 0===e&&(e={});var n=e.min,r=e.max,i=e.inclusivity;void 0===i&&(i="()");var o=e.format;void 0===o&&(o=i,i="()");var a=Zr(String(n),o),s=Zr(String(r),o),u=Zr(String(t),o);return!!(a&&s&&u)&&("()"===i?jr(u,a)&&Lr(u,s):"(]"===i?jr(u,a)&&(Ir(u,s)||Lr(u,s)):"[)"===i?Lr(u,s)&&(Ir(u,a)||jr(u,a)):Ir(u,s)||Ir(u,a)||Lr(u,s)&&jr(u,a))},options:{isDate:!0},paramNames:["min","max","inclusivity","format"]},gi={validate:function(t,e){return!!Zr(t,e.format)},options:{isDate:!0},paramNames:["format"]},yi=function(t,e){void 0===e&&(e={});var n=e.decimals;void 0===n&&(n="*");var r=e.separator;if(void 0===r&&(r="."),Array.isArray(t))return t.every(function(t){return yi(t,{decimals:n,separator:r})});if(null===t||void 0===t||""===t)return!1;if(0===Number(n))return/^-?\d*$/.test(t);if(!new RegExp("^[-+]?\\d*(\\"+r+"\\d"+("*"===n?"+":"{1,"+n+"}")+")?$").test(t))return!1;var i=parseFloat(t);return i==i},bi={validate:yi,paramNames:["decimals","separator"]},_i=function(t,e){var n=e[0];if(Array.isArray(t))return t.every(function(t){return _i(t,[n])});var r=String(t);return/^[0-9]*$/.test(r)&&r.length===Number(n)},wi={validate:_i},xi={validate:function(t,e){for(var n=e[0],r=e[1],i=[],o=0;o0&&void 0!==arguments[0]?arguments[0]:{},e=arguments[1];for(var n in e)void 0===t[n]&&(t[n]=e[n]);return t},t.exports=e.default});fi($i);var ki=pi(function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.default=function(t,e){(0,i.default)(t);var r=void 0,o=void 0;"object"===(void 0===e?"undefined":n(e))?(r=e.min||0,o=e.max):(r=arguments[1],o=arguments[2]);var a=encodeURI(t).split(/%..|./).length-1;return a>=r&&(void 0===o||a<=o)};var r,i=(r=di)&&r.__esModule?r:{default:r};t.exports=e.default});fi(ki);var Ci=pi(function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){(0,n.default)(t),(e=(0,r.default)(e,o)).allow_trailing_dot&&"."===t[t.length-1]&&(t=t.substring(0,t.length-1));for(var i=t.split("."),a=0;a63)return!1;if(e.require_tld){var s=i.pop();if(!i.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(s))return!1;if(/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(s))return!1}for(var u,c=0;c1&&void 0!==arguments[1]?arguments[1]:"";(0,r.default)(e);n=String(n);if(!n)return t(e,4)||t(e,6);if("4"===n){if(!i.test(e))return!1;var a=e.split(".").sort(function(t,e){return t-e});return a[3]<=255}if("6"===n){var s=e.split(":"),u=!1,c=t(s[s.length-1],4),l=c?7:8;if(s.length>l)return!1;if("::"===e)return!0;"::"===e.substr(0,2)?(s.shift(),s.shift(),u=!0):"::"===e.substr(e.length-2)&&(s.pop(),s.pop(),u=!0);for(var f=0;f0&&f=1:s.length===l}return!1};var n,r=(n=di)&&n.__esModule?n:{default:n};var i=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,o=/^[0-9A-F]{1,4}$/i;t.exports=e.default}),Ti=fi(Ai),Oi=fi(pi(function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){if((0,n.default)(t),(e=(0,r.default)(e,u)).require_display_name||e.allow_display_name){var s=t.match(c);if(s)t=s[1];else if(e.require_display_name)return!1}var v=t.split("@"),m=v.pop(),g=v.join("@"),y=m.toLowerCase();if(e.domain_specific_validation&&("gmail.com"===y||"googlemail.com"===y)){var b=(g=g.toLowerCase()).split("+")[0];if(!(0,i.default)(b.replace(".",""),{min:6,max:30}))return!1;for(var _=b.split("."),w=0;w<_.length;w++)if(!f.test(_[w]))return!1}if(!(0,i.default)(g,{max:64})||!(0,i.default)(m,{max:254}))return!1;if(!(0,o.default)(m,{require_tld:e.require_tld})){if(!e.allow_ip_domain)return!1;if(!(0,a.default)(m)){if(!m.startsWith("[")||!m.endsWith("]"))return!1;var x=m.substr(1,m.length-2);if(0===x.length||!(0,a.default)(x))return!1}}if('"'===g[0])return g=g.slice(1,g.length-1),e.allow_utf8_local_part?h.test(g):p.test(g);for(var $=e.allow_utf8_local_part?d:l,k=g.split("."),C=0;C$/i,l=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,f=/^[a-z\d]+$/,p=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,d=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,h=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i;t.exports=e.default})),Si={validate:function(t,e){return void 0===e&&(e={}),e.multiple&&(t=t.split(",").map(function(t){return t.trim()})),Array.isArray(t)?t.every(function(t){return Oi(String(t),e)}):Oi(String(t),e)}},Di=function(t,e){return Array.isArray(t)?t.every(function(t){return Di(t,e)}):Ie(e).some(function(e){return e==t})},Ei={validate:Di},Mi={validate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return!Di.apply(void 0,t)}},ji={validate:function(t,e){var n=new RegExp(".("+e.join("|")+")$","i");return t.every(function(t){return n.test(t.name)})}},Li={validate:function(t){return t.every(function(t){return/\.(jpg|svg|jpeg|png|bmp|gif)$/i.test(t.name)})}},Ii={validate:function(t){return Array.isArray(t)?t.every(function(t){return/^-?[0-9]+$/.test(String(t))}):/^-?[0-9]+$/.test(String(t))}},Ni={validate:function(t,e){void 0===e&&(e={});var n=e.version;return void 0===n&&(n=4),xe(t)&&(t=""),Array.isArray(t)?t.every(function(t){return Ti(t,n)}):Ti(t,n)},paramNames:["version"]},Ri={validate:function(t,e){return void 0===e&&(e=[]),t===e[0]}},Fi={validate:function(t,e){return void 0===e&&(e=[]),t!==e[0]}},Pi={validate:function(t,e){var n=e[0],r=e[1];return void 0===r&&(r=void 0),n=Number(n),void 0!==t&&null!==t&&("number"==typeof t&&(t=String(t)),t.length||(t=Ie(t)),function(t,e,n){return void 0===n?t.length===e:(n=Number(n),t.length>=e&&t.length<=n)}(t,n,r))}},Ui=function(t,e){var n=e[0];return void 0===t||null===t?n>=0:Array.isArray(t)?t.every(function(t){return Ui(t,[n])}):String(t).length<=n},zi={validate:Ui},qi=function(t,e){var n=e[0];return null!==t&&void 0!==t&&""!==t&&(Array.isArray(t)?t.length>0&&t.every(function(t){return qi(t,[n])}):Number(t)<=n)},Yi={validate:qi},Hi={validate:function(t,e){var n=new RegExp(e.join("|").replace("*",".+")+"$","i");return t.every(function(t){return n.test(t.type)})}},Vi=function(t,e){var n=e[0];return void 0!==t&&null!==t&&(Array.isArray(t)?t.every(function(t){return Vi(t,[n])}):String(t).length>=n)},Bi={validate:Vi},Zi=function(t,e){var n=e[0];return null!==t&&void 0!==t&&""!==t&&(Array.isArray(t)?t.length>0&&t.every(function(t){return Zi(t,[n])}):Number(t)>=n)},Wi={validate:Zi},Gi={validate:function(t){return Array.isArray(t)?t.every(function(t){return/^[0-9]+$/.test(String(t))}):/^[0-9]+$/.test(String(t))}},Ki=function(t,e){var n=e.expression;return"string"==typeof n&&(n=new RegExp(n)),Array.isArray(t)?t.every(function(t){return Ki(t,{expression:n})}):n.test(String(t))},Xi={validate:Ki,paramNames:["expression"]},Ji={validate:function(t,e){void 0===e&&(e=[]);var n=e[0];return void 0===n&&(n=!1),!(Be(t)||!1===t&&n||void 0===t||null===t||!String(t).trim().length)}},Qi={validate:function(t,e){var n=e[0];if(isNaN(n))return!1;for(var r=1024*Number(n),i=0;ir)return!1;return!0}},to=fi(pi(function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){if((0,n.default)(t),!t||t.length>=2083||/[\s<>]/.test(t))return!1;if(0===t.indexOf("mailto:"))return!1;e=(0,o.default)(e,s);var a=void 0,l=void 0,f=void 0,p=void 0,d=void 0,h=void 0,v=void 0,m=void 0;if(v=t.split("#"),t=v.shift(),v=t.split("?"),t=v.shift(),(v=t.split("://")).length>1){if(a=v.shift().toLowerCase(),e.require_valid_protocol&&-1===e.protocols.indexOf(a))return!1}else{if(e.require_protocol)return!1;if("//"===t.substr(0,2)){if(!e.allow_protocol_relative_urls)return!1;v[0]=t.substr(2)}}if(""===(t=v.join("://")))return!1;if(v=t.split("/"),""===(t=v.shift())&&!e.require_host)return!0;if((v=t.split("@")).length>1&&(l=v.shift()).indexOf(":")>=0&&l.split(":").length>2)return!1;p=v.join("@"),h=null,m=null;var g=p.match(u);g?(f="",m=g[1],h=g[2]||null):(v=p.split(":"),f=v.shift(),v.length&&(h=v.join(":")));if(null!==h&&(d=parseInt(h,10),!/^[0-9]+$/.test(h)||d<=0||d>65535))return!1;if(!((0,i.default)(f)||(0,r.default)(f,e)||m&&(0,i.default)(m,6)))return!1;if(f=f||m,e.host_whitelist&&!c(f,e.host_whitelist))return!1;if(e.host_blacklist&&c(f,e.host_blacklist))return!1;return!0};var n=a(di),r=a(Ci),i=a(Ai),o=a($i);function a(t){return t&&t.__esModule?t:{default:t}}var s={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,require_host:!0,require_valid_protocol:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1},u=/^\[([^\]]+)\](?::([0-9]+))?$/;function c(t,e){for(var n=0;n=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(22),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(e,n(5))},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,i,o,a,s,u=1,c={},l=!1,f=t.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(t);p=p&&p.setTimeout?p:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick(function(){h(t)})}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((o=new MessageChannel).port1.onmessage=function(t){h(t.data)},r=function(t){o.port2.postMessage(t)}):f&&"onreadystatechange"in f.createElement("script")?(i=f.documentElement,r=function(t){var e=f.createElement("script");e.onreadystatechange=function(){h(t),e.onreadystatechange=null,i.removeChild(e),e=null},i.appendChild(e)}):r=function(t){setTimeout(h,0,t)}:(a="setImmediate$"+Math.random()+"$",s=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(a)&&h(+e.data.slice(a.length))},t.addEventListener?t.addEventListener("message",s,!1):t.attachEvent("onmessage",s),r=function(e){t.postMessage(a+e,"*")}),p.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n=0,o=i&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,t.exports=n(32),i)r.regeneratorRuntime=o;else try{delete r.regeneratorRuntime}catch(t){r.regeneratorRuntime=void 0}},function(t,e){!function(e){"use strict";var n,r=Object.prototype,i=r.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag",c="object"==typeof t,l=e.regeneratorRuntime;if(l)c&&(t.exports=l);else{(l=e.regeneratorRuntime=c?t.exports:{}).wrap=_;var f="suspendedStart",p="suspendedYield",d="executing",h="completed",v={},m={};m[a]=function(){return this};var g=Object.getPrototypeOf,y=g&&g(g(E([])));y&&y!==r&&i.call(y,a)&&(m=y);var b=k.prototype=x.prototype=Object.create(m);$.prototype=b.constructor=k,k.constructor=$,k[u]=$.displayName="GeneratorFunction",l.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===$||"GeneratorFunction"===(e.displayName||e.name))},l.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,k):(t.__proto__=k,u in t||(t[u]="GeneratorFunction")),t.prototype=Object.create(b),t},l.awrap=function(t){return{__await:t}},C(A.prototype),A.prototype[s]=function(){return this},l.AsyncIterator=A,l.async=function(t,e,n,r){var i=new A(_(t,e,n,r));return l.isGeneratorFunction(e)?i:i.next().then(function(t){return t.done?t.value:i.next()})},C(b),b[u]="Generator",b[a]=function(){return this},b.toString=function(){return"[object Generator]"},l.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var r=e.pop();if(r in t)return n.value=r,n.done=!1,n}return n.done=!0,n}},l.values=E,D.prototype={constructor:D,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(S),!t)for(var e in this)"t"===e.charAt(0)&&i.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=n)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function r(r,i){return s.type="throw",s.arg=t,e.next=r,i&&(e.method="next",e.arg=n),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var u=i.call(a,"catchLoc"),c=i.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&i.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),S(n),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;S(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:E(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=n),v}}}function _(t,e,n,r){var i=e&&e.prototype instanceof x?e:x,o=Object.create(i.prototype),a=new D(r||[]);return o._invoke=function(t,e,n){var r=f;return function(i,o){if(r===d)throw new Error("Generator is already running");if(r===h){if("throw"===i)throw o;return M()}for(n.method=i,n.arg=o;;){var a=n.delegate;if(a){var s=T(a,n);if(s){if(s===v)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===f)throw r=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=d;var u=w(t,e,n);if("normal"===u.type){if(r=n.done?h:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r=h,n.method="throw",n.arg=u.arg)}}}(t,n,a),o}function w(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}function x(){}function $(){}function k(){}function C(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function A(t){var e;this._invoke=function(n,r){function o(){return new Promise(function(e,o){!function e(n,r,o,a){var s=w(t[n],t,r);if("throw"!==s.type){var u=s.arg,c=u.value;return c&&"object"==typeof c&&i.call(c,"__await")?Promise.resolve(c.__await).then(function(t){e("next",t,o,a)},function(t){e("throw",t,o,a)}):Promise.resolve(c).then(function(t){u.value=t,o(u)},a)}a(s.arg)}(n,r,e,o)})}return e=e?e.then(o,o):o()}}function T(t,e){var r=t.iterator[e.method];if(r===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=n,T(t,e),"throw"===e.method))return v;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var i=w(r,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,v;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=n),e.delegate=null,v):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,v)}function O(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function D(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(O,this),this.reset(!0)}function E(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,o=function e(){for(;++r=0)return;a[e]="set-cookie"===e?(a[e]?a[e]:[]).concat([n]):a[e]?a[e]+", "+n:n}}),a):a}},function(t,e,n){"use strict";var r=n(1);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=i(window.location.href),function(e){var n=r.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function i(){this.message="String contains an invalid character"}i.prototype=new Error,i.prototype.code=5,i.prototype.name="InvalidCharacterError",t.exports=function(t){for(var e,n,o=String(t),a="",s=0,u=r;o.charAt(0|s)||(u="=",s%1);a+=u.charAt(63&e>>8-s%1*8)){if((n=o.charCodeAt(s+=.75))>255)throw new i;e=e<<8|n}return a}},function(t,e,n){"use strict";var r=n(1);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,i,o,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";var r=n(1);function i(){this.handlers=[]}i.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},i.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},i.prototype.forEach=function(t){r.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=i},function(t,e,n){"use strict";var r=n(1),i=n(47),o=n(14),a=n(9),s=n(48),u=n(49);function c(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return c(t),t.baseURL&&!s(t.url)&&(t.url=u(t.baseURL,t.url)),t.headers=t.headers||{},t.data=i(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]}),(t.adapter||a.adapter)(t).then(function(e){return c(t),e.data=i(e.data,e.headers,t.transformResponse),e},function(e){return o(e)||(c(t),e&&e.response&&(e.response.data=i(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)})}},function(t,e,n){"use strict";var r=n(1);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(15);function i(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise(function(t){e=t});var n=this;t(function(t){n.reason||(n.reason=new r(t),e(n.reason))})}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var t;return{token:new i(function(e){t=e}),cancel:t}},t.exports=i},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dashboard"},[n("form",{staticClass:"form form--create",attrs:{method:"post"}},[n("div",{staticClass:"form-group"},[n("label",{attrs:{for:"name"}},[n("span",{staticClass:"label-name"},[t._v("Name")]),t._v(" "),n("span",{staticClass:"label-hint"},[t._v("E.g. atoms.buttons.button")]),t._v(" "),t.errors.has("name")?n("small",{staticClass:"error a-slideIn"},[t._v(t._s(t.errors.first("name")))]):t._e()]),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.pattern.name,expression:"pattern.name"},{name:"validate",rawName:"v-validate.disable",value:"required|uniquePattern",expression:"'required|uniquePattern'",modifiers:{disable:!0}}],staticClass:"form-control",attrs:{id:"name",type:"text",name:"name","aria-describedby":"nameHelp",autofocus:""},domProps:{value:t.pattern.name},on:{keydown:[function(e){return("button"in e||83===e.keyCode)&&e.ctrlKey?(e.preventDefault(),t.save(e)):null},function(e){return"button"in e||!t._k(e.keyCode,"esc",27,e.key,"Escape")?t.cancel(e):null}],input:function(e){e.target.composing||t.$set(t.pattern,"name",e.target.value)}}})]),t._v(" "),n("div",{staticClass:"form-group"},[n("label",{attrs:{for:"description"}},[t._m(0),t._v(" "),t.errors.has("description")?n("small",{staticClass:"error a-slideIn"},[t._v(t._s(t.errors.first("description")))]):t._e()]),t._v(" "),n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.pattern.description,expression:"pattern.description"}],staticClass:"form-control",attrs:{id:"description",name:"description"},domProps:{value:t.pattern.description},on:{keydown:[function(e){return("button"in e||83===e.keyCode)&&e.ctrlKey?(e.preventDefault(),t.save(e)):null},function(e){return"button"in e||!t._k(e.keyCode,"esc",27,e.key,"Escape")?t.cancel(e):null}],input:function(e){e.target.composing||t.$set(t.pattern,"description",e.target.value)}}})]),t._v(" "),n("div",{staticClass:"form-group form-group--end"},[n("router-link",{attrs:{to:{name:"dashboard"}}},[n("span",[t._v("Cancel")])]),t._v(" "),n("button",{staticClass:"btn btn--primary btn--sm",on:{click:function(e){return e.preventDefault(),t.save(e)}}},[n("span",[t._v("Create pattern")])])],1)])])},staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("span",{staticClass:"label-name"},[this._v("\n Description "),e("span",[this._v("(optional)")])])}]}},function(t,e,n){var r=n(0)(n(54),n(55),!1,null,null,null);t.exports=r.exports},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=n.n(r),o=n(2),a=n(4);e.default={name:"UpdatePattern",data:function(){return{pattern:{name:this.$route.params.pattern},currentName:this.$route.params.pattern}},methods:{cancel:function(){this.$router.push({name:"preview",params:{pattern:this.currentName}})},save:function(){var t,e=(t=i.a.mark(function t(){var e;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e=!1,t.prev=1,t.next=4,this.$validator.validate();case 4:e=t.sent,t.next=10;break;case 7:t.prev=7,t.t0=t.catch(1),o.a.error(t.t0);case 10:if(!e){t.next=22;break}return t.prev=11,t.next=14,a.a.put("pattern/"+this.currentName,{name:this.pattern.name});case 14:t.sent,this.$store.commit("reloadNavi",!0),this.$router.push({name:"preview",params:{pattern:this.pattern.name}}),t.next=22;break;case 19:t.prev=19,t.t1=t.catch(11),o.a.error(t.t1);case 22:case"end":return t.stop()}},t,this,[[1,7],[11,19]])}),function(){var e=t.apply(this,arguments);return new Promise(function(t,n){return function r(i,o){try{var a=e[i](o),s=a.value}catch(t){return void n(t)}if(!a.done)return Promise.resolve(s).then(function(t){r("next",t)},function(t){r("throw",t)});t(s)}("next")})});return function(){return e.apply(this,arguments)}}()}}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dashboard"},[n("form",{staticClass:"form form--create",attrs:{method:"post"}},[n("div",{staticClass:"form-group"},[n("label",{attrs:{for:"name"}},[n("span",{staticClass:"label-name"},[t._v("Name")]),t._v(" "),n("span",{staticClass:"label-hint"},[t._v("E.g. atoms.buttons.button")]),t._v(" "),t.errors.has("name")?n("small",{staticClass:"error a-slideIn"},[t._v(t._s(t.errors.first("name")))]):t._e()]),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.pattern.name,expression:"pattern.name"},{name:"validate",rawName:"v-validate.disable",value:"required|uniquePattern",expression:"'required|uniquePattern'",modifiers:{disable:!0}}],staticClass:"form-control",attrs:{id:"name",type:"text",name:"name","aria-describedby":"nameHelp",autofocus:""},domProps:{value:t.pattern.name},on:{keydown:[function(e){return("button"in e||83===e.keyCode)&&e.ctrlKey?(e.preventDefault(),t.save(e)):null},function(e){return"button"in e||!t._k(e.keyCode,"esc",27,e.key,"Escape")?t.cancel(e):null}],input:function(e){e.target.composing||t.$set(t.pattern,"name",e.target.value)}}})]),t._v(" "),n("div",{staticClass:"form-group form-group--end"},[n("router-link",{attrs:{to:{name:"preview",params:{pattern:t.currentName}}}},[n("span",[t._v("Cancel")])]),t._v(" "),n("button",{staticClass:"btn btn--primary btn--sm",on:{click:function(e){return e.preventDefault(),t.save(e)}}},[n("span",[t._v("Save")])])],1)])])},staticRenderFns:[]}},function(t,e,n){var r=n(0)(n(57),n(65),!1,null,null,null);t.exports=r.exports},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=n.n(r),o=n(4),a=n(2),s=n(58),u=n.n(s),c=n(61),l=n.n(c),f=n(64),p=n.n(f);function d(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){return function r(i,o){try{var a=e[i](o),s=a.value}catch(t){return void n(t)}if(!a.done)return Promise.resolve(s).then(function(t){r("next",t)},function(t){r("throw",t)});t(s)}("next")})}}e.default={name:"PreviewPattern",components:{ConfirmationWindow:l.a,StatusBar:u.a},data:function(){return{pattern:{name:this.$route.params.pattern,description:""},loading:!1,isToggled:!1,showOptions:!1,showDescription:!1,showDeleteConfirm:!1,editModeDescription:!1,oldDescription:""}},computed:{markdownDescription:function(){return p()(this.pattern.description)}},watch:{$route:"fetchPattern"},methods:{renamePattern:function(){this.$router.push({name:"rename",params:{pattern:this.$route.params.pattern}})},editDescription:function(){this.editModeDescription=!0,this.oldDescription=this.pattern.description},cancelDescription:function(){this.editModeDescription=!1,this.pattern.description=this.oldDescription},updatePattern:function(){var t=d(i.a.mark(function t(){return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return this.editModeDescription=!1,t.prev=1,t.next=4,o.a.put("pattern/"+this.pattern.name,{description:this.pattern.description});case 4:t.sent,t.next=11;break;case 7:t.prev=7,t.t0=t.catch(1),this.pattern.description=this.oldDescription,a.a.error(t.t0);case 11:case"end":return t.stop()}},t,this,[[1,7]])}));return function(){return t.apply(this,arguments)}}(),fetchPattern:function(){var t=d(i.a.mark(function t(){var e;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return this.loading=!0,t.prev=1,t.next=4,o.a.get(this.$route.params.pattern);case 4:e=t.sent,this.pattern=e.data.data,this.loading=!1,t.next=12;break;case 9:t.prev=9,t.t0=t.catch(1),a.a.error(t.t0);case 12:case"end":return t.stop()}},t,this,[[1,9]])}));return function(){return t.apply(this,arguments)}}(),updateStatus:function(){var t=d(i.a.mark(function t(e){return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,o.a.put("pattern/status/"+this.pattern.name,{status:e});case 3:t.sent,this.pattern.status=e,t.next=10;break;case 7:t.prev=7,t.t0=t.catch(0),a.a.error(t.t0);case 10:case"end":return t.stop()}},t,this,[[0,7]])}));return function(e){return t.apply(this,arguments)}}(),confirmDelete:function(){this.showDeleteConfirm=!0},deletePattern:function(){var t=d(i.a.mark(function t(e){return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,o.a.delete(e);case 3:t.sent,this.$store.commit("reloadNavi",!0),this.$router.push("/"),t.next=11;break;case 8:t.prev=8,t.t0=t.catch(0),a.a.error(t.t0);case 11:case"end":return t.stop()}},t,this,[[0,8]])}));return function(e){return t.apply(this,arguments)}}()},created:function(){this.fetchPattern()},mounted:function(){var t=this;window.addEventListener("keydown",function(e){e.ctrlKey&&46===e.keyCode&&(e.preventDefault(),t.confirmDelete()),e.ctrlKey&&69===e.keyCode&&(e.preventDefault(),t.renamePattern())})}}},function(t,e,n){var r=n(0)(n(59),n(60),!1,null,null,null);t.exports=r.exports},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"StatusBar",props:["status"],data:function(){return{isActive:!1}},computed:{isTodo:function(){return"todo"===this.status},isToCheck:function(){return"review"===this.status},isAccepted:function(){return"done"===this.status},isRejected:function(){return"rejected"===this.status},title:function(){return"status: "+this.status}},methods:{changeStatus:function(t){this.$emit("update-status",t),this.isActive=!1}}}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"statusbar"},[n("div",{staticClass:"status-current",class:{accepted:t.isAccepted,toCheck:t.isToCheck,rejected:t.isRejected,wip:t.isTodo},attrs:{title:t.title},on:{click:function(e){t.isActive=!t.isActive}}}),t._v(" "),t.isActive?n("div",{staticClass:"status-menue a-dropIn"},[n("ul",{staticClass:"status-list"},[n("li",{staticClass:"status-option toCheck",on:{click:function(e){t.changeStatus("review")}}},[t._v("\n Unreviewed\n ")]),t._v(" "),n("li",{staticClass:"status-option rejected",on:{click:function(e){t.changeStatus("rejected")}}},[t._v("\n Rejected\n ")]),t._v(" "),n("li",{staticClass:"status-option accepted",on:{click:function(e){t.changeStatus("done")}}},[t._v("\n Accepted\n ")])])]):t._e()])},staticRenderFns:[]}},function(t,e,n){var r=n(0)(n(62),n(63),!1,null,null,null);t.exports=r.exports},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"ConfirmationWindow",methods:{confirmYes:function(){this.$emit("confirm-yes")},confirmNo:function(){this.$emit("confirm-no")}},mounted:function(){var t=this;window.addEventListener("keydown",function(e){27===e.keyCode&&t.confirmNo()})}}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"popUp popUp--confirmation"},[n("div",{staticClass:"popUp-inner a-dropIn"},[n("p",[t._t("default")],2),t._v(" "),n("div",{staticClass:"popUp-controls"},[n("button",{staticClass:"btn btn--sm btn--secondary",on:{click:t.confirmNo}},[n("span",[t._v("no")])]),t._v(" "),n("button",{staticClass:"btn btn--sm btn--primary",on:{click:t.confirmYes}},[n("span",[t._v("yes")])])])]),t._v(" "),n("div",{staticClass:"darken a-dropIn"})])},staticRenderFns:[]}},function(t,e,n){(function(e){!function(e){"use strict";var n={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:v,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:v,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:v,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function r(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||b.defaults,this.rules=n.normal,this.options.pedantic?this.rules=n.pedantic:this.options.gfm&&(this.options.tables?this.rules=n.tables:this.rules=n.gfm)}n._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,n._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,n.def=f(n.def).replace("label",n._label).replace("title",n._title).getRegex(),n.bullet=/(?:[*+-]|\d+\.)/,n.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,n.item=f(n.item,"gm").replace(/bull/g,n.bullet).getRegex(),n.list=f(n.list).replace(/bull/g,n.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+n.def.source+")").getRegex(),n._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",n._comment=//,n.html=f(n.html,"i").replace("comment",n._comment).replace("tag",n._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),n.paragraph=f(n.paragraph).replace("hr",n.hr).replace("heading",n.heading).replace("lheading",n.lheading).replace("tag",n._tag).getRegex(),n.blockquote=f(n.blockquote).replace("paragraph",n.paragraph).getRegex(),n.normal=m({},n),n.gfm=m({},n.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),n.gfm.paragraph=f(n.paragraph).replace("(?!","(?!"+n.gfm.fences.source.replace("\\1","\\2")+"|"+n.list.source.replace("\\1","\\3")+"|").getRegex(),n.tables=m({},n.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),n.pedantic=m({},n.normal,{html:f("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",n._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),r.rules=n,r.lex=function(t,e){return new r(e).lex(t)},r.prototype.lex=function(t){return t=t.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(t,!0)},r.prototype.token=function(t,e){var r,i,o,a,s,u,c,l,f,p,d,h,v,m,b,_;for(t=t.replace(/^ +$/gm,"");t;)if((o=this.rules.newline.exec(t))&&(t=t.substring(o[0].length),o[0].length>1&&this.tokens.push({type:"space"})),o=this.rules.code.exec(t))t=t.substring(o[0].length),o=o[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?o:y(o,"\n")});else if(o=this.rules.fences.exec(t))t=t.substring(o[0].length),this.tokens.push({type:"code",lang:o[2],text:o[3]||""});else if(o=this.rules.heading.exec(t))t=t.substring(o[0].length),this.tokens.push({type:"heading",depth:o[1].length,text:o[2]});else if(e&&(o=this.rules.nptable.exec(t))&&(u={type:"table",header:g(o[1].replace(/^ *| *\| *$/g,"")),align:o[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:o[3]?o[3].replace(/\n$/,"").split("\n"):[]}).header.length===u.align.length){for(t=t.substring(o[0].length),d=0;d ?/gm,""),this.token(o,e),this.tokens.push({type:"blockquote_end"});else if(o=this.rules.list.exec(t)){for(t=t.substring(o[0].length),c={type:"list_start",ordered:m=(a=o[2]).length>1,start:m?+a:"",loose:!1},this.tokens.push(c),l=[],r=!1,v=(o=o[0].match(this.rules.item)).length,d=0;d1&&s.length>1||(t=o.slice(d+1).join("\n")+t,d=v-1)),i=r||/\n\n(?!\s*$)/.test(u),d!==v-1&&(r="\n"===u.charAt(u.length-1),i||(i=r)),i&&(c.loose=!0),_=void 0,(b=/^\[[ xX]\] /.test(u))&&(_=" "!==u[1],u=u.replace(/^\[[ xX]\] +/,"")),f={type:"list_item_start",task:b,checked:_,loose:i},l.push(f),this.tokens.push(f),this.token(u,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(v=l.length,d=0;d?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:v,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\s.])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\s.])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:v,text:/^(`+|[^`])[\s\S]*?(?=[\\?@\[\]\\^_`{|}~])/g,i._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,i._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,i.autolink=f(i.autolink).replace("scheme",i._scheme).replace("email",i._email).getRegex(),i._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,i.tag=f(i.tag).replace("comment",n._comment).replace("attribute",i._attribute).getRegex(),i._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,i._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/,i._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,i.link=f(i.link).replace("label",i._label).replace("href",i._href).replace("title",i._title).getRegex(),i.reflink=f(i.reflink).replace("label",i._label).getRegex(),i.normal=m({},i),i.pedantic=m({},i.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:f(/^!?\[(label)\]\((.*?)\)/).replace("label",i._label).getRegex(),reflink:f(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",i._label).getRegex()}),i.gfm=m({},i.normal,{escape:f(i.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:f(i.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),i.gfm.url=f(i.gfm.url).replace("email",i.gfm._extended_email).getRegex(),i.breaks=m({},i.gfm,{br:f(i.br).replace("{2,}","*").getRegex(),text:f(i.gfm.text).replace("{2,}","*").getRegex()}),o.rules=i,o.output=function(t,e,n){return new o(e,n).output(t)},o.prototype.output=function(t){for(var e,n,r,i,a,s,u="";t;)if(a=this.rules.escape.exec(t))t=t.substring(a[0].length),u+=a[1];else if(a=this.rules.autolink.exec(t))t=t.substring(a[0].length),r="@"===a[2]?"mailto:"+(n=c(this.mangle(a[1]))):n=c(a[1]),u+=this.renderer.link(r,null,n);else if(this.inLink||!(a=this.rules.url.exec(t))){if(a=this.rules.tag.exec(t))!this.inLink&&/^/i.test(a[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(a[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(a[0])&&(this.inRawBlock=!1),t=t.substring(a[0].length),u+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(a[0]):c(a[0]):a[0];else if(a=this.rules.link.exec(t))t=t.substring(a[0].length),this.inLink=!0,r=a[2],this.options.pedantic?(e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=e[1],i=e[3]):i="":i=a[3]?a[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),u+=this.outputLink(a,{href:o.escapes(r),title:o.escapes(i)}),this.inLink=!1;else if((a=this.rules.reflink.exec(t))||(a=this.rules.nolink.exec(t))){if(t=t.substring(a[0].length),e=(a[2]||a[1]).replace(/\s+/g," "),!(e=this.links[e.toLowerCase()])||!e.href){u+=a[0].charAt(0),t=a[0].substring(1)+t;continue}this.inLink=!0,u+=this.outputLink(a,e),this.inLink=!1}else if(a=this.rules.strong.exec(t))t=t.substring(a[0].length),u+=this.renderer.strong(this.output(a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.em.exec(t))t=t.substring(a[0].length),u+=this.renderer.em(this.output(a[6]||a[5]||a[4]||a[3]||a[2]||a[1]));else if(a=this.rules.code.exec(t))t=t.substring(a[0].length),u+=this.renderer.codespan(c(a[2].trim(),!0));else if(a=this.rules.br.exec(t))t=t.substring(a[0].length),u+=this.renderer.br();else if(a=this.rules.del.exec(t))t=t.substring(a[0].length),u+=this.renderer.del(this.output(a[1]));else if(a=this.rules.text.exec(t))t=t.substring(a[0].length),this.inRawBlock?u+=this.renderer.text(a[0]):u+=this.renderer.text(c(this.smartypants(a[0])));else if(t)throw new Error("Infinite loop on byte: "+t.charCodeAt(0))}else{if("@"===a[2])r="mailto:"+(n=c(a[0]));else{do{s=a[0],a[0]=this.rules._backpedal.exec(a[0])[0]}while(s!==a[0]);n=c(a[0]),r="www."===a[1]?"http://"+n:n}t=t.substring(a[0].length),u+=this.renderer.link(r,null,n)}return u},o.escapes=function(t){return t?t.replace(o.rules._escapes,"$1"):t},o.prototype.outputLink=function(t,e){var n=e.href,r=e.title?c(e.title):null;return"!"!==t[0].charAt(0)?this.renderer.link(n,r,this.output(t[1])):this.renderer.image(n,r,c(t[1]))},o.prototype.smartypants=function(t){return this.options.smartypants?t.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):t},o.prototype.mangle=function(t){if(!this.options.mangle)return t;for(var e,n="",r=t.length,i=0;i.5&&(e="x"+e.toString(16)),n+="&#"+e+";";return n},a.prototype.code=function(t,e,n){if(this.options.highlight){var r=this.options.highlight(t,e);null!=r&&r!==t&&(n=!0,t=r)}return e?'
'+(n?t:c(t,!0))+"
\n":"
"+(n?t:c(t,!0))+"
"},a.prototype.blockquote=function(t){return"
\n"+t+"
\n"},a.prototype.html=function(t){return t},a.prototype.heading=function(t,e,n){return this.options.headerIds?"'+t+"\n":""+t+"\n"},a.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},a.prototype.list=function(t,e,n){var r=e?"ol":"ul";return"<"+r+(e&&1!==n?' start="'+n+'"':"")+">\n"+t+"\n"},a.prototype.listitem=function(t){return"
  • "+t+"
  • \n"},a.prototype.checkbox=function(t){return" "},a.prototype.paragraph=function(t){return"

    "+t+"

    \n"},a.prototype.table=function(t,e){return e&&(e=""+e+""),"\n\n"+t+"\n"+e+"
    \n"},a.prototype.tablerow=function(t){return"\n"+t+"\n"},a.prototype.tablecell=function(t,e){var n=e.header?"th":"td";return(e.align?"<"+n+' align="'+e.align+'">':"<"+n+">")+t+"\n"},a.prototype.strong=function(t){return""+t+""},a.prototype.em=function(t){return""+t+""},a.prototype.codespan=function(t){return""+t+""},a.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},a.prototype.del=function(t){return""+t+""},a.prototype.link=function(t,e,n){if(null===(t=p(this.options.sanitize,this.options.baseUrl,t)))return n;var r='
    "},a.prototype.image=function(t,e,n){if(null===(t=p(this.options.sanitize,this.options.baseUrl,t)))return n;var r=''+n+'":">"},a.prototype.text=function(t){return t},s.prototype.strong=s.prototype.em=s.prototype.codespan=s.prototype.del=s.prototype.text=function(t){return t},s.prototype.link=s.prototype.image=function(t,e,n){return""+n},s.prototype.br=function(){return""},u.parse=function(t,e){return new u(e).parse(t)},u.prototype.parse=function(t){this.inline=new o(t.links,this.options),this.inlineText=new o(t.links,m({},this.options,{renderer:new s})),this.tokens=t.reverse();for(var e="";this.next();)e+=this.tok();return e},u.prototype.next=function(){return this.token=this.tokens.pop()},u.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},u.prototype.parseText=function(){for(var t=this.token.text;"text"===this.peek().type;)t+="\n"+this.next().text;return this.inline.output(t)},u.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,l(this.inlineText.output(this.token.text)));case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var t,e,n,r,i="",o="";for(n="",t=0;t"']/,c.escapeReplace=/[&<>"']/g,c.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},c.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,c.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var d={},h=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function v(){}function m(t){for(var e,n,r=1;r=0&&"\\"===n[i];)r=!r;return r?"|":" |"}).split(/ \|/),r=0;if(n.length>e)n.splice(e);else for(;n.lengthAn error occurred:

    "+c(t.message+"",!0)+"
    ";throw t}}v.exec=v,b.options=b.setOptions=function(t){return m(b.defaults,t),b},b.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new a,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},b.defaults=b.getDefaults(),b.Parser=u,b.parser=u.parse,b.Renderer=a,b.TextRenderer=s,b.Lexer=r,b.lexer=r.lex,b.InlineLexer=o,b.inlineLexer=o.output,b.parse=b,t.exports=b}(this||"undefined"!=typeof window&&window)}).call(e,n(5))},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"view--inner"},[n("div",{staticClass:"code"},[n("div",{staticClass:"code-el"},[n("div",{staticClass:"code-header"},[t.isToggled?t._e():n("span",{staticClass:"code-type a-fadeIn"},[t._v("HTML")]),t._v(" "),t.isToggled?n("span",{staticClass:"code-type a-fadeIn"},[t._v("Blade")]):t._e(),t._v(" "),n("label",{staticClass:"toggle-wrap"},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.isToggled,expression:"isToggled"}],staticClass:"toggle",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(t.isToggled)?t._i(t.isToggled,null)>-1:t.isToggled},on:{change:function(e){var n=t.isToggled,r=e.target,i=!!r.checked;if(Array.isArray(n)){var o=t._i(n,null);r.checked?o<0&&(t.isToggled=n.concat([null])):o>-1&&(t.isToggled=n.slice(0,o).concat(n.slice(o+1)))}else t.isToggled=i}}}),t._v(" "),n("div"),t._v(" "),n("span",[t._v("Show Blade")])])]),t._v(" "),n("div",{staticClass:"code-tabs"},[t.isToggled?n("div",{staticClass:"tab a-fadeIn",attrs:{role:"tabpanel","aria-labelledby":"markup-view"}},[n("pre",[n("code",{staticClass:"language-html"},[t._v(t._s(t.pattern.template))])])]):t._e(),t._v(" "),t.isToggled?t._e():n("div",{staticClass:"tab a-fadeIn",attrs:{id:"html-view",role:"tabpanel","aria-labelledby":"html-view"}},[n("pre",[n("code",{staticClass:"language-html"},[t._v(t._s(t.pattern.html))])])])])]),t._v(" "),n("div",{staticClass:"code-el"},[t._m(0),t._v(" "),n("div",{staticClass:"code-tabs"},[n("div",{staticClass:"tab",attrs:{id:"markup-view",role:"tabpanel","aria-labelledby":"markup-view"}},[n("pre",[n("code",[t._v(t._s(t.pattern.sass))])])])])])]),t._v(" "),n("div",{staticClass:"preview"},[n("div",{staticClass:"preview-infosWrap"},[n("div",{staticClass:"preview-infos"},[t._v("\n\n "+t._s(t.pattern.name)+"\n\n "),n("status-bar",{attrs:{status:t.pattern.status},on:{"update-status":t.updateStatus}}),t._v(" "),n("button",{staticClass:"toggle--more",class:{active:t.showDescription},attrs:{title:"Show Pattern description"},on:{click:function(e){t.showDescription=!t.showDescription}}},[n("i",{staticClass:"fas fa-align-left"})])],1),t._v(" "),t.showDescription?[n("div",{staticClass:"preview-description a-dropIn",domProps:{innerHTML:t._s(t.markdownDescription)},on:{click:t.editDescription}}),t._v(" "),t.editModeDescription?n("form",{staticClass:"preview-description",attrs:{method:"post"}},[t._m(1),t._v(" "),n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.pattern.description,expression:"pattern.description"}],staticClass:"form-control",attrs:{id:"description",name:"description",autofocus:""},domProps:{value:t.pattern.description},on:{keydown:[function(e){return("button"in e||83===e.keyCode)&&e.ctrlKey?(e.preventDefault(),t.updatePattern(e)):null},function(e){return"button"in e||!t._k(e.keyCode,"esc",27,e.key,"Escape")?t.cancelDescription(e):null}],input:function(e){e.target.composing||t.$set(t.pattern,"description",e.target.value)}}},[t._v(t._s(t.pattern.description))]),t._v(" "),n("div",{staticClass:"form-group form-group--end"},[n("button",{staticClass:"btn btn--primary btn--sm",attrs:{type:"button"},on:{click:t.cancelDescription}},[n("span",[t._v("Cancel")])]),t._v(" "),n("button",{staticClass:"btn btn--primary btn--sm",attrs:{type:"button"},on:{click:t.updatePattern}},[n("span",[t._v("Save")])])])]):t._e()]:t._e(),t._v(" "),n("div",{staticClass:"preview-optionsWrap"},[n("button",{staticClass:"toggle--more",class:{active:t.showOptions},on:{click:function(e){t.showOptions=!t.showOptions}}},[n("i",{staticClass:"fas fa-ellipsis-v"})]),t._v(" "),t.showOptions?n("div",{staticClass:"preview-options a-dropIn"},[n("ul",[n("li",[n("router-link",{staticClass:"preview-option",attrs:{to:{name:"rename",params:{pattern:""+t.pattern.name}}}},[n("span",[t._v("\n Rename Pattern\n ")])])],1),t._v(" "),n("li",[n("button",{staticClass:"preview-option",on:{click:t.confirmDelete}},[n("span",[t._v(" \n Delete\n ")])])])])]):t._e()])],2),t._v(" "),n("div",{staticClass:"preview-inner"},[n("iframe",{attrs:{height:"1500",width:"1100",frameBorder:"0",src:"workshop/preview/"+t.pattern.name}})])]),t._v(" "),t.showDeleteConfirm?n("confirmation-window",{on:{"confirm-yes":function(e){t.deletePattern(t.pattern.name)},"confirm-no":function(e){t.showDeleteConfirm=!1}}},[t._v("\n Do you really want to delete '"+t._s(t.pattern.name)+"'?\n ")]):t._e()],1)},staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"code-header"},[e("span",[this._v("CSS/SCSS")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("label",{attrs:{for:"description"}},[e("span",{staticClass:"label-name"},[this._v("\n Description "),e("span",[this._v("(optional)")])])])}]}},function(t,e,n){var r=n(0)(n(67),n(78),!1,null,null,null);t.exports=r.exports},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=n.n(r),o=n(68),a=n.n(o),s=n(4),u=n(2);e.default={name:"WorkshopGui",components:{Navbar:a.a},methods:{createPattern:function(){this.$router.push({name:"create"})},resetMenu:function(){this.$store.commit("resetMainMenu")}},beforeCreate:function(){var t,e=(t=i.a.mark(function t(){var e;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,s.a.get("info");case 3:e=t.sent,this.$store.commit("appInfo",e.data),t.next=10;break;case 7:t.prev=7,t.t0=t.catch(0),u.a.error(t.t0);case 10:case"end":return t.stop()}},t,this,[[0,7]])}),function(){var e=t.apply(this,arguments);return new Promise(function(t,n){return function r(i,o){try{var a=e[i](o),s=a.value}catch(t){return void n(t)}if(!a.done)return Promise.resolve(s).then(function(t){r("next",t)},function(t){r("throw",t)});t(s)}("next")})});return function(){return e.apply(this,arguments)}}(),mounted:function(){var t=this;window.addEventListener("keydown",function(e){e.ctrlKey&&67===e.keyCode&&(t.createPattern(),e.preventDefault())})}}},function(t,e,n){var r=n(0)(n(69),n(77),!1,null,null,null);t.exports=r.exports},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=n.n(r),o=n(70),a=n.n(o),s=n(10),u=n.n(s),c=n(16),l=n.n(c),f=n(4),p=n(2);e.default={name:"Navbar",components:{NavbarMain:a.a,NavbarLink:u.a,NavbarGroup:l.a},data:function(){return{navi:[]}},computed:{notDashboard:function(){return"dashboard"!==this.$route.name}},methods:{fetchNavi:function(){var t,e=(t=i.a.mark(function t(){var e;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,f.a.get("navi");case 3:e=t.sent,this.navi=e.data.data,t.next=10;break;case 7:t.prev=7,t.t0=t.catch(0),p.a.error(t.t0);case 10:case"end":return t.stop()}},t,this,[[0,7]])}),function(){var e=t.apply(this,arguments);return new Promise(function(t,n){return function r(i,o){try{var a=e[i](o),s=a.value}catch(t){return void n(t)}if(!a.done)return Promise.resolve(s).then(function(t){r("next",t)},function(t){r("throw",t)});t(s)}("next")})});return function(){return e.apply(this,arguments)}}(),reloadNavi:function(){!0===this.$store.state.navi.reload&&(this.fetchNavi(),this.$store.commit("reloadNavi",!1))}},watch:{"$store.state.navi.reload":"reloadNavi"},created:function(){this.fetchNavi()}}},function(t,e,n){var r=n(0)(n(71),n(76),!1,null,null,null);t.exports=r.exports},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n.n(r),o=n(16),a=n.n(o);e.default={name:"NavbarMain",components:{NavbarGroup:a.a,NavbarLink:i.a},props:["menu"],methods:{toggleMainMenu:function(t){this.$store.state.navi.activeMain===t?this.$store.commit("resetMainMenu"):this.$store.commit("toggleMainMenu",t)}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"NavbarLink",props:{item:Object}}},function(t,e){t.exports={render:function(){var t=this.$createElement;return(this._self._c||t)("router-link",{attrs:{to:{name:"preview",params:{pattern:""+this.item.path}}}},[this._v("\n "+this._s(this.item.name)+"\n")])},staticRenderFns:[]}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n.n(r);e.default={name:"NavbarGroup",components:{NavbarLink:i.a},props:["name","items"],methods:{toggleSubMenu:function(t){if(this.$store.state.navi.activeSub.includes(t)){var e=t.split(".");e.pop(),t=e.join("."),this.$store.commit("toggleSubMenu",t)}else this.$store.commit("toggleSubMenu",t)}}}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("ul",{staticClass:"patterns--sub"},t._l(t.items,function(e){return n("li",{staticClass:"pattern",class:{active:t.$store.state.navi.activeSub.includes(e.path)}},[0===e.items.length?n("navbar-link",{attrs:{parent:t.name,item:e}}):t._e(),t._v(" "),e.items.length>0?n("span",{on:{click:function(n){t.toggleSubMenu(e.path)}}},[t._v(t._s(e.name)+"\n "),n("i",{staticClass:"fas fa-caret-down"})]):t._e(),t._v(" "),n("navbar-group",{attrs:{name:e.name,items:e.items}})],1)}))},staticRenderFns:[]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("li",{staticClass:"pattern u-center",class:{active:t.$store.state.navi.activeMain===t.menu.path}},[0===t.menu.items.length?n("navbar-link",{attrs:{item:t.menu}}):t._e(),t._v(" "),t.menu.items.length>0?[n("span",{on:{click:function(e){t.toggleMainMenu(t.menu.name)}}},[t._v(t._s(t.menu.path))]),t._v(" "),n("navbar-group",{attrs:{name:t.menu.name,items:t.menu.items}})]:t._e()],2)},staticRenderFns:[]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"project"},[n("div",{staticClass:"project-info"},[n("h1",{staticClass:"project-name"},[t._v(t._s(t.$store.state.appInfo.appName))])]),t._v(" "),n("nav",{staticClass:"project-navigation"},[t.notDashboard?n("router-link",{staticClass:"back a-slideIn",attrs:{to:{name:"dashboard"}}},[n("i",{staticClass:"fas fa-arrow-circle-left"})]):t._e(),t._v(" "),n("ul",{staticClass:"patterns"},t._l(t.navi,function(t,e){return n("navbar-main",{key:e,attrs:{menu:t}})})),t._v(" "),n("router-link",{staticClass:"btn btn--primary btn--sm",attrs:{to:{name:"create"},title:"Create new Pattern"}},[n("span",[n("i",{staticClass:"fas fa-plus"}),t._v("\n\n Add Pattern\n\n ")])])],1)])},staticRenderFns:[]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("main",{staticClass:"window"},[n("navbar",{staticClass:"header"}),t._v(" "),n("section",{staticClass:"view",on:{click:function(e){t.resetMenu()}}},[n("router-view")],1)],1)},staticRenderFns:[]}},function(t,e){}]); \ No newline at end of file +/******/ (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, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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 = 20); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +/* globals __VUE_SSR_CONTEXT__ */ + +// IMPORTANT: Do NOT use ES2015 features in this file. +// This module is a runtime utility for cleaner component module output and will +// be included in the final webpack user bundle. + +module.exports = function normalizeComponent ( + rawScriptExports, + compiledTemplate, + functionalTemplate, + injectStyles, + scopeId, + moduleIdentifier /* server only */ +) { + var esModule + var scriptExports = rawScriptExports = rawScriptExports || {} + + // ES6 modules interop + var type = typeof rawScriptExports.default + if (type === 'object' || type === 'function') { + esModule = rawScriptExports + scriptExports = rawScriptExports.default + } + + // Vue.extend constructor export interop + var options = typeof scriptExports === 'function' + ? scriptExports.options + : scriptExports + + // render functions + if (compiledTemplate) { + options.render = compiledTemplate.render + options.staticRenderFns = compiledTemplate.staticRenderFns + options._compiled = true + } + + // functional template + if (functionalTemplate) { + options.functional = true + } + + // scopedId + if (scopeId) { + options._scopeId = scopeId + } + + var hook + if (moduleIdentifier) { // server build + hook = function (context) { + // 2.3 injection + context = + context || // cached call + (this.$vnode && this.$vnode.ssrContext) || // stateful + (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional + // 2.2 with runInNewContext: true + if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { + context = __VUE_SSR_CONTEXT__ + } + // inject component styles + if (injectStyles) { + injectStyles.call(this, context) + } + // register component module identifier for async chunk inferrence + if (context && context._registeredComponents) { + context._registeredComponents.add(moduleIdentifier) + } + } + // used by ssr in case component is cached and beforeCreate + // never gets called + options._ssrRegister = hook + } else if (injectStyles) { + hook = injectStyles + } + + if (hook) { + var functional = options.functional + var existing = functional + ? options.render + : options.beforeCreate + + if (!functional) { + // inject component registration as beforeCreate hook + options.beforeCreate = existing + ? [].concat(existing, hook) + : [hook] + } else { + // for template-only hot-reload because in that case the render fn doesn't + // go through the normalizer + options._injectStyles = hook + // register for functioal component in vue file + options.render = function renderWithStyleInjection (h, context) { + hook.call(context) + return existing(h, context) + } + } + } + + return { + esModule: esModule, + exports: scriptExports, + options: options + } +} + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var bind = __webpack_require__(13); +var isBuffer = __webpack_require__(34); + +/*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 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 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 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' + */ +function isStandardBrowserEnv() { + if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') { + 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; +} + +/** + * 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, + extend: extend, + trim: trim +}; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(30); + + +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return API; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_axios__ = __webpack_require__(32); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_axios___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_axios__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config__ = __webpack_require__(11); + + + +var API = __WEBPACK_IMPORTED_MODULE_0_axios___default.a.create({ + baseURL: __WEBPACK_IMPORTED_MODULE_1__config__["a" /* default */].apiUri +}); + +/***/ }), +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__config__ = __webpack_require__(11); + + +/* harmony default export */ __webpack_exports__["a"] = ({ + + /** + * Dubug logging if devMode is enabled. + * @param params + */ + debug: function debug() { + if (__WEBPACK_IMPORTED_MODULE_0__config__["a" /* default */].devMode) { + var _console; + + (_console = console).log.apply(_console, arguments); + } + }, + + /** + * Error logging if devMode is enabled. + * @param params + */ + error: function error() { + if (__WEBPACK_IMPORTED_MODULE_0__config__["a" /* default */].devMode) { + var _console2; + + (_console2 = console).error.apply(_console2, arguments); + } + } +}); + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*! + * Vue.js v2.5.19 + * (c) 2014-2018 Evan You + * Released under the MIT License. + */ + + +/* */ + +var emptyObject = Object.freeze({}); + +// These helpers produce better VM code in JS engines due to their +// explicitness and function inlining. +function isUndef (v) { + return v === undefined || v === null +} + +function isDef (v) { + return v !== undefined && v !== null +} + +function isTrue (v) { + return v === true +} + +function isFalse (v) { + return v === false +} + +/** + * Check if value is primitive. + */ +function isPrimitive (value) { + return ( + typeof value === 'string' || + typeof value === 'number' || + // $flow-disable-line + typeof value === 'symbol' || + typeof value === 'boolean' + ) +} + +/** + * Quick object check - this is primarily used to tell + * Objects from primitive values when we know the value + * is a JSON-compliant type. + */ +function isObject (obj) { + return obj !== null && typeof obj === 'object' +} + +/** + * Get the raw type string of a value, e.g., [object Object]. + */ +var _toString = Object.prototype.toString; + +function toRawType (value) { + return _toString.call(value).slice(8, -1) +} + +/** + * Strict object type check. Only returns true + * for plain JavaScript objects. + */ +function isPlainObject (obj) { + return _toString.call(obj) === '[object Object]' +} + +function isRegExp (v) { + return _toString.call(v) === '[object RegExp]' +} + +/** + * Check if val is a valid array index. + */ +function isValidArrayIndex (val) { + var n = parseFloat(String(val)); + return n >= 0 && Math.floor(n) === n && isFinite(val) +} + +/** + * Convert a value to a string that is actually rendered. + */ +function toString (val) { + return val == null + ? '' + : typeof val === 'object' + ? JSON.stringify(val, null, 2) + : String(val) +} + +/** + * Convert an input value to a number for persistence. + * If the conversion fails, return original string. + */ +function toNumber (val) { + var n = parseFloat(val); + return isNaN(n) ? val : n +} + +/** + * Make a map and return a function for checking if a key + * is in that map. + */ +function makeMap ( + str, + expectsLowerCase +) { + var map = Object.create(null); + var list = str.split(','); + for (var i = 0; i < list.length; i++) { + map[list[i]] = true; + } + return expectsLowerCase + ? function (val) { return map[val.toLowerCase()]; } + : function (val) { return map[val]; } +} + +/** + * Check if a tag is a built-in tag. + */ +var isBuiltInTag = makeMap('slot,component', true); + +/** + * Check if an attribute is a reserved attribute. + */ +var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); + +/** + * Remove an item from an array. + */ +function remove (arr, item) { + if (arr.length) { + var index = arr.indexOf(item); + if (index > -1) { + return arr.splice(index, 1) + } + } +} + +/** + * Check whether an object has the property. + */ +var hasOwnProperty = Object.prototype.hasOwnProperty; +function hasOwn (obj, key) { + return hasOwnProperty.call(obj, key) +} + +/** + * Create a cached version of a pure function. + */ +function cached (fn) { + var cache = Object.create(null); + return (function cachedFn (str) { + var hit = cache[str]; + return hit || (cache[str] = fn(str)) + }) +} + +/** + * Camelize a hyphen-delimited string. + */ +var camelizeRE = /-(\w)/g; +var camelize = cached(function (str) { + return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; }) +}); + +/** + * Capitalize a string. + */ +var capitalize = cached(function (str) { + return str.charAt(0).toUpperCase() + str.slice(1) +}); + +/** + * Hyphenate a camelCase string. + */ +var hyphenateRE = /\B([A-Z])/g; +var hyphenate = cached(function (str) { + return str.replace(hyphenateRE, '-$1').toLowerCase() +}); + +/** + * Simple bind polyfill for environments that do not support it, + * e.g., PhantomJS 1.x. Technically, we don't need this anymore + * since native bind is now performant enough in most browsers. + * But removing it would mean breaking code that was able to run in + * PhantomJS 1.x, so this must be kept for backward compatibility. + */ + +/* istanbul ignore next */ +function polyfillBind (fn, ctx) { + function boundFn (a) { + var l = arguments.length; + return l + ? l > 1 + ? fn.apply(ctx, arguments) + : fn.call(ctx, a) + : fn.call(ctx) + } + + boundFn._length = fn.length; + return boundFn +} + +function nativeBind (fn, ctx) { + return fn.bind(ctx) +} + +var bind = Function.prototype.bind + ? nativeBind + : polyfillBind; + +/** + * Convert an Array-like object to a real Array. + */ +function toArray (list, start) { + start = start || 0; + var i = list.length - start; + var ret = new Array(i); + while (i--) { + ret[i] = list[i + start]; + } + return ret +} + +/** + * Mix properties into target object. + */ +function extend (to, _from) { + for (var key in _from) { + to[key] = _from[key]; + } + return to +} + +/** + * Merge an Array of Objects into a single Object. + */ +function toObject (arr) { + var res = {}; + for (var i = 0; i < arr.length; i++) { + if (arr[i]) { + extend(res, arr[i]); + } + } + return res +} + +/* eslint-disable no-unused-vars */ + +/** + * Perform no operation. + * Stubbing args to make Flow happy without leaving useless transpiled code + * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). + */ +function noop (a, b, c) {} + +/** + * Always return false. + */ +var no = function (a, b, c) { return false; }; + +/* eslint-enable no-unused-vars */ + +/** + * Return the same value. + */ +var identity = function (_) { return _; }; + +/** + * Generate a string containing static keys from compiler modules. + */ +function genStaticKeys (modules) { + return modules.reduce(function (keys, m) { + return keys.concat(m.staticKeys || []) + }, []).join(',') +} + +/** + * Check if two values are loosely equal - that is, + * if they are plain objects, do they have the same shape? + */ +function looseEqual (a, b) { + if (a === b) { return true } + var isObjectA = isObject(a); + var isObjectB = isObject(b); + if (isObjectA && isObjectB) { + try { + var isArrayA = Array.isArray(a); + var isArrayB = Array.isArray(b); + if (isArrayA && isArrayB) { + return a.length === b.length && a.every(function (e, i) { + return looseEqual(e, b[i]) + }) + } else if (a instanceof Date && b instanceof Date) { + return a.getTime() === b.getTime() + } else if (!isArrayA && !isArrayB) { + var keysA = Object.keys(a); + var keysB = Object.keys(b); + return keysA.length === keysB.length && keysA.every(function (key) { + return looseEqual(a[key], b[key]) + }) + } else { + /* istanbul ignore next */ + return false + } + } catch (e) { + /* istanbul ignore next */ + return false + } + } else if (!isObjectA && !isObjectB) { + return String(a) === String(b) + } else { + return false + } +} + +/** + * Return the first index at which a loosely equal value can be + * found in the array (if value is a plain object, the array must + * contain an object of the same shape), or -1 if it is not present. + */ +function looseIndexOf (arr, val) { + for (var i = 0; i < arr.length; i++) { + if (looseEqual(arr[i], val)) { return i } + } + return -1 +} + +/** + * Ensure a function is called only once. + */ +function once (fn) { + var called = false; + return function () { + if (!called) { + called = true; + fn.apply(this, arguments); + } + } +} + +var SSR_ATTR = 'data-server-rendered'; + +var ASSET_TYPES = [ + 'component', + 'directive', + 'filter' +]; + +var LIFECYCLE_HOOKS = [ + 'beforeCreate', + 'created', + 'beforeMount', + 'mounted', + 'beforeUpdate', + 'updated', + 'beforeDestroy', + 'destroyed', + 'activated', + 'deactivated', + 'errorCaptured' +]; + +/* */ + + + +var config = ({ + /** + * Option merge strategies (used in core/util/options) + */ + // $flow-disable-line + optionMergeStrategies: Object.create(null), + + /** + * Whether to suppress warnings. + */ + silent: false, + + /** + * Show production mode tip message on boot? + */ + productionTip: "development" !== 'production', + + /** + * Whether to enable devtools + */ + devtools: "development" !== 'production', + + /** + * Whether to record perf + */ + performance: false, + + /** + * Error handler for watcher errors + */ + errorHandler: null, + + /** + * Warn handler for watcher warns + */ + warnHandler: null, + + /** + * Ignore certain custom elements + */ + ignoredElements: [], + + /** + * Custom user key aliases for v-on + */ + // $flow-disable-line + keyCodes: Object.create(null), + + /** + * Check if a tag is reserved so that it cannot be registered as a + * component. This is platform-dependent and may be overwritten. + */ + isReservedTag: no, + + /** + * Check if an attribute is reserved so that it cannot be used as a component + * prop. This is platform-dependent and may be overwritten. + */ + isReservedAttr: no, + + /** + * Check if a tag is an unknown element. + * Platform-dependent. + */ + isUnknownElement: no, + + /** + * Get the namespace of an element + */ + getTagNamespace: noop, + + /** + * Parse the real tag name for the specific platform. + */ + parsePlatformTagName: identity, + + /** + * Check if an attribute must be bound using property, e.g. value + * Platform-dependent. + */ + mustUseProp: no, + + /** + * Perform updates asynchronously. Intended to be used by Vue Test Utils + * This will significantly reduce performance if set to false. + */ + async: true, + + /** + * Exposed for legacy reasons + */ + _lifecycleHooks: LIFECYCLE_HOOKS +}); + +/* */ + +/** + * Check if a string starts with $ or _ + */ +function isReserved (str) { + var c = (str + '').charCodeAt(0); + return c === 0x24 || c === 0x5F +} + +/** + * Define a property. + */ +function def (obj, key, val, enumerable) { + Object.defineProperty(obj, key, { + value: val, + enumerable: !!enumerable, + writable: true, + configurable: true + }); +} + +/** + * Parse simple path. + */ +var bailRE = /[^\w.$]/; +function parsePath (path) { + if (bailRE.test(path)) { + return + } + var segments = path.split('.'); + return function (obj) { + for (var i = 0; i < segments.length; i++) { + if (!obj) { return } + obj = obj[segments[i]]; + } + return obj + } +} + +/* */ + +// can we use __proto__? +var hasProto = '__proto__' in {}; + +// Browser environment sniffing +var inBrowser = typeof window !== 'undefined'; +var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform; +var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(); +var UA = inBrowser && window.navigator.userAgent.toLowerCase(); +var isIE = UA && /msie|trident/.test(UA); +var isIE9 = UA && UA.indexOf('msie 9.0') > 0; +var isEdge = UA && UA.indexOf('edge/') > 0; +var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android'); +var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios'); +var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; + +// Firefox has a "watch" function on Object.prototype... +var nativeWatch = ({}).watch; + +var supportsPassive = false; +if (inBrowser) { + try { + var opts = {}; + Object.defineProperty(opts, 'passive', ({ + get: function get () { + /* istanbul ignore next */ + supportsPassive = true; + } + })); // https://github.com/facebook/flow/issues/285 + window.addEventListener('test-passive', null, opts); + } catch (e) {} +} + +// this needs to be lazy-evaled because vue may be required before +// vue-server-renderer can set VUE_ENV +var _isServer; +var isServerRendering = function () { + if (_isServer === undefined) { + /* istanbul ignore if */ + if (!inBrowser && !inWeex && typeof global !== 'undefined') { + // detect presence of vue-server-renderer and avoid + // Webpack shimming the process + _isServer = global['process'] && global['process'].env.VUE_ENV === 'server'; + } else { + _isServer = false; + } + } + return _isServer +}; + +// detect devtools +var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; + +/* istanbul ignore next */ +function isNative (Ctor) { + return typeof Ctor === 'function' && /native code/.test(Ctor.toString()) +} + +var hasSymbol = + typeof Symbol !== 'undefined' && isNative(Symbol) && + typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys); + +var _Set; +/* istanbul ignore if */ // $flow-disable-line +if (typeof Set !== 'undefined' && isNative(Set)) { + // use native Set when available. + _Set = Set; +} else { + // a non-standard Set polyfill that only works with primitive keys. + _Set = /*@__PURE__*/(function () { + function Set () { + this.set = Object.create(null); + } + Set.prototype.has = function has (key) { + return this.set[key] === true + }; + Set.prototype.add = function add (key) { + this.set[key] = true; + }; + Set.prototype.clear = function clear () { + this.set = Object.create(null); + }; + + return Set; + }()); +} + +/* */ + +var warn = noop; +var tip = noop; +var generateComponentTrace = (noop); // work around flow check +var formatComponentName = (noop); + +if (true) { + var hasConsole = typeof console !== 'undefined'; + var classifyRE = /(?:^|[-_])(\w)/g; + var classify = function (str) { return str + .replace(classifyRE, function (c) { return c.toUpperCase(); }) + .replace(/[-_]/g, ''); }; + + warn = function (msg, vm) { + var trace = vm ? generateComponentTrace(vm) : ''; + + if (config.warnHandler) { + config.warnHandler.call(null, msg, vm, trace); + } else if (hasConsole && (!config.silent)) { + console.error(("[Vue warn]: " + msg + trace)); + } + }; + + tip = function (msg, vm) { + if (hasConsole && (!config.silent)) { + console.warn("[Vue tip]: " + msg + ( + vm ? generateComponentTrace(vm) : '' + )); + } + }; + + formatComponentName = function (vm, includeFile) { + if (vm.$root === vm) { + return '' + } + var options = typeof vm === 'function' && vm.cid != null + ? vm.options + : vm._isVue + ? vm.$options || vm.constructor.options + : vm || {}; + var name = options.name || options._componentTag; + var file = options.__file; + if (!name && file) { + var match = file.match(/([^/\\]+)\.vue$/); + name = match && match[1]; + } + + return ( + (name ? ("<" + (classify(name)) + ">") : "") + + (file && includeFile !== false ? (" at " + file) : '') + ) + }; + + var repeat = function (str, n) { + var res = ''; + while (n) { + if (n % 2 === 1) { res += str; } + if (n > 1) { str += str; } + n >>= 1; + } + return res + }; + + generateComponentTrace = function (vm) { + if (vm._isVue && vm.$parent) { + var tree = []; + var currentRecursiveSequence = 0; + while (vm) { + if (tree.length > 0) { + var last = tree[tree.length - 1]; + if (last.constructor === vm.constructor) { + currentRecursiveSequence++; + vm = vm.$parent; + continue + } else if (currentRecursiveSequence > 0) { + tree[tree.length - 1] = [last, currentRecursiveSequence]; + currentRecursiveSequence = 0; + } + } + tree.push(vm); + vm = vm.$parent; + } + return '\n\nfound in\n\n' + tree + .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm) + ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)") + : formatComponentName(vm))); }) + .join('\n') + } else { + return ("\n\n(found in " + (formatComponentName(vm)) + ")") + } + }; +} + +/* */ + +var uid = 0; + +/** + * A dep is an observable that can have multiple + * directives subscribing to it. + */ +var Dep = function Dep () { + this.id = uid++; + this.subs = []; +}; + +Dep.prototype.addSub = function addSub (sub) { + this.subs.push(sub); +}; + +Dep.prototype.removeSub = function removeSub (sub) { + remove(this.subs, sub); +}; + +Dep.prototype.depend = function depend () { + if (Dep.target) { + Dep.target.addDep(this); + } +}; + +Dep.prototype.notify = function notify () { + // stabilize the subscriber list first + var subs = this.subs.slice(); + if ("development" !== 'production' && !config.async) { + // subs aren't sorted in scheduler if not running async + // we need to sort them now to make sure they fire in correct + // order + subs.sort(function (a, b) { return a.id - b.id; }); + } + for (var i = 0, l = subs.length; i < l; i++) { + subs[i].update(); + } +}; + +// the current target watcher being evaluated. +// this is globally unique because there could be only one +// watcher being evaluated at any time. +Dep.target = null; +var targetStack = []; + +function pushTarget (target) { + targetStack.push(target); + Dep.target = target; +} + +function popTarget () { + targetStack.pop(); + Dep.target = targetStack[targetStack.length - 1]; +} + +/* */ + +var VNode = function VNode ( + tag, + data, + children, + text, + elm, + context, + componentOptions, + asyncFactory +) { + this.tag = tag; + this.data = data; + this.children = children; + this.text = text; + this.elm = elm; + this.ns = undefined; + this.context = context; + this.fnContext = undefined; + this.fnOptions = undefined; + this.fnScopeId = undefined; + this.key = data && data.key; + this.componentOptions = componentOptions; + this.componentInstance = undefined; + this.parent = undefined; + this.raw = false; + this.isStatic = false; + this.isRootInsert = true; + this.isComment = false; + this.isCloned = false; + this.isOnce = false; + this.asyncFactory = asyncFactory; + this.asyncMeta = undefined; + this.isAsyncPlaceholder = false; +}; + +var prototypeAccessors = { child: { configurable: true } }; + +// DEPRECATED: alias for componentInstance for backwards compat. +/* istanbul ignore next */ +prototypeAccessors.child.get = function () { + return this.componentInstance +}; + +Object.defineProperties( VNode.prototype, prototypeAccessors ); + +var createEmptyVNode = function (text) { + if ( text === void 0 ) text = ''; + + var node = new VNode(); + node.text = text; + node.isComment = true; + return node +}; + +function createTextVNode (val) { + return new VNode(undefined, undefined, undefined, String(val)) +} + +// optimized shallow clone +// used for static nodes and slot nodes because they may be reused across +// multiple renders, cloning them avoids errors when DOM manipulations rely +// on their elm reference. +function cloneVNode (vnode) { + var cloned = new VNode( + vnode.tag, + vnode.data, + // #7975 + // clone children array to avoid mutating original in case of cloning + // a child. + vnode.children && vnode.children.slice(), + vnode.text, + vnode.elm, + vnode.context, + vnode.componentOptions, + vnode.asyncFactory + ); + cloned.ns = vnode.ns; + cloned.isStatic = vnode.isStatic; + cloned.key = vnode.key; + cloned.isComment = vnode.isComment; + cloned.fnContext = vnode.fnContext; + cloned.fnOptions = vnode.fnOptions; + cloned.fnScopeId = vnode.fnScopeId; + cloned.asyncMeta = vnode.asyncMeta; + cloned.isCloned = true; + return cloned +} + +/* + * not type checking this file because flow doesn't play well with + * dynamically accessing methods on Array prototype + */ + +var arrayProto = Array.prototype; +var arrayMethods = Object.create(arrayProto); + +var methodsToPatch = [ + 'push', + 'pop', + 'shift', + 'unshift', + 'splice', + 'sort', + 'reverse' +]; + +/** + * Intercept mutating methods and emit events + */ +methodsToPatch.forEach(function (method) { + // cache original method + var original = arrayProto[method]; + def(arrayMethods, method, function mutator () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var result = original.apply(this, args); + var ob = this.__ob__; + var inserted; + switch (method) { + case 'push': + case 'unshift': + inserted = args; + break + case 'splice': + inserted = args.slice(2); + break + } + if (inserted) { ob.observeArray(inserted); } + // notify change + ob.dep.notify(); + return result + }); +}); + +/* */ + +var arrayKeys = Object.getOwnPropertyNames(arrayMethods); + +/** + * In some cases we may want to disable observation inside a component's + * update computation. + */ +var shouldObserve = true; + +function toggleObserving (value) { + shouldObserve = value; +} + +/** + * Observer class that is attached to each observed + * object. Once attached, the observer converts the target + * object's property keys into getter/setters that + * collect dependencies and dispatch updates. + */ +var Observer = function Observer (value) { + this.value = value; + this.dep = new Dep(); + this.vmCount = 0; + def(value, '__ob__', this); + if (Array.isArray(value)) { + if (hasProto) { + protoAugment(value, arrayMethods); + } else { + copyAugment(value, arrayMethods, arrayKeys); + } + this.observeArray(value); + } else { + this.walk(value); + } +}; + +/** + * Walk through all properties and convert them into + * getter/setters. This method should only be called when + * value type is Object. + */ +Observer.prototype.walk = function walk (obj) { + var keys = Object.keys(obj); + for (var i = 0; i < keys.length; i++) { + defineReactive$$1(obj, keys[i]); + } +}; + +/** + * Observe a list of Array items. + */ +Observer.prototype.observeArray = function observeArray (items) { + for (var i = 0, l = items.length; i < l; i++) { + observe(items[i]); + } +}; + +// helpers + +/** + * Augment a target Object or Array by intercepting + * the prototype chain using __proto__ + */ +function protoAugment (target, src) { + /* eslint-disable no-proto */ + target.__proto__ = src; + /* eslint-enable no-proto */ +} + +/** + * Augment a target Object or Array by defining + * hidden properties. + */ +/* istanbul ignore next */ +function copyAugment (target, src, keys) { + for (var i = 0, l = keys.length; i < l; i++) { + var key = keys[i]; + def(target, key, src[key]); + } +} + +/** + * Attempt to create an observer instance for a value, + * returns the new observer if successfully observed, + * or the existing observer if the value already has one. + */ +function observe (value, asRootData) { + if (!isObject(value) || value instanceof VNode) { + return + } + var ob; + if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { + ob = value.__ob__; + } else if ( + shouldObserve && + !isServerRendering() && + (Array.isArray(value) || isPlainObject(value)) && + Object.isExtensible(value) && + !value._isVue + ) { + ob = new Observer(value); + } + if (asRootData && ob) { + ob.vmCount++; + } + return ob +} + +/** + * Define a reactive property on an Object. + */ +function defineReactive$$1 ( + obj, + key, + val, + customSetter, + shallow +) { + var dep = new Dep(); + + var property = Object.getOwnPropertyDescriptor(obj, key); + if (property && property.configurable === false) { + return + } + + // cater for pre-defined getter/setters + var getter = property && property.get; + var setter = property && property.set; + if ((!getter || setter) && arguments.length === 2) { + val = obj[key]; + } + + var childOb = !shallow && observe(val); + Object.defineProperty(obj, key, { + enumerable: true, + configurable: true, + get: function reactiveGetter () { + var value = getter ? getter.call(obj) : val; + if (Dep.target) { + dep.depend(); + if (childOb) { + childOb.dep.depend(); + if (Array.isArray(value)) { + dependArray(value); + } + } + } + return value + }, + set: function reactiveSetter (newVal) { + var value = getter ? getter.call(obj) : val; + /* eslint-disable no-self-compare */ + if (newVal === value || (newVal !== newVal && value !== value)) { + return + } + /* eslint-enable no-self-compare */ + if ("development" !== 'production' && customSetter) { + customSetter(); + } + // #7981: for accessor properties without setter + if (getter && !setter) { return } + if (setter) { + setter.call(obj, newVal); + } else { + val = newVal; + } + childOb = !shallow && observe(newVal); + dep.notify(); + } + }); +} + +/** + * Set a property on an object. Adds the new property and + * triggers change notification if the property doesn't + * already exist. + */ +function set (target, key, val) { + if ("development" !== 'production' && + (isUndef(target) || isPrimitive(target)) + ) { + warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target)))); + } + if (Array.isArray(target) && isValidArrayIndex(key)) { + target.length = Math.max(target.length, key); + target.splice(key, 1, val); + return val + } + if (key in target && !(key in Object.prototype)) { + target[key] = val; + return val + } + var ob = (target).__ob__; + if (target._isVue || (ob && ob.vmCount)) { + "development" !== 'production' && warn( + 'Avoid adding reactive properties to a Vue instance or its root $data ' + + 'at runtime - declare it upfront in the data option.' + ); + return val + } + if (!ob) { + target[key] = val; + return val + } + defineReactive$$1(ob.value, key, val); + ob.dep.notify(); + return val +} + +/** + * Delete a property and trigger change if necessary. + */ +function del (target, key) { + if ("development" !== 'production' && + (isUndef(target) || isPrimitive(target)) + ) { + warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target)))); + } + if (Array.isArray(target) && isValidArrayIndex(key)) { + target.splice(key, 1); + return + } + var ob = (target).__ob__; + if (target._isVue || (ob && ob.vmCount)) { + "development" !== 'production' && warn( + 'Avoid deleting properties on a Vue instance or its root $data ' + + '- just set it to null.' + ); + return + } + if (!hasOwn(target, key)) { + return + } + delete target[key]; + if (!ob) { + return + } + ob.dep.notify(); +} + +/** + * Collect dependencies on array elements when the array is touched, since + * we cannot intercept array element access like property getters. + */ +function dependArray (value) { + for (var e = (void 0), i = 0, l = value.length; i < l; i++) { + e = value[i]; + e && e.__ob__ && e.__ob__.dep.depend(); + if (Array.isArray(e)) { + dependArray(e); + } + } +} + +/* */ + +/** + * Option overwriting strategies are functions that handle + * how to merge a parent option value and a child option + * value into the final value. + */ +var strats = config.optionMergeStrategies; + +/** + * Options with restrictions + */ +if (true) { + strats.el = strats.propsData = function (parent, child, vm, key) { + if (!vm) { + warn( + "option \"" + key + "\" can only be used during instance " + + 'creation with the `new` keyword.' + ); + } + return defaultStrat(parent, child) + }; +} + +/** + * Helper that recursively merges two data objects together. + */ +function mergeData (to, from) { + if (!from) { return to } + var key, toVal, fromVal; + var keys = Object.keys(from); + for (var i = 0; i < keys.length; i++) { + key = keys[i]; + toVal = to[key]; + fromVal = from[key]; + if (!hasOwn(to, key)) { + set(to, key, fromVal); + } else if ( + toVal !== fromVal && + isPlainObject(toVal) && + isPlainObject(fromVal) + ) { + mergeData(toVal, fromVal); + } + } + return to +} + +/** + * Data + */ +function mergeDataOrFn ( + parentVal, + childVal, + vm +) { + if (!vm) { + // in a Vue.extend merge, both should be functions + if (!childVal) { + return parentVal + } + if (!parentVal) { + return childVal + } + // when parentVal & childVal are both present, + // we need to return a function that returns the + // merged result of both functions... no need to + // check if parentVal is a function here because + // it has to be a function to pass previous merges. + return function mergedDataFn () { + return mergeData( + typeof childVal === 'function' ? childVal.call(this, this) : childVal, + typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal + ) + } + } else { + return function mergedInstanceDataFn () { + // instance merge + var instanceData = typeof childVal === 'function' + ? childVal.call(vm, vm) + : childVal; + var defaultData = typeof parentVal === 'function' + ? parentVal.call(vm, vm) + : parentVal; + if (instanceData) { + return mergeData(instanceData, defaultData) + } else { + return defaultData + } + } + } +} + +strats.data = function ( + parentVal, + childVal, + vm +) { + if (!vm) { + if (childVal && typeof childVal !== 'function') { + "development" !== 'production' && warn( + 'The "data" option should be a function ' + + 'that returns a per-instance value in component ' + + 'definitions.', + vm + ); + + return parentVal + } + return mergeDataOrFn(parentVal, childVal) + } + + return mergeDataOrFn(parentVal, childVal, vm) +}; + +/** + * Hooks and props are merged as arrays. + */ +function mergeHook ( + parentVal, + childVal +) { + return childVal + ? parentVal + ? parentVal.concat(childVal) + : Array.isArray(childVal) + ? childVal + : [childVal] + : parentVal +} + +LIFECYCLE_HOOKS.forEach(function (hook) { + strats[hook] = mergeHook; +}); + +/** + * Assets + * + * When a vm is present (instance creation), we need to do + * a three-way merge between constructor options, instance + * options and parent options. + */ +function mergeAssets ( + parentVal, + childVal, + vm, + key +) { + var res = Object.create(parentVal || null); + if (childVal) { + "development" !== 'production' && assertObjectType(key, childVal, vm); + return extend(res, childVal) + } else { + return res + } +} + +ASSET_TYPES.forEach(function (type) { + strats[type + 's'] = mergeAssets; +}); + +/** + * Watchers. + * + * Watchers hashes should not overwrite one + * another, so we merge them as arrays. + */ +strats.watch = function ( + parentVal, + childVal, + vm, + key +) { + // work around Firefox's Object.prototype.watch... + if (parentVal === nativeWatch) { parentVal = undefined; } + if (childVal === nativeWatch) { childVal = undefined; } + /* istanbul ignore if */ + if (!childVal) { return Object.create(parentVal || null) } + if (true) { + assertObjectType(key, childVal, vm); + } + if (!parentVal) { return childVal } + var ret = {}; + extend(ret, parentVal); + for (var key$1 in childVal) { + var parent = ret[key$1]; + var child = childVal[key$1]; + if (parent && !Array.isArray(parent)) { + parent = [parent]; + } + ret[key$1] = parent + ? parent.concat(child) + : Array.isArray(child) ? child : [child]; + } + return ret +}; + +/** + * Other object hashes. + */ +strats.props = +strats.methods = +strats.inject = +strats.computed = function ( + parentVal, + childVal, + vm, + key +) { + if (childVal && "development" !== 'production') { + assertObjectType(key, childVal, vm); + } + if (!parentVal) { return childVal } + var ret = Object.create(null); + extend(ret, parentVal); + if (childVal) { extend(ret, childVal); } + return ret +}; +strats.provide = mergeDataOrFn; + +/** + * Default strategy. + */ +var defaultStrat = function (parentVal, childVal) { + return childVal === undefined + ? parentVal + : childVal +}; + +/** + * Validate component names + */ +function checkComponents (options) { + for (var key in options.components) { + validateComponentName(key); + } +} + +function validateComponentName (name) { + if (!/^[a-zA-Z][\w-]*$/.test(name)) { + warn( + 'Invalid component name: "' + name + '". Component names ' + + 'can only contain alphanumeric characters and the hyphen, ' + + 'and must start with a letter.' + ); + } + if (isBuiltInTag(name) || config.isReservedTag(name)) { + warn( + 'Do not use built-in or reserved HTML elements as component ' + + 'id: ' + name + ); + } +} + +/** + * Ensure all props option syntax are normalized into the + * Object-based format. + */ +function normalizeProps (options, vm) { + var props = options.props; + if (!props) { return } + var res = {}; + var i, val, name; + if (Array.isArray(props)) { + i = props.length; + while (i--) { + val = props[i]; + if (typeof val === 'string') { + name = camelize(val); + res[name] = { type: null }; + } else if (true) { + warn('props must be strings when using array syntax.'); + } + } + } else if (isPlainObject(props)) { + for (var key in props) { + val = props[key]; + name = camelize(key); + res[name] = isPlainObject(val) + ? val + : { type: val }; + } + } else if (true) { + warn( + "Invalid value for option \"props\": expected an Array or an Object, " + + "but got " + (toRawType(props)) + ".", + vm + ); + } + options.props = res; +} + +/** + * Normalize all injections into Object-based format + */ +function normalizeInject (options, vm) { + var inject = options.inject; + if (!inject) { return } + var normalized = options.inject = {}; + if (Array.isArray(inject)) { + for (var i = 0; i < inject.length; i++) { + normalized[inject[i]] = { from: inject[i] }; + } + } else if (isPlainObject(inject)) { + for (var key in inject) { + var val = inject[key]; + normalized[key] = isPlainObject(val) + ? extend({ from: key }, val) + : { from: val }; + } + } else if (true) { + warn( + "Invalid value for option \"inject\": expected an Array or an Object, " + + "but got " + (toRawType(inject)) + ".", + vm + ); + } +} + +/** + * Normalize raw function directives into object format. + */ +function normalizeDirectives (options) { + var dirs = options.directives; + if (dirs) { + for (var key in dirs) { + var def = dirs[key]; + if (typeof def === 'function') { + dirs[key] = { bind: def, update: def }; + } + } + } +} + +function assertObjectType (name, value, vm) { + if (!isPlainObject(value)) { + warn( + "Invalid value for option \"" + name + "\": expected an Object, " + + "but got " + (toRawType(value)) + ".", + vm + ); + } +} + +/** + * Merge two option objects into a new one. + * Core utility used in both instantiation and inheritance. + */ +function mergeOptions ( + parent, + child, + vm +) { + if (true) { + checkComponents(child); + } + + if (typeof child === 'function') { + child = child.options; + } + + normalizeProps(child, vm); + normalizeInject(child, vm); + normalizeDirectives(child); + + // Apply extends and mixins on the child options, + // but only if it is a raw options object that isn't + // the result of another mergeOptions call. + // Only merged options has the _base property. + if (!child._base) { + if (child.extends) { + parent = mergeOptions(parent, child.extends, vm); + } + if (child.mixins) { + for (var i = 0, l = child.mixins.length; i < l; i++) { + parent = mergeOptions(parent, child.mixins[i], vm); + } + } + } + + var options = {}; + var key; + for (key in parent) { + mergeField(key); + } + for (key in child) { + if (!hasOwn(parent, key)) { + mergeField(key); + } + } + function mergeField (key) { + var strat = strats[key] || defaultStrat; + options[key] = strat(parent[key], child[key], vm, key); + } + return options +} + +/** + * Resolve an asset. + * This function is used because child instances need access + * to assets defined in its ancestor chain. + */ +function resolveAsset ( + options, + type, + id, + warnMissing +) { + /* istanbul ignore if */ + if (typeof id !== 'string') { + return + } + var assets = options[type]; + // check local registration variations first + if (hasOwn(assets, id)) { return assets[id] } + var camelizedId = camelize(id); + if (hasOwn(assets, camelizedId)) { return assets[camelizedId] } + var PascalCaseId = capitalize(camelizedId); + if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] } + // fallback to prototype chain + var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; + if ("development" !== 'production' && warnMissing && !res) { + warn( + 'Failed to resolve ' + type.slice(0, -1) + ': ' + id, + options + ); + } + return res +} + +/* */ + + + +function validateProp ( + key, + propOptions, + propsData, + vm +) { + var prop = propOptions[key]; + var absent = !hasOwn(propsData, key); + var value = propsData[key]; + // boolean casting + var booleanIndex = getTypeIndex(Boolean, prop.type); + if (booleanIndex > -1) { + if (absent && !hasOwn(prop, 'default')) { + value = false; + } else if (value === '' || value === hyphenate(key)) { + // only cast empty string / same name to boolean if + // boolean has higher priority + var stringIndex = getTypeIndex(String, prop.type); + if (stringIndex < 0 || booleanIndex < stringIndex) { + value = true; + } + } + } + // check default value + if (value === undefined) { + value = getPropDefaultValue(vm, prop, key); + // since the default value is a fresh copy, + // make sure to observe it. + var prevShouldObserve = shouldObserve; + toggleObserving(true); + observe(value); + toggleObserving(prevShouldObserve); + } + if ( + true + ) { + assertProp(prop, key, value, vm, absent); + } + return value +} + +/** + * Get the default value of a prop. + */ +function getPropDefaultValue (vm, prop, key) { + // no default, return undefined + if (!hasOwn(prop, 'default')) { + return undefined + } + var def = prop.default; + // warn against non-factory defaults for Object & Array + if ("development" !== 'production' && isObject(def)) { + warn( + 'Invalid default value for prop "' + key + '": ' + + 'Props with type Object/Array must use a factory function ' + + 'to return the default value.', + vm + ); + } + // the raw prop value was also undefined from previous render, + // return previous default value to avoid unnecessary watcher trigger + if (vm && vm.$options.propsData && + vm.$options.propsData[key] === undefined && + vm._props[key] !== undefined + ) { + return vm._props[key] + } + // call factory function for non-Function types + // a value is Function if its prototype is function even across different execution context + return typeof def === 'function' && getType(prop.type) !== 'Function' + ? def.call(vm) + : def +} + +/** + * Assert whether a prop is valid. + */ +function assertProp ( + prop, + name, + value, + vm, + absent +) { + if (prop.required && absent) { + warn( + 'Missing required prop: "' + name + '"', + vm + ); + return + } + if (value == null && !prop.required) { + return + } + var type = prop.type; + var valid = !type || type === true; + var expectedTypes = []; + if (type) { + if (!Array.isArray(type)) { + type = [type]; + } + for (var i = 0; i < type.length && !valid; i++) { + var assertedType = assertType(value, type[i]); + expectedTypes.push(assertedType.expectedType || ''); + valid = assertedType.valid; + } + } + + if (!valid) { + warn( + getInvalidTypeMessage(name, value, expectedTypes), + vm + ); + return + } + var validator = prop.validator; + if (validator) { + if (!validator(value)) { + warn( + 'Invalid prop: custom validator check failed for prop "' + name + '".', + vm + ); + } + } +} + +var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/; + +function assertType (value, type) { + var valid; + var expectedType = getType(type); + if (simpleCheckRE.test(expectedType)) { + var t = typeof value; + valid = t === expectedType.toLowerCase(); + // for primitive wrapper objects + if (!valid && t === 'object') { + valid = value instanceof type; + } + } else if (expectedType === 'Object') { + valid = isPlainObject(value); + } else if (expectedType === 'Array') { + valid = Array.isArray(value); + } else { + valid = value instanceof type; + } + return { + valid: valid, + expectedType: expectedType + } +} + +/** + * Use function string name to check built-in types, + * because a simple equality check will fail when running + * across different vms / iframes. + */ +function getType (fn) { + var match = fn && fn.toString().match(/^\s*function (\w+)/); + return match ? match[1] : '' +} + +function isSameType (a, b) { + return getType(a) === getType(b) +} + +function getTypeIndex (type, expectedTypes) { + if (!Array.isArray(expectedTypes)) { + return isSameType(expectedTypes, type) ? 0 : -1 + } + for (var i = 0, len = expectedTypes.length; i < len; i++) { + if (isSameType(expectedTypes[i], type)) { + return i + } + } + return -1 +} + +function getInvalidTypeMessage (name, value, expectedTypes) { + var message = "Invalid prop: type check failed for prop \"" + name + "\"." + + " Expected " + (expectedTypes.map(capitalize).join(', ')); + var expectedType = expectedTypes[0]; + var receivedType = toRawType(value); + var expectedValue = styleValue(value, expectedType); + var receivedValue = styleValue(value, receivedType); + // check if we need to specify expected value + if (expectedTypes.length === 1 && + isExplicable(expectedType) && + !isBoolean(expectedType, receivedType)) { + message += " with value " + expectedValue; + } + message += ", got " + receivedType + " "; + // check if we need to specify received value + if (isExplicable(receivedType)) { + message += "with value " + receivedValue + "."; + } + return message +} + +function styleValue (value, type) { + if (type === 'String') { + return ("\"" + value + "\"") + } else if (type === 'Number') { + return ("" + (Number(value))) + } else { + return ("" + value) + } +} + +function isExplicable (value) { + var explicitTypes = ['string', 'number', 'boolean']; + return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; }) +} + +function isBoolean () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; }) +} + +/* */ + +function handleError (err, vm, info) { + if (vm) { + var cur = vm; + while ((cur = cur.$parent)) { + var hooks = cur.$options.errorCaptured; + if (hooks) { + for (var i = 0; i < hooks.length; i++) { + try { + var capture = hooks[i].call(cur, err, vm, info) === false; + if (capture) { return } + } catch (e) { + globalHandleError(e, cur, 'errorCaptured hook'); + } + } + } + } + } + globalHandleError(err, vm, info); +} + +function globalHandleError (err, vm, info) { + if (config.errorHandler) { + try { + return config.errorHandler.call(null, err, vm, info) + } catch (e) { + logError(e, null, 'config.errorHandler'); + } + } + logError(err, vm, info); +} + +function logError (err, vm, info) { + if (true) { + warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm); + } + /* istanbul ignore else */ + if ((inBrowser || inWeex) && typeof console !== 'undefined') { + console.error(err); + } else { + throw err + } +} + +/* */ + +var callbacks = []; +var pending = false; + +function flushCallbacks () { + pending = false; + var copies = callbacks.slice(0); + callbacks.length = 0; + for (var i = 0; i < copies.length; i++) { + copies[i](); + } +} + +// Here we have async deferring wrappers using both microtasks and (macro) tasks. +// In < 2.4 we used microtasks everywhere, but there are some scenarios where +// microtasks have too high a priority and fire in between supposedly +// sequential events (e.g. #4521, #6690) or even between bubbling of the same +// event (#6566). However, using (macro) tasks everywhere also has subtle problems +// when state is changed right before repaint (e.g. #6813, out-in transitions). +// Here we use microtask by default, but expose a way to force (macro) task when +// needed (e.g. in event handlers attached by v-on). +var microTimerFunc; +var macroTimerFunc; +var useMacroTask = false; + +// Determine (macro) task defer implementation. +// Technically setImmediate should be the ideal choice, but it's only available +// in IE. The only polyfill that consistently queues the callback after all DOM +// events triggered in the same loop is by using MessageChannel. +/* istanbul ignore if */ +if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { + macroTimerFunc = function () { + setImmediate(flushCallbacks); + }; +} else if (typeof MessageChannel !== 'undefined' && ( + isNative(MessageChannel) || + // PhantomJS + MessageChannel.toString() === '[object MessageChannelConstructor]' +)) { + var channel = new MessageChannel(); + var port = channel.port2; + channel.port1.onmessage = flushCallbacks; + macroTimerFunc = function () { + port.postMessage(1); + }; +} else { + /* istanbul ignore next */ + macroTimerFunc = function () { + setTimeout(flushCallbacks, 0); + }; +} + +// Determine microtask defer implementation. +/* istanbul ignore next, $flow-disable-line */ +if (typeof Promise !== 'undefined' && isNative(Promise)) { + var p = Promise.resolve(); + microTimerFunc = function () { + p.then(flushCallbacks); + // in problematic UIWebViews, Promise.then doesn't completely break, but + // it can get stuck in a weird state where callbacks are pushed into the + // microtask queue but the queue isn't being flushed, until the browser + // needs to do some other work, e.g. handle a timer. Therefore we can + // "force" the microtask queue to be flushed by adding an empty timer. + if (isIOS) { setTimeout(noop); } + }; +} else { + // fallback to macro + microTimerFunc = macroTimerFunc; +} + +/** + * Wrap a function so that if any code inside triggers state change, + * the changes are queued using a (macro) task instead of a microtask. + */ +function withMacroTask (fn) { + return fn._withTask || (fn._withTask = function () { + useMacroTask = true; + try { + return fn.apply(null, arguments) + } finally { + useMacroTask = false; + } + }) +} + +function nextTick (cb, ctx) { + var _resolve; + callbacks.push(function () { + if (cb) { + try { + cb.call(ctx); + } catch (e) { + handleError(e, ctx, 'nextTick'); + } + } else if (_resolve) { + _resolve(ctx); + } + }); + if (!pending) { + pending = true; + if (useMacroTask) { + macroTimerFunc(); + } else { + microTimerFunc(); + } + } + // $flow-disable-line + if (!cb && typeof Promise !== 'undefined') { + return new Promise(function (resolve) { + _resolve = resolve; + }) + } +} + +/* */ + +var mark; +var measure; + +if (true) { + var perf = inBrowser && window.performance; + /* istanbul ignore if */ + if ( + perf && + perf.mark && + perf.measure && + perf.clearMarks && + perf.clearMeasures + ) { + mark = function (tag) { return perf.mark(tag); }; + measure = function (name, startTag, endTag) { + perf.measure(name, startTag, endTag); + perf.clearMarks(startTag); + perf.clearMarks(endTag); + perf.clearMeasures(name); + }; + } +} + +/* not type checking this file because flow doesn't play well with Proxy */ + +var initProxy; + +if (true) { + var allowedGlobals = makeMap( + 'Infinity,undefined,NaN,isFinite,isNaN,' + + 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + + 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' + + 'require' // for Webpack/Browserify + ); + + var warnNonPresent = function (target, key) { + warn( + "Property or method \"" + key + "\" is not defined on the instance but " + + 'referenced during render. Make sure that this property is reactive, ' + + 'either in the data option, or for class-based components, by ' + + 'initializing the property. ' + + 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', + target + ); + }; + + var warnReservedPrefix = function (target, key) { + warn( + "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " + + 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + + 'prevent conflicts with Vue internals' + + 'See: https://vuejs.org/v2/api/#data', + target + ); + }; + + var hasProxy = + typeof Proxy !== 'undefined' && isNative(Proxy); + + if (hasProxy) { + var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); + config.keyCodes = new Proxy(config.keyCodes, { + set: function set (target, key, value) { + if (isBuiltInModifier(key)) { + warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key)); + return false + } else { + target[key] = value; + return true + } + } + }); + } + + var hasHandler = { + has: function has (target, key) { + var has = key in target; + var isAllowed = allowedGlobals(key) || + (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data)); + if (!has && !isAllowed) { + if (key in target.$data) { warnReservedPrefix(target, key); } + else { warnNonPresent(target, key); } + } + return has || !isAllowed + } + }; + + var getHandler = { + get: function get (target, key) { + if (typeof key === 'string' && !(key in target)) { + if (key in target.$data) { warnReservedPrefix(target, key); } + else { warnNonPresent(target, key); } + } + return target[key] + } + }; + + initProxy = function initProxy (vm) { + if (hasProxy) { + // determine which proxy handler to use + var options = vm.$options; + var handlers = options.render && options.render._withStripped + ? getHandler + : hasHandler; + vm._renderProxy = new Proxy(vm, handlers); + } else { + vm._renderProxy = vm; + } + }; +} + +/* */ + +var seenObjects = new _Set(); + +/** + * Recursively traverse an object to evoke all converted + * getters, so that every nested property inside the object + * is collected as a "deep" dependency. + */ +function traverse (val) { + _traverse(val, seenObjects); + seenObjects.clear(); +} + +function _traverse (val, seen) { + var i, keys; + var isA = Array.isArray(val); + if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) { + return + } + if (val.__ob__) { + var depId = val.__ob__.dep.id; + if (seen.has(depId)) { + return + } + seen.add(depId); + } + if (isA) { + i = val.length; + while (i--) { _traverse(val[i], seen); } + } else { + keys = Object.keys(val); + i = keys.length; + while (i--) { _traverse(val[keys[i]], seen); } + } +} + +/* */ + +var normalizeEvent = cached(function (name) { + var passive = name.charAt(0) === '&'; + name = passive ? name.slice(1) : name; + var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first + name = once$$1 ? name.slice(1) : name; + var capture = name.charAt(0) === '!'; + name = capture ? name.slice(1) : name; + return { + name: name, + once: once$$1, + capture: capture, + passive: passive + } +}); + +function createFnInvoker (fns) { + function invoker () { + var arguments$1 = arguments; + + var fns = invoker.fns; + if (Array.isArray(fns)) { + var cloned = fns.slice(); + for (var i = 0; i < cloned.length; i++) { + cloned[i].apply(null, arguments$1); + } + } else { + // return handler return value for single handlers + return fns.apply(null, arguments) + } + } + invoker.fns = fns; + return invoker +} + +function updateListeners ( + on, + oldOn, + add, + remove$$1, + createOnceHandler, + vm +) { + var name, def$$1, cur, old, event; + for (name in on) { + def$$1 = cur = on[name]; + old = oldOn[name]; + event = normalizeEvent(name); + if (isUndef(cur)) { + "development" !== 'production' && warn( + "Invalid handler for event \"" + (event.name) + "\": got " + String(cur), + vm + ); + } else if (isUndef(old)) { + if (isUndef(cur.fns)) { + cur = on[name] = createFnInvoker(cur); + } + if (isTrue(event.once)) { + cur = on[name] = createOnceHandler(event.name, cur, event.capture); + } + add(event.name, cur, event.capture, event.passive, event.params); + } else if (cur !== old) { + old.fns = cur; + on[name] = old; + } + } + for (name in oldOn) { + if (isUndef(on[name])) { + event = normalizeEvent(name); + remove$$1(event.name, oldOn[name], event.capture); + } + } +} + +/* */ + +function mergeVNodeHook (def, hookKey, hook) { + if (def instanceof VNode) { + def = def.data.hook || (def.data.hook = {}); + } + var invoker; + var oldHook = def[hookKey]; + + function wrappedHook () { + hook.apply(this, arguments); + // important: remove merged hook to ensure it's called only once + // and prevent memory leak + remove(invoker.fns, wrappedHook); + } + + if (isUndef(oldHook)) { + // no existing hook + invoker = createFnInvoker([wrappedHook]); + } else { + /* istanbul ignore if */ + if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { + // already a merged invoker + invoker = oldHook; + invoker.fns.push(wrappedHook); + } else { + // existing plain hook + invoker = createFnInvoker([oldHook, wrappedHook]); + } + } + + invoker.merged = true; + def[hookKey] = invoker; +} + +/* */ + +function extractPropsFromVNodeData ( + data, + Ctor, + tag +) { + // we are only extracting raw values here. + // validation and default values are handled in the child + // component itself. + var propOptions = Ctor.options.props; + if (isUndef(propOptions)) { + return + } + var res = {}; + var attrs = data.attrs; + var props = data.props; + if (isDef(attrs) || isDef(props)) { + for (var key in propOptions) { + var altKey = hyphenate(key); + if (true) { + var keyInLowerCase = key.toLowerCase(); + if ( + key !== keyInLowerCase && + attrs && hasOwn(attrs, keyInLowerCase) + ) { + tip( + "Prop \"" + keyInLowerCase + "\" is passed to component " + + (formatComponentName(tag || Ctor)) + ", but the declared prop name is" + + " \"" + key + "\". " + + "Note that HTML attributes are case-insensitive and camelCased " + + "props need to use their kebab-case equivalents when using in-DOM " + + "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"." + ); + } + } + checkProp(res, props, key, altKey, true) || + checkProp(res, attrs, key, altKey, false); + } + } + return res +} + +function checkProp ( + res, + hash, + key, + altKey, + preserve +) { + if (isDef(hash)) { + if (hasOwn(hash, key)) { + res[key] = hash[key]; + if (!preserve) { + delete hash[key]; + } + return true + } else if (hasOwn(hash, altKey)) { + res[key] = hash[altKey]; + if (!preserve) { + delete hash[altKey]; + } + return true + } + } + return false +} + +/* */ + +// The template compiler attempts to minimize the need for normalization by +// statically analyzing the template at compile time. +// +// For plain HTML markup, normalization can be completely skipped because the +// generated render function is guaranteed to return Array. There are +// two cases where extra normalization is needed: + +// 1. When the children contains components - because a functional component +// may return an Array instead of a single root. In this case, just a simple +// normalization is needed - if any child is an Array, we flatten the whole +// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep +// because functional components already normalize their own children. +function simpleNormalizeChildren (children) { + for (var i = 0; i < children.length; i++) { + if (Array.isArray(children[i])) { + return Array.prototype.concat.apply([], children) + } + } + return children +} + +// 2. When the children contains constructs that always generated nested Arrays, +// e.g. \ No newline at end of file diff --git a/resources/js/components/Shortcuts.vue b/resources/js/components/Shortcuts.vue new file mode 100644 index 0000000..c827852 --- /dev/null +++ b/resources/js/components/Shortcuts.vue @@ -0,0 +1,76 @@ + + + \ No newline at end of file diff --git a/resources/js/components/StatusBar.vue b/resources/js/components/StatusBar.vue index 2e6ba25..566992d 100644 --- a/resources/js/components/StatusBar.vue +++ b/resources/js/components/StatusBar.vue @@ -4,12 +4,12 @@
    @@ -19,16 +19,25 @@
      -
    • - Unreviewed +
    • + + Review + +
    • -
    • - Rejected +
    • + + Rejected + +
    • -
    • - Accepted +
    • + + Accepted + +
    @@ -49,7 +58,7 @@ data() { return { - isActive: false + 'dropdownName': 'StatusBar::dropdown-status' } }, @@ -58,11 +67,11 @@ return this.status === 'todo'; }, - isToCheck: function () { + isReview: function () { return this.status === 'review'; }, - isAccepted: function () { + isDone: function () { return this.status === 'done'; }, @@ -72,17 +81,29 @@ title: function () { return `status: ${this.status}`; + }, + + isActive: function () { + return this.$store.getters.activeDropdown === this.dropdownName; } }, methods: { + + /** + * Toggle the status dropdown. + */ + toggleStatus: function () { + this.$store.dispatch('toggleDropdown', this.dropdownName); + }, + /** * Change the status of the Pattern. * @param status */ changeStatus: function (status) { this.$emit('update-status', status); - this.isActive = false; + this.$store.dispatch('toggleDropdown', this.dropdownName); } } } diff --git a/resources/js/components/StatusList.vue b/resources/js/components/StatusList.vue new file mode 100644 index 0000000..c3c1c1a --- /dev/null +++ b/resources/js/components/StatusList.vue @@ -0,0 +1,52 @@ + + + \ No newline at end of file diff --git a/resources/js/components/TabBar.vue b/resources/js/components/TabBar.vue new file mode 100644 index 0000000..b8e3173 --- /dev/null +++ b/resources/js/components/TabBar.vue @@ -0,0 +1,45 @@ + + + \ No newline at end of file diff --git a/resources/js/components/UpdatePattern.vue b/resources/js/components/UpdatePattern.vue index 313dafd..d7ce86b 100644 --- a/resources/js/components/UpdatePattern.vue +++ b/resources/js/components/UpdatePattern.vue @@ -1,7 +1,7 @@ diff --git a/resources/js/config.js b/resources/js/config.js index a16e279..9d0338a 100644 --- a/resources/js/config.js +++ b/resources/js/config.js @@ -13,5 +13,13 @@ export default { |-------------------------------------------------------------------------- | Enable/disable development mode. */ - devMode: true + devMode: true, + + /* + |-------------------------------------------------------------------------- + | Environment + |-------------------------------------------------------------------------- + | Either it is 'development' or 'production'. + */ + environment: process.env.NODE_ENV } \ No newline at end of file diff --git a/resources/js/helpers.js b/resources/js/helpers.js new file mode 100644 index 0000000..7aef0a1 --- /dev/null +++ b/resources/js/helpers.js @@ -0,0 +1,19 @@ +/** + * Deternmine the key that has been pressed in the given event. + * @param event + * @returns {*} + */ +const keyPressed = function (event) { + + let key; + + if (event.keyIdentifier !== undefined) { + key = event.keyIdentifier; + } else if (event.keyCode !== undefined) { + key = event.keyCode; + } + + return key; +}; + +export { keyPressed }; \ No newline at end of file diff --git a/resources/js/httpClient.js b/resources/js/restClient.js similarity index 100% rename from resources/js/httpClient.js rename to resources/js/restClient.js diff --git a/resources/js/router.js b/resources/js/router.js index 96356e7..25cf9ef 100644 --- a/resources/js/router.js +++ b/resources/js/router.js @@ -11,10 +11,28 @@ Vue.use(VueRouter); const router = new VueRouter({ mode: 'hash', routes: [ - { path: '/', component: Dashboard, name: 'dashboard' }, - { path: '/create', component: CreatePattern, name: 'create' }, - { path: '/rename/:pattern', component: UpdatePattern, name: 'rename' }, - { path: '/preview/:pattern', component: PreviewPattern, name: 'preview' } + { + path: '/', + component: Dashboard, + name: 'dashboard' + }, + { + path: '/create', + component: CreatePattern, + name: 'create' + }, + { + path: '/rename/:patternName', + component: UpdatePattern, + name: 'rename', + props: true, + }, + { + path: '/preview/:patternName', + component: PreviewPattern, + name: 'preview', + props: true, + } ] }); diff --git a/resources/js/shortcuts.js b/resources/js/shortcuts.js new file mode 100644 index 0000000..b2a10ab --- /dev/null +++ b/resources/js/shortcuts.js @@ -0,0 +1,84 @@ +/** + * Global shortcuts. + * @type {*[]} + */ +const globalShortcuts = [ + { + stroke: 'Ctrl + C', + description: 'Trigger creation of a new Pattern.' + }, + { + stroke: 'Ctrl + K', + description: 'Show/hide the shortcuts on the current page.' + } +]; + + +/** + * Keyboard shortcuts on the create component. + * @type {*[]} + */ +const createShortcuts = [ + { + stroke: 'Ctrl + S', + description: 'Save the newly created Pattern.' + }, + { + stroke: 'ESC', + description: 'Cancel the creation of the new Pattern.' + } +]; + +/** + * Keyboard shortcuts on the preview component. + * @type {*[]} + */ +const previewShortcuts = [ + { + stroke: 'Ctrl + DEL', + description: 'Trigger deletion of the Pattern.' + }, + { + stroke: 'ESC', + description: 'Cancel deletion of the Pattern.' + }, + { + stroke: 'Ctrl + S', + description: 'Save the edited description of the Pattern.' + }, + { + stroke: 'ESC', + description: 'Cancel edit mode of the Pattern\'s description.' + } +]; + +/** + * Keyboard shortcuts on the update component. + * @type {*[]} + */ +const updateShortcuts = [ + { + stroke: 'Ctrl + S', + description: 'Save the new name of the Pattern.' + }, + { + stroke: 'ESC', + description: 'Cancel the renaming of the Pattern.' + } +]; + +/** + * Exported function that should be used as a computed property. + * @returns {getters.showKeyMap|boolean|*} + */ +const showKeyMap = function () { + return this.$store.getters.showKeyMap; +}; + +export { + createShortcuts, + globalShortcuts, + previewShortcuts, + updateShortcuts, + showKeyMap +}; \ No newline at end of file diff --git a/resources/js/store.js b/resources/js/store.js index 4a4d6f7..0e5dce1 100644 --- a/resources/js/store.js +++ b/resources/js/store.js @@ -1,11 +1,15 @@ import Vue from 'vue'; import Vuex from 'vuex'; import config from './config'; +import {API} from './restClient'; +import LOG from './logger'; Vue.use(Vuex); export default new Vuex.Store({ + strict: config.environment !== 'production', + state: { config, appInfo: {}, @@ -13,9 +17,89 @@ export default new Vuex.Store({ activeMain: '', activeSub: '', reload: false + }, + showKeyMap: false, + activeDropdown: '', + showResources: false, + resources: { + head: '', + body: '' } }, + getters: { + + /** + * Return the devMode. + * @param state + * @returns {boolean} + */ + isDevMode: state => state.config.devMode, + + /** + * Get the Laravel app name. + * @param state + * @returns {string} + */ + appName: state => state.appInfo.appName, + + /** + * Determine if the navi should be reloaded. + * @param state + * @returns {boolean} + */ + reloadNavi: state => state.navi.reload === true, + + /** + * Check if the given menu is active. + * @param state + * @returns {function(*): boolean} + */ + isActiveMainMenu: (state) => (menu) => state.navi.activeMain === menu, + + /** + * Determine if the given sub menu is currently active. + * @param state + * @returns {function(*=): boolean} + */ + isActiveSubmenu: (state) => (menu) => state.navi.activeSub.includes(menu), + + /** + * Determine if the keyMap is shown. + * @param state + * @returns {getters.showKeyMap|(function(*))|boolean} + */ + showKeyMap: state => state.showKeyMap, + + /** + * Determine if the global resources are shown. + * @param state + * @returns {getters.showResources|(function(*))|default.computed.showResources|showResources|boolean|*} + */ + showResources: state => state.showResources, + + /** + * + * @param state + * @returns {getters.activeDropdown|(function(*))|string|any} + */ + activeDropdown: state => state.activeDropdown, + + /** + * Get the global head resources. + * @param state + * @returns {string} + */ + headResources: state => state.resources.head, + + /** + * Get the global body resources. + * @param state + * @returns {string} + */ + bodyResources: state => state.resources.body, + }, + mutations: { /** @@ -23,7 +107,7 @@ export default new Vuex.Store({ * @param state * @param info */ - appInfo(state, info) { + appInfo: (state, info) => { state.appInfo = info.data; }, @@ -32,7 +116,7 @@ export default new Vuex.Store({ * @param state * @param menu */ - toggleMainMenu(state, menu) { + toggleMainMenu: (state, menu) => { state.navi.activeMain = menu; state.navi.activeSub = ''; }, @@ -42,7 +126,7 @@ export default new Vuex.Store({ * @param state * @param subMenu */ - toggleSubMenu(state, subMenu) { + toggleSubMenu: (state, subMenu) => { state.navi.activeSub = subMenu; }, @@ -50,7 +134,7 @@ export default new Vuex.Store({ * Reset the active main menu item. * @param state */ - resetMainMenu(state) { + resetMenu: state => { state.navi.activeMain = ''; }, @@ -58,7 +142,7 @@ export default new Vuex.Store({ * Reset the active sub menu item. * @param state */ - resetSubMenu(state) { + resetSubMenu: state => { state.navi.activeSub = ''; }, @@ -67,8 +151,127 @@ export default new Vuex.Store({ * @param state * @param reload */ - reloadNavi(state, reload) { + reloadNavi: (state, reload) => { state.navi.reload = reload; + }, + + /** + * Toggle the keymap. + * @param state + */ + toggleKeyMap: (state) => { + state.showKeyMap = !state.showKeyMap; + }, + + /** + * Toggle the global resources configuration. + * @param state + */ + toggleResources: (state) => { + state.showResources = !state.showResources; + }, + + /** + * Toogle a dropdown. + * @param state + * @param dropdown + */ + toggleDropdown: (state, dropdown) => { + state.activeDropdown = dropdown; + }, + + /** + * Reset the activeDropdown. + * @param state + */ + resetDropdown: (state) => { + state.activeDropdown = ''; + }, + + /** + * Set the global resources for the head section. + * @param state + * @param resources + */ + headResources: (state, resources) => { + state.resources.head = resources; + }, + + /** + * Set the global resources for the body section. + * @param state + * @param resources + */ + bodyResources: (state, resources) => { + state.resources.body = resources; + } + }, + + actions: { + + /** + * Fetch the app information. + * @param commit + * @returns {Promise} + */ + fetchAppInfo: async ({commit}) => { + try { + let json = await API.get('info'); + commit('appInfo', json.data); + } catch (e) { + LOG.error(e); + } + }, + + /** + * Fetch the global resources from the API. + * @returns {Promise} + */ + fetchResources: async function () { + try { + const response = await API.get('resources'); + this.commit('headResources', response.data.data.head); + this.commit('bodyResources', response.data.data.body); + } catch (e) { + LOG.error(e); + } + }, + + /** + * Toggle/untoggle the given dropdown. + * An other toggled dropdown will consequently be untoggled. + * @param commit + * @param state + * @param dropdown + */ + toggleDropdown: ({commit, state}, dropdown) => { + if (state.activeDropdown !== dropdown) { + commit('toggleDropdown', dropdown); + } else { + commit('resetDropdown'); + } + }, + + /** + * Trigger reset of any active dropdown menu in the main window. + * @param commit + * @param state + */ + resetDropdowns: ({commit, state}) => { + if (state.activeDropdown !== '') { + commit('resetDropdown'); + } + }, + + /** + * Reset the menu (navi). + * @param commit + * @param state + */ + resetMenu: ({commit, state}) => { + if (state.navi.activeMain !== '') { + commit('resetMenu'); + } } } }); \ No newline at end of file diff --git a/resources/js/validationRules.js b/resources/js/validationRules.js index 2bcb4ad..dbbb3e1 100644 --- a/resources/js/validationRules.js +++ b/resources/js/validationRules.js @@ -1,5 +1,5 @@ import {Validator} from 'vee-validate'; -import {API} from './httpClient'; +import {API} from './restClient'; import LOG from './logger'; /** @@ -14,7 +14,7 @@ Validator.extend('uniquePattern', { */ validate: async (patternName) => { try { - let response = await API.get(`pattern/exists/${patternName}`); + const response = await API.get(`pattern/exists/${patternName}`); return { valid: !response.data.data.exists, data: { diff --git a/resources/sass/app.scss b/resources/sass/app.scss index f154022..f38cf05 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -7,11 +7,14 @@ @import 'generic.shared'; @import 'generic.animations'; +@import 'elements.dropdowns'; @import 'elements.links'; @import 'elements.buttons'; @import 'elements.forms'; @import 'elements.headings'; @import 'elements.lists'; +@import 'elements.tooltips'; +@import 'elements.warnings'; @import 'components.header'; @import 'components.dashboard'; @@ -19,14 +22,15 @@ @import 'components.previewWindow'; @import 'components.projectMenue'; @import 'components.confirmationWindow'; +@import 'components.shortcuts'; @import 'components.footer'; -// @import '~prismjs/themes/prism.css'; - -.u-center { - text-align: center; +.popUp { + align-items: center; + display: flex; + justify-content: center; } //--------------------------------------------------------// diff --git a/resources/sass/components.codeWindow.scss b/resources/sass/components.codeWindow.scss index 40896de..b684ca9 100644 --- a/resources/sass/components.codeWindow.scss +++ b/resources/sass/components.codeWindow.scss @@ -1,6 +1,8 @@ // Code Window Base --------- // +@import '~prismjs/themes/prism-okaidia.css'; + .code { display: flex; @@ -24,21 +26,25 @@ // Content .code-el { - - @include size(100%); + display: flex; flex-direction: column; + flex: 1 1 0; margin-bottom: 2rem; + width: 100%; } .code-lang { + align-content: center; + display: flex; margin: 0; } .code-header { align-items: center; display: flex; + justify-content: space-between; padding: 0 0 1rem 0; position: relative; @@ -71,10 +77,19 @@ .tab { @include size(100%); + border: 0; + display: flex; left: 0; + padding: 0; position: absolute; top: 0; } } +pre[class*="language-"] { + background: var(--brandMain, $c-brandMain); + padding: 0; + width: 100%; +} + diff --git a/resources/sass/components.confirmationWindow.scss b/resources/sass/components.confirmationWindow.scss index ff8ea4a..a32aaa2 100644 --- a/resources/sass/components.confirmationWindow.scss +++ b/resources/sass/components.confirmationWindow.scss @@ -21,15 +21,21 @@ These are the styles for the confirmation modal. z-index: 999; .popUp-inner { - background: var(--brandMain, $c-brandMain); + + background: #fff; + color: $c-brandMain; + color: var(--brandMain, $c-brandMain); padding: var(--gap, $l-gap); + max-width: 40rem; + width: 100%; + } } .darken { - background: var(--brandMain, $c-brandMain); + background: var(--brandDark, $c-brandDark); height: 100%; left: 0; opacity: 0.95; diff --git a/resources/sass/components.dashboard.scss b/resources/sass/components.dashboard.scss index 57de0fb..760d1a0 100644 --- a/resources/sass/components.dashboard.scss +++ b/resources/sass/components.dashboard.scss @@ -5,15 +5,104 @@ These are the styles that are needed to render our welcome dashboard. // Dasboard Base --------- // -.dashboard { - align-items: center; - display: flex; - grid-area: code / code / view / view; - justify-content: center; - padding: var(--gap, $l-gap); -} + // Dasboard Content +.dashboard-container { + + max-height: 100%; + overflow: hidden; + padding: $l-gap; + padding: var(--gap, $l-gap); + + + &.toReview { + + grid-column: span 2; + + @include for-desktop-up { + + grid-column: 3 / 4; + + } + + } + + &.rejected { + + grid-column: span 2; + + @include for-desktop-up { + + grid-column: 4 / 5; + + + } + + } + +} + +.dashboard-info { + + display: block; + font-family: sans-serif; + font-size: 0.75rem; + padding: 0.5rem 0; + +} + +.dashboard-list { + + height: 100%; + list-style-type: none; + margin-left: -$l-gap; + min-width: 300px; + overflow: auto; + + + &Item > a { + + background: transparent; + display: block; + padding: $l-gap; + padding: var(--gap, $l-gap); + + &:hover { + + background: $c-brandDark; + background: var(--brandDark, $c-brandDark); + color: $c-positive; + color: var(--positive,$c-positive); + + } + + } + + .rejected & { + + .dashboard-listItem > a:hover { + color: $c-alert; + color: var(--alert,$c-alert); + } + + } + +} + +.dashboard-list--empty { + margin-left: -$l-gap; + padding: $l-gap; + padding: var(--gap, $l-gap); + + span { + opacity: 0.6; + } + +} + + + diff --git a/resources/sass/components.header.scss b/resources/sass/components.header.scss index a917d79..4496f00 100644 --- a/resources/sass/components.header.scss +++ b/resources/sass/components.header.scss @@ -4,18 +4,46 @@ // Header Base --------- // .header { + background: var(--brandDark); height: var(--headerheight); grid-area: header; + } // Header Content .project-info { + text-align: center; + } .project-name { - font-family: sans-serif; - font-size: 0.75rem; + + color: #fff; + font-family: sans-serif; + font-size: 0.75rem; + text-decoration: none; + + &:hover { + color: $c-positive; + color: var(--positive, $c-positive); + } + + > a { + + text-decoration: inherit; + + } + +} + +.project-actions { + + padding: 0.375em 1rem; + position: absolute; + right: 0; + top: 0; + } \ No newline at end of file diff --git a/resources/sass/components.previewWindow.scss b/resources/sass/components.previewWindow.scss index 2c7cc60..56095c2 100644 --- a/resources/sass/components.previewWindow.scss +++ b/resources/sass/components.previewWindow.scss @@ -37,8 +37,13 @@ These are the styles that are needed to render the pattern preview. max-width: 100%; position: relative; overflow: auto; + + &-inner { + height: calc(100% - 50px); + } iframe { // THIS IS THE IFRAME CONTAINING THE PATTERN. + height: 100%; width: 100%; } @@ -50,7 +55,8 @@ These are the styles that are needed to render the pattern preview. background: var(--brandMain, $c-brandMain); display: flex; font-family: Arial, sans-serif; - font-size: 0.75rem; + font-size: 0.75rem; + height: 50px; justify-content: space-between; left: 0; padding: var(--gap, $l-gap); @@ -74,29 +80,25 @@ These are the styles that are needed to render the pattern preview. } -.preview-options { +.preview-menu { - background: $c-brandDark; - background: var(--brandDark,$c-brandDark); + @extend %dropdown; min-width: 10rem; - padding: 0; - position: absolute; right: 0; - top: 1.2rem; z-index: 1; } .preview-option { - background: transparent; + @extend %dropdownItem; border: 0; color: #fff; - cursor: pointer; - padding: calc(var(--gap, $l-gap) / 2) var(--gap, 1rem); - text-align: left; - text-decoration: none; - width: 100%; + // cursor: pointer; + // padding: calc(var(--gap, $l-gap) / 2) var(--gap, 1rem); + // text-align: left; + // text-decoration: none; + // width: 100%; &:hover { background: $c-brandMain; @@ -120,7 +122,7 @@ These are the styles that are needed to render the pattern preview. .statusbar { - padding: 0 0.5rem; + padding: 0 0.45rem; position: relative; } @@ -139,28 +141,21 @@ These are the styles that are needed to render the pattern preview. .status-menue { - background: var(--brandDark, $c-brandDark); + @extend %dropdown; left: -0.5rem; - padding: calc(var(--gap, $l-gap) / 2) 0; - position: absolute; - top: 1.2rem; z-index: 500; } .status-option { - align-items: center; - background: transparent; - cursor: pointer; - display: flex; - padding: calc(var(--gap, $l-gap) / 2) var(--gap, $l-gap); + @extend %dropdownItem; &:before { display: inline-block; content: ''; @extend %status; - } + } &:hover { background: var(--brandMain, $c-brandMain); diff --git a/resources/sass/components.shortcuts.scss b/resources/sass/components.shortcuts.scss new file mode 100644 index 0000000..3acc05e --- /dev/null +++ b/resources/sass/components.shortcuts.scss @@ -0,0 +1,55 @@ +//------------------- SHORTCUTS LIST -----------------------// + +/* +These are the styles for the shortcut-hint popUp component. +*/ + +// ShortCut PopUp base Base --------- // + + + +// Content + +.shortcut-list { + + margin: 0; + padding: 0; + +} + + +.shortcut { + + align-items: center; + display: flex; + justify-content: space-between; + line-height: 1.2; + margin-bottom: 1rem; + + &:last-child { + + margin-bottom: 2rem; + + } + + &-keys { + + background: $c-brandMain; + background: var(--brandMain, $c-brandMain); + border-radius: 1rem; + color: #fff; + display: inline-block; + padding: 0.5rem; + text-align: center; + + } + + &-description { + + color: $c-basicCopy; + font-family: Arial, sans-serif; + width: 80%; + + } + +} \ No newline at end of file diff --git a/resources/sass/elements.buttons.scss b/resources/sass/elements.buttons.scss index 0a26708..30d08fb 100644 --- a/resources/sass/elements.buttons.scss +++ b/resources/sass/elements.buttons.scss @@ -7,11 +7,11 @@ These are the styles for every interactive element that is clickable but no link %btn { background: none; border: 1px solid #fff; - color: #fff; margin: 0 1rem 1rem 0; padding: 0; position: relative; white-space: nowrap; + text-decoration: none; > span { align-items: center; @@ -23,7 +23,7 @@ These are the styles for every interactive element that is clickable but no link position: relative; top: 0; transform: translate(5px, -5px); - transition: 150ms cubic-bezier(0.4, 0, 0.2, 1) transform; + transition: 150ms cubic-bezier(0.4, 0, 0.2, 1) transform ; z-index: 1; > i { @@ -43,6 +43,8 @@ These are the styles for every interactive element that is clickable but no link .btn--primary { @extend %btn; + color: #fff; + min-width: 100px; > span { @@ -59,14 +61,54 @@ These are the styles for every interactive element that is clickable but no link > span { - background: var(--brandMain, $c-brandMain); - border: 1px solid white; - color: white; + background: var(--brandMain, $c-brandMain); + border: 1px solid transparent; + color: currentColor; } } +.btn--save { + + @extend %btn; + border: 1px solid var(--positive, $c-positive); + + > span { + + background: var(--positive, $c-positive); + + } + +} + +.btn--cancel { + @extend %btn; + border: none; + background: transparent; + color: currentColor; + + > span { + background: none; + color: inherit; + } + +} + +.btn--create { + + font-size: 0.875rem; + white-space: nowrap; + padding: 0.5rem var(--gap, 1rem); + + &:hover, + > i { + color: $c-positive; + color: var(--positive, $c-positive); + } + +} + .btn--sm { height: auto; @@ -166,6 +208,7 @@ These are the styles for every interactive element that is clickable but no link border: none; color: white; font-size: 1rem; + padding: 0 0.5rem; &.active, &:hover { @@ -173,4 +216,89 @@ These are the styles for every interactive element that is clickable but no link color: var(--positive, $c-positive); } + &.shortcuts { + + bottom: 0; + left: 0; + padding: 0.5rem; + position: fixed; + + } + + &.close { + + position: absolute; + right: 1rem; + top: 1rem; + + } + + > svg { + max-height: 14px; + + path,line, rect { + fill: #fff; + } + + } + +} + +.toggle--showIncludes { + + font-size: inherit; + text-shadow: inherit; + + &:hover { + + color: #fff; + text-decoration: underline; + + } + +} + +//TABS + +.tabs-list { + + align-items: center; + display: flex; + margin: 1rem 0; + +} + +.tab { + + background: transparent; + border-bottom: 1px solid; + border-color: var(--brandMain, $c-brandMain); + cursor: pointer; + padding: $l-gap; + padding: var(--gap, $l-gap); + width: 100%; + + &:not(:first-child) { + border-left: 1px solid; + } + + &.active { + + background: var(--brandMain, $c-brandMain); + color: #fff; + + } + + span { + transition: 150ms ease-in color & transform; + } + + &:hover > span, + &:focus > span { + + display: inline-block; + transform: translate(-2px,2px); + + } + } \ No newline at end of file diff --git a/resources/sass/elements.dropdowns.scss b/resources/sass/elements.dropdowns.scss new file mode 100644 index 0000000..3c2e87f --- /dev/null +++ b/resources/sass/elements.dropdowns.scss @@ -0,0 +1,22 @@ +%dropdown { + + background: var(--brandDark, #02273C); + min-width: 10rem; + padding: calc(var(--gap, $l-gap) / 2) 0; + position: absolute; + top: 1.4rem; + z-index: 1; + +} + +%dropdownItem { + align-items: center; + background: transparent; + cursor: pointer; + display: flex; + font-weight: normal; + padding: calc(var(--gap, $l-gap) / 2) var(--gap, 1rem); + text-align: left; + text-decoration: none; + width: 100%; +} \ No newline at end of file diff --git a/resources/sass/elements.forms.scss b/resources/sass/elements.forms.scss index 1dc946e..57826ec 100644 --- a/resources/sass/elements.forms.scss +++ b/resources/sass/elements.forms.scss @@ -54,15 +54,17 @@ label { .label-hint { font-size: 0.8rem; + opacity: 0.6; } input:not([type="checkbox"]), textarea { background: transparent; - border: 1px solid white; + border: 1px dashed currentColor; color: inherit; margin: var(--gap, $l-gap) 0; padding: 1rem; + resize: none; width: 100%; } @@ -73,6 +75,13 @@ textarea { // Validation --------- // .error { + color: $c-alert; color: var(--alert, $c-alert); display: inline-block; +} + +.success { + color: $c-positive; + color: var(--positive, $c-positive); + display: inline-block; } \ No newline at end of file diff --git a/resources/sass/elements.headings.scss b/resources/sass/elements.headings.scss index 8350ef8..3d9669b 100644 --- a/resources/sass/elements.headings.scss +++ b/resources/sass/elements.headings.scss @@ -29,4 +29,11 @@ h2, weight: 400; } + + .welcome & { + + margin-top: 1rem; + + } + } \ No newline at end of file diff --git a/resources/sass/elements.tooltips.scss b/resources/sass/elements.tooltips.scss new file mode 100644 index 0000000..02ced04 --- /dev/null +++ b/resources/sass/elements.tooltips.scss @@ -0,0 +1,111 @@ +.tooltip { + display: block !important; + font-family: sans-serif; + font-size: 0.75rem; + z-index: 10000; + + .tooltip-inner { + background: black; + color: white; + border-radius: 16px; + padding: 5px 10px 4px; + } + + .tooltip-arrow { + width: 0; + height: 0; + border-style: solid; + position: absolute; + margin: 5px; + border-color: black; + z-index: 1; + } + + &[x-placement^="top"] { + margin-bottom: 5px; + + .tooltip-arrow { + border-width: 5px 5px 0 5px; + border-left-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + bottom: -5px; + left: calc(50% - 5px); + margin-top: 0; + margin-bottom: 0; + } + } + + &[x-placement^="bottom"] { + margin-top: 5px; + + .tooltip-arrow { + border-width: 0 5px 5px 5px; + border-left-color: transparent !important; + border-right-color: transparent !important; + border-top-color: transparent !important; + top: -5px; + left: calc(50% - 5px); + margin-top: 0; + margin-bottom: 0; + } + } + + &[x-placement^="right"] { + margin-left: 5px; + + .tooltip-arrow { + border-width: 5px 5px 5px 0; + border-left-color: transparent !important; + border-top-color: transparent !important; + border-bottom-color: transparent !important; + left: -5px; + top: calc(50% - 5px); + margin-left: 0; + margin-right: 0; + } + } + + &[x-placement^="left"] { + margin-right: 5px; + + .tooltip-arrow { + border-width: 5px 0 5px 5px; + border-top-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + right: -5px; + top: calc(50% - 5px); + margin-left: 0; + margin-right: 0; + } + } + + &.popover { + $color: #f9f9f9; + + .popover-inner { + background: $color; + color: black; + padding: 24px; + border-radius: 5px; + box-shadow: 0 5px 30px rgba(black, .1); + } + + .popover-arrow { + border-color: $color; + } + } + + &[aria-hidden='true'] { + visibility: hidden; + opacity: 0; + transition: opacity .15s, visibility .15s; + } + + &[aria-hidden='false'] { + visibility: visible; + opacity: 1; + transition: opacity .15s; + } +} \ No newline at end of file diff --git a/resources/sass/elements.warnings.scss b/resources/sass/elements.warnings.scss new file mode 100644 index 0000000..6885f41 --- /dev/null +++ b/resources/sass/elements.warnings.scss @@ -0,0 +1,38 @@ +//------------------- WARNINGS & MESSAGES -----------------------// + +/* +These are the styles for the feedback or warning boxes that giove the user feedback +*/ + +.warning { + + align-items: center; + background-color: var(--alert); + border-radius: 1rem; + color: #fff; + display: flex; + padding: 0.5rem 1rem; + position: relative; + text-shadow: 1px 1px 1px rgba(58,58,58,0.8); + + &-message { + + color: inherit; + margin: 0; + + } + +} + +.warning-includes { + + @extend %dropdown; + right: 0; + +} + +.warning-listItem { + + @extend %dropdownItem; + +} \ No newline at end of file diff --git a/resources/sass/generic.animations.scss b/resources/sass/generic.animations.scss index 72fb35b..6c22382 100644 --- a/resources/sass/generic.animations.scss +++ b/resources/sass/generic.animations.scss @@ -18,13 +18,13 @@ These are the only ones that are allowed. @keyframes slideIn { - 0% { + 0% { opacity: 0; transform: scaleX(0.5) ()translateX(-1000px); } - 75% { + 75% { opacity: 1; } @@ -46,17 +46,17 @@ These are the only ones that are allowed. @keyframes dropIn { - 0% { + 0% { opacity: 0; transform: scaleY(0.5) ()translateY(-1000px); } - 75% { + 75% { opacity: 1; } - 100% { + 100% { transform: scaleY(1) translateY(0px); } diff --git a/resources/sass/generic.shared.scss b/resources/sass/generic.shared.scss index 6926c29..dbd1301 100644 --- a/resources/sass/generic.shared.scss +++ b/resources/sass/generic.shared.scss @@ -68,51 +68,70 @@ containing the header and the so called view, containing most of the UI. .view--inner { // We unfortunately need this until sub-grid is usable. :/ display: grid; grid-area: main; - grid-template-columns: 1fr 1fr 1fr 1fr; - grid-template-rows: 1fr 1fr 1fr var(--headerheight); + grid-template-columns: repeat(4,1fr); + grid-template-rows: repeat(4,1fr); overflow: hidden; - @include for-phone-only { - grid-template-areas: + grid-template-areas: "code code code code" "view view view view" "view view view view" - "footer footer footer footer"; - } - - @include for-tablet-portrait-up { - grid-template-areas: - "code code code code" - "view view view view" - "view view view view" - "footer footer footer footer"; - } + "view view view view"; @include for-desktop-up { grid-template-areas: "code view view view" "code view view view" "code view view view" - ".... footer footer footer"; + "code view view view"; } } .view--inner { // We unfortunately need this until sub-grid is usable. :/ - grid-area: code / code/ footer / footer; + grid-area: code / code/ view / view; +} + +.fullscreen { + align-items: center; + display: flex; + grid-area: code / code / footer / footer; + justify-content: center; } -.footer { +.form--fullscreen { + max-width: 50rem; + width: 100%; +} + +.footer { grid-area: footer; } +// GENERIC UTILITY CLASSES + .u-hide { display: none !important; } +.u-transparent { + + opacity: 0; + pointer-events: none; + + &#usage { + position: absolute; // Can't be display none beause copy to clipboard won't work - but we want it to take no space + } + +} + +.u-center { + text-align: center; +} + .u-right { text-align: right; } diff --git a/resources/sass/settings.variables.scss b/resources/sass/settings.variables.scss index 9208fc7..b8bb88b 100644 --- a/resources/sass/settings.variables.scss +++ b/resources/sass/settings.variables.scss @@ -24,6 +24,7 @@ $l-headerheight: 66px; /* for colors*/ +$c-basicCopy: #8A8D8F; $c-brandMain: #03314B; $c-brandDark: #02273C; $c-brandCon: #FFF621; @@ -42,13 +43,14 @@ $a-timing: cubic-bezier(0.19, 1, 0.22, 1); /* for colors*/ + --basicCopy: #8A8D8F; --brandMain: #03314B; --brandDark: #02273C; --brandCon: #FFF621; --positive: #10E2AB; --alert: #FF4F4F; --warning: #FFB421; - --inactive: #B9C5C5; + --inactive: #B9C5C5; /* for layout*/ diff --git a/resources/views/preview.blade.php b/resources/views/preview.blade.php index 044156b..59e5af1 100644 --- a/resources/views/preview.blade.php +++ b/resources/views/preview.blade.php @@ -1,16 +1,21 @@ - + - + @include('workshop::resources') + + + Workshop - Preview {!! $preview !!} + + @yield('workshop.scripts') diff --git a/resources/views/resources.blade.php b/resources/views/resources.blade.php new file mode 100644 index 0000000..ea29b74 --- /dev/null +++ b/resources/views/resources.blade.php @@ -0,0 +1,10 @@ + +@inject('resources', 'Oloid\Services\ResourcesService') + +@section('workshop.head') + {!! $resources->getGlobals('head') !!} +@show + +@section('workshop.scripts') + {!! $resources->getGlobals('body') !!} +@endsection \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index b78701d..5b4d98f 100644 --- a/routes/api.php +++ b/routes/api.php @@ -27,6 +27,14 @@ */ Route::put('pattern/{pattern}', 'PatternController@update'); +/* +|-------------------------------------------------------------------------- +| DELETE /pattern/{pattern} +|-------------------------------------------------------------------------- +| Route to remove the given Pattern. +*/ +Route::delete('pattern/{pattern}', 'PatternController@remove'); + /* |-------------------------------------------------------------------------- | PUT /pattern/status/{pattern} @@ -39,10 +47,19 @@ |-------------------------------------------------------------------------- | GET /pattern/exists/{pattern} |-------------------------------------------------------------------------- -| +| Check if a Pattern with this name already exists. */ Route::get('pattern/exists/{pattern}', 'PatternController@exists'); +/* +|-------------------------------------------------------------------------- +| GET /pattern/preview/{pattern} +|-------------------------------------------------------------------------- +| Get all all information for the preview screen. +| Except the actual rendered preview, that will be loaded by an iframe. +*/ +Route::get('pattern/preview/{pattern}', 'PatternController@preview'); + /* |-------------------------------------------------------------------------- | GET /navi @@ -53,19 +70,24 @@ /* |-------------------------------------------------------------------------- -| GET /{pattern} +| GET /status-list |-------------------------------------------------------------------------- -| Get all all information for the preview screen. -| Except the actual rendered preview, that will be loaded by an iframe. +| Get a list with all Patterns grouped by their status. */ -Route::get('{pattern}', 'PatternController@preview'); +Route::get('status-list', 'StatusListController@get'); /* |-------------------------------------------------------------------------- -| DELETE /{pattern} +| GET /resources |-------------------------------------------------------------------------- -| Route to remove the given Pattern. +| Get a list of all global resources. */ -Route::delete('{pattern}', 'PatternController@remove'); - +Route::get('resources', 'ResourcesController@get'); +/* +|-------------------------------------------------------------------------- +| POST /resources +|-------------------------------------------------------------------------- +| Add a new global dependency. +*/ +Route::post('resources', 'ResourcesController@store'); \ No newline at end of file diff --git a/src/Console/Commands/CleanCommand.php b/src/Console/Commands/CleanCommand.php index 5583a41..c6f2a69 100644 --- a/src/Console/Commands/CleanCommand.php +++ b/src/Console/Commands/CleanCommand.php @@ -1,6 +1,6 @@ comment('Publishing Laratomics Workshop Assets...'); + $this->comment('Publishing Workshop Assets...'); $this->callSilent('vendor:publish', ['--tag' => 'workshop-assets']); - $this->comment('Publishing Laratomics Workshop Configuration...'); + $this->comment('Publishing Workshop Configuration...'); $this->callSilent('vendor:publish', ['--tag' => 'workshop-config']); if ($this->configurationService->registerViewResources(config_path('view.php'))) { $this->comment('Extra view resources configuration have been added in the project\'s view.php'); } - $this->info('Laratomics Workshop installed successfully.'); + $this->comment('Creating pattern path...'); + File::makeDirectory(config('workshop.patternPath'), 0755, true); + + $this->info('Workshop installed successfully.'); return 0; } diff --git a/src/Console/Commands/ReconfigureCommand.php b/src/Console/Commands/ReconfigureCommand.php index 0153238..f9eb719 100644 --- a/src/Console/Commands/ReconfigureCommand.php +++ b/src/Console/Commands/ReconfigureCommand.php @@ -1,9 +1,10 @@ configurationService->registerViewResources(config_path('view.php'))) { $path = config('workshop.basePath'); $this->comment("Reset extra view path to {$path}."); + + $this->comment('Creating new pattern path...'); + File::makeDirectory(config('workshop.patternPath'), 0755, true); + return 0; } diff --git a/src/Exceptions/FileNotFoundException.php b/src/Exceptions/FileNotFoundException.php index 4df2f1c..93c67f4 100644 --- a/src/Exceptions/FileNotFoundException.php +++ b/src/Exceptions/FileNotFoundException.php @@ -1,6 +1,6 @@ patternService->loadPattern($pattern); + $patternInstance = $this->patternService->loadPatternWithPreview($pattern); } catch (FileNotFoundException $exception) { return JsonResponse::create([], JsonResponse::HTTP_NOT_FOUND); } @@ -66,11 +64,10 @@ public function preview(string $pattern): JsonResponse * @param string $pattern * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View * @throws FileNotFoundException - * @throws RenderingException */ public function getPreview(string $pattern) { - $pattern = $this->patternService->loadPattern($pattern); + $pattern = $this->patternService->loadPatternWithPreview($pattern); return view('workshop::preview', [ 'preview' => $pattern->html ]); @@ -81,7 +78,6 @@ public function getPreview(string $pattern) * * @param string $pattern * @return JsonResponse - * @throws FileNotFoundException */ public function remove(string $pattern): JsonResponse { diff --git a/src/Http/Controllers/ResourcesController.php b/src/Http/Controllers/ResourcesController.php new file mode 100644 index 0000000..ab0e455 --- /dev/null +++ b/src/Http/Controllers/ResourcesController.php @@ -0,0 +1,52 @@ +resourcesService = $resourcesService; + } + + /** + * Get all global resources. + * + * @return JsonResponse + */ + public function get() + { + return JsonResponse::create([ + 'data' => $this->resourcesService->getAll() + ]); + } + + /** + * Store a new global resource. + * + * @param GlobalResource $request + * @return JsonResponse + */ + public function store(GlobalResource $request) + { + $headResource = $request->get('head') ?: ''; + $bodyResource = $request->get('body') ?: ''; + $this->resourcesService->store($headResource, $bodyResource); + + return JsonResponse::create([], JsonResponse::HTTP_CREATED); + } +} diff --git a/src/Http/Controllers/StatusListController.php b/src/Http/Controllers/StatusListController.php new file mode 100644 index 0000000..2fe3951 --- /dev/null +++ b/src/Http/Controllers/StatusListController.php @@ -0,0 +1,40 @@ +allFiles(pattern_path()); + + $statusList = [ + 'todo' => [], + 'review' => [], + 'rejected' => [], + 'done' => [] + ]; + + foreach ($files as $file) { + if (ends_with($file, '.md')) { + $patternName = dotted_path(str_before($file->getRelativePathname(), '.md')); + $yaml = YamlFrontMatter::parseFile($file); + $statusList[$yaml->matter('status')][] = $patternName; + } + } + + return JsonResponse::create([ + 'data' => $statusList + ]); + } +} diff --git a/src/Http/Requests/CreatePattern.php b/src/Http/Requests/CreatePattern.php index 1838350..960de47 100644 --- a/src/Http/Requests/CreatePattern.php +++ b/src/Http/Requests/CreatePattern.php @@ -1,9 +1,9 @@ 'present', + 'body' => 'present' + ]; + } +} diff --git a/src/Http/Requests/UpdatePattern.php b/src/Http/Requests/UpdatePattern.php index ec337ad..9176136 100644 --- a/src/Http/Requests/UpdatePattern.php +++ b/src/Http/Requests/UpdatePattern.php @@ -1,9 +1,9 @@ [ 'name' => $this->name, @@ -23,28 +29,53 @@ public function toArray($request) 'usage' => $this->getUsage(), 'template' => $this->template, 'html' => $this->html, - 'sass' => $this->sass + 'sass' => $this->sass, + 'values' => $this->values, + 'subPatterns' => $patternStatusService->getPatterns() ] ]; } /** - * Get the Pattern's type. + * Generate the usage string. * - * @return bool|string + * @return string */ - private function getType() - { - $explode = explode('.', $this->name); - return $type = substr(array_first($explode), 0, -1); - } - private function getUsage() { $explode = explode('.', $this->name); array_shift($explode); - return implode('.', $explode); + $name = implode('.', $explode); + $type = $this->getType(); + + $valuesString = $this->getValuesAsString($this->metadata->values); + + return "@{$type}('{$name}', {$valuesString})"; } + /** + * Convert the metadata values to an array string representation. + * + * @return string + */ + private function getValuesAsString($values): string + { + $argsString = '['; + $args = []; + + if (is_array($values)) { + foreach ($values as $key => $value) { + if (is_array($value)) { + $value = $this->getValuesAsString($value); + $args[] = "'{$key}' => {$value}"; + } else { + $args[] = "'{$key}' => '{$value}'"; + } + } + } + $argsString .= implode(', ', $args); + $argsString .= ']'; + return $argsString; + } } diff --git a/src/Models/Pattern.php b/src/Models/Pattern.php index 0156b10..b77320f 100644 --- a/src/Models/Pattern.php +++ b/src/Models/Pattern.php @@ -1,6 +1,6 @@ name); + return $type = array_first($explode); + } + + /** + * Get the Pattern's name without the first part, that represents the Pattern's type. + * + * @return string + */ + public function getNameWithoutType() + { + $explode = explode('.', $this->name); + $type = array_shift($explode); + return implode('.', $explode); + } } diff --git a/src/Providers/PatternServiceProvider.php b/src/Providers/PatternServiceProvider.php index 8edc433..9f7eafb 100644 --- a/src/Providers/PatternServiceProvider.php +++ b/src/Providers/PatternServiceProvider.php @@ -1,21 +1,17 @@ 'atoms', - 'molecule' => 'molecules', - 'organism' => 'organisms', - 'template' => 'templates', - 'page' => 'pages', - 'element' => '', - ]; - /** * Bootstrap services. * @@ -23,49 +19,59 @@ class PatternServiceProvider extends ServiceProvider */ public function boot() { - foreach ($this->components as $component => $path) { - Blade::directive($component, function ($expression) use ($path) { - $extExpression = $this->parse($expression, $path); - return "render() ?>"; - }); + $this->app->singleton(PatternStatusService::class, function ($app) { + return new PatternStatusService(); + }); + + $components = $this->getComponents(); + foreach ($components as $component => $path) { + Blade::directive($component, $this->directiveResolution($path)); + } + } + + /** + * Get available components for registering custom directives. + * + * @return array + */ + private function getComponents(): array + { + $fs = new Filesystem(); + + if (!$fs->exists(pattern_path())) { + return []; } -// Blade::directive('atom', function ($expression) { -// $extExpression = $this->parse($expression, 'atoms'); -/* return "render() ?>";*/ -// }); -// -// Blade::directive('molecule', function ($expression) { -// $extExpression = $this->parse($expression, 'molecules'); -/* return "render() ?>";*/ -// }); -// -// Blade::directive('organism', function ($expression) { -// $extExpression = $this->parse($expression, 'molecules'); -/* return "render() ?>";*/ -// }); -// -// Blade::directive('template', function ($expression) { -// $extExpression = $this->parse($expression, 'templates'); -/* return "render() ?>";*/ -// }); -// -// Blade::directive('page', function ($expression) { -// $extExpression = $this->parse($expression, 'pages'); -/* return "render() ?>";*/ -// }); -// -// Blade::directive('element', function ($expression) { -// $extExpression = $this->parse($expression); -/* return "render() ?>";*/ -// }); + + $directories = $fs->directories(pattern_path()); + $components = []; + foreach ($directories as $directory) { + if (dir_contains_any($directory, 'blade.php')) { + $componentParts = explode('/', $directory); + $component = array_pop($componentParts); + $components[$component] = $component; + } + } + + $files = File::files(pattern_path()); + if (is_array($files)) { + foreach ($files as $file) { + if (ends_with($file->getRelativePathname(), '.blade.php')) { + $component = str_before($file->getRelativePathname(), '.blade.php'); + $components[$component] = $component; + } + } + } + + return $components; } /** * Parse an expression. * * @param $expression - * @param $path + * @param string $path * @return string + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException */ private function parse($expression, $path = ''): string { @@ -75,33 +81,15 @@ private function parse($expression, $path = ''): string $prefix = array_pop($parts); $extComponent = "{$prefix}.{$path}.{$strippedComponent}"; - $extExpression = str_replace($strippedComponent, "{$extComponent}", $expression); + $extExpression = str_replace_first($strippedComponent, "{$extComponent}", $expression); + + $pattern = empty($strippedComponent) ? $path : "{$path}.{$strippedComponent}"; + + $this->evaluatePatternStatus($pattern); + return $extExpression; } -// /** -// * Parse a link expression. -// * -// * @param $expression -// * @return array -// */ -// private function parseLink($expression) -// { -// $parsed = []; -// preg_match('/{(.*)\|(.*)}/', $expression, $parsed); -// return $this->withoutFirst($parsed); -// } -// -// /** -// * @param $parsed -// * @return array -// */ -// private function withoutFirst($parsed): array -// { -// unset($parsed[0]); -// return array_values($parsed); -// } - /** * Register services. * @@ -111,4 +99,35 @@ public function register() { // } + + /** + * Generate the Closure for the directive. + * + * @param $path + * @return Closure + */ + public function directiveResolution($path): Closure + { + return function ($expression) use ($path) { + $extExpression = '\'patterns.' . $path . '\''; + if (explode(',', $expression)[0] !== "''") { + $extExpression = $this->parse($expression, $path); + } + return "render() ?>"; + }; + } + + /** + * Evaluate the Patter's status that is defined in the Pattern's markdown file. + * + * @param string $pattern + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + */ + private function evaluatePatternStatus(string $pattern) + { + $patternService = $this->app->make(PatternService::class); + $patternStatusService = $this->app->make(PatternStatusService::class); + $pattern = $patternService->loadPattern($pattern); + $patternStatusService->evaluate($pattern); + } } \ No newline at end of file diff --git a/src/Rules/UniquePattern.php b/src/Rules/UniquePattern.php index fe6a800..a7cce01 100644 --- a/src/Rules/UniquePattern.php +++ b/src/Rules/UniquePattern.php @@ -1,6 +1,6 @@ name = $name; @@ -166,16 +165,29 @@ public function loadPattern($name, $values = []): Pattern * Load Pattern content */ $pattern->template = $this->loadBladeFile($name); - $markdown = $this->loadMarkdownFile($name); - $pattern->markdown = $markdown; - $pattern->metadata = YamlFrontMatter::parse($markdown); + $pattern->markdown = $this->loadMarkdownFile($name); + $pattern->metadata = YamlFrontMatter::parse($pattern->markdown); + $pattern->status = $pattern->metadata->status; $pattern->sass = $this->loadSassFile($name); + return $pattern; + } + + /** + * @param $name + * @param array $values + * @return Pattern + * @throws FileNotFoundException + */ + public function loadPatternWithPreview($name, $values = []) + { + $pattern = $this->loadPattern($name); + /* * Create the preview */ - $values = !is_null($pattern->metadata->values) ? $pattern->metadata->values : array_merge($values, []); - $pattern->html = compile_blade_string($pattern->template, $values); + $pattern->values = !is_null($pattern->metadata->values) ? $pattern->metadata->values : array_merge($values, []); + $pattern->html = compile_blade_string($pattern); return $pattern; } @@ -399,6 +411,61 @@ public function rename(string $currentName, $newName): Pattern $this->removeSassImport($oldPattern); - return $this->loadPattern($newName); + $newPattern = $this->loadPattern($newName); + $this->updatePatternReferences($oldPattern, $newPattern); + + return $newPattern; + } + + /** + * Update the reference of the Pattern in other Patterns and view files. + * + * @param Pattern $oldPattern + * @param Pattern $newPattern + */ + private function updatePatternReferences(Pattern $oldPattern, Pattern $newPattern) + { + $patternFiles = File::allFiles(pattern_path()); + $viewFiles = File::allFiles(resource_path('views')); + $files = array_merge($patternFiles, $viewFiles); + + /* + * Get all the templates + */ + $templates = []; + foreach ($files as $file) { + if (ends_with($file->getRelativePathname(), 'blade.php')) { + $templates[] = $file; + } + } + + /* + * Replace reference in template files + */ + /** @var SplFileInfo $template */ + foreach ($templates as $template) { + $content = $template->getContents(); + + /* + * Search and replace directive reference + */ + $search = "/@{$oldPattern->getType()}\('{$oldPattern->getNameWithoutType()}'/"; + $replacement = "@{$newPattern->getType()}('{$newPattern->getNameWithoutType()}'"; + $newContent = preg_replace($search, $replacement, $content); + + /* + * Search and replace include reference + */ + $search = "/@include\('patterns.{$oldPattern->name}'/"; + $replacement = "@include('patterns.{$newPattern->name}'"; + $newContent = preg_replace($search, $replacement, $newContent); + + /* + * Save contents back to file + */ + if ($content !== $newContent && !is_null($newContent)) { + File::put($template->getPathname(), $newContent); + } + } } } \ No newline at end of file diff --git a/src/Services/PatternStatusService.php b/src/Services/PatternStatusService.php new file mode 100644 index 0000000..32bb20a --- /dev/null +++ b/src/Services/PatternStatusService.php @@ -0,0 +1,59 @@ + [], + 'review' => [], + 'rejected' => [], + 'done' => [] + ]; + + /** + * Get the Patterns by status. + * + * @return array + */ + public function getPatterns(): array + { + return $this->patterns; + } + + /** + * Evaluate the Pattern's status. Only add the Pattern to the appropriate status once. + * + * @param Pattern $pattern + */ + public function evaluate(Pattern $pattern) + { + if (!in_array($pattern->name, $this->patterns[$pattern->status])) { + $this->patterns[$pattern->status][] = $pattern->name; + } + + /* + * If the pattern has not been evaluated yet, trigger a fresh compilation of the pattern's + * template in order to evaluate nested patterns, too. + */ + if (!in_array($pattern->name, $this->evaluatedPatterns)) { + $this->evaluatedPatterns[] = $pattern->name; + Blade::compileString($pattern->template); + } + } +} \ No newline at end of file diff --git a/src/Services/ResourcesService.php b/src/Services/ResourcesService.php new file mode 100644 index 0000000..5f6816b --- /dev/null +++ b/src/Services/ResourcesService.php @@ -0,0 +1,79 @@ + '', + 'body' => '' + ]; + + /** + * GlobalsService constructor. + */ + public function __construct() + { + $this->globalsPath = config('workshop.basePath') . '/' . config('workshop.resourcesFile'); + $this->loadGlobals(); + } + + /** + * Get the defined globals. + * + * @param string $name + * @return string + */ + public function getGlobals(string $name): string + { + return $this->globals[$name]; + } + + /** + * Load the globals. + */ + public function loadGlobals() + { + if (File::exists($this->globalsPath)) { + $json = File::get($this->globalsPath); + $this->globals = json_decode($json, true); + } + } + + /** + * Get all global resources. + * @return array + */ + public function getAll() + { + return $this->globals; + } + + /** + * Add a new global resources. + * + * @param string $headResources + * @param string $bodyResources + */ + public function store(string $headResources, string $bodyResources) + { + $this->globals['head'] = $headResources; + $this->globals['body'] = $bodyResources; + + File::put($this->globalsPath, json_encode($this->globals)); + } +} \ No newline at end of file diff --git a/src/WorkshopServiceProvider.php b/src/WorkshopServiceProvider.php index 43dc5f5..beea1f7 100644 --- a/src/WorkshopServiceProvider.php +++ b/src/WorkshopServiceProvider.php @@ -1,12 +1,12 @@ 'Laratomics\Http\Controllers', + 'namespace' => 'Oloid\Http\Controllers', 'prefix' => config('workshop.uri') ]; } @@ -51,7 +51,7 @@ private function webRouteConfiguration() private function apiRouteConfiguration() { return [ - 'namespace' => 'Laratomics\Http\Controllers', + 'namespace' => 'Oloid\Http\Controllers', 'prefix' => config('workshop.uri') . '/api/v1' ]; } @@ -104,7 +104,7 @@ private function publishFiles() * Publish views */ $this->publishes([ - __DIR__.'/../resources/views' => resource_path('views/vendor/workshop'), + __DIR__ . '/../resources/views' => resource_path('views/vendor/workshop'), ], 'workshop-views'); /* diff --git a/src/helpers.php b/src/helpers.php index ad705f4..1b87984 100644 --- a/src/helpers.php +++ b/src/helpers.php @@ -2,41 +2,27 @@ use Illuminate\Filesystem\Filesystem; -use Laratomics\Exceptions\RenderingException; +use Oloid\Models\Pattern; if (!function_exists('compile_blade_string')) { /** - * Compiles a string containing Blade content to shippable HTML. + * Compiles a Pattern's Blade template content to shippable HTML. * - * @param $value - * @param array $args + * @param Pattern $pattern * @return false|string - * @throws RenderingException */ - function compile_blade_string($value, array $args = array()): string + function compile_blade_string(Pattern $pattern): string { - $generated = Blade::compileString($value); - - ob_start() and extract($args, EXTR_SKIP); - - // We'll include the view contents for parsing within a catcher - // so we can avoid any WSOD errors. If an exception occurs we - // will throw it out to the exception handler. - try { - eval('?>' . $generated); - } - - // If we caught an exception, we'll silently flush the output - // buffer so that no partially rendered views get thrown out - // to the client and confuse the user with junk. - catch (Exception $e) { - ob_get_clean(); - throw new RenderingException('Preview rendering failed', 0, $e); - } - - $content = ob_get_clean(); - - return $content; + /* + * Trigger a fresh compilation of the pattern's template. + */ + Blade::compileString($pattern->template); + + /* + * Compile the view using the default Laravel View. + */ + $path = "patterns.{$pattern->name}"; + return view($path, $pattern->values); } } diff --git a/tests/BaseTestCase.php b/tests/BaseTestCase.php index 84b4753..99de937 100644 --- a/tests/BaseTestCase.php +++ b/tests/BaseTestCase.php @@ -1,11 +1,11 @@ getJson('workshop/api/v1/atoms.text.headline1'); + $response = $this->getJson('workshop/api/v1/pattern/preview/atoms.text.headline1'); // assert $expected = [ 'data' => [ 'name' => 'atoms.text.headline1', - 'type' => 'atom', + 'type' => 'atoms', 'description' => 'Our h1 for testing', - 'status' => 'TODO', - 'usage' => 'text.headline1', + 'status' => 'review', + 'usage' => '@atoms(\'text.headline1\', [\'text\' => \'Testing\'])', 'template' => "

    {{ \$text }}

    ", 'html' => "

    Testing

    ", 'sass' => "h1 {\n color: red;\n}", @@ -121,13 +121,13 @@ public function it_should_load_all_pattern_information() /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_return_404_if_a_pattern_does_not_exist() { // act /** @var TestResponse $response */ - $response = $this->getJson('workshop/api/v1/atoms.not.existing'); + $response = $this->getJson('workshop/api/v1/pattern/preview/atoms.not.existing'); // assert $response->assertStatus(404); @@ -135,7 +135,7 @@ public function it_should_return_404_if_a_pattern_does_not_exist() /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_get_a_html_preview_of_a_pattern() { @@ -155,7 +155,7 @@ public function it_should_get_a_html_preview_of_a_pattern() /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_remove_a_pattern() { @@ -164,7 +164,7 @@ public function it_should_remove_a_pattern() // act /** @var TestResponse $response */ - $response = $this->deleteJson('workshop/api/v1/atoms.text.headline1'); + $response = $this->deleteJson('workshop/api/v1/pattern/atoms.text.headline1'); // assert $response->assertSuccessful(); @@ -172,7 +172,7 @@ public function it_should_remove_a_pattern() /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_get_404_error_if_nonexistend_pattern_is_deleted() { @@ -180,7 +180,7 @@ public function it_should_get_404_error_if_nonexistend_pattern_is_deleted() // act /** @var TestResponse $response */ - $response = $this->deleteJson('workshop/api/v1/not.existing.pattern'); + $response = $this->deleteJson('workshop/api/v1/pattern/not.existing.pattern'); // assert $response->assertStatus(JsonResponse::HTTP_NOT_FOUND); @@ -188,7 +188,7 @@ public function it_should_get_404_error_if_nonexistend_pattern_is_deleted() /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_update_the_status_of_a_pattern() { @@ -209,7 +209,7 @@ public function it_should_update_the_status_of_a_pattern() /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_change_the_description_of_a_pattern() { @@ -236,7 +236,7 @@ public function it_should_change_the_description_of_a_pattern() /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_not_change_the_description_if_request_input_is_missing() { @@ -263,7 +263,7 @@ public function it_should_not_change_the_description_if_request_input_is_missing /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_not_rename_a_pattern_if_name_already_exists() { @@ -284,7 +284,7 @@ public function it_should_not_rename_a_pattern_if_name_already_exists() /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_check_that_a_pattern_exists() { @@ -307,7 +307,7 @@ public function it_should_check_that_a_pattern_exists() /** * @test - * @covers \Laratomics\Http\Controllers\PatternController + * @covers \Oloid\Http\Controllers\PatternController */ public function it_should_check_that_a_pattern_does_not_exists() { diff --git a/tests/Integration/Http/Controllers/ResourcesControllerTest.php b/tests/Integration/Http/Controllers/ResourcesControllerTest.php new file mode 100644 index 0000000..243a8a0 --- /dev/null +++ b/tests/Integration/Http/Controllers/ResourcesControllerTest.php @@ -0,0 +1,103 @@ +getJson("workshop/api/v1/resources"); + + // assert + $response->assertSuccessful(); + $expectedJson = [ + 'data' => [ + 'head' => '', + 'body' => '', + ] + ]; + $response->assertJson($expectedJson); + } + + /** + * @test + * @covers \Oloid\Http\Controllers\ResourcesController + */ + public function it_should_return_global_dependencies() + { + // arrange + $this->prepareResourcesStub(); + + /** @var TestResponse $response */ + $response = $this->getJson("workshop/api/v1/resources"); + + // assert + $response->assertSuccessful(); + $expectedJson = [ + 'data' => [ + 'head' => '', + 'body' => '' + ] + ]; + $response->assertJson($expectedJson); + } + + /** + * @test + * @covers \Oloid\Http\Controllers\ResourcesController + */ + public function it_should_add_a_global_dependency() + { + $dependencyPath = "{$this->tempDir}/resources.json"; + $this->assertFalse(File::exists($dependencyPath)); + + // act + $response = $this->postJson('workshop/api/v1/resources', [ + 'head' => '', + 'body' => '' + ]); + + // assert + $response->assertStatus(Response::HTTP_CREATED); + $this->assertTrue(File::exists($dependencyPath)); + + $dependencies = File::get($dependencyPath); + $expectedDependencies = [ + 'head' => '', + 'body' => '', + ]; + $this->assertEquals($expectedDependencies, json_decode($dependencies, true)); + } + + /** + * @test + * @covers \Oloid\Http\Controllers\ResourcesController + */ + public function it_should_throw_validation_exception_on_missing_fields() + { + // arrange + + // act + $response = $this->postJson('workshop/api/v1/resources', [ + 'head' => 'https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css' + ]); + + // assert + $response->assertStatus(Response::HTTP_UNPROCESSABLE_ENTITY); + } +} diff --git a/tests/Integration/Http/Controllers/StatusListControllerTest.php b/tests/Integration/Http/Controllers/StatusListControllerTest.php new file mode 100644 index 0000000..6dba557 --- /dev/null +++ b/tests/Integration/Http/Controllers/StatusListControllerTest.php @@ -0,0 +1,37 @@ +preparePatternStub(); + + /** @var TestResponse $response */ + $response = $this->getJson("workshop/api/v1/status-list"); + + // assert + $response->assertSuccessful(); + $expectedJson = [ + 'data' => [ + 'todo' => ['atoms.buttons.button'], + 'review' => ['atoms.text.headline1'], + 'rejected' => ['atoms.text.headline2'], + 'done' => ['homepage'] + ] + ]; + $response->assertJson($expectedJson); + } +} diff --git a/tests/Integration/Http/Resources/PatternResourceTest.php b/tests/Integration/Http/Resources/PatternResourceTest.php index 02470a9..0622cab 100644 --- a/tests/Integration/Http/Resources/PatternResourceTest.php +++ b/tests/Integration/Http/Resources/PatternResourceTest.php @@ -1,12 +1,12 @@ template = '

    {{ $text }}

    '; $pattern->html = '

    Heading 1

    '; $pattern->sass = 'h1 { color: red; }'; + $pattern->values = [ + 'title' => 'Testing', + 'todos' => ['a', 'b', 'c'] + ]; /* * Metadata Mock @@ -38,26 +42,44 @@ protected function setUp() ->andReturn('This is a test description') ->getMock(); $pattern->metadata->status = 'TODO'; + $pattern->metadata->values = [ + 'title' => 'Testing', + 'todos' => [ + 'a', + 'b', + 'c' + ] + ]; $this->cut = new PatternResource($pattern); } /** * @test - * @covers \Laratomics\Http\Resources\PatternResource + * @covers \Oloid\Http\Resources\PatternResource */ public function it_should_respond_with_pattern_representation_as_array() { $expected = [ 'data' => [ 'name' => 'atoms.test.element', - 'type' => 'atom', + 'type' => 'atoms', 'description' => 'This is a test description', 'status' => 'TODO', - 'usage' => 'test.element', + 'usage' => '@atoms(\'test.element\', [\'title\' => \'Testing\', \'todos\' => [\'0\' => \'a\', \'1\' => \'b\', \'2\' => \'c\']])', 'template' => '

    {{ $text }}

    ', 'html' => '

    Heading 1

    ', - 'sass' => 'h1 { color: red; }' + 'sass' => 'h1 { color: red; }', + 'values' => [ + 'title' => 'Testing', + 'todos' => ['a', 'b', 'c'] + ], + 'subPatterns' => [ + 'todo' => [], + 'review' => [], + 'rejected' => [], + 'done' => [] + ] ] ]; $result = $this->cut->toArray($this->pattern); diff --git a/tests/Integration/Providers/PatternServiceProviderTest.php b/tests/Integration/Providers/PatternServiceProviderTest.php index 55ef522..efd0fdc 100644 --- a/tests/Integration/Providers/PatternServiceProviderTest.php +++ b/tests/Integration/Providers/PatternServiceProviderTest.php @@ -1,9 +1,12 @@ preparePatternStub(); // act + /** @var TestResponse $response */ $response = $this->get("/workshop/testing/include"); // assert @@ -29,7 +33,7 @@ public function it_should_use_a_pattern_with_include() /** * @test - * @covers \Laratomics\Providers\PatternServiceProvider + * @covers \Oloid\Providers\PatternServiceProvider */ public function it_should_use_a_pattern_with_atom() { @@ -37,6 +41,7 @@ public function it_should_use_a_pattern_with_atom() $this->preparePatternStub(); // act + /** @var TestResponse $response */ $response = $this->get("/workshop/testing/atom"); // assert @@ -45,4 +50,57 @@ public function it_should_use_a_pattern_with_atom() $response->assertSee('ATOM'); } + /** + * @test + * @covers \Oloid\Providers\PatternServiceProvider + */ + public function it_should_register_component_directives() + { + // arrange + $this->preparePatternStub(); + + // act + $patternServiceProvider = new PatternServiceProvider(app()); + $patternServiceProvider->boot(); + + // assert + $this->assertCount(2, Blade::getCustomDirectives()); + } + + /** + * @test + * @covers \Oloid\Providers\PatternServiceProvider + */ + public function it_should_not_register_component_directives() + { + // arrange + + // act + $patternServiceProvider = new PatternServiceProvider(app()); + $patternServiceProvider->boot(); + + // assert + $this->assertCount(0, Blade::getCustomDirectives()); + } + + /** + * @test + * @covers \Oloid\Providers\PatternServiceProvider + */ + public function it_should_return_the_callable_handler_for_blade_directive() + { + // arrange + $this->preparePatternStub(); + $patternServiceProvider = new PatternServiceProvider(app()); + $closure = $patternServiceProvider->directiveResolution('atoms'); + $expected = " 'Heading 1'], array_except(get_defined_vars(), array('__data', '__path')))->render() ?>"; + + // act + $parsed = $closure->call($patternServiceProvider, "'text.headline1', ['text' => 'Heading 1']"); + + // assert + $this->assertTrue(is_callable($closure)); + $this->assertEquals($expected, $parsed); + + } } diff --git a/tests/Stubs/patterns/atoms/buttons/button.md b/tests/Stubs/patterns/atoms/buttons/button.md index d8686f6..5c7839d 100644 --- a/tests/Stubs/patterns/atoms/buttons/button.md +++ b/tests/Stubs/patterns/atoms/buttons/button.md @@ -1,5 +1,5 @@ --- -status: TODO +status: todo values: text: Click --- diff --git a/tests/Stubs/patterns/atoms/text/headline1.md b/tests/Stubs/patterns/atoms/text/headline1.md index 42ba166..7926169 100644 --- a/tests/Stubs/patterns/atoms/text/headline1.md +++ b/tests/Stubs/patterns/atoms/text/headline1.md @@ -1,5 +1,5 @@ --- -status: TODO +status: review values: text: Testing --- diff --git a/tests/Stubs/patterns/atoms/text/headline2.md b/tests/Stubs/patterns/atoms/text/headline2.md index 4ba1632..affb832 100644 --- a/tests/Stubs/patterns/atoms/text/headline2.md +++ b/tests/Stubs/patterns/atoms/text/headline2.md @@ -1,5 +1,5 @@ --- -status: TODO +status: rejected values: text: Testing --- diff --git a/tests/Stubs/patterns/homepage.blade.php b/tests/Stubs/patterns/homepage.blade.php index e69de29..36d850e 100644 --- a/tests/Stubs/patterns/homepage.blade.php +++ b/tests/Stubs/patterns/homepage.blade.php @@ -0,0 +1,2 @@ +@atoms('buttons.button', ['text' => 'Submit']) +@include('patterns.atoms.buttons.button', ['text' => 'Submit']) \ No newline at end of file diff --git a/tests/Stubs/patterns/homepage.md b/tests/Stubs/patterns/homepage.md index e04e34d..07c7221 100644 --- a/tests/Stubs/patterns/homepage.md +++ b/tests/Stubs/patterns/homepage.md @@ -1,5 +1,5 @@ --- -status: TODO +status: done values: --- The homepage \ No newline at end of file diff --git a/tests/Stubs/resources.json b/tests/Stubs/resources.json new file mode 100644 index 0000000..8ce41a6 --- /dev/null +++ b/tests/Stubs/resources.json @@ -0,0 +1,4 @@ +{ + "head": "', + $globalsService->getGlobals('head')); + + $this->assertEquals('', $globalsService->getGlobals('body')); + } + + /** + * @test + * @covers \Oloid\Services\ResourcesService + */ + public function it_should_return_all_global_dependencies() + { + // arrange + $this->prepareResourcesStub(); + $expected = [ + 'head' => '', + 'body' => '' + ]; + + // act + $this->cut = new ResourcesService(); + $this->assertEquals($expected, $this->cut->getAll()); + } + + /** + * @test + * @covers \Oloid\Services\ResourcesService + */ + public function it_should_add_a_head_and_a_body_dependency() + { + $dependencyPath = "{$this->tempDir}/resources.json"; + $this->assertFalse(File::exists($dependencyPath)); + + // act + $this->cut->store('', + ''); + + // assert + $this->assertTrue(File::exists($dependencyPath)); + + $dependencies = File::get($dependencyPath); + $expectedDependencies = [ + 'head' => '', + 'body' => '' + ]; + $this->assertEquals($expectedDependencies, json_decode($dependencies, true)); + } +} diff --git a/tests/Unit/SetupTest.php b/tests/Unit/SetupTest.php index 6945b51..fa2c27b 100644 --- a/tests/Unit/SetupTest.php +++ b/tests/Unit/SetupTest.php @@ -1,9 +1,9 @@