Clean + CI/CD

This commit is contained in:
Vincent BRIDIER 2022-12-23 17:24:09 +00:00
parent 43d6376767
commit 2aa73fa32c
133 changed files with 2919 additions and 40210 deletions

View file

@ -30,4 +30,10 @@ MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=
MAIL_FROM_NAME="${APP_NAME}"
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=

4
.gitignore vendored
View file

@ -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
/.vscode
auth.json

View file

@ -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
- 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

4
Dockerfile Normal file
View file

@ -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

View file

@ -1,64 +1,16 @@
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400"></a></p>
# Nature & Respect DE
<p align="center">
<a href="https://travis-ci.org/laravel/framework"><img src="https://travis-ci.org/laravel/framework.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
</p>
## 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
```

View file

@ -15,7 +15,6 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
}
/**

View file

@ -42,6 +42,9 @@ class Handler extends ExceptionHandler
public function register()
{
$this->reportable(function (Throwable $e) {
if (app()->bound('sentry')) {
app('sentry')->captureException($e);
}
});
}
}

View file

@ -1,61 +0,0 @@
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return Product::all();
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
}
/**
* Display the specified resource.
*
* @param \App\Models\Product $product
* @return \Illuminate\Http\Response
*/
public function show(Product $product)
{
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Product $product
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Product $product)
{
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Product $product
* @return \Illuminate\Http\Response
*/
public function destroy(Product $product)
{
}
}

View file

@ -1,61 +0,0 @@
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Recipe;
use Illuminate\Http\Request;
class RecipeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return Recipe::all();
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
}
/**
* Display the specified resource.
*
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Http\Response
*/
public function show(Recipe $recipe)
{
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Recipe $recipe)
{
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Recipe $recipe
* @return \Illuminate\Http\Response
*/
public function destroy(Recipe $recipe)
{
}
}

View file

@ -1,27 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Stores;
class StoreController extends Controller
{
// Stores
public function index()
{
return Stores::all();
}
public function show($id)
{
return Stores::find($id);
}
// Stores by city
public function city($city)
{
// return Stores::where('city', $city)->first();
// return Stores::where('city', $city)::all;
// return Stores::where('city', '=', $city)->get();
}
}

View file

@ -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.']);

View file

@ -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);
}

View file

@ -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);

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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
}
}
}

View file

@ -14,7 +14,7 @@ class Kernel extends HttpKernel
* @var array<int, class-string|string>
*/
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,
],

View file

@ -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)
{

View file

@ -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)

View file

@ -0,0 +1,190 @@
<?php
namespace App\Lib;
class ExceptionsHelper
{
/**
* Handle sentry event
*
* @param \Sentry\Event $event
* @return null|\Sentry\Event
*/
public static function sentryEventHandler(\Sentry\Event $event): ?\Sentry\Event
{
// Remove unwanted reports.
$event->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;
}
}

View file

@ -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;

View file

@ -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');

View file

@ -11,9 +11,7 @@ class AuthServiceProvider extends ServiceProvider
*
* @var array<class-string, class-string>
*/
protected $policies = [
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
];
protected $policies = [];
/**
* Register any authentication / authorization services.

View file

@ -1,21 +0,0 @@
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\ServiceProvider;
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes();
require base_path('routes/channels.php');
}
}

View file

@ -34,7 +34,10 @@ class RouteServiceProvider extends ServiceProvider
->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'));
});
}

View file

@ -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) {

View file

@ -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) {

View file

@ -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.
*

View file

@ -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();
}

View file

@ -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();
}

View file

@ -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();
}
/**

View file

@ -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();
}

View file

@ -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"
}
}
}

1465
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -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(),
];

View file

@ -64,11 +64,6 @@ return [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
/*

View file

@ -40,6 +40,7 @@ return [
'useTLS' => true,
],
'client_options' => [
// phpcs:ignore
// Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
],
],

View file

@ -62,6 +62,7 @@ return [
env('MEMCACHED_PASSWORD'),
],
'options' => [
// phpcs:ignore
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
],
'servers' => [

View file

@ -15,7 +15,7 @@ return [
|
*/
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'paths' => ['api/*'],
'allowed_methods' => ['*'],

View file

@ -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'),
],

View file

@ -1,67 +0,0 @@
<?php
use Laravel\Sanctum\Sanctum;
return [
/*
|--------------------------------------------------------------------------
| Stateful Domains
|--------------------------------------------------------------------------
|
| Requests from the following domains / hosts will receive stateful API
| authentication cookies. Typically, these should include your local
| and production domains which access your API via a frontend SPA.
|
*/
'stateful' => 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,
],
];

62
config/sentry.php Normal file
View file

@ -0,0 +1,62 @@
<?php
return [
'dsn' => 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'],
];

View file

@ -31,4 +31,10 @@ return [
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
'google' => [
'maps' => [
'key' => env('GOOGLE_MAPS_KEY')
]
]
];

View file

@ -1,6 +1,7 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| User config
@ -42,6 +43,7 @@ return [
*/
'models' => [
// 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
],
]*/
],
];

View file

@ -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,
];

View file

@ -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
external: true

407
package-lock.json generated
View file

@ -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",

View file

@ -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",

File diff suppressed because it is too large Load diff

View file

@ -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');
}

View file

@ -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.

Binary file not shown.

Binary file not shown.

View file

@ -1,3 +0,0 @@
<svg width="216" height="47" viewBox="0 0 216 47" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none">
<path d="M213.5 44.1969C213.5 44.1969 215.77 28.2213 215.33 17.9202C215.056 11.5246 213.5 1.76787 213.5 1.76787C211.458 1.57305 209.248 1.3066 206.805 0.842446C201.489 -0.167546 194.64 -0.0104631 187.697 0.148791C183.178 0.252452 178.618 0.357033 174.415 0.141266C167.642 -0.206453 96.3064 0.157853 86.6187 0.480187C81.6057 0.646983 76.9304 0.80254 73.3463 0.842385C70.5225 0.873777 67.7129 0.862793 64.9286 0.851909C56.9602 0.820757 49.1991 0.790416 41.9059 1.75651C37.3772 2.3564 29.9264 1.95016 22.4666 1.54343C14.7268 1.12143 6.97716 0.6989 2.47106 1.39898C-0.784613 17.665 -0.862531 27.391 2.47106 45.9134C9.29725 45.2373 21.7763 44.7332 45.6239 45.3191C54.7911 46.7404 80.8514 46.9058 93.0249 46.9831C93.6348 46.987 94.2098 46.9906 94.7461 46.9942C105.839 47.0682 177.305 46.4275 187.68 45.3191C192.08 44.8492 196.324 44.8438 200.424 44.8386C204.952 44.8328 209.305 44.8273 213.5 44.1969Z" fill="#b4be00"/>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

View file

@ -1,3 +0,0 @@
<svg width="216" height="47" viewBox="0 0 216 47" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none">
<path d="M213.5 44.1969C213.5 44.1969 215.77 28.2213 215.33 17.9202C215.056 11.5246 213.5 1.76787 213.5 1.76787C211.458 1.57305 209.248 1.3066 206.805 0.842446C201.489 -0.167546 194.64 -0.0104631 187.697 0.148791C183.178 0.252452 178.618 0.357033 174.415 0.141266C167.642 -0.206453 96.3064 0.157853 86.6187 0.480187C81.6057 0.646983 76.9304 0.80254 73.3463 0.842385C70.5225 0.873777 67.7129 0.862793 64.9286 0.851909C56.9602 0.820757 49.1991 0.790416 41.9059 1.75651C37.3772 2.3564 29.9264 1.95016 22.4666 1.54343C14.7268 1.12143 6.97716 0.6989 2.47106 1.39898C-0.784613 17.665 -0.862531 27.391 2.47106 45.9134C9.29725 45.2373 21.7763 44.7332 45.6239 45.3191C54.7911 46.7404 80.8514 46.9058 93.0249 46.9831C93.6348 46.987 94.2098 46.9906 94.7461 46.9942C105.839 47.0682 177.305 46.4275 187.68 45.3191C192.08 44.8492 196.324 44.8438 200.424 44.8386C204.952 44.8328 209.305 44.8273 213.5 44.1969Z" fill="#FFFFFF"/>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

View file

@ -1,3 +0,0 @@
<svg width="216" height="47" viewBox="0 0 216 47" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none">
<path d="M213.5 44.1969C213.5 44.1969 215.77 28.2213 215.33 17.9202C215.056 11.5246 213.5 1.76787 213.5 1.76787C211.458 1.57305 209.248 1.3066 206.805 0.842446C201.489 -0.167546 194.64 -0.0104631 187.697 0.148791C183.178 0.252452 178.618 0.357033 174.415 0.141266C167.642 -0.206453 96.3064 0.157853 86.6187 0.480187C81.6057 0.646983 76.9304 0.80254 73.3463 0.842385C70.5225 0.873777 67.7129 0.862793 64.9286 0.851909C56.9602 0.820757 49.1991 0.790416 41.9059 1.75651C37.3772 2.3564 29.9264 1.95016 22.4666 1.54343C14.7268 1.12143 6.97716 0.6989 2.47106 1.39898C-0.784613 17.665 -0.862531 27.391 2.47106 45.9134C9.29725 45.2373 21.7763 44.7332 45.6239 45.3191C54.7911 46.7404 80.8514 46.9058 93.0249 46.9831C93.6348 46.987 94.2098 46.9906 94.7461 46.9942C105.839 47.0682 177.305 46.4275 187.68 45.3191C192.08 44.8492 196.324 44.8438 200.424 44.8386C204.952 44.8328 209.305 44.8273 213.5 44.1969Z" fill="#5F282D"/>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

View file

@ -1,3 +0,0 @@
<svg width="279" height="52" viewBox="0 0 279 52" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none">
<path d="M82.09 48.3456L82.0497 48.3419L82.0091 48.3413C40.0849 47.7282 17.683 48.2301 5.20621 48.931C2.3857 39.4618 1.03069 32.2301 1.04737 25.3173C1.06407 18.3995 2.4547 11.7342 5.21646 3.39953C13.3201 2.74201 26.7836 3.17684 40.3423 3.61678L40.415 3.61914C53.768 4.0524 67.1973 4.48814 75.3941 3.84198C88.4512 2.81268 102.355 2.8444 116.685 2.87774L116.687 2.87775C121.69 2.88939 126.743 2.90114 131.823 2.86754C138.271 2.82488 146.678 2.6584 155.682 2.48012L155.689 2.47998C173.112 2.135 192.757 1.74634 204.897 2.11722C212.474 2.34869 220.687 2.23658 228.799 2.12585L228.813 2.12566C241.314 1.95502 253.547 1.78988 263.021 2.86099C267.135 3.3261 270.88 3.6064 274.35 3.81156C274.418 4.0779 274.502 4.41088 274.599 4.8002C274.867 5.87828 275.23 7.38678 275.608 9.10719C276.366 12.5621 277.174 16.8195 277.414 20.1602C277.801 25.5401 276.997 32.4647 276.078 38.0995C275.621 40.9053 275.139 43.3698 274.771 45.1324C274.587 46.0135 274.432 46.7186 274.323 47.2025C274.322 47.2051 274.322 47.2078 274.321 47.2104C267.07 47.8149 259.543 47.8213 251.671 47.8272L251.657 47.8272C244.296 47.8328 236.641 47.8386 228.702 48.3433C210.076 49.5274 190.188 50.2117 170.279 50.1327C169.315 50.1289 168.281 50.125 167.185 50.1208C145.275 50.038 98.5055 49.8601 82.09 48.3456Z" stroke="#5f282d" stroke-width="2.09444"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -1,3 +0,0 @@
<svg width="279" height="52" viewBox="0 0 279 52" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none">
<path d="M82.09 48.3456L82.0497 48.3419L82.0091 48.3413C40.0849 47.7282 17.683 48.2301 5.20621 48.931C2.3857 39.4618 1.03069 32.2301 1.04737 25.3173C1.06407 18.3995 2.4547 11.7342 5.21646 3.39953C13.3201 2.74201 26.7836 3.17684 40.3423 3.61678L40.415 3.61914C53.768 4.0524 67.1973 4.48814 75.3941 3.84198C88.4512 2.81268 102.355 2.8444 116.685 2.87774L116.687 2.87775C121.69 2.88939 126.743 2.90114 131.823 2.86754C138.271 2.82488 146.678 2.6584 155.682 2.48012L155.689 2.47998C173.112 2.135 192.757 1.74634 204.897 2.11722C212.474 2.34869 220.687 2.23658 228.799 2.12585L228.813 2.12566C241.314 1.95502 253.547 1.78988 263.021 2.86099C267.135 3.3261 270.88 3.6064 274.35 3.81156C274.418 4.0779 274.502 4.41088 274.599 4.8002C274.867 5.87828 275.23 7.38678 275.608 9.10719C276.366 12.5621 277.174 16.8195 277.414 20.1602C277.801 25.5401 276.997 32.4647 276.078 38.0995C275.621 40.9053 275.139 43.3698 274.771 45.1324C274.587 46.0135 274.432 46.7186 274.323 47.2025C274.322 47.2051 274.322 47.2078 274.321 47.2104C267.07 47.8149 259.543 47.8213 251.671 47.8272L251.657 47.8272C244.296 47.8328 236.641 47.8386 228.702 48.3433C210.076 49.5274 190.188 50.2117 170.279 50.1327C169.315 50.1289 168.281 50.125 167.185 50.1208C145.275 50.038 98.5055 49.8601 82.09 48.3456Z" stroke="white" stroke-width="2.09444"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -1,3 +0,0 @@
<svg width="279" height="52" viewBox="0 0 279 52" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none">
<path d="M82.09 48.3456L82.0497 48.3419L82.0091 48.3413C40.0849 47.7282 17.683 48.2301 5.20621 48.931C2.3857 39.4618 1.03069 32.2301 1.04737 25.3173C1.06407 18.3995 2.4547 11.7342 5.21646 3.39953C13.3201 2.74201 26.7836 3.17684 40.3423 3.61678L40.415 3.61914C53.768 4.0524 67.1973 4.48814 75.3941 3.84198C88.4512 2.81268 102.355 2.8444 116.685 2.87774L116.687 2.87775C121.69 2.88939 126.743 2.90114 131.823 2.86754C138.271 2.82488 146.678 2.6584 155.682 2.48012L155.689 2.47998C173.112 2.135 192.757 1.74634 204.897 2.11722C212.474 2.34869 220.687 2.23658 228.799 2.12585L228.813 2.12566C241.314 1.95502 253.547 1.78988 263.021 2.86099C267.135 3.3261 270.88 3.6064 274.35 3.81156C274.418 4.0779 274.502 4.41088 274.599 4.8002C274.867 5.87828 275.23 7.38678 275.608 9.10719C276.366 12.5621 277.174 16.8195 277.414 20.1602C277.801 25.5401 276.997 32.4647 276.078 38.0995C275.621 40.9053 275.139 43.3698 274.771 45.1324C274.587 46.0135 274.432 46.7186 274.323 47.2025C274.322 47.2051 274.322 47.2078 274.321 47.2104C267.07 47.8149 259.543 47.8213 251.671 47.8272L251.657 47.8272C244.296 47.8328 236.641 47.8386 228.702 48.3433C210.076 49.5274 190.188 50.2117 170.279 50.1327C169.315 50.1289 168.281 50.125 167.185 50.1208C145.275 50.038 98.5055 49.8601 82.09 48.3456Z" stroke="white" stroke-width="1"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1751 61" style="enable-background:new 0 0 1751 61;" xml:space="preserve" preserveAspectRatio="none">
<style type="text/css">
.st0{fill:#5f9bd2;}
</style>
<path class="st0" d="M0,61c583.7,0,1167.3,0,1751,0c0-18.5,0-37,0-55.5c-3.8-0.2-9.6-0.4-16.8-0.9c-10.8-0.7-18.7-1.4-20.4-1.6
c-22.7-2-59.2-0.7-59.2-0.7c-18.2,0.7-62.8,0.5-152.1,0.1C1414.5,2.1,1366,0,1319.2,4.6c-4.2,0.4-15.3,1.5-30.7,2.5
c-30.8,1.9-42.9,0.9-73.7,1.3c-41.1,0.5-107.7,1-125.2-1.1c-1.2-0.1-6-0.8-12.6-1c-8.1-0.3-14.1,0.3-15.3,0.4
c-20,1.6-217-1.9-318-2.6c-26.4-0.2-55-0.4-79.3,0.5c-30.1,1-59.1,2.4-89.1,3.9C563,9,550.5,9.6,537.7,10.2
C513.4,4,467.5,0.7,428.5,4.8c-21.1,2.2-43.9,2.7-66,3.2c-13.6,0.3-27,0.6-39.7,1.3c-39.1,2.1-63.8,3.3-89.7,4.6
c-26.1,1.3-53.4,2.6-97.9,5l-46.9,3.7c-2.9,0.2-6,0.3-9.2,0.5c-20.7,1.1-24.6,2.9-38.8,3.3c-7.7,0.2-7.1-0.2-19.1,0
C12.2,26.5,4.8,26.8,0,27.1C0,34.8,0,53.3,0,61z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1751 61" style="enable-background:new 0 0 1751 61;" xml:space="preserve" preserveAspectRatio="none">
<style type="text/css">
.st0{fill:#b4be00;}
</style>
<path class="st0" d="M0,61c583.7,0,1167.3,0,1751,0c0-18.5,0-37,0-55.5c-3.8-0.2-9.6-0.4-16.8-0.9c-10.8-0.7-18.7-1.4-20.4-1.6
c-22.7-2-59.2-0.7-59.2-0.7c-18.2,0.7-62.8,0.5-152.1,0.1C1414.5,2.1,1366,0,1319.2,4.6c-4.2,0.4-15.3,1.5-30.7,2.5
c-30.8,1.9-42.9,0.9-73.7,1.3c-41.1,0.5-107.7,1-125.2-1.1c-1.2-0.1-6-0.8-12.6-1c-8.1-0.3-14.1,0.3-15.3,0.4
c-20,1.6-217-1.9-318-2.6c-26.4-0.2-55-0.4-79.3,0.5c-30.1,1-59.1,2.4-89.1,3.9C563,9,550.5,9.6,537.7,10.2
C513.4,4,467.5,0.7,428.5,4.8c-21.1,2.2-43.9,2.7-66,3.2c-13.6,0.3-27,0.6-39.7,1.3c-39.1,2.1-63.8,3.3-89.7,4.6
c-26.1,1.3-53.4,2.6-97.9,5l-46.9,3.7c-2.9,0.2-6,0.3-9.2,0.5c-20.7,1.1-24.6,2.9-38.8,3.3c-7.7,0.2-7.1-0.2-19.1,0
C12.2,26.5,4.8,26.8,0,27.1C0,34.8,0,53.3,0,61z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1751 61" style="enable-background:new 0 0 1751 61;" xml:space="preserve" preserveAspectRatio="none">
<style type="text/css">
.st0{fill:#f0a500;}
</style>
<path class="st0" d="M0,61c583.7,0,1167.3,0,1751,0c0-18.5,0-37,0-55.5c-3.8-0.2-9.6-0.4-16.8-0.9c-10.8-0.7-18.7-1.4-20.4-1.6
c-22.7-2-59.2-0.7-59.2-0.7c-18.2,0.7-62.8,0.5-152.1,0.1C1414.5,2.1,1366,0,1319.2,4.6c-4.2,0.4-15.3,1.5-30.7,2.5
c-30.8,1.9-42.9,0.9-73.7,1.3c-41.1,0.5-107.7,1-125.2-1.1c-1.2-0.1-6-0.8-12.6-1c-8.1-0.3-14.1,0.3-15.3,0.4
c-20,1.6-217-1.9-318-2.6c-26.4-0.2-55-0.4-79.3,0.5c-30.1,1-59.1,2.4-89.1,3.9C563,9,550.5,9.6,537.7,10.2
C513.4,4,467.5,0.7,428.5,4.8c-21.1,2.2-43.9,2.7-66,3.2c-13.6,0.3-27,0.6-39.7,1.3c-39.1,2.1-63.8,3.3-89.7,4.6
c-26.1,1.3-53.4,2.6-97.9,5l-46.9,3.7c-2.9,0.2-6,0.3-9.2,0.5c-20.7,1.1-24.6,2.9-38.8,3.3c-7.7,0.2-7.1-0.2-19.1,0
C12.2,26.5,4.8,26.8,0,27.1C0,34.8,0,53.3,0,61z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1751 61" style="enable-background:new 0 0 1751 61;" xml:space="preserve" preserveAspectRatio="none">
<style type="text/css">
.st0{fill:#a5193c;}
</style>
<path class="st0" d="M0,61c583.7,0,1167.3,0,1751,0c0-18.5,0-37,0-55.5c-3.8-0.2-9.6-0.4-16.8-0.9c-10.8-0.7-18.7-1.4-20.4-1.6
c-22.7-2-59.2-0.7-59.2-0.7c-18.2,0.7-62.8,0.5-152.1,0.1C1414.5,2.1,1366,0,1319.2,4.6c-4.2,0.4-15.3,1.5-30.7,2.5
c-30.8,1.9-42.9,0.9-73.7,1.3c-41.1,0.5-107.7,1-125.2-1.1c-1.2-0.1-6-0.8-12.6-1c-8.1-0.3-14.1,0.3-15.3,0.4
c-20,1.6-217-1.9-318-2.6c-26.4-0.2-55-0.4-79.3,0.5c-30.1,1-59.1,2.4-89.1,3.9C563,9,550.5,9.6,537.7,10.2
C513.4,4,467.5,0.7,428.5,4.8c-21.1,2.2-43.9,2.7-66,3.2c-13.6,0.3-27,0.6-39.7,1.3c-39.1,2.1-63.8,3.3-89.7,4.6
c-26.1,1.3-53.4,2.6-97.9,5l-46.9,3.7c-2.9,0.2-6,0.3-9.2,0.5c-20.7,1.1-24.6,2.9-38.8,3.3c-7.7,0.2-7.1-0.2-19.1,0
C12.2,26.5,4.8,26.8,0,27.1C0,34.8,0,53.3,0,61z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1751 61" style="enable-background:new 0 0 1751 61;" xml:space="preserve" preserveAspectRatio="none">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M0,61c583.7,0,1167.3,0,1751,0c0-18.5,0-37,0-55.5c-3.8-0.2-9.6-0.4-16.8-0.9c-10.8-0.7-18.7-1.4-20.4-1.6
c-22.7-2-59.2-0.7-59.2-0.7c-18.2,0.7-62.8,0.5-152.1,0.1C1414.5,2.1,1366,0,1319.2,4.6c-4.2,0.4-15.3,1.5-30.7,2.5
c-30.8,1.9-42.9,0.9-73.7,1.3c-41.1,0.5-107.7,1-125.2-1.1c-1.2-0.1-6-0.8-12.6-1c-8.1-0.3-14.1,0.3-15.3,0.4
c-20,1.6-217-1.9-318-2.6c-26.4-0.2-55-0.4-79.3,0.5c-30.1,1-59.1,2.4-89.1,3.9C563,9,550.5,9.6,537.7,10.2
C513.4,4,467.5,0.7,428.5,4.8c-21.1,2.2-43.9,2.7-66,3.2c-13.6,0.3-27,0.6-39.7,1.3c-39.1,2.1-63.8,3.3-89.7,4.6
c-26.1,1.3-53.4,2.6-97.9,5l-46.9,3.7c-2.9,0.2-6,0.3-9.2,0.5c-20.7,1.1-24.6,2.9-38.8,3.3c-7.7,0.2-7.1-0.2-19.1,0
C12.2,26.5,4.8,26.8,0,27.1C0,34.8,0,53.3,0,61z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1751 61" style="enable-background:new 0 0 1751 61;" xml:space="preserve" preserveAspectRatio="none">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M0,61c583.7,0,1167.3,0,1751,0c0-18.5,0-37,0-55.5c-3.8-0.2-9.6-0.4-16.8-0.9c-10.8-0.7-18.7-1.4-20.4-1.6
c-22.7-2-59.2-0.7-59.2-0.7c-18.2,0.7-62.8,0.5-152.1,0.1C1414.5,2.1,1366,0,1319.2,4.6c-4.2,0.4-15.3,1.5-30.7,2.5
c-30.8,1.9-42.9,0.9-73.7,1.3c-41.1,0.5-107.7,1-125.2-1.1c-1.2-0.1-6-0.8-12.6-1c-8.1-0.3-14.1,0.3-15.3,0.4
c-20,1.6-217-1.9-318-2.6c-26.4-0.2-55-0.4-79.3,0.5c-30.1,1-59.1,2.4-89.1,3.9C563,9,550.5,9.6,537.7,10.2
C513.4,4,467.5,0.7,428.5,4.8c-21.1,2.2-43.9,2.7-66,3.2c-13.6,0.3-27,0.6-39.7,1.3c-39.1,2.1-63.8,3.3-89.7,4.6
c-26.1,1.3-53.4,2.6-97.9,5l-46.9,3.7c-2.9,0.2-6,0.3-9.2,0.5c-20.7,1.1-24.6,2.9-38.8,3.3c-7.7,0.2-7.1-0.2-19.1,0
C12.2,26.5,4.8,26.8,0,27.1C0,34.8,0,53.3,0,61z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 641 B

View file

@ -1,4 +0,0 @@
<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="8.5" cy="8.5" r="8.5" fill="#5F282D"/>
<path d="M9.36478 8.48466L10.6749 7.17458C10.8452 7.01737 10.8452 6.75536 10.6749 6.59815L10.3866 6.30993C10.2294 6.13962 9.96741 6.13962 9.81021 6.30993L8.50013 7.62001L7.17695 6.30993C7.01974 6.13962 6.75773 6.13962 6.60052 6.30993L6.3123 6.59815C6.14199 6.75536 6.14199 7.01737 6.3123 7.17458L7.62238 8.48466L6.3123 9.80783C6.14199 9.96504 6.14199 10.2271 6.3123 10.3843L6.60052 10.6725C6.75773 10.8428 7.01974 10.8428 7.17695 10.6725L8.50013 9.36241L9.81021 10.6725C9.96741 10.8428 10.2294 10.8428 10.3866 10.6725L10.6749 10.3843C10.8452 10.2271 10.8452 9.96504 10.6749 9.80783L9.36478 8.48466Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 769 B

View file

@ -1,3 +0,0 @@
<svg width="15" height="9" viewBox="0 0 15 9" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.40625 1.62079L7.71458 6.87773L14.0229 1.62079" stroke="#5f282d" stroke-width="2.10278"/>
</svg>

Before

Width:  |  Height:  |  Size: 202 B

View file

@ -1,3 +0,0 @@
<svg width="15" height="9" viewBox="0 0 15 9" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.40625 1.62079L7.71458 6.87773L14.0229 1.62079" stroke="white" stroke-width="2.10278"/>
</svg>

Before

Width:  |  Height:  |  Size: 200 B

View file

@ -1,3 +0,0 @@
<svg width="27" height="19" viewBox="0 0 27 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M25.6977 0.0469263C25.553 0.0344913 24.2416 -0.074032 22.5776 0.088753C21.4031 0.202929 19.9595 0.571455 18.153 1.09033C17.9371 1.15251 17.7201 1.21242 17.4996 1.2746C16.5783 1.53121 15.6253 1.79573 14.5141 2.23548C12.2114 3.14662 10.5168 4.58116 9.8657 6.17058C9.08004 8.08895 9.83518 9.8095 10.12 10.4572C10.1438 10.5104 10.163 10.5556 10.1788 10.5929C10.2953 10.8733 9.50282 12.0953 8.85847 12.942C8.51594 12.4819 8.3475 12.0941 8.40289 12.0421C8.47298 11.9766 8.47524 11.8613 8.45716 11.2463C8.44585 10.8755 8.43229 10.4143 8.45037 9.95872C8.45829 9.76993 8.46846 9.57776 8.47863 9.38332C8.53403 8.36591 8.59168 7.31459 8.29098 6.15588C8.02872 5.143 7.63871 4.3596 7.13227 3.82715C6.428 3.08558 5.45807 2.36661 4.53675 1.90313C3.41648 1.33677 2.08367 0.904939 0.782526 0.684501C0.757656 0.679979 0.740699 0.677718 0.732786 0.675457L0.380085 0.603108L0.305475 0.955809C0.29191 1.02024 0.144951 2.29878 0.0793853 4.56082C0.0726025 4.79934 0.0624285 5.05935 0.051124 5.33631C0.00138415 6.57302 -0.0619211 8.11269 0.131386 9.40141C0.29191 10.4765 0.560957 11.2248 0.950963 11.6872C1.60436 12.4604 2.83316 12.7012 4.13544 12.9567L4.42258 13.0132C5.67512 13.263 6.68348 13.3071 7.24305 13.2642C7.29505 13.384 7.36627 13.5196 7.44088 13.6609C7.65793 14.0747 7.92811 14.589 7.89193 15.0401C7.88289 15.1531 7.83202 15.3928 7.78228 15.6234C7.7348 15.8461 7.68958 16.0564 7.67828 16.1705C7.56184 17.3462 7.47027 18.2743 7.99141 18.6248C8.11011 18.705 8.24802 18.7446 8.40063 18.7446C8.67986 18.7446 8.93308 18.6112 9.0416 18.5547C9.87587 18.1161 9.89848 17.3327 9.92335 16.5029C9.93579 16.0914 9.94935 15.6257 10.0534 15.126C10.3088 13.904 10.8775 12.6684 11.5738 11.8194C13.1745 9.86828 15.2783 8.00191 17.0768 6.55945C16.9141 6.74259 16.7784 6.90198 16.6631 7.03763C16.4619 7.2739 16.3172 7.44573 16.203 7.5339C15.8639 7.7973 14.2473 9.36636 13.2616 10.6144C12.7212 11.2983 12.0916 12.0342 11.6756 12.5203C11.4483 12.786 11.2844 12.9782 11.2245 13.055C11.1488 13.1534 11.1295 13.2822 11.1725 13.3987C11.2155 13.5151 11.3127 13.601 11.4325 13.6282C11.4415 13.6304 11.4517 13.6361 11.4653 13.6429C11.6315 13.7231 12.0735 13.9379 14.0981 13.7039C14.3502 13.6745 14.6859 13.6564 15.0737 13.6349C15.8458 13.592 16.8055 13.5389 17.6398 13.3704C18.6143 13.1726 19.4259 12.6469 20.1426 12.1834C20.2964 12.084 20.4433 11.989 20.5858 11.902C22.3142 10.8405 23.2152 9.19567 24.1082 6.88728C24.2258 6.58206 24.34 6.29267 24.4508 6.01458C24.8634 4.96891 25.2184 4.06568 25.4851 3.09575C25.8209 1.87147 26.0176 0.514933 26.0266 0.45728L26.0809 0.0785789L25.6988 0.0446654L25.6977 0.0469263ZM20.7135 4.07585L21.0199 3.7695C21.2595 3.52985 21.2821 3.14662 21.073 2.87871L21.0097 2.79731L20.9226 2.85271C20.8605 2.89227 14.6769 6.89407 11.012 11.3605C10.2444 12.2954 9.62039 13.6474 9.3423 14.9779C9.22473 15.5409 9.21004 16.0405 9.19647 16.4826C9.17047 17.3632 9.12412 17.691 8.7036 17.9126C8.4775 18.0313 8.39159 18.0188 8.39498 18.0222C8.23446 17.9114 8.35429 16.6985 8.3995 16.2418C8.40855 16.1479 8.46959 16.0112 8.52951 15.8778C8.59959 15.7206 8.67194 15.5578 8.68325 15.4188C8.71603 15.013 8.59846 14.2307 7.84897 12.8041C7.83089 12.769 7.81845 12.7464 7.81506 12.7385C7.75854 12.5995 7.62514 12.5113 7.47819 12.5113C7.46123 12.5113 7.4454 12.5113 7.42845 12.5147C7.41375 12.5169 5.89895 12.717 4.31405 12.4005C2.26116 11.9913 1.09453 10.9456 0.846961 9.29288C0.71696 8.42244 0.835657 7.3892 0.939658 6.47806C1.0007 5.94562 1.05836 5.44257 1.06514 5.00848C1.08096 3.99107 1.02783 3.20993 0.986007 2.58253C0.953224 2.10096 0.928354 1.73469 0.952093 1.47242C2.0068 1.73808 4.9765 2.60966 6.60435 4.32342C8.54646 6.36841 7.71558 11.8816 7.70654 11.937L7.68958 12.0444L8.8042 14.485L10.8763 10.7376L10.9634 10.5805L10.891 10.4166C10.882 10.3962 10.0149 8.36365 10.8594 6.30849C11.4619 4.8423 12.7811 3.69715 14.7798 2.90697C20.007 0.841633 23.9669 0.725197 25.241 0.752328C25.1087 1.51425 24.7752 3.22123 24.167 5.08422C23.1089 8.32974 21.7106 10.5624 20.1211 11.538C17.0294 13.4371 13.456 13.1907 12.1673 13.0188C13.2785 11.5945 15.3416 9.23749 15.7859 8.89157C16.3127 8.48235 19.2835 5.50587 20.7124 4.07472L20.7135 4.07585Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -1,3 +0,0 @@
<svg width="360" height="360" viewBox="0 0 360 360" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none">
<path d="M354.949 121.747C354.675 182.608 365.288 248.978 352.915 307.421C352.85 308.383 352.576 309.033 351.755 314.23C347.922 338.579 349.982 349.26 346.631 355.73C343.789 361.24 339.174 359.629 334.636 358.511C320.53 355.133 328.809 362.045 298.978 359.369C287.753 358.355 273.086 356.146 255.785 351.235C216.45 351.833 177.116 366.541 139.176 348.064C116.204 365.268 81.6538 340.191 59.4377 359.888C47.6125 348.766 30.6375 361.266 20.4551 348.922C5.64432 335.019 -4.79884 321.09 2.25453 304.745C0.742162 291.777 -1.03096 269.611 2.78907 248.25C3.03679 210.543 3.7669 172.785 5.48787 134.818C9.0993 93.5258 -9.33594 27.9616 13.3756 4.15786C42.3975 6.0029 81.1323 -8.86143 104.222 8.67952C143.544 8.08183 182.891 -6.65257 220.818 11.8239C243.79 -5.37922 278.353 19.6978 300.569 0C312.394 11.1223 329.369 -1.37729 339.552 10.9663C354.349 24.8692 364.793 38.798 357.752 55.1436C351.559 76.4006 361.103 99.2168 354.949 121.747Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 527 715" style="enable-background:new 0 0 527 715;" xml:space="preserve">
<style type="text/css">
.st0{fill:#B4BE00;}
</style>
<path class="st0" d="M5.7,232.5c-4.5-16.9-5.1-25.3-5.6-61.2c2.6-56,5.3-112.1,7.9-168.1C8.8,2.1,9.6,1.1,10.3,0
C182.6,0,354.8,0,527,0l0,715H12.5v-39c-1.8-4.4-3.5-9.2-5.3-14.3c-1.6-4.8-2.8-14.7-4.1-25c-0.6-4.8-1.2-9.6-1.8-14.1
c0.6-3.1,1.2-6.3,1.9-10.5c0.4-2.3,0.9-4.9,1.5-8c-0.6-1.9-1.2-3.6-2-5.7l0,0c-0.7-2-1.6-4.5-2.7-7.8c7.9-15.3,5.4-37.5,3-59.2
c-0.1-0.6-0.1-1.2-0.2-1.8c0.6-3.7,1.2-6.9,1.7-9.9l0,0c0.4-2.5,0.8-4.8,1.2-7c-1.4-9.3-2.6-17.7-3.6-24.2c1.4-11,2.6-20.5,3.8-29
l0,0c0.7-5.2,1.3-9.9,1.9-14.5c-0.5-1.9-1-3.5-1.6-5c-1-3-2-5.7-2.1-9.6c-0.5-13.8-0.8-28.1-1.1-42.4c-0.1-7.9-0.3-15.8-0.5-23.6
c-0.2-7.6-0.5-15-0.8-22.5c-0.2-3.9-0.3-7.8-0.4-11.7c0.1-8.8,0.8-17.2,1.6-26c0.5-5.8,1-11.8,1.4-18.1c0.6-11.4,0.8-23.8,1-36.4
C5.5,244,5.6,238.3,5.7,232.5z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list{display:block}.splide__track--fade>.splide__list>.splide__slide{left:0;opacity:0;position:absolute;top:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;position:relative;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__container{box-sizing:border-box;position:relative}.splide__list{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,379 +0,0 @@
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
function empty(array) {
array.length = 0;
}
function slice(arrayLike, start, end) {
return Array.prototype.slice.call(arrayLike, start, end);
}
function find(arrayLike, predicate) {
return slice(arrayLike).filter(predicate)[0];
}
function apply(func) {
return func.bind(null, ...slice(arguments, 1));
}
const nextTick = setTimeout;
const noop = () => {
};
function raf(func) {
return requestAnimationFrame(func);
}
function typeOf(type, subject) {
return typeof subject === type;
}
function isObject(subject) {
return !isNull(subject) && typeOf("object", subject);
}
const isArray = Array.isArray;
const isFunction = apply(typeOf, "function");
const isString = apply(typeOf, "string");
const isUndefined = apply(typeOf, "undefined");
function isNull(subject) {
return subject === null;
}
function isHTMLElement(subject) {
return subject instanceof HTMLElement;
}
function isHTMLButtonElement(subject) {
return subject instanceof HTMLButtonElement;
}
function toArray(value) {
return isArray(value) ? value : [value];
}
function forEach(values, iteratee) {
toArray(values).forEach(iteratee);
}
function includes(array, value) {
return array.indexOf(value) > -1;
}
function push(array, items) {
array.push(...toArray(items));
return array;
}
function toggleClass(elm, classes, add) {
if (elm) {
forEach(classes, (name) => {
if (name) {
elm.classList[add ? "add" : "remove"](name);
}
});
}
}
function addClass(elm, classes) {
toggleClass(elm, isString(classes) ? classes.split(" ") : classes, true);
}
function append(parent, children) {
forEach(children, parent.appendChild.bind(parent));
}
function before(nodes, ref) {
forEach(nodes, (node) => {
const parent = (ref || node).parentNode;
if (parent) {
parent.insertBefore(node, ref);
}
});
}
function matches(elm, selector) {
return isHTMLElement(elm) && (elm["msMatchesSelector"] || elm.matches).call(elm, selector);
}
function children(parent, selector) {
const children2 = parent ? slice(parent.children) : [];
return selector ? children2.filter((child) => matches(child, selector)) : children2;
}
function child(parent, selector) {
return selector ? children(parent, selector)[0] : parent.firstElementChild;
}
const ownKeys = Object.keys;
function forOwn(object, iteratee, right) {
if (object) {
let keys = ownKeys(object);
keys = right ? keys.reverse() : keys;
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
if (key !== "__proto__") {
if (iteratee(object[key], key) === false) {
break;
}
}
}
}
return object;
}
function assign(object) {
slice(arguments, 1).forEach((source) => {
forOwn(source, (value, key) => {
object[key] = source[key];
});
});
return object;
}
function merge(object) {
slice(arguments, 1).forEach((source) => {
forOwn(source, (value, key) => {
if (isArray(value)) {
object[key] = value.slice();
} else if (isObject(value)) {
object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);
} else {
object[key] = value;
}
});
});
return object;
}
function omit(object, keys) {
toArray(keys || ownKeys(object)).forEach((key) => {
delete object[key];
});
}
function removeAttribute(elms, attrs) {
forEach(elms, (elm) => {
forEach(attrs, (attr) => {
elm && elm.removeAttribute(attr);
});
});
}
function setAttribute(elms, attrs, value) {
if (isObject(attrs)) {
forOwn(attrs, (value2, name) => {
setAttribute(elms, name, value2);
});
} else {
forEach(elms, (elm) => {
isNull(value) || value === "" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));
});
}
}
function create(tag, attrs, parent) {
const elm = document.createElement(tag);
if (attrs) {
isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);
}
parent && append(parent, elm);
return elm;
}
function style(elm, prop, value) {
if (isUndefined(value)) {
return getComputedStyle(elm)[prop];
}
if (!isNull(value)) {
elm.style[prop] = `${value}`;
}
}
function display(elm, display2) {
style(elm, "display", display2);
}
function focus(elm) {
elm["setActive"] && elm["setActive"]() || elm.focus({ preventScroll: true });
}
function getAttribute(elm, attr) {
return elm.getAttribute(attr);
}
function hasClass(elm, className) {
return elm && elm.classList.contains(className);
}
function rect(target) {
return target.getBoundingClientRect();
}
function remove(nodes) {
forEach(nodes, (node) => {
if (node && node.parentNode) {
node.parentNode.removeChild(node);
}
});
}
function measure(parent, value) {
if (isString(value)) {
const div = create("div", { style: `width: ${value}; position: absolute;` }, parent);
value = rect(div).width;
remove(div);
}
return value;
}
function parseHtml(html) {
return child(new DOMParser().parseFromString(html, "text/html").body);
}
function prevent(e, stopPropagation) {
e.preventDefault();
if (stopPropagation) {
e.stopPropagation();
e.stopImmediatePropagation();
}
}
function query(parent, selector) {
return parent && parent.querySelector(selector);
}
function queryAll(parent, selector) {
return selector ? slice(parent.querySelectorAll(selector)) : [];
}
function removeClass(elm, classes) {
toggleClass(elm, classes, false);
}
function timeOf(e) {
return e.timeStamp;
}
function unit(value) {
return isString(value) ? value : value ? `${value}px` : "";
}
const PROJECT_CODE = "splide";
function assert(condition, message) {
if (!condition) {
throw new Error(`[${PROJECT_CODE}] ${message || ""}`);
}
}
function error(message) {
console.error(`[${PROJECT_CODE}] ${message}`);
}
const { min, max, floor, ceil, abs } = Math;
function approximatelyEqual(x, y, epsilon) {
return abs(x - y) < epsilon;
}
function between(number, minOrMax, maxOrMin, exclusive) {
const minimum = min(minOrMax, maxOrMin);
const maximum = max(minOrMax, maxOrMin);
return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;
}
function clamp(number, x, y) {
const minimum = min(x, y);
const maximum = max(x, y);
return min(max(minimum, number), maximum);
}
function sign(x) {
return +(x > 0) - +(x < 0);
}
function camelToKebab(string) {
return string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
}
function format(string, replacements) {
forEach(replacements, (replacement) => {
string = string.replace("%s", `${replacement}`);
});
return string;
}
function pad(number) {
return number < 10 ? `0${number}` : `${number}`;
}
const ids = {};
function uniqueId(prefix) {
return `${prefix}${pad(ids[prefix] = (ids[prefix] || 0) + 1)}`;
}
exports.abs = abs;
exports.addClass = addClass;
exports.append = append;
exports.apply = apply;
exports.approximatelyEqual = approximatelyEqual;
exports.assert = assert;
exports.assign = assign;
exports.before = before;
exports.between = between;
exports.camelToKebab = camelToKebab;
exports.ceil = ceil;
exports.child = child;
exports.children = children;
exports.clamp = clamp;
exports.create = create;
exports.display = display;
exports.empty = empty;
exports.error = error;
exports.find = find;
exports.floor = floor;
exports.focus = focus;
exports.forEach = forEach;
exports.forOwn = forOwn;
exports.format = format;
exports.getAttribute = getAttribute;
exports.hasClass = hasClass;
exports.includes = includes;
exports.isArray = isArray;
exports.isFunction = isFunction;
exports.isHTMLButtonElement = isHTMLButtonElement;
exports.isHTMLElement = isHTMLElement;
exports.isNull = isNull;
exports.isObject = isObject;
exports.isString = isString;
exports.isUndefined = isUndefined;
exports.matches = matches;
exports.max = max;
exports.measure = measure;
exports.merge = merge;
exports.min = min;
exports.nextTick = nextTick;
exports.noop = noop;
exports.omit = omit;
exports.ownKeys = ownKeys;
exports.pad = pad;
exports.parseHtml = parseHtml;
exports.prevent = prevent;
exports.push = push;
exports.query = query;
exports.queryAll = queryAll;
exports.raf = raf;
exports.rect = rect;
exports.remove = remove;
exports.removeAttribute = removeAttribute;
exports.removeClass = removeClass;
exports.setAttribute = setAttribute;
exports.sign = sign;
exports.slice = slice;
exports.style = style;
exports.timeOf = timeOf;
exports.toArray = toArray;
exports.toggleClass = toggleClass;
exports.uniqueId = uniqueId;
exports.unit = unit;

View file

@ -1,312 +0,0 @@
function empty(array) {
array.length = 0;
}
function slice(arrayLike, start, end) {
return Array.prototype.slice.call(arrayLike, start, end);
}
function find(arrayLike, predicate) {
return slice(arrayLike).filter(predicate)[0];
}
function apply(func) {
return func.bind(null, ...slice(arguments, 1));
}
const nextTick = setTimeout;
const noop = () => {
};
function raf(func) {
return requestAnimationFrame(func);
}
function typeOf(type, subject) {
return typeof subject === type;
}
function isObject(subject) {
return !isNull(subject) && typeOf("object", subject);
}
const isArray = Array.isArray;
const isFunction = apply(typeOf, "function");
const isString = apply(typeOf, "string");
const isUndefined = apply(typeOf, "undefined");
function isNull(subject) {
return subject === null;
}
function isHTMLElement(subject) {
return subject instanceof HTMLElement;
}
function isHTMLButtonElement(subject) {
return subject instanceof HTMLButtonElement;
}
function toArray(value) {
return isArray(value) ? value : [value];
}
function forEach(values, iteratee) {
toArray(values).forEach(iteratee);
}
function includes(array, value) {
return array.indexOf(value) > -1;
}
function push(array, items) {
array.push(...toArray(items));
return array;
}
function toggleClass(elm, classes, add) {
if (elm) {
forEach(classes, (name) => {
if (name) {
elm.classList[add ? "add" : "remove"](name);
}
});
}
}
function addClass(elm, classes) {
toggleClass(elm, isString(classes) ? classes.split(" ") : classes, true);
}
function append(parent, children) {
forEach(children, parent.appendChild.bind(parent));
}
function before(nodes, ref) {
forEach(nodes, (node) => {
const parent = (ref || node).parentNode;
if (parent) {
parent.insertBefore(node, ref);
}
});
}
function matches(elm, selector) {
return isHTMLElement(elm) && (elm["msMatchesSelector"] || elm.matches).call(elm, selector);
}
function children(parent, selector) {
const children2 = parent ? slice(parent.children) : [];
return selector ? children2.filter((child) => matches(child, selector)) : children2;
}
function child(parent, selector) {
return selector ? children(parent, selector)[0] : parent.firstElementChild;
}
const ownKeys = Object.keys;
function forOwn(object, iteratee, right) {
if (object) {
let keys = ownKeys(object);
keys = right ? keys.reverse() : keys;
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
if (key !== "__proto__") {
if (iteratee(object[key], key) === false) {
break;
}
}
}
}
return object;
}
function assign(object) {
slice(arguments, 1).forEach((source) => {
forOwn(source, (value, key) => {
object[key] = source[key];
});
});
return object;
}
function merge(object) {
slice(arguments, 1).forEach((source) => {
forOwn(source, (value, key) => {
if (isArray(value)) {
object[key] = value.slice();
} else if (isObject(value)) {
object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);
} else {
object[key] = value;
}
});
});
return object;
}
function omit(object, keys) {
toArray(keys || ownKeys(object)).forEach((key) => {
delete object[key];
});
}
function removeAttribute(elms, attrs) {
forEach(elms, (elm) => {
forEach(attrs, (attr) => {
elm && elm.removeAttribute(attr);
});
});
}
function setAttribute(elms, attrs, value) {
if (isObject(attrs)) {
forOwn(attrs, (value2, name) => {
setAttribute(elms, name, value2);
});
} else {
forEach(elms, (elm) => {
isNull(value) || value === "" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));
});
}
}
function create(tag, attrs, parent) {
const elm = document.createElement(tag);
if (attrs) {
isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);
}
parent && append(parent, elm);
return elm;
}
function style(elm, prop, value) {
if (isUndefined(value)) {
return getComputedStyle(elm)[prop];
}
if (!isNull(value)) {
elm.style[prop] = `${value}`;
}
}
function display(elm, display2) {
style(elm, "display", display2);
}
function focus(elm) {
elm["setActive"] && elm["setActive"]() || elm.focus({ preventScroll: true });
}
function getAttribute(elm, attr) {
return elm.getAttribute(attr);
}
function hasClass(elm, className) {
return elm && elm.classList.contains(className);
}
function rect(target) {
return target.getBoundingClientRect();
}
function remove(nodes) {
forEach(nodes, (node) => {
if (node && node.parentNode) {
node.parentNode.removeChild(node);
}
});
}
function measure(parent, value) {
if (isString(value)) {
const div = create("div", { style: `width: ${value}; position: absolute;` }, parent);
value = rect(div).width;
remove(div);
}
return value;
}
function parseHtml(html) {
return child(new DOMParser().parseFromString(html, "text/html").body);
}
function prevent(e, stopPropagation) {
e.preventDefault();
if (stopPropagation) {
e.stopPropagation();
e.stopImmediatePropagation();
}
}
function query(parent, selector) {
return parent && parent.querySelector(selector);
}
function queryAll(parent, selector) {
return selector ? slice(parent.querySelectorAll(selector)) : [];
}
function removeClass(elm, classes) {
toggleClass(elm, classes, false);
}
function timeOf(e) {
return e.timeStamp;
}
function unit(value) {
return isString(value) ? value : value ? `${value}px` : "";
}
const PROJECT_CODE = "splide";
function assert(condition, message) {
if (!condition) {
throw new Error(`[${PROJECT_CODE}] ${message || ""}`);
}
}
function error(message) {
console.error(`[${PROJECT_CODE}] ${message}`);
}
const { min, max, floor, ceil, abs } = Math;
function approximatelyEqual(x, y, epsilon) {
return abs(x - y) < epsilon;
}
function between(number, minOrMax, maxOrMin, exclusive) {
const minimum = min(minOrMax, maxOrMin);
const maximum = max(minOrMax, maxOrMin);
return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;
}
function clamp(number, x, y) {
const minimum = min(x, y);
const maximum = max(x, y);
return min(max(minimum, number), maximum);
}
function sign(x) {
return +(x > 0) - +(x < 0);
}
function camelToKebab(string) {
return string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
}
function format(string, replacements) {
forEach(replacements, (replacement) => {
string = string.replace("%s", `${replacement}`);
});
return string;
}
function pad(number) {
return number < 10 ? `0${number}` : `${number}`;
}
const ids = {};
function uniqueId(prefix) {
return `${prefix}${pad(ids[prefix] = (ids[prefix] || 0) + 1)}`;
}
export { abs, addClass, append, apply, approximatelyEqual, assert, assign, before, between, camelToKebab, ceil, child, children, clamp, create, display, empty, error, find, floor, focus, forEach, forOwn, format, getAttribute, hasClass, includes, isArray, isFunction, isHTMLButtonElement, isHTMLElement, isNull, isObject, isString, isUndefined, matches, max, measure, merge, min, nextTick, noop, omit, ownKeys, pad, parseHtml, prevent, push, query, queryAll, raf, rect, remove, removeAttribute, removeClass, setAttribute, sign, slice, style, timeOf, toArray, toggleClass, uniqueId, unit };

File diff suppressed because it is too large Load diff

View file

@ -1,4 +0,0 @@
{
"/js/app.js": "/js/app.js",
"/css/app.css": "/css/app.css"
}

Some files were not shown because too many files have changed in this diff Show more