add webln test page

This commit is contained in:
fsociety
2024-09-10 20:29:50 +02:00
parent 0260a61e7e
commit 2077cc9941
509 changed files with 5167 additions and 2240 deletions

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Http\Livewire\Test;
use Illuminate\Support\Facades\Log;
use Livewire\Component;
class WebLN extends Component
{
public function logThis($text)
{
Log::info('WEBLN: ' . $text);
}
public function render()
{
return view('livewire.test.web-l-n')->layout('layouts.test');
}
}

View File

@@ -7,7 +7,6 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Spatie\Comments\Models\Concerns\HasComments;
use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
@@ -16,7 +15,6 @@ use Spatie\MediaLibrary\MediaCollections\Models\Media;
class BookCase extends Model implements HasMedia
{
use HasFactory;
use HasComments;
use InteractsWithMedia;
use Geoly;
@@ -82,22 +80,4 @@ class BookCase extends Model implements HasMedia
{
return $this->hasMany(OrangePill::class);
}
/*
* This string will be used in notifications on what a new comment
* was made.
*/
public function commentableName(): string
{
return __('Bookcase');
}
/*
* This URL will be used in notifications to let the user know
* where the comment itself can be read.
*/
public function commentUrl(): string
{
return url()->route('bookCases.comment.bookcase', ['bookCase' => $this->id]);
}
}

View File

