<!-- LogoSoup.svelte -->
<script>
import { createLogoSoup } from "@sanity-labs/logo-soup/svelte";
import { getVisualCenterTransform } from "@sanity-labs/logo-soup";
let {
logos = [],
baseSize = 48,
scaleFactor = 0.5,
alignBy = "visual-center-y",
gap = 28,
...rest
} = $props();
const soup = createLogoSoup();
$effect(() => {
soup.process({ logos, baseSize, scaleFactor, ...rest });
});
$effect(() => {
return () => soup.destroy();
});
const halfGap = $derived(
typeof gap === "number" ? `${gap / 2}px` : `calc(${gap} / 2)`
);
</script>
<div style="text-align: center; text-wrap: balance;">
{#each soup.normalizedLogos as logo, i (logo.src + i)}
<span
style:display="inline-block"
style:vertical-align="middle"
style:padding={halfGap}
style:opacity={soup.isLoading ? 0 : 1}
style:transition="opacity 0.2s ease-in-out"
>
<img
src={logo.croppedSrc || logo.src}
alt={logo.alt}
width={logo.normalizedWidth}
height={logo.normalizedHeight}
style:display="block"
style:object-fit="contain"
style:width="{logo.normalizedWidth}px"
style:height="{logo.normalizedHeight}px"
style:transform={getVisualCenterTransform(logo, alignBy)}
/>
</span>
{/each}
</div>