diff --git a/lang/en/calendar.php b/lang/en/calendar.php index a9051ed..81dd935 100644 --- a/lang/en/calendar.php +++ b/lang/en/calendar.php @@ -46,6 +46,34 @@ return [ 'saved' => 'Your calendar settings have been saved!', 'title' => 'Calendar settings', ], - 'timezone_help' => 'You can override your default time zone here.' + 'timezone_help' => 'You can override your default time zone here.', + 'event' => [ + 'when' => 'When', + 'all_day' => 'All day', + 'location' => 'Location', + 'map_coming' => 'Map preview coming soon.', + 'no_location' => 'No location set.', + 'details' => 'Details', + 'repeats' => 'Repeats', + 'does_not_repeat' => 'Does not repeat', + 'category' => 'Category', + 'none' => 'None', + 'visibility' => 'Visibility', + 'private' => 'Private', + 'default' => 'Default', + 'all_day_handling' => 'All-day handling', + 'timed' => 'Timed', + 'all_day_coming' => 'Multi-day all-day UI coming soon', + 'alerts' => 'Alerts', + 'reminder' => 'Reminder', + 'minutes_before' => 'minutes before', + 'alerts_coming' => 'No alerts set. (Coming soon)', + 'invitees' => 'Invitees', + 'invitees_coming' => 'Invitees and RSVP tracking coming soon.', + 'attachments' => 'Attachments', + 'attachments_coming' => 'Attachment support coming soon.', + 'notes' => 'Notes', + 'no_description' => 'No description yet.', + ], ]; diff --git a/lang/it/account.php b/lang/it/account.php new file mode 100644 index 0000000..d19682b --- /dev/null +++ b/lang/it/account.php @@ -0,0 +1,68 @@ + [ + 'city' => 'Citta', + 'country' => 'Paese', + 'home' => 'Indirizzo di casa', + 'label' => 'Etichetta indirizzo', + 'line1' => 'Indirizzo riga 1', + 'line2' => 'Indirizzo riga 2', + 'state' => 'Provincia', + 'work' => 'Indirizzo di lavoro', + 'zip' => 'CAP', + ], + 'billing' => [ + 'home' => 'Usa il tuo indirizzo di casa per la fatturazione', + 'work' => 'Usa il tuo indirizzo di lavoro per la fatturazione', + ], + 'delete' => 'Elimina account', + 'delete-your' => 'Elimina il tuo account', + 'delete-confirm' => 'Elimina davvero il mio account!', + 'email' => 'Email', + 'email_address' => 'Indirizzo email', + 'first_name' => 'Nome', + 'last_name' => 'Cognome', + 'phone' => 'Numero di telefono', + 'settings' => [ + 'addresses' => [ + 'title' => 'Indirizzi', + 'subtitle' => 'Gestisci i tuoi indirizzi di casa e lavoro e scegli quale usare per la fatturazione.', + ], + 'delete' => [ + 'title' => 'Qui ci sono draghi', + 'subtitle' => 'Elimina il tuo account e rimuovi tutte le informazioni dal nostro database. Non puo essere annullato, quindi consigliamo di esportare i tuoi dati prima e migrare a un nuovo provider.', + 'explanation' => 'Nota: non e come altre app che "eliminano" i dati—non stiamo impostando is_deleted = 1, li stiamo rimuovendo dal nostro database.', + ], + 'delete-confirm' => [ + 'title' => 'Conferma eliminazione account', + 'subtitle' => 'Inserisci la tua password e conferma che vuoi eliminare definitivamente il tuo account.', + ], + 'information' => [ + 'title' => 'Informazioni personali', + 'subtitle' => 'Il tuo nome, email e altri dettagli principali del account.', + ], + 'locale' => [ + 'title' => 'Preferenze locali', + 'subtitle' => 'Posizione, fuso orario e altre preferenze regionali per calendari ed eventi.' + ], + 'password' => [ + 'title' => 'Password', + 'subtitle' => 'Assicurati che il tuo account usi una password lunga e casuale per restare sicuro. Consigliamo anche un password manager!', + ], + 'title' => 'Impostazioni account', + ], + 'title' => 'Account', + +]; diff --git a/lang/it/auth.php b/lang/it/auth.php new file mode 100644 index 0000000..12a48b9 --- /dev/null +++ b/lang/it/auth.php @@ -0,0 +1,20 @@ + 'Queste credenziali non corrispondono ai nostri record.', + 'password' => 'La password fornita non e corretta.', + 'throttle' => 'Troppi tentativi di accesso. Riprova tra :seconds secondi.', + +]; diff --git a/lang/it/calendar.php b/lang/it/calendar.php new file mode 100644 index 0000000..17dc39b --- /dev/null +++ b/lang/it/calendar.php @@ -0,0 +1,79 @@ + 'Colore', + 'create' => 'Crea calendario', + 'description' => 'Descrizione', + 'ics' => [ + 'url' => 'URL ICS', + 'url_help' => 'Non puoi modificare un URL di calendario pubblico. Se devi fare una modifica, annulla l iscrizione e aggiungilo di nuovo.', + ], + 'mine' => 'I miei calendari', + 'name' => 'Nome calendario', + 'settings' => [ + 'calendar' => [ + 'title' => 'Impostazioni calendario', + 'subtitle' => 'Dettagli e impostazioni per :calendar.' + ], + 'create' => [ + 'title' => 'Crea un calendario', + 'subtitle' => 'Crea un nuovo calendario locale.', + ], + 'display' => [ + 'title' => 'Preferenze di visualizzazione', + 'subtitle' => 'Regola aspetto e comportamento dei tuoi calendari.' + ], + 'language_region' => [ + 'title' => 'Lingua e regione', + 'subtitle' => 'Scegli la lingua predefinita, la regione e le preferenze di formattazione. Queste influenzano come date e orari sono mostrati nei calendari e negli eventi.', + ], + 'my_calendars' => 'Impostazioni per i miei calendari', + 'subscribe' => [ + 'title' => 'Iscriviti a un calendario', + 'subtitle' => 'Aggiungi un calendario `.ics` da un altro servizio', + ], + 'saved' => 'Le impostazioni del calendario sono state salvate!', + 'title' => 'Impostazioni calendario', + ], + 'timezone_help' => 'Puoi sovrascrivere il tuo fuso orario predefinito qui.', + 'event' => [ + 'when' => 'Quando', + 'all_day' => 'Tutto il giorno', + 'location' => 'Luogo', + 'map_coming' => 'Anteprima mappa in arrivo.', + 'no_location' => 'Nessun luogo impostato.', + 'details' => 'Dettagli', + 'repeats' => 'Ripete', + 'does_not_repeat' => 'Non si ripete', + 'category' => 'Categoria', + 'none' => 'Nessuno', + 'visibility' => 'Visibilita', + 'private' => 'Privato', + 'default' => 'Predefinito', + 'all_day_handling' => 'Gestione giornata intera', + 'timed' => 'Con orario', + 'all_day_coming' => 'UI giornate intere multi-giorno in arrivo', + 'alerts' => 'Avvisi', + 'reminder' => 'Promemoria', + 'minutes_before' => 'minuti prima', + 'alerts_coming' => 'Nessun avviso impostato. (In arrivo)', + 'invitees' => 'Invitati', + 'invitees_coming' => 'Invitati e RSVP in arrivo.', + 'attachments' => 'Allegati', + 'attachments_coming' => 'Supporto allegati in arrivo.', + 'notes' => 'Note', + 'no_description' => 'Nessuna descrizione.', + ], + +]; diff --git a/lang/it/common.php b/lang/it/common.php index b84840e..659add8 100644 --- a/lang/it/common.php +++ b/lang/it/common.php @@ -2,10 +2,41 @@ return [ + /* + |-------------------------------------------------------------------------- + | Common words and phrases + |-------------------------------------------------------------------------- + | + | Generic words used throughout the app in more than one location. + | + */ + + 'address' => 'Indirizzo', + 'addresses' => 'Indirizzi', 'calendar' => 'Calendario', 'calendars' => 'Calendari', + 'cancel' => 'Annulla', + 'cancel_back' => 'Annulla e torna indietro', + 'cancel_funny' => 'Portami via', + 'date' => 'Data', + 'date_select' => 'Seleziona una data', + 'date_format' => 'Formato data', + 'date_format_select' => 'Seleziona un formato data', 'event' => 'Evento', 'events' => 'Eventi', + 'language' => 'Lingua', + 'language_select' => 'Seleziona una lingua', + 'password' => 'Password', + 'region' => 'Regione', + 'region_select' => 'Seleziona una regione', + 'save_changes' => 'Salva modifiche', 'settings' => 'Impostazioni', + 'time' => 'Ora', + 'time_select' => 'Seleziona un orario', + 'time_format' => 'Formato ora', + 'time_format_select' => 'Seleziona un formato ora', + 'timezone' => 'Fuso orario', + 'timezone_default' => 'Fuso orario predefinito', + 'timezone_select' => 'Seleziona un fuso orario', ]; diff --git a/lang/it/pagination.php b/lang/it/pagination.php new file mode 100644 index 0000000..9d6a2e2 --- /dev/null +++ b/lang/it/pagination.php @@ -0,0 +1,19 @@ + '« Precedente', + 'next' => 'Successivo »', + +]; diff --git a/lang/it/passwords.php b/lang/it/passwords.php new file mode 100644 index 0000000..f337db6 --- /dev/null +++ b/lang/it/passwords.php @@ -0,0 +1,22 @@ + 'La tua password e stata reimpostata.', + 'sent' => 'Ti abbiamo inviato via email il link per reimpostare la password.', + 'throttled' => 'Attendi prima di riprovare.', + 'token' => 'Questo token di reimpostazione password non e valido.', + 'user' => 'Non troviamo un utente con questo indirizzo email.', + +]; diff --git a/lang/it/validation.php b/lang/it/validation.php new file mode 100644 index 0000000..dafb622 --- /dev/null +++ b/lang/it/validation.php @@ -0,0 +1,198 @@ + 'Il campo :attribute deve essere accettato.', + 'accepted_if' => 'Il campo :attribute deve essere accettato quando :other e :value.', + 'active_url' => 'Il campo :attribute deve essere un URL valido.', + 'after' => 'Il campo :attribute deve essere una data successiva a :date.', + 'after_or_equal' => 'Il campo :attribute deve essere una data successiva o uguale a :date.', + 'alpha' => 'Il campo :attribute deve contenere solo lettere.', + 'alpha_dash' => 'Il campo :attribute deve contenere solo lettere, numeri, trattini e underscore.', + 'alpha_num' => 'Il campo :attribute deve contenere solo lettere e numeri.', + 'any_of' => 'Il campo :attribute non e valido.', + 'array' => 'Il campo :attribute deve essere un array.', + 'ascii' => 'Il campo :attribute deve contenere solo caratteri alfanumerici a singolo byte e simboli.', + 'before' => 'Il campo :attribute deve essere una data precedente a :date.', + 'before_or_equal' => 'Il campo :attribute deve essere una data precedente o uguale a :date.', + 'between' => [ + 'array' => 'Il campo :attribute deve avere tra :min e :max elementi.', + 'file' => 'Il campo :attribute deve essere tra :min e :max kilobyte.', + 'numeric' => 'Il campo :attribute deve essere tra :min e :max.', + 'string' => 'Il campo :attribute deve essere tra :min e :max caratteri.', + ], + 'boolean' => 'Il campo :attribute deve essere vero o falso.', + 'can' => 'Il campo :attribute contiene un valore non autorizzato.', + 'confirmed' => 'La conferma del campo :attribute non corrisponde.', + 'contains' => 'Il campo :attribute non contiene un valore richiesto.', + 'current_password' => 'La password inserita non e corretta.', + 'date' => 'Il campo :attribute deve essere una data valida.', + 'date_equals' => 'Il campo :attribute deve essere una data uguale a :date.', + 'date_format' => 'Il campo :attribute deve corrispondere al formato :format.', + 'decimal' => 'Il campo :attribute deve avere :decimal decimali.', + 'declined' => 'Il campo :attribute deve essere rifiutato.', + 'declined_if' => 'Il campo :attribute deve essere rifiutato quando :other e :value.', + 'different' => 'Il campo :attribute e :other devono essere diversi.', + 'digits' => 'Il campo :attribute deve essere di :digits cifre.', + 'digits_between' => 'Il campo :attribute deve essere tra :min e :max cifre.', + 'dimensions' => 'Il campo :attribute ha dimensioni immagine non valide.', + 'distinct' => 'Il campo :attribute ha un valore duplicato.', + 'doesnt_end_with' => 'Il campo :attribute non deve terminare con uno dei seguenti: :values.', + 'doesnt_start_with' => 'Il campo :attribute non deve iniziare con uno dei seguenti: :values.', + 'email' => 'Il campo :attribute deve essere un indirizzo email valido.', + 'ends_with' => 'Il campo :attribute deve terminare con uno dei seguenti: :values.', + 'enum' => 'Il valore selezionato per :attribute non e valido.', + 'exists' => 'Il valore selezionato per :attribute non e valido.', + 'extensions' => 'Il campo :attribute deve avere una delle seguenti estensioni: :values.', + 'file' => 'Il campo :attribute deve essere un file.', + 'filled' => 'Il campo :attribute deve avere un valore.', + 'gt' => [ + 'array' => 'Il campo :attribute deve avere piu di :value elementi.', + 'file' => 'Il campo :attribute deve essere maggiore di :value kilobyte.', + 'numeric' => 'Il campo :attribute deve essere maggiore di :value.', + 'string' => 'Il campo :attribute deve essere maggiore di :value caratteri.', + ], + 'gte' => [ + 'array' => 'Il campo :attribute deve avere :value elementi o piu.', + 'file' => 'Il campo :attribute deve essere maggiore o uguale a :value kilobyte.', + 'numeric' => 'Il campo :attribute deve essere maggiore o uguale a :value.', + 'string' => 'Il campo :attribute deve essere maggiore o uguale a :value caratteri.', + ], + 'hex_color' => 'Il campo :attribute deve essere un colore esadecimale valido.', + 'image' => 'Il campo :attribute deve essere una immagine.', + 'in' => 'Il valore selezionato per :attribute non e valido.', + 'in_array' => 'Il campo :attribute deve esistere in :other.', + 'in_array_keys' => 'Il campo :attribute deve contenere almeno una delle seguenti chiavi: :values.', + 'integer' => 'Il campo :attribute deve essere un numero intero.', + 'ip' => 'Il campo :attribute deve essere un indirizzo IP valido.', + 'ipv4' => 'Il campo :attribute deve essere un indirizzo IPv4 valido.', + 'ipv6' => 'Il campo :attribute deve essere un indirizzo IPv6 valido.', + 'json' => 'Il campo :attribute deve essere una stringa JSON valida.', + 'list' => 'Il campo :attribute deve essere una lista.', + 'lowercase' => 'Il campo :attribute deve essere in minuscolo.', + 'lt' => [ + 'array' => 'Il campo :attribute deve avere meno di :value elementi.', + 'file' => 'Il campo :attribute deve essere minore di :value kilobyte.', + 'numeric' => 'Il campo :attribute deve essere minore di :value.', + 'string' => 'Il campo :attribute deve essere minore di :value caratteri.', + ], + 'lte' => [ + 'array' => 'Il campo :attribute non deve avere piu di :value elementi.', + 'file' => 'Il campo :attribute deve essere minore o uguale a :value kilobyte.', + 'numeric' => 'Il campo :attribute deve essere minore o uguale a :value.', + 'string' => 'Il campo :attribute deve essere minore o uguale a :value caratteri.', + ], + 'mac_address' => 'Il campo :attribute deve essere un indirizzo MAC valido.', + 'max' => [ + 'array' => 'Il campo :attribute non deve avere piu di :max elementi.', + 'file' => 'Il campo :attribute non deve essere maggiore di :max kilobyte.', + 'numeric' => 'Il campo :attribute non deve essere maggiore di :max.', + 'string' => 'Il campo :attribute non deve essere maggiore di :max caratteri.', + ], + 'max_digits' => 'Il campo :attribute non deve avere piu di :max cifre.', + 'mimes' => 'Il campo :attribute deve essere un file di tipo: :values.', + 'mimetypes' => 'Il campo :attribute deve essere un file di tipo: :values.', + 'min' => [ + 'array' => 'Il campo :attribute deve avere almeno :min elementi.', + 'file' => 'Il campo :attribute deve essere almeno :min kilobyte.', + 'numeric' => 'Il campo :attribute deve essere almeno :min.', + 'string' => 'Il campo :attribute deve essere almeno :min caratteri.', + ], + 'min_digits' => 'Il campo :attribute deve avere almeno :min cifre.', + 'missing' => 'Il campo :attribute deve essere assente.', + 'missing_if' => 'Il campo :attribute deve essere assente quando :other e :value.', + 'missing_unless' => 'Il campo :attribute deve essere assente a meno che :other sia :value.', + 'missing_with' => 'Il campo :attribute deve essere assente quando :values e presente.', + 'missing_with_all' => 'Il campo :attribute deve essere assente quando :values sono presenti.', + 'multiple_of' => 'Il campo :attribute deve essere un multiplo di :value.', + 'not_in' => 'Il valore selezionato per :attribute non e valido.', + 'not_regex' => 'Il formato del campo :attribute non e valido.', + 'numeric' => 'Il campo :attribute deve essere un numero.', + 'password' => [ + 'letters' => 'Il campo :attribute deve contenere almeno una lettera.', + 'mixed' => 'Il campo :attribute deve contenere almeno una lettera maiuscola e una minuscola.', + 'numbers' => 'Il campo :attribute deve contenere almeno un numero.', + 'symbols' => 'Il campo :attribute deve contenere almeno un simbolo.', + 'uncompromised' => 'Il valore :attribute e apparso in una violazione di dati. Scegli un altro :attribute.', + ], + 'present' => 'Il campo :attribute deve essere presente.', + 'present_if' => 'Il campo :attribute deve essere presente quando :other e :value.', + 'present_unless' => 'Il campo :attribute deve essere presente a meno che :other sia :value.', + 'present_with' => 'Il campo :attribute deve essere presente quando :values e presente.', + 'present_with_all' => 'Il campo :attribute deve essere presente quando :values sono presenti.', + 'prohibited' => 'Il campo :attribute e proibito.', + 'prohibited_if' => 'Il campo :attribute e proibito quando :other e :value.', + 'prohibited_if_accepted' => 'Il campo :attribute e proibito quando :other e accettato.', + 'prohibited_if_declined' => 'Il campo :attribute e proibito quando :other e rifiutato.', + 'prohibited_unless' => 'Il campo :attribute e proibito a meno che :other sia in :values.', + 'prohibits' => 'Il campo :attribute impedisce la presenza di :other.', + 'regex' => 'Il formato del campo :attribute non e valido.', + 'required' => 'Il campo :attribute e obbligatorio.', + 'required_array_keys' => 'Il campo :attribute deve contenere voci per: :values.', + 'required_if' => 'Il campo :attribute e obbligatorio quando :other e :value.', + 'required_if_accepted' => 'Il campo :attribute e obbligatorio quando :other e accettato.', + 'required_if_declined' => 'Il campo :attribute e obbligatorio quando :other e rifiutato.', + 'required_unless' => 'Il campo :attribute e obbligatorio a meno che :other sia in :values.', + 'required_with' => 'Il campo :attribute e obbligatorio quando :values e presente.', + 'required_with_all' => 'Il campo :attribute e obbligatorio quando :values sono presenti.', + 'required_without' => 'Il campo :attribute e obbligatorio quando :values non e presente.', + 'required_without_all' => 'Il campo :attribute e obbligatorio quando nessuno di :values e presente.', + 'same' => 'Il campo :attribute deve corrispondere a :other.', + 'size' => [ + 'array' => 'Il campo :attribute deve contenere :size elementi.', + 'file' => 'Il campo :attribute deve essere di :size kilobyte.', + 'numeric' => 'Il campo :attribute deve essere :size.', + 'string' => 'Il campo :attribute deve essere di :size caratteri.', + ], + 'starts_with' => 'Il campo :attribute deve iniziare con uno dei seguenti: :values.', + 'string' => 'Il campo :attribute deve essere una stringa.', + 'timezone' => 'Il campo :attribute deve essere un fuso orario valido.', + 'unique' => 'Il valore :attribute e gia stato preso.', + 'uploaded' => 'Il campo :attribute non e riuscito a caricare.', + 'uppercase' => 'Il campo :attribute deve essere in maiuscolo.', + 'url' => 'Il campo :attribute deve essere un URL valido.', + 'ulid' => 'Il campo :attribute deve essere un ULID valido.', + 'uuid' => 'Il campo :attribute deve essere un UUID valido.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/css/etc/layout.css b/resources/css/etc/layout.css index 0d7df8e..2db5e23 100644 --- a/resources/css/etc/layout.css +++ b/resources/css/etc/layout.css @@ -213,6 +213,7 @@ main { @apply fixed right-0 top-2 flex flex-col bg-gray-100 gap-6 p-6 rounded-l-xl; height: calc(100dvh - 0.5rem); width: 33dvw; + display: none; } } @@ -260,7 +261,7 @@ main { header { menu { @apply relative top-auto right-auto h-auto w-auto rounded-none bg-transparent; - @apply flex flex-row items-center justify-end gap-4; + @apply flex flex-row items-center justify-end gap-4 p-0; } } } diff --git a/resources/css/lib/modal.css b/resources/css/lib/modal.css index 9c79f62..446f357 100644 --- a/resources/css/lib/modal.css +++ b/resources/css/lib/modal.css @@ -3,26 +3,29 @@ } dialog { - @apply grid fixed top-0 right-0 bottom-0 left-0 m-0 p-0 pointer-events-none; - @apply justify-items-center items-start bg-transparent opacity-0 invisible; - @apply w-full h-full max-w-full max-h-full overflow-y-hidden; + @apply grid fixed inset-0 m-0 p-0 pointer-events-none; + @apply place-items-center bg-transparent opacity-0 invisible; + @apply w-full h-full max-w-none max-h-none overflow-clip; background-color: rgba(26, 26, 26, 0.75); backdrop-filter: blur(0.25rem); - grid-template-rows: minmax(20dvh, 2rem) 1fr; + /*(grid-template-rows: minmax(20dvh, 2rem) 1fr; */ + overscroll-behavior: contain; + scrollbar-gutter: auto; transition: + background-color 150ms cubic-bezier(0,0,.2,1), opacity 150ms cubic-bezier(0,0,.2,1), visibility 150ms cubic-bezier(0,0,.2,1); z-index: 100; #modal { - @apply relative rounded-lg bg-white border-gray-200 p-0; - @apply flex flex-col items-start col-start-1 row-start-2 translate-y-4; + @apply relative rounded-xl bg-white border-gray-200 p-0; + @apply flex flex-col items-start col-start-1 translate-y-4; @apply overscroll-contain overflow-y-auto; max-height: calc(100vh - 5em); width: 91.666667%; max-width: 36rem; transition: all 150ms cubic-bezier(0,0,.2,1); - box-shadow: #00000040 0 1.5rem 4rem -0.5rem; + box-shadow: 0 1.5rem 4rem -0.5rem rgba(0, 0, 0, 0.4); > .close-modal { @apply block absolute top-4 right-4; diff --git a/resources/views/event/partials/details.blade.php b/resources/views/event/partials/details.blade.php index 802884a..97ebd99 100644 --- a/resources/views/event/partials/details.blade.php +++ b/resources/views/event/partials/details.blade.php @@ -1,26 +1,147 @@ +@php + $meta = $event->meta; + $title = $meta->title ?? '(no title)'; + $allDay = (bool) ($meta->all_day ?? false); + $calendarName = $calendar->displayname ?? __('common.calendar'); + $calendarColor = $calendar->meta_color ?? $calendar->calendarcolor ?? default_calendar_color(); + $rrule = $meta?->extra['rrule'] ?? null; + $tzid = $meta?->extra['tzid'] ?? $tz; + $locationLabel = $meta?->location_label ?? ''; + $hasLocation = trim((string) $locationLabel) !== ''; + $venue = $meta?->venue; + $addressLine1 = $venue?->street; + $addressLine2 = trim(implode(', ', array_filter([ + $venue?->city, + $venue?->state, + $venue?->postal, + ]))); + $addressLine3 = $venue?->country; +@endphp + - {{ $event->meta->title ?? '(no title)' }} +
+ + {{ $title }} +
-