@@ -7,7 +7,6 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Support\Facades\Cookie;
use Spatie\Comments\Models\Concerns\HasComments;
use Spatie\EloquentSortable\Sortable;
use Spatie\EloquentSortable\SortableTrait;
use Spatie\Feed\Feedable;
@@ -27,7 +26,6 @@ class LibraryItem extends Model implements HasMedia, Sortable, Feedable
use SortableTrait;
use HasStatuses;
use HasSlug;
use HasComments;
/**
* The attributes that aren't mass assignable.
@@ -130,25 +128,6 @@ class LibraryItem extends Model implements HasMedia, Sortable, Feedable
return $this->belongsToMany(Library::class);
}
/*
* This URL will be used in notifications to let the user know
* where the comment itself can be read.
*/
public function commentableName(): string
{
return __('Library Item');
}
public function commentUrl(): string
{
if ($this->type === 'markdown_article') {
return url()->route('article.view', ['libraryItem' => $this]);
} else {
return url()->route('libraryItem.view', ['libraryItem' => $this]);
}
}
public function toFeedItem(): CustomFeedItem
{
return CustomFeedItem::create()

View File

@@ -5,12 +5,10 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Spatie\Comments\Models\Concerns\HasComments;
class MeetupEvent extends Model
{
use HasFactory;
use HasComments;
/**
* The attributes that aren't mass assignable.
@@ -35,7 +33,7 @@ class MeetupEvent extends Model
protected static function booted()
{
static::creating(function ($model) {
if (! $model->created_by) {
if (!$model->created_by) {
$model->created_by = auth()->id();
}
});
@@ -50,22 +48,4 @@ class MeetupEvent extends Model
{
return $this->belongsTo(Meetup::class);
}
/*
* This string will be used in notifications on what a new comment
* was made.
*/
public function commentableName(): string
{
return __('Meetup Event');
}
/*
* This URL will be used in notifications to let the user know
* where the comment itself can be read.
*/
public function commentUrl(): string
{
return url()->route('meetup.event.landing', ['country' => $this->meetup->city->country, 'meetupEvent' => $this]);
}
}

View File

@@ -14,13 +14,11 @@ use ParagonIE\CipherSweet\BlindIndex;
use ParagonIE\CipherSweet\EncryptedRow;
use ParagonIE\CipherSweet\JsonFieldMap;
use QCod\Gamify\Gamify;
use Spatie\Comments\Models\Concerns\InteractsWithComments;
use Spatie\Comments\Models\Concerns\Interfaces\CanComment;
use Spatie\LaravelCipherSweet\Concerns\UsesCipherSweet;
use Spatie\LaravelCipherSweet\Contracts\CipherSweetEncrypted;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable implements MustVerifyEmail, CanComment, CipherSweetEncrypted
class User extends Authenticatable implements MustVerifyEmail, CipherSweetEncrypted
{
use UsesCipherSweet;
use HasApiTokens;
@@ -30,7 +28,6 @@ class User extends Authenticatable implements MustVerifyEmail, CanComment, Ciphe
use Notifiable;
use TwoFactorAuthenticatable;
use HasRoles;
use InteractsWithComments;
use Gamify;
protected $guarded = [];

View File

@@ -128,8 +128,6 @@ class BookCase extends Resource
HasMany::make(__('OrangePills'), 'orangePills', OrangePill::class),
MorphMany::make(__('Comments'), 'comments', Comment::class),
BelongsTo::make(__('Created By'), 'createdBy', User::class)
->canSee(function ($request) {
return $request->user()

View File

@@ -1,83 +0,0 @@
<?php
namespace App\Nova;
use App\Notifications\ModelCreatedNotification;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\Markdown;
use Laravel\Nova\Fields\MorphTo;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
use Spatie\Comments\Models\Comment as CommentModel;
class Comment extends Resource
{
public static $model = CommentModel::class;
public static $search = [
'id', 'text',
];
public static function authorizedToCreate(Request $request)
{
return auth()
->user()
?->hasRole('super-admin');
}
public function authorizedToUpdate(Request $request)
{
return auth()
->user()
?->hasRole('super-admin');
}
public static function afterCreate(NovaRequest $request, Model $model)
{
\App\Models\User::find(1)
->notify(new ModelCreatedNotification($model, str($request->getRequestUri())
->after('/nova-api/')
->before('?')
->toString()));
}
public function fields(NovaRequest $request)
{
return [
Text::make(__('Title'), function (CommentModel $comment) {
return $comment->topLevel()->commentable?->commentableName() ?? 'Deleted...';
})
->readonly(),
MorphTo::make(__('Commentator'), 'commentator')
->types([
User::class,
]),
Markdown::make(__('Original text'), 'original_text'),
Text::make('', function (CommentModel $comment) {
if (! $url = $comment?->commentUrl()) {
return '';
}
return "<a target=\"show_comment\" href=\"{$url}\">".__('Show').'</a>';
})
->asHtml(),
Text::make(__('Status'), function (CommentModel $comment) {
if ($comment->isApproved()) {
return "<div class='inline-flex items-center px-3 py-0.5 rounded-full text-sm font-medium bg-green-100 text-green-800'>Approved</div>";
}
return "<div class='inline-flex items-center px-3 py-0.5 rounded-full text-sm font-medium bg-yellow-100 text-yellow-800'>Pending</div>";
})
->asHtml(),
DateTime::make(__('Created at'), 'created_at'),
];
}
}

View File

@@ -6,7 +6,6 @@ use App\Nova\BitcoinEvent;
use App\Nova\BookCase;
use App\Nova\Category;
use App\Nova\City;
use App\Nova\Comment;
use App\Nova\Country;
use App\Nova\Course;
use App\Nova\CourseEvent;
@@ -44,15 +43,6 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
parent::boot();
Nova::mainMenu(function (Request $request) {
$comments = $request->user()
->hasRole('super-admin') || $request->user()
->can('CommentPolicy.viewAny') ? [
MenuSection::make('Comments', [
MenuItem::resource(Comment::class),
])
->icon('chat')
->collapsable(),
] : [];
$adminItems = $request->user()
->hasRole('super-admin') || $request->user()
@@ -151,7 +141,7 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
->icon('book-open')
->collapsable(),
], $comments, $adminItems, $permissions);
], $adminItems, $permissions);
});
Nova::withBreadcrumbs();

View File

@@ -47,8 +47,6 @@
"spatie/eloquent-sortable": "^4.0",
"spatie/icalendar-generator": "^2.5",
"spatie/laravel-ciphersweet": "^1.0",
"spatie/laravel-comments": "^1.4",
"spatie/laravel-comments-livewire": "^1.2",
"spatie/laravel-feed": "^4.2",
"spatie/laravel-google-fonts": "^1.2",
"spatie/laravel-markdown": "^2.2",

