@props(['entry', 'unlocked', 'mode'])
{{--
One vault entry — outline, new-value field, test/save/forget — reusable
across every integration section on App\Livewire\Admin\Integrations. Kept
as its own component so a section can sit a secret and a plain setting
side by side (R20 exception: this is the page, not a table row) without
repeating this block per section.
Locked and unlocked are two genuinely different renders, not one hidden
behind CSS: while locked, nothing about the stored value — not even
whether one exists beyond the badge above this component — reaches the
page beyond a "gesperrt" note.
--}}
{{ $entry['label'] }}
{{ $entry['key'] }}
{{-- Which of the two slots THIS card reads and writes right now —
fix round, Important: save()/render() resolve without a mode
argument, so they always act on OperatingMode::current()'s
slot, but nothing on the card said so. The badge in the
header above (Integrations::mode_title) is not enough: it is
not visible at the card an operator is about to type into,
and repeating "Testbetrieb"/"Livebetrieb" there would only
restate the MODE, not name the PLATZ a value lands in. Same
colours as that header badge, for one visual language. --}}
{{ __('secrets.slot.'.$mode->value) }}
{{ __('secrets.source_'.$entry['source']) }}
@if ($entry['multiline'])
{{-- A multi-line PEM key: a single-line password field would
mangle it on paste. Not masked — a textarea cannot mask
its content in any browser. --}}
{{ __('secrets.ssh_private_key_hint') }}
@error('entered.'.$entry['field'])
{{ $message }}
@enderror
@else
@endif
{{-- Test first: a key that is saved and wrong fails later,
somewhere else, usually in front of a customer. --}}
@if ($entry['testable'])
{{ __('secrets.test') }}
@endif
{{ __('secrets.save') }}
@if ($entry['source'] === 'stored')
{{ __('secrets.forget') }}
@endif