summaryrefslogtreecommitdiff
path: root/src/components/Grid.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/Grid.svelte')
-rw-r--r--src/components/Grid.svelte37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/components/Grid.svelte b/src/components/Grid.svelte
new file mode 100644
index 0000000..df2ca74
--- /dev/null
+++ b/src/components/Grid.svelte
@@ -0,0 +1,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>