3623
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,145 +0,0 @@
<?php
use Spatie\Comments\Actions\ApproveCommentAction;
use Spatie\Comments\Actions\ProcessCommentAction;
use Spatie\Comments\Actions\RejectCommentAction;
use Spatie\Comments\Actions\SendNotificationsForApprovedCommentAction;
use Spatie\Comments\Actions\SendNotificationsForPendingCommentAction;
use Spatie\Comments\CommentTransformers\MarkdownToHtmlTransformer;
use Spatie\Comments\Models\Comment;
use Spatie\Comments\Models\CommentNotificationSubscription;
use Spatie\Comments\Models\Reaction;
use Spatie\Comments\Notifications\ApprovedCommentNotification;
use Spatie\Comments\Notifications\PendingCommentNotification;
use Spatie\Comments\Support\CommentSanitizer;
return [
/*
* These are the reactions that can be made on a comment. We highly recommend
* only enabling positive ones for getting good vibes in your community.
*/
'allowed_reactions' => ['👍', '🔥', '🥳', '👀', '😍', '⚡'],
/*
* You can allow guests to post comments. They will not be able to use
* reactions.
*/
'allow_anonymous_comments' => false,
/*
* A comment transformer is a class that will transform the comment text
* for example from Markdown to HTML
*/
'comment_transformers' => [
MarkdownToHtmlTransformer::class,
],
/*
* After all transformers have transformed the comment text, it will
* be passed to this class to sanitize it
*/
'comment_sanitizer' => CommentSanitizer::class,
/*
* Comments need to be approved before they are shown. You can opt
* to have all comments to be approved automatically.
*/
'automatically_approve_all_comments' => true,
'models' => [
/*
* The class that will comment on other things. Typically, this
* would be a user model.
*/
'commentator' => App\Models\User::class,
/*
* The field to use to display the name from the commentator model.
*/
'name' => 'name',
/*
* The model you want to use as a Comment model. It needs to be or
* extend the `Spatie\Comments\Models\Comment::class` model.
*/
'comment' => Comment::class,
/*
* The model you want to use as a React model. It needs to be or
* extend the `Spatie\Comments\Models\Reaction::class` model.
*/
'reaction' => Reaction::class,
/*
* The model you want to use as an opt-out model. It needs to be or
* extend the `Spatie\Comments\Models\CommentNotificationSubscription::class` model.
*/
'comment_notification_subscription' => CommentNotificationSubscription::class,
],
'notifications' => [
/*
* When somebody creates a comment, a notification will be sent to other persons
* that commented on the same thing.
*/
'enabled' => false,
'notifications' => [
'pending_comment' => PendingCommentNotification::class,
'approved_comment' => ApprovedCommentNotification::class,
],
/*
* Here you can configure the notifications that will be sent via mail.
*/
'mail' => [
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
],
],
'pagination' => [
/*
* Here you can configure the number of results to show before
* pagination links are displayed.
*/
'results' => 10000,
/*
* If you have multiple paginators on the same page, you can configure the
* query string page name to avoid conflicts with the other paginator.
* For example, you could set the page_name to be 'comments_page'.
*/
'page_name' => 'page',
/*
* You can choose a different pagination theme like "simple-tailwind" or build
* a custom pagination "vendor.livewire.custom-pagination" See the livewire
* docs for more information: https://laravel-livewire.com/docs/2.x/pagination#custom-pagination-view
*/
'theme' => 'tailwind',
],
/*
* Unless you need fine-grained customization, you don't need to change
* these action classes. If you do change any of them, make sure that your class
* extends the original action class.
*/
'actions' => [
'process_comment' => ProcessCommentAction::class,
'send_notifications_for_pending_comment' => SendNotificationsForPendingCommentAction::class,
'approve_comment' => ApproveCommentAction::class,
'reject_comment' => RejectCommentAction::class,
'send_notifications_for_approved_comment' => SendNotificationsForApprovedCommentAction::class,
],
'gravatar' => [
/*
* Here you can choose which default image to show when a user does not have a Gravatar profile.
* See the Gravatar docs for further information https://en.gravatar.com/site/implement/images/
*/
'default_image' => 'mp',
],
];

