{#snippet eventCard(item: EventCardItem)} {@const eventHref = getEventLinkHref(item.link)}
  • {#if item.date}
    {item.date.toLocaleDateString("de-DE", { weekday: "short", day: "numeric", month: "short", })}
    {#if item.timeStr} / {/if} {/if} {#if item.timeStr}
    {item.timeStr} {t(T.calendar_time_suffix)}
    {/if}
    {#if eventHref} {item.title} {:else}
    {item.title}
    {/if} {#if item.description}

    {item.description}

    {#if eventHref} {t(T.calendar_more_info)} {/if} {:else if eventHref} {t(T.calendar_more_info)} {/if}
  • {/snippet} {#if block.title}

    {block.title}

    {/if}
    {monthLabel}
    {#each weekdays as w}
    {w}
    {/each} {#each calendarDays as d} {#if d === null} {:else} {@const key = dayKey(d)} {@const isCurrentMonth = d.getMonth() === month} {@const events = eventsByDay.get(key) ?? []} {@const hasEvents = events.length > 0} {@const isSelected = selectedDay === key} {@const isFuture = key >= todayKey} {#if hasEvents} {:else}
    {d.getDate()}
    {/if} {/if} {/each}
    {#if items.length === 0}

    {t(T.calendar_no_events)}

    {:else if selectedDay}

    {new Date(selectedDay + "T12:00:00").toLocaleDateString("de-DE", { weekday: "long", day: "numeric", month: "long", })}

      {#each selectedDayEvents as item} {@render eventCard(item)} {/each}
    {:else if nextUpcomingEvents.length > 0}

    {t(T.calendar_next_events)}

      {#each nextUpcomingEvents as item} {@render eventCard(item)} {/each}
    {:else}

    {t(T.calendar_select_day)}

    {/if}