{#snippet eventAccordion( item: EventCardItem, openByDefault: boolean, isNext: boolean, )} {@const eventHref = getEventLinkHref(item.link)} {@const live = liveStatus(item)} {@const title = item.title || t(T.calendar_untitled)} {@const urgency = urgencyOf(item)} {@const locText = locationText(item.location)} {@const hasBody = !!( item.description || eventHref || locText || item.isMultiDay )}
  • {title} {#if live} {live} {/if}
    {#if item.timeStr && !item.isMultiDay} {/if} {#if locText} {/if} {#if item.tags && item.tags.length > 0} {#each item.tags.slice(0, 2) as tg} {tg} {/each} {#if item.tags.length > 2} +{item.tags.length - 2} {/if} {/if}
    {relativeDays(item.start)}
    {#if item.description}
    {@html marked.parse(item.description)}
    {/if} {#if item.tags && item.tags.length > 2}
    {#each item.tags as tg} {tg} {/each}
    {/if} {#if item.image} {@const imageField = extractCmsImageField(item.image)} {#if imageField} {@const thumbSrc = getCmsImageUrl(imageField.url, { width: 240, height: 240, fit: "contain", })} {@const fullSrc = getCmsImageUrl(imageField.url, { width: 1400, fit: "contain", })} {@const imageAlt = imageField.alt ?? (typeof item.image === "object" && "description" in item.image ? (item.image.description ?? "") : "")} {/if} {/if}
    {#if item._slug || eventHref || locText || item.attachment?.src}
    {#if item._slug} Details {/if} {#if eventHref} {t(T.calendar_more_info)} {/if} {#if locText} {/if} {#if item.attachment?.src} {@const dlSrc = `/cms-files?src=${encodeURIComponent(item.attachment.src)}&dl=1`} {/if}
    {/if}
    Kalender Google
    {#if feedHost} {@const shareKey = item._slug ?? String(item.start.getTime())} {@const copied = copyToastKey === shareKey} {@const shared = shareToastKey === shareKey}
    Teilen {#if item._slug} {/if}
    {/if}
  • {/snippet} {#if block.title}

    {block.title}

    {/if} {#if allTags.length > 0}
    {t(T.calendar_filter_by_tag)} {#each allTags as tag} {/each}
    {/if} {#if feedHost}
    {#if isApplePlatform} {:else} {/if} {#if items.length > 0} {/if}
    {/if}
    {monthLabel}
    {#each weekdays as w, i}
    {w}
    {/each} {#each calendarDays as d} {#if d === null} {:else} {@const key = dayKey(d)} {@const isCurrentMonth = d.getMonth() === month} {@const dayEvents = eventsByDay.get(key) ?? []} {@const hasEvents = dayEvents.length > 0} {@const isSelected = selectedDay === key} {@const isToday = key === todayKey} {@const isFuture = key >= todayKey} {@const isWeekend = d.getDay() === 0 || d.getDay() === 6} {#if hasEvents} {:else}
    {d.getDate()} {#if isToday} {t(T.calendar_today_marker)} {/if}
    {/if} {/if} {/each}
    {#if hasHover && tooltipDay && tooltipEvents.length > 0} {/if}
    {#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", }, )}
    {:else if futureEventsByDay.length > 0}

    {t(T.calendar_all_upcoming)}

    {t(T.calendar_event_count, { n: futureEvents.length })}
    {#if pastEvents.length > 0}
      {#each pastEvents as item} {@render eventAccordion(item, false, false)} {/each}
    {/if} {:else if pastEvents.length > 0}
      {#each pastEvents as item} {@render eventAccordion(item, false, false)} {/each}
    {:else}

    {t(T.calendar_no_future_events)}

    {/if}
    {#if modalImage} (modalImage = null)} /> {/if} {#if socialModal} {/if} {#if qrModal} (qrModal = null)} /> {/if}