View File

@@ -23,10 +23,10 @@ return [
*/
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
'scheme' => 'https',
'scheme' => 'https',
],
'postmark' => [
@@ -34,22 +34,26 @@ return [
],
'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
'twitter' => [
'oauth' => 2,
'client_id' => env('TWITTER_CLIENT_ID'),
'oauth' => 2,
'client_id' => env('TWITTER_CLIENT_ID'),
'client_secret' => env('TWITTER_CLIENT_SECRET'),
'redirect' => env('TWITTER_REDIRECT_URI'),
'redirect' => env('TWITTER_REDIRECT_URI'),
],
'lnbits' => [
'url' => env('LNBITS_URL'),
'url' => env('LNBITS_URL'),
'wallet_id' => env('LNBITS_WALLET_ID'),
'read_key' => env('LNBITS_READ_KEY'),
]
'read_key' => env('LNBITS_READ_KEY'),
],
'nostr' => [
'privatekey' => env('NOSTR_PRIVATE_KEY'),
],
];

View File

@@ -1,47 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$this->nullableMorphs($table, 'commentator', 'commentator_comments');
$table->morphs('commentable');
$table->foreignId('parent_id')->nullable()->constrained('comments')->onDelete('cascade');
$table->longText('original_text');
$table->longText('text');
$table->json('extra')->nullable();
$table->timestamp('approved_at')->nullable();
$table->timestamps();
});
Schema::create('reactions', function (Blueprint $table) {
$table->id();
$this->nullableMorphs($table, 'commentator', 'commentator_reactions');
$table->foreignId('comment_id')->references('id')->on('comments')->cascadeOnDelete();
$table->string('reaction');
$table->timestamps();
});
Schema::create('comment_notification_subscriptions', function (Blueprint $table) {
$table->id();
$table->morphs('commentable', 'cn_subscriptions_commentable');
$table->morphs('subscriber', 'cn_subscriptions_subscriber');
$table->string('type');
$table->timestamps();
});
}
protected function nullableMorphs(Blueprint $table, string $name, string $indexName): void
{
$table->string("{$name}_type")->nullable();
$table->unsignedBigInteger("{$name}_id")->nullable();
$table->index(["{$name}_type", "{$name}_id"], $indexName);
}
};

View File

@@ -22,7 +22,8 @@
"pusher-js": "^7.1.1-beta",
"tailwindcss": "^3.1.0",
"vite": "^4.1.1",
"vite-plugin-static-copy": "^0.16.0"
"vite-plugin-static-copy": "^0.16.0",
"webln": "^0.3.2"
},
"dependencies": {
"leaflet.heat": "^0.2.0",

View File

@@ -7,11 +7,15 @@ import intersect from '@alpinejs/intersect'
import focus from '@alpinejs/focus'
import NDK, { NDKNip07Signer, NDKEvent } from "@nostr-dev-kit/ndk"
import webln from './webln/webln'
window.Alpine = Alpine
window.NDK = NDK
window.NDKNip07Signer = NDKNip07Signer
window.NDKEvent = NDKEvent
Alpine.data('webln', webln);
Alpine.plugin(collapse)
Alpine.plugin(intersect)
Alpine.plugin(focus)

View File

@@ -0,0 +1,20 @@
import {requestProvider} from "webln";
export default (livewireComponent) => ({
async init() {
console.log('WeBLN initialized');
let webln;
try {
webln = await requestProvider();
console.log('WeBLN provider acquired');
this.$wire.call('logThis', 'WeBLN provider acquired');
} catch (err) {
// Handle users without WebLN
console.error('WeBLN provider request failed:', err);
this.$wire.call('logThis', 'WeBLN provider request failed: ' + err);
}
},
});

View File

@@ -43,7 +43,6 @@
<link rel="stylesheet" href="{{ asset('vendor/jvector/jquery-jvectormap-2.0.5.css') }}" type="text/css"
media="screen"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.css">
<x-comments::styles/>
<x-embed-styles/>
@livewireStyles
@include('layouts.styles')
@@ -65,6 +64,5 @@
</div>
@stack('modals')
@livewireScripts
<x-comments::scripts/>
</body>
</html>

View File

@@ -42,7 +42,6 @@
<x-embed-styles />
@vite(['resources/css/app.css', 'resources/js/app.js'])
<!-- Styles -->
<x-comments::styles/>
@livewireStyles
@include('layouts.styles')
</head>
@@ -63,6 +62,5 @@
</div>
@stack('modals')
@livewireScripts
<x-comments::scripts/>
</body>
</html>

View File

@@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="apple-touch-icon" href="/img/apple_touch_icon.png"/>
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
{!! seo($SEOData ?? null) !!}
<!-- Fonts -->
@googlefonts
<!-- Scripts -->
<wireui:scripts/>
@vite(['resources/css/app.css', 'resources/js/app.js'])
<!-- Styles -->
@livewireStyles
</head>
<body class="font-sans antialiased bg-21gray dark">
<x-notifications z-index="z-[99999]" blur="md" align="center"/>
<x-dialog z-index="z-[99999]" blur="md" align="center" />
<div class="min-h-screen">
<!-- Page Content -->
<main>
{{ $slot }}
</main>
</div>
@livewireScripts
</body>
</html>

View File

@@ -0,0 +1,3 @@
<div x-data="webln(@this)">
<webview id="webln-webview" src="https://webln-capable-site.com" style="width:100%; height:100%;"></webview>
</div>

View File

@@ -0,0 +1,27 @@
<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>

View File

@@ -0,0 +1,23 @@
<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>

View File

@@ -0,0 +1,48 @@
@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 }}>

