tecitheme 0.0.17 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/components/CTA.svelte +18 -20
- package/components/Card.svelte +46 -27
- package/components/Footer.svelte +1 -1
- package/components/Header.svelte +1044 -534
- package/components/HeadingCentered.svelte +24 -19
- package/components/HeadingCentered.svelte.d.ts +2 -10
- package/components/Icon.svelte +56 -0
- package/components/MediaFeature.svelte +6 -4
- package/components/MetaSocial.svelte +28 -0
- package/components/MetaSocial.svelte.d.ts +29 -0
- package/components/NewsGrid.svelte +108 -19
- package/components/SidebarContent.svelte +4 -2
- package/components/ThreeColumn.svelte +4 -4
- package/components/TrialForm.svelte +2 -2
- package/components/Wrap.svelte +12 -0
- package/components/Wrap.svelte.d.ts +31 -0
- package/layouts/blocks.svelte +15 -2
- package/layouts/blocks.svelte.d.ts +4 -2
- package/package.json +24 -24
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
//Based on: https://tailwindui.com/components/marketing/sections/header#component-2c3b25e7b9e4490edd7b6950692c0a11
|
|
3
|
-
|
|
4
|
-
export let data
|
|
5
|
-
toptext: 'Small Top Text ',
|
|
6
|
-
title: 'Big Title Text',
|
|
7
|
-
subtitle: 'Subtitle Text - Fairly long to see where the text wraps for this element, because who knows where things will end up.'
|
|
8
|
-
};
|
|
3
|
+
import Icon from "./Icon.svelte";
|
|
4
|
+
export let data;
|
|
9
5
|
</script>
|
|
10
6
|
|
|
11
7
|
<!-- This example requires Tailwind CSS v2.0+ -->
|
|
12
|
-
<
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
</h2>
|
|
17
|
-
{/if}
|
|
18
|
-
<p class="mt-1 text-4xl font-bold text-gray-900 sm:text-5xl sm:tracking-tight lg:text-6xl">
|
|
19
|
-
{data.title}
|
|
20
|
-
</p>
|
|
21
|
-
{#if data.subtitle}
|
|
22
|
-
<p class="max-w-4xl mt-5 mx-auto text-xl text-gray-500">
|
|
23
|
-
{data.subtitle}
|
|
8
|
+
<section class="w-full text-center">
|
|
9
|
+
{#if data.toptext}
|
|
10
|
+
<p class="text-base font-semibold text-teci-blue-dark uppercase">
|
|
11
|
+
{data.toptext}
|
|
24
12
|
</p>
|
|
13
|
+
{/if}
|
|
14
|
+
{#if (data.title || data.logo)}
|
|
15
|
+
{#if data.logo}
|
|
16
|
+
<div class="grid place-items-center">
|
|
17
|
+
<h1 class="sr-only">{data.title}</h1>
|
|
18
|
+
<Icon classes={data.classes} icon={data.logo} />
|
|
19
|
+
</div>
|
|
20
|
+
{:else}
|
|
21
|
+
<h1 class="mt-1 text-4xl font-bold text-gray-900 sm:text-5xl sm:tracking-tight lg:text-6xl">
|
|
22
|
+
{data.title}
|
|
23
|
+
</h1>
|
|
25
24
|
{/if}
|
|
26
|
-
|
|
25
|
+
{/if}
|
|
26
|
+
{#if data.subtitle}
|
|
27
|
+
<p class="max-w-4xl mt-5 mx-auto text-xl text-gray-500">
|
|
28
|
+
{data.subtitle}
|
|
29
|
+
</p>
|
|
30
|
+
{/if}
|
|
31
|
+
</section>
|
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
/** @typedef {typeof __propDef.events} HeadingCenteredEvents */
|
|
3
3
|
/** @typedef {typeof __propDef.slots} HeadingCenteredSlots */
|
|
4
4
|
export default class HeadingCentered extends SvelteComponentTyped<{
|
|
5
|
-
data
|
|
6
|
-
toptext: string;
|
|
7
|
-
title: string;
|
|
8
|
-
subtitle: string;
|
|
9
|
-
};
|
|
5
|
+
data: any;
|
|
10
6
|
}, {
|
|
11
7
|
[evt: string]: CustomEvent<any>;
|
|
12
8
|
}, {}> {
|
|
@@ -17,11 +13,7 @@ export type HeadingCenteredSlots = typeof __propDef.slots;
|
|
|
17
13
|
import { SvelteComponentTyped } from "svelte";
|
|
18
14
|
declare const __propDef: {
|
|
19
15
|
props: {
|
|
20
|
-
data
|
|
21
|
-
toptext: string;
|
|
22
|
-
title: string;
|
|
23
|
-
subtitle: string;
|
|
24
|
-
};
|
|
16
|
+
data: any;
|
|
25
17
|
};
|
|
26
18
|
events: {
|
|
27
19
|
[evt: string]: CustomEvent<any>;
|
package/components/Icon.svelte
CHANGED
|
@@ -22,6 +22,15 @@
|
|
|
22
22
|
title="PyroSim Results Icon"
|
|
23
23
|
/>
|
|
24
24
|
</span>
|
|
25
|
+
{:else if icon == 'pyrosim-logo'}
|
|
26
|
+
<span class="not-prose">
|
|
27
|
+
<img
|
|
28
|
+
class={classes}
|
|
29
|
+
src="https://files.thunderheadeng.com/www/images/pyrosim_logo.svg"
|
|
30
|
+
alt="PyroSim Logo"
|
|
31
|
+
title="PyroSim Logo"
|
|
32
|
+
/>
|
|
33
|
+
</span>
|
|
25
34
|
{:else if icon == 'pathfinder'}
|
|
26
35
|
<span class="not-prose">
|
|
27
36
|
<img
|
|
@@ -40,6 +49,15 @@
|
|
|
40
49
|
title="Pathfinder Results Icon"
|
|
41
50
|
/>
|
|
42
51
|
</span>
|
|
52
|
+
{:else if icon == 'pathfinder-logo'}
|
|
53
|
+
<span class="not-prose">
|
|
54
|
+
<img
|
|
55
|
+
class={classes}
|
|
56
|
+
src="https://files.thunderheadeng.com/www/images/pathfinder_logo.svg"
|
|
57
|
+
alt="Pathfinder Logo"
|
|
58
|
+
title="Pathfinder Logo"
|
|
59
|
+
/>
|
|
60
|
+
</span>
|
|
43
61
|
{:else if icon == 'petrasim'}
|
|
44
62
|
<span class="not-prose">
|
|
45
63
|
<img
|
|
@@ -49,6 +67,44 @@
|
|
|
49
67
|
title="PetraSim Icon"
|
|
50
68
|
/>
|
|
51
69
|
</span>
|
|
70
|
+
{:else if icon == 'petrasim-logo'}
|
|
71
|
+
<span class="not-prose">
|
|
72
|
+
<img
|
|
73
|
+
class={classes}
|
|
74
|
+
src="https://files.thunderheadeng.com/www/images/petrasim_logo.svg"
|
|
75
|
+
alt="PetraSim Logo"
|
|
76
|
+
title="PetraSim Logo"
|
|
77
|
+
/>
|
|
78
|
+
</span>
|
|
79
|
+
{:else if icon == 'teci-logo'}
|
|
80
|
+
<span class="not-prose">
|
|
81
|
+
<img
|
|
82
|
+
class={classes}
|
|
83
|
+
src="https://files.thunderheadeng.com/www/images/teci_logo.svg"
|
|
84
|
+
alt="Thunderhead Logo"
|
|
85
|
+
title="Thunderhead Logo"
|
|
86
|
+
/>
|
|
87
|
+
</span>
|
|
88
|
+
{:else if icon == 'teci-icon'}
|
|
89
|
+
<span class="not-prose">
|
|
90
|
+
<svg class={classes} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 250">
|
|
91
|
+
<path
|
|
92
|
+
style="fill:#0c3879;fill-rule:evenodd;stroke:none"
|
|
93
|
+
d="M88.113 220.536h97.672v97.672H88.113z"
|
|
94
|
+
transform="matrix(2.5596 0 0 2.5596 -225.533 -564.483)"
|
|
95
|
+
/>
|
|
96
|
+
<path
|
|
97
|
+
style="fill:#fff;fill-rule:evenodd;stroke:none"
|
|
98
|
+
d="M145.864 260.176h22.042c2.792 0 4.883.835 6.559 2.651 1.532 1.673 2.232 3.764 2.232 6.278 0 2.37-.7 4.464-2.232 6.277-1.676 1.675-3.767 2.651-6.559 2.651h-22.042v-17.857m0 23.159h22.042c2.792 0 4.883.838 6.559 2.65 1.532 1.674 2.232 3.768 2.232 6.278 0 2.373-.7 4.464-2.232 6.278-1.676 1.675-3.767 2.65-6.559 2.65h-22.042v-17.856"
|
|
99
|
+
transform="matrix(2.5596 0 0 2.5596 -225.533 -564.483)"
|
|
100
|
+
/>
|
|
101
|
+
<path
|
|
102
|
+
style="fill:#fff;fill-rule:evenodd;stroke:none"
|
|
103
|
+
d="M132.471 301.192c-5.861 0-8.79-3.07-8.79-8.929l-.138-37.389-20.648-.14c-7.116-1.254-10.185-9.626-5.165-15.206 1.535-1.535 3.63-2.373 6.14-2.651h26.926l1.675.14h35.435c2.792 0 4.883.836 6.559 2.649 1.532 1.675 2.232 3.767 2.232 6.28 0 2.37-.7 4.464-2.232 6.277-1.676 1.673-3.767 2.651-6.559 2.651H141.26V301.192h-8.788"
|
|
104
|
+
transform="matrix(2.5596 0 0 2.5596 -225.533 -564.483)"
|
|
105
|
+
/>
|
|
106
|
+
</svg>
|
|
107
|
+
</span>
|
|
52
108
|
{:else if icon?.startsWith("icon-")}
|
|
53
109
|
<span class="material-icons-outlined {classes}">{icon?.slice(5)}</span>
|
|
54
110
|
{:else}
|
|
@@ -4,16 +4,18 @@ import Video from './Video.svelte'
|
|
|
4
4
|
export let data;
|
|
5
5
|
</script>
|
|
6
6
|
|
|
7
|
-
<section class="w-full mx-auto flex flex-col md:flex-row items-
|
|
7
|
+
<section class="w-full mx-auto flex flex-col md:flex-row items-start justify-center">
|
|
8
8
|
{#if data.v}
|
|
9
|
-
<div class="w-full max-w-xl {data.position === 'right' ? 'mb-4 md:mb-0' : 'mb-0'}">
|
|
9
|
+
<div class="block w-full max-w-xl {data.position === 'right' ? 'mb-4 md:mb-0' : 'mb-0'}">
|
|
10
10
|
<Video bind:data />
|
|
11
11
|
</div>
|
|
12
12
|
{:else if data.image}
|
|
13
|
-
<div class="block w-full max-w-xl mb-4 md:mb-0">
|
|
13
|
+
<div class="block w-full max-w-xl {data.position === 'right' ? 'mb-4 md:mb-0' : 'mb-0'}">
|
|
14
14
|
<figure>
|
|
15
15
|
<a href={data.image}>
|
|
16
|
-
<img class="aspect-video object-cover
|
|
16
|
+
<img class="w-full aspect-video object-cover border bg-black border-gray-200 shadow-md"
|
|
17
|
+
src={data.image} alt={data.name}
|
|
18
|
+
/>
|
|
17
19
|
</a>
|
|
18
20
|
</figure>
|
|
19
21
|
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
export let title
|
|
3
|
+
export let description
|
|
4
|
+
export let image
|
|
5
|
+
export let url
|
|
6
|
+
|
|
7
|
+
function imageURL(str)
|
|
8
|
+
{
|
|
9
|
+
var tarea = str;
|
|
10
|
+
if (tarea.indexOf("http://") == 0 || tarea.indexOf("https://") == 0) {
|
|
11
|
+
return true
|
|
12
|
+
}
|
|
13
|
+
return false
|
|
14
|
+
}
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<meta property="og:type" content="website">
|
|
18
|
+
<meta property="og:url" content="{url.href}">
|
|
19
|
+
<meta name="og:title" content={title} >
|
|
20
|
+
<meta name="og:description" content={description} >
|
|
21
|
+
{#if imageURL(image)}
|
|
22
|
+
<meta name="og:image" content="{image}" >
|
|
23
|
+
{:else}
|
|
24
|
+
<meta name="og:image" content="https://{url.hostname}{image}" >
|
|
25
|
+
{/if}
|
|
26
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
27
|
+
<meta name="twitter:site" content="@thunderheadeng">
|
|
28
|
+
<meta name="twitter:creator" content="@thunderheadeng">
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} MetaSocialProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} MetaSocialEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} MetaSocialSlots */
|
|
4
|
+
export default class MetaSocial extends SvelteComponentTyped<{
|
|
5
|
+
title: any;
|
|
6
|
+
description: any;
|
|
7
|
+
image: any;
|
|
8
|
+
url: any;
|
|
9
|
+
}, {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
}, {}> {
|
|
12
|
+
}
|
|
13
|
+
export type MetaSocialProps = typeof __propDef.props;
|
|
14
|
+
export type MetaSocialEvents = typeof __propDef.events;
|
|
15
|
+
export type MetaSocialSlots = typeof __propDef.slots;
|
|
16
|
+
import { SvelteComponentTyped } from "svelte";
|
|
17
|
+
declare const __propDef: {
|
|
18
|
+
props: {
|
|
19
|
+
title: any;
|
|
20
|
+
description: any;
|
|
21
|
+
image: any;
|
|
22
|
+
url: any;
|
|
23
|
+
};
|
|
24
|
+
events: {
|
|
25
|
+
[evt: string]: CustomEvent<any>;
|
|
26
|
+
};
|
|
27
|
+
slots: {};
|
|
28
|
+
};
|
|
29
|
+
export {};
|
|
@@ -1,35 +1,124 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { DateTime } from
|
|
2
|
+
import { DateTime } from 'luxon';
|
|
3
3
|
import { getContext } from 'svelte';
|
|
4
|
+
import { paginate, PaginationNav } from 'svelte-paginate';
|
|
4
5
|
|
|
5
6
|
export let data;
|
|
7
|
+
|
|
6
8
|
const posts = getContext('newsPosts');
|
|
9
|
+
|
|
10
|
+
let filteredPosts = [];
|
|
11
|
+
let items = [];
|
|
12
|
+
let currentPage = 1;
|
|
13
|
+
let pageSize = data.pageSize;
|
|
14
|
+
|
|
15
|
+
function termExists(arr, terms) {
|
|
16
|
+
return terms.some((value) => {
|
|
17
|
+
return arr.includes(value);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function filterPosts(arr, terms) {
|
|
22
|
+
for (let i = 0; i < arr.length; ) {
|
|
23
|
+
if (termExists(arr[i].meta.categories, terms)) {
|
|
24
|
+
i++;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
arr.splice(i, 1);
|
|
28
|
+
}
|
|
29
|
+
return arr;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (data.filter) {
|
|
33
|
+
items = filterPosts(posts, data.filter);
|
|
34
|
+
} else {
|
|
35
|
+
items = posts;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
$: paginatedItems = paginate({ items, pageSize, currentPage });
|
|
7
39
|
</script>
|
|
8
40
|
|
|
9
|
-
<div class="relative mx-auto w-full
|
|
10
|
-
<div
|
|
41
|
+
<div class="relative mx-auto w-full">
|
|
42
|
+
<div
|
|
43
|
+
class="flex flex-col justify-between space-y-4 border-b-2 border-gray-200 pb-4 sm:flex-row sm:items-end sm:space-y-0"
|
|
44
|
+
>
|
|
11
45
|
<div>
|
|
12
|
-
<h1 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
|
|
46
|
+
<h1 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
|
|
47
|
+
{data.title}
|
|
48
|
+
</h1>
|
|
13
49
|
<p class="text-xl text-gray-500">{data.subtitle}</p>
|
|
14
50
|
</div>
|
|
15
51
|
<div class="w-32">
|
|
16
|
-
<
|
|
17
|
-
|
|
52
|
+
<data
|
|
53
|
+
id="mj-w-res-data"
|
|
54
|
+
data-token="f594659941689957f270ca278a80dc7d"
|
|
55
|
+
class="mj-w-data"
|
|
56
|
+
data-apikey="3aOX"
|
|
57
|
+
data-w-id="Fbu"
|
|
58
|
+
data-lang="en_US"
|
|
59
|
+
data-base="https://app.mailjet.com"
|
|
60
|
+
data-width="640"
|
|
61
|
+
data-height="480"
|
|
62
|
+
data-statics="statics"></data>
|
|
63
|
+
<button
|
|
64
|
+
class="flex w-full items-center justify-center border border-transparent bg-teci-blue-light px-4 py-2 text-base font-medium leading-6 text-white transition duration-150 ease-in-out hover:bg-teci-blue-dark focus:border-teci-blue-dark focus:outline-none"
|
|
65
|
+
data-token="f594659941689957f270ca278a80dc7d"
|
|
66
|
+
onclick="mjOpenPopin(event, this)">Subscribe</button
|
|
18
67
|
>
|
|
19
|
-
Subscribe
|
|
20
|
-
</button>
|
|
21
68
|
</div>
|
|
22
69
|
</div>
|
|
23
|
-
<div class="
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
70
|
+
<div class="paginator mx-auto flex justify-center pt-4">
|
|
71
|
+
<PaginationNav
|
|
72
|
+
totalItems="{items.length}"
|
|
73
|
+
pageSize="{pageSize ? pageSize : 6}"
|
|
74
|
+
currentPage="{currentPage}"
|
|
75
|
+
limit="{1}"
|
|
76
|
+
showStepOptions="{true}"
|
|
77
|
+
on:setPage="{(e) => (currentPage = e.detail.page)}"
|
|
78
|
+
/>
|
|
79
|
+
</div>
|
|
80
|
+
<div
|
|
81
|
+
class="grid gap-16 pt-8 md:grid-cols-2 lg:grid-cols-3 lg:gap-x-5 lg:gap-y-12"
|
|
82
|
+
>
|
|
83
|
+
{#each paginatedItems as post}
|
|
84
|
+
<a class="block h-full" href="{post.path}">
|
|
85
|
+
<div class="flex h-full flex-col items-stretch">
|
|
86
|
+
<time
|
|
87
|
+
class="mb-1 block text-sm text-gray-500"
|
|
88
|
+
datetime="{post.meta.date}"
|
|
89
|
+
>{DateTime.fromISO(post.meta.date).toLocaleString()}</time
|
|
90
|
+
>
|
|
91
|
+
<p class="mb-2 text-xl font-semibold text-gray-900">
|
|
92
|
+
{post.meta.title}
|
|
93
|
+
</p>
|
|
94
|
+
{#if post.meta.summary}
|
|
95
|
+
<p class="mb-2 flex-1 text-base text-gray-500">
|
|
96
|
+
{post.meta.summary.length > 190
|
|
97
|
+
? post.meta.summary.substring(0, 190) + ' ...'
|
|
98
|
+
: post.meta.summary}
|
|
99
|
+
</p>
|
|
100
|
+
{:else}
|
|
101
|
+
<p class="mb-2 flex-1 text-base text-red-500">
|
|
102
|
+
Missing Summary Text
|
|
103
|
+
</p>
|
|
104
|
+
{/if}
|
|
105
|
+
<p
|
|
106
|
+
class="text-sm font-semibold text-teci-blue-light hover:text-teci-blue-dark"
|
|
107
|
+
>
|
|
108
|
+
Read full article<span aria-hidden="true"> →</span>
|
|
109
|
+
</p>
|
|
110
|
+
</div>
|
|
111
|
+
</a>
|
|
33
112
|
{/each}
|
|
34
113
|
</div>
|
|
35
|
-
|
|
114
|
+
<div class="paginator mx-auto flex justify-center pt-8">
|
|
115
|
+
<PaginationNav
|
|
116
|
+
totalItems="{items.length}"
|
|
117
|
+
pageSize="{pageSize ? pageSize : 6}"
|
|
118
|
+
currentPage="{currentPage}"
|
|
119
|
+
limit="{1}"
|
|
120
|
+
showStepOptions="{true}"
|
|
121
|
+
on:setPage="{(e) => (currentPage = e.detail.page)}"
|
|
122
|
+
/>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
@@ -26,11 +26,13 @@
|
|
|
26
26
|
<section bind:clientWidth={w} class="relative flex flex-row { data.fullWidth ? 'mx-0' : 'mx-auto'} {(data.toc || data.rightRail) ? 'md:space-x-8' : 'space-x-0'}">
|
|
27
27
|
|
|
28
28
|
<div id="content" class="prose w-full { data.fullWidth ? 'max-w-none' : 'max-w-prose'}">
|
|
29
|
+
{#if !data.hideTitle}
|
|
29
30
|
<h1>{title}</h1>
|
|
30
|
-
{#if formattedDate}
|
|
31
|
-
<p>Published: {formattedDate}{#if (formattedLastModDate != formattedDate && formattedLastModDate)}, Updated: {formattedLastModDate}{/if}</p>
|
|
32
31
|
{/if}
|
|
33
32
|
<slot />
|
|
33
|
+
{#if (formattedDate && data.showDate)}
|
|
34
|
+
<p class="text-sm">Published: {formattedDate}{#if (formattedLastModDate != formattedDate && formattedLastModDate)}, Updated: {formattedLastModDate}{/if}</p>
|
|
35
|
+
{/if}
|
|
34
36
|
</div>
|
|
35
37
|
<aside class="relative w-0 {(data.toc || data.rightRail) ? 'md:w-60' : 'hidden'}">
|
|
36
38
|
{#if data.toc}
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
</script>
|
|
8
8
|
|
|
9
9
|
<!-- This example requires Tailwind CSS v2.0+ -->
|
|
10
|
-
<
|
|
10
|
+
<section class="mx-auto w-full">
|
|
11
11
|
{#if data.title}
|
|
12
12
|
<h2 class="sr-only">{data.title}</h2>
|
|
13
13
|
{/if}
|
|
14
|
-
<
|
|
14
|
+
<div class="grid grid-cols-1 gap-4 md:grid-cols-3">
|
|
15
15
|
{#each data.cards as card}
|
|
16
16
|
<Card bind:data={card} bind:halfHeight={data.halfHeight} />
|
|
17
17
|
{/each}
|
|
18
|
-
</
|
|
19
|
-
</
|
|
18
|
+
</div>
|
|
19
|
+
</section>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script
|
|
1
|
+
<script>import CountrySelector from './CountrySelector.svelte';
|
|
2
2
|
import Icon from './Icon.svelte';
|
|
3
3
|
import { onMount } from 'svelte';
|
|
4
4
|
import { scrollTo, validateEmail } from '../utils.js';
|
|
@@ -242,7 +242,7 @@ const submitForm = async () => {
|
|
|
242
242
|
</div>
|
|
243
243
|
</div>
|
|
244
244
|
|
|
245
|
-
<style
|
|
245
|
+
<style>
|
|
246
246
|
.confident {
|
|
247
247
|
@apply hidden;
|
|
248
248
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} WrapProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} WrapEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} WrapSlots */
|
|
4
|
+
export default class Wrap extends SvelteComponentTyped<{
|
|
5
|
+
[x: string]: any;
|
|
6
|
+
tag?: string;
|
|
7
|
+
when?: boolean;
|
|
8
|
+
}, {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
}, {
|
|
11
|
+
default: {};
|
|
12
|
+
}> {
|
|
13
|
+
}
|
|
14
|
+
export type WrapProps = typeof __propDef.props;
|
|
15
|
+
export type WrapEvents = typeof __propDef.events;
|
|
16
|
+
export type WrapSlots = typeof __propDef.slots;
|
|
17
|
+
import { SvelteComponentTyped } from "svelte";
|
|
18
|
+
declare const __propDef: {
|
|
19
|
+
props: {
|
|
20
|
+
[x: string]: any;
|
|
21
|
+
tag?: string;
|
|
22
|
+
when?: boolean;
|
|
23
|
+
};
|
|
24
|
+
events: {
|
|
25
|
+
[evt: string]: CustomEvent<any>;
|
|
26
|
+
};
|
|
27
|
+
slots: {
|
|
28
|
+
default: {};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export {};
|
package/layouts/blocks.svelte
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<script>
|
|
2
|
+
import {page} from "$app/stores"
|
|
3
|
+
|
|
2
4
|
import CTA from '../components/CTA.svelte';
|
|
3
5
|
import HeadingCentered from '../components/HeadingCentered.svelte';
|
|
4
6
|
import MediaFeature from '../components/MediaFeature.svelte';
|
|
@@ -8,6 +10,7 @@
|
|
|
8
10
|
import ThreeColumn from '../components/ThreeColumn.svelte';
|
|
9
11
|
import TrialForm from '../components/TrialForm.svelte';
|
|
10
12
|
import Video from '../components/Video.svelte';
|
|
13
|
+
import MetaSocial from '../components/MetaSocial.svelte';
|
|
11
14
|
|
|
12
15
|
let blocks = [
|
|
13
16
|
{ref: "cta-center", component: CTA},
|
|
@@ -25,21 +28,31 @@
|
|
|
25
28
|
export let date;
|
|
26
29
|
export let lastmod;
|
|
27
30
|
export let summary;
|
|
31
|
+
export let images = [];
|
|
28
32
|
export let layout;
|
|
29
33
|
export let page_sections;
|
|
34
|
+
|
|
35
|
+
let featuredImage;
|
|
36
|
+
|
|
37
|
+
if (images.length > 0) {
|
|
38
|
+
featuredImage = images[0]
|
|
39
|
+
} else {
|
|
40
|
+
featuredImage = "https://www.thunderheadeng.com/wp-content/uploads/2022/01/femtc-brno.jpg"
|
|
41
|
+
}
|
|
30
42
|
</script>
|
|
31
43
|
|
|
32
44
|
<svelte:head>
|
|
33
45
|
<title>{title} | Thunderhead Engineering</title>
|
|
34
46
|
<meta name="description" content={summary}>
|
|
47
|
+
<MetaSocial title={title} description={summary} image={featuredImage} url={$page.url} />
|
|
35
48
|
</svelte:head>
|
|
36
49
|
|
|
37
50
|
<article class="flex flex-col space-y-12 {layout}">
|
|
38
51
|
{#each page_sections as section}
|
|
39
52
|
{#if (section) && (section.fieldGroup === "sidebar-content")}
|
|
40
|
-
<svelte:component this={blocks.find(obj=>obj.ref===section.fieldGroup).component}
|
|
53
|
+
<svelte:component this={blocks.find(obj=>obj.ref===section.fieldGroup).component} data={section} {title} {date} {lastmod}><slot/></svelte:component>
|
|
41
54
|
{:else if (section) && (section.fieldGroup != "sidebar-content")}
|
|
42
|
-
<svelte:component this={blocks.find(obj=>obj.ref===section.fieldGroup).component}
|
|
55
|
+
<svelte:component this={blocks.find(obj=>obj.ref===section.fieldGroup).component} data={section} />
|
|
43
56
|
{/if}
|
|
44
57
|
{/each}
|
|
45
58
|
</article>
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
/** @typedef {typeof __propDef.events} BlocksEvents */
|
|
3
3
|
/** @typedef {typeof __propDef.slots} BlocksSlots */
|
|
4
4
|
export default class Blocks extends SvelteComponentTyped<{
|
|
5
|
+
summary: any;
|
|
5
6
|
title: any;
|
|
6
7
|
date: any;
|
|
7
8
|
lastmod: any;
|
|
8
|
-
summary: any;
|
|
9
9
|
layout: any;
|
|
10
10
|
page_sections: any;
|
|
11
|
+
images?: any[];
|
|
11
12
|
}, {
|
|
12
13
|
[evt: string]: CustomEvent<any>;
|
|
13
14
|
}, {
|
|
@@ -20,12 +21,13 @@ export type BlocksSlots = typeof __propDef.slots;
|
|
|
20
21
|
import { SvelteComponentTyped } from "svelte";
|
|
21
22
|
declare const __propDef: {
|
|
22
23
|
props: {
|
|
24
|
+
summary: any;
|
|
23
25
|
title: any;
|
|
24
26
|
date: any;
|
|
25
27
|
lastmod: any;
|
|
26
|
-
summary: any;
|
|
27
28
|
layout: any;
|
|
28
29
|
page_sections: any;
|
|
30
|
+
images?: any[];
|
|
29
31
|
};
|
|
30
32
|
events: {
|
|
31
33
|
[evt: string]: CustomEvent<any>;
|
package/package.json
CHANGED
|
@@ -1,49 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tecitheme",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"svelte": true,
|
|
5
5
|
"devDependencies": {
|
|
6
6
|
"@jsdevtools/rehype-toc": "^3.0.2",
|
|
7
|
-
"@sveltejs/adapter-auto": "next",
|
|
8
7
|
"@sveltejs/adapter-netlify": "next",
|
|
9
8
|
"@sveltejs/kit": "next",
|
|
10
|
-
"@tailwindcss/forms": "^0.5.
|
|
9
|
+
"@tailwindcss/forms": "^0.5.1",
|
|
11
10
|
"@tailwindcss/typography": "^0.5.2",
|
|
12
|
-
"@types/cookie": "^0.5.
|
|
13
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
14
|
-
"@typescript-eslint/parser": "^5.
|
|
15
|
-
"autoprefixer": "^10.4.
|
|
16
|
-
"dotenv": "^16.0.
|
|
11
|
+
"@types/cookie": "^0.5.1",
|
|
12
|
+
"@typescript-eslint/eslint-plugin": "^5.27.0",
|
|
13
|
+
"@typescript-eslint/parser": "^5.27.0",
|
|
14
|
+
"autoprefixer": "^10.4.7",
|
|
15
|
+
"dotenv": "^16.0.1",
|
|
17
16
|
"encoding": "^0.1.13",
|
|
18
|
-
"eslint": "^8.
|
|
17
|
+
"eslint": "^8.16.0",
|
|
19
18
|
"eslint-config-prettier": "^8.5.0",
|
|
20
|
-
"eslint-plugin-svelte3": "^
|
|
21
|
-
"luxon": "^2.
|
|
22
|
-
"mdsvex": "^0.10.
|
|
23
|
-
"postcss": "^8.4.
|
|
19
|
+
"eslint-plugin-svelte3": "^4.0.0",
|
|
20
|
+
"luxon": "^2.4.0",
|
|
21
|
+
"mdsvex": "^0.10.6",
|
|
22
|
+
"postcss": "^8.4.14",
|
|
24
23
|
"prettier": "^2.6.2",
|
|
25
|
-
"prettier-plugin-tailwindcss": "^0.1.
|
|
24
|
+
"prettier-plugin-tailwindcss": "^0.1.11",
|
|
26
25
|
"rehype-parse": "^8.0.4",
|
|
27
26
|
"rehype-slug": "^5.0.1",
|
|
28
27
|
"rehype-stringify": "^9.0.3",
|
|
29
28
|
"stream": "^0.0.2",
|
|
30
|
-
"svelte": "^3.
|
|
31
|
-
"svelte-check": "^2.7.
|
|
32
|
-
"svelte-
|
|
29
|
+
"svelte": "^3.48.0",
|
|
30
|
+
"svelte-check": "^2.7.1",
|
|
31
|
+
"svelte-paginate": "^0.0.1",
|
|
33
32
|
"svelte-preprocess": "^4.10.6",
|
|
34
|
-
"svelte2tsx": "^0.5.
|
|
33
|
+
"svelte2tsx": "^0.5.10",
|
|
35
34
|
"tailwindcss": "^3.0.24",
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"vite": "^
|
|
40
|
-
"vite-plugin-autoimport": "^1.6.3"
|
|
35
|
+
"tslib": "^2.4.0",
|
|
36
|
+
"typescript": "^4.7.2",
|
|
37
|
+
"vite": "^2.9.9",
|
|
38
|
+
"vite-plugin-autoimport": "^1.6.6"
|
|
41
39
|
},
|
|
42
40
|
"type": "module",
|
|
43
41
|
"dependencies": {
|
|
44
42
|
"@lukeed/uuid": "^2.0.0",
|
|
45
43
|
"cookie": "^0.5.0",
|
|
46
|
-
"katex": "^0.15.
|
|
44
|
+
"katex": "^0.15.6"
|
|
47
45
|
},
|
|
48
46
|
"exports": {
|
|
49
47
|
"./package.json": "./package.json",
|
|
@@ -60,12 +58,14 @@
|
|
|
60
58
|
"./components/Icon.svelte": "./components/Icon.svelte",
|
|
61
59
|
"./components/Math.svelte": "./components/Math.svelte",
|
|
62
60
|
"./components/MediaFeature.svelte": "./components/MediaFeature.svelte",
|
|
61
|
+
"./components/MetaSocial.svelte": "./components/MetaSocial.svelte",
|
|
63
62
|
"./components/Modal.svelte": "./components/Modal.svelte",
|
|
64
63
|
"./components/NewsGrid.svelte": "./components/NewsGrid.svelte",
|
|
65
64
|
"./components/SidebarContent.svelte": "./components/SidebarContent.svelte",
|
|
66
65
|
"./components/ThreeColumn.svelte": "./components/ThreeColumn.svelte",
|
|
67
66
|
"./components/TrialForm.svelte": "./components/TrialForm.svelte",
|
|
68
67
|
"./components/Video.svelte": "./components/Video.svelte",
|
|
68
|
+
"./components/Wrap.svelte": "./components/Wrap.svelte",
|
|
69
69
|
"./layouts/blocks.svelte": "./layouts/blocks.svelte",
|
|
70
70
|
"./req_utils": "./req_utils.js",
|
|
71
71
|
"./utils": "./utils.js",
|