import { Component, input, effect, inject, ChangeDetectionStrategy } from "@angular/core";
import { LogoSoupService } from "@sanity-labs/logo-soup/angular";
import { getVisualCenterTransform } from "@sanity-labs/logo-soup";
import type { AlignmentMode, NormalizedLogo } from "@sanity-labs/logo-soup";
@Component({
selector: "logo-strip",
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [LogoSoupService],
template: `
@if (service.state().status === 'ready') {
<div style="text-align: center; text-wrap: balance;">
@for (logo of service.state().normalizedLogos; track logo.src) {
<img
[src]="logo.croppedSrc || logo.src"
[alt]="logo.alt"
[width]="logo.normalizedWidth"
[height]="logo.normalizedHeight"
[style.transform]="getTransform(logo)"
style="display: inline-block; margin: 0 14px;"
/>
}
</div>
}
`,
})
export class LogoStripComponent {
protected service = inject(LogoSoupService);
logos = input.required<(string | { src: string; alt?: string })[]>();
baseSize = input<number>(48);
scaleFactor = input<number>(0.5);
alignBy = input<AlignmentMode>("visual-center-y");
constructor() {
effect(() => {
this.service.process({
logos: this.logos(),
baseSize: this.baseSize(),
scaleFactor: this.scaleFactor(),
});
});
}
protected getTransform(logo: NormalizedLogo): string | undefined {
return getVisualCenterTransform(logo, this.alignBy());
}
}