🎨 Update color palette: replace gray with zinc across Blade templates for improved design consistency and accessibility.

🛠 Refactor forms: rename NostrAuth method for clarity and enhance Flux button usage for cleaner and reusable components.
 Add `WithNostrAuth` trait: refactor `show` template logic, streamline project-support handling, and improve layout readability.
This commit is contained in:
HolgerHatGarKeineNode
2026-01-20 14:58:02 +01:00
parent 34f8d949d5
commit 4a425da923
10 changed files with 240 additions and 259 deletions

View File

@@ -43,7 +43,7 @@ trait WithNostrAuth
$this->canEdit = false; $this->canEdit = false;
} }
public function mountNostrAuth(): void public function mountWithNostrAuth(): void
{ {
if ($user = NostrAuth::user()) { if ($user = NostrAuth::user()) {
$this->currentPubkey = $user->getPubkey(); $this->currentPubkey = $user->getPubkey();

View File

@@ -27,22 +27,23 @@
src="{{ $project->getFirstMediaUrl('main') }}" alt="Meetup 01"> src="{{ $project->getFirstMediaUrl('main') }}" alt="Meetup 01">
<button class="absolute top-0 right-0 mt-4 mr-4"> <button class="absolute top-0 right-0 mt-4 mr-4">
<img class="rounded-full h-8 w-8" <img class="rounded-full h-8 w-8"
src="{{ $project->einundzwanzigPleb->profile?->picture ?? asset('einundzwanzig-alpha.jpg') }}" src="{{ $project->einundzwanzigPleb->profile?->picture }}"
onerror="this.src='{{ asset('einundzwanzig-alpha.jpg') }}'"
alt=""> alt="">
</button> </button>
</a> </a>
@else @else
<div <a class="relative block w-24 sm:w-56 xl:sidebar-expanded:w-40 2xl:sidebar-expanded:w-56 shrink-0"
class="relative block w-24 sm:w-56 xl:sidebar-expanded:w-40 2xl:sidebar-expanded:w-56 shrink-0" href="{{ route('association.projectSupport.item', ['projectProposal' => $project]) }}">
href="{{ route('association.projectSupport.item', ['projectProposal' => $project]) }}">
<img class="absolute object-cover object-center w-full h-full" <img class="absolute object-cover object-center w-full h-full"
src="{{ $project->getFirstMediaUrl('main') }}" alt="Meetup 01"> src="{{ $project->getFirstMediaUrl('main') }}" alt="Meetup 01">
<button class="absolute top-0 right-0 mt-4 mr-4"> <button class="absolute top-0 right-0 mt-4 mr-4">
<img class="rounded-full h-8 w-8" <img class="rounded-full h-8 w-8"
src="{{ $project->einundzwanzigPleb->profile?->picture ?? asset('einundzwanzig-alpha.jpg') }}" src="{{ $project->einundzwanzigPleb->profile?->picture }}"
onerror="this.src='{{ asset('einundzwanzig-alpha.jpg') }}'"
alt=""> alt="">
</button> </button>
</div> </a>
@endif @endif
<!-- Content --> <!-- Content -->
<div class="grow p-5 flex flex-col"> <div class="grow p-5 flex flex-col">
@@ -63,45 +64,41 @@
<!-- Footer --> <!-- Footer -->
<div class="flex justify-between items-center mt-3"> <div class="flex justify-between items-center mt-3">
<!-- Tag --> <!-- Tag -->
<flux:badge color="amber">{{ number_format($project->support_in_sats, 0, ',', '.') }} Sats</flux:badge>
<div <div
class="text-xs inline-flex items-center font-bold border border-gray-200 dark:border-gray-700/60 text-gray-600 dark:text-gray-200 rounded-full text-center px-2.5 py-1"> class="text-xs inline-flex items-center font-bold border border-gray-200 dark:border-gray-700/60 text-gray-600 dark:text-gray-200 rounded-full text-center px-2.5 py-1">
<span>{{ number_format($project->support_in_sats, 0, ',', '.') }} Sats</span> <flux:link href="{{ $project->website }}" target="_blank">Webseite</flux:link>
</div>
<div
class="text-xs inline-flex items-center font-bold border border-gray-200 dark:border-gray-700/60 text-gray-600 dark:text-gray-200 rounded-full text-center px-2.5 py-1">
<a href="{{ $project->website }}" target="_blank">Webseite</a>
</div> </div>
<!-- Avatars --> <!-- Avatars -->
@if($project->votes->where('value', true)->count() > 0) @if($project->votes->where('value', true)->count() > 0)
<div class="hidden sm:flex items-center space-x-2"> <div class="hidden sm:flex items-center space-x-2">
<div class="text-xs font-medium text-gray-400 dark:text-gray-300 italic"> <flux:badge>
Anzahl der Unterstützer: Anzahl der Unterstützer: +{{ $project->votes->where('value', true)->count() }}
+{{ $project->votes->where('value', true)->count() }} </flux:badge>
</div>
</div> </div>
@endif @endif
</div> </div>
<div <div
class="flex flex-col sm:flex-row justify-between items-center mt-3 space-y-2 sm:space-y-0"> class="flex flex-col sm:flex-row justify-between items-center mt-3 space-y-2 sm:space-y-0">
@if( @if(
($currentPleb && $currentPleb->id === $project->einundzwanzig_pleb_id) ($currentPleb && $currentPleb->id === $project->einundzwanzig_pleb_id)
|| ($currentPleb && in_array($currentPleb->npub, config('einundzwanzig.config.current_board'), true)) || ($currentPleb && in_array($currentPleb->npub, config('einundzwanzig.config.current_board'), true))
) )
<flux:button <flux:button
icon="trash" icon="trash"
size="xs" size="xs"
variant="danger" variant="danger"
wire:click="$dispatch('confirmDeleteProject', { id: {{ $project->id }} })"> wire:click="$dispatch('confirmDeleteProject', { id: {{ $project->id }} })">
Löschen Löschen
</flux:button> </flux:button>
<flux:button <flux:button
icon="pencil" icon="pencil"
size="xs" size="xs"
:href="route('association.projectSupport.edit', ['projectProposal' => $project])"> :href="route('association.projectSupport.edit', ['projectProposal' => $project])">
Editieren Editieren
</flux:button> </flux:button>
@endif @endif
@if(($currentPleb && $currentPleb->association_status->value > 2) || $project->accepted) @if(($currentPleb && $currentPleb->association_status->value > 2) || $project->accepted)
<flux:button <flux:button
icon="folder-open" icon="folder-open"
@@ -113,7 +110,9 @@
</div> </div>
<div class="py-2"> <div class="py-2">
@if($project->sats_paid) @if($project->sats_paid)
<flux:badge color="green">Wurde mit {{ number_format($project->sats_paid, 0, ',', '.') }} Sats unterstützt</flux:badge> <flux:badge color="green">Wurde mit {{ number_format($project->sats_paid, 0, ',', '.') }} Sats
unterstützt
</flux:badge>
@endif @endif
</div> </div>
</div> </div>

View File

@@ -168,7 +168,7 @@ new class extends Component {
<!-- Left: Title --> <!-- Left: Title -->
<div class="mb-4 sm:mb-0"> <div class="mb-4 sm:mb-0">
<h1 class="text-2xl md:text-3xl text-gray-800 dark:text-gray-100 font-bold"> <h1 class="text-2xl md:text-3xl text-zinc-800 dark:text-zinc-100 font-bold">
Wahl des Vorstands {{ $election->year }} Wahl des Vorstands {{ $election->year }}
</h1> </h1>
</div> </div>
@@ -183,9 +183,9 @@ new class extends Component {
<!-- Cards --> <!-- Cards -->
<div class="grid gap-y-4"> <div class="grid gap-y-4">
<div wire:key="presidency" wire:ignore <div wire:key="presidency" wire:ignore
class="flex flex-col bg-white dark:bg-gray-800 shadow-sm rounded-xl"> class="flex flex-col bg-white dark:bg-zinc-800 shadow-sm rounded-xl">
<header class="px-5 py-4 border-b border-gray-100 dark:border-gray-700/60"> <header class="px-5 py-4 border-b border-zinc-100 dark:border-zinc-700/60">
<h2 class="font-semibold text-gray-800 dark:text-gray-100"><i <h2 class="font-semibold text-zinc-800 dark:text-zinc-100"><i
class="fa-sharp-duotone fa-solid {{ $president['icon'] }} w-5 h-5 fill-current text-white mr-4"></i>{{ $president['title'] }} class="fa-sharp-duotone fa-solid {{ $president['icon'] }} w-5 h-5 fill-current text-white mr-4"></i>{{ $president['title'] }}
</h2> </h2>
</header> </header>
@@ -196,9 +196,9 @@ new class extends Component {
</div> </div>
</div> </div>
<div wire:key="board" wire:ignore <div wire:key="board" wire:ignore
class="flex flex-col bg-white dark:bg-gray-800 shadow-sm rounded-xl"> class="flex flex-col bg-white dark:bg-zinc-800 shadow-sm rounded-xl">
<header class="px-5 py-4 border-b border-gray-100 dark:border-gray-700/60"> <header class="px-5 py-4 border-b border-zinc-100 dark:border-zinc-700/60">
<h2 class="font-semibold text-gray-800 dark:text-gray-100"><i <h2 class="font-semibold text-zinc-800 dark:text-zinc-100"><i
class="fa-sharp-duotone fa-solid {{ $board['icon'] }} w-5 h-5 fill-current text-white mr-4"></i>{{ $board['title'] }} class="fa-sharp-duotone fa-solid {{ $board['icon'] }} w-5 h-5 fill-current text-white mr-4"></i>{{ $board['title'] }}
</h2> </h2>
</header> </header>

View File

@@ -124,7 +124,7 @@ new class extends Component {
->get() ->get()
->map(function ($p) use ($loadedEvents, $c) { ->map(function ($p) use ($loadedEvents, $c) {
$votedClass = ' bg-green-500/20 text-green-700'; $votedClass = ' bg-green-500/20 text-green-700';
$notVotedClass = ' bg-gray-500/20 text-gray-100'; $notVotedClass = ' bg-zinc-500/20 text-zinc-100';
$hasVoted = $loadedEvents $hasVoted = $loadedEvents
->filter(fn ($e) => $e['type'] === $c['type'] && $e['pubkey'] === $this->currentPubkey) ->filter(fn ($e) => $e['type'] === $c['type'] && $e['pubkey'] === $this->currentPubkey)
->firstWhere('votedFor.pubkey', $p->pubkey); ->firstWhere('votedFor.pubkey', $p->pubkey);
@@ -158,7 +158,7 @@ new class extends Component {
->get() ->get()
->map(function ($p) use ($loadedBoardEvents, $c) { ->map(function ($p) use ($loadedBoardEvents, $c) {
$votedClass = ' bg-green-500/20 text-green-700'; $votedClass = ' bg-green-500/20 text-green-700';
$notVotedClass = ' bg-gray-500/20 text-gray-100'; $notVotedClass = ' bg-zinc-500/20 text-zinc-100';
$hasVoted = $loadedBoardEvents $hasVoted = $loadedBoardEvents
->filter(fn ($e) => $e['type'] === $c['type'] && $e['pubkey'] === $this->currentPubkey) ->filter(fn ($e) => $e['type'] === $c['type'] && $e['pubkey'] === $this->currentPubkey)
->firstWhere('votedFor.pubkey', $p->pubkey); ->firstWhere('votedFor.pubkey', $p->pubkey);
@@ -311,13 +311,13 @@ new class extends Component {
class="absolute z-20 top-0 bottom-0 w-full md:w-auto md:static md:top-auto md:bottom-auto -mr-px md:translate-x-0 transition-transform duration-200 ease-in-out" class="absolute z-20 top-0 bottom-0 w-full md:w-auto md:static md:top-auto md:bottom-auto -mr-px md:translate-x-0 transition-transform duration-200 ease-in-out"
:class="inboxSidebarOpen ? 'translate-x-0' : '-translate-x-full'"> :class="inboxSidebarOpen ? 'translate-x-0' : '-translate-x-full'">
<div <div
class="sticky top-16 bg-white dark:bg-[#1B1B1B] overflow-x-hidden overflow-y-auto no-scrollbar shrink-0 border-r border-gray-200 dark:border-gray-700/60 md:w-[18rem] xl:w-[20rem] h-[calc(100dvh-64px)]"> class="sticky top-16 bg-white dark:bg-[#1B1B1B] overflow-x-hidden overflow-y-auto no-scrollbar shrink-0 border-r border-zinc-200 dark:border-zinc-700/60 md:w-[18rem] xl:w-[20rem] h-[calc(100dvh-64px)]">
<!-- #Marketing group --> <!-- #Marketing group -->
<div> <div>
<!-- Group header --> <!-- Group header -->
<div class="sticky top-0 z-10"> <div class="sticky top-0 z-10">
<div class="flex items-center bg-white dark:bg-[#1B1B1B] border-b border-gray-200 dark:border-gray-700/60 px-5 h-16"> <div class="flex items-center bg-white dark:bg-[#1B1B1B] border-b border-zinc-200 dark:border-zinc-700/60 px-5 h-16">
<div class="w-full flex items-center justify-between"> <div class="w-full flex items-center justify-between">
<!-- Channel menu --> <!-- Channel menu -->
<div class="relative" x-data="{ open: false }"> <div class="relative" x-data="{ open: false }">
@@ -325,16 +325,16 @@ new class extends Component {
@click.prevent="open = !open" :aria-expanded="open"> @click.prevent="open = !open" :aria-expanded="open">
<div class="truncate"> <div class="truncate">
<span <span
class="font-semibold text-gray-800 dark:text-gray-100">2024</span> class="font-semibold text-zinc-800 dark:text-zinc-100">2024</span>
</div> </div>
<svg <svg
class="w-3 h-3 shrink-0 ml-1 fill-current text-gray-400 dark:text-gray-500" class="w-3 h-3 shrink-0 ml-1 fill-current text-zinc-400 dark:text-zinc-500"
viewBox="0 0 12 12"> viewBox="0 0 12 12">
<path d="M5.9 11.4L.5 6l1.4-1.4 4 4 4-4L11.3 6z"/> <path d="M5.9 11.4L.5 6l1.4-1.4 4 4 4-4L11.3 6z"/>
</svg> </svg>
</button> </button>
<div <div
class="origin-top-right z-10 absolute top-full left-0 min-w-60 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700/60 py-1.5 rounded-lg shadow-lg overflow-hidden mt-1" class="origin-top-right z-10 absolute top-full left-0 min-w-60 bg-white dark:bg-zinc-800 border border-zinc-200 dark:border-zinc-700/60 py-1.5 rounded-lg shadow-lg overflow-hidden mt-1"
@click.outside="open = false" @keydown.escape.window="open = false" @click.outside="open = false" @keydown.escape.window="open = false"
x-show="open" x-show="open"
x-transition:enter="transition ease-out duration-200 transform" x-transition:enter="transition ease-out duration-200 transform"
@@ -346,7 +346,7 @@ new class extends Component {
x-cloak> x-cloak>
<ul> <ul>
<li> <li>
<a class="font-medium text-sm text-gray-600 dark:text-gray-300 hover:text-gray-800 dark:hover:text-gray-200 block py-1.5 px-3" <a class="font-medium text-sm text-zinc-600 dark:text-zinc-300 hover:text-zinc-800 dark:hover:text-zinc-200 block py-1.5 px-3"
href="#0" @click="open = false" @focus="open = true" href="#0" @click="open = false" @focus="open = true"
@focusout="open = false"> @focusout="open = false">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
@@ -375,11 +375,11 @@ new class extends Component {
<label for="inbox-search" class="sr-only">Search</label> <label for="inbox-search" class="sr-only">Search</label>
<input <input
wire:model.live.debounce="search" wire:model.live.debounce="search"
id="inbox-search" class="form-input w-full pl-9 bg-white dark:bg-gray-800" id="inbox-search" class="form-input w-full pl-9 bg-white dark:bg-zinc-800"
type="search" placeholder="Suche…"/> type="search" placeholder="Suche…"/>
<button class="absolute inset-0 right-auto group" type="submit" aria-label="Search"> <button class="absolute inset-0 right-auto group" type="submit" aria-label="Search">
<svg <svg
class="shrink-0 fill-current text-gray-400 dark:text-gray-500 group-hover:text-gray-500 dark:group-hover:text-gray-400 ml-3 mr-2" class="shrink-0 fill-current text-zinc-400 dark:text-zinc-500 group-hover:text-zinc-500 dark:group-hover:text-zinc-400 ml-3 mr-2"
width="16" height="16" viewBox="0 0 16 16" width="16" height="16" viewBox="0 0 16 16"
xmlns="http://www.w3.org/2000/svg"> xmlns="http://www.w3.org/2000/svg">
<path <path
@@ -391,7 +391,7 @@ new class extends Component {
</form> </form>
<!-- Inbox --> <!-- Inbox -->
<div class="mt-4"> <div class="mt-4">
<div class="text-xs font-semibold text-gray-400 dark:text-gray-500 uppercase mb-3"> <div class="text-xs font-semibold text-zinc-400 dark:text-zinc-500 uppercase mb-3">
Plebs Plebs
</div> </div>
<ul class="mb-6"> <ul class="mb-6">
@@ -408,16 +408,16 @@ new class extends Component {
<div class="flex items-center justify-between mb-1.5"> <div class="flex items-center justify-between mb-1.5">
<div class="truncate"> <div class="truncate">
<span <span
class="text-sm font-semibold text-gray-800 dark:text-gray-100 truncate">{{ $pleb['profile']['name'] ?? $pleb['pubkey'] }}</span> class="text-sm font-semibold text-zinc-800 dark:text-zinc-100 truncate">{{ $pleb['profile']['name'] ?? $pleb['pubkey'] }}</span>
</div> </div>
<div class="text-xs text-gray-500 font-medium"> <div class="text-xs text-zinc-500 font-medium">
<x-badge <x-badge
:color="\App\Enums\AssociationStatus::from($pleb['association_status'])->color()" :color="\App\Enums\AssociationStatus::from($pleb['association_status'])->color()"
:label="\App\Enums\AssociationStatus::from($pleb['association_status'])->label()"/> :label="\App\Enums\AssociationStatus::from($pleb['association_status'])->label()"/>
</div> </div>
</div> </div>
<div <div
class="text-xs font-medium text-gray-800 dark:text-gray-100 truncate mb-0.5"> class="text-xs font-medium text-zinc-800 dark:text-zinc-100 truncate mb-0.5">
<div class="flex items-center space-x-2 h-5"> <div class="flex items-center space-x-2 h-5">
@foreach($positions as $name => $p) @foreach($positions as $name => $p)
@php @php
@@ -451,7 +451,7 @@ new class extends Component {
<!-- Header --> <!-- Header -->
<div class="sticky top-16"> <div class="sticky top-16">
<div <div
class="flex items-center justify-between before:absolute before:inset-0 before:backdrop-blur-md before:bg-gray-50/90 dark:before:bg-[#1B1B1B]/90 before:-z-10 border-b border-gray-200 dark:border-gray-700/60 px-4 sm:px-6 md:px-5 h-16"> class="flex items-center justify-between before:absolute before:inset-0 before:backdrop-blur-md before:bg-zinc-50/90 dark:before:bg-[#1B1B1B]/90 before:-z-10 border-b border-zinc-200 dark:border-zinc-700/60 px-4 sm:px-6 md:px-5 h-16">
<div <div
class="flex flex-col space-y-2 sm:space-y-0 sm:flex-row justify-between items-center w-full"> class="flex flex-col space-y-2 sm:space-y-0 sm:flex-row justify-between items-center w-full">
<div> <div>
@@ -476,7 +476,7 @@ new class extends Component {
<!-- Mail subject --> <!-- Mail subject -->
<header class="sm:flex sm:items-start space-x-4 mb-4"> <header class="sm:flex sm:items-start space-x-4 mb-4">
<h1 class="text-xl leading-snug text-gray-800 dark:text-gray-100 font-bold mb-1 sm:mb-0 ml-2"> <h1 class="text-xl leading-snug text-zinc-800 dark:text-zinc-100 font-bold mb-1 sm:mb-0 ml-2">
Wahlen Wahlen
</h1> </h1>
<button <button
@@ -487,11 +487,11 @@ new class extends Component {
<!-- Messages box --> <!-- Messages box -->
<div <div
class="shadow-sm rounded-xl px-6 divide-y divide-gray-200 dark:divide-gray-700/60"> class="shadow-sm rounded-xl px-6 divide-y divide-zinc-200 dark:divide-zinc-700/60">
<!-- Mail --> <!-- Mail -->
<div class="py-6"> <div class="py-6">
<h1 class="text-xl leading-snug text-gray-800 dark:text-gray-100 font-bold mb-1 sm:mb-0 ml-2"> <h1 class="text-xl leading-snug text-zinc-800 dark:text-zinc-100 font-bold mb-1 sm:mb-0 ml-2">
Wahl des Präsidiums Wahl des Präsidiums
</h1> </h1>
<div class="grid sm:grid-cols-2 gap-6"> <div class="grid sm:grid-cols-2 gap-6">
@@ -503,7 +503,7 @@ new class extends Component {
</header> </header>
<div class="grow mt-2"> <div class="grow mt-2">
<div <div
class="inline-flex text-gray-800 dark:text-gray-100 hover:text-gray-900 dark:hover:text-white mb-1"> class="inline-flex text-zinc-800 dark:text-zinc-100 hover:text-zinc-900 dark:hover:text-white mb-1">
<h2 class="text-xl leading-snug font-semibold">{{ $positions['presidency']['title'] }}</h2> <h2 class="text-xl leading-snug font-semibold">{{ $positions['presidency']['title'] }}</h2>
</div> </div>
<div class="text-sm"> <div class="text-sm">
@@ -541,7 +541,7 @@ new class extends Component {
</flux:card> </flux:card>
</div> </div>
<h1 class="mt-6 text-xl leading-snug text-gray-800 dark:text-gray-100 font-bold mb-1 sm:mb-0 ml-2"> <h1 class="mt-6 text-xl leading-snug text-zinc-800 dark:text-zinc-100 font-bold mb-1 sm:mb-0 ml-2">
Wahl der übrigen Vorstandsmitglieder Wahl der übrigen Vorstandsmitglieder
</h1> </h1>
<div class="grid gap-6"> <div class="grid gap-6">
@@ -583,18 +583,18 @@ new class extends Component {
<div x-cloak x-show="showLog" class="mt-6 hidden sm:block"> <div x-cloak x-show="showLog" class="mt-6 hidden sm:block">
<flux:card mb-8> <flux:card mb-8>
<header class="px-5 py-4"> <header class="px-5 py-4">
<h2 class="font-semibold text-gray-800 dark:text-gray-100">Präsidium Log <span <h2 class="font-semibold text-zinc-800 dark:text-zinc-100">Präsidium Log <span
class="text-gray-400 dark:text-gray-500 font-medium">{{ count($this->loadedEvents) }}</span> class="text-zinc-400 dark:text-zinc-500 font-medium">{{ count($this->loadedEvents) }}</span>
</h2> </h2>
</header> </header>
<div> <div>
<!-- Table --> <!-- Table -->
<div class="overflow-x-auto"> <div class="overflow-x-auto">
<table <table
class="table-auto w-full dark:text-gray-300 divide-y divide-gray-100 dark:divide-gray-700/60"> class="table-auto w-full dark:text-zinc-300 divide-y divide-zinc-100 dark:divide-zinc-700/60">
<!-- Table header --> <!-- Table header -->
<thead <thead
class="text-xs uppercase text-gray-500 dark:text-gray-400 bg-gray-50 dark:bg-gray-900/20 border-t border-gray-100 dark:border-gray-700/60"> class="text-xs uppercase text-zinc-500 dark:text-zinc-400 bg-zinc-50 dark:bg-zinc-900/20 border-t border-zinc-100 dark:border-zinc-700/60">
<tr> <tr>
<th class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap"> <th class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap">
<div class="font-semibold text-left">ID</div> <div class="font-semibold text-left">ID</div>
@@ -650,18 +650,18 @@ new class extends Component {
<div x-cloak x-show="showLog" class="mt-6 hidden sm:block"> <div x-cloak x-show="showLog" class="mt-6 hidden sm:block">
<flux:card mb-8> <flux:card mb-8>
<header class="px-5 py-4"> <header class="px-5 py-4">
<h2 class="font-semibold text-gray-800 dark:text-gray-100">Board Log <span <h2 class="font-semibold text-zinc-800 dark:text-zinc-100">Board Log <span
class="text-gray-400 dark:text-gray-500 font-medium">{{ count($this->loadedBoardEvents) }}</span> class="text-zinc-400 dark:text-zinc-500 font-medium">{{ count($this->loadedBoardEvents) }}</span>
</h2> </h2>
</header> </header>
<div> <div>
<!-- Table --> <!-- Table -->
<div class="overflow-x-auto"> <div class="overflow-x-auto">
<table <table
class="table-auto w-full dark:text-gray-300 divide-y divide-gray-100 dark:divide-gray-700/60"> class="table-auto w-full dark:text-zinc-300 divide-y divide-zinc-100 dark:divide-zinc-700/60">
<!-- Table header --> <!-- Table header -->
<thead <thead
class="text-xs uppercase text-gray-500 dark:text-gray-400 bg-gray-50 dark:bg-gray-900/20 border-t border-gray-100 dark:border-gray-700/60"> class="text-xs uppercase text-zinc-500 dark:text-zinc-400 bg-zinc-50 dark:bg-zinc-900/20 border-t border-zinc-100 dark:border-zinc-700/60">
<tr> <tr>
<th class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap"> <th class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap">
<div class="font-semibold text-left">ID</div> <div class="font-semibold text-left">ID</div>

View File

@@ -129,7 +129,7 @@ class extends Component {
<!-- Title --> <!-- Title -->
<header class="mb-6"> <header class="mb-6">
<h1 class="text-2xl md:text-3xl text-gray-800 dark:text-gray-100 font-bold"> <h1 class="text-2xl md:text-3xl text-zinc-800 dark:text-zinc-100 font-bold">
News News
</h1> </h1>
</header> </header>
@@ -142,7 +142,7 @@ class extends Component {
<!-- Group 1 --> <!-- Group 1 -->
<div> <div>
<div <div
class="text-xs font-semibold text-gray-400 dark:text-gray-500 uppercase mb-3 md:sr-only"> class="text-xs font-semibold text-zinc-400 dark:text-zinc-500 uppercase mb-3 md:sr-only">
Menu Menu
</div> </div>
<ul class="flex flex-nowrap md:block mr-3 md:mr-0"> <ul class="flex flex-nowrap md:block mr-3 md:mr-0">
@@ -180,7 +180,7 @@ class extends Component {
<!-- Content --> <!-- Content -->
<div class="grow"> <div class="grow">
<!-- Title --> <!-- Title -->
<h2 class="font-semibold text-gray-800 dark:text-gray-100 mb-2"> <h2 class="font-semibold text-zinc-800 dark:text-zinc-100 mb-2">
{{ $post->name }} {{ $post->name }}
</h2> </h2>
<p class="mb-6"> <p class="mb-6">
@@ -189,7 +189,7 @@ class extends Component {
<!-- Footer --> <!-- Footer -->
<footer class="flex flex-wrap text-sm"> <footer class="flex flex-wrap text-sm">
<div <div
class="flex items-center after:block after:content-['·'] last:after:content-[''] after:text-sm after:text-gray-400 dark:after:text-gray-600 after:px-2"> class="flex items-center after:block after:content-['·'] last:after:content-[''] after:text-sm after:text-zinc-400 dark:after:text-zinc-600 after:px-2">
<div <div
class="font-medium text-amber-500 hover:text-amber-600 dark:hover:text-amber-400"> class="font-medium text-amber-500 hover:text-amber-600 dark:hover:text-amber-400">
<div class="flex items-center"> <div class="flex items-center">
@@ -204,9 +204,9 @@ class extends Component {
</div> </div>
</div> </div>
<div <div
class="flex items-center after:block after:content-['·'] last:after:content-[''] after:text-sm after:text-gray-400 dark:after:text-gray-600 after:px-2"> class="flex items-center after:block after:content-['·'] last:after:content-[''] after:text-sm after:text-zinc-400 dark:after:text-zinc-600 after:px-2">
<span <span
class="text-gray-500">{{ $post->created_at->format('d.m.Y') }}</span> class="text-zinc-500">{{ $post->created_at->format('d.m.Y') }}</span>
</div> </div>
</footer> </footer>
</div> </div>
@@ -274,7 +274,7 @@ class extends Component {
@if($canEdit) @if($canEdit)
<flux:card> <flux:card>
<div <div
class="text-xs font-semibold text-gray-400 dark:text-gray-200 uppercase mb-4"> class="text-xs font-semibold text-zinc-400 dark:text-zinc-200 uppercase mb-4">
News anlegen News anlegen
</div> </div>
<div class="mt-4 flex flex-col space-y-2"> <div class="mt-4 flex flex-col space-y-2">
@@ -348,7 +348,7 @@ class extends Component {
<flux:heading>Zugriff auf News nicht möglich</flux:heading> <flux:heading>Zugriff auf News nicht möglich</flux:heading>
<p>Um die News einzusehen, benötigst du:</p> <p>Um die News einzusehen, benötigst du:</p>
<ul class="list-disc ml-5 mt-2 space-y-1"> <ul class="list-disc ml-5 mt-2 space-y-1">
<li>Einen Vereinsstatus von mindestens 2 (Aktives Mitglied)</li> <li>Einen Vereinsstatus von "Aktives Mitglied"</li>
<li>Eine bezahlte Mitgliedschaft für das aktuelle Jahr ({{ date('Y') }})</li> <li>Eine bezahlte Mitgliedschaft für das aktuelle Jahr ({{ date('Y') }})</li>
</ul> </ul>
<p class="mt-3"> <p class="mt-3">

View File

@@ -295,7 +295,7 @@ new class extends Component {
<div> <div>
<!-- Header --> <!-- Header -->
<div class="mb-8"> <div class="mb-8">
<h1 class="text-2xl md:text-3xl text-[#1B1B1B] dark:text-gray-100 font-bold"> <h1 class="text-2xl md:text-3xl text-[#1B1B1B] dark:text-zinc-100 font-bold">
Einundzwanzig ist, was du draus machst Einundzwanzig ist, was du draus machst
</h1> </h1>
</div> </div>
@@ -321,10 +321,10 @@ new class extends Component {
</div> </div>
</div> </div>
<div class="flex-1 min-w-0"> <div class="flex-1 min-w-0">
<h3 class="text-lg font-semibold text-gray-800 dark:text-gray-100 mb-1"> <h3 class="text-lg font-semibold text-zinc-800 dark:text-zinc-100 mb-1">
Nostr Relay Nostr Relay
</h3> </h3>
<p class="text-sm text-gray-600 dark:text-gray-400"> <p class="text-sm text-zinc-600 dark:text-zinc-400">
Exklusive Schreib-Rechte auf Premium Nostr Relay von Einundzwanzig. Exklusive Schreib-Rechte auf Premium Nostr Relay von Einundzwanzig.
</p> </p>
</div> </div>
@@ -342,10 +342,10 @@ new class extends Component {
</div> </div>
</div> </div>
<div class="flex-1 min-w-0"> <div class="flex-1 min-w-0">
<h3 class="text-lg font-semibold text-gray-800 dark:text-gray-100 mb-1"> <h3 class="text-lg font-semibold text-zinc-800 dark:text-zinc-100 mb-1">
Get NIP-05 verified Get NIP-05 verified
</h3> </h3>
<p class="text-sm text-gray-600 dark:text-gray-400"> <p class="text-sm text-zinc-600 dark:text-zinc-400">
Verifiziere deine Identität mit einem menschenlesbaren Nostr-Namen. Verifiziere deine Identität mit einem menschenlesbaren Nostr-Namen.
</p> </p>
</div> </div>
@@ -378,8 +378,8 @@ new class extends Component {
<!-- Rules Info --> <!-- Rules Info -->
<div <div
class="mt-3 p-3 bg-white/50 dark:bg-gray-800/50 rounded border border-gray-200 dark:border-gray-600"> class="mt-3 p-3 bg-white/50 dark:bg-zinc-800/50 rounded border border-zinc-200 dark:border-zinc-600">
<p class="text-xs text-gray-600 dark:text-gray-400 leading-relaxed"> <p class="text-xs text-zinc-600 dark:text-zinc-400 leading-relaxed">
<strong>Regeln für dein Handle:</strong> Nur Kleinbuchstaben (a-z), Zahlen <strong>Regeln für dein Handle:</strong> Nur Kleinbuchstaben (a-z), Zahlen
(0-9) und die Zeichen "-" und "_" sind erlaubt. Dein Handle wird automatisch (0-9) und die Zeichen "-" und "_" sind erlaubt. Dein Handle wird automatisch
kleingeschrieben. kleingeschrieben.
@@ -388,8 +388,8 @@ new class extends Component {
<!-- Explanation --> <!-- Explanation -->
<div <div
class="mt-4 p-3 bg-white/50 dark:bg-gray-800/50 rounded border border-gray-200 dark:border-gray-600"> class="mt-4 p-3 bg-white/50 dark:bg-zinc-800/50 rounded border border-zinc-200 dark:border-zinc-600">
<p class="text-xs text-gray-600 dark:text-gray-400 leading-relaxed"> <p class="text-xs text-zinc-600 dark:text-zinc-400 leading-relaxed">
<flux:link href="https://nostr.how/en/guides/get-verified#self-hosted" <flux:link href="https://nostr.how/en/guides/get-verified#self-hosted"
target="_blank">NIP-05 target="_blank">NIP-05
</flux:link> </flux:link>
@@ -401,7 +401,7 @@ new class extends Component {
</div> </div>
</div> </div>
@else @else
<div class="text-xs text-gray-500 dark:text-gray-400 italic"> <div class="text-xs text-zinc-500 dark:text-zinc-400 italic">
Aktiviere deine Mitgliedschaft, um NIP-05 zu verifizieren. Aktiviere deine Mitgliedschaft, um NIP-05 zu verifizieren.
</div> </div>
@endif @endif
@@ -413,10 +413,10 @@ new class extends Component {
<div class="flex items-start gap-3"> <div class="flex items-start gap-3">
<i class="fa-sharp-duotone fa-solid fa-star text-amber-500 mt-0.5"></i> <i class="fa-sharp-duotone fa-solid fa-star text-amber-500 mt-0.5"></i>
<div> <div>
<p class="font-medium text-gray-800 dark:text-gray-100"> <p class="font-medium text-zinc-800 dark:text-zinc-100">
Mehr Vorteile kommen bald! Mehr Vorteile kommen bald!
</p> </p>
<p class="text-sm text-gray-600 dark:text-gray-400 mt-1"> <p class="text-sm text-zinc-600 dark:text-zinc-400 mt-1">
Wir arbeiten ständig daran, unsere Mitglieder-Vorteile auszubauen. Wir arbeiten ständig daran, unsere Mitglieder-Vorteile auszubauen.
Bleib dran für neue exklusive Services und Kooperationen. Bleib dran für neue exklusive Services und Kooperationen.
</p> </p>
@@ -434,16 +434,16 @@ new class extends Component {
<flux:callout variant="info"> <flux:callout variant="info">
<div class="flex items-start gap-4"> <div class="flex items-start gap-4">
<img <img
class="w-12 h-12 rounded-full shrink-0 border-2 border-gray-200 dark:border-gray-600" class="w-12 h-12 rounded-full shrink-0 border-2 border-zinc-200 dark:border-zinc-600"
src="{{ $currentPleb->profile?->picture ?? asset('apple-touch-icon.png') }}" src="{{ $currentPleb->profile?->picture ?? asset('apple-touch-icon.png') }}"
alt="Avatar" alt="Avatar"
> >
<div class="flex-1 min-w-0"> <div class="flex-1 min-w-0">
<div class="mb-2"> <div class="mb-2">
<h4 class="font-semibold text-gray-800 dark:text-gray-100 text-base"> <h4 class="font-semibold text-zinc-800 dark:text-zinc-100 text-base">
{{ $currentPleb->profile?->display_name ?? $currentPleb->profile?->name ?? 'Unbekannt' }} {{ $currentPleb->profile?->display_name ?? $currentPleb->profile?->name ?? 'Unbekannt' }}
</h4> </h4>
<p class="text-xs text-gray-500 dark:text-gray-400 mt-0.5"> <p class="text-xs text-zinc-500 dark:text-zinc-400 mt-0.5">
@if($currentPleb->profile?->name) @if($currentPleb->profile?->name)
{{ $currentPleb->profile->name }} {{ $currentPleb->profile->name }}
@endif @endif
@@ -451,24 +451,24 @@ new class extends Component {
</div> </div>
<div class="space-y-1 text-xs"> <div class="space-y-1 text-xs">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="text-gray-500 dark:text-gray-400 shrink-0">Pubkey:</span> <span class="text-zinc-500 dark:text-zinc-400 shrink-0">Pubkey:</span>
<code <code
class="bg-gray-100 dark:bg-gray-800 px-2 py-0.5 rounded text-gray-700 dark:text-gray-300 truncate font-mono"> class="bg-zinc-100 dark:bg-zinc-800 px-2 py-0.5 rounded text-zinc-700 dark:text-zinc-300 truncate font-mono">
{{ $currentPleb->pubkey }} {{ $currentPleb->pubkey }}
</code> </code>
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="text-gray-500 dark:text-gray-400 shrink-0">Npub:</span> <span class="text-zinc-500 dark:text-zinc-400 shrink-0">Npub:</span>
<code <code
class="bg-gray-100 dark:bg-gray-800 px-2 py-0.5 rounded text-gray-700 dark:text-gray-300 truncate font-mono text-xs"> class="bg-zinc-100 dark:bg-zinc-800 px-2 py-0.5 rounded text-zinc-700 dark:text-zinc-300 truncate font-mono text-xs">
{{ $currentPleb->npub }} {{ $currentPleb->npub }}
</code> </code>
</div> </div>
@if($currentPleb->nip05_handle) @if($currentPleb->nip05_handle)
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="text-gray-500 dark:text-gray-400 shrink-0">NIP-05:</span> <span class="text-zinc-500 dark:text-zinc-400 shrink-0">NIP-05:</span>
<code <code
class="bg-gray-100 dark:bg-gray-800 px-2 py-0.5 rounded text-gray-700 dark:text-gray-300 font-mono text-xs"> class="bg-zinc-100 dark:bg-zinc-800 px-2 py-0.5 rounded text-zinc-700 dark:text-zinc-300 font-mono text-xs">
{{ $currentPleb->nip05_handle }} {{ $currentPleb->nip05_handle }}
</code> </code>
</div> </div>
@@ -484,7 +484,7 @@ new class extends Component {
@if(!$currentPleb) @if(!$currentPleb)
<!-- Nostr Login Apps Section --> <!-- Nostr Login Apps Section -->
<div class="space-y-4 mb-8"> <div class="space-y-4 mb-8">
<h3 class="text-lg md:text-xl text-gray-500 dark:text-gray-400 italic mb-4"> <h3 class="text-lg md:text-xl text-zinc-500 dark:text-zinc-400 italic mb-4">
Empfohlene Nostr Login und Signer-Apps Empfohlene Nostr Login und Signer-Apps
</h3> </h3>
@@ -494,11 +494,11 @@ new class extends Component {
<div <div
class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4"> class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
<div class="flex-1"> <div class="flex-1">
<a class="font-semibold text-gray-800 dark:text-gray-100 hover:text-amber-500 dark:hover:text-amber-400 transition-colors" <a class="font-semibold text-zinc-800 dark:text-zinc-100 hover:text-amber-500 dark:hover:text-amber-400 transition-colors"
href="https://github.com/greenart7c3/Amber"> href="https://github.com/greenart7c3/Amber">
Amber Amber
</a> </a>
<p class="text-sm text-gray-600 dark:text-gray-400 mt-1"> <p class="text-sm text-zinc-600 dark:text-zinc-400 mt-1">
Perfekt für mobile Android Geräte. Eine App, in der man alle Keys/nsecs Perfekt für mobile Android Geräte. Eine App, in der man alle Keys/nsecs
verwalten kann. verwalten kann.
</p> </p>
@@ -513,11 +513,11 @@ new class extends Component {
<div <div
class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4"> class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
<div class="flex-1"> <div class="flex-1">
<a class="font-semibold text-gray-800 dark:text-gray-100 hover:text-amber-500 dark:hover:text-amber-400 transition-colors" <a class="font-semibold text-zinc-800 dark:text-zinc-100 hover:text-amber-500 dark:hover:text-amber-400 transition-colors"
href="https://addons.mozilla.org/en-US/firefox/addon/alby/"> href="https://addons.mozilla.org/en-US/firefox/addon/alby/">
Alby - Bitcoin Lightning Wallet & Nostr Alby - Bitcoin Lightning Wallet & Nostr
</a> </a>
<p class="text-sm text-gray-600 dark:text-gray-400 mt-1"> <p class="text-sm text-zinc-600 dark:text-zinc-400 mt-1">
Browser-Erweiterung in die man seinen Key/nsec eingeben kann. Pro Alby-Konto Browser-Erweiterung in die man seinen Key/nsec eingeben kann. Pro Alby-Konto
ein nsec. ein nsec.
</p> </p>
@@ -532,11 +532,11 @@ new class extends Component {
<div <div
class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4"> class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
<div class="flex-1"> <div class="flex-1">
<a class="font-semibold text-gray-800 dark:text-gray-100 hover:text-amber-500 dark:hover:text-amber-400 transition-colors" <a class="font-semibold text-zinc-800 dark:text-zinc-100 hover:text-amber-500 dark:hover:text-amber-400 transition-colors"
href="https://chromewebstore.google.com/detail/nos2x/kpgefcfmnafjgpblomihpgmejjdanjjp"> href="https://chromewebstore.google.com/detail/nos2x/kpgefcfmnafjgpblomihpgmejjdanjjp">
nos2x nos2x
</a> </a>
<p class="text-sm text-gray-600 dark:text-gray-400 mt-1"> <p class="text-sm text-zinc-600 dark:text-zinc-400 mt-1">
Browser-Erweiterung für Chrome Browser. Multi-Key fähig. Browser-Erweiterung für Chrome Browser. Multi-Key fähig.
</p> </p>
</div> </div>
@@ -550,11 +550,11 @@ new class extends Component {
<div <div
class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4"> class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
<div class="flex-1"> <div class="flex-1">
<a class="font-semibold text-gray-800 dark:text-gray-100 hover:text-amber-500 dark:hover:text-amber-400 transition-colors" <a class="font-semibold text-zinc-800 dark:text-zinc-100 hover:text-amber-500 dark:hover:text-amber-400 transition-colors"
href="https://addons.mozilla.org/en-US/firefox/addon/nos2x-fox/"> href="https://addons.mozilla.org/en-US/firefox/addon/nos2x-fox/">
nos2x-fox nos2x-fox
</a> </a>
<p class="text-sm text-gray-600 dark:text-gray-400 mt-1"> <p class="text-sm text-zinc-600 dark:text-zinc-400 mt-1">
Browser-Erweiterung für Firefox Browser. Multi-Key fähig. Browser-Erweiterung für Firefox Browser. Multi-Key fähig.
</p> </p>
</div> </div>
@@ -568,14 +568,14 @@ new class extends Component {
<!-- User Profile Display --> <!-- User Profile Display -->
<div class="mt-6"> <div class="mt-6">
<template x-if="$store.nostr.user"> <template x-if="$store.nostr.user">
<div class="flex items-center gap-4 p-4 bg-gray-50 dark:bg-gray-800/50 rounded-lg"> <div class="flex items-center gap-4 p-4 bg-zinc-50 dark:bg-zinc-800/50 rounded-lg">
<img class="w-12 h-12 rounded-full" <img class="w-12 h-12 rounded-full"
x-bind:src="$store.nostr.user.picture || '{{ asset('apple-touch-icon.png') }}'" x-bind:src="$store.nostr.user.picture || '{{ asset('apple-touch-icon.png') }}'"
alt="Avatar"> alt="Avatar">
<div class="flex-1 min-w-0"> <div class="flex-1 min-w-0">
<h3 class="truncate text-lg leading-snug text-[#1B1B1B] dark:text-gray-100 font-bold" <h3 class="truncate text-lg leading-snug text-[#1B1B1B] dark:text-zinc-100 font-bold"
x-text="$store.nostr.user.display_name"></h3> x-text="$store.nostr.user.display_name"></h3>
<div class="truncate text-sm text-gray-500 dark:text-gray-400" <div class="truncate text-sm text-zinc-500 dark:text-zinc-400"
x-text="$store.nostr.user.name"></div> x-text="$store.nostr.user.name"></div>
</div> </div>
</div> </div>
@@ -589,7 +589,7 @@ new class extends Component {
<path <path
d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zM7 11.4L3.6 8 5 6.6l2 2 4-4L12.4 6 7 11.4z"></path> d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zM7 11.4L3.6 8 5 6.6l2 2 4-4L12.4 6 7 11.4z"></path>
</svg> </svg>
<p class="text-sm text-gray-700 dark:text-gray-300">Profil in der Datenbank <p class="text-sm text-zinc-700 dark:text-zinc-300">Profil in der Datenbank
vorhanden.</p> vorhanden.</p>
</div> </div>
</flux:card> </flux:card>
@@ -602,10 +602,10 @@ new class extends Component {
<!-- Membership Registration Section --> <!-- Membership Registration Section -->
<div class="space-y-4 py-6"> <div class="space-y-4 py-6">
<div> <div>
<h3 class="text-xl md:text-2xl text-[#1B1B1B] dark:text-gray-100 font-bold mb-2"> <h3 class="text-xl md:text-2xl text-[#1B1B1B] dark:text-zinc-100 font-bold mb-2">
Einundzwanzig Mitglied werden Einundzwanzig Mitglied werden
</h3> </h3>
<p class="text-sm text-gray-600 dark:text-gray-400"> <p class="text-sm text-zinc-600 dark:text-zinc-400">
Nur Personen können Mitglied werden und zahlen 21.000 Satoshis im Jahr. Nur Personen können Mitglied werden und zahlen 21.000 Satoshis im Jahr.
<a href="https://einundzwanzig.space/verein/" <a href="https://einundzwanzig.space/verein/"
class="text-amber-500 hover:text-amber-600 dark:hover:text-amber-400 font-medium"> class="text-amber-500 hover:text-amber-600 dark:hover:text-amber-400 font-medium">
@@ -637,11 +637,11 @@ new class extends Component {
<div class="py-6"> <div class="py-6">
<flux:callout variant="warning" class="mb-6"> <flux:callout variant="warning" class="mb-6">
<div class="space-y-4"> <div class="space-y-4">
<p class="font-medium text-gray-800 dark:text-gray-100"> <p class="font-medium text-zinc-800 dark:text-zinc-100">
Falls du möchtest, kannst du hier eine E-Mail Adresse hinterlegen, damit der Verein Falls du möchtest, kannst du hier eine E-Mail Adresse hinterlegen, damit der Verein
dich darüber informieren kann, wenn es Neuigkeiten gibt. dich darüber informieren kann, wenn es Neuigkeiten gibt.
</p> </p>
<p class="text-sm text-gray-600 dark:text-gray-400"> <p class="text-sm text-zinc-600 dark:text-zinc-400">
Am besten eine anonymisierte E-Mail Adresse verwenden. Wir sichern diese Adresse Am besten eine anonymisierte E-Mail Adresse verwenden. Wir sichern diese Adresse
AES-256 verschlüsselt in der Datenbank ab. AES-256 verschlüsselt in der Datenbank ab.
</p> </p>
@@ -694,7 +694,7 @@ new class extends Component {
d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 12c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm1-3H7V4h2v5z"></path> d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 12c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm1-3H7V4h2v5z"></path>
</svg> </svg>
<div> <div>
<p class="font-medium text-gray-800 dark:text-gray-100"> <p class="font-medium text-zinc-800 dark:text-zinc-100">
@if($currentYearIsPaid) @if($currentYearIsPaid)
<span class="text-green-600 dark:text-green-400">Du bist derzeit ein Mitglied des Vereins. Das aktuelle Jahr ist bezahlt.</span> <span class="text-green-600 dark:text-green-400">Du bist derzeit ein Mitglied des Vereins. Das aktuelle Jahr ist bezahlt.</span>
@else @else
@@ -712,7 +712,7 @@ new class extends Component {
<div class="space-y-6"> <div class="space-y-6">
<!-- Payment Info --> <!-- Payment Info -->
<div> <div>
<h3 class="text-xl md:text-2xl text-gray-800 dark:text-gray-100 font-bold mb-4"> <h3 class="text-xl md:text-2xl text-zinc-800 dark:text-zinc-100 font-bold mb-4">
Mitgliedsbeitrag Mitgliedsbeitrag
</h3> </h3>
@@ -729,7 +729,7 @@ new class extends Component {
@endphp @endphp
@if(isset($latestEvent)) @if(isset($latestEvent))
<p class="text-gray-700 dark:text-gray-300 mb-6">{{ $latestEvent['content'] }}</p> <p class="text-zinc-700 dark:text-zinc-300 mb-6">{{ $latestEvent['content'] }}</p>
<!-- Payment Button --> <!-- Payment Button -->
<div class="flex justify-center py-6"> <div class="flex justify-center py-6">
@@ -763,8 +763,8 @@ new class extends Component {
<!-- Payment History --> <!-- Payment History -->
@if($payments && count($payments) > 0) @if($payments && count($payments) > 0)
<div class="pt-6 border-t border-gray-200 dark:border-gray-600"> <div class="pt-6 border-t border-zinc-200 dark:border-zinc-600">
<h4 class="text-lg md:text-xl text-gray-800 dark:text-gray-100 font-bold mb-4"> <h4 class="text-lg md:text-xl text-zinc-800 dark:text-zinc-100 font-bold mb-4">
Bisherige Zahlungen Bisherige Zahlungen
</h4> </h4>
@@ -772,7 +772,7 @@ new class extends Component {
<div class="hidden md:block overflow-x-auto"> <div class="hidden md:block overflow-x-auto">
<table class="table-auto w-full"> <table class="table-auto w-full">
<thead <thead
class="text-xs font-semibold uppercase text-gray-500 dark:text-gray-400 border-b border-gray-200 dark:border-gray-600"> class="text-xs font-semibold uppercase text-zinc-500 dark:text-zinc-400 border-b border-zinc-200 dark:border-zinc-600">
<tr> <tr>
<th class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap text-left"> <th class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap text-left">
<div class="font-semibold">Satoshis</div> <div class="font-semibold">Satoshis</div>
@@ -788,20 +788,20 @@ new class extends Component {
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody class="text-sm divide-y divide-gray-200 dark:divide-gray-600"> <tbody class="text-sm divide-y divide-zinc-200 dark:divide-zinc-600">
@foreach($payments as $payment) @foreach($payments as $payment)
<tr> <tr>
<td class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap"> <td class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap">
<div <div
class="font-medium text-gray-800 dark:text-gray-100">{{ $payment->amount }}</div> class="font-medium text-zinc-800 dark:text-zinc-100">{{ $payment->amount }}</div>
</td> </td>
<td class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap"> <td class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap">
<div <div
class="text-gray-800 dark:text-gray-100">{{ $payment->year }}</div> class="text-zinc-800 dark:text-zinc-100">{{ $payment->year }}</div>
</td> </td>
<td class="px-2 first:pl-5 last:pr-5 py-3"> <td class="px-2 first:pl-5 last:pr-5 py-3">
<div <div
class="font-mono text-xs text-gray-600 dark:text-gray-400 break-all">{{ $payment->event_id }}</div> class="font-mono text-xs text-zinc-600 dark:text-zinc-400 break-all">{{ $payment->event_id }}</div>
</td> </td>
<td class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap"> <td class="px-2 first:pl-5 last:pr-5 py-3 whitespace-nowrap">
@if($payment->btc_pay_invoice) @if($payment->btc_pay_invoice)
@@ -824,23 +824,23 @@ new class extends Component {
<div class="md:hidden space-y-4"> <div class="md:hidden space-y-4">
@foreach($payments as $payment) @foreach($payments as $payment)
<div <div
class="bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-600 p-4"> class="bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-600 p-4">
<div class="space-y-3"> <div class="space-y-3">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<span class="text-sm font-medium text-gray-500 dark:text-gray-400">Satoshis</span> <span class="text-sm font-medium text-zinc-500 dark:text-zinc-400">Satoshis</span>
<span <span
class="font-semibold text-gray-800 dark:text-gray-100">{{ $payment->amount }}</span> class="font-semibold text-zinc-800 dark:text-zinc-100">{{ $payment->amount }}</span>
</div> </div>
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<span class="text-sm font-medium text-gray-500 dark:text-gray-400">Jahr</span> <span class="text-sm font-medium text-zinc-500 dark:text-zinc-400">Jahr</span>
<span <span
class="text-gray-800 dark:text-gray-100">{{ $payment->year }}</span> class="text-zinc-800 dark:text-zinc-100">{{ $payment->year }}</span>
</div> </div>
<div> <div>
<span <span
class="text-sm font-medium text-gray-500 dark:text-gray-400 block mb-1">Event-ID</span> class="text-sm font-medium text-zinc-500 dark:text-zinc-400 block mb-1">Event-ID</span>
<span <span
class="font-mono text-xs text-gray-600 dark:text-gray-400 break-all">{{ $payment->event_id }}</span> class="font-mono text-xs text-zinc-600 dark:text-zinc-400 break-all">{{ $payment->event_id }}</span>
</div> </div>
@if($payment->btc_pay_invoice) @if($payment->btc_pay_invoice)
<flux:button <flux:button

View File

@@ -69,7 +69,7 @@ class extends Component
<div <div
class="flex flex-col md:flex-row items-center mb-6 space-y-4 md:space-y-0 md:space-x-4"> class="flex flex-col md:flex-row items-center mb-6 space-y-4 md:space-y-0 md:space-x-4">
<div class="flex items-center justify-between w-full"> <div class="flex items-center justify-between w-full">
<h1 class="text-2xl md:text-3xl text-gray-800 dark:text-gray-100 font-bold"> <h1 class="text-2xl md:text-3xl text-zinc-800 dark:text-zinc-100 font-bold">
Projektförderung anlegen Projektförderung anlegen
</h1> </h1>
</div> </div>
@@ -102,7 +102,7 @@ class extends Component
@if($isAdmin) @if($isAdmin)
<flux:separator /> <flux:separator />
<flux:heading level="3" class="text-sm font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">Admin Felder</flux:heading> <flux:heading level="3" class="text-sm font-semibold uppercase tracking-wide text-zinc-500 dark:text-zinc-400">Admin Felder</flux:heading>
<div class="space-y-3 mt-3"> <div class="space-y-3 mt-3">
<flux:field> <flux:field>
<flux:label>Akzeptiert</flux:label> <flux:label>Akzeptiert</flux:label>
@@ -127,7 +127,7 @@ class extends Component
<div> <div>
<flux:card> <flux:card>
<flux:heading level="2">Information</flux:heading> <flux:heading level="2">Information</flux:heading>
<p class="text-sm text-gray-800 dark:text-gray-100 mt-4"> <p class="text-sm text-zinc-800 dark:text-zinc-100 mt-4">
Fülle das Formular aus, um eine neue Projektförderung anzulegen. Fülle das Formular aus, um eine neue Projektförderung anzulegen.
</p> </p>
</flux:card> </flux:card>

View File

@@ -87,7 +87,7 @@ class extends Component
<div <div
class="flex flex-col md:flex-row items-center mb-6 space-y-4 md:space-y-0 md:space-x-4"> class="flex flex-col md:flex-row items-center mb-6 space-y-4 md:space-y-0 md:space-x-4">
<div class="flex items-center justify-between w-full"> <div class="flex items-center justify-between w-full">
<h1 class="text-2xl md:text-3xl text-gray-800 dark:text-gray-100 font-bold"> <h1 class="text-2xl md:text-3xl text-zinc-800 dark:text-zinc-100 font-bold">
Projektförderung bearbeiten Projektförderung bearbeiten
</h1> </h1>
</div> </div>
@@ -128,7 +128,7 @@ class extends Component
@if($isAdmin) @if($isAdmin)
<flux:separator /> <flux:separator />
<flux:heading level="3" class="text-sm font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">Admin Felder</flux:heading> <flux:heading level="3" class="text-sm font-semibold uppercase tracking-wide text-zinc-500 dark:text-zinc-400">Admin Felder</flux:heading>
<div class="space-y-3 mt-3"> <div class="space-y-3 mt-3">
<flux:field> <flux:field>
<flux:label>Akzeptiert</flux:label> <flux:label>Akzeptiert</flux:label>
@@ -153,7 +153,7 @@ class extends Component
<div> <div>
<flux:card> <flux:card>
<flux:heading level="2">Information</flux:heading> <flux:heading level="2">Information</flux:heading>
<p class="text-sm text-gray-800 dark:text-gray-100 mt-4"> <p class="text-sm text-zinc-800 dark:text-zinc-100 mt-4">
Bearbeite die Projektförderung und speichere deine Änderungen. Bearbeite die Projektförderung und speichere deine Änderungen.
</p> </p>
</flux:card> </flux:card>

View File

@@ -96,7 +96,7 @@ new class extends Component {
<!-- Left: Title --> <!-- Left: Title -->
<div class="mb-4 sm:mb-0"> <div class="mb-4 sm:mb-0">
<h1 class="text-2xl md:text-3xl text-gray-800 dark:text-gray-100 font-bold"> <h1 class="text-2xl md:text-3xl text-zinc-800 dark:text-zinc-100 font-bold">
Einundzwanzig Projektunterstützungen Einundzwanzig Projektunterstützungen
</h1> </h1>
</div> </div>
@@ -124,32 +124,28 @@ new class extends Component {
<div class="mb-5"> <div class="mb-5">
<ul class="flex flex-wrap -m-1"> <ul class="flex flex-wrap -m-1">
<li class="m-1"> <li class="m-1">
<button wire:click="setFilter('all')" <flux:button wire:click="setFilter('all')" :variant="$activeFilter === 'all' ? 'primary' : 'ghost'">
class="inline-flex items-center justify-center text-sm font-medium leading-5 rounded-full px-3 py-1 border @if($activeFilter === 'all') border-transparent shadow-sm bg-gray-900 dark:bg-gray-100 text-white dark:text-gray-800 @else border-gray-200 dark:border-gray-700/60 hover:border-gray-300 dark:hover:border-gray-600 shadow-sm bg-white dark:bg-gray-800 text-gray-500 dark:text-gray-400 @endif transition">
Alle Alle
</button> </flux:button>
</li> </li>
<li class="m-1"> <li class="m-1">
<button wire:click="setFilter('new')" <flux:button wire:click="setFilter('new')" :variant="$activeFilter === 'new' ? 'primary' : 'ghost'">
class="inline-flex items-center justify-center text-sm font-medium leading-5 rounded-full px-3 py-1 border @if($activeFilter === 'new') border-transparent shadow-sm bg-gray-900 dark:bg-gray-100 text-white dark:text-gray-800 @else border-gray-200 dark:border-gray-700/60 hover:border-gray-300 dark:hover:border-gray-600 shadow-sm bg-white dark:bg-gray-800 text-gray-500 dark:text-gray-400 @endif transition">
Neu Neu
</button> </flux:button>
</li> </li>
<li class="m-1"> <li class="m-1">
<button wire:click="setFilter('supported')" <flux:button wire:click="setFilter('supported')" :variant="$activeFilter === 'supported' ? 'primary' : 'ghost'">
class="inline-flex items-center justify-center text-sm font-medium leading-5 rounded-full px-3 py-1 border @if($activeFilter === 'supported') border-transparent shadow-sm bg-gray-900 dark:bg-gray-100 text-white dark:text-gray-800 @else border-gray-200 dark:border-gray-700/60 hover:border-gray-300 dark:hover:border-gray-600 shadow-sm bg-white dark:bg-gray-800 text-gray-500 dark:text-gray-400 @endif transition">
Unterstützt Unterstützt
</button> </flux:button>
</li> </li>
<li class="m-1"> <li class="m-1">
<button wire:click="setFilter('rejected')" <flux:button wire:click="setFilter('rejected')" :variant="$activeFilter === 'rejected' ? 'primary' : 'ghost'">
class="inline-flex items-center justify-center text-sm font-medium leading-5 rounded-full px-3 py-1 border @if($activeFilter === 'rejected') border-transparent shadow-sm bg-gray-900 dark:bg-gray-100 text-white dark:text-gray-800 @else border-gray-200 dark:border-gray-700/60 hover:border-gray-300 dark:hover:border-gray-600 shadow-sm bg-white dark:bg-gray-800 text-gray-500 dark:text-gray-400 @endif transition">
Abgelehnt Abgelehnt
</button> </flux:button>
</li> </li>
</ul> </ul>
</div> </div>
<div class="text-sm text-gray-500 dark:text-gray-400 italic mb-4">{{ $projects->count() }} Projekte</div> <div class="text-sm text-zinc-500 dark:text-zinc-400 italic mb-4">{{ $projects->count() }} Projekte</div>
<!-- Content --> <!-- Content -->
<div class="grid xl:grid-cols-2 gap-6 mb-8"> <div class="grid xl:grid-cols-2 gap-6 mb-8">

View File

@@ -1,11 +1,13 @@
<?php <?php
use App\Livewire\Forms\VoteForm; use App\Livewire\Traits\WithNostrAuth;
use App\Models\Vote; use App\Models\Vote;
use App\Support\NostrAuth; use App\Support\NostrAuth;
use Livewire\Component; use Livewire\Component;
new class extends Component { new class extends Component {
use WithNostrAuth;
public $projectProposal; public $projectProposal;
public bool $isAllowed = false; public bool $isAllowed = false;
@@ -67,120 +69,104 @@ new class extends Component {
?> ?>
<div> <div>
@if($projectProposal->accepted || $isAllowed) <div class="px-4 sm:px-6 lg:px-8 py-8 w-full">
<div class="px-4 sm:px-6 lg:px-8 py-8 w-full"> <div class="mx-auto flex flex-col lg:flex-row lg:space-x-8 xl:space-x-12">
<div class="mx-auto flex flex-col lg:flex-row lg:space-x-8 xl:space-x-12"> <div class="flex-1">
<div class="flex-1"> <div class="mb-6">
<div class="mb-6"> <flux:button :href="route('association.projectSupport')" variant="primary" size="sm"
<flux:button :href="route('association.projectSupport')" variant="primary" size="sm" icon="chevron-left"> icon="chevron-left">
Zurück zur Übersicht Zurück zur Übersicht
</flux:button> </flux:button>
</div> </div>
<div class="text-sm font-semibold text-violet-500 uppercase mb-2"> <div class="text-sm font-semibold text-violet-500 uppercase mb-2">
{{ $projectProposal->created_at->translatedFormat('d.m.Y') }} {{ $projectProposal->created_at->translatedFormat('d.m.Y') }}
</div> </div>
<header class="mb-4"> <header class="mb-4">
<h1 class="text-2xl md:text-3xl text-gray-800 dark:text-gray-100 font-bold mb-2"> <h1 class="text-2xl md:text-3xl text-zinc-800 dark:text-zinc-100 font-bold mb-2">
{{ $projectProposal->name }} {{ $projectProposal->name }}
</h1> </h1>
<x-markdown> <x-markdown>
{!! $projectProposal->description !!} {!! $projectProposal->description !!}
</x-markdown> </x-markdown>
</header> </header>
<div class="space-y-3 sm:flex sm:items-center sm:justify-between sm:space-y-0 mb-6"> <div class="space-y-3 sm:flex sm:items-center sm:justify-between sm:space-y-0 mb-6">
<div class="flex items-center sm:mr-4"> <div class="flex items-center sm:mr-4">
<a class="block mr-2 shrink-0" href="#0"> <a class="block mr-2 shrink-0" href="#0">
<img class="rounded-full" <img class="rounded-full"
src="{{ $projectProposal->einundzwanzigPleb->profile?->picture ?? asset('einundzwanzig-alpha.jpg') }}" src="{{ $projectProposal->einundzwanzigPleb->profile?->picture ?? asset('einundzwanzig-alpha.jpg') }}"
width="32" height="32" alt="User"> width="32" height="32" alt="User">
</a> </a>
<div class="text-sm whitespace-nowrap">Eingereicht von <div class="text-sm whitespace-nowrap">Eingereicht von
<div class="font-semibold text-gray-800 dark:text-gray-100"> <div class="font-semibold text-zinc-800 dark:text-zinc-100">
{{ $projectProposal->einundzwanzigPleb?->profile->name ?? str($projectProposal->einundzwanzigPleb->npub)->limit(32) }} {{ $projectProposal->einundzwanzigPleb?->profile->name ?? str($projectProposal->einundzwanzigPleb->npub)->limit(32) }}
</div>
</div>
</div>
<div class="flex flex-wrap items-center sm:justify-end space-x-2">
<div
class="text-xs inline-flex items-center font-medium border border-gray-200 dark:border-gray-700/60 text-gray-600 dark:text-gray-400 rounded-full text-center px-2.5 py-1">
<a target="_blank" href="{{ $projectProposal->website }}">Webseite</a>
</div>
<div
class="text-xs inline-flex font-medium uppercase bg-green-500/20 text-green-700 rounded-full text-center px-2.5 py-1">
{{ number_format($projectProposal->support_in_sats, 0, ',', '.') }} Sats
</div> </div>
</div> </div>
</div> </div>
<div class="flex flex-wrap items-center sm:justify-end space-x-2">
<figure class="mb-6"> <div
<img class="rounded-sm h-48" src="{{ $projectProposal->getFirstMediaUrl('main') }}" class="text-xs inline-flex items-center font-medium border border-zinc-200 dark:border-zinc-700/60 text-zinc-600 dark:text-zinc-400 rounded-full text-center px-2.5 py-1">
alt="Picture"> <a target="_blank" href="{{ $projectProposal->website }}">Webseite</a>
</figure> </div>
<div
<hr class="my-6 border-t border-gray-100 dark:border-gray-700/60"> class="text-xs inline-flex font-medium uppercase bg-green-500/20 text-green-700 rounded-full text-center px-2.5 py-1">
{{ number_format($projectProposal->support_in_sats, 0, ',', '.') }} Sats
</div>
</div>
</div> </div>
@if($isAllowed && !$projectProposal->accepted) <figure class="mb-6">
<div class="lg:w-80 xl:w-96 shrink-0 space-y-4"> <img class="rounded-sm h-48" src="{{ $projectProposal->getFirstMediaUrl('main') }}"
<div class="bg-white dark:bg-gray-800 p-5 shadow-sm rounded-xl"> alt="Picture">
@if(!$ownVoteExists) </figure>
<div class="space-y-2">
<flux:button wire:click="handleApprove" class="w-full">
<i class="fill-current shrink-0 fa-sharp-duotone fa-solid fa-thumbs-up mr-2"></i>
Zustimmen
</flux:button>
<flux:button wire:click="handleNotApprove" variant="danger" class="w-full">
<i class="fill-current shrink-0 fa-sharp-duotone fa-solid fa-thumbs-down mr-2"></i>
Ablehnen
</flux:button>
</div>
@else
<p class="text-sm text-gray-700 dark:text-gray-300">Du hast bereits abgestimmt.</p>
@endif
</div>
<div class="bg-white dark:bg-gray-800 p-5 shadow-sm rounded-xl"> <hr class="my-6 border-t border-zinc-100 dark:border-zinc-700/60">
<div class="text-sm font-semibold text-gray-800 dark:text-gray-100 mb-2"> </div>
Zustimmungen des Vorstands ({{ count($this->boardVotes->where('value', 1)) }})
</div>
</div>
<div class="bg-white dark:bg-gray-800 p-5 shadow-sm rounded-xl"> <div class="lg:w-80 xl:w-96 shrink-0 space-y-4">
<div class="text-sm font-semibold text-gray-800 dark:text-gray-100 mb-2"> <div class="bg-white dark:bg-zinc-800 p-5 shadow-sm rounded-xl">
Ablehnungen des Vorstands ({{ count($this->boardVotes->where('value', 0)) }}) @if(!$ownVoteExists)
</div> <div class="space-y-2">
<flux:button wire:click="handleApprove" class="w-full">
<i class="fill-current shrink-0 fa-sharp-duotone fa-solid fa-thumbs-up mr-2"></i>
Zustimmen
</flux:button>
<flux:button wire:click="handleNotApprove" variant="danger" class="w-full">
<i class="fill-current shrink-0 fa-sharp-duotone fa-solid fa-thumbs-down mr-2"></i>
Ablehnen
</flux:button>
</div> </div>
@else
<p class="text-sm text-zinc-700 dark:text-zinc-300">Du hast bereits abgestimmt.</p>
@endif
</div>
<div class="bg-white dark:bg-gray-800 p-5 shadow-sm rounded-xl"> <div class="bg-white dark:bg-zinc-800 p-5 shadow-sm rounded-xl">
<div class="text-sm font-semibold text-gray-800 dark:text-gray-100 mb-2"> <div class="text-sm font-semibold text-zinc-800 dark:text-zinc-100 mb-2">
Zustimmungen der übrigen Mitglieder Zustimmungen des Vorstands ({{ count($this->boardVotes->where('value', 1)) }})
({{ count($this->otherVotes->where('value', 1)) }})
</div>
</div>
<div class="bg-white dark:bg-gray-800 p-5 shadow-sm rounded-xl">
<div class="text-sm font-semibold text-gray-800 dark:text-gray-100 mb-2">
Ablehnungen der übrigen Mitglieder
({{ count($this->otherVotes->where('value', 0)) }})
</div>
</div>
</div> </div>
@endif </div>
<div class="bg-white dark:bg-zinc-800 p-5 shadow-sm rounded-xl">
<div class="text-sm font-semibold text-zinc-800 dark:text-zinc-100 mb-2">
Ablehnungen des Vorstands ({{ count($this->boardVotes->where('value', 0)) }})
</div>
</div>
<div class="bg-white dark:bg-zinc-800 p-5 shadow-sm rounded-xl">
<div class="text-sm font-semibold text-zinc-800 dark:text-zinc-100 mb-2">
Zustimmungen der übrigen Mitglieder
({{ count($this->otherVotes->where('value', 1)) }})
</div>
</div>
<div class="bg-white dark:bg-zinc-800 p-5 shadow-sm rounded-xl">
<div class="text-sm font-semibold text-zinc-800 dark:text-zinc-100 mb-2">
Ablehnungen der übrigen Mitglieder
({{ count($this->otherVotes->where('value', 0)) }})
</div>
</div>
</div> </div>
</div> </div>
@else </div>
<div class="px-4 sm:px-6 lg:px-8 py-8 w-full mx-auto">
<flux:callout variant="warning" icon="exclamation-circle">
<flux:heading>Zugriff auf Projektförderung nicht möglich</flux:heading>
<p>
@if(!NostrAuth::check())
Bitte melde dich zunächst mit Nostr an, um Zugriff auf die Projektförderung zu erhalten.
@else
Du benötigst eine gültige Nostr-Authentifizierung, um diese Projektförderung einzusehen.
@endif
</p>
</flux:callout>
</div>
@endif
</div> </div>