{{-- Files this page already uploaded count towards the quota: they can still become a share. --}} @if ($isStorageFull && $pendingFiles->isEmpty()) @else {{-- Submitting sends the private text first (submit(), resources/js/share-uploader.js), then creates the share. --}} {{-- WebCrypto, which encrypts the files in the browser, only exists on HTTPS (or localhost). --}}
{{-- Drop zone: the shape behind the icon turns into a burst while files are over it. --}}

{{ __('Drag & drop files or folders here') }}

{{ __('or click to browse') }}

{{-- The button is the tab stop and opens the browser's own picker; the input only carries the selection. --}}
{{-- Upload progress, over every file still to send --}}
{{ __('Uploading...') }} %
@error('files') {{ $message }} @enderror {{-- Selected files --}} @if ($pendingFiles->isNotEmpty())

{{ __('Selected Files') }} ({{ $pendingFiles->count() }})

@foreach ($pendingFiles as $file) {{ Number::fileSize($file->file_size) }} ยท @endforeach
@endif {{-- Private text: bound in Alpine only, never to the component, so it never reaches the server unencrypted; it is sent with the share (submit()). The limit is in UTF-8 bytes, as the server counts. --}}

{{ __('bytes') }} / {{ Number::fileSize($maxTextBytes) }}

@error('text') {{ $message }} @enderror
{{-- Options --}} @if ($usePassword) {{-- Generate draws one as Admin settings say (App\Services\PasswordGeneratorService); Copy takes whatever is in the field, typed or generated, with the snackbar a copyable field shows. --}} @if ($passwordGeneratorMode !== 'off') @endif @endif
@endif