View File

@@ -0,0 +1,23 @@
<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>

View File

@@ -0,0 +1,50 @@
<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>

View File

@@ -0,0 +1,11 @@
<span {{ $attributes->merge() }}>
@if ($icon)
<x-dynamic-component
:component="WireUi::component('icon')"
:name="$icon"
class="{{ $iconSize }} shrink-0"
/>
@else
{{ $label ?? $slot }}
@endif
</span>

View File

@@ -0,0 +1,45 @@
@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 }}>

View File

@@ -0,0 +1,79 @@
<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>

View File

@@ -0,0 +1,222 @@
<div
x-data="wireui_datetime_picker({
model: @entangle($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>

View File

@@ -0,0 +1,95 @@
<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>

View File

@@ -0,0 +1,38 @@
<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>

View File

@@ -0,0 +1,7 @@
<div class="@if($separator) border-t border-secondary-200 dark:border-secondary-600 @endif">
<h6 {{ $attributes->merge(['class' => $classes]) }}>
{{ $label }}
</h6>
{{ $slot }}
</div>

View File

@@ -0,0 +1,15 @@
@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>

View File

@@ -0,0 +1,5 @@
@error($name)
<p {{ $attributes->merge(['class' => 'mt-2 text-sm text-negative-600']) }}>
{{ $message }}
</p>
@enderror

View File

@@ -0,0 +1,26 @@
@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

View File

@@ -0,0 +1 @@
<x-dynamic-component component="wireui::icons.{{ $style }}.{{ $name }}" {{ $attributes }} />

View File

@@ -0,0 +1,5 @@
<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>

After

Width:  |  Height:  |  Size: 606 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 337 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 293 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 283 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 260 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 261 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 259 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 258 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 228 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 229 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 228 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 228 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 226 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 226 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 226 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 227 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 291 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 311 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 335 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 625 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 296 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 463 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 391 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 444 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 287 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 251 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 374 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 498 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 348 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 288 B

View File

@@ -0,0 +1,4 @@
<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>

After

Width:  |  Height:  |  Size: 476 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 348 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 398 B

View File

@@ -0,0 +1,4 @@
<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>

After

Width:  |  Height:  |  Size: 373 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 289 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 359 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 307 B

View File

@@ -0,0 +1,3 @@
<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>

After

Width:  |  Height:  |  Size: 359 B

View File

@@ -0,0 +1,3 @@
<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-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>

After

Width:  |  Height:  |  Size: 247 B

View File

@@ -0,0 +1,3 @@
<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 13l4 4L19 7" />
</svg>

After

Width:  |  Height:  |  Size: 216 B

View File

@@ -0,0 +1,3 @@
<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 13l-7 7-7-7m14-8l-7 7-7-7" />
</svg>

After

Width:  |  Height:  |  Size: 231 B

View File

@@ -0,0 +1,3 @@
<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 19l-7-7 7-7m8 14l-7-7 7-7" />
</svg>

After

Width:  |  Height:  |  Size: 231 B

View File

@@ -0,0 +1,3 @@
<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 5l7 7-7 7M5 5l7 7-7 7" />
</svg>

After

Width:  |  Height:  |  Size: 227 B

View File

@@ -0,0 +1,3 @@
<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 11l7-7 7 7M5 19l7-7 7 7" />
</svg>

After

Width:  |  Height:  |  Size: 228 B

View File

@@ -0,0 +1,3 @@
<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 9l-7 7-7-7" />
</svg>

After

Width:  |  Height:  |  Size: 216 B

View File

@@ -0,0 +1,3 @@
<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 19l-7-7 7-7" />
</svg>

After

Width:  |  Height:  |  Size: 217 B

View File

@@ -0,0 +1,3 @@
<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 5l7 7-7 7" />
</svg>

After

Width:  |  Height:  |  Size: 214 B

View File

@@ -0,0 +1,3 @@
<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 15l7-7 7 7" />
</svg>

After

Width:  |  Height:  |  Size: 215 B

View File

@@ -0,0 +1,3 @@
<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 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z" />
</svg>

After

Width:  |  Height:  |  Size: 333 B

View File

@@ -0,0 +1,3 @@
<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 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4" />
</svg>

After

Width:  |  Height:  |  Size: 342 B

View File

@@ -0,0 +1,3 @@
<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 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3m2 4H10m0 0l3-3m-3 3l3 3" />
</svg>

After

Width:  |  Height:  |  Size: 358 B

View File

@@ -0,0 +1,3 @@
<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 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" />
</svg>

After

Width:  |  Height:  |  Size: 361 B

View File

@@ -0,0 +1,3 @@
<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 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" />
</svg>

After

Width:  |  Height:  |  Size: 329 B

View File

@@ -0,0 +1,3 @@
<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 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>

After

Width:  |  Height:  |  Size: 245 B

View File

@@ -0,0 +1,3 @@
<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 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M9 19l3 3m0 0l3-3m-3 3V10" />
</svg>

After

Width:  |  Height:  |  Size: 285 B

View File

@@ -0,0 +1,3 @@
<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 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" />
</svg>

After

Width:  |  Height:  |  Size: 287 B

View File

@@ -0,0 +1,3 @@
<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 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z" />
</svg>

After

Width:  |  Height:  |  Size: 289 B

View File

@@ -0,0 +1,3 @@
<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 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" />
</svg>

After

Width:  |  Height:  |  Size: 239 B

View File

@@ -0,0 +1,4 @@
<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.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
</svg>

After

Width:  |  Height:  |  Size: 799 B

View File

@@ -0,0 +1,3 @@
<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 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
</svg>

After

Width:  |  Height:  |  Size: 352 B

View File

@@ -0,0 +1,3 @@
<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 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01" />
</svg>

After

Width:  |  Height:  |  Size: 394 B

View File

@@ -0,0 +1,3 @@
<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 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" />
</svg>

After

Width:  |  Height:  |  Size: 288 B

View File

@@ -0,0 +1,3 @@
<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 10l-2 1m0 0l-2-1m2 1v2.5M20 7l-2 1m2-1l-2-1m2 1v2.5M14 4l-2-1-2 1M4 7l2-1M4 7l2 1M4 7v2.5M12 21l-2-1m2 1l2-1m-2 1v-2.5M6 18l-2-1v-2.5M18 18l2-1v-2.5" />
</svg>

After

Width:  |  Height:  |  Size: 354 B

View File

@@ -0,0 +1,3 @@
<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="M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" />
</svg>

After

Width:  |  Height:  |  Size: 265 B

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