@quikturn/logos-angular 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,316 @@
1
+ import { AfterViewInit } from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
3
+ import { EnvironmentProviders } from '@angular/core';
4
+ import { FormatShorthand } from '@quikturn/logos';
5
+ import { InjectionToken } from '@angular/core';
6
+ import { InputSignal } from '@angular/core';
7
+ import { OnDestroy } from '@angular/core';
8
+ import { OnInit } from '@angular/core';
9
+ import { OutputEmitterRef } from '@angular/core';
10
+ import { PipeTransform } from '@angular/core';
11
+ import { Signal } from '@angular/core';
12
+ import { SupportedOutputFormat } from '@quikturn/logos';
13
+ import { TemplateRef } from '@angular/core';
14
+ import { ThemeOption } from '@quikturn/logos';
15
+ import { WritableSignal } from '@angular/core';
16
+
17
+ export { FormatShorthand }
18
+
19
+ /**
20
+ * Signal-based helper that builds a logo URL from reactive inputs.
21
+ * Must be called within an Angular injection context (component constructor,
22
+ * `runInInjectionContext`, etc.).
23
+ *
24
+ * Returns a computed signal containing the full logo URL string.
25
+ * The URL recomputes automatically whenever any input signal changes.
26
+ *
27
+ * @param options - Reactive getters for domain, token, baseUrl, and logo options.
28
+ * @returns A read-only `Signal<string>` with the computed logo URL.
29
+ */
30
+ export declare function injectLogoUrl(options: {
31
+ domain: () => string;
32
+ token?: () => string | undefined;
33
+ baseUrl?: () => string | undefined;
34
+ size?: () => number | undefined;
35
+ format?: () => string | undefined;
36
+ greyscale?: () => boolean | undefined;
37
+ theme?: () => string | undefined;
38
+ }): Signal<string>;
39
+
40
+ /** Returns true if the href is safe (http/https/relative). Returns false for javascript:, data:, etc. */
41
+ export declare function isValidHref(href: string): boolean;
42
+
43
+ /** Per-logo configuration in carousel/grid components. */
44
+ export declare interface LogoConfig extends LogoOptions {
45
+ domain: string;
46
+ href?: string;
47
+ alt?: string;
48
+ }
49
+
50
+ /** Options that control logo image generation. */
51
+ export declare interface LogoOptions {
52
+ size?: number;
53
+ format?: SupportedOutputFormat | FormatShorthand;
54
+ greyscale?: boolean;
55
+ theme?: ThemeOption;
56
+ }
57
+
58
+ /** Pipe that transforms a domain string into a Quikturn logo URL. */
59
+ export declare class LogoUrlPipe implements PipeTransform {
60
+ private readonly config;
61
+ transform(domain: string, options?: LogoOptions & {
62
+ token?: string;
63
+ baseUrl?: string;
64
+ }): string;
65
+ }
66
+
67
+ /** Provides Quikturn configuration to the Angular DI system. */
68
+ export declare function provideQuikturnLogos(config: QuikturnConfig): EnvironmentProviders;
69
+
70
+ /** Injection token for the Quikturn configuration. */
71
+ export declare const QUIKTURN_CONFIG: InjectionToken<QuikturnConfig>;
72
+
73
+ /** Configuration for provideQuikturnLogos(). */
74
+ export declare interface QuikturnConfig {
75
+ token: string;
76
+ baseUrl?: string;
77
+ }
78
+
79
+ /**
80
+ * Standalone component that renders an auto-scrolling carousel of Quikturn logos.
81
+ *
82
+ * Supports both `domains` (string[]) and `logos` (LogoConfig[]) inputs.
83
+ * Creates multiple `<ul>` copies for seamless infinite scroll animation.
84
+ * Fires an attribution beacon on initialization.
85
+ */
86
+ export declare class QuikturnLogoCarouselComponent implements OnInit, AfterViewInit, OnDestroy {
87
+ private readonly config;
88
+ /** Array of domain strings to display logos for. */
89
+ domains: InputSignal<string[] | undefined>;
90
+ /** Array of LogoConfig objects for more control over each logo. */
91
+ logos: InputSignal<LogoConfig[] | undefined>;
92
+ /** Publishable token for the Quikturn API. Overrides provider token. */
93
+ token: InputSignal<string | undefined>;
94
+ /** Custom base URL for the logo API. */
95
+ baseUrl: InputSignal<string | undefined>;
96
+ /** Scroll speed in pixels per second. */
97
+ speed: InputSignal<number>;
98
+ /** Scroll direction. */
99
+ direction: InputSignal<"left" | "right" | "up" | "down">;
100
+ /** Whether to pause scrolling on hover. */
101
+ pauseOnHover: InputSignal<boolean | undefined>;
102
+ /** Speed when hovered (0 = pause). */
103
+ hoverSpeed: InputSignal<number | undefined>;
104
+ /** Height of each logo image in pixels. */
105
+ logoHeight: InputSignal<number>;
106
+ /** Gap between logos in pixels. */
107
+ gap: InputSignal<number>;
108
+ /** Width of the carousel container. */
109
+ width: InputSignal<string | number>;
110
+ /** Whether to show fade overlays at the edges. */
111
+ fadeOut: InputSignal<boolean>;
112
+ /** Color for the fade gradient. */
113
+ fadeOutColor: InputSignal<string>;
114
+ /** Whether to scale logos on hover. */
115
+ scaleOnHover: InputSignal<boolean>;
116
+ /** Default logo size option. */
117
+ logoSize: InputSignal<number | undefined>;
118
+ /** Default logo format option. */
119
+ logoFormat: InputSignal<string | undefined>;
120
+ /** Default greyscale option. */
121
+ logoGreyscale: InputSignal<boolean | undefined>;
122
+ /** Default theme option. */
123
+ logoTheme: InputSignal<string | undefined>;
124
+ /** CSS class to apply to the root element. */
125
+ cssClass: InputSignal<string | undefined>;
126
+ /** Accessible label for the carousel region. */
127
+ ariaLabel: InputSignal<string>;
128
+ containerRef: ElementRef<HTMLDivElement>;
129
+ trackRef: ElementRef<HTMLDivElement>;
130
+ protected seqWidth: WritableSignal<number>;
131
+ protected seqHeight: WritableSignal<number>;
132
+ protected copyCount: WritableSignal<number>;
133
+ protected isHovered: WritableSignal<boolean>;
134
+ private animationFrameId;
135
+ private currentVelocity;
136
+ private offset;
137
+ private resizeObserver;
138
+ private handleResize;
139
+ /** Effective token: prop > provider > empty. */
140
+ protected effectiveToken: Signal<string>;
141
+ /** Effective base URL: prop > provider > undefined. */
142
+ protected effectiveBaseUrl: Signal<string | undefined>;
143
+ /** Whether the carousel scrolls vertically. */
144
+ protected isVertical: Signal<boolean>;
145
+ /** Resolve domains/logos into ResolvedLogo objects with built URLs. */
146
+ protected resolvedLogos: Signal<ResolvedLogo[]>;
147
+ /** CSS width string for the container. */
148
+ protected cssWidth: Signal<string>;
149
+ /** Array of copy indices for the template loop. */
150
+ protected copyIndices: Signal<number[]>;
151
+ /** Target velocity for the animation. */
152
+ protected targetVelocity: Signal<number>;
153
+ /** Effective hover speed. */
154
+ protected effectiveHoverSpeed: Signal<number | undefined>;
155
+ ngOnInit(): void;
156
+ ngAfterViewInit(): void;
157
+ ngOnDestroy(): void;
158
+ handleMouseEnter(): void;
159
+ handleMouseLeave(): void;
160
+ private updateDimensions;
161
+ private trackImageLoads;
162
+ private startAnimation;
163
+ private stopAnimation;
164
+ }
165
+
166
+ /** Public input interface for the QuikturnLogoCarouselComponent. */
167
+ export declare interface QuikturnLogoCarouselInputs {
168
+ domains?: string[];
169
+ logos?: LogoConfig[];
170
+ token?: string;
171
+ baseUrl?: string;
172
+ speed?: number;
173
+ direction?: "left" | "right" | "up" | "down";
174
+ pauseOnHover?: boolean;
175
+ hoverSpeed?: number;
176
+ logoHeight?: number;
177
+ gap?: number;
178
+ width?: number | string;
179
+ fadeOut?: boolean;
180
+ fadeOutColor?: string;
181
+ scaleOnHover?: boolean;
182
+ logoSize?: number;
183
+ logoFormat?: string;
184
+ logoGreyscale?: boolean;
185
+ logoTheme?: string;
186
+ class?: string;
187
+ ariaLabel?: string;
188
+ }
189
+
190
+ /** Standalone component that renders a single Quikturn logo image. */
191
+ export declare class QuikturnLogoComponent implements OnInit {
192
+ private readonly config;
193
+ /** The domain to fetch a logo for (e.g. "github.com"). Required. */
194
+ domain: InputSignal<string>;
195
+ /** Override the token from the config provider. */
196
+ token: InputSignal<string | undefined>;
197
+ /** Override the baseUrl from the config provider. */
198
+ baseUrl: InputSignal<string | undefined>;
199
+ /** Logo width in pixels. */
200
+ size: InputSignal<number | undefined>;
201
+ /** Output format (e.g. "png", "webp", "jpeg", "avif"). */
202
+ format: InputSignal<string | undefined>;
203
+ /** Whether to render the logo in greyscale. */
204
+ greyscale: InputSignal<boolean | undefined>;
205
+ /** Theme option ("light" or "dark"). */
206
+ theme: InputSignal<string | undefined>;
207
+ /** Custom alt text for the image. Defaults to "${domain} logo". */
208
+ alt: InputSignal<string | undefined>;
209
+ /** If provided, wraps the image in an anchor tag linking to this URL. */
210
+ href: InputSignal<string | undefined>;
211
+ /** CSS class applied to a wrapper element (span or anchor). */
212
+ cssClass: InputSignal<string | undefined>;
213
+ /** Image loading strategy. Defaults to "lazy". */
214
+ loading: InputSignal<"lazy" | "eager">;
215
+ /** Emitted when the logo image fails to load. */
216
+ imgError: OutputEmitterRef<Event>;
217
+ /** Emitted when the logo image loads successfully. */
218
+ imgLoad: OutputEmitterRef<Event>;
219
+ /** Effective token: input override takes precedence over config. */
220
+ protected readonly effectiveToken: Signal<string>;
221
+ /** Effective base URL: input override takes precedence over config. */
222
+ protected readonly effectiveBaseUrl: Signal<string | undefined>;
223
+ /** Validated href: only http/https URLs are allowed. */
224
+ protected readonly safeHref: Signal<string | undefined>;
225
+ /** Fully-qualified logo URL built from domain and options. */
226
+ protected readonly src: Signal<string>;
227
+ /** Alt text: custom override or default "${domain} logo". */
228
+ protected readonly altText: Signal<string>;
229
+ ngOnInit(): void;
230
+ }
231
+
232
+ /** Standalone component that renders a grid of Quikturn logos. */
233
+ export declare class QuikturnLogoGridComponent implements OnInit {
234
+ private readonly config;
235
+ /** Array of domain strings to render logos for. */
236
+ domains: InputSignal<string[] | undefined>;
237
+ /** Array of LogoConfig objects for per-logo customization. */
238
+ logos: InputSignal<LogoConfig[] | undefined>;
239
+ /** Override the token from the config provider. */
240
+ token: InputSignal<string | undefined>;
241
+ /** Override the baseUrl from the config provider. */
242
+ baseUrl: InputSignal<string | undefined>;
243
+ /** Number of grid columns. Defaults to 4. */
244
+ columns: InputSignal<number>;
245
+ /** Gap between grid items in pixels. Defaults to 24. */
246
+ gap: InputSignal<number>;
247
+ /** Default logo size applied to all logos. */
248
+ logoSize: InputSignal<number | undefined>;
249
+ /** Default logo format applied to all logos. */
250
+ logoFormat: InputSignal<string | undefined>;
251
+ /** Default greyscale setting applied to all logos. */
252
+ logoGreyscale: InputSignal<boolean | undefined>;
253
+ /** Default theme applied to all logos. */
254
+ logoTheme: InputSignal<string | undefined>;
255
+ /** CSS class applied to the grid container. */
256
+ cssClass: InputSignal<string | undefined>;
257
+ /** Accessible label for the grid region. Defaults to "Company logos". */
258
+ ariaLabel: InputSignal<string>;
259
+ /** Optional custom template for rendering each logo item. */
260
+ customTemplate: Signal<TemplateRef<{
261
+ $implicit: ResolvedLogo;
262
+ index: number;
263
+ }> | undefined>;
264
+ /** Effective token: input override takes precedence over config. */
265
+ protected readonly effectiveToken: Signal<string>;
266
+ /** Effective base URL: input override takes precedence over config. */
267
+ protected readonly effectiveBaseUrl: Signal<string | undefined>;
268
+ /** Resolved logos with pre-built URLs from either domains[] or logos[] input. */
269
+ protected readonly resolvedLogos: Signal<ResolvedLogo[]>;
270
+ ngOnInit(): void;
271
+ }
272
+
273
+ /** Public input interface for the QuikturnLogoGridComponent. */
274
+ export declare interface QuikturnLogoGridInputs {
275
+ domains?: string[];
276
+ logos?: LogoConfig[];
277
+ token?: string;
278
+ baseUrl?: string;
279
+ columns?: number;
280
+ gap?: number;
281
+ logoSize?: number;
282
+ logoFormat?: string;
283
+ logoGreyscale?: boolean;
284
+ logoTheme?: string;
285
+ class?: string;
286
+ ariaLabel?: string;
287
+ }
288
+
289
+ /** Public input interface for the QuikturnLogoComponent. */
290
+ export declare interface QuikturnLogoInputs {
291
+ domain: string;
292
+ token?: string;
293
+ baseUrl?: string;
294
+ size?: number;
295
+ format?: string;
296
+ greyscale?: boolean;
297
+ theme?: string;
298
+ alt?: string;
299
+ href?: string;
300
+ class?: string;
301
+ loading?: "lazy" | "eager";
302
+ }
303
+
304
+ /** Internal resolved logo with pre-built URL. */
305
+ export declare interface ResolvedLogo {
306
+ domain: string;
307
+ url: string;
308
+ alt: string;
309
+ href?: string;
310
+ }
311
+
312
+ export { SupportedOutputFormat }
313
+
314
+ export { ThemeOption }
315
+
316
+ export { }
@@ -0,0 +1,316 @@
1
+ import { AfterViewInit } from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
3
+ import { EnvironmentProviders } from '@angular/core';
4
+ import { FormatShorthand } from '@quikturn/logos';
5
+ import { InjectionToken } from '@angular/core';
6
+ import { InputSignal } from '@angular/core';
7
+ import { OnDestroy } from '@angular/core';
8
+ import { OnInit } from '@angular/core';
9
+ import { OutputEmitterRef } from '@angular/core';
10
+ import { PipeTransform } from '@angular/core';
11
+ import { Signal } from '@angular/core';
12
+ import { SupportedOutputFormat } from '@quikturn/logos';
13
+ import { TemplateRef } from '@angular/core';
14
+ import { ThemeOption } from '@quikturn/logos';
15
+ import { WritableSignal } from '@angular/core';
16
+
17
+ export { FormatShorthand }
18
+
19
+ /**
20
+ * Signal-based helper that builds a logo URL from reactive inputs.
21
+ * Must be called within an Angular injection context (component constructor,
22
+ * `runInInjectionContext`, etc.).
23
+ *
24
+ * Returns a computed signal containing the full logo URL string.
25
+ * The URL recomputes automatically whenever any input signal changes.
26
+ *
27
+ * @param options - Reactive getters for domain, token, baseUrl, and logo options.
28
+ * @returns A read-only `Signal<string>` with the computed logo URL.
29
+ */
30
+ export declare function injectLogoUrl(options: {
31
+ domain: () => string;
32
+ token?: () => string | undefined;
33
+ baseUrl?: () => string | undefined;
34
+ size?: () => number | undefined;
35
+ format?: () => string | undefined;
36
+ greyscale?: () => boolean | undefined;
37
+ theme?: () => string | undefined;
38
+ }): Signal<string>;
39
+
40
+ /** Returns true if the href is safe (http/https/relative). Returns false for javascript:, data:, etc. */
41
+ export declare function isValidHref(href: string): boolean;
42
+
43
+ /** Per-logo configuration in carousel/grid components. */
44
+ export declare interface LogoConfig extends LogoOptions {
45
+ domain: string;
46
+ href?: string;
47
+ alt?: string;
48
+ }
49
+
50
+ /** Options that control logo image generation. */
51
+ export declare interface LogoOptions {
52
+ size?: number;
53
+ format?: SupportedOutputFormat | FormatShorthand;
54
+ greyscale?: boolean;
55
+ theme?: ThemeOption;
56
+ }
57
+
58
+ /** Pipe that transforms a domain string into a Quikturn logo URL. */
59
+ export declare class LogoUrlPipe implements PipeTransform {
60
+ private readonly config;
61
+ transform(domain: string, options?: LogoOptions & {
62
+ token?: string;
63
+ baseUrl?: string;
64
+ }): string;
65
+ }
66
+
67
+ /** Provides Quikturn configuration to the Angular DI system. */
68
+ export declare function provideQuikturnLogos(config: QuikturnConfig): EnvironmentProviders;
69
+
70
+ /** Injection token for the Quikturn configuration. */
71
+ export declare const QUIKTURN_CONFIG: InjectionToken<QuikturnConfig>;
72
+
73
+ /** Configuration for provideQuikturnLogos(). */
74
+ export declare interface QuikturnConfig {
75
+ token: string;
76
+ baseUrl?: string;
77
+ }
78
+
79
+ /**
80
+ * Standalone component that renders an auto-scrolling carousel of Quikturn logos.
81
+ *
82
+ * Supports both `domains` (string[]) and `logos` (LogoConfig[]) inputs.
83
+ * Creates multiple `<ul>` copies for seamless infinite scroll animation.
84
+ * Fires an attribution beacon on initialization.
85
+ */
86
+ export declare class QuikturnLogoCarouselComponent implements OnInit, AfterViewInit, OnDestroy {
87
+ private readonly config;
88
+ /** Array of domain strings to display logos for. */
89
+ domains: InputSignal<string[] | undefined>;
90
+ /** Array of LogoConfig objects for more control over each logo. */
91
+ logos: InputSignal<LogoConfig[] | undefined>;
92
+ /** Publishable token for the Quikturn API. Overrides provider token. */
93
+ token: InputSignal<string | undefined>;
94
+ /** Custom base URL for the logo API. */
95
+ baseUrl: InputSignal<string | undefined>;
96
+ /** Scroll speed in pixels per second. */
97
+ speed: InputSignal<number>;
98
+ /** Scroll direction. */
99
+ direction: InputSignal<"left" | "right" | "up" | "down">;
100
+ /** Whether to pause scrolling on hover. */
101
+ pauseOnHover: InputSignal<boolean | undefined>;
102
+ /** Speed when hovered (0 = pause). */
103
+ hoverSpeed: InputSignal<number | undefined>;
104
+ /** Height of each logo image in pixels. */
105
+ logoHeight: InputSignal<number>;
106
+ /** Gap between logos in pixels. */
107
+ gap: InputSignal<number>;
108
+ /** Width of the carousel container. */
109
+ width: InputSignal<string | number>;
110
+ /** Whether to show fade overlays at the edges. */
111
+ fadeOut: InputSignal<boolean>;
112
+ /** Color for the fade gradient. */
113
+ fadeOutColor: InputSignal<string>;
114
+ /** Whether to scale logos on hover. */
115
+ scaleOnHover: InputSignal<boolean>;
116
+ /** Default logo size option. */
117
+ logoSize: InputSignal<number | undefined>;
118
+ /** Default logo format option. */
119
+ logoFormat: InputSignal<string | undefined>;
120
+ /** Default greyscale option. */
121
+ logoGreyscale: InputSignal<boolean | undefined>;
122
+ /** Default theme option. */
123
+ logoTheme: InputSignal<string | undefined>;
124
+ /** CSS class to apply to the root element. */
125
+ cssClass: InputSignal<string | undefined>;
126
+ /** Accessible label for the carousel region. */
127
+ ariaLabel: InputSignal<string>;
128
+ containerRef: ElementRef<HTMLDivElement>;
129
+ trackRef: ElementRef<HTMLDivElement>;
130
+ protected seqWidth: WritableSignal<number>;
131
+ protected seqHeight: WritableSignal<number>;
132
+ protected copyCount: WritableSignal<number>;
133
+ protected isHovered: WritableSignal<boolean>;
134
+ private animationFrameId;
135
+ private currentVelocity;
136
+ private offset;
137
+ private resizeObserver;
138
+ private handleResize;
139
+ /** Effective token: prop > provider > empty. */
140
+ protected effectiveToken: Signal<string>;
141
+ /** Effective base URL: prop > provider > undefined. */
142
+ protected effectiveBaseUrl: Signal<string | undefined>;
143
+ /** Whether the carousel scrolls vertically. */
144
+ protected isVertical: Signal<boolean>;
145
+ /** Resolve domains/logos into ResolvedLogo objects with built URLs. */
146
+ protected resolvedLogos: Signal<ResolvedLogo[]>;
147
+ /** CSS width string for the container. */
148
+ protected cssWidth: Signal<string>;
149
+ /** Array of copy indices for the template loop. */
150
+ protected copyIndices: Signal<number[]>;
151
+ /** Target velocity for the animation. */
152
+ protected targetVelocity: Signal<number>;
153
+ /** Effective hover speed. */
154
+ protected effectiveHoverSpeed: Signal<number | undefined>;
155
+ ngOnInit(): void;
156
+ ngAfterViewInit(): void;
157
+ ngOnDestroy(): void;
158
+ handleMouseEnter(): void;
159
+ handleMouseLeave(): void;
160
+ private updateDimensions;
161
+ private trackImageLoads;
162
+ private startAnimation;
163
+ private stopAnimation;
164
+ }
165
+
166
+ /** Public input interface for the QuikturnLogoCarouselComponent. */
167
+ export declare interface QuikturnLogoCarouselInputs {
168
+ domains?: string[];
169
+ logos?: LogoConfig[];
170
+ token?: string;
171
+ baseUrl?: string;
172
+ speed?: number;
173
+ direction?: "left" | "right" | "up" | "down";
174
+ pauseOnHover?: boolean;
175
+ hoverSpeed?: number;
176
+ logoHeight?: number;
177
+ gap?: number;
178
+ width?: number | string;
179
+ fadeOut?: boolean;
180
+ fadeOutColor?: string;
181
+ scaleOnHover?: boolean;
182
+ logoSize?: number;
183
+ logoFormat?: string;
184
+ logoGreyscale?: boolean;
185
+ logoTheme?: string;
186
+ class?: string;
187
+ ariaLabel?: string;
188
+ }
189
+
190
+ /** Standalone component that renders a single Quikturn logo image. */
191
+ export declare class QuikturnLogoComponent implements OnInit {
192
+ private readonly config;
193
+ /** The domain to fetch a logo for (e.g. "github.com"). Required. */
194
+ domain: InputSignal<string>;
195
+ /** Override the token from the config provider. */
196
+ token: InputSignal<string | undefined>;
197
+ /** Override the baseUrl from the config provider. */
198
+ baseUrl: InputSignal<string | undefined>;
199
+ /** Logo width in pixels. */
200
+ size: InputSignal<number | undefined>;
201
+ /** Output format (e.g. "png", "webp", "jpeg", "avif"). */
202
+ format: InputSignal<string | undefined>;
203
+ /** Whether to render the logo in greyscale. */
204
+ greyscale: InputSignal<boolean | undefined>;
205
+ /** Theme option ("light" or "dark"). */
206
+ theme: InputSignal<string | undefined>;
207
+ /** Custom alt text for the image. Defaults to "${domain} logo". */
208
+ alt: InputSignal<string | undefined>;
209
+ /** If provided, wraps the image in an anchor tag linking to this URL. */
210
+ href: InputSignal<string | undefined>;
211
+ /** CSS class applied to a wrapper element (span or anchor). */
212
+ cssClass: InputSignal<string | undefined>;
213
+ /** Image loading strategy. Defaults to "lazy". */
214
+ loading: InputSignal<"lazy" | "eager">;
215
+ /** Emitted when the logo image fails to load. */
216
+ imgError: OutputEmitterRef<Event>;
217
+ /** Emitted when the logo image loads successfully. */
218
+ imgLoad: OutputEmitterRef<Event>;
219
+ /** Effective token: input override takes precedence over config. */
220
+ protected readonly effectiveToken: Signal<string>;
221
+ /** Effective base URL: input override takes precedence over config. */
222
+ protected readonly effectiveBaseUrl: Signal<string | undefined>;
223
+ /** Validated href: only http/https URLs are allowed. */
224
+ protected readonly safeHref: Signal<string | undefined>;
225
+ /** Fully-qualified logo URL built from domain and options. */
226
+ protected readonly src: Signal<string>;
227
+ /** Alt text: custom override or default "${domain} logo". */
228
+ protected readonly altText: Signal<string>;
229
+ ngOnInit(): void;
230
+ }
231
+
232
+ /** Standalone component that renders a grid of Quikturn logos. */
233
+ export declare class QuikturnLogoGridComponent implements OnInit {
234
+ private readonly config;
235
+ /** Array of domain strings to render logos for. */
236
+ domains: InputSignal<string[] | undefined>;
237
+ /** Array of LogoConfig objects for per-logo customization. */
238
+ logos: InputSignal<LogoConfig[] | undefined>;
239
+ /** Override the token from the config provider. */
240
+ token: InputSignal<string | undefined>;
241
+ /** Override the baseUrl from the config provider. */
242
+ baseUrl: InputSignal<string | undefined>;
243
+ /** Number of grid columns. Defaults to 4. */
244
+ columns: InputSignal<number>;
245
+ /** Gap between grid items in pixels. Defaults to 24. */
246
+ gap: InputSignal<number>;
247
+ /** Default logo size applied to all logos. */
248
+ logoSize: InputSignal<number | undefined>;
249
+ /** Default logo format applied to all logos. */
250
+ logoFormat: InputSignal<string | undefined>;
251
+ /** Default greyscale setting applied to all logos. */
252
+ logoGreyscale: InputSignal<boolean | undefined>;
253
+ /** Default theme applied to all logos. */
254
+ logoTheme: InputSignal<string | undefined>;
255
+ /** CSS class applied to the grid container. */
256
+ cssClass: InputSignal<string | undefined>;
257
+ /** Accessible label for the grid region. Defaults to "Company logos". */
258
+ ariaLabel: InputSignal<string>;
259
+ /** Optional custom template for rendering each logo item. */
260
+ customTemplate: Signal<TemplateRef<{
261
+ $implicit: ResolvedLogo;
262
+ index: number;
263
+ }> | undefined>;
264
+ /** Effective token: input override takes precedence over config. */
265
+ protected readonly effectiveToken: Signal<string>;
266
+ /** Effective base URL: input override takes precedence over config. */
267
+ protected readonly effectiveBaseUrl: Signal<string | undefined>;
268
+ /** Resolved logos with pre-built URLs from either domains[] or logos[] input. */
269
+ protected readonly resolvedLogos: Signal<ResolvedLogo[]>;
270
+ ngOnInit(): void;
271
+ }
272
+
273
+ /** Public input interface for the QuikturnLogoGridComponent. */
274
+ export declare interface QuikturnLogoGridInputs {
275
+ domains?: string[];
276
+ logos?: LogoConfig[];
277
+ token?: string;
278
+ baseUrl?: string;
279
+ columns?: number;
280
+ gap?: number;
281
+ logoSize?: number;
282
+ logoFormat?: string;
283
+ logoGreyscale?: boolean;
284
+ logoTheme?: string;
285
+ class?: string;
286
+ ariaLabel?: string;
287
+ }
288
+
289
+ /** Public input interface for the QuikturnLogoComponent. */
290
+ export declare interface QuikturnLogoInputs {
291
+ domain: string;
292
+ token?: string;
293
+ baseUrl?: string;
294
+ size?: number;
295
+ format?: string;
296
+ greyscale?: boolean;
297
+ theme?: string;
298
+ alt?: string;
299
+ href?: string;
300
+ class?: string;
301
+ loading?: "lazy" | "eager";
302
+ }
303
+
304
+ /** Internal resolved logo with pre-built URL. */
305
+ export declare interface ResolvedLogo {
306
+ domain: string;
307
+ url: string;
308
+ alt: string;
309
+ href?: string;
310
+ }
311
+
312
+ export { SupportedOutputFormat }
313
+
314
+ export { ThemeOption }
315
+
316
+ export { }