diff --git a/.env.example b/.env.example index 2aabd176..d4954f09 100644 --- a/.env.example +++ b/.env.example @@ -30,4 +30,10 @@ MAIL_USERNAME= MAIL_PASSWORD= MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS= -MAIL_FROM_NAME="${APP_NAME}" \ No newline at end of file +MAIL_FROM_NAME="${APP_NAME}" + +LDC_STATUS_CHECKER_API_KEY="MY_KEY" +LDC_STATUS_CHECKER_UUID="UUID_PROJECT" +LDC_WEB_API_KEY="MY_KEY" + +GOOGLE_MAPS_KEY= \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9e16ba7f..bd99c90d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /node_modules /public/hot /public/storage +/public/build /storage/*.key /vendor .env @@ -12,4 +13,5 @@ Homestead.yaml npm-debug.log yarn-error.log /.idea -/.vscode \ No newline at end of file +/.vscode +auth.json \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e0d2ee2b..698ffbf4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,11 @@ stages: - Security - CodingStandards - - Builds + - DepBuildsTests + - DepBuilds + - Build + - Deploy + - Clean composer-security: stage: Security @@ -15,6 +19,9 @@ composer-security: - composer-security-checker-report.json allow_failure: true needs: [] + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == "develop" npm-security: stage: Security @@ -30,6 +37,9 @@ npm-security: - npm-security-checker-report.json allow_failure: true needs: [] + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == "develop" phpcs: stage: CodingStandards @@ -37,9 +47,6 @@ phpcs: before_script: - composer config gitlab-token.gitlab.com $CI_DEPLOY_USER $CI_DEPLOY_PASSWORD - composer install - cache: - paths: - - vendor/ script: - vendor/bin/phpcs --report=junit --report-file=phpcs-report.xml artifacts: @@ -53,15 +60,18 @@ phpcs: needs: - composer-security - npm-security + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == "develop" -front-build: - stage: Builds +front-build-test: + stage: DepBuildsTests image: node:17.9.1 - before_script: - - npm install cache: paths: - node_modules/ + before_script: + - npm install script: - npm run prod > front-build-report.json artifacts: @@ -71,4 +81,210 @@ front-build: - front-build-report.json allow_failure: false needs: - - phpcs \ No newline at end of file + - phpcs + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == "develop" + +front-build: + stage: DepBuilds + image: node:17.9.1 + before_script: + - npm install + cache: + paths: + - public/build/ + script: + - npm run prod + artifacts: + expose_as: 'front-build' + paths: + - public/build + allow_failure: false + needs: + - front-build-test + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == "develop" + +composer-build: + stage: DepBuilds + image: $CI_REGISTRY/service-web-lab/ldc-web-images-docker/ldcweb-qa:php8.1-1.0 + before_script: + - composer config gitlab-token.gitlab.com $CI_DEPLOY_USER $CI_DEPLOY_PASSWORD + cache: + paths: + - vendor/ + script: + - composer install --no-dev --optimize-autoloader --classmap-authoritative + artifacts: + expose_as: 'vendor' + paths: + - vendor + allow_failure: false + needs: + - phpcs + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_COMMIT_BRANCH == "develop" + +build-develop: + stage: Build + image: docker:20.10.16 + services: + - name: docker:20.10.16-dind + alias: docker + variables: + IMAGE_TAG: $CI_REGISTRY_IMAGE/develop:$CI_COMMIT_SHORT_SHA + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker build --tag $IMAGE_TAG . + - docker push $IMAGE_TAG + allow_failure: false + dependencies: + - front-build + - composer-build + needs: + - front-build + - composer-build + rules: + - if: $CI_COMMIT_BRANCH == "develop" + +deploy-develop: + stage: Deploy + image: debian:latest + before_script: + - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' + - eval $(ssh-agent -s) + - echo "$DEVELOP_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - ssh-keyscan $DEVELOP_IPADDRESS >> ~/.ssh/known_hosts + - chmod 644 ~/.ssh/known_hosts + variables: + DEST_FOLDER: Run/$CI_PROJECT_NAME/develop + IMAGE_TAG: $CI_REGISTRY_IMAGE/develop:$CI_COMMIT_SHORT_SHA + script: + - ssh $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS "mkdir -p $DEST_FOLDER" + - scp .env.example $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS:$DEST_FOLDER + - scp dev-docker-compose.yml $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS:$DEST_FOLDER + - ssh $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS "sh Admin/Scripts/Deploy.sh $CI_PROJECT_NAME develop $IMAGE_TAG $DBPRODNAME" + environment: + name: develop + url: https://$CI_PROJECT_NAME-develop.s-web.loc + on_stop: stop-develop + needs: + - build-develop + rules: + - if: $CI_COMMIT_BRANCH == "develop" + +stop-develop: + stage: Deploy + image: debian:latest + before_script: + - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' + - eval $(ssh-agent -s) + - echo "$DEVELOP_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - ssh-keyscan $DEVELOP_IPADDRESS >> ~/.ssh/known_hosts + - chmod 644 ~/.ssh/known_hosts + - apt-get update -y && apt-get install curl -y + - curl --fail --show-error --location "https://github.com/genuinetools/reg/releases/download/v$REG_VERSION/reg-linux-amd64" --output ./reg + - echo "$REG_SHA256 ./reg" | sha256sum -c - + - chmod a+x ./reg + variables: + DEST_FOLDER: Run/$CI_PROJECT_NAME/develop + IMAGE_TAG: $CI_REGISTRY_IMAGE/develop:$CI_COMMIT_SHORT_SHA + REG_SHA256: ade837fc5224acd8c34732bf54a94f579b47851cc6a7fd5899a98386b782e228 + REG_VERSION: 0.16.1 + script: + - ssh $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS "sh Admin/Scripts/DeployStop.sh $CI_PROJECT_NAME develop $DBPRODNAME" + - ./reg rm -d --auth-url $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $IMAGE_TAG + environment: + name: develop + action: stop + rules: + - if: $CI_COMMIT_BRANCH == "develop" + when: manual + +build-review: + stage: Build + image: docker:20.10.16 + services: + - name: docker:20.10.16-dind + alias: docker + variables: + IMAGE_TAG: $CI_REGISTRY_IMAGE/review:$CI_MERGE_REQUEST_IID + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker build --tag $IMAGE_TAG . + - docker push $IMAGE_TAG + allow_failure: false + dependencies: + - front-build + - composer-build + needs: + - front-build + - composer-build + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + +deploy-review: + stage: Deploy + image: debian:latest + before_script: + - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' + - eval $(ssh-agent -s) + - echo "$DEVELOP_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - ssh-keyscan $DEVELOP_IPADDRESS >> ~/.ssh/known_hosts + - chmod 644 ~/.ssh/known_hosts + variables: + DEST_FOLDER: Run/$CI_PROJECT_NAME/$CI_MERGE_REQUEST_IID + IMAGE_TAG: $CI_REGISTRY_IMAGE/review:$CI_MERGE_REQUEST_IID + script: + - ssh $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS "mkdir -p $DEST_FOLDER" + - scp .env.example $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS:$DEST_FOLDER + - scp dev-docker-compose.yml $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS:$DEST_FOLDER + - ssh $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS "sh Admin/Scripts/Deploy.sh $CI_PROJECT_NAME $CI_MERGE_REQUEST_IID $IMAGE_TAG $DBPRODNAME" + environment: + name: review-$CI_MERGE_REQUEST_IID + url: https://$CI_PROJECT_NAME-$CI_MERGE_REQUEST_IID.s-web.loc + on_stop: stop-review + needs: + - build-review + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + when: manual + +stop-review: + stage: Deploy + image: debian:latest + before_script: + - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' + - eval $(ssh-agent -s) + - echo "$DEVELOP_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - ssh-keyscan $DEVELOP_IPADDRESS >> ~/.ssh/known_hosts + - chmod 644 ~/.ssh/known_hosts + - apt-get update -y && apt-get install curl -y + - curl --fail --show-error --location "https://github.com/genuinetools/reg/releases/download/v$REG_VERSION/reg-linux-amd64" --output ./reg + - echo "$REG_SHA256 ./reg" | sha256sum -c - + - chmod a+x ./reg + variables: + DEST_FOLDER: Run/$CI_PROJECT_NAME/$CI_MERGE_REQUEST_IID + IMAGE_TAG: $CI_REGISTRY_IMAGE/review:$CI_MERGE_REQUEST_IID + REG_SHA256: ade837fc5224acd8c34732bf54a94f579b47851cc6a7fd5899a98386b782e228 + REG_VERSION: 0.16.1 + script: + - ssh $DEVELOP_SSH_USER@$DEVELOP_IPADDRESS "sh Admin/Scripts/DeployStop.sh $CI_PROJECT_NAME $CI_MERGE_REQUEST_IID $DBPRODNAME" + - ./reg rm -d --auth-url $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $IMAGE_TAG + environment: + name: review-$CI_MERGE_REQUEST_IID + action: stop + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + when: manual diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..90fa15f0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM registry.gitlab.com/service-web-lab/ldc-web-images-docker/ldcweb-production:php8.1.1 +COPY --chown=noroot:noroot . /app/srcs +COPY --chown=noroot:noroot ./public/build /app/srcs/public/build +COPY --chown=noroot:noroot ./vendor /app/srcs/vendor \ No newline at end of file diff --git a/README.md b/README.md index f171ecac..bba438f1 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,16 @@ -

+# Nature & Respect DE -

-Build Status -Total Downloads -Latest Stable Version -License -

+## Crons +Put every min in PROD : +``` +php artisan schedule:run +``` -## About Laravel +## Available Commands +``` +ldc:status-report +ldc:send-status-report +ldcweb:admin-secure-sync -Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: - -- [Simple, fast routing engine](https://laravel.com/docs/routing). -- [Powerful dependency injection container](https://laravel.com/docs/container). -- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. -- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). -- Database agnostic [schema migrations](https://laravel.com/docs/migrations). -- [Robust background job processing](https://laravel.com/docs/queues). -- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). - -Laravel is accessible, powerful, and provides tools required for large, robust applications. - -## Learning Laravel - -Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. - -If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. - -## Laravel Sponsors - -We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). - -### Premium Partners - -- **[Vehikl](https://vehikl.com/)** -- **[Tighten Co.](https://tighten.co)** -- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** -- **[64 Robots](https://64robots.com)** -- **[Cubet Techno Labs](https://cubettech.com)** -- **[Cyber-Duck](https://cyber-duck.co.uk)** -- **[Many](https://www.many.co.uk)** -- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** -- **[DevSquad](https://devsquad.com)** -- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** -- **[OP.GG](https://op.gg)** -- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** -- **[Lendio](https://lendio.com)** - -## Contributing - -Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). - -## Code of Conduct - -In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). - -## Security Vulnerabilities - -If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. - -## License - -The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). +sentry:test +``` \ No newline at end of file diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 36814872..be055acf 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -15,7 +15,6 @@ class Kernel extends ConsoleKernel */ protected function schedule(Schedule $schedule) { - // $schedule->command('inspire')->hourly(); } /** diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index f9e4e8db..49f030e6 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -42,6 +42,9 @@ class Handler extends ExceptionHandler public function register() { $this->reportable(function (Throwable $e) { + if (app()->bound('sentry')) { + app('sentry')->captureException($e); + } }); } } diff --git a/app/Http/Controllers/API/ProductController.php b/app/Http/Controllers/API/ProductController.php deleted file mode 100644 index d9c85f42..00000000 --- a/app/Http/Controllers/API/ProductController.php +++ /dev/null @@ -1,61 +0,0 @@ -first(); - // return Stores::where('city', $city)::all; - // return Stores::where('city', '=', $city)->get(); - } -} diff --git a/app/Http/Controllers/ContactController.php b/app/Http/Controllers/ContactController.php index 2d3eabbe..f7f2cb68 100644 --- a/app/Http/Controllers/ContactController.php +++ b/app/Http/Controllers/ContactController.php @@ -3,36 +3,49 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Mail; class ContactController extends Controller { + /** + * Show contact page + * + * @return \Illuminate\Contracts\View\View + */ public function contactForm() { return view('pages.kontakt'); } + /** + * Submit contact form + * + * @param Request $request + * @return \Illuminate\Http\RedirectResponse + */ public function sendContactForm(Request $request) { - $request->validate([ - 'vorname' => 'required', - 'nachname' => 'required', - 'email' => 'required|email', - // 'phone' => 'required|digits:10|numeric', - 'nachricht' => 'required', - 'datenschutz' => 'required', - ]); + $request->validate( + [ + 'vorname' => 'required', + 'nachname' => 'required', + 'email' => 'required|email', + 'nachricht' => 'required', + 'datenschutz' => 'required', + ] + ); - $input = $request->all(); + $mailDatas = [ + 'vorname' => $request->vorname, + 'nachname' => $request->nachname, + 'email' => $request->email, + 'nachricht' => $request->nachricht, + ]; - // Send mail - \Mail::send('contactMail', array( - 'vorname' => $input['vorname'], - 'nachname' => $input['nachname'], - 'email' => $input['email'], - 'nachricht' => $input['nachricht'], - ), function ($message) use ($request) { + Mail::send('contactMail', $mailDatas, function ($message) { $message->from('info@wenndannmitrespekt.de', 'Kontaktformular wenndannmitrespekt.de'); - $message->to('kontakt@wenndannmitrespekt.de', 'kontakt@wenndannmitrespekt.de')->subject('Kontaktformular wenndannmitrespekt.de'); + $message->to('kontakt@wenndannmitrespekt.de', 'kontakt@wenndannmitrespekt.de') + ->subject('Kontaktformular wenndannmitrespekt.de'); }); return redirect()->back()->with(['success' => 'Vielen Dank für Ihre Nachricht.']); diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php index d19fcea2..8fcfcb52 100644 --- a/app/Http/Controllers/GroupController.php +++ b/app/Http/Controllers/GroupController.php @@ -6,7 +6,13 @@ use App\Retailgroup; class GroupController extends Controller { - public function show($id) + /** + * RetailGroup Show + * + * @param integer $id + * @return \App\Retailgroup + */ + public function show(int $id) { return Retailgroup::find($id); } diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index ef2f8d02..695686d3 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -2,14 +2,18 @@ namespace App\Http\Controllers; -use Illuminate\Http\Request; use App\Page; class PageController extends Controller { - public function index(Request $request, string $slug) + /** + * Page show + * + * @param string $slug + * @return \Illuminate\Contracts\View\View + */ + public function index(string $slug) { - $page = Page::where('slug', $slug)->first(); if ($page == null) { abort(404); diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index 6488ffd3..d97a2c96 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -6,25 +6,29 @@ use App\Product; class ProductController extends Controller { + /** + * Products index + * + * @return \Illuminate\Contracts\View\View + */ public function index() { - - $products = Product::all()->sortby('sequence')->reverse()->groupBy('poultry'); - - // dd($products); - // filter poultry + $products = Product::all()->sortby('sequence')->reverse()->groupBy('poultry'); $poultries = $products->keys()->sort(); - // dd($poultries); return view('pages.produkte', compact(['products', 'poultries'])); } - public function show($id) + /** + * Product show + * + * @param mixed $id + * @return \Illuminate\Contracts\View\View + */ + public function show(mixed $id) { - $product = Product::where('id', $id)->first(); if ($product == null) { $product = Product::where('slug', $id)->first(); - if ($product == null) { abort(404); } diff --git a/app/Http/Controllers/RecipeController.php b/app/Http/Controllers/RecipeController.php index 97387d6e..137cbc65 100644 --- a/app/Http/Controllers/RecipeController.php +++ b/app/Http/Controllers/RecipeController.php @@ -9,31 +9,30 @@ class RecipeController extends Controller /** * Display a listing of the resource. * - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ public function index() { - // get recipies + // Get recipies. $recipes = Recipe::where('live', '1')->get(); - - // filter poultry + // Filter poultry. $poultries = $recipes->unique('cat')->pluck('cat'); - - // filter difficulty + // Filter difficulty. $difficulties = $recipes->unique('difficulty')->pluck('difficulty'); - - return view('pages.rezepte', compact(['recipes', 'poultries', 'difficulties'])); } - - public function show($id) + /** + * Recipe show + * + * @param mixed $id + * @return \Illuminate\Contracts\View\View + */ + public function show(mixed $id) { - // get recipies $recipe = Recipe::where('id', $id)->first(); if ($recipe == null) { $recipe = Recipe::where('slug', $id)->first(); - if ($recipe == null) { abort(404); } diff --git a/app/Http/Controllers/RegionController.php b/app/Http/Controllers/RegionController.php index 97588c90..1a061ccb 100644 --- a/app/Http/Controllers/RegionController.php +++ b/app/Http/Controllers/RegionController.php @@ -6,7 +6,13 @@ use App\Retailregion; class RegionController extends Controller { - public function show($id) + /** + * Show retail region + * + * @param integer $id + * @return \App\Retailregion; + */ + public function show(int $id) { return Retailregion::find($id); } diff --git a/app/Http/Controllers/StoreController.php b/app/Http/Controllers/StoreController.php index 9d095c97..69086215 100644 --- a/app/Http/Controllers/StoreController.php +++ b/app/Http/Controllers/StoreController.php @@ -2,39 +2,30 @@ namespace App\Http\Controllers; -use App\Store; use Illuminate\Support\Facades\DB; +use Illuminate\Http\Request; class StoreController extends Controller { - // Stores - public function index() + /** + * Store by city + * + * @param \Illuminate\Http\Request $request + * @param mixed $city + * @return \App\Store; + */ + public function city(Request $request, mixed $city) { - return Store::all(); - } - - public function show($id) - { - return Store::find($id); - } - - // Stores by city - public function city($city) - { - - if (is_numeric($city)) { - return Store::where('zipcode', '=', $city)->get(); - } else { - return Store::where('city', '=', $city)->get(); + // CSRF Token check. + if ( + !(is_string($request->session()->token()) && + is_string($request->header('X-CSRF-TOKEN')) && + hash_equals($request->session()->token(), $request->header('X-CSRF-TOKEN'))) + ) { + \abort(419); } - } - - // Stores by city - public function city2($city) - { if (is_numeric($city)) { - // return Store::where('zipcode', '=', $city)->get(); $stores = DB::table('stores') ->join('retailregions', 'stores.region_id', '=', 'retailregions.id') ->join('retailgroups', 'retailregions.region_group', '=', 'retailgroups.id') @@ -52,8 +43,6 @@ class StoreController extends Controller ->get(); return $stores; - - // return Store::where('city', '=', $city)->get(); - }//end if + } } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index c3be2544..11b7fa83 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -14,7 +14,7 @@ class Kernel extends HttpKernel * @var array */ protected $middleware = [ - // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, \Illuminate\Http\Middleware\HandleCors::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, @@ -39,7 +39,6 @@ class Kernel extends HttpKernel ], 'api' => [ - // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index aeb9d809..c3ee3480 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -11,6 +11,7 @@ class Authenticate extends Middleware * * @param \Illuminate\Http\Request $request * @return string|null + * @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing */ protected function redirectTo($request) { diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index 25c4a006..e1ed87a9 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -12,9 +12,9 @@ class RedirectIfAuthenticated /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next - * @param string|null ...$guards + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param string|null ...$guards * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ public function handle(Request $request, Closure $next, ...$guards) diff --git a/app/Lib/ExceptionsHelper.php b/app/Lib/ExceptionsHelper.php new file mode 100644 index 00000000..5b422523 --- /dev/null +++ b/app/Lib/ExceptionsHelper.php @@ -0,0 +1,190 @@ +setModules([]); + $event->setOsContext(null); + + /** @var \Sentry\ExceptionDataBag[] */ + $exceptionBag = []; + foreach ($event->getExceptions() as $exceptionDataBag) { + $exceptionBag[] = self::getAnonymizedSentryException($exceptionDataBag); + } + $event->setExceptions($exceptionBag); + return $event; + } + + /** + * Anonimize Sentry Exception bag + * + * @param \Sentry\ExceptionDataBag $exceptionDataBag + * @return \Sentry\ExceptionDataBag + */ + private static function getAnonymizedSentryException( + \Sentry\ExceptionDataBag $exceptionDataBag + ): \Sentry\ExceptionDataBag { + $exceptionDataBag->setValue(self::getAnonymizedMessage($exceptionDataBag->getValue())); + if ($stackTrace = $exceptionDataBag->getStacktrace()) { + $exceptionDataBag->setStacktrace(self::getAnonymizedSentryStackTrace($stackTrace)); + } + return $exceptionDataBag; + } + + /** + * Anonymise sentry stacktrace + * + * @param \Sentry\Stacktrace $stackTrace + * @return \Sentry\Stacktrace + */ + private static function getAnonymizedSentryStackTrace(\Sentry\Stacktrace $stackTrace): \Sentry\Stacktrace + { + /** @var \Sentry\Frame[] */ + $frames = \array_reverse($stackTrace->getFrames(), true); + $i = \count($frames) - 1; + // * Remove all but keep first (index.php). + while ($i-- > 0) { + $stackTrace->removeFrame(count($stackTrace->getFrames()) - 1); + } + foreach ($frames as $index => $frame) { + $frame->setPostContext([]); + $frame->setPreContext([]); + $frame->setContextLine(''); + $frame->setVars(self::getAnonymizedSentryParams($frame->getVars())); + $stackTrace->addFrame($frame); + if ($index === 0) { + $stackTrace->removeFrame(count($stackTrace->getFrames()) - 1); + } + } + return $stackTrace; + } + + /** + * Get anonymized sentry params + * + * @param mixed[] $params + * @return string[] + */ + private static function getAnonymizedSentryParams(array $params): array + { + foreach ($params as &$param) { + $type = \strtolower(\gettype($param)); + if (\is_string($param)) { + $type = \explode(' ', \trim($param))[0] ?? null; + } + switch ($type) { + case 'Lambda': + case 'Object': + continue 2; + case 'array': + $param = sprintf('Array(%d)', \count($param)); + continue 2; + default: + if (\is_numeric($param)) { + $param = \ucfirst($type); + continue 2; + } + if (\is_string($param)) { + $param = sprintf('String(%d)', \strlen($param)); + continue 2; + } + } //end switch + } //end foreach + return $params; + } + + + /** + * Anonymize at least Sql queries + * + * @param string $message + * @return string + */ + public static function getAnonymizedMessage(string $message): string + { + $message = \preg_replace('/^(.*)( \(SQL:.*\))$/', '$1', $message) ?? $message; + if ($sqlPos = \strpos($message, 'to use near')) { + $message = \mb_strcut($message, 0, $sqlPos); + } + return $message; + } + + /** + * Anonymize stack trace + * + * @param \Throwable $e + * @return string + */ + public static function getAnonymizedStackTrace(\Throwable $e): string + { + $projectPath = \realpath(\sprintf('%s/../', \app_path())); + $traceStack = $e->getTrace(); + $traceStr = ''; + $maxStackStage = 0; + foreach ($traceStack as $stackStage => $stack) { + $maxStackStage = $stackStage; + $traceStr .= \sprintf( + '#%s %s(%d): ', + $stackStage, + str_replace($projectPath, '', $stack['file'] ?? ''), + $stack['line'] ?? '' + ); + if (isset($stack['class'])) { + $traceStr .= "{$stack['class']}->{$stack['function']}("; + if (isset($stack['args'])) { + $traceStr .= self::handleArgs($stack); + } + $traceStr .= ")\n"; + } elseif (isset($stack['function'])) { + $traceStr .= "{$stack['function']}("; + if (isset($stack['args'])) { + $traceStr .= self::handleArgs($stack); + } + $traceStr .= ")\n"; + } + } //end foreach + $maxStackStage++; + $traceStr .= "#$maxStackStage {main}"; + return $traceStr; + } + + /** + * Handle Args + * + * @param array $stack + * @return string + */ + public static function handleArgs(array $stack): string + { + $traceArgs = ''; + $argsCount = count($stack['args']); + for ($i = 0; $i < $argsCount; $i++) { + $type = \gettype($stack['args'][$i]); + switch ($type) { + case 'object': + $traceArgs .= sprintf('Object(%s)', \get_class($stack['args'][$i])); + break; + case 'array': + $traceArgs .= sprintf('Array(%d)', \count($stack['args'][$i])); + break; + case 'string': + $traceArgs .= sprintf('String(%d)', \strlen($stack['args'][$i])); + break; + default: + $traceArgs .= \gettype($stack['args'][$i]); + } + $traceArgs .= ($i !== ($argsCount - 1) ? ',' : ''); + } + return $traceArgs; + } +} diff --git a/app/Models/User.php b/app/Models/User.php index bc2a4358..fada205f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -4,11 +4,9 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Notifications\Notifiable; -use Laravel\Sanctum\HasApiTokens; class User extends \TCG\Voyager\Models\User { - use HasApiTokens; use HasFactory; use Notifiable; diff --git a/app/Page.php b/app/Page.php index 77dd4f5c..45981044 100644 --- a/app/Page.php +++ b/app/Page.php @@ -6,11 +6,21 @@ use Illuminate\Database\Eloquent\Model; class Page extends Model { + /** + * Page parts relationship + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ public function parts() { return $this->hasMany('App\Part'); } + /** + * Page snippets relationship + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ public function snippets() { return $this->hasMany('App\Snippet'); diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index d7e6b4ad..afb0cf81 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -11,9 +11,7 @@ class AuthServiceProvider extends ServiceProvider * * @var array */ - protected $policies = [ - // 'App\Models\Model' => 'App\Policies\ModelPolicy', - ]; + protected $policies = []; /** * Register any authentication / authorization services. diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php deleted file mode 100644 index 395c518b..00000000 --- a/app/Providers/BroadcastServiceProvider.php +++ /dev/null @@ -1,21 +0,0 @@ -group(base_path('routes/api.php')); Route::middleware('web') - ->group(base_path('routes/web.php')); + ->group(base_path('routes/web-bo.php')); + + Route::middleware('web') + ->group(base_path('routes/web-fo.php')); }); } diff --git a/app/View/Components/ContentPart.php b/app/View/Components/ContentPart.php index 6d04c7cf..8ddb73c1 100644 --- a/app/View/Components/ContentPart.php +++ b/app/View/Components/ContentPart.php @@ -6,18 +6,36 @@ use Illuminate\View\Component; class ContentPart extends Component { + /** + * Part variable + * + * @var mixed + */ private $part; + /** + * odd variable + * + * @var integer + */ private $odd; + /** + * bgcolor variable + * + * @var mixed + */ private $bgcolor; /** * Create a new component instance. * + * @param mixed $part + * @param integer $odd + * @param mixed $bgcolor * @return void */ - public function __construct($part = null, $odd = 0, $bgcolor = null) + public function __construct(mixed $part = null, int $odd = 0, mixed $bgcolor = null) { $this->part = null; if ($part != null) { diff --git a/app/View/Components/ContentSnippet.php b/app/View/Components/ContentSnippet.php index de06a907..4d93c091 100644 --- a/app/View/Components/ContentSnippet.php +++ b/app/View/Components/ContentSnippet.php @@ -6,17 +6,36 @@ use Illuminate\View\Component; class ContentSnippet extends Component { + /** + * snippet variable + * + * @var mixed + */ private $snippet; + /** + * odd variable + * + * @var integer + */ private $odd; + /** + * bgcolor variable + * + * @var mixed + */ private $bgcolor; + /** * Create a new component instance. * + * @param mixed $snippet + * @param integer $odd + * @param mixed $bgcolor * @return void */ - public function __construct($snippet = null, $odd = 0, $bgcolor = null) + public function __construct(mixed $snippet = null, int $odd = 0, mixed $bgcolor = null) { $this->snippet = null; if ($snippet != null) { diff --git a/app/View/Components/ProductCard.php b/app/View/Components/ProductCard.php index b9a82660..43749b87 100644 --- a/app/View/Components/ProductCard.php +++ b/app/View/Components/ProductCard.php @@ -6,15 +6,6 @@ use Illuminate\View\Component; class ProductCard extends Component { - /** - * Create a new component instance. - * - * @return void - */ - public function __construct() - { - } - /** * Get the view / contents that represent the component. * diff --git a/app/View/Components/RecipeCard.php b/app/View/Components/RecipeCard.php index c7ac955f..d11cbdc6 100644 --- a/app/View/Components/RecipeCard.php +++ b/app/View/Components/RecipeCard.php @@ -7,16 +7,25 @@ use App\Recipe; class RecipeCard extends Component { + /** + * @var integer + */ public $id; + /** + * Recipe model + * + * @var \App\Recipe + */ public $recipe; /** * Create a new component instance. * + * @param integer $id * @return void */ - public function __construct($id) + public function __construct(int $id) { $this->recipe = Recipe::where('id', $id)->first(); } diff --git a/app/View/Components/RecipeCardSmall.php b/app/View/Components/RecipeCardSmall.php index 75f40951..c4e25099 100644 --- a/app/View/Components/RecipeCardSmall.php +++ b/app/View/Components/RecipeCardSmall.php @@ -7,16 +7,25 @@ use App\Recipe; class RecipeCardSmall extends Component { + /** + * @var integer + */ public $id; + /** + * Recipe model + * + * @var \App\Recipe + */ public $recipe; /** * Create a new component instance. * + * @param integer $id * @return void */ - public function __construct($id) + public function __construct(int $id) { $this->recipe = Recipe::where('id', $id)->first(); } diff --git a/app/View/Components/RecipeProductStoerer.php b/app/View/Components/RecipeProductStoerer.php index b3fdf552..35a879a6 100644 --- a/app/View/Components/RecipeProductStoerer.php +++ b/app/View/Components/RecipeProductStoerer.php @@ -7,17 +7,29 @@ use App\Product; class RecipeProductStoerer extends Component { + /** + * id variable + * + * @var integer + */ public $id; + /** + * product variable + * + * @var \App\Product + */ public $product; + /** * Create a new component instance. * + * @param integer $id * @return void */ - public function __construct($id) + public function __construct(int $id) { - $this->product = Product::where('id', $id)->first(); + $this->product = Product::where('id', $id)->first(); } /** diff --git a/app/View/Components/RecipeWidget.php b/app/View/Components/RecipeWidget.php index 11941cc3..452a6922 100644 --- a/app/View/Components/RecipeWidget.php +++ b/app/View/Components/RecipeWidget.php @@ -7,26 +7,44 @@ use App\Recipe; class RecipeWidget extends Component { + /** + * limit variable + * + * @var mixed + */ private $limit; - private $recipes; - + /** + * id variable + * + * @var mixed + */ private $id; + /** + * recipes variable + * + * @var \App\Recipe + */ + private $recipes; + /** * Create a new component instance. * + * @param mixed $limit + * @param mixed $id * @return void */ - public function __construct($limit, $id = null) + public function __construct(mixed $limit, mixed $id = null) { - $this->limit = 3; + $this->limit = 3; if ($limit != null) { $this->limit = $limit; } if ($id != null) { $this->id = $id; - $this->recipes = Recipe::where('live', '1')->where('id', '!=', $this->id)->inRandomOrder()->limit($this->limit)->get(); + $this->recipes = Recipe::where('live', '1') + ->where('id', '!=', $this->id)->inRandomOrder()->limit($this->limit)->get(); } else { $this->recipes = Recipe::where('live', '1')->inRandomOrder()->limit($this->limit)->get(); } diff --git a/composer.json b/composer.json index e53d4e70..3647af5b 100644 --- a/composer.json +++ b/composer.json @@ -8,8 +8,10 @@ "php": "^8.0.2", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^9.2", - "laravel/sanctum": "^2.14.1", "laravel/tinker": "^2.7", + "ldc/web-admin-secure-laravel": "^1.0", + "ldc/web-status-checker-laravel": "^1.0", + "sentry/sentry-laravel": "^3.1", "simplesoftwareio/simple-qrcode": "^4.2", "tcg/voyager": "^1.5" }, @@ -63,5 +65,11 @@ } }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "repositories": { + "gitlab.com/16669037": { + "type": "composer", + "url": "https://gitlab.com/api/v4/group/16669037/-/packages/composer/packages.json" + } + } } diff --git a/composer.lock b/composer.lock index bb782e3e..082ab821 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": "d859461596b0a63f4aded114e2d5db0f", + "content-hash": "b0fe98d58131b87673454d7a9715f509", "packages": [ { "name": "arrilot/laravel-widgets", @@ -186,6 +186,72 @@ ], "time": "2021-08-15T20:50:18+00:00" }, + { + "name": "clue/stream-filter", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/php-stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.6.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-02-21T13:15:14+00:00" + }, { "name": "dasprid/enum", "version": "1.0.3", @@ -1405,6 +1471,64 @@ ], "time": "2022-03-20T21:55:58+00:00" }, + { + "name": "http-interop/http-factory-guzzle", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/http-interop/http-factory-guzzle.git", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.7||^2.0", + "php": ">=7.3", + "psr/http-factory": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Factory\\Guzzle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "An HTTP Factory using Guzzle PSR7", + "keywords": [ + "factory", + "http", + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/http-interop/http-factory-guzzle/issues", + "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" + }, + "time": "2021-07-21T13:50:14+00:00" + }, { "name": "intervention/image", "version": "2.7.1", @@ -1489,6 +1613,65 @@ ], "time": "2021-12-16T16:49:26+00:00" }, + { + "name": "jean85/pretty-package-versions", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af", + "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.17", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^0.12.66", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5" + }, + "time": "2021-10-08T21:21:46+00:00" + }, { "name": "larapack/doctrine-support", "version": "v0.1.9", @@ -1724,71 +1907,6 @@ }, "time": "2022-04-19T15:01:23+00:00" }, - { - "name": "laravel/sanctum", - "version": "v2.15.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/sanctum.git", - "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", - "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/console": "^6.9|^7.0|^8.0|^9.0", - "illuminate/contracts": "^6.9|^7.0|^8.0|^9.0", - "illuminate/database": "^6.9|^7.0|^8.0|^9.0", - "illuminate/support": "^6.9|^7.0|^8.0|^9.0", - "php": "^7.2|^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0", - "phpunit/phpunit": "^8.0|^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Sanctum\\SanctumServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Sanctum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", - "keywords": [ - "auth", - "laravel", - "sanctum" - ], - "support": { - "issues": "https://github.com/laravel/sanctum/issues", - "source": "https://github.com/laravel/sanctum" - }, - "time": "2022-04-08T13:39:49+00:00" - }, { "name": "laravel/serializable-closure", "version": "v1.1.1", @@ -1977,6 +2095,180 @@ }, "time": "2022-02-21T14:59:16+00:00" }, + { + "name": "ldc/web-admin-secure-laravel", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://gitlab.com/service-web-lab/ldc-web-admin-secure-laravel.git", + "reference": "c538f5d349b119ac64cb62b33e6368bef6be90bc" + }, + "dist": { + "type": "zip", + "url": "https://gitlab.com/api/v4/projects/37314651/packages/composer/archives/ldc/web-admin-secure-laravel.zip?sha=c538f5d349b119ac64cb62b33e6368bef6be90bc", + "reference": "c538f5d349b119ac64cb62b33e6368bef6be90bc", + "shasum": "" + }, + "require": { + "illuminate/support": "~8|~9", + "laravel/framework": "~8|~9", + "php": "~7.3|7.4|~8" + }, + "require-dev": { + "orchestra/testbench": "^6.24", + "phpunit/php-code-coverage": "^9.2", + "phpunit/phpunit": "~9.0", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LDC\\WebAdminSecureLaravel\\AdminSecureServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LDC\\WebAdminSecureLaravel\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "LDC\\WebAdminSecureLaravel\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit" + ], + "post-autoload-dump": [ + "@php ./vendor/bin/testbench package:discover --ansi" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Vincent BRIDIER", + "email": "vincent.bridier@ldc.fr", + "homepage": "https://www.ldc.fr" + } + ], + "description": "Restrict access to LDC Network" + }, + { + "name": "ldc/web-status-checker", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://gitlab.com/service-web-lab/ldc-web-status-checker.git", + "reference": "70a4f96a272f42f9caaf8f614190a3e061273bc8" + }, + "dist": { + "type": "zip", + "url": "https://gitlab.com/api/v4/projects/37071268/packages/composer/archives/ldc/web-status-checker.zip?sha=70a4f96a272f42f9caaf8f614190a3e061273bc8", + "reference": "70a4f96a272f42f9caaf8f614190a3e061273bc8", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": "~7.3|7.4|~8" + }, + "require-dev": { + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "LDC\\WebStatusChecker\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "LDC\\WebStatusChecker\\Tests\\": "tests" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jérémy Munsch", + "email": "jeremy.munsch@ldc.fr", + "homepage": "https://jeremydev.ovh" + } + ], + "description": "Status checker: report status to ldc-web" + }, + { + "name": "ldc/web-status-checker-laravel", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://gitlab.com/service-web-lab/ldc-web-status-checker-laravel.git", + "reference": "32965e7425060c4167b40e5c0868c438ea94c14f" + }, + "dist": { + "type": "zip", + "url": "https://gitlab.com/api/v4/projects/37071488/packages/composer/archives/ldc/web-status-checker-laravel.zip?sha=32965e7425060c4167b40e5c0868c438ea94c14f", + "reference": "32965e7425060c4167b40e5c0868c438ea94c14f", + "shasum": "" + }, + "require": { + "illuminate/support": "~8|~9", + "laravel/framework": "~8|~9", + "ldc/web-status-checker": "^1.0", + "php": "~7.3|7.4|~8" + }, + "require-dev": { + "orchestra/testbench": "^6.24", + "phpunit/php-code-coverage": "^9.2", + "phpunit/phpunit": "~9.0", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LDC\\WebStatusCheckerLaravel\\StatusCheckerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LDC\\WebStatusCheckerLaravel\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "LDC\\WebStatusCheckerLaravel\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit" + ], + "post-autoload-dump": [ + "@php ./vendor/bin/testbench package:discover --ansi" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jérémy Munsch", + "email": "jeremy.munsch@ldc.fr", + "homepage": "https://jeremydev.ovh" + } + ], + "description": "Status checker: report status to ldc-web" + }, { "name": "league/commonmark", "version": "2.3.0", @@ -2709,6 +3001,472 @@ }, "time": "2021-11-30T19:35:32+00:00" }, + { + "name": "nyholm/psr7", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "f734364e38a876a23be4d906a2a089e1315be18a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/f734364e38a876a23be4d906a2a089e1315be18a", + "reference": "f734364e38a876a23be4d906a2a089e1315be18a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "php-http/message-factory": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || 8.5 || 9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2022-06-22T07:13:36+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/45db684cd4e186dcdc2b9c06b22970fe123796c0", + "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "php-http/message-factory": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.6.0" + }, + "time": "2022-09-29T09:59:43+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.14.3", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/31d8ee46d0215108df16a8527c7438e96a4d7735", + "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0" + }, + "require-dev": { + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.14.3" + }, + "time": "2022-07-11T14:04:40+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "f640739f80dfa1152533976e3c112477f69274eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb", + "reference": "f640739f80dfa1152533976e3c112477f69274eb", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^5.1 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.3.0" + }, + "time": "2022-02-21T09:52:22+00:00" + }, + { + "name": "php-http/message", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.1 || ^8.0", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0", + "laminas/laminas-diactoros": "^2.0", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.13.0" + }, + "time": "2022-02-11T13:41:14+00:00" + }, + { + "name": "php-http/message-factory", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "support": { + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/master" + }, + "time": "2015-12-19T14:08:53+00:00" + }, + { + "name": "php-http/promise", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", + "phpspec/phpspec": "^5.1.2 || ^6.2" + }, + "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": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.1.0" + }, + "time": "2020-07-07T09:29:14+00:00" + }, { "name": "phpoption/phpoption", "version": "1.8.1", @@ -3439,6 +4197,260 @@ ], "time": "2022-03-27T21:42:02+00:00" }, + { + "name": "sentry/sdk", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php-sdk.git", + "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/d0678fc7274dbb03046ed05cb24eb92945bedf8e", + "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e", + "shasum": "" + }, + "require": { + "http-interop/http-factory-guzzle": "^1.0", + "sentry/sentry": "^3.9", + "symfony/http-client": "^4.3|^5.0|^6.0" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-php-sdk/issues", + "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.3.0" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2022-10-11T09:05:00+00:00" + }, + { + "name": "sentry/sentry", + "version": "3.12.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "4902f43640963ed45517fd7c1da7fdd5511bb304" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/4902f43640963ed45517fd7c1da7fdd5511bb304", + "reference": "4902f43640963ed45517fd7c1da7fdd5511bb304", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/promises": "^1.4", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", + "jean85/pretty-package-versions": "^1.5|^2.0.4", + "php": "^7.2|^8.0", + "php-http/async-client-implementation": "^1.0", + "php-http/client-common": "^1.5|^2.0", + "php-http/discovery": "^1.11", + "php-http/httplug": "^1.1|^2.0", + "php-http/message": "^1.5", + "psr/http-factory": "^1.0", + "psr/http-message-implementation": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0", + "symfony/polyfill-php80": "^1.17" + }, + "conflict": { + "php-http/client-common": "1.8.0", + "raven/raven": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.19|3.4.*", + "http-interop/http-factory-guzzle": "^1.0", + "monolog/monolog": "^1.6|^2.0|^3.0", + "nikic/php-parser": "^4.10.3", + "php-http/mock-client": "^1.3", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5.14|^9.4", + "symfony/phpunit-bridge": "^5.2|^6.0", + "vimeo/psalm": "^4.17" + }, + "suggest": { + "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Sentry\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "A PHP SDK for Sentry (http://sentry.io)", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-php/issues", + "source": "https://github.com/getsentry/sentry-php/tree/3.12.0" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2022-11-22T10:57:08+00:00" + }, + { + "name": "sentry/sentry-laravel", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-laravel.git", + "reference": "1626336dc478abcd8aa5cb128b69423299216bf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/1626336dc478abcd8aa5cb128b69423299216bf9", + "reference": "1626336dc478abcd8aa5cb128b69423299216bf9", + "shasum": "" + }, + "require": { + "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0", + "nyholm/psr7": "^1.0", + "php": "^7.2 | ^8.0", + "sentry/sdk": "^3.3", + "sentry/sentry": "^3.12", + "symfony/psr-http-message-bridge": "^1.0 | ^2.0" + }, + "conflict": { + "laravel/lumen-framework": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11", + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0", + "mockery/mockery": "^1.3", + "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0", + "phpunit/phpunit": "^8.4 | ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev", + "dev-0.x": "0.x-dev" + }, + "laravel": { + "providers": [ + "Sentry\\Laravel\\ServiceProvider", + "Sentry\\Laravel\\Tracing\\ServiceProvider" + ], + "aliases": { + "Sentry": "Sentry\\Laravel\\Facade" + } + } + }, + "autoload": { + "psr-0": { + "Sentry\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "Laravel SDK for Sentry (https://sentry.io)", + "homepage": "https://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "laravel", + "log", + "logging", + "sentry" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-laravel/issues", + "source": "https://github.com/getsentry/sentry-laravel/tree/3.1.2" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2022-11-23T13:25:02+00:00" + }, { "name": "simplesoftwareio/simple-qrcode", "version": "4.2.0", @@ -4028,6 +5040,172 @@ ], "time": "2022-01-26T17:23:29+00:00" }, + { + "name": "symfony/http-client", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "153540b6ed72eecdcb42dc847f8d8cf2e2516e8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/153540b6ed72eecdcb42dc847f8d8cf2e2516e8e", + "reference": "153540b6ed72eecdcb42dc847f8d8cf2e2516e8e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-client-contracts": "^3", + "symfony/service-contracts": "^1.0|^2|^3" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-client/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-14T10:13:36+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/fd038f08c623ab5d22b26e9ba35afe8c79071800", + "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-22T07:30:54+00:00" + }, { "name": "symfony/http-foundation", "version": "v6.0.7", @@ -4364,6 +5542,73 @@ ], "time": "2022-03-13T20:10:05+00:00" }, + { + "name": "symfony/options-resolver", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "d28f02acde71ff75e957082cd36e973df395f626" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d28f02acde71ff75e957082cd36e973df395f626", + "reference": "d28f02acde71ff75e957082cd36e973df395f626", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-02T09:08:04+00:00" + }, { "name": "symfony/polyfill-ctype", "version": "v1.25.0", @@ -5080,6 +6325,94 @@ ], "time": "2022-03-18T16:21:55+00:00" }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v2.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "a125b93ef378c492e274f217874906fb9babdebb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a125b93ef378c492e274f217874906fb9babdebb", + "reference": "a125b93ef378c492e274f217874906fb9babdebb", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "psr/log": "^1.1 || ^2 || ^3", + "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.4@dev || ^6.0" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-main": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/symfony/psr-http-message-bridge/issues", + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-28T22:46:34+00:00" + }, { "name": "symfony/routing", "version": "v6.0.5", diff --git a/config/app.php b/config/app.php index de5282e4..c8bd9071 100644 --- a/config/app.php +++ b/config/app.php @@ -69,7 +69,7 @@ return [ | */ - 'timezone' => 'UTC', + 'timezone' => 'Europe/Paris', /* |-------------------------------------------------------------------------- @@ -138,7 +138,7 @@ return [ 'providers' => [ - /* + /** * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, @@ -165,16 +165,15 @@ return [ Illuminate\View\ViewServiceProvider::class, SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class, - /* + /** * Package Service Providers... */ - /* + /** * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, - // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, @@ -193,7 +192,6 @@ return [ 'aliases' => Facade::defaultAliases()->merge([ 'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class, - // 'ExampleClass' => App\Example\ExampleClass::class, ])->toArray(), ]; diff --git a/config/auth.php b/config/auth.php index 75baf2fa..53b15d28 100644 --- a/config/auth.php +++ b/config/auth.php @@ -64,11 +64,6 @@ return [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], - - // 'users' => [ - // 'driver' => 'database', - // 'table' => 'users', - // ], ], /* diff --git a/config/broadcasting.php b/config/broadcasting.php index 12e21f39..21ea56cf 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -40,6 +40,7 @@ return [ 'useTLS' => true, ], 'client_options' => [ + // phpcs:ignore // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html ], ], diff --git a/config/cache.php b/config/cache.php index 432bc063..56fc8397 100644 --- a/config/cache.php +++ b/config/cache.php @@ -62,6 +62,7 @@ return [ env('MEMCACHED_PASSWORD'), ], 'options' => [ + // phpcs:ignore // Memcached::OPT_CONNECT_TIMEOUT => 2000, ], 'servers' => [ diff --git a/config/cors.php b/config/cors.php index 32a0f68b..caccf68b 100644 --- a/config/cors.php +++ b/config/cors.php @@ -15,7 +15,7 @@ return [ | */ - 'paths' => ['api/*', 'sanctum/csrf-cookie'], + 'paths' => ['api/*'], 'allowed_methods' => ['*'], diff --git a/config/database.php b/config/database.php index ebf81756..bb559633 100644 --- a/config/database.php +++ b/config/database.php @@ -89,6 +89,7 @@ return [ 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, + // phpcs:ignore // 'encrypt' => env('DB_ENCRYPT', 'yes'), // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), ], diff --git a/config/sanctum.php b/config/sanctum.php deleted file mode 100644 index 5644cc4d..00000000 --- a/config/sanctum.php +++ /dev/null @@ -1,67 +0,0 @@ - explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( - '%s%s', - 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', - Sanctum::currentApplicationUrlWithPort() - ))), - - /* - |-------------------------------------------------------------------------- - | Sanctum Guards - |-------------------------------------------------------------------------- - | - | This array contains the authentication guards that will be checked when - | Sanctum is trying to authenticate a request. If none of these guards - | are able to authenticate the request, Sanctum will use the bearer - | token that's present on an incoming request for authentication. - | - */ - - 'guard' => ['web'], - - /* - |-------------------------------------------------------------------------- - | Expiration Minutes - |-------------------------------------------------------------------------- - | - | This value controls the number of minutes until an issued token will be - | considered expired. If this value is null, personal access tokens do - | not expire. This won't tweak the lifetime of first-party sessions. - | - */ - - 'expiration' => null, - - /* - |-------------------------------------------------------------------------- - | Sanctum Middleware - |-------------------------------------------------------------------------- - | - | When authenticating your first-party SPA with Sanctum you may need to - | customize some of the middleware Sanctum uses while processing the - | request. You may change the middleware listed below as required. - | - */ - - 'middleware' => [ - 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, - 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, - ], - -]; diff --git a/config/sentry.php b/config/sentry.php new file mode 100644 index 00000000..6a3005c8 --- /dev/null +++ b/config/sentry.php @@ -0,0 +1,62 @@ + env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')), + + // The release version of your application + // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')). + 'release' => env('SENTRY_RELEASE'), + + // When left empty or `null` the Laravel environment will be used. + 'environment' => env('SENTRY_ENVIRONMENT'), + + 'breadcrumbs' => [ + // Capture Laravel logs in breadcrumbs. + 'logs' => true, + + // Capture SQL queries in breadcrumbs. + 'sql_queries' => true, + + // Capture bindings on SQL queries logged in breadcrumbs. + 'sql_bindings' => false, + + // Capture queue job information in breadcrumbs. + 'queue_info' => true, + + // Capture command information in breadcrumbs. + 'command_info' => true, + ], + + 'tracing' => [ + // Trace queue jobs as their own transactions. + 'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', false), + + // Capture queue jobs as spans when executed on the sync driver. + 'queue_jobs' => true, + + // Capture SQL queries as spans. + 'sql_queries' => true, + + // Try to find out where the SQL query originated from and add it to the query spans. + 'sql_origin' => true, + + // Capture views as spans. + 'views' => true, + + // Indicates if the tracing integrations supplied by Sentry should be loaded. + 'default_integrations' => true, + + // Indicates that requests without a matching route should be traced. + 'missing_routes' => false, + ], + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send-default-pii + 'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', false), + + // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces-sample-rate + 'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float)env('SENTRY_TRACES_SAMPLE_RATE'), + + 'before_send' => [\App\Lib\ExceptionsHelper::class, 'sentryEventHandler'], + +]; diff --git a/config/services.php b/config/services.php index 88b96147..58e8e9cc 100644 --- a/config/services.php +++ b/config/services.php @@ -31,4 +31,10 @@ return [ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], + 'google' => [ + 'maps' => [ + 'key' => env('GOOGLE_MAPS_KEY') + ] + ] + ]; diff --git a/config/voyager.php b/config/voyager.php index 0539aca2..bd1150af 100644 --- a/config/voyager.php +++ b/config/voyager.php @@ -1,6 +1,7 @@ [ + // phpcs:ignore // 'namespace' => 'App\\Models\\', ], @@ -80,7 +82,9 @@ return [ 'database' => [ 'tables' => [ - 'hidden' => ['migrations', 'data_rows', 'data_types', 'menu_items', 'password_resets', 'permission_role', 'settings'], + 'hidden' => [ + 'migrations', 'data_rows', 'data_types', 'menu_items', 'password_resets', 'permission_role', 'settings' + ], ], 'autoload_migrations' => true, ], @@ -96,17 +100,17 @@ return [ */ 'multilingual' => [ - /* + /** * Set whether or not the multilingual is supported by the BREAD input. */ 'enabled' => false, - /* + /** * Select default language */ 'default' => 'en', - /* + /** * Select languages that are supported. */ 'locales' => [ @@ -125,7 +129,7 @@ return [ */ 'dashboard' => [ - // Add custom list items to navbar's dropdown + // Add custom list items to navbar's dropdown. 'navbar_items' => [ 'voyager::generic.profile' => [ 'route' => 'voyager.profile', @@ -162,13 +166,13 @@ return [ // When a BREAD is added, create the Menu item using the BREAD properties. 'add_menu_item' => true, - // which menu add item to + // Which menu add item to. 'default_menu' => 'admin', // When a BREAD is added, create the related Permission. 'add_permission' => true, - // which role add premissions to + // Which role add premissions to. 'default_role' => 'admin', ], @@ -184,8 +188,7 @@ return [ 'primary_color' => '#22A7F0', 'show_dev_tips' => true, -// Show development tip "How To Use:" in Menu and Settings - // Here you can specify additional assets you would like to be included in the master.blade + // Here you can specify additional assets you would like to be included in the master.blade. 'additional_css' => [ // 'css/custom.css', ], @@ -214,16 +217,15 @@ return [ 'settings' => [ // Enables Laravel cache method for - // storing cache values between requests + // Storing cache values between requests. 'cache' => false, ], - // Activate compass when environment is NOT local + // Activate compass when environment is NOT local. 'compass_in_production' => false, 'media' => [ // The allowed mimetypes to be uploaded through the media-manager. - // 'allowed_mimetypes' => '*', //All types can be uploaded 'allowed_mimetypes' => [ 'image/jpeg', 'image/png', @@ -241,21 +243,5 @@ return [ 'allow_delete' => true, 'allow_create_folder' => true, 'allow_rename' => true, - /* - 'watermark' => [ - 'source' => 'watermark.png', - 'position' => 'bottom-left', - 'x' => 0, - 'y' => 0, - 'size' => 15, - ], - 'thumbnails' => [ - [ - 'type' => 'fit', - 'name' => 'fit-500', - 'width' => 500, - 'height'=> 500 - ], - ]*/ ], ]; diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index e48ec598..c244bbb7 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -22,7 +22,6 @@ class UserFactory extends Factory 'email' => $this->faker->unique()->safeEmail(), 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', -// password 'remember_token' => Str::random(10), ]; } @@ -34,7 +33,7 @@ class UserFactory extends Factory */ public function unverified() { - return $this->state(function (array $attributes) { + return $this->state(function () { return [ 'email_verified_at' => null, ]; diff --git a/dev-docker-compose.yml b/dev-docker-compose.yml index 07787ab3..89b4668c 100644 --- a/dev-docker-compose.yml +++ b/dev-docker-compose.yml @@ -1,42 +1,33 @@ version: '3.3' services: - apache-php: + apachephp: restart: always - image: 'registry.ldc.fr/ldcweb_env/ldcweb_env/ldcweb-local:2.7' + image: $IMAGE environment: - - PROJECT=nature-and-respect-de - - SERVERNAME=${PROJECT}-${BRANCH}.s-web.loc + - PROJECT=$PROJECT + - SERVERNAME=$SERVERNAME - DOCUMENTROOT=srcs/public volumes: - - ./:/app/srcs - - ../logs:/app/logs - - ../tmp:/app/tmp + - ./.env:/app/srcs/.env + - ./storage:/app/srcs/storage + - ./logs:/app/logs + - ./tmp:/app/tmp labels: - "traefik.enable=true" - - "traefik.http.routers.${PROJECT}-${BRANCH}-secure.entrypoints=websecure" - - "traefik.http.routers.${PROJECT}-${BRANCH}-secure.rule=Host(`${SERVERNAME}`)" - - "traefik.http.routers.${PROJECT}-${BRANCH}-secure.tls=true" - - "traefik.http.routers.${PROJECT}-${BRANCH}-secure.service=apache-php-${PROJECT}-${BRANCH}" - - "traefik.http.services.apache-php-${PROJECT}-${BRANCH}.loadbalancer.server.port=80" + - "traefik.http.routers.${PROJECT}-${COMMITSHA}-secure.entrypoints=websecure" + - "traefik.http.routers.${PROJECT}-${COMMITSHA}-secure.rule=Host(`${SERVERNAME}`)" + - "traefik.http.routers.${PROJECT}-${COMMITSHA}-secure.tls=true" + - "traefik.http.routers.${PROJECT}-${COMMITSHA}-secure.service=apache-php-${PROJECT}-${COMMITSHA}" + - "traefik.http.services.apache-php-${PROJECT}-${COMMITSHA}.loadbalancer.server.port=80" - - "traefik.http.routers.xdebug-${PROJECT}-${BRANCH}.entrypoints=xdebug" - - "traefik.http.routers.xdebug-${PROJECT}-${BRANCH}.rule=Host(`xdebug-${SERVERNAME}`)" - - "traefik.http.routers.xdebug-${PROJECT}-${BRANCH}.service=xdebug-${PROJECT}-${BRANCH}" - - "traefik.http.services.xdebug-${PROJECT}-${BRANCH}.loadbalancer.server.port=9003" + - "traefik.http.routers.xdebug-${PROJECT}-${COMMITSHA}.entrypoints=xdebug" + - "traefik.http.routers.xdebug-${PROJECT}-${COMMITSHA}.rule=Host(`xdebug-${SERVERNAME}`)" + - "traefik.http.routers.xdebug-${PROJECT}-${COMMITSHA}.service=xdebug-${PROJECT}-${COMMITSHA}" + - "traefik.http.services.xdebug-${PROJECT}-${COMMITSHA}.loadbalancer.server.port=9003" networks: - ldcweb-dev-stack-network - dev-mariadb: - container_name: dev-mariadb-${PROJECT}-${BRANCH} - restart: always - image: mariadb:10.4.22 - environment: - - MARIADB_ROOT_PASSWORD=secret - labels: - - "traefik.enable=false" - networks: ldcweb-dev-stack-network: - external: true - name: ldcweb-dev-stack-network \ No newline at end of file + external: true \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 688b5e97..1e9515b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,12 @@ "jshint": "^2.13.4" }, "devDependencies": { + "@splidejs/splide": "^4.1.4", "axios": "^0.21", + "clean-webpack-plugin": "^4.0.0", "laravel-mix": "^6.0.6", + "laravel-mix-clean": "^0.1.0", + "laravel-mix-polyfill": "^3.0.1", "lodash": "^4.17.19", "postcss": "^8.1.14", "resolve-url-loader": "^5.0.0", @@ -1786,6 +1790,12 @@ "node": ">= 8" } }, + "node_modules/@splidejs/splide": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@splidejs/splide/-/splide-4.1.4.tgz", + "integrity": "sha512-5I30evTJcAJQXt6vJ26g2xEkG+l1nXcpEw4xpKh0/FWQ8ozmAeTbtniVtVmz2sH1Es3vgfC4SS8B2X4o5JMptA==", + "dev": true + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -2505,6 +2515,15 @@ "node": ">=8" } }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -3155,6 +3174,21 @@ "node": ">=0.10.0" } }, + "node_modules/clean-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", + "dev": true, + "dependencies": { + "del": "^4.1.1" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": ">=4.0.0 <6.0.0" + } + }, "node_modules/cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", @@ -3423,6 +3457,17 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "node_modules/core-js": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-js-compat": { "version": "3.22.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.1.tgz", @@ -3892,6 +3937,73 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -5568,6 +5680,39 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", @@ -5845,6 +5990,25 @@ "webpack-cli": "^4.9.1" } }, + "node_modules/laravel-mix-clean": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/laravel-mix-clean/-/laravel-mix-clean-0.1.0.tgz", + "integrity": "sha512-iOgVELzL0zJ2SNEVEmzCoduZ7tBQNWa/ViWXSTg9Z2QVK05Sld2efzTybR82Lu6ohZaA4btr+KsBBw7kt8aqTQ==", + "dev": true + }, + "node_modules/laravel-mix-polyfill": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/laravel-mix-polyfill/-/laravel-mix-polyfill-3.0.1.tgz", + "integrity": "sha512-05Oldnhek6jkg9JMl7Nf/qnkwuTOlwR7DLFWntfy98QOx5o/ipmnsayP9qVTxdLZNcBRuMz6Agt9fxZdO2AUJw==", + "dev": true, + "dependencies": { + "core-js": "^2.6.9 || ^3.1.4", + "regenerator-runtime": "^0.13.2" + }, + "peerDependencies": { + "laravel-mix": "^6.0.0" + } + }, "node_modules/lilconfig": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", @@ -6535,6 +6699,15 @@ "node": ">=8" } }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/p-pipe": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", @@ -6670,6 +6843,12 @@ "node": ">=0.10.0" } }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -6734,6 +6913,36 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -10787,6 +10996,12 @@ "fastq": "^1.6.0" } }, + "@splidejs/splide": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@splidejs/splide/-/splide-4.1.4.tgz", + "integrity": "sha512-5I30evTJcAJQXt6vJ26g2xEkG+l1nXcpEw4xpKh0/FWQ8ozmAeTbtniVtVmz2sH1Es3vgfC4SS8B2X4o5JMptA==", + "dev": true + }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -11258,8 +11473,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true, - "requires": {} + "dev": true }, "@webpack-cli/info": { "version": "1.4.1", @@ -11274,8 +11488,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true, - "requires": {} + "dev": true }, "@xtuc/ieee754": { "version": "1.2.0", @@ -11377,8 +11590,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "alpinejs": { "version": "3.10.2", @@ -11437,6 +11649,12 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -11948,6 +12166,15 @@ } } }, + "clean-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", + "dev": true, + "requires": { + "del": "^4.1.1" + } + }, "cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", @@ -12167,6 +12394,12 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "core-js": { + "version": "3.26.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", + "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", + "dev": true + }, "core-js-compat": { "version": "3.22.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.1.tgz", @@ -12288,8 +12521,7 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", - "dev": true, - "requires": {} + "dev": true }, "css-loader": { "version": "5.2.7", @@ -12462,8 +12694,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} + "dev": true }, "csso": { "version": "4.2.0", @@ -12519,6 +12750,62 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -13625,8 +13912,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} + "dev": true }, "ieee754": { "version": "1.2.1", @@ -13801,6 +14087,30 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, "is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", @@ -14007,6 +14317,22 @@ "yargs": "^17.2.1" } }, + "laravel-mix-clean": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/laravel-mix-clean/-/laravel-mix-clean-0.1.0.tgz", + "integrity": "sha512-iOgVELzL0zJ2SNEVEmzCoduZ7tBQNWa/ViWXSTg9Z2QVK05Sld2efzTybR82Lu6ohZaA4btr+KsBBw7kt8aqTQ==", + "dev": true + }, + "laravel-mix-polyfill": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/laravel-mix-polyfill/-/laravel-mix-polyfill-3.0.1.tgz", + "integrity": "sha512-05Oldnhek6jkg9JMl7Nf/qnkwuTOlwR7DLFWntfy98QOx5o/ipmnsayP9qVTxdLZNcBRuMz6Agt9fxZdO2AUJw==", + "dev": true, + "requires": { + "core-js": "^2.6.9 || ^3.1.4", + "regenerator-runtime": "^0.13.2" + } + }, "lilconfig": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", @@ -14550,6 +14876,12 @@ "p-limit": "^2.2.0" } }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, "p-pipe": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", @@ -14655,6 +14987,12 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -14704,6 +15042,27 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -14781,29 +15140,25 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-js": { "version": "4.0.0", @@ -14901,8 +15256,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -14946,8 +15300,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "requires": {} + "dev": true }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -16400,8 +16753,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} + "dev": true }, "schema-utils": { "version": "3.1.1", @@ -16676,8 +17028,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "requires": {} + "dev": true }, "xtend": { "version": "4.0.2", diff --git a/package.json b/package.json index 094af4d4..1e2ca389 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,12 @@ "production": "mix --production" }, "devDependencies": { + "@splidejs/splide": "^4.1.4", "axios": "^0.21", + "clean-webpack-plugin": "^4.0.0", "laravel-mix": "^6.0.6", + "laravel-mix-clean": "^0.1.0", + "laravel-mix-polyfill": "^3.0.1", "lodash": "^4.17.19", "postcss": "^8.1.14", "resolve-url-loader": "^5.0.0", diff --git a/public/css/app.css b/public/css/app.css deleted file mode 100644 index 595c17c5..00000000 --- a/public/css/app.css +++ /dev/null @@ -1,3010 +0,0 @@ -/* -! tailwindcss v3.0.24 | MIT License | https://tailwindcss.com -*//* -1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) -2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) -*/ - -*, -::before, -::after { - box-sizing: border-box; /* 1 */ - border-width: 0; /* 2 */ - border-style: solid; /* 2 */ - border-color: #e5e7eb; /* 2 */ -} - -::before, -::after { - --tw-content: ''; -} - -/* -1. Use a consistent sensible line-height in all browsers. -2. Prevent adjustments of font size after orientation changes in iOS. -3. Use a more readable tab size. -4. Use the user's configured `sans` font-family by default. -*/ - -html { - line-height: 1.5; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ - -moz-tab-size: 4; /* 3 */ - -o-tab-size: 4; - tab-size: 4; /* 3 */ - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */ -} - -/* -1. Remove the margin in all browsers. -2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. -*/ - -body { - margin: 0; /* 1 */ - line-height: inherit; /* 2 */ -} - -/* -1. Add the correct height in Firefox. -2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) -3. Ensure horizontal rules are visible by default. -*/ - -hr { - height: 0; /* 1 */ - color: inherit; /* 2 */ - border-top-width: 1px; /* 3 */ -} - -/* -Add the correct text decoration in Chrome, Edge, and Safari. -*/ - -abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; -} - -/* -Remove the default font size and weight for headings. -*/ - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} - -/* -Reset links to optimize for opt-in styling instead of opt-out. -*/ - -a { - color: inherit; - text-decoration: inherit; -} - -/* -Add the correct font weight in Edge and Safari. -*/ - -b, -strong { - font-weight: bolder; -} - -/* -1. Use the user's configured `mono` font family by default. -2. Correct the odd `em` font sizing in all browsers. -*/ - -code, -kbd, -samp, -pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", 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; -} - -/* -1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) -2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) -3. Remove gaps between table borders by default. -*/ - -table { - text-indent: 0; /* 1 */ - border-color: inherit; /* 2 */ - border-collapse: collapse; /* 3 */ -} - -/* -1. Change the font styles in all browsers. -2. Remove the margin in Firefox and Safari. -3. Remove default padding in all browsers. -*/ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: inherit; /* 1 */ - color: inherit; /* 1 */ - margin: 0; /* 2 */ - padding: 0; /* 3 */ -} - -/* -Remove the inheritance of text transform in Edge and Firefox. -*/ - -button, -select { - text-transform: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Remove default button styles. -*/ - -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; /* 1 */ - background-color: transparent; /* 2 */ - background-image: none; /* 2 */ -} - -/* -Use the modern Firefox focus style for all focusable elements. -*/ - -:-moz-focusring { - outline: auto; -} - -/* -Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) -*/ - -:-moz-ui-invalid { - box-shadow: none; -} - -/* -Add the correct vertical alignment in Chrome and Firefox. -*/ - -progress { - vertical-align: baseline; -} - -/* -Correct the cursor style of increment and decrement buttons in Safari. -*/ - -::-webkit-inner-spin-button, -::-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. -*/ - -::-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 */ -} - -/* -Add the correct display in Chrome and Safari. -*/ - -summary { - display: list-item; -} - -/* -Removes the default spacing and border for appropriate elements. -*/ - -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} - -fieldset { - margin: 0; - padding: 0; -} - -legend { - padding: 0; -} - -ol, -ul, -menu { - list-style: none; - margin: 0; - padding: 0; -} - -/* -Prevent resizing textareas horizontally by default. -*/ - -textarea { - resize: vertical; -} - -/* -1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) -2. Set the default placeholder color to the user's configured gray 400 color. -*/ - -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; /* 1 */ - color: #9ca3af; /* 2 */ -} - -input:-ms-input-placeholder, textarea:-ms-input-placeholder { - opacity: 1; /* 1 */ - color: #9ca3af; /* 2 */ -} - -input::placeholder, -textarea::placeholder { - opacity: 1; /* 1 */ - color: #9ca3af; /* 2 */ -} - -/* -Set the default cursor for buttons. -*/ - -button, -[role="button"] { - cursor: pointer; -} - -/* -Make sure disabled buttons don't get the pointer cursor. -*/ -:disabled { - cursor: default; -} - -/* -1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) -2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) - This can trigger a poorly considered lint error in some tools but is included by design. -*/ - -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; /* 1 */ - vertical-align: middle; /* 2 */ -} - -/* -Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) -*/ - -img, -video { - max-width: 100%; - height: auto; -} - -/* -Ensure the default browser behavior of the `hidden` attribute. -*/ - -[hidden] { - display: none; -} - -*, ::before, ::after { - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; -} -.container { - width: 100%; -} -@media (min-width: 640px) { - - .container { - max-width: 640px; - } -} -@media (min-width: 768px) { - - .container { - max-width: 768px; - } -} -@media (min-width: 1024px) { - - .container { - max-width: 1024px; - } -} -@media (min-width: 1280px) { - - .container { - max-width: 1280px; - } -} -@media (min-width: 1536px) { - - .container { - max-width: 1536px; - } -} -.fixed { - position: fixed; -} -.absolute { - position: absolute; -} -.relative { - position: relative; -} -.top-0 { - top: 0px; -} -.right-0 { - right: 0px; -} -.left-0 { - left: 0px; -} -.bottom-0 { - bottom: 0px; -} -.top-4 { - top: 1rem; -} -.right-4 { - right: 1rem; -} -.-bottom-6 { - bottom: -1.5rem; -} -.right-6 { - right: 1.5rem; -} -.bottom-\[20px\] { - bottom: 20px; -} -.-bottom-\[20px\] { - bottom: -20px; -} -.left-\[15px\] { - left: 15px; -} -.right-8 { - right: 2rem; -} -.top-\[8px\] { - top: 8px; -} -.-top-\[3vw\] { - top: -3vw; -} -.right-2 { - right: 0.5rem; -} -.-top-\[35px\] { - top: -35px; -} -.-top-16 { - top: -4rem; -} -.right-10 { - right: 2.5rem; -} -.top-\[16px\] { - top: 16px; -} -.top-2 { - top: 0.5rem; -} -.bottom-8 { - bottom: 2rem; -} -.-bottom-3 { - bottom: -0.75rem; -} -.-bottom-4 { - bottom: -1rem; -} -.left-2 { - left: 0.5rem; -} -.-bottom-1 { - bottom: -0.25rem; -} -.top-6 { - top: 1.5rem; -} -.left-4 { - left: 1rem; -} -.-top-\[140px\] { - top: -140px; -} -.-top-20 { - top: -5rem; -} -.-right-4 { - right: -1rem; -} -.top-\[20\%\] { - top: 20%; -} -.bottom-2 { - bottom: 0.5rem; -} -.z-\[200\] { - z-index: 200; -} -.z-\[300\] { - z-index: 300; -} -.z-\[120\] { - z-index: 120; -} -.z-20 { - z-index: 20; -} -.z-\[150\] { - z-index: 150; -} -.z-10 { - z-index: 10; -} -.order-1 { - order: 1; -} -.order-2 { - order: 2; -} -.order-4 { - order: 4; -} -.order-3 { - order: 3; -} -.order-5 { - order: 5; -} -.order-6 { - order: 6; -} -.order-8 { - order: 8; -} -.order-7 { - order: 7; -} -.order-9 { - order: 9; -} -.order-10 { - order: 10; -} -.col-span-2 { - grid-column: span 2 / span 2; -} -.mx-auto { - margin-left: auto; - margin-right: auto; -} -.my-2 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} -.my-24 { - margin-top: 6rem; - margin-bottom: 6rem; -} -.ml-6 { - margin-left: 1.5rem; -} -.mb-2 { - margin-bottom: 0.5rem; -} -.mr-6 { - margin-right: 1.5rem; -} -.mb-4 { - margin-bottom: 1rem; -} -.mt-2 { - margin-top: 0.5rem; -} -.ml-1 { - margin-left: 0.25rem; -} -.mr-2 { - margin-right: 0.5rem; -} -.ml-2 { - margin-left: 0.5rem; -} -.mt-4 { - margin-top: 1rem; -} -.ml-4 { - margin-left: 1rem; -} -.mt-8 { - margin-top: 2rem; -} -.ml-12 { - margin-left: 3rem; -} -.-mt-px { - margin-top: -1px; -} -.mb-12 { - margin-bottom: 3rem; -} -.mt-3 { - margin-top: 0.75rem; -} -.mt-12 { - margin-top: 3rem; -} -.mb-28 { - margin-bottom: 7rem; -} -.mb-24 { - margin-bottom: 6rem; -} -.mt-32 { - margin-top: 8rem; -} -.mt-\[87px\] { - margin-top: 87px; -} -.mr-4 { - margin-right: 1rem; -} -.mr-1 { - margin-right: 0.25rem; -} -.mr-0 { - margin-right: 0px; -} -.ml-\[36px\] { - margin-left: 36px; -} -.mt-16 { - margin-top: 4rem; -} -.ml-5 { - margin-left: 1.25rem; -} -.mr-3 { - margin-right: 0.75rem; -} -.mb-8 { - margin-bottom: 2rem; -} -.mb-6 { - margin-bottom: 1.5rem; -} -.mt-24 { - margin-top: 6rem; -} -.mb-16 { - margin-bottom: 4rem; -} -.mt-6 { - margin-top: 1.5rem; -} -.-mb-5 { - margin-bottom: -1.25rem; -} -.mt-1 { - margin-top: 0.25rem; -} -.mb-0 { - margin-bottom: 0px; -} -.mt-10 { - margin-top: 2.5rem; -} -.mb-3 { - margin-bottom: 0.75rem; -} -.ml-auto { - margin-left: auto; -} -.mr-10 { - margin-right: 2.5rem; -} -.mt-48 { - margin-top: 12rem; -} -.mr-\[10\%\] { - margin-right: 10%; -} -.mr-8 { - margin-right: 2rem; -} -.mb-20 { - margin-bottom: 5rem; -} -.mr-20 { - margin-right: 5rem; -} -.mt-5 { - margin-top: 1.25rem; -} -.block { - display: block; -} -.inline-block { - display: inline-block; -} -.inline { - display: inline; -} -.flex { - display: flex; -} -.inline-flex { - display: inline-flex; -} -.table { - display: table; -} -.grid { - display: grid; -} -.hidden { - display: none; -} -.h-5 { - height: 1.25rem; -} -.h-8 { - height: 2rem; -} -.h-16 { - height: 4rem; -} -.h-screen { - height: 100vh; -} -.h-10 { - height: 2.5rem; -} -.h-\[99px\] { - height: 99px; -} -.h-full { - height: 100%; -} -.h-\[87px\] { - height: 87px; -} -.h-\[30px\] { - height: 30px; -} -.h-\[45px\] { - height: 45px; -} -.h-\[40px\] { - height: 40px; -} -.h-28 { - height: 7rem; -} -.h-\[700px\] { - height: 700px; -} -.h-12 { - height: 3rem; -} -.min-h-screen { - min-height: 100vh; -} -.min-h-\[6rem\] { - min-height: 6rem; -} -.min-h-\[100px\] { - min-height: 100px; -} -.w-max { - width: -webkit-max-content; - width: -moz-max-content; - width: max-content; -} -.w-5 { - width: 1.25rem; -} -.w-8 { - width: 2rem; -} -.w-auto { - width: auto; -} -.w-full { - width: 100%; -} -.w-screen { - width: 100vw; -} -.w-10 { - width: 2.5rem; -} -.w-12 { - width: 3rem; -} -.w-\[120px\] { - width: 120px; -} -.w-\[100px\] { - width: 100px; -} -.w-16 { - width: 4rem; -} -.w-4 { - width: 1rem; -} -.w-24 { - width: 6rem; -} -.w-6 { - width: 1.5rem; -} -.w-28 { - width: 7rem; -} -.w-\[49\%\] { - width: 49%; -} -.w-40 { - width: 10rem; -} -.w-\[280px\] { - width: 280px; -} -.w-\[250px\] { - width: 250px; -} -.w-64 { - width: 16rem; -} -.w-\[300px\] { - width: 300px; -} -.max-w-6xl { - max-width: 72rem; -} -.max-w-xl { - max-width: 36rem; -} -.max-w-7xl { - max-width: 80rem; -} -.max-w-sm { - max-width: 24rem; -} -.max-w-\[200px\] { - max-width: 200px; -} -.max-w-screen-2xl { - max-width: 1536px; -} -.max-w-md { - max-width: 28rem; -} -.max-w-\[220px\] { - max-width: 220px; -} -.max-w-2xl { - max-width: 42rem; -} -.max-w-\[47rem\] { - max-width: 47rem; -} -.max-w-\[260px\] { - max-width: 260px; -} -.max-w-\[692px\] { - max-width: 692px; -} -.max-w-\[90\%\] { - max-width: 90%; -} -.max-w-\[430px\] { - max-width: 430px; -} -.max-w-\[80px\] { - max-width: 80px; -} -.transform { - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} -.cursor-custom { - cursor: url(/images/cursor.svg) , pointer; -} -.cursor-pointer { - cursor: pointer; -} -.appearance-none { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} -.grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); -} -.grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); -} -.flex-row { - flex-direction: row; -} -.flex-col { - flex-direction: column; -} -.flex-wrap { - flex-wrap: wrap; -} -.content-center { - align-content: center; -} -.items-center { - align-items: center; -} -.justify-center { - justify-content: center; -} -.gap-0 { - gap: 0px; -} -.gap-10 { - gap: 2.5rem; -} -.gap-16 { - gap: 4rem; -} -.gap-8 { - gap: 2rem; -} -.gap-3 { - gap: 0.75rem; -} -.gap-4 { - gap: 1rem; -} -.overflow-hidden { - overflow: hidden; -} -.overflow-x-hidden { - overflow-x: hidden; -} -.scroll-smooth { - scroll-behavior: smooth; -} -.rounded-3xl { - border-radius: 0.9375rem; -} -.rounded-xl { - border-radius: 0.6890624761581421rem; -} -.rounded-t-3xl { - border-top-left-radius: 0.9375rem; - border-top-right-radius: 0.9375rem; -} -.border { - border-width: 1px; -} -.border-t { - border-top-width: 1px; -} -.border-b-2 { - border-bottom-width: 2px; -} -.border-dashed { - border-style: dashed; -} -.border-gray-200 { - --tw-border-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-border-opacity)); -} -.bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} -.bg-black { - --tw-bg-opacity: 1; - background-color: rgb(0 0 0 / var(--tw-bg-opacity)); -} -.bg-weiss { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} -.bg-hellgrau { - --tw-bg-opacity: 1; - background-color: rgb(251 251 251 / var(--tw-bg-opacity)); -} -.bg-braun { - --tw-bg-opacity: 1; - background-color: rgb(95 40 45 / var(--tw-bg-opacity)); -} -.bg-orange { - --tw-bg-opacity: 1; - background-color: rgb(240 165 0 / var(--tw-bg-opacity)); -} -.bg-transparent { - background-color: transparent; -} -.bg-hellgruen { - --tw-bg-opacity: 1; - background-color: rgb(180 190 0 / var(--tw-bg-opacity)); -} -.bg-blau { - --tw-bg-opacity: 1; - background-color: rgb(95 155 210 / var(--tw-bg-opacity)); -} -.bg-weinrot { - --tw-bg-opacity: 1; - background-color: rgb(165 25 60 / var(--tw-bg-opacity)); -} -.bg-opacity-90 { - --tw-bg-opacity: 0.9; -} -.bg-\[url\(\'\/storage\/assets\/Elemente\/bg-rezept-header\.png\'\)\] { - background-image: url('/storage/assets/Elemente/bg-rezept-header.png'); -} -.bg-\[url\(\'\/storage\/assets\/Bilder\/background-paper\.jpg\'\)\] { - background-image: url('/storage/assets/Bilder/background-paper.jpg'); -} -.bg-\[url\(\/storage\/assets\/Gestaltungselemente-path\/Trennlinie-path-notext\.svg\)\] { - background-image: url(/storage/assets/Gestaltungselemente-path/Trennlinie-path-notext.svg); -} -.bg-\[url\(\'\/storage\/assets\/Bilder\/home-lust-auf-kochen\.jpg\'\)\] { - background-image: url('/storage/assets/Bilder/home-lust-auf-kochen.jpg'); -} -.bg-\[url\(\'\/storage\/assets\/Gestaltungselemente-path\/home-rezepte-path\.svg\'\)\] { - background-image: url('/storage/assets/Gestaltungselemente-path/home-rezepte-path.svg'); -} -.bg-produkt-aktionsstoerer { - background-image: url('/storage/assets/Icons/produkt-aktionsstoerer.svg'); -} -.bg-cover { - background-size: cover; -} -.bg-\[length\:100\%_100\%\] { - background-size: 100% 100%; -} -.bg-right-top { - background-position: right top; -} -.bg-no-repeat { - background-repeat: no-repeat; -} -.object-contain { - -o-object-fit: contain; - object-fit: contain; -} -.p-6 { - padding: 1.5rem; -} -.p-12 { - padding: 3rem; -} -.p-0 { - padding: 0px; -} -.p-3 { - padding: 0.75rem; -} -.py-4 { - padding-top: 1rem; - padding-bottom: 1rem; -} -.px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; -} -.px-5 { - padding-left: 1.25rem; - padding-right: 1.25rem; -} -.px-4 { - padding-left: 1rem; - padding-right: 1rem; -} -.py-6 { - padding-top: 1.5rem; - padding-bottom: 1.5rem; -} -.px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; -} -.py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} -.py-1 { - padding-top: 0.25rem; - padding-bottom: 0.25rem; -} -.px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem; -} -.py-3 { - padding-top: 0.75rem; - padding-bottom: 0.75rem; -} -.py-0 { - padding-top: 0px; - padding-bottom: 0px; -} -.py-5 { - padding-top: 1.25rem; - padding-bottom: 1.25rem; -} -.py-16 { - padding-top: 4rem; - padding-bottom: 4rem; -} -.py-8 { - padding-top: 2rem; - padding-bottom: 2rem; -} -.pl-8 { - padding-left: 2rem; -} -.pt-2 { - padding-top: 0.5rem; -} -.pt-8 { - padding-top: 2rem; -} -.pb-16 { - padding-bottom: 4rem; -} -.pb-10 { - padding-bottom: 2.5rem; -} -.pt-16 { - padding-top: 4rem; -} -.pt-20 { - padding-top: 5rem; -} -.pb-12 { - padding-bottom: 3rem; -} -.pr-1 { - padding-right: 0.25rem; -} -.pl-2 { - padding-left: 0.5rem; -} -.pr-7 { - padding-right: 1.75rem; -} -.pl-6 { - padding-left: 1.5rem; -} -.pl-3 { - padding-left: 0.75rem; -} -.pl-1 { - padding-left: 0.25rem; -} -.pb-8 { - padding-bottom: 2rem; -} -.pl-4 { - padding-left: 1rem; -} -.pt-\[5\%\] { - padding-top: 5%; -} -.pr-\[24\%\] { - padding-right: 24%; -} -.pb-4 { - padding-bottom: 1rem; -} -.pr-8 { - padding-right: 2rem; -} -.pb-0 { - padding-bottom: 0px; -} -.pt-40 { - padding-top: 10rem; -} -.pb-40 { - padding-bottom: 10rem; -} -.pt-10 { - padding-top: 2.5rem; -} -.pr-10 { - padding-right: 2.5rem; -} -.pb-3 { - padding-bottom: 0.75rem; -} -.pt-12 { - padding-top: 3rem; -} -.pb-6 { - padding-bottom: 1.5rem; -} -.pt-6 { - padding-top: 1.5rem; -} -.pl-0 { - padding-left: 0px; -} -.pb-\[20px\] { - padding-bottom: 20px; -} -.text-left { - text-align: left; -} -.text-center { - text-align: center; -} -.text-right { - text-align: right; -} -.font-hobo { - font-family: hobo-std, sans-serif; -} -.font-scarletwood { - font-family: scarlet-wood, sans-serif; -} -.font-roboto { - font-family: Roboto, sans-serif; -} -.font-robotobold { - font-family: Roboto Bold, sans-serif; -} -.text-sm { - font-size: 0.875rem; - line-height: 1.25rem; -} -.text-lg { - font-size: 1.125rem; - line-height: 1.75rem; -} -.text-h2-sm { - font-size: 20px; - line-height: 25px; -} -.text-h3 { - font-size: 31px; - line-height: 36px; -} -.text-size-17 { - font-size: 17px; - line-height: 21px; -} -.text-h3-md { - font-size: 22px; - line-height: 26px; -} -.text-h2-md { - font-size: 28px; - line-height: 32px; -} -.text-\[100px\] { - font-size: 100px; -} -.text-p { - font-size: 15px; - line-height: 20px; -} -.text-p-lg { - font-size: 21px; - line-height: 28px; -} -.text-size-19 { - font-size: 19px; - line-height: 23px; -} -.text-small { - font-size: 13px; - line-height: 17px; -} -.text-h1-md { - font-size: 40px; - line-height: 48px; -} -.text-h1-sm { - font-size: 30px; - line-height: 38px; -} -.text-p2 { - font-size: 15px; - line-height: 26px; -} -.text-p-2xl { - font-size: 32px; - line-height: 32px; -} -.font-semibold { - font-weight: 600; -} -.font-bold { - font-weight: 700; -} -.uppercase { - text-transform: uppercase; -} -.leading-\[180\%\] { - line-height: 180%; -} -.leading-7 { - line-height: 1.75rem; -} -.leading-\[100px\] { - line-height: 100px; -} -.text-gray-200 { - --tw-text-opacity: 1; - color: rgb(229 231 235 / var(--tw-text-opacity)); -} -.text-gray-300 { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} -.text-gray-400 { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} -.text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} -.text-gray-600 { - --tw-text-opacity: 1; - color: rgb(75 85 99 / var(--tw-text-opacity)); -} -.text-gray-700 { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); -} -.text-gray-900 { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); -} -.text-braun { - --tw-text-opacity: 1; - color: rgb(95 40 45 / var(--tw-text-opacity)); -} -.text-weiss { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} -.text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} -.text-hellgruen { - --tw-text-opacity: 1; - color: rgb(180 190 0 / var(--tw-text-opacity)); -} -.text-orange { - --tw-text-opacity: 1; - color: rgb(240 165 0 / var(--tw-text-opacity)); -} -.text-blau { - --tw-text-opacity: 1; - color: rgb(95 155 210 / var(--tw-text-opacity)); -} -.text-weinrot { - --tw-text-opacity: 1; - color: rgb(165 25 60 / var(--tw-text-opacity)); -} -.underline { - -webkit-text-decoration-line: underline; - text-decoration-line: underline; -} -.antialiased { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.placeholder-weiss::-moz-placeholder { - --tw-placeholder-opacity: 1; - color: rgb(255 255 255 / var(--tw-placeholder-opacity)); -} -.placeholder-weiss:-ms-input-placeholder { - --tw-placeholder-opacity: 1; - color: rgb(255 255 255 / var(--tw-placeholder-opacity)); -} -.placeholder-weiss::placeholder { - --tw-placeholder-opacity: 1; - color: rgb(255 255 255 / var(--tw-placeholder-opacity)); -} -#legal { - margin-bottom: 8rem; - --tw-text-opacity: 1; - color: rgb(95 40 45 / var(--tw-text-opacity)); -} - -#legal h2 { - margin-top: 3rem; - margin-bottom: 0.5rem; - font-family: scarlet-wood, sans-serif; - font-size: 28px; - line-height: 32px; -} - -@media (min-width: 1024px) { - - #legal h2 { - font-size: 34px; - line-height: 38px; - } -} - -@media (min-width: 1280px) { - - #legal h2 { - font-size: 42px; - line-height: 48px; - } -} - -#legal p { - margin-bottom: 1rem; -} - -#legal ul { - margin-bottom: 1rem; - list-style-type: disc; - list-style-position: inside; -} - -#legal ul li { - margin-bottom: 1rem; -} - -[x-cloak] { - display: none; -} - -.flowtext p { - margin-top: 0.75rem; -} - -/* Slider */ -.splide .splide__pagination { - left: 0.5em; - right: auto; - bottom: 0.8em; -} - -@media (min-width: 640px) { - .splide .splide__pagination { - right: 20vw; - left: auto; - bottom: 1.5em; - } -} -@media (min-width: 1000px) { - .splide .splide__pagination { - right: 22vw; - left: auto; - bottom: 1.5em; - } -} -@media (min-width: 1400px) { - .splide .splide__pagination { - right: 25vw; - left: auto; - bottom: 1.5em; - } -} -.splide__pagination button.splide__pagination__page { - background: #FFF; -} - -.splide__pagination button.splide__pagination__page.is-active { - background: #000; -} - -.splide__arrows svg { - fill: #FFFFFF; -} - -.splide__arrows .splide__arrow--prev { - left: 0; - background-color: transparent; -} - -.splide__arrows .splide__arrow--next { - right: 0; - background-color: transparent; -} - -@media (max-width: 500px) { - .splide__arrows .splide__arrow--prev { - top: 35vw; - } - - .splide__arrows .splide__arrow--next { - top: 35vw; - } -} -@media (min-width: 640px) { - .sliderleft:before { - content: ""; - display: block; - position: absolute; - z-index: 20; - height: 100%; - width: 20px; - right: 0; - background: url("/storage/assets/Gestaltungselemente-path/slider-path.svg") center left; - background-size: cover; - } -} -body, nav.main { - background: url("/storage/assets/Bilder/background-paper.jpg"); -} - -.check li { - padding: 0 0 0 30px; - position: relative; -} - -.check li:before { - position: absolute; - content: ""; - left: 0; - top: 3px; - background-image: url("/storage/assets/Icons/check.png"); - background-size: 20px; - background-repeat: no-repeat; - width: 20px; - height: 20px; - display: block; -} - -.qmask { - mask-image: url("/storage/assets/Gestaltungselemente-path/mask-quadratisch-bild-path.svg"); - mask-size: 100%; - -webkit-mask-image: url("/storage/assets/Gestaltungselemente-path/mask-quadratisch-bild-path.svg"); - -webkit-mask-size: 100%; -} - -.hmaskx { - mask-image: url("/storage/assets/Elemente/Unterkante-weiss-path.svg"); - -webkit-mask-size: 5%; - mask-size: 5%; - -webkit-mask-image: url("/storage/assets/Elemente/Unterkante-weiss-path.svg"); - -webkit-mask-size: 100%; - -webkit-mask-position: bottom; - mask-position: bottom; - -webkit-mask-repeat: no-repeat; - mask-repeat: no-repeat; -} - -.button { - background: url("/storage/assets/Gestaltungselemente-path/CTA-path.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; -} - -.button.green { - background: url("/storage/assets/Gestaltungselemente-path/CTA-path-green.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; -} - -.button.white { - background: url("/storage/assets/Gestaltungselemente-path/CTA-path-white.svg") center center no-repeat; - background-size: 100% 100%; -} - -.button.bordered { - background: url("/storage/assets/Gestaltungselemente-path/CTA-stroke-path-brown.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; -} - -.select.brown { - background: url("/storage/assets/Gestaltungselemente-path/CTA-path.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; -} - -.select.brown:after { - content: ""; - display: block; - background: url("/storage/assets/Icons/icon-dropbox-pfeil-weiss.svg") center center no-repeat; - background-size: 16px; - height: 20px; - width: 20px; - position: absolute; - right: 6px; - top: 12px; - pointer-events: none; -} - -.select.green { - background: url("/storage/assets/Gestaltungselemente-path/CTA-path-green.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; -} - -.select.green:after { - content: ""; - display: block; - background: url("/storage/assets/Icons/icon-dropbox-pfeil-braun.svg") center center no-repeat; - background-size: 16px; - height: 20px; - width: 20px; - position: absolute; - right: 6px; - top: 12px; - pointer-events: none; -} - -.select.bordered { - background: url("/storage/assets/Gestaltungselemente-path/CTA-stroke-path-brown.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; -} - -.select.bordered:after { - content: ""; - display: block; - background: url("/storage/assets/Icons/icon-dropbox-pfeil-braun.svg") center center no-repeat; - background-size: 16px; - height: 20px; - width: 20px; - position: absolute; - right: 6px; - top: 12px; - pointer-events: none; -} - -.select.white { - background: url("/storage/assets/Gestaltungselemente-path/CTA-path-white.svg") center center no-repeat; - background-size: 100% 100%; -} - -.select.white:after { - content: ""; - display: block; - background: url("/storage/assets/Icons/icon-dropbox-pfeil-braun.svg") center center no-repeat; - background-size: 16px; - height: 20px; - width: 20px; - position: absolute; - right: 6px; - top: 12px; - pointer-events: none; -} - -.bordered.white { - background: url("/storage/assets/Gestaltungselemente-path/CTA-stroke-path.svg") center center no-repeat; - background-size: 100% 100%; -} - -.bordered2.white { - background: url("/storage/assets/Gestaltungselemente-path/CTA-stroke-path2.svg") center center no-repeat; - background-size: 100% 100%; -} - -.select.image:before { - content: ""; - position: absolute; - top: 11px; - left: 10px; - width: 24px; - height: 24px; - background: url("/storage/assets/Icons/icon-frisch.svg") center left no-repeat; - background-size: 24px; -} - -.select.image.hahn:before { - content: ""; - position: absolute; - top: 11px; - left: 10px; - width: 24px; - height: 24px; - background: url("/storage/assets/Icons/picto-haehnchen.png") center left no-repeat; - background-size: 24px; -} - -.checkbox.brown { - background: url("/storage/assets/Gestaltungselemente-path/CTA-path.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; -} - -.checkbox.green { - background: url("/storage/assets/Gestaltungselemente-path/CTA-path-green.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; -} - -.checkbox.white { - background: url("/storage/assets/Gestaltungselemente-path/CTA-path-white.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; -} - -.bordered-box select { - outline: none; - position: absolute; - top: -20px; - left: -14px; -} - -.bordered-box.typ:before { - content: ""; - position: absolute; - top: -10px; - left: -12px; - width: 24px; - height: 24px; - background: url("/storage/assets/Icons/picto-haehnchen.png") center left no-repeat; - background-size: 24px; -} - -.bordered-box { - border: 25px solid transparent; - height: 40px; - -o-border-image: url("/storage/assets/Gestaltungselemente-path/CTA-stroke-path-brown.svg") 30; - border-image: url("/storage/assets/Gestaltungselemente-path/CTA-stroke-path-brown.svg") 30; - border-image-repeat: stretch; - min-width: 210px; -} - -/**/ -.check input + span { - background: url("/storage/assets/Gestaltungselemente-path/CTA-stroke-path-brown.svg") center center no-repeat; - background-size: 100% 100%; - height: 44px; - padding: 10px 15px; - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.check input:checked + span { - color: #ffffff; - background: url("/storage/assets/Gestaltungselemente-path/CTA-path-green.svg") center center no-repeat; - background-size: 100% 100%; -} - -/* -.check input:checked + span:before { - content: ""; - position: absolute; - top: -10px; - right: -10px; - display: block; - width: 20px; - height: 20px; - background: url('/storage/assets/Icons/icon-close.svg') center center no-repeat; -} -*/ -/* Standard Checkbox */ -.check-standard input + span { - background: url("/storage/assets/Icons/checkbox-unchecked.svg") left top no-repeat; - background-size: 22px; - display: block; - padding: 0px 5px 10px 28px; - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - color: #FFF; -} - -.check-standard input:checked + span { - background: url("/storage/assets/Icons/checkbox-checked.svg") left top no-repeat; - background-size: 22px; -} - -.okw, .oko, .okb, .okr { - position: relative; -} - -.okw:before, -.oko:before, -.okb:before, -.okr:before { - position: absolute; - top: -20px; - left: 0; - right: 0; - width: 100%; - content: ""; - background-size: 100% 100%; - height: 20px; - z-index: 100; -} - -/* -.okw:before { - background: url('/storage/assets/Elemente/Oberkante-weiss-path.svg') center center no-repeat; -} -*/ -/* -.oko:before { - background: url('/storage/assets/Elemente/Oberkante-orange-path.svg') center center no-repeat; -} -.okb:before { - background: url('/storage/assets/Elemente/Oberkante-blau-path.svg') center center no-repeat; -} -.okr:before { - background: url('/storage/assets/Elemente/Oberkante-rot-path.svg') center center no-repeat; -} -*/ -nav.main ul > li { - position: relative; -} - -nav.main ul > li:hover:before { - content: ""; - position: absolute; - display: block; - top: 3px; - left: -30px; - width: 22px; - height: 22px; - background: url("/storage/assets/Icons/picto-haehnchen.png") center center no-repeat; - background-size: 22px; -} - -@media (min-width: 768px) { - nav.main ul > li:hover:before { - top: 5px; - left: -37px; - width: 28px; - height: 28px; - background-size: 28px; - } -} -@media (min-width: 1024px) { - nav.main ul > li:hover:before { - top: 5px; - left: -42px; - width: 30px; - height: 30px; - background-size: 30px; - } -} -@media (min-width: 1280px) { - nav.main ul > li:hover:before { - top: 4px; - left: -45px; - width: 40px; - height: 40px; - background-size: 40px; - } -} -@media (min-width: 640px) { - nav.main ul ul { - display: none; - } - - nav.main ul li:hover ul { - display: block; - } -} -/* -@media (min-width: 640px) { - footer nav ul ul { - display: none; - } - footer nav ul li:hover ul { - display: block; - } -} -*/ -.entdecken { - position: relative; -} - -.entdecken:before { - position: absolute; - top: -20px; - left: 0; - right: 0; - content: ""; - background: url("/storage/assets/Elemente/Oberkante-gruen-path.svg") bottom center no-repeat; - background-size: 100% 100%; - height: 20px; - z-index: 100; -} - -#advantages h2, #marinade h2 { - margin-bottom: 1rem; - font-family: scarlet-wood, sans-serif; - font-size: 28px; - line-height: 32px; - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -@media (min-width: 1024px) { - - #advantages h2, #marinade h2 { - font-size: 34px; - line-height: 38px; - } -} - -@media (min-width: 1280px) { - - #advantages h2, #marinade h2 { - font-size: 42px; - line-height: 48px; - } -} - -#advantages li { - margin-bottom: 1rem; - padding: 0 0 0 30px; - position: relative; -} - -#advantages li:before { - position: absolute; - content: ""; - left: 0; - top: 3px; - background-image: url("/storage/assets/Icons/check.png"); - background-size: 20px; - width: 20px; - height: 20px; - display: block; -} - -#ingredients ul { - margin-left: 1.5rem; - list-style-type: disc; -} - -#ingredients li { - margin-bottom: 0.75rem; -} - -#zubereitung ol { - list-style-type: none; -} - -#zubereitung li { - margin-bottom: 1.5rem; - padding-left: 3.5rem; - padding-top: 4px; - counter-increment: step-counter; - position: relative; -} - -#zubereitung li::before { - position: absolute; - top: 0px; - left: 0px; - font-weight: 700; - content: counter(step-counter) "."; - font-family: "scarlet-wood"; - font-size: 150%; - color: #5f282d; -} - -.custom-counter { - list-style-type: none; -} - -.custom-counter li { - counter-increment: step-counter; - position: relative; - padding-left: 35px; - padding-top: 3px; -} - -.custom-counter li::before { - position: absolute; - top: 0; - left: 0; - content: counter(step-counter) "."; - font-family: "scarlet-wood"; - font-size: 150%; - font-weight: bold; - color: #5f282d; -} - -iframe:focus, iframe:focus-visible { - outline: none; -} - -.after\:pl-1::after { - content: var(--tw-content); - padding-left: 0.25rem; -} - -.after\:content-\[\'\/\'\]::after { - --tw-content: '/'; - content: var(--tw-content); -} - -.hover\:bg-produkt-aktionsstoerer-braun:hover { - background-image: url('/storage/assets/Icons/produkt-aktionsstoerer-braun.svg'); -} - -.hover\:pl-0:hover { - padding-left: 0px; -} - -.hover\:underline:hover { - -webkit-text-decoration-line: underline; - text-decoration-line: underline; -} - -@media (prefers-color-scheme: dark) { - - .dark\:border-gray-700 { - --tw-border-opacity: 1; - border-color: rgb(55 65 81 / var(--tw-border-opacity)); - } - - .dark\:bg-gray-900 { - --tw-bg-opacity: 1; - background-color: rgb(17 24 39 / var(--tw-bg-opacity)); - } - - .dark\:bg-gray-800 { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity)); - } - - .dark\:text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); - } - - .dark\:text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); - } - - .dark\:text-gray-400 { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); - } -} - -@media (min-width: 640px) { - - .sm\:absolute { - position: absolute; - } - - .sm\:top-0 { - top: 0px; - } - - .sm\:left-full { - left: 100%; - } - - .sm\:top-\[60px\] { - top: 60px; - } - - .sm\:-bottom-\[20px\] { - bottom: -20px; - } - - .sm\:left-\[80px\] { - left: 80px; - } - - .sm\:right-12 { - right: 3rem; - } - - .sm\:-top-\[40px\] { - top: -40px; - } - - .sm\:right-\[144px\] { - right: 144px; - } - - .sm\:top-\[34px\] { - top: 34px; - } - - .sm\:top-6 { - top: 1.5rem; - } - - .sm\:-bottom-4 { - bottom: -1rem; - } - - .sm\:-top-12 { - top: -3rem; - } - - .sm\:left-12 { - left: 3rem; - } - - .sm\:-bottom-2 { - bottom: -0.5rem; - } - - .sm\:-left-16 { - left: -4rem; - } - - .sm\:right-16 { - right: 4rem; - } - - .sm\:order-2 { - order: 2; - } - - .sm\:order-none { - order: 0; - } - - .sm\:col-span-4 { - grid-column: span 4 / span 4; - } - - .sm\:col-span-2 { - grid-column: span 2 / span 2; - } - - .sm\:col-span-3 { - grid-column: span 3 / span 3; - } - - .sm\:ml-0 { - margin-left: 0px; - } - - .sm\:mb-0 { - margin-bottom: 0px; - } - - .sm\:ml-\[40px\] { - margin-left: 40px; - } - - .sm\:mr-7 { - margin-right: 1.75rem; - } - - .sm\:mt-0 { - margin-top: 0px; - } - - .sm\:ml-auto { - margin-left: auto; - } - - .sm\:mt-24 { - margin-top: 6rem; - } - - .sm\:block { - display: block; - } - - .sm\:inline-block { - display: inline-block; - } - - .sm\:grid { - display: grid; - } - - .sm\:hidden { - display: none; - } - - .sm\:h-20 { - height: 5rem; - } - - .sm\:h-\[198px\] { - height: 198px; - } - - .sm\:h-\[44px\] { - height: 44px; - } - - .sm\:h-\[50px\] { - height: 50px; - } - - .sm\:w-\[240px\] { - width: 240px; - } - - .sm\:w-\[85px\] { - width: 85px; - } - - .sm\:w-\[130px\] { - width: 130px; - } - - .sm\:w-\[120px\] { - width: 120px; - } - - .sm\:w-24 { - width: 6rem; - } - - .sm\:w-\[340px\] { - width: 340px; - } - - .sm\:max-w-full { - max-width: 100%; - } - - .sm\:max-w-\[60\%\] { - max-width: 60%; - } - - .sm\:max-w-\[100px\] { - max-width: 100px; - } - - .sm\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .sm\:grid-cols-6 { - grid-template-columns: repeat(6, minmax(0, 1fr)); - } - - .sm\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - - .sm\:items-center { - align-items: center; - } - - .sm\:justify-start { - justify-content: flex-start; - } - - .sm\:justify-between { - justify-content: space-between; - } - - .sm\:gap-4 { - gap: 1rem; - } - - .sm\:gap-0 { - gap: 0px; - } - - .sm\:gap-6 { - gap: 1.5rem; - } - - .sm\:gap-5 { - gap: 1.25rem; - } - - .sm\:rounded-lg { - border-radius: 0.65625rem; - } - - .sm\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - - .sm\:py-4 { - padding-top: 1rem; - padding-bottom: 1rem; - } - - .sm\:px-8 { - padding-left: 2rem; - padding-right: 2rem; - } - - .sm\:py-6 { - padding-top: 1.5rem; - padding-bottom: 1.5rem; - } - - .sm\:pl-24 { - padding-left: 6rem; - } - - .sm\:pt-0 { - padding-top: 0px; - } - - .sm\:pb-0 { - padding-bottom: 0px; - } - - .sm\:pl-6 { - padding-left: 1.5rem; - } - - .sm\:pr-6 { - padding-right: 1.5rem; - } - - .sm\:pl-4 { - padding-left: 1rem; - } - - .sm\:pt-4 { - padding-top: 1rem; - } - - .sm\:pb-4 { - padding-bottom: 1rem; - } - - .sm\:pb-5 { - padding-bottom: 1.25rem; - } - - .sm\:pl-2 { - padding-left: 0.5rem; - } - - .sm\:pt-\[38px\] { - padding-top: 38px; - } - - .sm\:pr-\[132px\] { - padding-right: 132px; - } - - .sm\:pt-32 { - padding-top: 8rem; - } - - .sm\:pr-16 { - padding-right: 4rem; - } - - .sm\:text-left { - text-align: left; - } - - .sm\:text-right { - text-align: right; - } - - .sm\:text-h2-sm { - font-size: 20px; - line-height: 25px; - } - - .sm\:text-h2-sm2 { - font-size: 18px; - line-height: 22px; - } - - .sm\:text-p-lg { - font-size: 21px; - line-height: 28px; - } -} - -@media (min-width: 768px) { - - .md\:bottom-\[25px\] { - bottom: 25px; - } - - .md\:top-\[70px\] { - top: 70px; - } - - .md\:-bottom-\[25px\] { - bottom: -25px; - } - - .md\:left-\[110px\] { - left: 110px; - } - - .md\:-top-\[2vw\] { - top: -2vw; - } - - .md\:-bottom-5 { - bottom: -1.25rem; - } - - .md\:-left-28 { - left: -7rem; - } - - .md\:col-span-3 { - grid-column: span 3 / span 3; - } - - .md\:col-span-2 { - grid-column: span 2 / span 2; - } - - .md\:ml-12 { - margin-left: 3rem; - } - - .md\:ml-\[50px\] { - margin-left: 50px; - } - - .md\:grid { - display: grid; - } - - .md\:h-\[248px\] { - height: 248px; - } - - .md\:h-\[60px\] { - height: 60px; - } - - .md\:w-\[300px\] { - width: 300px; - } - - .md\:w-\[120px\] { - width: 120px; - } - - .md\:w-\[160px\] { - width: 160px; - } - - .md\:w-\[420px\] { - width: 420px; - } - - .md\:w-48 { - width: 12rem; - } - - .md\:max-w-\[43\%\] { - max-width: 43%; - } - - .md\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .md\:grid-cols-5 { - grid-template-columns: repeat(5, minmax(0, 1fr)); - } - - .md\:grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - - .md\:gap-4 { - gap: 1rem; - } - - .md\:gap-10 { - gap: 2.5rem; - } - - .md\:border-t-0 { - border-top-width: 0px; - } - - .md\:border-l { - border-left-width: 1px; - } - - .md\:p-0 { - padding: 0px; - } - - .md\:py-8 { - padding-top: 2rem; - padding-bottom: 2rem; - } - - .md\:pl-5 { - padding-left: 1.25rem; - } - - .md\:pr-10 { - padding-right: 2.5rem; - } - - .md\:pr-6 { - padding-right: 1.5rem; - } - - .md\:pb-\[25px\] { - padding-bottom: 25px; - } - - .md\:text-h3-md { - font-size: 22px; - line-height: 26px; - } - - .md\:text-h2-md { - font-size: 28px; - line-height: 32px; - } - - .md\:text-h3-lg { - font-size: 26px; - line-height: 30px; - } - - .md\:text-h2-sm { - font-size: 20px; - line-height: 25px; - } - - .md\:text-size-17 { - font-size: 17px; - line-height: 21px; - } - - .md\:text-h1-md { - font-size: 40px; - line-height: 48px; - } - - .md\:text-2xl { - font-size: 1.5rem; - line-height: 2rem; - } -} - -@media (min-width: 1024px) { - - .lg\:absolute { - position: absolute; - } - - .lg\:left-0 { - left: 0px; - } - - .lg\:right-auto { - right: auto; - } - - .lg\:bottom-\[30px\] { - bottom: 30px; - } - - .lg\:top-\[90px\] { - top: 90px; - } - - .lg\:-bottom-\[30px\] { - bottom: -30px; - } - - .lg\:left-\[130px\] { - left: 130px; - } - - .lg\:-top-\[1\.5vw\] { - top: -1.5vw; - } - - .lg\:-top-\[45px\] { - top: -45px; - } - - .lg\:-bottom-6 { - bottom: -1.5rem; - } - - .lg\:-top-\[70px\] { - top: -70px; - } - - .lg\:-top-16 { - top: -4rem; - } - - .lg\:-bottom-3 { - bottom: -0.75rem; - } - - .lg\:-top-4 { - top: -1rem; - } - - .lg\:order-1 { - order: 1; - } - - .lg\:order-2 { - order: 2; - } - - .lg\:col-span-1 { - grid-column: span 1 / span 1; - } - - .lg\:col-span-2 { - grid-column: span 2 / span 2; - } - - .lg\:mb-4 { - margin-bottom: 1rem; - } - - .lg\:ml-\[70px\] { - margin-left: 70px; - } - - .lg\:mt-32 { - margin-top: 8rem; - } - - .lg\:block { - display: block; - } - - .lg\:flex { - display: flex; - } - - .lg\:inline-flex { - display: inline-flex; - } - - .lg\:h-\[331px\] { - height: 331px; - } - - .lg\:w-\[400px\] { - width: 400px; - } - - .lg\:w-\[150px\] { - width: 150px; - } - - .lg\:w-\[210px\] { - width: 210px; - } - - .lg\:w-\[140px\] { - width: 140px; - } - - .lg\:w-32 { - width: 8rem; - } - - .lg\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - - .lg\:grid-cols-6 { - grid-template-columns: repeat(6, minmax(0, 1fr)); - } - - .lg\:gap-10 { - gap: 2.5rem; - } - - .lg\:px-8 { - padding-left: 2rem; - padding-right: 2rem; - } - - .lg\:py-8 { - padding-top: 2rem; - padding-bottom: 2rem; - } - - .lg\:pl-0 { - padding-left: 0px; - } - - .lg\:pl-16 { - padding-left: 4rem; - } - - .lg\:pr-16 { - padding-right: 4rem; - } - - .lg\:pt-12 { - padding-top: 3rem; - } - - .lg\:pl-8 { - padding-left: 2rem; - } - - .lg\:pb-\[30px\] { - padding-bottom: 30px; - } - - .lg\:text-h3-lg { - font-size: 26px; - line-height: 30px; - } - - .lg\:text-h2-lg { - font-size: 34px; - line-height: 38px; - } - - .lg\:text-h3 { - font-size: 31px; - line-height: 36px; - } - - .lg\:text-h2-md { - font-size: 28px; - line-height: 32px; - } - - .lg\:text-p-lg { - font-size: 21px; - line-height: 28px; - } - - .lg\:text-h1-lg { - font-size: 50px; - line-height: 58px; - } - - .lg\:text-small-lg { - font-size: 16px; - line-height: 22px; - } -} - -@media (min-width: 1280px) { - - .xl\:top-\[100px\] { - top: 100px; - } - - .xl\:-bottom-\[30px\] { - bottom: -30px; - } - - .xl\:left-\[160px\] { - left: 160px; - } - - .xl\:left-20 { - left: 5rem; - } - - .xl\:top-2 { - top: 0.5rem; - } - - .xl\:right-24 { - right: 6rem; - } - - .xl\:col-span-3 { - grid-column: span 3 / span 3; - } - - .xl\:ml-\[90px\] { - margin-left: 90px; - } - - .xl\:mt-0 { - margin-top: 0px; - } - - .xl\:grid { - display: grid; - } - - .xl\:h-\[388px\] { - height: 388px; - } - - .xl\:w-\[476px\] { - width: 476px; - } - - .xl\:w-\[180px\] { - width: 180px; - } - - .xl\:w-\[240px\] { - width: 240px; - } - - .xl\:w-64 { - width: 16rem; - } - - .xl\:grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - - .xl\:gap-4 { - gap: 1rem; - } - - .xl\:py-12 { - padding-top: 3rem; - padding-bottom: 3rem; - } - - .xl\:pl-32 { - padding-left: 8rem; - } - - .xl\:pt-1 { - padding-top: 0.25rem; - } - - .xl\:pr-32 { - padding-right: 8rem; - } - - .xl\:pt-16 { - padding-top: 4rem; - } - - .xl\:pr-20 { - padding-right: 5rem; - } - - .xl\:text-h3 { - font-size: 31px; - line-height: 36px; - } - - .xl\:text-h2 { - font-size: 42px; - line-height: 48px; - } - - .xl\:text-h2-lg { - font-size: 34px; - line-height: 38px; - } - - .xl\:text-h2-md { - font-size: 28px; - line-height: 32px; - } - - .xl\:text-h1 { - font-size: 60px; - line-height: 68px; - } -} - -@media (min-width: 1536px) { - - .\32xl\:bottom-\[40px\] { - bottom: 40px; - } - - .\32xl\:top-\[120px\] { - top: 120px; - } - - .\32xl\:-bottom-\[40px\] { - bottom: -40px; - } - - .\32xl\:left-\[200px\] { - left: 200px; - } - - .\32xl\:-top-\[1\.3vw\] { - top: -1.3vw; - } - - .\32xl\:ml-\[120px\] { - margin-left: 120px; - } - - .\32xl\:h-\[470px\] { - height: 470px; - } - - .\32xl\:w-\[576px\] { - width: 576px; - } - - .\32xl\:w-\[220px\] { - width: 220px; - } - - .\32xl\:w-\[280px\] { - width: 280px; - } - - .\32xl\:pb-\[40px\] { - padding-bottom: 40px; - } - - .\32xl\:text-h2 { - font-size: 42px; - line-height: 48px; - } - - .\32xl\:text-h2-lg { - font-size: 34px; - line-height: 38px; - } -} - -@media print { - - .print\:flex { - display: flex; - } - - .print\:hidden { - display: none; - } -} diff --git a/public/css/fonts.css b/public/css/fonts.css deleted file mode 100644 index 46901a3d..00000000 --- a/public/css/fonts.css +++ /dev/null @@ -1,15 +0,0 @@ -@font-face { -font-family: 'Roboto Light'; -font-weight: 300; -src: url('../fonts/Roboto/Roboto-Light.ttf') format('truetype'); -} -@font-face { -font-family: 'Roboto'; -font-weight: 400; -src: url('../fonts/Roboto/Roboto-Regular.ttf') format('truetype'); -} -@font-face { -font-family: 'Roboto Bold'; -font-weight: 700; -src: url('../fonts/Roboto/Roboto-Bold.ttf') format('truetype'); -} \ No newline at end of file diff --git a/public/fonts/Roboto/LICENSE.txt b/public/fonts/Roboto/LICENSE.txt deleted file mode 100644 index 75b52484..00000000 --- a/public/fonts/Roboto/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/public/fonts/Roboto/Roboto-Black.ttf b/public/fonts/Roboto/Roboto-Black.ttf deleted file mode 100644 index fbde625d..00000000 Binary files a/public/fonts/Roboto/Roboto-Black.ttf and /dev/null differ diff --git a/public/fonts/Roboto/Roboto-BlackItalic.ttf b/public/fonts/Roboto/Roboto-BlackItalic.ttf deleted file mode 100644 index 60f7782a..00000000 Binary files a/public/fonts/Roboto/Roboto-BlackItalic.ttf and /dev/null differ diff --git a/public/fonts/Roboto/Roboto-BoldItalic.ttf b/public/fonts/Roboto/Roboto-BoldItalic.ttf deleted file mode 100644 index 3c9a7a37..00000000 Binary files a/public/fonts/Roboto/Roboto-BoldItalic.ttf and /dev/null differ diff --git a/public/fonts/Roboto/Roboto-Italic.ttf b/public/fonts/Roboto/Roboto-Italic.ttf deleted file mode 100644 index ff6046d5..00000000 Binary files a/public/fonts/Roboto/Roboto-Italic.ttf and /dev/null differ diff --git a/public/fonts/Roboto/Roboto-LightItalic.ttf b/public/fonts/Roboto/Roboto-LightItalic.ttf deleted file mode 100644 index 04cc0023..00000000 Binary files a/public/fonts/Roboto/Roboto-LightItalic.ttf and /dev/null differ diff --git a/public/fonts/Roboto/Roboto-Medium.ttf b/public/fonts/Roboto/Roboto-Medium.ttf deleted file mode 100644 index 39c63d74..00000000 Binary files a/public/fonts/Roboto/Roboto-Medium.ttf and /dev/null differ diff --git a/public/fonts/Roboto/Roboto-MediumItalic.ttf b/public/fonts/Roboto/Roboto-MediumItalic.ttf deleted file mode 100644 index dc743f0a..00000000 Binary files a/public/fonts/Roboto/Roboto-MediumItalic.ttf and /dev/null differ diff --git a/public/fonts/Roboto/Roboto-Thin.ttf b/public/fonts/Roboto/Roboto-Thin.ttf deleted file mode 100644 index d6955502..00000000 Binary files a/public/fonts/Roboto/Roboto-Thin.ttf and /dev/null differ diff --git a/public/fonts/Roboto/Roboto-ThinItalic.ttf b/public/fonts/Roboto/Roboto-ThinItalic.ttf deleted file mode 100644 index 07172ff6..00000000 Binary files a/public/fonts/Roboto/Roboto-ThinItalic.ttf and /dev/null differ diff --git a/public/images/CTA-path-green.svg b/public/images/CTA-path-green.svg deleted file mode 100644 index 99476c69..00000000 --- a/public/images/CTA-path-green.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/CTA-path-white.svg b/public/images/CTA-path-white.svg deleted file mode 100644 index 85b1885b..00000000 --- a/public/images/CTA-path-white.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/CTA-path.svg b/public/images/CTA-path.svg deleted file mode 100644 index fa1a5d66..00000000 --- a/public/images/CTA-path.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/CTA-stroke-path-brown.svg b/public/images/CTA-stroke-path-brown.svg deleted file mode 100644 index 9d6c1125..00000000 --- a/public/images/CTA-stroke-path-brown.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/CTA-stroke-path.svg b/public/images/CTA-stroke-path.svg deleted file mode 100644 index 7607d7f6..00000000 --- a/public/images/CTA-stroke-path.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/CTA-stroke-path2.svg b/public/images/CTA-stroke-path2.svg deleted file mode 100644 index 36186677..00000000 --- a/public/images/CTA-stroke-path2.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/Oberkante-blau-path.svg b/public/images/Oberkante-blau-path.svg deleted file mode 100644 index ddb9385d..00000000 --- a/public/images/Oberkante-blau-path.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/public/images/Oberkante-gruen-path.svg b/public/images/Oberkante-gruen-path.svg deleted file mode 100644 index 8dcb2a4a..00000000 --- a/public/images/Oberkante-gruen-path.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/public/images/Oberkante-orange-path.svg b/public/images/Oberkante-orange-path.svg deleted file mode 100644 index fddf888c..00000000 --- a/public/images/Oberkante-orange-path.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/public/images/Oberkante-rot-path.svg b/public/images/Oberkante-rot-path.svg deleted file mode 100644 index 9896cc83..00000000 --- a/public/images/Oberkante-rot-path.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/public/images/Oberkante-weiss-path.svg b/public/images/Oberkante-weiss-path.svg deleted file mode 100644 index 1f4c7c47..00000000 --- a/public/images/Oberkante-weiss-path.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/public/images/Unterkante-weiss-path.svg b/public/images/Unterkante-weiss-path.svg deleted file mode 100644 index 1f4c7c47..00000000 --- a/public/images/Unterkante-weiss-path.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/public/images/background-paper.jpg b/public/images/background-paper.jpg deleted file mode 100644 index bce9e1f9..00000000 Binary files a/public/images/background-paper.jpg and /dev/null differ diff --git a/public/images/check.png b/public/images/check.png deleted file mode 100644 index f2e96268..00000000 Binary files a/public/images/check.png and /dev/null differ diff --git a/public/images/icon-close.svg b/public/images/icon-close.svg deleted file mode 100644 index 1f344e21..00000000 --- a/public/images/icon-close.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/public/images/icon-dropbox-pfeil-braun.svg b/public/images/icon-dropbox-pfeil-braun.svg deleted file mode 100644 index c91db6e9..00000000 --- a/public/images/icon-dropbox-pfeil-braun.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/icon-dropbox-pfeil-weiss.svg b/public/images/icon-dropbox-pfeil-weiss.svg deleted file mode 100644 index c714b52c..00000000 --- a/public/images/icon-dropbox-pfeil-weiss.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/icon-frisch.svg b/public/images/icon-frisch.svg deleted file mode 100644 index f542de02..00000000 --- a/public/images/icon-frisch.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/mask-quadratisch-bild-path.svg b/public/images/mask-quadratisch-bild-path.svg deleted file mode 100644 index 193b11cd..00000000 --- a/public/images/mask-quadratisch-bild-path.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/images/picto-haehnchen.png b/public/images/picto-haehnchen.png deleted file mode 100644 index 36d5c219..00000000 Binary files a/public/images/picto-haehnchen.png and /dev/null differ diff --git a/public/images/slider-path.svg b/public/images/slider-path.svg deleted file mode 100644 index 5784ec66..00000000 --- a/public/images/slider-path.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/public/js/app.js b/public/js/app.js deleted file mode 100644 index 9ac16a2d..00000000 --- a/public/js/app.js +++ /dev/null @@ -1,22663 +0,0 @@ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/alpinejs/dist/module.esm.js": -/*!**************************************************!*\ - !*** ./node_modules/alpinejs/dist/module.esm.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ module_default) -/* harmony export */ }); -// packages/alpinejs/src/scheduler.js -var flushPending = false; -var flushing = false; -var queue = []; -function scheduler(callback) { - queueJob(callback); -} -function queueJob(job) { - if (!queue.includes(job)) - queue.push(job); - queueFlush(); -} -function dequeueJob(job) { - let index = queue.indexOf(job); - if (index !== -1) - queue.splice(index, 1); -} -function queueFlush() { - if (!flushing && !flushPending) { - flushPending = true; - queueMicrotask(flushJobs); - } -} -function flushJobs() { - flushPending = false; - flushing = true; - for (let i = 0; i < queue.length; i++) { - queue[i](); - } - queue.length = 0; - flushing = false; -} - -// packages/alpinejs/src/reactivity.js -var reactive; -var effect; -var release; -var raw; -var shouldSchedule = true; -function disableEffectScheduling(callback) { - shouldSchedule = false; - callback(); - shouldSchedule = true; -} -function setReactivityEngine(engine) { - reactive = engine.reactive; - release = engine.release; - effect = (callback) => engine.effect(callback, {scheduler: (task) => { - if (shouldSchedule) { - scheduler(task); - } else { - task(); - } - }}); - raw = engine.raw; -} -function overrideEffect(override) { - effect = override; -} -function elementBoundEffect(el) { - let cleanup2 = () => { - }; - let wrappedEffect = (callback) => { - let effectReference = effect(callback); - if (!el._x_effects) { - el._x_effects = new Set(); - el._x_runEffects = () => { - el._x_effects.forEach((i) => i()); - }; - } - el._x_effects.add(effectReference); - cleanup2 = () => { - if (effectReference === void 0) - return; - el._x_effects.delete(effectReference); - release(effectReference); - }; - return effectReference; - }; - return [wrappedEffect, () => { - cleanup2(); - }]; -} - -// packages/alpinejs/src/mutation.js -var onAttributeAddeds = []; -var onElRemoveds = []; -var onElAddeds = []; -function onElAdded(callback) { - onElAddeds.push(callback); -} -function onElRemoved(el, callback) { - if (typeof callback === "function") { - if (!el._x_cleanups) - el._x_cleanups = []; - el._x_cleanups.push(callback); - } else { - callback = el; - onElRemoveds.push(callback); - } -} -function onAttributesAdded(callback) { - onAttributeAddeds.push(callback); -} -function onAttributeRemoved(el, name, callback) { - if (!el._x_attributeCleanups) - el._x_attributeCleanups = {}; - if (!el._x_attributeCleanups[name]) - el._x_attributeCleanups[name] = []; - el._x_attributeCleanups[name].push(callback); -} -function cleanupAttributes(el, names) { - if (!el._x_attributeCleanups) - return; - Object.entries(el._x_attributeCleanups).forEach(([name, value]) => { - if (names === void 0 || names.includes(name)) { - value.forEach((i) => i()); - delete el._x_attributeCleanups[name]; - } - }); -} -var observer = new MutationObserver(onMutate); -var currentlyObserving = false; -function startObservingMutations() { - observer.observe(document, {subtree: true, childList: true, attributes: true, attributeOldValue: true}); - currentlyObserving = true; -} -function stopObservingMutations() { - flushObserver(); - observer.disconnect(); - currentlyObserving = false; -} -var recordQueue = []; -var willProcessRecordQueue = false; -function flushObserver() { - recordQueue = recordQueue.concat(observer.takeRecords()); - if (recordQueue.length && !willProcessRecordQueue) { - willProcessRecordQueue = true; - queueMicrotask(() => { - processRecordQueue(); - willProcessRecordQueue = false; - }); - } -} -function processRecordQueue() { - onMutate(recordQueue); - recordQueue.length = 0; -} -function mutateDom(callback) { - if (!currentlyObserving) - return callback(); - stopObservingMutations(); - let result = callback(); - startObservingMutations(); - return result; -} -var isCollecting = false; -var deferredMutations = []; -function deferMutations() { - isCollecting = true; -} -function flushAndStopDeferringMutations() { - isCollecting = false; - onMutate(deferredMutations); - deferredMutations = []; -} -function onMutate(mutations) { - if (isCollecting) { - deferredMutations = deferredMutations.concat(mutations); - return; - } - let addedNodes = []; - let removedNodes = []; - let addedAttributes = new Map(); - let removedAttributes = new Map(); - for (let i = 0; i < mutations.length; i++) { - if (mutations[i].target._x_ignoreMutationObserver) - continue; - if (mutations[i].type === "childList") { - mutations[i].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.push(node)); - mutations[i].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.push(node)); - } - if (mutations[i].type === "attributes") { - let el = mutations[i].target; - let name = mutations[i].attributeName; - let oldValue = mutations[i].oldValue; - let add2 = () => { - if (!addedAttributes.has(el)) - addedAttributes.set(el, []); - addedAttributes.get(el).push({name, value: el.getAttribute(name)}); - }; - let remove = () => { - if (!removedAttributes.has(el)) - removedAttributes.set(el, []); - removedAttributes.get(el).push(name); - }; - if (el.hasAttribute(name) && oldValue === null) { - add2(); - } else if (el.hasAttribute(name)) { - remove(); - add2(); - } else { - remove(); - } - } - } - removedAttributes.forEach((attrs, el) => { - cleanupAttributes(el, attrs); - }); - addedAttributes.forEach((attrs, el) => { - onAttributeAddeds.forEach((i) => i(el, attrs)); - }); - for (let node of removedNodes) { - if (addedNodes.includes(node)) - continue; - onElRemoveds.forEach((i) => i(node)); - if (node._x_cleanups) { - while (node._x_cleanups.length) - node._x_cleanups.pop()(); - } - } - addedNodes.forEach((node) => { - node._x_ignoreSelf = true; - node._x_ignore = true; - }); - for (let node of addedNodes) { - if (removedNodes.includes(node)) - continue; - if (!node.isConnected) - continue; - delete node._x_ignoreSelf; - delete node._x_ignore; - onElAddeds.forEach((i) => i(node)); - node._x_ignore = true; - node._x_ignoreSelf = true; - } - addedNodes.forEach((node) => { - delete node._x_ignoreSelf; - delete node._x_ignore; - }); - addedNodes = null; - removedNodes = null; - addedAttributes = null; - removedAttributes = null; -} - -// packages/alpinejs/src/scope.js -function scope(node) { - return mergeProxies(closestDataStack(node)); -} -function addScopeToNode(node, data2, referenceNode) { - node._x_dataStack = [data2, ...closestDataStack(referenceNode || node)]; - return () => { - node._x_dataStack = node._x_dataStack.filter((i) => i !== data2); - }; -} -function refreshScope(element, scope2) { - let existingScope = element._x_dataStack[0]; - Object.entries(scope2).forEach(([key, value]) => { - existingScope[key] = value; - }); -} -function closestDataStack(node) { - if (node._x_dataStack) - return node._x_dataStack; - if (typeof ShadowRoot === "function" && node instanceof ShadowRoot) { - return closestDataStack(node.host); - } - if (!node.parentNode) { - return []; - } - return closestDataStack(node.parentNode); -} -function mergeProxies(objects) { - let thisProxy = new Proxy({}, { - ownKeys: () => { - return Array.from(new Set(objects.flatMap((i) => Object.keys(i)))); - }, - has: (target, name) => { - return objects.some((obj) => obj.hasOwnProperty(name)); - }, - get: (target, name) => { - return (objects.find((obj) => { - if (obj.hasOwnProperty(name)) { - let descriptor = Object.getOwnPropertyDescriptor(obj, name); - if (descriptor.get && descriptor.get._x_alreadyBound || descriptor.set && descriptor.set._x_alreadyBound) { - return true; - } - if ((descriptor.get || descriptor.set) && descriptor.enumerable) { - let getter = descriptor.get; - let setter = descriptor.set; - let property = descriptor; - getter = getter && getter.bind(thisProxy); - setter = setter && setter.bind(thisProxy); - if (getter) - getter._x_alreadyBound = true; - if (setter) - setter._x_alreadyBound = true; - Object.defineProperty(obj, name, { - ...property, - get: getter, - set: setter - }); - } - return true; - } - return false; - }) || {})[name]; - }, - set: (target, name, value) => { - let closestObjectWithKey = objects.find((obj) => obj.hasOwnProperty(name)); - if (closestObjectWithKey) { - closestObjectWithKey[name] = value; - } else { - objects[objects.length - 1][name] = value; - } - return true; - } - }); - return thisProxy; -} - -// packages/alpinejs/src/interceptor.js -function initInterceptors(data2) { - let isObject2 = (val) => typeof val === "object" && !Array.isArray(val) && val !== null; - let recurse = (obj, basePath = "") => { - Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, {value, enumerable}]) => { - if (enumerable === false || value === void 0) - return; - let path = basePath === "" ? key : `${basePath}.${key}`; - if (typeof value === "object" && value !== null && value._x_interceptor) { - obj[key] = value.initialize(data2, path, key); - } else { - if (isObject2(value) && value !== obj && !(value instanceof Element)) { - recurse(value, path); - } - } - }); - }; - return recurse(data2); -} -function interceptor(callback, mutateObj = () => { -}) { - let obj = { - initialValue: void 0, - _x_interceptor: true, - initialize(data2, path, key) { - return callback(this.initialValue, () => get(data2, path), (value) => set(data2, path, value), path, key); - } - }; - mutateObj(obj); - return (initialValue) => { - if (typeof initialValue === "object" && initialValue !== null && initialValue._x_interceptor) { - let initialize = obj.initialize.bind(obj); - obj.initialize = (data2, path, key) => { - let innerValue = initialValue.initialize(data2, path, key); - obj.initialValue = innerValue; - return initialize(data2, path, key); - }; - } else { - obj.initialValue = initialValue; - } - return obj; - }; -} -function get(obj, path) { - return path.split(".").reduce((carry, segment) => carry[segment], obj); -} -function set(obj, path, value) { - if (typeof path === "string") - path = path.split("."); - if (path.length === 1) - obj[path[0]] = value; - else if (path.length === 0) - throw error; - else { - if (obj[path[0]]) - return set(obj[path[0]], path.slice(1), value); - else { - obj[path[0]] = {}; - return set(obj[path[0]], path.slice(1), value); - } - } -} - -// packages/alpinejs/src/magics.js -var magics = {}; -function magic(name, callback) { - magics[name] = callback; -} -function injectMagics(obj, el) { - Object.entries(magics).forEach(([name, callback]) => { - Object.defineProperty(obj, `$${name}`, { - get() { - let [utilities, cleanup2] = getElementBoundUtilities(el); - utilities = {interceptor, ...utilities}; - onElRemoved(el, cleanup2); - return callback(el, utilities); - }, - enumerable: false - }); - }); - return obj; -} - -// packages/alpinejs/src/utils/error.js -function tryCatch(el, expression, callback, ...args) { - try { - return callback(...args); - } catch (e) { - handleError(e, el, expression); - } -} -function handleError(error2, el, expression = void 0) { - Object.assign(error2, {el, expression}); - console.warn(`Alpine Expression Error: ${error2.message} - -${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); - setTimeout(() => { - throw error2; - }, 0); -} - -// packages/alpinejs/src/evaluator.js -var shouldAutoEvaluateFunctions = true; -function dontAutoEvaluateFunctions(callback) { - let cache = shouldAutoEvaluateFunctions; - shouldAutoEvaluateFunctions = false; - callback(); - shouldAutoEvaluateFunctions = cache; -} -function evaluate(el, expression, extras = {}) { - let result; - evaluateLater(el, expression)((value) => result = value, extras); - return result; -} -function evaluateLater(...args) { - return theEvaluatorFunction(...args); -} -var theEvaluatorFunction = normalEvaluator; -function setEvaluator(newEvaluator) { - theEvaluatorFunction = newEvaluator; -} -function normalEvaluator(el, expression) { - let overriddenMagics = {}; - injectMagics(overriddenMagics, el); - let dataStack = [overriddenMagics, ...closestDataStack(el)]; - if (typeof expression === "function") { - return generateEvaluatorFromFunction(dataStack, expression); - } - let evaluator = generateEvaluatorFromString(dataStack, expression, el); - return tryCatch.bind(null, el, expression, evaluator); -} -function generateEvaluatorFromFunction(dataStack, func) { - return (receiver = () => { - }, {scope: scope2 = {}, params = []} = {}) => { - let result = func.apply(mergeProxies([scope2, ...dataStack]), params); - runIfTypeOfFunction(receiver, result); - }; -} -var evaluatorMemo = {}; -function generateFunctionFromString(expression, el) { - if (evaluatorMemo[expression]) { - return evaluatorMemo[expression]; - } - let AsyncFunction = Object.getPrototypeOf(async function() { - }).constructor; - let rightSideSafeExpression = /^[\n\s]*if.*\(.*\)/.test(expression) || /^(let|const)\s/.test(expression) ? `(() => { ${expression} })()` : expression; - const safeAsyncFunction = () => { - try { - return new AsyncFunction(["__self", "scope"], `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`); - } catch (error2) { - handleError(error2, el, expression); - return Promise.resolve(); - } - }; - let func = safeAsyncFunction(); - evaluatorMemo[expression] = func; - return func; -} -function generateEvaluatorFromString(dataStack, expression, el) { - let func = generateFunctionFromString(expression, el); - return (receiver = () => { - }, {scope: scope2 = {}, params = []} = {}) => { - func.result = void 0; - func.finished = false; - let completeScope = mergeProxies([scope2, ...dataStack]); - if (typeof func === "function") { - let promise = func(func, completeScope).catch((error2) => handleError(error2, el, expression)); - if (func.finished) { - runIfTypeOfFunction(receiver, func.result, completeScope, params, el); - func.result = void 0; - } else { - promise.then((result) => { - runIfTypeOfFunction(receiver, result, completeScope, params, el); - }).catch((error2) => handleError(error2, el, expression)).finally(() => func.result = void 0); - } - } - }; -} -function runIfTypeOfFunction(receiver, value, scope2, params, el) { - if (shouldAutoEvaluateFunctions && typeof value === "function") { - let result = value.apply(scope2, params); - if (result instanceof Promise) { - result.then((i) => runIfTypeOfFunction(receiver, i, scope2, params)).catch((error2) => handleError(error2, el, value)); - } else { - receiver(result); - } - } else { - receiver(value); - } -} - -// packages/alpinejs/src/directives.js -var prefixAsString = "x-"; -function prefix(subject = "") { - return prefixAsString + subject; -} -function setPrefix(newPrefix) { - prefixAsString = newPrefix; -} -var directiveHandlers = {}; -function directive(name, callback) { - directiveHandlers[name] = callback; -} -function directives(el, attributes, originalAttributeOverride) { - let transformedAttributeMap = {}; - let directives2 = Array.from(attributes).map(toTransformedAttributes((newName, oldName) => transformedAttributeMap[newName] = oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap, originalAttributeOverride)).sort(byPriority); - return directives2.map((directive2) => { - return getDirectiveHandler(el, directive2); - }); -} -function attributesOnly(attributes) { - return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr)); -} -var isDeferringHandlers = false; -var directiveHandlerStacks = new Map(); -var currentHandlerStackKey = Symbol(); -function deferHandlingDirectives(callback) { - isDeferringHandlers = true; - let key = Symbol(); - currentHandlerStackKey = key; - directiveHandlerStacks.set(key, []); - let flushHandlers = () => { - while (directiveHandlerStacks.get(key).length) - directiveHandlerStacks.get(key).shift()(); - directiveHandlerStacks.delete(key); - }; - let stopDeferring = () => { - isDeferringHandlers = false; - flushHandlers(); - }; - callback(flushHandlers); - stopDeferring(); -} -function getElementBoundUtilities(el) { - let cleanups = []; - let cleanup2 = (callback) => cleanups.push(callback); - let [effect3, cleanupEffect] = elementBoundEffect(el); - cleanups.push(cleanupEffect); - let utilities = { - Alpine: alpine_default, - effect: effect3, - cleanup: cleanup2, - evaluateLater: evaluateLater.bind(evaluateLater, el), - evaluate: evaluate.bind(evaluate, el) - }; - let doCleanup = () => cleanups.forEach((i) => i()); - return [utilities, doCleanup]; -} -function getDirectiveHandler(el, directive2) { - let noop = () => { - }; - let handler3 = directiveHandlers[directive2.type] || noop; - let [utilities, cleanup2] = getElementBoundUtilities(el); - onAttributeRemoved(el, directive2.original, cleanup2); - let fullHandler = () => { - if (el._x_ignore || el._x_ignoreSelf) - return; - handler3.inline && handler3.inline(el, directive2, utilities); - handler3 = handler3.bind(handler3, el, directive2, utilities); - isDeferringHandlers ? directiveHandlerStacks.get(currentHandlerStackKey).push(handler3) : handler3(); - }; - fullHandler.runCleanups = cleanup2; - return fullHandler; -} -var startingWith = (subject, replacement) => ({name, value}) => { - if (name.startsWith(subject)) - name = name.replace(subject, replacement); - return {name, value}; -}; -var into = (i) => i; -function toTransformedAttributes(callback = () => { -}) { - return ({name, value}) => { - let {name: newName, value: newValue} = attributeTransformers.reduce((carry, transform) => { - return transform(carry); - }, {name, value}); - if (newName !== name) - callback(newName, name); - return {name: newName, value: newValue}; - }; -} -var attributeTransformers = []; -function mapAttributes(callback) { - attributeTransformers.push(callback); -} -function outNonAlpineAttributes({name}) { - return alpineAttributeRegex().test(name); -} -var alpineAttributeRegex = () => new RegExp(`^${prefixAsString}([^:^.]+)\\b`); -function toParsedDirectives(transformedAttributeMap, originalAttributeOverride) { - return ({name, value}) => { - let typeMatch = name.match(alpineAttributeRegex()); - let valueMatch = name.match(/:([a-zA-Z0-9\-:]+)/); - let modifiers = name.match(/\.[^.\]]+(?=[^\]]*$)/g) || []; - let original = originalAttributeOverride || transformedAttributeMap[name] || name; - return { - type: typeMatch ? typeMatch[1] : null, - value: valueMatch ? valueMatch[1] : null, - modifiers: modifiers.map((i) => i.replace(".", "")), - expression: value, - original - }; - }; -} -var DEFAULT = "DEFAULT"; -var directiveOrder = [ - "ignore", - "ref", - "data", - "id", - "bind", - "init", - "for", - "mask", - "model", - "modelable", - "transition", - "show", - "if", - DEFAULT, - "teleport", - "element" -]; -function byPriority(a, b) { - let typeA = directiveOrder.indexOf(a.type) === -1 ? DEFAULT : a.type; - let typeB = directiveOrder.indexOf(b.type) === -1 ? DEFAULT : b.type; - return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB); -} - -// packages/alpinejs/src/utils/dispatch.js -function dispatch(el, name, detail = {}) { - el.dispatchEvent(new CustomEvent(name, { - detail, - bubbles: true, - composed: true, - cancelable: true - })); -} - -// packages/alpinejs/src/nextTick.js -var tickStack = []; -var isHolding = false; -function nextTick(callback = () => { -}) { - queueMicrotask(() => { - isHolding || setTimeout(() => { - releaseNextTicks(); - }); - }); - return new Promise((res) => { - tickStack.push(() => { - callback(); - res(); - }); - }); -} -function releaseNextTicks() { - isHolding = false; - while (tickStack.length) - tickStack.shift()(); -} -function holdNextTicks() { - isHolding = true; -} - -// packages/alpinejs/src/utils/walk.js -function walk(el, callback) { - if (typeof ShadowRoot === "function" && el instanceof ShadowRoot) { - Array.from(el.children).forEach((el2) => walk(el2, callback)); - return; - } - let skip = false; - callback(el, () => skip = true); - if (skip) - return; - let node = el.firstElementChild; - while (node) { - walk(node, callback, false); - node = node.nextElementSibling; - } -} - -// packages/alpinejs/src/utils/warn.js -function warn(message, ...args) { - console.warn(`Alpine Warning: ${message}`, ...args); -} - -// packages/alpinejs/src/lifecycle.js -function start() { - if (!document.body) - warn("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` - + + + + @@ -23,9 +20,10 @@ - + + @@ -34,9 +32,9 @@
- + Unternehmenslogo - +
- + - + - +@yield('scripts') \ No newline at end of file diff --git a/resources/views/pages/home.blade.php b/resources/views/pages/home.blade.php index fde5009f..e0e25fb1 100644 --- a/resources/views/pages/home.blade.php +++ b/resources/views/pages/home.blade.php @@ -1,23 +1,7 @@ @extends('layouts.frame') - @section('title', 'Home') @section('content') - - - - -
@@ -277,6 +261,18 @@
+@endsection - +@section('scripts') + @endsection \ No newline at end of file diff --git a/resources/views/pages/storefinder.blade.php b/resources/views/pages/storefinder.blade.php index 2b18041a..692edd0a 100644 --- a/resources/views/pages/storefinder.blade.php +++ b/resources/views/pages/storefinder.blade.php @@ -4,136 +4,124 @@ @section('content') - - + + -
+
-
-
- -
-

Wenn Sie die Map auf dieser Seite sehen möchten, werden personenbezogene Daten an den Betreiber der Map gesendet und Cookies durch den Betreiber gesetzt. +

+
+ +
+

Wenn Sie die Map auf dieser Seite sehen möchten, werden personenbezogene Daten an den Betreiber der Map gesendet und Cookies durch den Betreiber gesetzt. Daher ist es möglich, dass der Anbieter Ihre Zugriffe speichert und Ihr Verhalten analysieren kann. Die Datenschutzerklärung von Google Maps finden Sie unter: https://policies.google.com/privacy

- Google Maps laden -
- - - + Google Maps laden
- -
-

Marktfinder

- -

Appetit bekommen? In den folgenden Märkten finden Sie die Produkte von Nature & Respect. Einfach einen Ort, eine Postleitzahl eingeben oder Ihren Standort freigeben und auf Märkte finden klicken!

- -
- - -
- - - Märkte finden - - -
-
    -
    -
    -
    - -
    +
    - - + return ""; + } + @endsection \ No newline at end of file diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php deleted file mode 100644 index dd6a45db..00000000 --- a/resources/views/welcome.blade.php +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - Laravel - - - - - - - - - - -
    - @if (Route::has('login')) - - @endif - -
    -
    - - - - - -
    - -
    -
    -
    - - -
    -
    - Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. -
    -
    -
    - -
    -
    - - -
    - -
    -
    - Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. -
    -
    -
    - -
    -
    - - -
    - -
    -
    - Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. -
    -
    -
    - -
    -
    - -
    Vibrant Ecosystem
    -
    - -
    -
    - Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. -
    -
    -
    -
    -
    - -
    -
    -
    - - - - - - Shop - - - - - - - - Sponsor - -
    -
    - -
    - Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) -
    -
    -
    -
    - - diff --git a/routes/api.php b/routes/api.php index 855bb358..b3d9bbc7 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,36 +1 @@ get('/user', function (Request $request) { - return $request->user(); -}); - - -Route::apiResources([ - 'products' => ProductController::class, - 'recipes' => RecipeController::class, -]); - - -// Stores -Route::get('/stores', 'App\Http\Controllers\StoreController@index'); -Route::get('/stores/{city}', 'App\Http\Controllers\StoreController@city'); -Route::get('/stores2/{city}', 'App\Http\Controllers\StoreController@city2'); - -Route::get('/region/{id}', 'App\Http\Controllers\RegionController@show'); -Route::get('/group/{id}', 'App\Http\Controllers\GroupController@show'); diff --git a/routes/channels.php b/routes/channels.php deleted file mode 100644 index b75e9e19..00000000 --- a/routes/channels.php +++ /dev/null @@ -1,18 +0,0 @@ -id === (int)$id; -}); diff --git a/routes/web-bo.php b/routes/web-bo.php new file mode 100644 index 00000000..2bb04c8e --- /dev/null +++ b/routes/web-bo.php @@ -0,0 +1,20 @@ +middleware('admin-secure') +->group(function () { + Voyager::routes(); +}); diff --git a/routes/web.php b/routes/web-fo.php similarity index 64% rename from routes/web.php rename to routes/web-fo.php index ae4b3f92..d04e3a7a 100644 --- a/routes/web.php +++ b/routes/web-fo.php @@ -16,28 +16,10 @@ use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('pages.home'); }); -/* - Route::get('/konzept', function () { - return view('pages.ueberuns'); - }); - - Route::get('/freilandhaltung', function () { - return view('pages.freilandhaltung'); - }); - - Route::get('/familienbetriebe', function () { - return view('pages.familienbetriebe'); - }); -*/ Route::get('/wachstum', function () { return view('pages.aufzucht'); }); -/* - Route::get('/rezept', function () { - return view('pages.rezept'); - }); -*/ Route::get('/produkte', [App\Http\Controllers\ProductController::class, 'index']); @@ -50,28 +32,12 @@ Route::get('/rezepte/{id}', [App\Http\Controllers\RecipeController::class, 'show Route::get('/storefinder', function () { return view('pages.storefinder'); }); +Route::get('/stores/{city}', [App\Http\Controllers\StoreController::class, 'city']); Route::get('/kontakt', [App\Http\Controllers\ContactController::class, 'contactForm'])->name('contact-form'); Route::post('/kontakt', [App\Http\Controllers\ContactController::class, 'sendContactForm'])->name('contact-form.send'); -/* - Route::get('/impressum', function () { - return view('pages.impressum'); -});*/ -/* - Route::get('/datenschutz', function () { - return view('pages.datenschutz'); - }); - - Route::get('/elemente', function () { - return view('pages.elements'); - }); -*/ - -Route::group(['prefix' => 'admin'], function () { - Voyager::routes(); -}); - - -// LAST EXIT +/** + * Need to be last route + */ Route::get('/{slug}', [App\Http\Controllers\PageController::class, 'index']); diff --git a/storage/.DS_Store b/storage/.DS_Store deleted file mode 100644 index fadd49af..00000000 Binary files a/storage/.DS_Store and /dev/null differ diff --git a/tailwind.config.js b/tailwind.config.js index d51430cb..ce39792a 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -88,7 +88,7 @@ module.exports = { 'cta-bg-path-green': "url('/storage/assets/Gestaltungselemente-path/CTA-path-green.svg') center center no-repeat", }, cursor: { - custom: 'url(/images/cursor.svg) , pointer', + custom: 'url(/build/assets/images/cursor.svg) , pointer', }, }, }, diff --git a/webpack.mix.js b/webpack.mix.js index 2540467c..2fabf60f 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -1,10 +1,54 @@ +const path = require('path'); const mix = require('laravel-mix'); const tailwindcss = require('tailwindcss'); - mix.copyDirectory('resources/fonts', 'public/fonts'); - - mix.js('resources/js/app.js', 'public/js') - .sass('resources/sass/app.scss', 'public/css') +require('laravel-mix-polyfill'); +require('laravel-mix-clean'); + +let assetDir = "assets"; +let polyfill = { + enabled: true, + useBuiltIns: "usage", + // legacy targets from gulp file + targets: ['last 3 version', 'safari 5', 'ie 8', 'opera 12.1', 'ios 6', 'android 4'] +}; + +mix.setPublicPath('public/build'); +mix.setResourceRoot('/build'); + +mix.webpackConfig({ + resolve: { + alias: { + '@': path.resolve('resources/assets') + } + } +}); + +mix.options({ + fileLoaderDirs: { + fonts: `${assetDir}/fonts`, + images: `${assetDir}/images` + }, + postCss: [ + require("postcss-discard-comments")({ + removeAll: true, + }), + ], +}); + +mix.clean({ + cleanOnceBeforeBuildPatterns: [ + 'build/*', + ] +}); + +mix.js('resources/js/app.js', 'js') + .sass('resources/sass/app.scss', 'css') + .sass('resources/sass/print.scss', 'css') .options({ postCss: [ tailwindcss('./tailwind.config.js') ], - }); \ No newline at end of file + }) + .polyfill(polyfill) + .version(); + +mix.copyDirectory('resources/assets', 'public/build/assets'); \ No newline at end of file