-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDefault.astro
110 lines (105 loc) · 2.86 KB
/
Default.astro
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
---
import type { DefaultLayoutQuery, SiteLocale, Tag } from '@lib/datocms/types';
import { datocmsRequest } from '@lib/datocms';
import { defaultLocale } from '@lib/i18n';
import { datocmsNoIndex } from '@lib/search';
import type { PageUrl } from '@lib/seo';
import query from './default.query.graphql';
import Breadcrumbs from '@components/Breadcrumbs/Breadcrumbs.astro';
import type { Breadcrumb } from '@components/Breadcrumbs';
import IconSprite from '@components/Icon/IconSprite.astro';
import PreviewModeProvider from '@components/PreviewMode/PreviewModeProvider.astro';
import StructuredData from '@components/StructuredData/StructuredData.astro';
import SkipLink from '@components/SkipLink/SkipLink.astro';
import AppHeader from './AppHeader/AppHeader.astro';
import PerfHead from './PerfHead/PerfHead.astro';
import SeoHead from './SeoHead/SeoHead.astro';
import { fontFamilyArchivo } from '@assets/fonts';
import '@assets/a11y.css';
interface Props {
breadcrumbs?: Breadcrumb[];
pageUrls: PageUrl[];
seoMetaTags: Tag[];
}
const { locale = defaultLocale } = Astro.params as { locale?: SiteLocale };
const data = await datocmsRequest<DefaultLayoutQuery>({
query,
variables: { locale },
});
const { breadcrumbs = [], pageUrls, seoMetaTags } = Astro.props;
const mainContentId = 'content';
const menuItems = data.app?.menuItems ?? [];
---
<!doctype html>
<html lang={locale}>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<PerfHead />
<SeoHead
pageUrls={pageUrls}
tags={[...data.seo.faviconMetaTags, ...seoMetaTags]}
/>
<StructuredData />
</head>
<body>
<PreviewModeProvider>
<SkipLink targetId={mainContentId} />
<div {...datocmsNoIndex}>
<AppHeader {menuItems} {pageUrls} />
</div>
{breadcrumbs.length > 0 && <Breadcrumbs items={breadcrumbs} />}
{
/* main element requires tabindex to be focusable, see SkipLink/README.md */
}
<main id={mainContentId} tabindex="-1">
<slot />
</main>
<footer {...datocmsNoIndex}>
<p>Footer</p>
</footer>
</PreviewModeProvider>
<IconSprite />
</body>
</html>
<style is:global define:vars={{ fontFamilyArchivo }}>
/* very basic reset */
*,
*::before,
*::after {
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
font-family: var(--fontFamilyArchivo);
}
figure {
margin: 0;
}
</style>
<style>
/* Sticky footer. @see https://css-tricks.com/a-clever-sticky-footer-technique/ */
html,
body {
height: 100%;
}
footer {
position: sticky;
top: 100vh;
}
/* Basic layout: header, main, footer */
main {
margin: auto;
padding: 1rem;
width: 800px;
max-width: calc(100% - 2rem);
font-size: 20px;
line-height: 1.6;
}
footer {
padding: 1rem;
border-top: 2px solid black;
}
</style>