fix: update styling and structure in various components
Deploy / verify (push) Successful in 43s
Deploy / deploy (push) Successful in 59s

- Changed margin class from `my-6` to `mb-6` in ContentRows.svelte for consistent spacing.
- Updated PostCard.svelte to use `$derived` for post properties, enhancing reactivity.
- Refined DeadlineBannerBlock.svelte by removing unnecessary border classes and improving layout for better content alignment.
- Modified Button.svelte to support rendering children directly, enhancing flexibility.
- Added `tabindex="0"` to TabBar.svelte for improved accessibility.
- Fixed textarea closing tag in Textarea.svelte for proper HTML structure.
- Corrected span closing tag in Toggle.svelte for valid markup.
This commit is contained in:
Peter Meier
2026-04-19 12:42:37 +02:00
parent f02613054a
commit da57ad1ac8
7 changed files with 47 additions and 31 deletions
+1 -1
View File
@@ -89,7 +89,7 @@
]); ]);
</script> </script>
<div class="content my-6 {className}"> <div class="content mb-6 {className}">
{#each rows as row} {#each rows as row}
{#if row.content.length > 0} {#if row.content.length > 0}
<div <div
+1 -1
View File
@@ -29,7 +29,7 @@
eventDate?: string; eventDate?: string;
eventLocation?: { text?: string }; eventLocation?: { text?: string };
}; };
const p = post as PostWithEvent; const p = $derived(post as PostWithEvent);
const eventDate = $derived(p.isEvent && p.eventDate ? p.eventDate : null); const eventDate = $derived(p.isEvent && p.eventDate ? p.eventDate : null);
const locationText = $derived(p.eventLocation?.text ?? null); const locationText = $derived(p.eventLocation?.text ?? null);
@@ -84,10 +84,10 @@
const variantClasses = $derived( const variantClasses = $derived(
variant === "urgent" variant === "urgent"
? "bg-amber-100 text-amber-900 border-amber-300" ? "bg-amber-100 text-amber-900"
: variant === "info" : variant === "info"
? "bg-sky-100 text-sky-900 border-sky-300" ? "bg-sky-100 text-sky-900"
: "bg-wald-100 text-wald-900 border-wald-300", : "bg-wald-100 text-wald-900",
); );
const iconName = $derived( const iconName = $derived(
variant === "urgent" ? "mdi:alert-circle" : "mdi:calendar-clock", variant === "urgent" ? "mdi:alert-circle" : "mdi:calendar-clock",
@@ -101,35 +101,47 @@
data-block-type="deadline_banner" data-block-type="deadline_banner"
data-block-slug={block._slug} data-block-slug={block._slug}
> >
<div class="border-y {variantClasses}"> {#snippet inner()}
<div class="container-custom flex flex-wrap items-center justify-start gap-x-3 gap-y-1 px-4 py-2 text-sm sm:text-base"> <div class="container-custom flex flex-wrap sm:flex-nowrap items-center gap-x-2 gap-y-1 px-4 py-1.5 text-xs sm:text-sm">
<Icon icon={iconName} class="size-5 shrink-0" aria-hidden="true" />
{#if block.label}
<span class="font-semibold">{block.label}:</span>
{/if}
{#if dateStr} {#if dateStr}
<span class="font-medium">{dateStr}</span> <span class="inline-flex items-center gap-1.5 rounded-md bg-white/70 px-2 py-0.5 text-sm sm:text-base font-bold whitespace-nowrap shrink-0">
{/if} <Icon icon={iconName} class="size-4 shrink-0" aria-hidden="true" />
{#if text} {dateStr}
<span>{dateStr ? "·" : ""} {text}</span>
{/if}
{#if countdownStr} {#if countdownStr}
<span class="rounded-full bg-white/60 px-2 py-0.5 text-xs font-semibold uppercase tracking-wide"> <span class="ml-1 rounded-full bg-black/80 text-white px-1.5 py-0 text-[0.6rem] font-bold uppercase tracking-wide">
{countdownStr} {countdownStr}
</span> </span>
{/if} {/if}
</span>
{:else}
<Icon icon={iconName} class="size-4 shrink-0" aria-hidden="true" />
{#if countdownStr}
<span class="rounded-full bg-white/60 px-2 py-0.5 text-xs font-semibold uppercase tracking-wide whitespace-nowrap shrink-0">
{countdownStr}
</span>
{/if}
{/if}
{#if text}
<span class="min-w-0 wrap-break-word line-clamp-2 sm:line-clamp-1">{text}</span>
{/if}
{#if href}
<Icon icon="mdi:arrow-right" class="size-4 shrink-0 ml-auto" aria-hidden="true" />
{/if}
</div>
{/snippet}
{#if href} {#if href}
<a <a
href={href} href={href}
target={newTab ? "_blank" : undefined} target={newTab ? "_blank" : undefined}
rel={newTab ? "noopener noreferrer" : undefined} rel={newTab ? "noopener noreferrer" : undefined}
class="inline-flex items-center gap-1 underline-offset-2 hover:underline" class="block no-underline text-inherit hover:no-underline transition-all hover:brightness-95 {variantClasses}"
> >
Mehr {@render inner()}
<Icon icon="mdi:arrow-right" class="size-4" aria-hidden="true" />
</a> </a>
{/if} {:else}
</div> <div class="{variantClasses}">
</div> {@render inner()}
</div>
{/if}
</div> </div>
{/if} {/if}
+4 -1
View File
@@ -9,6 +9,7 @@
loading = false, loading = false,
type = 'button' as 'button' | 'submit' | 'reset', type = 'button' as 'button' | 'submit' | 'reset',
label = '', label = '',
children,
} = $props(); } = $props();
const base = const base =
@@ -40,7 +41,9 @@
{#if loading} {#if loading}
<span class="inline-block h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent"></span> <span class="inline-block h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent"></span>
<span>Laden...</span> <span>Laden...</span>
{:else if children}
{@render children()}
{:else} {:else}
<slot>{label}</slot> {label}
{/if} {/if}
</button> </button>
+1
View File
@@ -30,6 +30,7 @@
role="tablist" role="tablist"
aria-label={labelledBy || 'Tabs'} aria-label={labelledBy || 'Tabs'}
class="flex h-12 border-b border-stein-200" class="flex h-12 border-b border-stein-200"
tabindex="0"
onkeydown={handleKeydown} onkeydown={handleKeydown}
> >
{#each tabs as tab} {#each tabs as tab}
+1 -1
View File
@@ -44,7 +44,7 @@
class="min-h-[120px] w-full resize-y rounded-lg border bg-white px-4 py-3 text-base text-stein-800 outline-none placeholder:text-stein-400 {error || invalid class="min-h-[120px] w-full resize-y rounded-lg border bg-white px-4 py-3 text-base text-stein-800 outline-none placeholder:text-stein-400 {error || invalid
? 'border-error ring-2 ring-error-subtle' ? 'border-error ring-2 ring-error-subtle'
: 'border-stein-300 hover:border-stein-400 focus:border-wald-500 focus:ring-2 focus:ring-wald-100'} disabled:bg-stein-100 disabled:opacity-60" : 'border-stein-300 hover:border-stein-400 focus:border-wald-500 focus:ring-2 focus:ring-wald-100'} disabled:bg-stein-100 disabled:opacity-60"
/> ></textarea>
{#if error} {#if error}
<p id={errorId} class="mt-1.5 text-[0.8125rem] text-error" role="alert"> <p id={errorId} class="mt-1.5 text-[0.8125rem] text-error" role="alert">
{error} {error}
+1 -1
View File
@@ -21,7 +21,7 @@
/> />
<span <span
class="absolute top-0.5 inline-block h-5 w-5 rounded-full bg-white shadow-sm transition-transform duration-200 {checked ? 'left-[22px] translate-x-0.5' : 'left-0.5'}" class="absolute top-0.5 inline-block h-5 w-5 rounded-full bg-white shadow-sm transition-transform duration-200 {checked ? 'left-[22px] translate-x-0.5' : 'left-0.5'}"
/> ></span>
</span> </span>
{#if label} {#if label}
<span class="text-base text-stein-700">{label}</span> <span class="text-base text-stein-700">{label}</span>