- {{ $start->format('l, F j, Y · g:i A') }} - @unless ($start->equalTo($end)) -  –  - {{ $end->isSameDay($start) - ? $end->format('g:i A') - : $end->format('l, F j, Y · g:i A') }} - @endunless -

+
+
+

{{ __('calendar.event.when') }}

+ @if ($allDay) +

+ {{ $start->format('l, F j, Y') }} + @unless ($start->isSameDay($end)) +  –  + {{ $end->format('l, F j, Y') }} + @endunless + ({{ __('calendar.event.all_day') }}) +

+ @else +

+ {{ $start->format('l, F j, Y · g:i A') }} + @unless ($start->equalTo($end)) +  –  + {{ $end->isSameDay($start) + ? $end->format('g:i A') + : $end->format('l, F j, Y · g:i A') }} + @endunless +

+ @endif +

{{ __('common.timezone') }}: {{ $tzid }}

+
- @if ($event->meta->location) -

Where: {{ $event->meta->location_label }}

- @endif +
+

{{ __('common.calendar') }}

+

{{ $calendarName }}

+
- @if ($event->meta->description) -

- {!! Str::markdown(nl2br(e($event->meta->description))) !!} -

- @endif +
+

{{ __('calendar.event.location') }}

+ @if ($hasLocation) +

