-
-
Notifications
You must be signed in to change notification settings - Fork 76
Expand file tree
/
Copy path+layout.svelte
More file actions
146 lines (128 loc) · 3.71 KB
/
Copy path+layout.svelte
File metadata and controls
146 lines (128 loc) · 3.71 KB
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<script lang="ts">
import { page } from '$app/stores'
import Banner from '$lib/components/Banner.svelte'
import Hero from '$lib/components/Hero.svelte'
import NearbyEvent from '$lib/components/NearbyEvent.svelte'
import Toc from '$lib/components/Toc.svelte'
import ExternalLink from '$lib/components/custom/a.svelte'
import { deLocalizeHref } from '$lib/paraglide/runtime'
import '@fontsource/roboto-slab/400.css'
import '@fontsource/roboto-slab/500.css'
import '@fontsource/roboto-slab/700.css'
import '@fontsource/saira-condensed/700.css'
import { ProgressBar } from '@prgm/sveltekit-progress-bar'
import { Toaster } from 'svelte-french-toast'
import '../styles/print.css'
import '../styles/styles.css'
import Footer from './footer.svelte'
import Header from './header.svelte'
import PageTransition from './transition.svelte'
import type { GeoApiResponse } from '$api/geo/+server'
export let data
// We use $page store instead of data prop for more reliable navigation
// This prevents "undefined" issues during navigation
let eventFound: boolean
let geo: GeoApiResponse | null
// Show the hero on the homepage, but nowhere else
$: hero = deLocalizeHref($page.url.pathname) === '/'
</script>
<h2 style="width: 0; height: 0; margin: 0; padding: 0; visibility: hidden;" data-pagefind-ignore>
(Top)
</h2>
{#if data.localeAlert}
<Banner
contrast={data.localeAlert.isDev}
id={data.localeAlert.isDev ? undefined : 'locale-switch'}
>
<!-- eslint-disable-next-line svelte/no-at-html-tags not vulnerable against XSS -->
{@html data.localeAlert.message}
</Banner>
{/if}
<NearbyEvent contrast={hero} bind:eventFound bind:geo />
{#if !eventFound}
{#if geo?.country?.code === 'US' && false}
<Banner>
<b
>ONE MORE REPUBLICAN NEEDED TO PROTECT STATE SOVEREIGNTY ON AI REGULATION | <ExternalLink
href="https://x.com/pauseaius/status/1939144759354003594">ACT NOW »</ExternalLink
></b
>
</Banner>
{:else}
<Banner contrast={hero} hidden={true}>
Join us at <ExternalLink href="https://pausecon.org/">PauseCon London</ExternalLink> from June
27th to 30th!
</Banner>
{/if}
{/if}
<div class="layout" class:with-hero={hero}>
{#if hero}
<Hero />
{/if}
<Header inverted={hero} moveUp={hero} />
<main>
<PageTransition url={$page.url.pathname}>
<slot />
</PageTransition>
</main>
<Footer />
</div>
<Toaster
toastOptions={{
style: 'background-color: var(--bg-subtle); color: var(--text)',
iconTheme: {
primary: 'var(--brand)',
secondary: 'white'
}
}}
/>
{#if !['/', '/outcomes', '/pdoom', '/quotes'].includes(deLocalizeHref($page.url.pathname))}
<Toc />
{/if}
<ProgressBar color="var(--brand)" />
<style>
/* @import url('$lib/reset.css');
@import url('$lib/theme.css'); */
/* .wrapper {
color: var(--t-text);
max-width: 50rem;
margin: auto;
} */
.layout {
height: 100%;
position: relative;
max-inline-size: var(--page-width);
display: grid;
grid-template-rows: auto 1fr auto;
grid-auto-columns: 100%;
margin-inline: auto;
--padding-big: 3rem;
--padding-small: 1rem;
padding: 0 var(--padding-big) 0 var(--padding-big);
}
/* Media query not strictily necessary */
@media (max-width: 750px) {
.layout {
--transition-padding-from: 750px;
--transition-padding-until: calc(
var(--transition-padding-from) - 2 * (var(--padding-big) - var(--padding-small))
);
--padding-left-right: clamp(
var(--padding-small),
calc(var(--padding-small) + (100vw - var(--transition-padding-until)) / 2),
var(--padding-big)
);
padding-left: var(--padding-left-right);
padding-right: var(--padding-left-right);
}
}
main {
padding-block: 1rem;
margin-bottom: 5rem;
}
/* @media (min-width: --page-width) {
.layout {
padding: 0;
}
} */
</style>