summaryrefslogtreecommitdiff
path: root/src/components/Grid.svelte
blob: df2ca74ab959e7d34b57a204974bc3e7e28fa262 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<script lang="ts" generics="T">
    import { getGridVars } from '@amp/web-app-components/src/components/Shelf/utils/getGridVars';
    import type { GridType } from '@amp/web-app-components/src/components/Shelf/types';

    export let items: T[] = [];
    export let gridType: GridType;

    $: style = getGridVars(gridType);
</script>

<ul {style} class="grid" data-test-id="grid">
    {#each items as item}
        <li>
            <slot {item} />
        </li>
    {/each}
</ul>

<style lang="scss">
    @mixin grid-styles-for-viewport($viewport: null) {
        grid-template-columns: repeat(var(--grid-#{$viewport}), 1fr);
        column-gap: var(--grid-column-gap-#{$viewport});
        row-gap: var(--grid-row-gap-#{$viewport});
    }

    .grid {
        display: grid;
        width: 100%;
        padding: 0 var(--bodyGutter);

        @each $viewport in ('xsmall', 'small', 'medium', 'large', 'xlarge') {
            @media (--range-#{$viewport}-only) {
                @include grid-styles-for-viewport($viewport);
            }
        }
    }
</style>