{{ $template?->exists ? 'Edit template' : 'Create template' }} Back @canany(['templates.create', 'templates.edit']) @endcanany @if(session('template_saved'))
{{ session('template_saved') }}
@endif @if(session('template_error'))
{{ session('template_error') }}
@endif @if(!empty($unknownAtSave))
Unknown placeholders detected: {{ implode(', ', $unknownAtSave) }}
These will render as empty strings for manual sends, and cause automatic triggers to fail and be logged.
@endif
{{-- LEFT: editor form --}}
Details
@error('name') {{ $message }} @enderror
Used by code-driven sends.
Filters placeholders + triggers.

Content
@if($channel === 'email')
@else
@if($smsLength !== null)
{{ $smsLength }} chars · {{ $smsSegments }} segment{{ $smsSegments === 1 ? '' : 's' }} · {{ $smsEncoding }} @if($smsSegments > 1) — will be sent as multiple parts @endif
@endif
@endif
{{-- Sender + flags --}}
Sender & flags
@if($channel === 'email')
If blank, falls back to the solicitor's general sender.
@else
@if($smsSenders->isEmpty()) No SMS senders are whitelisted yet. Add one under Solicitor → SMS Senders. @endif
@endif
{{-- Triggers section (only once the template exists) --}} @if($template?->exists)
Automatic triggers
@can('communications.triggers.manage') @endcan
@if(!$allow_automatic_send)
Enable "Usable by triggers" above to allow this template to fire automatically.
@endif @if($triggers->isEmpty())
No triggers configured.
@else @foreach($triggers as $trig) @endforeach
Event Model Conditions Dedupe Active
{{ $trig->trigger_type->label() }} {{ class_basename($trig->model_type ?? 'Any') }} @if($trig->conditions) {{ json_encode($trig->conditions) }} @else @endif {{ $trig->dedupe_window_minutes }}m @if($trig->is_active) on @else off @endif @can('communications.triggers.manage') @endcan
@endif @if($showTriggerForm)
{{ $editingTriggerId ? 'Edit trigger' : 'New trigger' }}
@error('triggerForm.conditions') {{ $message }} @enderror Keys are matched against the trigger event payload. Example for status change: {"to_status_id": 5}. @if($statuses->count()) Available status ids: @foreach($statuses->take(10) as $s) {{ $s->id }}={{ $s->display_name }}{{ !$loop->last ? ', ' : '' }} @endforeach @if($statuses->count() > 10)…@endif @endif
@can('communications.triggers.manage') @endcan
@endif
@else
Save the template first to configure automatic triggers.
@endif
{{-- RIGHT: placeholders + preview --}}
Available placeholders click to insert
@foreach($placeholdersByPrefix as $prefix => $group)
{{ $prefix }}
@foreach($group as $p) @php $displayToken = '{' . '{ ' . $p->token . ' }' . '}'; @endphp
{{ $displayToken }} @if($p->description)
{{ $p->description }}
@endif
@if($channel === 'email') @else @endif
@endforeach
@endforeach @if($placeholdersByPrefix->isEmpty())
No placeholders registered.
@endif
Live preview
@if(!empty($previewUnknown))
Unknown placeholders: {{ implode(', ', $previewUnknown) }}
@endif @if($channel === 'email') @if($previewSubject)
Subject
{{ $previewSubject }}
@endif
{!! $previewBodyHtml ?: 'Start typing to see a preview...' !!}
@if($previewBodyText)
Plain text version
{{ $previewBodyText }}
@endif @else
{{ $previewBodyText ?: '—' }}
@if($smsLength !== null)
{{ $smsLength }} chars · {{ $smsSegments }} segment(s) · {{ $smsEncoding }}
@endif @endif @if(!empty($previewPlaceholdersUsed))
{{ count($previewPlaceholdersUsed) }} placeholder(s) resolved @foreach($previewPlaceholdersUsed as $token => $value) @endforeach
{{ $token }} {{ $value !== '' ? $value : '(empty)' }}
@endif