Merge branch 'Einundzwanzig-Podcast:master' into master
24
.features.php.dist
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
|
||||
/**
|
||||
* @returns array<string, bool>
|
||||
*/
|
||||
return static function (Application $app): array {
|
||||
return [
|
||||
'change.country' => false,
|
||||
'change.language' => true,
|
||||
|
||||
'news' => false,
|
||||
'courses' => false,
|
||||
'library' => false,
|
||||
'events' => true,
|
||||
'bookcases' => false,
|
||||
'meetups' => true,
|
||||
'association' => false,
|
||||
|
||||
'nostr.groups' => false,
|
||||
'nostr.plebs' => false,
|
||||
];
|
||||
};
|
||||
2
.gitignore
vendored
@@ -30,3 +30,5 @@ yarn-error.log
|
||||
!.yarn/releases
|
||||
|
||||
.blueprint
|
||||
|
||||
.features.php
|
||||
|
||||
@@ -19,7 +19,7 @@ class DownloadMeetupCalendar extends Controller
|
||||
if ($request->has('meetup')) {
|
||||
$meetup = Meetup::query()
|
||||
->with([
|
||||
'meetupEvents',
|
||||
'meetupEvents.meetup',
|
||||
])
|
||||
->findOrFail($request->input('meetup'));
|
||||
$events = $meetup->meetupEvents;
|
||||
|
||||
@@ -14,7 +14,7 @@ class Auth47Component extends Component
|
||||
public function mount()
|
||||
{
|
||||
$this->k1 = bin2hex(str()->random(32));
|
||||
$this->url = 'auth47://'.$this->k1.'?c=https://einundzwanzig.eu-1.sharedwithexpose.com/auth/auth47-callback&r=https://einundzwanzig.eu-1.sharedwithexpose.com/auth/auth47-callback';
|
||||
$this->url = 'auth47://'.$this->k1.'?c=https://einundzwanzig.sharedwithexpose.com/auth/auth47-callback&r=https://einundzwanzig.eu-1.sharedwithexpose.com/auth/auth47-callback';
|
||||
$this->qrCode = base64_encode(QrCode::format('png')
|
||||
->size(600)
|
||||
->errorCorrection('L')
|
||||
|
||||
@@ -33,7 +33,7 @@ class LNUrlAuth extends Component
|
||||
{
|
||||
$this->k1 = bin2hex(str()->random(32));
|
||||
if (app()->environment('local')) {
|
||||
$this->url = 'https://einundzwanzig.eu-1.sharedwithexpose.com/api/lnurl-auth-callback?tag=login&k1='.$this->k1.'&action=login';
|
||||
$this->url = 'https://einundzwanzig.sharedwithexpose.com/api/lnurl-auth-callback?tag=login&k1='.$this->k1.'&action=login';
|
||||
} else {
|
||||
$this->url = url('/api/lnurl-auth-callback?tag=login&k1='.$this->k1.'&action=login');
|
||||
}
|
||||
|
||||
@@ -14,19 +14,12 @@ class Gallery extends Component
|
||||
|
||||
public function mount()
|
||||
{
|
||||
$this->bindles = LibraryItem::query()
|
||||
->where('type', 'bindle')
|
||||
->latest('id')
|
||||
->get();
|
||||
$this->bindles = LibraryItem::searchLibraryItems('bindle');
|
||||
}
|
||||
|
||||
public function updatedSearch($value)
|
||||
{
|
||||
$this->bindles = LibraryItem::query()
|
||||
->where('type', 'bindle')
|
||||
->where('name', 'ilike', "%{$value}%")
|
||||
->latest('id')
|
||||
->get();
|
||||
$this->bindles = LibraryItem::searchLibraryItems('bindle', $value);
|
||||
}
|
||||
|
||||
public function deleteBindle($id)
|
||||
|
||||
@@ -11,7 +11,11 @@ class Footer extends Component
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
$l = Cookie::get('lang', config('app.locale'));
|
||||
$locale = config('app.locale');
|
||||
if ($locale === 'nl-be') {
|
||||
$locale = 'nl';
|
||||
}
|
||||
$l = Cookie::get('lang', $locale);
|
||||
$language = Language::query()
|
||||
->where('language', $l)
|
||||
->first();
|
||||
|
||||
@@ -74,6 +74,10 @@ class Header extends Component
|
||||
|
||||
public function updatedL($value)
|
||||
{
|
||||
if ($value === 'nl-be') {
|
||||
$value = 'nl';
|
||||
}
|
||||
|
||||
Cookie::queue('lang', $value, 60 * 24 * 365);
|
||||
|
||||
return redirect(request()->header('Referer'));
|
||||
@@ -151,9 +155,8 @@ class Header extends Component
|
||||
->orderBy('name')
|
||||
->get()
|
||||
->map(function (Country $country) {
|
||||
$country->name = config('countries.emoji_flags')[str($country->code)
|
||||
->upper()
|
||||
->toString()].' '.$country->name;
|
||||
$flag = config('countries.emoji_flags')[str($country->code)->upper()->toString()] ?? '';
|
||||
$country->name = $flag . ' ' . $country->name;
|
||||
|
||||
return $country;
|
||||
}),
|
||||
|
||||
@@ -26,6 +26,9 @@ class Welcome extends Component
|
||||
public function mount()
|
||||
{
|
||||
$this->l = Cookie::get('lang') ?: config('app.locale');
|
||||
if ($this->l === 'nl-be') {
|
||||
$this->l = 'nl';
|
||||
}
|
||||
$this->c = Cookie::get('country') ?: config('app.country');
|
||||
Cookie::queue('lang', $this->l, 60 * 24 * 365);
|
||||
Cookie::queue('country', $this->c, 60 * 24 * 365);
|
||||
@@ -45,6 +48,10 @@ class Welcome extends Component
|
||||
$l = $this->l;
|
||||
}
|
||||
|
||||
if ($this->l === 'nl-be') {
|
||||
$this->l = 'nl';
|
||||
}
|
||||
|
||||
Cookie::queue('lang', $this->l, 60 * 24 * 365);
|
||||
Cookie::queue('country', $this->c, 60 * 24 * 365);
|
||||
|
||||
@@ -59,9 +66,8 @@ class Welcome extends Component
|
||||
->orderBy('name')
|
||||
->get()
|
||||
->map(function (Country $country) {
|
||||
$country->name = config('countries.emoji_flags')[str($country->code)
|
||||
->upper()
|
||||
->toString()].' '.$country->name;
|
||||
$flag = config('countries.emoji_flags')[str($country->code)->upper()->toString()] ?? '';
|
||||
$country->name = $flag . ' ' . $country->name;
|
||||
|
||||
return $country;
|
||||
}),
|
||||
|
||||
@@ -20,7 +20,11 @@ class LandingPage extends Component
|
||||
|
||||
public function mount()
|
||||
{
|
||||
$this->meetup->load([
|
||||
$this->meetup
|
||||
->loadCount([
|
||||
'meetupEvents'
|
||||
])
|
||||
->load([
|
||||
'media',
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,11 @@ class Meetups extends Component
|
||||
'link' => route('meetup.landing', [
|
||||
'country' => $meetup->city->country->code,
|
||||
'meetup' => $meetup,
|
||||
])
|
||||
]),
|
||||
'ics' => route('meetup.ics', [
|
||||
'country' => $meetup->city->country->code,
|
||||
'meetup' => $meetup,
|
||||
]),
|
||||
])
|
||||
->toArray();
|
||||
if (count($this->myMeetups) > 0) {
|
||||
@@ -121,7 +125,11 @@ class Meetups extends Component
|
||||
'link' => route('meetup.landing', [
|
||||
'country' => $meetup->city->country->code,
|
||||
'meetup' => $meetup,
|
||||
])
|
||||
]),
|
||||
'ics' => route('meetup.ics', [
|
||||
'country' => $meetup->city->country->code,
|
||||
'meetup' => $meetup,
|
||||
]),
|
||||
])
|
||||
->toArray();
|
||||
$this->notification()
|
||||
|
||||
@@ -30,7 +30,7 @@ class LightningWallet extends Component
|
||||
{
|
||||
$this->k1 = bin2hex(str()->random(32));
|
||||
if (app()->environment('local')) {
|
||||
$this->url = 'https://einundzwanzig.eu-1.sharedwithexpose.com/api/lnurl-auth-callback?tag=login&k1='.$this->k1.'&action=login';
|
||||
$this->url = 'https://einundzwanzig.sharedwithexpose.com/api/lnurl-auth-callback?tag=login&k1='.$this->k1.'&action=login';
|
||||
} else {
|
||||
$this->url = url('/api/lnurl-auth-callback?tag=login&k1='.$this->k1.'&action=login');
|
||||
}
|
||||
|
||||
@@ -17,7 +17,11 @@ class SetTimezoneForNovaMiddleware
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
App::setLocale(Cookie::get('lang') ?: config('app.locale'));
|
||||
$l = Cookie::get('lang') ?: config('app.locale');
|
||||
if ($l === 'nl-be') {
|
||||
$l = 'nl';
|
||||
}
|
||||
App::setLocale($l);
|
||||
if ($request->user()
|
||||
&& $timezone = $request->user()->timezone
|
||||
) {
|
||||
|
||||
@@ -164,4 +164,17 @@ class LibraryItem extends Model implements HasMedia, Sortable, Feedable
|
||||
->link(url()->route('article.view', ['libraryItem' => $this]))
|
||||
->authorName($this->lecturer->name);
|
||||
}
|
||||
|
||||
public static function searchLibraryItems($type, $value = null)
|
||||
{
|
||||
$query = self::query()
|
||||
->where('type', $type)
|
||||
->latest('id');
|
||||
|
||||
if ($value) {
|
||||
$query->where('name', 'ilike', "%{$value}%");
|
||||
}
|
||||
|
||||
return $query->get();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,11 +70,11 @@ class User extends Authenticatable implements MustVerifyEmail, CanComment, Ciphe
|
||||
->addTextField('wallet_id');
|
||||
|
||||
$encryptedRow
|
||||
->addField('public_key')
|
||||
->addField('lightning_address')
|
||||
->addField('lnurl')
|
||||
->addField('node_id')
|
||||
->addField('email')
|
||||
->addOptionalTextField('public_key')
|
||||
->addOptionalTextField('lightning_address')
|
||||
->addOptionalTextField('lnurl')
|
||||
->addOptionalTextField('node_id')
|
||||
->addOptionalTextField('email')
|
||||
->addOptionalTextField('paynym')
|
||||
->addJsonField('lnbits', $map)
|
||||
->addBlindIndex('public_key', new BlindIndex('public_key_index'))
|
||||
|
||||
@@ -37,6 +37,7 @@ class CountryPolicy extends BasePolicy
|
||||
*/
|
||||
public function create(User $user): bool
|
||||
{
|
||||
dd($user);
|
||||
return $user->can((new \ReflectionClass($this))->getShortName().'.'.__FUNCTION__);
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ class CourseEventPolicy extends BasePolicy
|
||||
*/
|
||||
public function update(User $user, CourseEvent $courseEvent): bool
|
||||
{
|
||||
return $user->belongsToTeam($courseEvent->course->lecturer->team) || $user->can((new \ReflectionClass($this))->getShortName().'.'.__FUNCTION__);
|
||||
return $courseEvent->created_by === $user->id || $user->can((new \ReflectionClass($this))->getShortName() . '.' . __FUNCTION__);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
"symfony/mailgun-mailer": "^6.2",
|
||||
"wesselperik/nova-status-field": "^2.1",
|
||||
"wireui/wireui": "^1.17.9",
|
||||
"ylsideas/feature-flags": "^2.0",
|
||||
"ziffmedia/nova-select-plus": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
|
||||
1637
composer.lock
generated
51
config/features.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pipeline
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The pipeline for the feature to travel through.
|
||||
|
|
||||
*/
|
||||
|
||||
'pipeline' => ['database', 'in_memory'],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Gateways
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Configures the different gateway options
|
||||
|
|
||||
*/
|
||||
|
||||
'gateways' => [
|
||||
'in_memory' => [
|
||||
'file' => env('FEATURE_FLAG_IN_MEMORY_FILE', '.features.php'),
|
||||
'driver' => 'in_memory',
|
||||
],
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'cache' => [
|
||||
'ttl' => 600,
|
||||
],
|
||||
'connection' => env('FEATURE_FLAG_DATABASE_CONNECTION'),
|
||||
'table' => env('FEATURE_FLAG_DATABASE_TABLE', 'features'),
|
||||
],
|
||||
'gate' => [
|
||||
'driver' => 'gate',
|
||||
'gate' => env('FEATURE_FLAG_GATE_GATE', 'feature'),
|
||||
'guard' => env('FEATURE_FLAG_GATE_GUARD'),
|
||||
'cache' => [
|
||||
'ttl' => 600,
|
||||
],
|
||||
],
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'prefix' => env('FEATURE_FLAG_REDIS_PREFIX', 'features'),
|
||||
'connection' => env('FEATURE_FLAG_REDIS_CONNECTION', 'default'),
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateFeaturesTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('features', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('title')->nullable();
|
||||
$table->string('feature')->unique();
|
||||
$table->text('description')->nullable();
|
||||
$table->timestamp('active_at')->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('features');
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
# For more information: https://laravel.com/docs/sail
|
||||
version: '3'
|
||||
services:
|
||||
laravel.test:
|
||||
laravel:
|
||||
build:
|
||||
context: ./docker/8.2
|
||||
dockerfile: Dockerfile
|
||||
|
||||
2
public/vendor/horizon/app.js
vendored
2
public/vendor/horizon/mix-manifest.json
vendored
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"/app.js": "/app.js?id=ff1533ec4a7afad65c5bd7bcc2cc7d7b",
|
||||
"/app.js": "/app.js?id=79bae40dcb18de9ca1b5d0008c577471",
|
||||
"/app-dark.css": "/app-dark.css?id=15c72df05e2b1147fa3e4b0670cfb435",
|
||||
"/app.css": "/app.css?id=4d6a1a7fe095eedc2cb2a4ce822ea8a5",
|
||||
"/img/favicon.png": "/img/favicon.png?id=1542bfe8a0010dcbee710da13cce367f",
|
||||
|
||||
@@ -156,6 +156,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -166,4 +167,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -31,4 +32,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -77,4 +78,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -161,6 +161,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -171,4 +172,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -64,4 +65,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -19,19 +19,33 @@
|
||||
</div>
|
||||
<div class="hidden lg:flex lg:gap-x-8" x-data="Components.popoverGroup()" x-init="init()">
|
||||
|
||||
@feature('news')
|
||||
@include('livewire.frontend.navigation.news')
|
||||
@endfeature
|
||||
|
||||
@feature('meetups')
|
||||
@include('livewire.frontend.navigation.meetups')
|
||||
@endfeature
|
||||
|
||||
@feature('courses')
|
||||
@include('livewire.frontend.navigation.courses')
|
||||
@endfeature
|
||||
|
||||
@feature('library')
|
||||
@include('livewire.frontend.navigation.library')
|
||||
@endfeature
|
||||
|
||||
@feature('events')
|
||||
@include('livewire.frontend.navigation.events')
|
||||
@endfeature
|
||||
|
||||
@feature('bookcases')
|
||||
@include('livewire.frontend.navigation.bookcases')
|
||||
@endfeature
|
||||
|
||||
@feature('association')
|
||||
@include('livewire.frontend.navigation.association')
|
||||
@endfeature
|
||||
|
||||
@auth
|
||||
@include('livewire.frontend.navigation.profile')
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
{{ __('Meetup dates') }}
|
||||
</a>
|
||||
|
||||
@feature('nostr.plebs')
|
||||
<a href="{{ route('nostr.plebs') }}"
|
||||
class="flex gap-x-4 py-2 text-sm font-semibold leading-6 text-gray-900">
|
||||
<svg class="svg-inline--fa flex-none text-gray-400 w-6 h-5 mr-2 -ml-1" fill="#000000"
|
||||
@@ -141,6 +142,7 @@
|
||||
</svg>
|
||||
{{ __('Plebs on Nostr') }}
|
||||
</a>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -24,5 +24,7 @@
|
||||
class="block rounded-lg py-2 pl-6 pr-3 text-sm font-semibold leading-7 text-gray-900 hover:bg-gray-50">{{ __('Meetup dates') }}</a>
|
||||
<a href="{{ route('nostr.plebs') }}"
|
||||
class="block rounded-lg py-2 pl-6 pr-3 text-sm font-semibold leading-7 text-gray-900 hover:bg-gray-50">{{ __('Plebs on Nostr') }}</a>
|
||||
<a href="{{ route('profile.meetups') }}"
|
||||
class="block rounded-lg py-2 pl-6 pr-3 text-sm font-semibold leading-7 text-gray-900 hover:bg-gray-50">{{ __('My meetups') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
x-show="open" style="display: none;" x-cloak>
|
||||
<a href="{{ route('profile.show') }}"
|
||||
class="block rounded-lg py-2 pl-6 pr-3 text-sm font-semibold leading-7 text-gray-900 hover:bg-gray-50">{{ __('My profile') }}</a>
|
||||
<a href="{{ route('profile.meetups') }}"
|
||||
class="block rounded-lg py-2 pl-6 pr-3 text-sm font-semibold leading-7 text-gray-900 hover:bg-gray-50">{{ __('My meetups') }}</a>
|
||||
<a href="{{ route('profile.wallet') }}"
|
||||
class="block rounded-lg py-2 pl-6 pr-3 text-sm font-semibold leading-7 text-gray-900 hover:bg-gray-50">{{ __('Change lightning wallet/pubkey') }}</a>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<div class="min-h-screen bg-21gray flex flex-col justify-between">
|
||||
|
||||
<section class="relative px-10 pt-16 pb-24 sm:py-16 sm:overflow-hidden">
|
||||
<img class="absolute h-43 left-0 z-0 w-3/4 transform -translate-y-1/2 opacity-70 top-1/2"
|
||||
src="{{ asset('img/gradient-blob.svg') }}">
|
||||
@@ -13,6 +14,7 @@
|
||||
</p>
|
||||
<div
|
||||
class="max-w-sm text-lg text-gray-200 space-y-2 sm:space-y-0 sm:space-x-2 flex flex-col sm:flex-row items-start sm:items-end">
|
||||
@feature('change.country')
|
||||
<x-native-select
|
||||
label="{{ __('Change country') }}"
|
||||
wire:model="c"
|
||||
@@ -20,6 +22,8 @@
|
||||
option-value="code"
|
||||
:options="$countries"
|
||||
/>
|
||||
@endfeature
|
||||
@feature('change.language')
|
||||
<x-select
|
||||
label="{{ __('Change language') }}"
|
||||
wire:model="l"
|
||||
@@ -29,6 +33,7 @@
|
||||
option-label="name"
|
||||
option-value="language"
|
||||
/>
|
||||
@endfeature
|
||||
<div class="py-2 sm:py-0">
|
||||
@if(!auth()->check())
|
||||
<x-button secondary href="{{ route('auth.login') }}">
|
||||
@@ -50,6 +55,7 @@
|
||||
<div class="grid w-full grid-cols-1 gap-8 sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4">
|
||||
|
||||
{{-- News --}}
|
||||
@feature('news')
|
||||
<div class="row-span-2 col-span-full sm:col-span-1 md:col-start-1 sm:row-start-2 md:row-start-3">
|
||||
<a href="{{ route('article.overview') }}"
|
||||
class="relative flex flex-col items-start justify-end w-full h-full overflow-hidden bg-black shadow-lg rounded-xl group"
|
||||
@@ -68,7 +74,9 @@
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
@feature('courses')
|
||||
<div
|
||||
class="row-span-2 col-span-full sm:col-span-1 md:col-start-1 xl:col-start-2 sm:row-start-4 md:row-start-5 xl:row-start-2">
|
||||
<a href="{{ route('school.table.course', ['country' => $c]) }}"
|
||||
@@ -90,7 +98,9 @@
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
@feature('library')
|
||||
<div
|
||||
class="row-span-2 col-span-full sm:col-span-1 md:col-start-2 xl:col-start-2 sm:row-start-6 md:row-start-2 xl:row-start-4">
|
||||
<a href="{{ route('library.table.libraryItems', ['country' => $c]) }}"
|
||||
@@ -112,7 +122,9 @@
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
@feature('events')
|
||||
<div
|
||||
class="row-span-2 col-span-full sm:col-span-1 md:col-start-2 xl:col-start-3 sm:row-start-1 md:row-start-4 xl:row-start-1">
|
||||
<a href="{{ route('bitcoinEvent.table.bitcoinEvent', ['country' => $c]) }}"
|
||||
@@ -134,7 +146,9 @@
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
@feature('bookcases')
|
||||
<div
|
||||
class="row-span-2 col-span-full sm:col-span-1 md:col-start-3 xl:col-start-3 sm:row-start-3 md:row-start-1 xl:row-start-3">
|
||||
<a href="{{ route('bookCases.world', ['country' => $c]) }}"
|
||||
@@ -156,7 +170,9 @@
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
@feature('meetups')
|
||||
<div
|
||||
class="row-span-2 col-span-full sm:col-span-1 md:col-start-3 xl:col-start-4 sm:row-start-5 md:row-start-3 xl:row-start-2">
|
||||
<a href="{{ route('meetup.table.meetup', ['country' => $c]) }}"
|
||||
@@ -176,6 +192,7 @@
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -185,6 +202,7 @@
|
||||
<livewire:frontend.footer/>
|
||||
</div>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -195,4 +213,5 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
</div>
|
||||
|
||||
@@ -171,6 +171,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -181,4 +182,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -117,6 +117,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -127,4 +128,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -128,6 +128,17 @@
|
||||
</x-button>
|
||||
@endif
|
||||
</div>
|
||||
<div>
|
||||
@if($meetup->nostr && str($meetup->nostr)->contains('npub1'))
|
||||
<x-button
|
||||
target="_blank"
|
||||
:href="'https://njump.me/'.$meetup->nostr"
|
||||
primary lg class="mt-4 whitespace-nowrap">
|
||||
<i class="fa fa-thin fa-external-link mr-2"></i>
|
||||
{{ __('Nostr') }}
|
||||
</x-button>
|
||||
@endif
|
||||
</div>
|
||||
<div>
|
||||
@if($meetup->matrix_group)
|
||||
<x-button
|
||||
@@ -269,6 +280,27 @@
|
||||
</div>
|
||||
@endauth
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col space-y-2">
|
||||
<x-button
|
||||
x-data="{}"
|
||||
@click.prevent="window.navigator.clipboard.writeText('{{ route('meetup.ics', ['country' => $this->country ?? $meetup->city->country->code, 'meetup' => $meetup]) }}');window.$wireui.notify({title:'{{ __('Calendar Stream Url copied!') }}',description:'{{ __('Paste the calendar stream link into a compatible calendar app.') }}',icon:'success'});"
|
||||
primary class="mt-4 whitespace-nowrap">
|
||||
<i class="fa fa-thin fa-calendar-circle-exclamation mr-2"></i>
|
||||
{{ __('Calendar Stream-Url') }} {{ $meetup->name }}
|
||||
</x-button>
|
||||
@if(auth()->check() && auth()->user()->meetups->count() > 0)
|
||||
<x-button
|
||||
x-data="{
|
||||
textToCopy: '{{ route('meetup.ics', ['country' => 'de', 'my' => auth()->user()->meetups->pluck('id')->toArray()]) }}',
|
||||
}"
|
||||
@click.prevent="window.navigator.clipboard.writeText(textToCopy);window.$wireui.notify({title:'{{ __('Calendar Stream Url copied!') }}',description:'{{ __('Paste the calendar stream link into a compatible calendar app.') }}',icon:'success'});"
|
||||
black>
|
||||
<i class="fa fa-thin fa-calendar-heart mr-2"></i>
|
||||
{{ __('Calendar Stream-Url for my meetups only') }}
|
||||
</x-button>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -319,6 +351,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -329,4 +362,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -35,6 +35,15 @@
|
||||
{{ __('SimpleX-Link') }}
|
||||
</x-button>
|
||||
@endif
|
||||
@if($meetup->nostr && str($meetup->nostr)->contains('npub1'))
|
||||
<x-button
|
||||
target="_blank"
|
||||
:href="'https://njump.me/'.$meetup->nostr"
|
||||
primary lg class="mt-4 whitespace-nowrap">
|
||||
<i class="fa fa-thin fa-external-link mr-2"></i>
|
||||
{{ __('Nostr') }}
|
||||
</x-button>
|
||||
@endif
|
||||
@if($meetup->webpage)
|
||||
<x-button
|
||||
target="_blank"
|
||||
@@ -73,11 +82,20 @@
|
||||
|
||||
<div class="max-w-screen-2xl mx-auto px-2 sm:px-10 space-y-4">
|
||||
|
||||
<section class="h-auto px-10 py-16">
|
||||
<div class="max-w-3xl mx-auto space-y-4 sm:text-center">
|
||||
<h2 class="text-4xl sm:text-5xl font-semibold text-white">
|
||||
{{ __('Events') }}
|
||||
</h2>
|
||||
<section class="h-auto py-16">
|
||||
<div class="mx-auto space-y-4 sm:text-center">
|
||||
<div class="flex space-x-4 items-baseline">
|
||||
<div class="text-4xl sm:text-5xl font-semibold text-white">{{ __('Events') }}</div>
|
||||
<div>
|
||||
<x-button
|
||||
x-data="{}"
|
||||
@click.prevent="window.navigator.clipboard.writeText('{{ route('meetup.ics', ['country' => $this->country ?? $meetup->city->country->code, 'meetup' => $meetup]) }}');window.$wireui.notify({title:'{{ __('Calendar Stream Url copied!') }}',description:'{{ __('Paste the calendar stream link into a compatible calendar app.') }}',icon:'success'});"
|
||||
primary lg class="mt-4 whitespace-nowrap">
|
||||
<i class="fa fa-thin fa-calendar-circle-exclamation mr-2"></i>
|
||||
{{ __('Calendar Stream-Url') }}
|
||||
</x-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -86,7 +104,8 @@
|
||||
@php
|
||||
$activeClass = $activeEvent === $meetupEvent->id ? 'bg-gradient-to-r from-amber-800 via-amber-600 to-amber-500' : 'bg-amber-500';
|
||||
@endphp
|
||||
<li id="meetupEventId_{{ $meetupEvent->id }}" class="{{ $activeClass }} col-span-1 flex flex-col divide-y divide-gray-200 rounded-lg text-center shadow-2xl">
|
||||
<li id="meetupEventId_{{ $meetupEvent->id }}"
|
||||
class="{{ $activeClass }} col-span-1 flex flex-col divide-y divide-gray-200 rounded-lg text-center shadow-2xl">
|
||||
<div class="flex flex-1 flex-col p-8">
|
||||
{{--<img class="mx-auto h-32 w-32 object-contain flex-shrink-0 rounded"
|
||||
src="{{ $meetupEvent->meetup->getFirstMediaUrl('logo') }}"
|
||||
@@ -117,7 +136,8 @@
|
||||
</button>
|
||||
</h2>
|
||||
<div x-show="expanded" x-collapse>
|
||||
<div class="px-6 pb-4 text-left">{!! nl2br($meetupEvent->description) !!}</div>
|
||||
<div
|
||||
class="px-6 pb-4 text-left">{!! nl2br($meetupEvent->description) !!}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -126,7 +146,8 @@
|
||||
<div>
|
||||
<div class="-mt-px flex divide-x divide-gray-200">
|
||||
<div class="-ml-px flex w-0 flex-1">
|
||||
<a target="_blank" href="{{ route('meetup.event.landing', ['country' => $country, 'meetupEvent' => $meetupEvent]) }}"
|
||||
<a target="_blank"
|
||||
href="{{ route('meetup.event.landing', ['country' => $country, 'meetupEvent' => $meetupEvent]) }}"
|
||||
class="relative inline-flex w-0 flex-1 items-center justify-center rounded-br-lg border border-transparent py-4 text-sm font-medium text-gray-700 hover:text-gray-500">
|
||||
<i class="text-gray-100 text-2xl fa-thin fa-right-to-bracket"></i>
|
||||
<span class="ml-3 text-gray-100 text-2xl">{{ __('Link to participate') }}</span>
|
||||
@@ -211,6 +232,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -221,4 +243,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -71,4 +72,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -201,6 +201,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
@push('modals')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
@@ -213,4 +214,5 @@
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endpush
|
||||
@endfeature
|
||||
</div>
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -47,4 +48,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -340,6 +340,7 @@
|
||||
});
|
||||
}})"></div>
|
||||
|
||||
@feature('nostr.groups')
|
||||
@push('modals')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script src="https://cdn.jsdelivr.net/npm/party-js@latest/bundle/party.min.js"></script>
|
||||
@@ -353,4 +354,6 @@
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endpush
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -13,6 +13,19 @@
|
||||
{{ __('Select one or more meetup groups so that you can get access to these groups in the backend.') }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex flex-col space-y-2">
|
||||
@if(auth()->check() && auth()->user()->meetups->count() > 0)
|
||||
<x-button
|
||||
x-data="{
|
||||
textToCopy: '{{ route('meetup.ics', ['country' => 'de', 'my' => auth()->user()->meetups->pluck('id')->toArray()]) }}',
|
||||
}"
|
||||
@click.prevent="window.navigator.clipboard.writeText(textToCopy);window.$wireui.notify({title:'{{ __('Calendar Stream Url copied!') }}',description:'{{ __('Paste the calendar stream link into a compatible calendar app.') }}',icon:'success'});"
|
||||
black>
|
||||
<i class="fa fa-thin fa-calendar-heart mr-2"></i>
|
||||
{{ __('Calendar Stream-Url for my meetups only') }}
|
||||
</x-button>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -24,11 +37,24 @@
|
||||
</p>
|
||||
<div class="grid grid-cols-1 gap-2">
|
||||
@foreach($myMeetupNames as $myMeetup)
|
||||
<div class="flex items-center space-x-2">
|
||||
<div>
|
||||
<a href="{{ $myMeetup['link'] }}">
|
||||
<x-badge
|
||||
class="whitespace-nowrap" lg outline white
|
||||
label="{{ $myMeetup['name'] }}"/>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<x-badge
|
||||
x-data="{}"
|
||||
@click.prevent="window.navigator.clipboard.writeText('{{ $myMeetup['ics'] }}');window.$wireui.notify({title:'{{ __('Calendar Stream Url copied!') }}',description:'{{ __('Paste the calendar stream link into a compatible calendar app.') }}',icon:'success'});"
|
||||
primary lg class="whitespace-nowrap cursor-pointer">
|
||||
<i class="fa fa-thin fa-calendar-circle-exclamation mr-2"></i>
|
||||
{{ __('Calendar') }}
|
||||
</x-badge>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -227,6 +227,7 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -237,4 +238,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -192,6 +192,7 @@
|
||||
{{-- FOOTER --}}
|
||||
<livewire:frontend.footer/>
|
||||
|
||||
@feature('nostr.groups')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
src="{{ asset('dist/einundzwanzig.chat.js') }}"
|
||||
@@ -202,4 +203,6 @@
|
||||
></script>
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -72,6 +72,8 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/vegas/2.5.4/vegas.min.js"
|
||||
integrity="sha512-lYAcY5E6LZVeNB3Pky37SxbYKzo8A68MzKFoPg5oTuolhRm36D+YRvkrAQS4JuKsaGYeJ5KA5taMEtpNlPUeOA=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
|
||||
@feature('nostr.groups')
|
||||
@push('modals')
|
||||
<div wire:ignore class="z-50 hidden md:block">
|
||||
<script
|
||||
@@ -84,4 +86,6 @@
|
||||
<link rel="stylesheet" href="{{ asset('dist/einundzwanzig.chat.css') }}">
|
||||
</div>
|
||||
@endpush
|
||||
@endfeature
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
<div {{ $attributes->class($avatarClasses) }}>
|
||||
@if ($label)
|
||||
<span class="font-medium text-white dark:text-gray-200">
|
||||
{{ $label }}
|
||||
</span>
|
||||
@endif
|
||||
|
||||
@if ($src)
|
||||
<img @class([
|
||||
'shrink-0 object-cover object-center',
|
||||
'rounded-sm' => $squared,
|
||||
'rounded-full' => !$squared,
|
||||
$size,
|
||||
])
|
||||
src="{{ $src }}"
|
||||
/>
|
||||
@endif
|
||||
|
||||
@if (!$src && !$label)
|
||||
<svg
|
||||
class="shrink-0 text-gray-300 bg-gray-100 dark:bg-gray-600"
|
||||
fill="currentColor"
|
||||
viewBox="0 0 24 24">
|
||||
<path d="M24 20.993V24H0v-2.996A14.977 14.977 0 0112.004 15c4.904 0 9.26 2.354 11.996 5.993zM16.002 8.999a4 4 0 11-8 0 4 4 0 018 0z" />
|
||||
</svg>
|
||||
@endif
|
||||
</div>
|
||||
@@ -1,23 +0,0 @@
|
||||
<span {{ $attributes }}>
|
||||
@if ($icon)
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
:name="$icon"
|
||||
class="{{ $iconSize }} shrink-0"
|
||||
/>
|
||||
@elseif (isset($prepend))
|
||||
<div {{ $prepend->attributes }}>{{ $prepend }}</div>
|
||||
@endif
|
||||
|
||||
{{ $label ?? $slot }}
|
||||
|
||||
@if ($rightIcon)
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
:name="$rightIcon"
|
||||
class="{{ $iconSize }} shrink-0"
|
||||
/>
|
||||
@elseif (isset($append))
|
||||
<div {{ $append->attributes }}>{{ $append }}</div>
|
||||
@endif
|
||||
</span>
|
||||
@@ -1,48 +0,0 @@
|
||||
@php
|
||||
$tag = $href ? 'a' : 'button';
|
||||
|
||||
$defaultAttributes = [
|
||||
'wire:loading.attr' => 'disabled',
|
||||
'wire:loading.class' => '!cursor-wait',
|
||||
'wire:target' => ($spinner && strlen($spinner) > 1) ? $spinner : null,
|
||||
];
|
||||
|
||||
$href === null
|
||||
? $defaultAttributes['type'] = 'button'
|
||||
: $defaultAttributes['href'] = $href;
|
||||
@endphp
|
||||
|
||||
<{{ $tag }} {{ $attributes->merge($defaultAttributes) }}>
|
||||
@if ($icon)
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
:name="$icon"
|
||||
class="{{ $iconSize }} shrink-0"
|
||||
/>
|
||||
@endif
|
||||
|
||||
{{ $label ?? $slot }}
|
||||
|
||||
@if ($rightIcon)
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
:name="$rightIcon"
|
||||
class="{{ $iconSize }} shrink-0"
|
||||
:wire:loading.remove="(bool) $spinner"
|
||||
/>
|
||||
@endif
|
||||
|
||||
@if ($spinner)
|
||||
<svg class="animate-spin {{ $iconSize }} shrink-0"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
@if (preg_replace('/[^a-zA-Z]+/', '', $spinner))
|
||||
wire:target="{{ $spinner }}"
|
||||
@endif
|
||||
wire:loading.delay{{ $loadingDelay ? ".{$loadingDelay}":'' }}>
|
||||
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
||||
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
||||
</svg>
|
||||
@endif
|
||||
</{{ $tag }}>
|
||||
@@ -1,23 +0,0 @@
|
||||
<div class="{{ $cardClasses }}">
|
||||
@if ($header)
|
||||
{{ $header }}
|
||||
@elseif ($title || $action)
|
||||
<div class="{{ $headerClasses }}">
|
||||
<h3 class="font-medium whitespace-normal text-md text-secondary-700 dark:text-secondary-400">{{ $title }}</h3>
|
||||
|
||||
@if ($action)
|
||||
{{ $action }}
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div {{ $attributes->merge(['class' => "{$padding} text-secondary-700 rounded-b-xl grow dark:text-secondary-400"]) }}>
|
||||
{{ $slot }}
|
||||
</div>
|
||||
|
||||
@if ($footer)
|
||||
<div class="{{ $footerClasses }}">
|
||||
{{ $footer }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@@ -1,50 +0,0 @@
|
||||
<div>
|
||||
<label for="{{ $id }}" class="flex items-center {{ $errors->has($name) ? 'text-negative-600':'' }}">
|
||||
<div class="relative flex items-start">
|
||||
@if ($leftLabel)
|
||||
<div class="mr-2 text-sm text-right">
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('label')"
|
||||
class=""
|
||||
:for="$id"
|
||||
:label="$leftLabel"
|
||||
:has-error="$errors->has($name)"
|
||||
/>
|
||||
@if($description)
|
||||
<div class="text-gray-500">{{ $description }}</div>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="flex items-center h-5">
|
||||
<input {{ $attributes->class([
|
||||
$getClasses($errors->has($name)),
|
||||
])->merge([
|
||||
'type' => 'checkbox',
|
||||
]) }} />
|
||||
</div>
|
||||
|
||||
@if ($label)
|
||||
<div class="ml-2 text-sm">
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('label')"
|
||||
class=""
|
||||
:for="$id"
|
||||
:label="$label"
|
||||
:has-error="$errors->has($name)"
|
||||
/>
|
||||
@if($description)
|
||||
<div id="{{ $id }} . comments-description" class="text-gray-500">{{ $description }}</div>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</label>
|
||||
|
||||
@if ($name)
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('error')"
|
||||
:name="$name"
|
||||
/>
|
||||
@endif
|
||||
</div>
|
||||
@@ -1,11 +0,0 @@
|
||||
<span {{ $attributes->merge() }}>
|
||||
@if ($icon)
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
:name="$icon"
|
||||
class="{{ $iconSize }} shrink-0"
|
||||
/>
|
||||
@else
|
||||
{{ $label ?? $slot }}
|
||||
@endif
|
||||
</span>
|
||||
@@ -1,45 +0,0 @@
|
||||
@php
|
||||
$tag = $href ? 'a' : 'button';
|
||||
|
||||
$defaultAttributes = [
|
||||
'wire:loading.attr' => 'disabled',
|
||||
'wire:loading.class' => '!cursor-wait',
|
||||
];
|
||||
|
||||
$href === null
|
||||
? $defaultAttributes['type'] = 'button'
|
||||
: $defaultAttributes['href'] = $href;
|
||||
@endphp
|
||||
|
||||
<{{ $tag }} {{ $attributes->merge($defaultAttributes) }}>
|
||||
<div @if($spinner)
|
||||
@if (preg_replace('/[^a-zA-Z]+/', '', $spinner))
|
||||
wire:target="{{ $spinner }}"
|
||||
@endif
|
||||
wire:loading.remove
|
||||
@endif>
|
||||
@if ($icon)
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
:name="$icon"
|
||||
class="{{ $iconSize }} shrink-0"
|
||||
/>
|
||||
@else
|
||||
{{ $label ?? $slot }}
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@if ($spinner)
|
||||
<svg class="animate-spin {{ $iconSize }} shrink-0"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
@if (preg_replace('/[^a-zA-Z]+/', '', $spinner))
|
||||
wire:target="{{ $spinner }}"
|
||||
@endif
|
||||
wire:loading.delay{{ $loadingDelay ? ".{$loadingDelay}":'' }}>
|
||||
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
||||
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
||||
</svg>
|
||||
@endif
|
||||
</{{ $tag }}>
|
||||
@@ -1,79 +0,0 @@
|
||||
<div x-data="wireui_color_picker({
|
||||
colorNameAsValue: @boolean($colorNameAsValue),
|
||||
|
||||
@if ($attributes->wire('model')->value())
|
||||
wireModifiers: @toJs($attributes->wireModifiers()),
|
||||
wireModel: @entangle($attributes->wire('model')),
|
||||
@endif
|
||||
|
||||
@if ($colors)
|
||||
colors: @toJs($getColors())
|
||||
@endif
|
||||
})" {{ $attributes->only(['class', 'wire:key'])->class('relative') }}>
|
||||
<x-dynamic-component
|
||||
{{ $attributes->except(['class', 'wire:key'])->whereDoesntStartWith('wire:model') }}
|
||||
:component="WireUi::component('input')"
|
||||
x-model="{{ $colorNameAsValue ? 'selected.name' : 'selected.value' }}"
|
||||
x-bind:class="{ 'pl-8': selected.value }"
|
||||
x-on:input="setColor($event.target.value)"
|
||||
x-ref="input"
|
||||
:label="$label"
|
||||
:prefix="null"
|
||||
:icon="null">
|
||||
<x-slot name="prefix">
|
||||
<template x-if="selected.value">
|
||||
<div
|
||||
class="w-4 h-4 rounded shadow border"
|
||||
:style="{ 'background-color': selected.value }"
|
||||
></div>
|
||||
</template>
|
||||
</x-slot>
|
||||
|
||||
<x-slot name="append">
|
||||
<div class="absolute inset-y-0 right-0 flex items-center p-0.5">
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('button')"
|
||||
class="h-full rounded-r-md"
|
||||
primary
|
||||
flat
|
||||
squared
|
||||
x-on:click="toggle"
|
||||
trigger
|
||||
:disabled="$disabled">
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
class="
|
||||
w-4 h-4 group-focus:text-primary-700 text-gray-400 dark:text-gray-600
|
||||
dark:group-hover:text-gray-500 dark:group-focus:text-primary-500
|
||||
"
|
||||
:name="$rightIcon"
|
||||
/>
|
||||
</x-dynamic-component>
|
||||
</div>
|
||||
</x-slot>
|
||||
</x-dynamic-component>
|
||||
|
||||
<x-wireui::parts.popover
|
||||
:margin="(bool) $label"
|
||||
class="
|
||||
max-h-56 py-3 px-2 sm:py-2 sm:px-1 sm:w-72 sm:rounded-xl
|
||||
overflow-y-auto soft-scrollbar border border-secondary-200
|
||||
">
|
||||
<div class="flex flex-wrap items-center justify-center gap-1 sm:gap-0.5 max-w-[18rem] mx-auto">
|
||||
<span class="sr-only">dropdown-open</span>
|
||||
|
||||
<template x-for="(color, index) in colors" :key="index">
|
||||
<button class="
|
||||
w-6 h-6 rounded shadow-lg border hover:scale-125 transition-all ease-in-out duration-100 cursor-pointer
|
||||
hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-primary-600 sdark:focus:ring-gray-400
|
||||
dark:border-0 dark:hover:ring-2 dark:hover:ring-gray-400
|
||||
"
|
||||
:style="{ 'background-color': color.value }"
|
||||
x-on:click="select(color)"
|
||||
:title="color.name"
|
||||
type="button">
|
||||
</button>
|
||||
</template>
|
||||
</div>
|
||||
</x-wireui::parts.popover>
|
||||
</div>
|
||||
@@ -1,222 +0,0 @@
|
||||
<div
|
||||
x-data="wireui_datetime_picker({
|
||||
model: @entangleable($attributes->wire('model')),
|
||||
})"
|
||||
x-props="{
|
||||
config: {
|
||||
interval: @toJs($interval),
|
||||
is12H: @boolean($timeFormat == '12'),
|
||||
readonly: @boolean($readonly),
|
||||
disabled: @boolean($disabled),
|
||||
min: @toJs($min ? $min->format('Y-m-d\TH:i') : null),
|
||||
max: @toJs($max ? $max->format('Y-m-d\TH:i') : null),
|
||||
minTime: @toJs($minTime),
|
||||
maxTime: @toJs($maxTime),
|
||||
},
|
||||
withoutTimezone: @boolean($withoutTimezone),
|
||||
timezone: @toJs($timezone),
|
||||
userTimezone: @toJs($userTimezone ?? ''),
|
||||
parseFormat: @toJs($parseFormat ?? ''),
|
||||
displayFormat: @toJs($displayFormat ?? ''),
|
||||
weekDays: @lang('wireui::messages.datePicker.days'),
|
||||
monthNames: @lang('wireui::messages.datePicker.months'),
|
||||
withoutTime: @boolean($withoutTime),
|
||||
}"
|
||||
{{ $attributes
|
||||
->only('wire:key')
|
||||
->class('relative')
|
||||
->merge(['wire:key' => "datepicker::{$name}"]) }}
|
||||
>
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('input')"
|
||||
{{ $attributes->whereDoesntStartWith(['wire:model', 'x-model', 'wire:key', 'readonly']) }}
|
||||
:borderless="$borderless"
|
||||
:shadowless="$shadowless"
|
||||
:label="$label"
|
||||
:hint="$hint"
|
||||
:corner-hint="$cornerHint"
|
||||
:icon="$icon"
|
||||
:prefix="$prefix"
|
||||
:prepend="$prepend"
|
||||
readonly
|
||||
x-on:click="toggle"
|
||||
x-bind:value="model ? getDisplayValue() : null">
|
||||
@if (!$readonly && !$disabled)
|
||||
<x-slot name="append">
|
||||
<div class="absolute inset-y-0 right-3 z-5 flex items-center justify-center">
|
||||
<div class="flex items-center gap-x-2 my-auto
|
||||
{{ $errors->has($name) ? 'text-negative-400 dark:text-negative-600' : 'text-secondary-400' }}">
|
||||
|
||||
@if ($clearable)
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
class="cursor-pointer w-4 h-4 hover:text-negative-500 transition-colors ease-in-out duration-150"
|
||||
x-cloak
|
||||
name="x"
|
||||
x-show="model"
|
||||
x-on:click="clearDate()"
|
||||
/>
|
||||
@endif
|
||||
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
class="cursor-pointer w-5 h-5"
|
||||
:name="$rightIcon"
|
||||
x-on:click="toggle"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</x-slot>
|
||||
@endif
|
||||
</x-dynamic-component>
|
||||
|
||||
<x-wireui::parts.popover :margin="(bool) $label" class="max-h-96 overflow-y-auto p-3 sm:w-72">
|
||||
<div x-show="tab === 'date'" class="space-y-5">
|
||||
@unless ($withoutTips)
|
||||
<div class="grid grid-cols-3 gap-x-2 text-center text-secondary-600">
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('button')"
|
||||
class="bg-secondary-100 border-none dark:bg-secondary-800"
|
||||
x-on:click="selectYesterday"
|
||||
:label="__('wireui::messages.datePicker.yesterday')"
|
||||
/>
|
||||
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('button')"
|
||||
class="bg-secondary-100 border-none dark:bg-secondary-800"
|
||||
x-on:click="selectToday"
|
||||
:label="__('wireui::messages.datePicker.today')"
|
||||
/>
|
||||
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('button')"
|
||||
class="bg-secondary-100 border-none dark:bg-secondary-800"
|
||||
x-on:click="selectTomorrow"
|
||||
:label="__('wireui::messages.datePicker.tomorrow')"
|
||||
/>
|
||||
</div>
|
||||
@endunless
|
||||
|
||||
<div class="flex items-center justify-between">
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('button')"
|
||||
class="rounded-lg shrink-0"
|
||||
x-show="!monthsPicker"
|
||||
x-on:click="previousMonth"
|
||||
icon="chevron-left"
|
||||
flat
|
||||
/>
|
||||
|
||||
<div class="w-full flex items-center justify-center gap-x-2 text-secondary-600 dark:text-secondary-500">
|
||||
<button class="focus:outline-none focus:underline"
|
||||
x-text="monthNames[month]"
|
||||
x-on:click="monthsPicker = !monthsPicker"
|
||||
type="button">
|
||||
</button>
|
||||
<input class="w-14 appearance-none p-0 ring-0 border-none focus:ring-0 focus:outline-none dark:bg-secondary-800"
|
||||
x-model="year"
|
||||
x-on:input.debounce.500ms="fillPickerDates"
|
||||
type="number"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('button')"
|
||||
class="rounded-lg shrink-0"
|
||||
x-show="!monthsPicker"
|
||||
x-on:click="nextMonth"
|
||||
icon="chevron-right"
|
||||
flat
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="relative">
|
||||
<div class="absolute inset-0 bg-white dark:bg-secondary-800 grid grid-cols-3 gap-3"
|
||||
x-show="monthsPicker"
|
||||
x-transition>
|
||||
<template x-for="(monthName, index) in monthNames" :key="`month.${monthName}`">
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('button')"
|
||||
class="text-secondary-400 dark:border-0 dark:hover:bg-secondary-700 uppercase"
|
||||
x-on:click="selectMonth(index)"
|
||||
x-text="monthName"
|
||||
xs
|
||||
/>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-7 gap-2">
|
||||
<template x-for="day in weekDays" :key="`week-day.${day}`">
|
||||
<span class="text-secondary-400 text-3xs text-center uppercase pointer-events-none"
|
||||
x-text="day">
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<template
|
||||
x-for="date in dates"
|
||||
:key="`date.${date.day}.${date.month}`"
|
||||
>
|
||||
<div class="flex justify-center picker-days">
|
||||
<button class="text-sm w-7 h-6 focus:outline-none rounded-md focus:ring-2 focus:ring-ofsset-2 focus:ring-primary-600
|
||||
hover:bg-primary-100 dark:hover:bg-secondary-700 dark:focus:ring-secondary-400
|
||||
disabled:cursor-not-allowed"
|
||||
:class="{
|
||||
'text-secondary-600 dark:text-secondary-400': !date.isDisabled && !date.isSelected && date.month === month,
|
||||
'text-secondary-400 dark:text-secondary-600': date.isDisabled || date.month !== month,
|
||||
'text-primary-600 border border-primary-600 dark:border-gray-400': date.isToday && !date.isSelected,
|
||||
'disabled:text-primary-400 disabled:border-primary-400': date.isToday && !date.isSelected,
|
||||
'!text-white bg-primary-600 font-semibold border border-primary-600': date.isSelected,
|
||||
'disabled:bg-primary-400 disabled:border-primary-400': date.isSelected,
|
||||
'hover:bg-primary-600 dark:bg-secondary-700 dark:border-secondary-400': date.isSelected,
|
||||
}"
|
||||
:disabled="date.isDisabled"
|
||||
x-on:click="selectDate(date)"
|
||||
x-text="date.day"
|
||||
type="button">
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div x-show="tab === 'time'" x-transition>
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('input')"
|
||||
id="search.{{ $attributes->wire('model')->value() }}"
|
||||
:label="__('wireui::messages.selectTime')"
|
||||
x-model="searchTime"
|
||||
x-bind:placeholder="getSearchPlaceholder"
|
||||
x-ref="searchTime"
|
||||
x-on:input.debounce.150ms="onSearchTime($event.target.value)"
|
||||
/>
|
||||
|
||||
<div x-ref="timesContainer"
|
||||
class="mt-1 w-full max-h-52 pb-1 pt-2 overflow-y-auto flex flex-col picker-times">
|
||||
<template x-for="time in filteredTimes" :key="time.value">
|
||||
<button class="group rounded-md focus:outline-none focus:bg-primary-100 dark:focus:bg-secondary-700
|
||||
relative py-2 pl-2 pr-9 text-left transition-colors ease-in-out duration-100 cursor-pointer select-none
|
||||
hover:text-white hover:bg-primary-600 dark:hover:bg-secondary-700 dark:text-secondary-400"
|
||||
:class="{
|
||||
'text-primary-600': modelTime === time.value,
|
||||
'text-secondary-700': modelTime !== time.value,
|
||||
}"
|
||||
:name="`times.${time.value}`"
|
||||
type="button"
|
||||
x-on:click="selectTime(time)">
|
||||
<span x-text="time.label"></span>
|
||||
<span class="text-primary-600 dark:text-secondary-400 group-hover:text-white
|
||||
absolute inset-y-0 right-0 flex items-center pr-4"
|
||||
x-show="modelTime === time.value">
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
name="check"
|
||||
class="h-5 w-5"
|
||||
/>
|
||||
</span>
|
||||
</button>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</x-wireui::parts.popover>
|
||||
</div>
|
||||
@@ -1,95 +0,0 @@
|
||||
<div class="fixed inset-0 flex items-end overflow-y-auto sm:pt-16 justify-center {{ $align }} {{ $zIndex }}"
|
||||
x-data="wireui_dialog({ id: '{{ $dialog }}' })"
|
||||
x-show="show"
|
||||
x-on:wireui:{{ $dialog }}.window="showDialog($event.detail)"
|
||||
x-on:wireui:confirm-{{ $dialog }}.window="confirmDialog($event.detail)"
|
||||
x-on:keydown.escape.window="handleEscape"
|
||||
style="display: none"
|
||||
x-cloak>
|
||||
<div class="fixed inset-0 bg-secondary-400 bg-opacity-60 transform transition-opacity
|
||||
{{ $dialog }}-backdrop @if ($blur) {{ $blur }} @endif dark:bg-secondary-700 dark:bg-opacity-60"
|
||||
x-show="show"
|
||||
x-on:click="dismiss"
|
||||
x-transition:enter="ease-out duration-300"
|
||||
x-transition:enter-start="opacity-0"
|
||||
x-transition:enter-end="opacity-100"
|
||||
x-transition:leave="ease-in duration-200"
|
||||
x-transition:leave-start="opacity-100"
|
||||
x-transition:leave-end="opacity-0">
|
||||
</div>
|
||||
|
||||
<div class="w-full transition-all p-4 sm:max-w-lg"
|
||||
x-show="show"
|
||||
x-transition:enter="ease-out duration-300"
|
||||
x-transition:enter-start="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
|
||||
x-transition:enter-end="opacity-100 translate-y-0 sm:scale-100"
|
||||
x-transition:leave="ease-in duration-200"
|
||||
x-transition:leave-start="opacity-100 translate-y-0 sm:scale-100"
|
||||
x-transition:leave-end="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
|
||||
x-on:mouseenter="pauseTimeout"
|
||||
x-on:mouseleave="resumeTimeout">
|
||||
<div class="relative shadow-md bg-white dark:bg-secondary-800 rounded-xl space-y-4 p-4"
|
||||
:class="{
|
||||
'sm:p-5 sm:pt-7': style === 'center',
|
||||
'sm:p-0 sm:pt-1': style === 'inline',
|
||||
}">
|
||||
<div class="bg-secondary-300 dark:bg-secondary-600 rounded-full transition-all duration-150 ease-linear absolute top-0 left-0"
|
||||
style="height: 2px; width: 100%;"
|
||||
x-ref="progressbar"
|
||||
x-show="dialog && dialog.progressbar && dialog.timeout">
|
||||
</div>
|
||||
|
||||
<div x-show="dialog && dialog.closeButton" class="absolute right-2 -top-2">
|
||||
<button class="{{ $dialog }}-button-close focus:outline-none p-1 focus:ring-2 focus:ring-secondary-200 rounded-full text-secondary-300"
|
||||
x-on:click="close"
|
||||
type="button">
|
||||
<span class="sr-only">{{ __('close') }}</span>
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
class="w-5 h-5"
|
||||
name="x"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="space-y-4" :class="{ 'sm:space-x-4 sm:flex sm:items-center sm:space-y-0 sm:px-5 sm:py-2': style === 'inline' }">
|
||||
<div class="mx-auto flex items-center self-start justify-center shrink-0"
|
||||
:class="{ 'sm:items-start sm:mx-0': style === 'inline' }"
|
||||
x-show="dialog && dialog.icon">
|
||||
<div x-ref="iconContainer"></div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 w-full" :class="{ 'sm:mt-5': style === 'center' }">
|
||||
<h3 class="text-lg leading-6 font-medium text-secondary-900 dark:text-secondary-400 text-center"
|
||||
:class="{ 'sm:text-left': style === 'inline' }"
|
||||
@unless($title) x-ref="title" @endunless>
|
||||
{{ $title }}
|
||||
</h3>
|
||||
|
||||
<p class="mt-2 text-sm text-secondary-500 text-center"
|
||||
:class="{ 'sm:text-left': style === 'inline' }"
|
||||
@unless($description) x-ref="description" @endunless>
|
||||
{{ $description }}
|
||||
</p>
|
||||
|
||||
{{ $slot }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 gap-y-2 sm:gap-x-3 rounded-b-xl"
|
||||
:class="{
|
||||
'sm:grid-cols-2 sm:gap-y-0': style === 'center',
|
||||
'sm:p-4 sm:bg-secondary-100 sm:dark:bg-secondary-800 sm:grid-cols-none sm:flex sm:justify-end': style === 'inline',
|
||||
}"
|
||||
x-show="dialog && (dialog.accept || dialog.reject)">
|
||||
<div x-show="dialog && dialog.accept" class="sm:order-last" x-ref="accept"></div>
|
||||
<div x-show="dialog && dialog.reject" x-ref="reject"></div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-center"
|
||||
x-show="dialog && dialog.close && !dialog.accept && !dialog.accept"
|
||||
x-ref="close">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,38 +0,0 @@
|
||||
<div class="relative inline-block text-left"
|
||||
x-data="wireui_dropdown"
|
||||
x-on:click.outside="close"
|
||||
x-on:keydown.escape.window="close"
|
||||
{{ $attributes->only('wire:key') }}>
|
||||
<div class="cursor-pointer focus:outline-none" x-on:click="toggle">
|
||||
@if (isset($trigger))
|
||||
{{ $trigger }}
|
||||
@else
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
class="w-4 h-4 text-secondary-500 hover:text-secondary-700
|
||||
dark:hover:text-secondary-600 transition duration-150 ease-in-out"
|
||||
name="dots-vertical"
|
||||
/>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div x-show="status"
|
||||
x-transition:enter="transition ease-out duration-200"
|
||||
x-transition:enter-start="opacity-0 scale-95"
|
||||
x-transition:enter-end="opacity-100 scale-100"
|
||||
x-transition:leave="transition ease-in duration-75"
|
||||
x-transition:leave-start="opacity-100 scale-100"
|
||||
x-transition:leave-end="opacity-0 scale-95"
|
||||
{{ $attributes->except('wire:key')->class([
|
||||
$getAlign(),
|
||||
$width,
|
||||
'z-30 absolute mt-2 whitespace-nowrap'
|
||||
]) }}
|
||||
style="display: none;"
|
||||
@unless($persistent) x-on:click="close" @endunless>
|
||||
<div class="relative {{ $height }} soft-scrollbar overflow-auto border border-secondary-200
|
||||
rounded-lg shadow-lg p-1 bg-white dark:bg-secondary-800 dark:border-secondary-600">
|
||||
{{ $slot }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,7 +0,0 @@
|
||||
<div class="@if($separator) border-t border-secondary-200 dark:border-secondary-600 @endif">
|
||||
<h6 {{ $attributes->merge(['class' => $classes]) }}>
|
||||
{{ $label }}
|
||||
</h6>
|
||||
|
||||
{{ $slot }}
|
||||
</div>
|
||||
@@ -1,15 +0,0 @@
|
||||
@if ($separator)
|
||||
<div class="w-full my-1 border-t border-secondary-200 dark:border-secondary-600"></div>
|
||||
@endif
|
||||
|
||||
<a {{ $attributes->merge(['class' => $getClasses()]) }}>
|
||||
@if ($icon)
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
:name="$icon"
|
||||
class="w-5 h-5 mr-2"
|
||||
/>
|
||||
@endif
|
||||
|
||||
{{ $label ?? $slot }}
|
||||
</a>
|
||||
@@ -1,5 +0,0 @@
|
||||
@error($name)
|
||||
<p {{ $attributes->merge(['class' => 'mt-2 text-sm text-negative-600']) }}>
|
||||
{{ $message }}
|
||||
</p>
|
||||
@enderror
|
||||
@@ -1,26 +0,0 @@
|
||||
@if ($hasErrors($errors))
|
||||
<div {{ $attributes->merge(['class' => 'rounded-lg bg-negative-50 dark:bg-secondary-800 dark:border dark:border-negative-600 p-4']) }}>
|
||||
<div class="flex items-center pb-3 border-b-2 border-negative-200 dark:border-negative-700">
|
||||
<x-dynamic-component
|
||||
:component="WireUi::component('icon')"
|
||||
class="w-5 h-5 text-negative-400 dark:text-negative-600 shrink-0 mr-3"
|
||||
name="exclamation-circle"
|
||||
/>
|
||||
|
||||
<span class="text-sm font-semibold text-negative-800 dark:text-negative-600">
|
||||
{{ str_replace('{errors}', $count($errors), $title) }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="ml-5 pl-1 mt-2">
|
||||
<ul class="list-disc space-y-1 text-sm text-negative-700 dark:text-negative-600">
|
||||
@foreach ($getErrorMessages($errors) as $message)
|
||||
<li>{{ head($message) }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="hidden"></div>
|
||||
@endif
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<x-dynamic-component component="wireui::icons.{{ $style }}.{{ $name }}" {{ $attributes }} />
|
||||
@@ -1,5 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path fill="#fff" d="M12 14l9-5-9-5-9 5 9 5z" />
|
||||
<path fill="#fff" d="M12 14l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 14l9-5-9-5-9 5 9 5zm0 0l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14zm-4 6v-7.5l4-2.222" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 606 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 337 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 293 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 283 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13l-3 3m0 0l-3-3m3 3V8m0 13a9 9 0 110-18 9 9 0 010 18z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 260 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 15l-3-3m0 0l3-3m-3 3h8M3 12a9 9 0 1118 0 9 9 0 01-18 0z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 261 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 9l3 3m0 0l-3 3m3-3H8m13 0a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 259 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 11l3-3m0 0l3 3m-3-3v8m0-13a9 9 0 110 18 9 9 0 010-18z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 258 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 228 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 229 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 17l-4 4m0 0l-4-4m4 4V3" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 228 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 16l-4-4m0 0l4-4m-4 4h18" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 228 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 226 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7l4-4m0 0l4 4m-4-4v18" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 226 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 226 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 10l7-7m0 0l7 7m-7-7v18" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 227 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 291 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 12a4 4 0 10-8 0 4 4 0 008 0zm0 0v1.5a2.5 2.5 0 005 0V12a9 9 0 10-9 9m4.5-1.206a8.959 8.959 0 01-4.5 1.207" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 311 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2M3 12l6.414 6.414a2 2 0 001.414.586H19a2 2 0 002-2V7a2 2 0 00-2-2h-8.172a2 2 0 00-1.414.586L3 12z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 335 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 625 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 296 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 463 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 391 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 444 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 4v12l-4-2-4 2V4M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 287 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 251 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 374 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 15.546c-.523 0-1.046.151-1.5.454a2.704 2.704 0 01-3 0 2.704 2.704 0 00-3 0 2.704 2.704 0 01-3 0 2.704 2.704 0 00-3 0 2.704 2.704 0 01-3 0 2.701 2.701 0 00-1.5-.454M9 6v2m3-2v2m3-2v2M9 3h.01M12 3h.01M15 3h.01M21 21v-7a2 2 0 00-2-2H5a2 2 0 00-2 2v7h18zm-3-9v-2a2 2 0 00-2-2H8a2 2 0 00-2 2v2h12z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 498 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 348 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 288 B |
@@ -1,4 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 476 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 9V7a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-6a2 2 0 00-2-2H9a2 2 0 00-2 2v6a2 2 0 002 2zm7-5a2 2 0 11-4 0 2 2 0 014 0z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 348 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 398 B |
@@ -1,4 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 373 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 8v8m-4-5v5m-4-2v2m-2 4h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 289 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8h2a2 2 0 012 2v6a2 2 0 01-2 2h-2v4l-4-4H9a1.994 1.994 0 01-1.414-.586m0 0L11 14h4a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2v4l.586-.586z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 359 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 307 B |
@@ -1,3 +0,0 @@
|
||||
<svg {{ $attributes }} xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 359 B |