b2in/packages/acme/contact-form/resources/views/form.blade.php
2026-04-10 17:18:17 +02:00

92 lines
5 KiB
PHP

<div>
<form wire:submit="submit" class="space-y-6">
@foreach ($fields as $key => $field)
@php
$name = $field['name'] ?? $key;
$label = $field['label'] ?? ucfirst(str_replace('_', ' ', $name));
$required = $field['required'] ?? (in_array('required', $field['rules'] ?? []));
$placeholder = $field['placeholder'] ?? '';
@endphp
@if ($field['type'] === 'honeypot')
<div class="opacity-0 absolute top-0 left-0 h-0 w-0 -z-10 overflow-hidden" aria-hidden="true">
<label for="{{ $name }}">{{ $label }}</label>
<input type="text" id="{{ $name }}" name="{{ $name }}"
wire:model="formData.{{ $name }}"
tabindex="-1" autocomplete="off">
</div>
@elseif ($field['type'] === 'textarea')
<div>
<label for="{{ $name }}" class="block text-sm font-medium mb-2">
{{ $label }}@if ($required) <span aria-hidden="true">*</span>@endif
</label>
<textarea id="{{ $name }}" name="{{ $name }}" rows="5"
wire:model="formData.{{ $name }}"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="{{ $placeholder }}"
@if ($required) required @endif></textarea>
@error("formData.{$name}")
<p class="text-sm text-red-600 mt-1">{{ $message }}</p>
@enderror
</div>
@elseif ($field['type'] === 'checkbox')
<div>
<div class="flex items-center gap-2">
<input type="checkbox" id="{{ $name }}" name="{{ $name }}"
wire:model="formData.{{ $name }}"
class="rounded border-gray-300"
@if ($required) required @endif>
<label for="{{ $name }}" class="text-sm">{{ $label }}</label>
</div>
@error("formData.{$name}")
<p class="text-sm text-red-600 mt-1">{{ $message }}</p>
@enderror
</div>
@elseif ($field['type'] === 'select')
<div>
<label for="{{ $name }}" class="block text-sm font-medium mb-2">
{{ $label }}@if ($required) <span aria-hidden="true">*</span>@endif
</label>
<select id="{{ $name }}" name="{{ $name }}"
wire:model="formData.{{ $name }}"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
@if ($required) required @endif>
<option value="">{{ $placeholder ?: __('contact-form::contact-form.select_placeholder') }}</option>
@foreach ($field['options'] ?? [] as $value => $optionLabel)
<option value="{{ $value }}">{{ $optionLabel }}</option>
@endforeach
</select>
@error("formData.{$name}")
<p class="text-sm text-red-600 mt-1">{{ $message }}</p>
@enderror
</div>
@else
<div>
<label for="{{ $name }}" class="block text-sm font-medium mb-2">
{{ $label }}@if ($required) <span aria-hidden="true">*</span>@endif
</label>
<input type="{{ $field['type'] ?? 'text' }}" id="{{ $name }}" name="{{ $name }}"
wire:model="formData.{{ $name }}"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="{{ $placeholder }}"
@if ($required) required @endif>
@error("formData.{$name}")
<p class="text-sm text-red-600 mt-1">{{ $message }}</p>
@enderror
</div>
@endif
@endforeach
@if ($success)
<div class="p-4 rounded-lg border border-green-200 bg-green-50 text-green-800 text-sm">
{{ __('contact-form::contact-form.success_message') }}
</div>
@endif
<button type="submit" wire:loading.attr="disabled"
class="w-full inline-flex items-center justify-center px-6 py-3 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 transition-colors disabled:opacity-70 disabled:cursor-not-allowed">
<span wire:loading.remove>{{ __('contact-form::contact-form.submit') }}</span>
<span wire:loading>{{ __('contact-form::contact-form.sending') }}</span>
</button>
</form>
</div>