{{ $locationLabel }}

+ @if ($addressLine1 || $addressLine2 || $addressLine3) +
+ @if ($addressLine1) +
{{ $addressLine1 }}
+ @endif + @if ($addressLine2) +
{{ $addressLine2 }}
+ @endif + @if ($addressLine3) +
{{ $addressLine3 }}
+ @endif +
+ @endif +
+ {{ __('calendar.event.map_coming') }} +
+ @else +

{{ __('calendar.event.no_location') }}

+ @endif +
+ +
+

{{ __('calendar.event.details') }}

+
+
+ {{ __('calendar.event.repeats') }}: + @if ($rrule) + {{ $rrule }} + @else + {{ __('calendar.event.does_not_repeat') }} + @endif +
+
+ {{ __('calendar.event.category') }}: + {{ $meta->category ?? __('calendar.event.none') }} +
+
+ {{ __('calendar.event.visibility') }}: + {{ ($meta->is_private ?? false) ? __('calendar.event.private') : __('calendar.event.default') }} +
+
+ {{ __('calendar.event.all_day_handling') }}: + + {{ $allDay ? __('calendar.event.all_day') : __('calendar.event.timed') }} + · {{ __('calendar.event.all_day_coming') }} + +
+
+
+ +
+

{{ __('calendar.event.alerts') }}

+ @if (!is_null($meta->reminder_minutes)) +

+ {{ __('calendar.event.reminder') }}: {{ $meta->reminder_minutes }} {{ __('calendar.event.minutes_before') }} +

+ @else +

{{ __('calendar.event.alerts_coming') }}

+ @endif +
+ +
+

{{ __('calendar.event.invitees') }}

+

{{ __('calendar.event.invitees_coming') }}

+
+ +
+

{{ __('calendar.event.attachments') }}

+

{{ __('calendar.event.attachments_coming') }}

+
+ +
+

{{ __('calendar.event.notes') }}

+ @if ($meta->description) +
+ {!! Str::markdown(nl2br(e($meta->description))) !!} +
+ @else +

{{ __('calendar.event.no_description') }}

+ @endif +
+