* Modules, themes, and extensions * Publisher profiles and verification metadata * Installed-package tracking * Semantic version compatibility checks * PHP, Laravel, and Content Manager compatibility checks * Dependency resolution * SHA-256 checksum validation * Package signature requirements * Installation and update history * Enable and disable controls * Removal handling * Rollback records * Licence records * Marketplace administration UI * Authenticated REST endpoints * Console audit and synchronisation commands * Permissions and sidebar integration * Feature tests
98 lines
3.7 KiB
PHP
98 lines
3.7 KiB
PHP
<x-layouts.app :title="__('Marketplace')">
|
|
<div class="flex h-full w-full flex-1 flex-col gap-6 rounded-xl">
|
|
<div class="flex flex-wrap items-center justify-between gap-3">
|
|
<div>
|
|
<flux:heading size="xl">Marketplace</flux:heading>
|
|
<flux:subheading>
|
|
Discover verified modules, themes and extensions.
|
|
</flux:subheading>
|
|
</div>
|
|
|
|
<flux:button
|
|
:href="route('administration.marketplace.installed')"
|
|
wire:navigate
|
|
>
|
|
Installed packages
|
|
</flux:button>
|
|
</div>
|
|
|
|
<form method="GET" class="grid gap-3 md:grid-cols-[1fr_220px_auto]">
|
|
<flux:input
|
|
name="search"
|
|
value="{{ request('search') }}"
|
|
placeholder="Search packages"
|
|
/>
|
|
|
|
<flux:select name="type">
|
|
<option value="">All types</option>
|
|
|
|
@foreach (config('marketplace.supported_types', []) as $type)
|
|
<option
|
|
value="{{ $type }}"
|
|
{{ request('type') === $type ? 'selected' : '' }}
|
|
>
|
|
{{ \Illuminate\Support\Str::headline($type) }}
|
|
</option>
|
|
@endforeach
|
|
</flux:select>
|
|
|
|
<flux:button type="submit">Filter</flux:button>
|
|
</form>
|
|
|
|
<div class="grid gap-4 lg:grid-cols-2">
|
|
@forelse ($packages as $package)
|
|
<article class="rounded-xl border p-5">
|
|
<div class="flex justify-between gap-4">
|
|
<div>
|
|
<div class="flex items-center gap-2">
|
|
<h2 class="font-semibold">{{ $package->name }}</h2>
|
|
|
|
@if ($package->is_featured)
|
|
<flux:badge color="amber">Featured</flux:badge>
|
|
@endif
|
|
</div>
|
|
|
|
<p class="mt-1 text-sm text-zinc-500">
|
|
{{ $package->package_name }}
|
|
· {{ \Illuminate\Support\Str::headline($package->type) }}
|
|
· {{ $package->latest_version ?: 'No release' }}
|
|
</p>
|
|
</div>
|
|
|
|
@can('marketplace.install')
|
|
<form
|
|
method="POST"
|
|
action="{{ route('administration.marketplace.install', $package) }}"
|
|
>
|
|
@csrf
|
|
|
|
<flux:button type="submit" size="sm" variant="primary">
|
|
Install
|
|
</flux:button>
|
|
</form>
|
|
@endcan
|
|
</div>
|
|
|
|
<p class="mt-4 text-sm">{{ $package->description }}</p>
|
|
|
|
@if ($package->publisher)
|
|
<p class="mt-3 text-xs text-zinc-500">
|
|
Published by {{ $package->publisher->name }}
|
|
|
|
@if ($package->publisher->is_verified)
|
|
· Verified
|
|
@endif
|
|
</p>
|
|
@endif
|
|
</article>
|
|
@empty
|
|
<div class="col-span-full rounded-xl border p-8 text-center text-zinc-500">
|
|
No marketplace packages found.
|
|
</div>
|
|
@endforelse
|
|
</div>
|
|
|
|
{{ $packages->links() }}
|
|
</div>
|
|
</x-layouts.app>
|