22import { type LogoKey , logos } from ' ~/data/logos' ;
33
44export interface Props {
5- size? : ` ${ number }rem ` | ` ${ number }px ` ;
5+ size? : ' large ' | ' default ' ;
66 shape? : ' circle' | ' rounded' ;
77 brand: LogoKey ;
88}
99
10- const { brand, size = ' 4rem' , shape = ' circle' } = Astro .props as Props ;
11- const { file, padding } = logos [brand ] || {};
12-
13- // Make a rough guess at the pixel size to use as width/height attributes
14- const [, value, unit] = / ^ (\d * (?:\. \d + )? )(\w + )$ / .exec (size ) || [' 4' , ' rem' ];
15- const valueAsNumber = parseFloat (value );
16- const pixelSize = unit === ' px' ? valueAsNumber : valueAsNumber * 16 ;
10+ const { brand, size = ' default' , shape = ' circle' } = Astro .props ;
11+ const { file, padding, bg } = logos [brand ] || {};
1712---
1813
1914{
2015 file && (
21- <div class : list = { [ ' logo ' , shape ] } style = { ` --logo-size: ${ size }; --logo-padding: ${ padding }; ` } >
22- < img
23- src = { ` /logos/${ file } ` }
24- alt = " "
25- loading = " lazy "
26- decoding = " async "
27- width = { pixelSize }
28- height = { pixelSize }
29- />
16+ <div
17+ class : list = { [ ' logo ' , shape ] }
18+ style = { {
19+ ' --logo-size ' : { large: ' 5rem ' , default: ' 4rem ' }[ size ],
20+ ' --logo-padding ' : padding ,
21+ ' --logo-bg ' : size === ' large ' && bg ,
22+ } }
23+ >
24+ < img src = { ` /logos/${ file } ` } alt = " " loading = " lazy " decoding = " async " width = { 64 } height = { 64 } />
3025 </div >
3126 )
3227}
@@ -39,8 +34,8 @@ const pixelSize = unit === 'px' ? valueAsNumber : valueAsNumber * 16;
3934 width: 1em;
4035 height: 1em;
4136 /* Allows logos to be visible in both light/dark. Hardcoded because variant colours adjust to theme */
42- background-color: hsl(224, 10%, 10%);
43- border: 1px solid hsl(224, 10 %, 23% );
37+ background-color: var(--logo-bg, hsl(224, 10%, 10%) );
38+ border: 1px solid hsla(0, 0 %, 100%, 0.1 );
4439 /* Indicates the brand logo boundaries for forced colors users, transparent is changed to a solid color */
4540 outline: 1px solid transparent;
4641 overflow: hidden;
0 commit comments