tecitheme 0.2.8 → 0.3.1
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/components/CTABranded.svelte +15 -0
- package/components/CTABranded.svelte.d.ts +23 -0
- package/components/CTASplitImage.svelte +27 -0
- package/components/CTASplitImage.svelte.d.ts +23 -0
- package/components/Card.svelte +3 -6
- package/components/ContentTwoColumns.svelte +47 -0
- package/components/ContentTwoColumns.svelte.d.ts +23 -0
- package/components/FeatureGrid.svelte +42 -0
- package/components/FeatureGrid.svelte.d.ts +23 -0
- package/components/Figure.svelte +9 -17
- package/components/Hero.svelte +74 -0
- package/components/Hero.svelte.d.ts +23 -0
- package/components/LogoCloud.svelte +25 -0
- package/components/LogoCloud.svelte.d.ts +23 -0
- package/components/MediaFeature.svelte +5 -23
- package/components/PricingTable.svelte +84 -0
- package/components/PricingTable.svelte.d.ts +23 -0
- package/components/Stats.svelte +34 -0
- package/components/Stats.svelte.d.ts +23 -0
- package/components/Testimonial.svelte +171 -0
- package/components/Testimonial.svelte.d.ts +23 -0
- package/components/Video.svelte +105 -11
- package/components/Video.svelte.d.ts +2 -0
- package/layouts/blocks.svelte +21 -3
- package/package.json +32 -23
- package/site_config.json +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
export let data
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<section class="{(data.color == "pyrosim" ? "bg-pyrosim" : (data.color == "pathfinder" ? "bg-pathfinder" : "bg-teci-blue-dark"))}">
|
|
6
|
+
<div class="mx-auto max-w-4xl py-10 px-6 text-center sm:py-10 lg:px-8">
|
|
7
|
+
<h2 class="text-3xl font-bold tracking-tight text-white sm:text-4xl">
|
|
8
|
+
<span class="block">{@html data.heading}</span>
|
|
9
|
+
</h2>
|
|
10
|
+
<p class="mt-4 text-lg leading-6 text-gray-200">{@html data.body}</p>
|
|
11
|
+
<a href={data.cta_url} class="mt-8 inline-flex w-full items-center justify-center border border-transparent bg-white px-5 py-3 text-base font-medium text-gray-900 hover:bg-indigo-50 sm:w-auto">
|
|
12
|
+
{data.cta}
|
|
13
|
+
</a>
|
|
14
|
+
</div>
|
|
15
|
+
</section>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} CtaBrandedProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} CtaBrandedEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} CtaBrandedSlots */
|
|
4
|
+
export default class CtaBranded extends SvelteComponentTyped<{
|
|
5
|
+
data: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type CtaBrandedProps = typeof __propDef.props;
|
|
11
|
+
export type CtaBrandedEvents = typeof __propDef.events;
|
|
12
|
+
export type CtaBrandedSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
data: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
export let data
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div class="relative {(data.color == "pyrosim" ? "bg-pyrosim" : (data.color == "pathfinder" ? "bg-pathfinder" : "bg-teci-blue-dark"))}">
|
|
6
|
+
<div class="h-56 sm:h-72 md:absolute md:left-0 md:h-full md:w-1/2">
|
|
7
|
+
<img class="h-full w-full object-cover" src="https://teci-files.imgix.net/www/images/{data.image}?w=608&fit=clip&auto=compress&auto=format" alt="Image for {data.preheading}">
|
|
8
|
+
</div>
|
|
9
|
+
<div class="relative mx-auto max-w-7xl py-12 px-6 lg:px-8 lg:py-16">
|
|
10
|
+
<div class="md:ml-auto md:w-1/2 md:pl-10">
|
|
11
|
+
<h2 class="text-lg font-semibold text-gray-300">{data.preheading}</h2>
|
|
12
|
+
<p class="mt-2 text-3xl font-bold tracking-tight text-white sm:text-4xl">{data.heading}</p>
|
|
13
|
+
<ol class="mt-3 text-lg text-gray-300 list-decimal pl-6">
|
|
14
|
+
{#each data.items as item}
|
|
15
|
+
<li>{item.text}</li>
|
|
16
|
+
{/each}
|
|
17
|
+
</ol>
|
|
18
|
+
<div class="mt-8">
|
|
19
|
+
<div class="inline-flex shadow">
|
|
20
|
+
<a href={data.cta_url} class="inline-flex items-center justify-center border border-transparent bg-white px-5 py-3 text-base font-medium text-gray-900 hover:bg-gray-50">
|
|
21
|
+
{data.cta}
|
|
22
|
+
</a>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} CtaSplitImageProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} CtaSplitImageEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} CtaSplitImageSlots */
|
|
4
|
+
export default class CtaSplitImage extends SvelteComponentTyped<{
|
|
5
|
+
data: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type CtaSplitImageProps = typeof __propDef.props;
|
|
11
|
+
export type CtaSplitImageEvents = typeof __propDef.events;
|
|
12
|
+
export type CtaSplitImageSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
data: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
package/components/Card.svelte
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { dev } from "$app/environment";
|
|
3
2
|
//Allows icons from https://fonts.google.com/icons?selected=Material+Icons by name in the format 'icon-XXXX'.
|
|
4
3
|
import Icon from "./Icon.svelte";
|
|
5
4
|
import Wrap from "./Wrap.svelte";
|
|
@@ -8,14 +7,12 @@
|
|
|
8
7
|
|
|
9
8
|
let backgroundImage;
|
|
10
9
|
|
|
11
|
-
if (
|
|
12
|
-
backgroundImage = data.image;
|
|
13
|
-
} else if (data.image) {
|
|
10
|
+
if (data.image) {
|
|
14
11
|
if (data.image.includes("gif")) {
|
|
15
|
-
backgroundImage = "https://
|
|
12
|
+
backgroundImage = "https://teci-files.imgix.net/www/images/" + data.image;
|
|
16
13
|
} else {
|
|
17
14
|
backgroundImage =
|
|
18
|
-
"https://
|
|
15
|
+
"https://teci-files.imgix.net/www/images/" +
|
|
19
16
|
data.image +
|
|
20
17
|
"?w=1200&h=627&fit=crop&auto=compress&auto=format";
|
|
21
18
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
export let data
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div class="overflow-hidden mx-auto max-w-max lg:max-w-7xl">
|
|
6
|
+
<div class="relative z-10 mb-8 md:mb-2">
|
|
7
|
+
<div class="max-w-prose text-base lg:max-w-none">
|
|
8
|
+
<h2 class="font-semibold leading-6 {(data.color == "pyrosim" ? "text-pyrosim" : (data.color == "pathfinder" ? "text-pathfinder" : "text-teci-blue-dark"))}">{data.preheading}</h2>
|
|
9
|
+
<p class="mt-2 text-3xl font-bold leading-8 tracking-tight text-gray-900 sm:text-4xl">{data.heading}</p>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="relative">
|
|
13
|
+
<svg class="absolute top-0 right-0 -mt-20 -mr-20 hidden md:block md:[overflow-anchor:none]" width="404" height="384" fill="none" viewBox="0 0 404 384" aria-hidden="true">
|
|
14
|
+
<defs>
|
|
15
|
+
<pattern id="95e8f2de-6d30-4b7e-8159-f791729db21b" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse">
|
|
16
|
+
<rect x="0" y="0" width="4" height="4" class="text-gray-200" fill="currentColor" />
|
|
17
|
+
</pattern>
|
|
18
|
+
</defs>
|
|
19
|
+
<rect width="404" height="384" fill="url(#95e8f2de-6d30-4b7e-8159-f791729db21b)" />
|
|
20
|
+
</svg>
|
|
21
|
+
<svg class="absolute bottom-0 left-0 -mb-20 -ml-20 hidden md:block md:[overflow-anchor:none]" width="404" height="384" fill="none" viewBox="0 0 404 384" aria-hidden="true">
|
|
22
|
+
<defs>
|
|
23
|
+
<pattern id="7a00fe67-0343-4a3c-8e81-c145097a3ce0" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse">
|
|
24
|
+
<rect x="0" y="0" width="4" height="4" class="text-gray-200" fill="currentColor" />
|
|
25
|
+
</pattern>
|
|
26
|
+
</defs>
|
|
27
|
+
<rect width="404" height="384" fill="url(#7a00fe67-0343-4a3c-8e81-c145097a3ce0)" />
|
|
28
|
+
</svg>
|
|
29
|
+
<div class="relative md:m-4 p-2 bg-white">
|
|
30
|
+
<div class="prose prose-lg columns-1 text-gray-600 lg:columns-2 lg:max-w-none">
|
|
31
|
+
{@html data.body}
|
|
32
|
+
</div>
|
|
33
|
+
{#if data.ctas}
|
|
34
|
+
<div class="mt-8 flex gap-x-4 float-right py-1">
|
|
35
|
+
{#each data.ctas as cta}
|
|
36
|
+
<a href={cta.url} class="inline-block px-4 py-1.5 text-base font-semibold leading-7 shadow-sm ring-1 ring-gray-900/10 hover:ring-gray-900/20 hover:bg-teci-blue-dark
|
|
37
|
+
{(cta.color == "pyrosim" ? "bg-pyrosim text-white" : (cta.color == "pathfinder" ? "bg-pathfinder text-white" : (cta.color == "white" ? "bg-white text-gray-600 hover:text-white" : "bg-teci-blue-dark text-white")))}
|
|
38
|
+
">
|
|
39
|
+
{cta.text}
|
|
40
|
+
<span class="hidden sm:inline {(cta.color == "white" ? "text-gray-600" : "text-white")}" aria-hidden="true">→</span>
|
|
41
|
+
</a>
|
|
42
|
+
{/each}
|
|
43
|
+
</div>
|
|
44
|
+
{/if}
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} ContentTwoColumnsProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} ContentTwoColumnsEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} ContentTwoColumnsSlots */
|
|
4
|
+
export default class ContentTwoColumns extends SvelteComponentTyped<{
|
|
5
|
+
data: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type ContentTwoColumnsProps = typeof __propDef.props;
|
|
11
|
+
export type ContentTwoColumnsEvents = typeof __propDef.events;
|
|
12
|
+
export type ContentTwoColumnsSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
data: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import Icon from './Icon.svelte'
|
|
3
|
+
|
|
4
|
+
export let data
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<section>
|
|
8
|
+
<div class="sm:text-center">
|
|
9
|
+
{#if data.preheading}
|
|
10
|
+
<p class="mb-2 text-lg font-semibold leading-8
|
|
11
|
+
{(data.color == "pyrosim" ? "text-pyrosim" : (data.color == "pathfinder" ? "text-pathfinder" : "text-teci-blue-dark"))}
|
|
12
|
+
">
|
|
13
|
+
{data.preheading}
|
|
14
|
+
</p>
|
|
15
|
+
{/if}
|
|
16
|
+
<h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
|
|
17
|
+
{data.heading}
|
|
18
|
+
</h2>
|
|
19
|
+
{#if data.subheading}
|
|
20
|
+
<p class="mx-auto mt-6 max-w-2xl text-lg leading-8 text-gray-600">
|
|
21
|
+
{data.subheading}
|
|
22
|
+
</p>
|
|
23
|
+
{/if}
|
|
24
|
+
</div>
|
|
25
|
+
<div class="mt-12 max-w-lg sm:mx-auto md:max-w-none">
|
|
26
|
+
<div class="grid grid-cols-1 gap-y-8 md:grid-cols-2 md:gap-x-12">
|
|
27
|
+
{#each data.blocks as block}
|
|
28
|
+
<div class="relative flex flex-row gap-6">
|
|
29
|
+
<div class="hidden sm:flex h-12 w-12 items-center justify-center text-white sm:shrink-0 flex-shrink-0
|
|
30
|
+
{(data.color == "pyrosim" ? "bg-pyrosim" : (data.color == "pathfinder" ? "bg-pathfinder" : "bg-teci-blue-dark"))}
|
|
31
|
+
">
|
|
32
|
+
<Icon classes="w-auto" icon={block.icon} />
|
|
33
|
+
</div>
|
|
34
|
+
<div class="sm:min-w-0 sm:flex-1">
|
|
35
|
+
<p class="text-lg font-semibold leading-8 text-gray-900">{block.heading}</p>
|
|
36
|
+
<p class="mt-2 text-base leading-7 text-gray-600">{block.body}</p>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
{/each}
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</section>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} FeatureGridProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} FeatureGridEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} FeatureGridSlots */
|
|
4
|
+
export default class FeatureGrid extends SvelteComponentTyped<{
|
|
5
|
+
data: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type FeatureGridProps = typeof __propDef.props;
|
|
11
|
+
export type FeatureGridEvents = typeof __propDef.events;
|
|
12
|
+
export type FeatureGridSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
data: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
package/components/Figure.svelte
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { dev } from "$app/environment";
|
|
3
|
-
|
|
4
2
|
export let image;
|
|
5
3
|
export let title;
|
|
6
4
|
export let caption;
|
|
@@ -9,23 +7,17 @@
|
|
|
9
7
|
let figureImage;
|
|
10
8
|
let figureLink;
|
|
11
9
|
|
|
12
|
-
if (
|
|
10
|
+
if (image.startsWith("http")) {
|
|
13
11
|
figureImage = image;
|
|
14
12
|
figureLink = link ? link : image;
|
|
15
|
-
} else if (image) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
figureImage =
|
|
24
|
-
"https://thunderheadeng-www.imgix.net" +
|
|
25
|
-
image +
|
|
26
|
-
"?auto=compress&auto=format";
|
|
27
|
-
figureLink = link ? link : "https://thunderheadeng-www.imgix.net" + image;
|
|
28
|
-
}
|
|
13
|
+
} else if (image.includes("gif")) {
|
|
14
|
+
figureImage = "https://teci-files.imgix.net/www/images/" + image;
|
|
15
|
+
figureLink = link ? link : "https://teci-files.imgix.net/www/images/" + image;
|
|
16
|
+
} else {
|
|
17
|
+
figureImage = "https://teci-files.imgix.net/www/images/" +
|
|
18
|
+
image +
|
|
19
|
+
"?auto=compress&auto=format";
|
|
20
|
+
figureLink = link ? link : "https://teci-files.imgix.net/www/images/" + image;
|
|
29
21
|
}
|
|
30
22
|
</script>
|
|
31
23
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import Icon from './Icon.svelte'
|
|
3
|
+
|
|
4
|
+
export let data
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<section class="relative bg-white">
|
|
8
|
+
<div class="mx-auto max-w-7xl md:grid md:grid-cols-12 md:gap-x-8 md:px-0">
|
|
9
|
+
<div class="pt-0 pb-0 md:col-span-8 lg:col-span-7 xl:col-span-6">
|
|
10
|
+
<div class="mx-auto">
|
|
11
|
+
{#if data.logo}
|
|
12
|
+
<span class="sr-only">{data.title}</span>
|
|
13
|
+
<Icon icon={data.logo} classes="h-12 sm:h-20" />
|
|
14
|
+
{:else}
|
|
15
|
+
<h1 class="z-10 text-4xl font-bold tracking-tight sm:text-center sm:text-6xl">
|
|
16
|
+
{data.heading}
|
|
17
|
+
</h1>
|
|
18
|
+
{/if}
|
|
19
|
+
{#if data.banner_text}
|
|
20
|
+
<div class="mt-6 sm:mt-8 lg:mt-4">
|
|
21
|
+
<a href={data.banner_link_url} class="inline-flex space-x-6">
|
|
22
|
+
<span class="rounded-full bg-gray-300/10 px-3 py-1 text-sm font-semibold leading-6 {(data.color == "pyrosim" ? "text-pyrosim" : (data.color == "pathfinder" ? "text-pathfinder" : "text-teci-blue-dark"))} ring-1 ring-inset {(data.color == "pyrosim" ? "ring-pyrosim/20" : (data.color == "pathfinder" ? "ring-pathfinder/20" : "ring-teci-blue-dark/20"))}">{data.banner_text}</span>
|
|
23
|
+
<span class="inline-flex items-center space-x-1 text-sm font-medium leading-6 text-gray-400">
|
|
24
|
+
<span>{data.banner_link_text}</span>
|
|
25
|
+
<!-- Heroicon name: mini/chevron-right -->
|
|
26
|
+
<svg class="h-5 w-5 {(data.color == "pyrosim" ? "text-pyrosim" : (data.color == "pathfinder" ? "text-pathfinder" : "text-teci-blue-dark"))}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
27
|
+
<path fill-rule="evenodd" d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z" clip-rule="evenodd" />
|
|
28
|
+
</svg>
|
|
29
|
+
</span>
|
|
30
|
+
</a>
|
|
31
|
+
</div>
|
|
32
|
+
{/if}
|
|
33
|
+
<h2 class="mt-10 text-4xl font-bold tracking-tight text-gray-900 sm:text-6xl">{data.tagline}</h2>
|
|
34
|
+
<p class="mt-6 text-lg leading-8 text-gray-600">{data.text}</p>
|
|
35
|
+
{#if data.ctas}
|
|
36
|
+
<div class="mt-10 flex gap-x-8 sm:justify-left">
|
|
37
|
+
{#each data.ctas as cta}
|
|
38
|
+
<a href={cta.url} class="inline-block px-4 py-1.5 text-base font-semibold leading-7 shadow-sm ring-1 ring-gray-900/10 hover:ring-gray-900/20 hover:bg-teci-blue-dark
|
|
39
|
+
{(cta.color == "pyrosim" ? "bg-pyrosim text-white" : (cta.color == "pathfinder" ? "bg-pathfinder text-white" : (cta.color == "white" ? "bg-white text-gray-600 hover:text-white" : "bg-teci-blue-dark text-white")))}
|
|
40
|
+
">
|
|
41
|
+
{cta.text}
|
|
42
|
+
<span class="hidden sm:inline {(cta.color == "white" ? "text-gray-600" : "text-white")}" aria-hidden="true">→</span>
|
|
43
|
+
</a>
|
|
44
|
+
{/each}
|
|
45
|
+
</div>
|
|
46
|
+
{/if}
|
|
47
|
+
<div class="mt-16">
|
|
48
|
+
<section class="{(data.color == "pyrosim" ? "bg-pyrosim" : (data.color == "pathfinder" ? "bg-pathfinder" : "bg-teci-blue-dark"))}">
|
|
49
|
+
<div class="text-center mx-auto max-w-4xl py-10 px-6 sm:py-10 lg:px-8">
|
|
50
|
+
<h2 class="text-3xl font-bold tracking-tight text-white sm:text-2xl">
|
|
51
|
+
<span class="block">{@html data.heading}</span>
|
|
52
|
+
</h2>
|
|
53
|
+
<p class="mt-4 text-lg leading-6 text-gray-200">{@html data.body}</p>
|
|
54
|
+
<a href={data.cta_url} class="mt-8 inline-flex w-full items-center justify-center border border-transparent bg-white px-5 py-3 text-base font-medium text-gray-900 hover:bg-indigo-50 sm:w-auto">
|
|
55
|
+
{@html data.cta}
|
|
56
|
+
</a>
|
|
57
|
+
</div>
|
|
58
|
+
</section>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
<div class="relative hidden md:block md:col-span-4 lg:col-span-5 xl:col-span-6">
|
|
63
|
+
{#if data.video}
|
|
64
|
+
<video src="https://teci-files.imgix.net/www/videos/{data.video}" autoplay="true" loop muted
|
|
65
|
+
class="absolute object-cover h-full w-full">
|
|
66
|
+
</video>
|
|
67
|
+
{:else if data.image}
|
|
68
|
+
<img src="https://teci-files.imgix.net/www/images/{data.image}?fmt=auto" alt={data.heading}
|
|
69
|
+
class="absolute object-cover h-full w-full"
|
|
70
|
+
>
|
|
71
|
+
{/if}
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</section>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} HeroProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} HeroEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} HeroSlots */
|
|
4
|
+
export default class Hero extends SvelteComponentTyped<{
|
|
5
|
+
data: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type HeroProps = typeof __propDef.props;
|
|
11
|
+
export type HeroEvents = typeof __propDef.events;
|
|
12
|
+
export type HeroSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
data: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<div class="bg-white">
|
|
2
|
+
<div class="mx-auto max-w-7xl py-12 px-6 lg:py-16 lg:px-8">
|
|
3
|
+
<p class="text-center text-lg font-semibold text-gray-600">Trusted by fire protection experts all over the world</p>
|
|
4
|
+
<div class="mt-6 grid grid-cols-2 gap-0.5 md:grid-cols-3 lg:mt-8">
|
|
5
|
+
<div class="col-span-1 flex justify-center bg-gray-50 py-8 px-8">
|
|
6
|
+
<img class="max-h-12" src="https://tailwindui.com/img/logos/transistor-logo-gray-400.svg" alt="Workcation">
|
|
7
|
+
</div>
|
|
8
|
+
<div class="col-span-1 flex justify-center bg-gray-50 py-8 px-8">
|
|
9
|
+
<img class="max-h-12" src="https://tailwindui.com/img/logos/mirage-logo-gray-400.svg" alt="Mirage">
|
|
10
|
+
</div>
|
|
11
|
+
<div class="col-span-1 flex justify-center bg-gray-50 py-8 px-8">
|
|
12
|
+
<img class="max-h-12" src="https://tailwindui.com/img/logos/tuple-logo-gray-400.svg" alt="Tuple">
|
|
13
|
+
</div>
|
|
14
|
+
<div class="col-span-1 flex justify-center bg-gray-50 py-8 px-8">
|
|
15
|
+
<img class="max-h-12" src="https://tailwindui.com/img/logos/laravel-logo-gray-400.svg" alt="Laravel">
|
|
16
|
+
</div>
|
|
17
|
+
<div class="col-span-1 flex justify-center bg-gray-50 py-8 px-8">
|
|
18
|
+
<img class="max-h-12" src="https://tailwindui.com/img/logos/statickit-logo-gray-400.svg" alt="StaticKit">
|
|
19
|
+
</div>
|
|
20
|
+
<div class="col-span-1 flex justify-center bg-gray-50 py-8 px-8">
|
|
21
|
+
<img class="max-h-12" src="https://tailwindui.com/img/logos/statamic-logo-gray-400.svg" alt="Statamic">
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} LogoCloudProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} LogoCloudEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} LogoCloudSlots */
|
|
4
|
+
export default class LogoCloud extends SvelteComponentTyped<{
|
|
5
|
+
[x: string]: never;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type LogoCloudProps = typeof __propDef.props;
|
|
11
|
+
export type LogoCloudEvents = typeof __propDef.events;
|
|
12
|
+
export type LogoCloudSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
[x: string]: never;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -1,46 +1,28 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import Video from './Video.svelte'
|
|
3
3
|
|
|
4
|
-
import { dev } from "$app/environment";
|
|
5
4
|
export let data;
|
|
6
5
|
|
|
7
6
|
let figureImage;
|
|
8
7
|
let figureLink;
|
|
9
8
|
|
|
10
|
-
if (
|
|
11
|
-
figureImage = data.image;
|
|
12
|
-
figureLink = data.image;
|
|
13
|
-
} else if (data.image) {
|
|
14
|
-
figureImage = data.image.startsWith("http")
|
|
15
|
-
? data.image
|
|
16
|
-
: "https://thunderheadeng-www.imgix.net" +
|
|
17
|
-
data.image +
|
|
18
|
-
"?w=576&ar=16:9&fit=crop&auto=compress&auto=format";
|
|
19
|
-
figureLink = data.image.startsWith("http")
|
|
20
|
-
? data.image
|
|
21
|
-
: "https://thunderheadeng-www.imgix.net" + data.image;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (dev && data.image) {
|
|
25
|
-
figureImage = data.image;
|
|
26
|
-
figureLink = data.link ? data.link : data.image;
|
|
27
|
-
} else if (data.image) {
|
|
9
|
+
if (data.image) {
|
|
28
10
|
if (data.image.startsWith("http")) {
|
|
29
11
|
figureImage = data.image;
|
|
30
12
|
figureLink = data.link ? data.link : data.image;
|
|
31
13
|
} else if (data.image.includes("gif")) {
|
|
32
|
-
figureImage = "https://
|
|
14
|
+
figureImage = "https://teci-files.imgix.net/www/images/" + data.image;
|
|
33
15
|
figureLink = data.link
|
|
34
16
|
? data.link
|
|
35
|
-
: "https://
|
|
17
|
+
: "https://teci-files.imgix.net/www/images/" + data.image;
|
|
36
18
|
} else {
|
|
37
19
|
figureImage =
|
|
38
|
-
"https://
|
|
20
|
+
"https://teci-files.imgix.net/www/images/" +
|
|
39
21
|
data.image +
|
|
40
22
|
"?w=576&ar=16:9&fit=crop&auto=compress&auto=format";
|
|
41
23
|
figureLink = data.link
|
|
42
24
|
? data.link
|
|
43
|
-
: "https://
|
|
25
|
+
: "https://teci-files.imgix.net/www/images/" + data.image;
|
|
44
26
|
}
|
|
45
27
|
}
|
|
46
28
|
</script>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
export let data
|
|
3
|
+
let toggleID = data.groups[0].id
|
|
4
|
+
|
|
5
|
+
function toggleSelection(id) {
|
|
6
|
+
toggleID = id
|
|
7
|
+
}
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<section class="overflow-hidden">
|
|
11
|
+
<div class="sm:align-center sm:flex sm:flex-col">
|
|
12
|
+
<h1 class="text-5xl font-bold tracking-tight text-gray-900 sm:text-center">{data.heading}</h1>
|
|
13
|
+
<p class="mt-5 text-xl text-gray-500 sm:text-center">{data.subheading}</p>
|
|
14
|
+
<div class="relative mt-6 max-w-xs w-full flex flex-row space-x-4 self-center justify-evenly rounded-lg bg-gray-100 p-0.5 sm:mt-8">
|
|
15
|
+
{#each data.groups as group}
|
|
16
|
+
<button type="button"
|
|
17
|
+
on:click={toggleSelection(group.id)}
|
|
18
|
+
id={group.id}
|
|
19
|
+
class="relative w-full whitespace-nowrap rounded-md py-2 text-sm font-medium border focus:z-10 focus:outline-none focus:ring-2 focus:ring-teci-blue-light
|
|
20
|
+
{toggleID == group.id ? "border-gray-200 bg-white text-gray-900 shadow-sm" : "border-transparent text-gray-700"}
|
|
21
|
+
">
|
|
22
|
+
{group.label}
|
|
23
|
+
</button>
|
|
24
|
+
{/each}
|
|
25
|
+
</div>
|
|
26
|
+
<p class="mt-4 text-md max-w-xl mx-auto text-gray-500 sm:text-center">{data.groups.find(x => x.id === toggleID).description}</p>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="mt-8 space-y-4 sm:grid sm:grid-cols-2 sm:gap-6 sm:space-y-0 lg:mx-auto lg:max-w-4xl xl:mx-0 xl:max-w-none xl:grid-cols-4">
|
|
29
|
+
{#each data.groups as group}
|
|
30
|
+
{#if (group.id == toggleID)}
|
|
31
|
+
{#each group.options as option}
|
|
32
|
+
<div class="max-w-xs mx-auto sm:odd:mr-0 sm:even:ml-0 divide-y divide-gray-200 border border-gray-200 {option.highlight ? "shadow-[inset_0_0_6px_0_rgb(0,43,127,1.0)]":"shadow-md"}">
|
|
33
|
+
<div class="p-6">
|
|
34
|
+
<h2 class="text-lg font-medium leading-6 text-gray-900">{option.label}</h2>
|
|
35
|
+
<p class="mt-4 text-sm text-gray-500">{option.text}</p>
|
|
36
|
+
<p class="mt-8">
|
|
37
|
+
{#if option.unit}
|
|
38
|
+
<span class="text-2xl align-super font-medium text-gray-500">{option.unit}</span>
|
|
39
|
+
{/if}
|
|
40
|
+
<span class="text-4xl font-bold tracking-tight text-gray-900">{option.price}</span>
|
|
41
|
+
{#if option.divisor}
|
|
42
|
+
<span class="text-base font-medium text-gray-500">{option.divisor}</span>
|
|
43
|
+
{/if}
|
|
44
|
+
</p>
|
|
45
|
+
<a href={option.cta_url} class="mt-8 block w-full border {(option.cta_color == "pyrosim" ? "border-pyrosim bg-pyrosim" : (data.color == "pathfinder" ? "border-pathfinder bg-pathfinder" : "border-teci-blue-dark bg-teci-blue-dark"))} py-2 text-center text-sm font-semibold text-white hover:bg-teci-blue-dark">{option.cta_label}</a>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="px-6 pt-6 pb-8">
|
|
48
|
+
<h3 class="text-sm font-medium text-gray-900">{option.features_text}</h3>
|
|
49
|
+
<ul class="mt-6 space-y-4">
|
|
50
|
+
{#each option.features as feature}
|
|
51
|
+
<li class="flex space-x-3">
|
|
52
|
+
<!-- Heroicon name: mini/check -->
|
|
53
|
+
<svg class="h-5 w-5 flex-shrink-0 text-green-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
54
|
+
<path fill-rule="evenodd" d="M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z" clip-rule="evenodd" />
|
|
55
|
+
</svg>
|
|
56
|
+
<span class="text-sm text-gray-500">{feature.text}</span>
|
|
57
|
+
</li>
|
|
58
|
+
{/each}
|
|
59
|
+
</ul>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
{/each}
|
|
63
|
+
{/if}
|
|
64
|
+
{/each}
|
|
65
|
+
</div>
|
|
66
|
+
<section class="mt-12 text-xl text-gray-500 sm:text-center">
|
|
67
|
+
<p>Apply for free academic or government review licenses.</p>
|
|
68
|
+
</section>
|
|
69
|
+
<section class="mt-4 text-md max-w-4xl mx-auto text-gray-500 sm:text-center">
|
|
70
|
+
<p>Educational licenses are available to students and instructors for academic, non-commercial use.</p><p>Review licenses are available to authorities (AHJs) for regulatory, non-commercial use..</p>
|
|
71
|
+
</section>
|
|
72
|
+
{#if data.ctas}
|
|
73
|
+
<div class="mt-4 flex gap-x-4 py-1 sm:justify-center">
|
|
74
|
+
{#each data.ctas as cta}
|
|
75
|
+
<a href={cta.url} class="inline-block px-4 py-1.5 text-base font-semibold leading-7 shadow-sm ring-1 ring-gray-900/10 hover:ring-gray-900/20 hover:bg-teci-blue-dark
|
|
76
|
+
{(cta.color == "pyrosim" ? "bg-pyrosim text-white" : (cta.color == "pathfinder" ? "bg-pathfinder text-white" : (cta.color == "white" ? "bg-white text-gray-600 hover:text-white" : "bg-teci-blue-dark text-white")))}
|
|
77
|
+
">
|
|
78
|
+
{cta.text}
|
|
79
|
+
<span class="hidden sm:inline {(cta.color == "white" ? "text-gray-600" : "text-white")}" aria-hidden="true">→</span>
|
|
80
|
+
</a>
|
|
81
|
+
{/each}
|
|
82
|
+
</div>
|
|
83
|
+
{/if}
|
|
84
|
+
</section>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} PricingTableProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} PricingTableEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} PricingTableSlots */
|
|
4
|
+
export default class PricingTable extends SvelteComponentTyped<{
|
|
5
|
+
data: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type PricingTableProps = typeof __propDef.props;
|
|
11
|
+
export type PricingTableEvents = typeof __propDef.events;
|
|
12
|
+
export type PricingTableSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
data: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
export let data
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<section class="bg-gray-50">
|
|
6
|
+
<div class="mx-auto max-w-7xl p-6 lg:p-8">
|
|
7
|
+
<div class="mx-auto max-w-4xl text-center">
|
|
8
|
+
<h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">{data.heading}</h2>
|
|
9
|
+
{#if data.subheading}
|
|
10
|
+
<p class="mt-3 text-xl text-gray-500 sm:mt-4">{data.subheading}</p>
|
|
11
|
+
{/if}
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="bg-white">
|
|
15
|
+
<div class="relative">
|
|
16
|
+
<div class="absolute inset-0 bg-gray-50"></div>
|
|
17
|
+
<div class="relative mx-auto max-w-7xl px-6 lg:px-8">
|
|
18
|
+
<div class="mx-auto max-w-4xl">
|
|
19
|
+
<dl class="bg-white shadow-lg sm:grid sm:grid-cols-3">
|
|
20
|
+
{#each data.stats as stat, i}
|
|
21
|
+
<div id="stat-{i}" class="flex flex-col border-b border-gray-100 p-6 text-center sm:border-0 sm:border-r sm:border-l">
|
|
22
|
+
<dt class="order-2 mt-2 text-lg font-medium leading-6 text-gray-500">{stat.label}</dt>
|
|
23
|
+
<dd class="order-1 text-5xl font-bold tracking-tight {(data.color == "pyrosim" ? "text-pyrosim" : (data.color == "pathfinder" ? "text-pathfinder" : "text-teci-blue-dark"))}">{stat.value}</dd>
|
|
24
|
+
</div>
|
|
25
|
+
{/each}
|
|
26
|
+
</dl>
|
|
27
|
+
</div>
|
|
28
|
+
<figure>
|
|
29
|
+
<img class="w-full" alt="World map with colored countries for Thunderhead software customers." src="https://teci-files.imgix.net/www/images/{data.image}?auto=compress&auto=format">
|
|
30
|
+
</figure>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</section>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} StatsProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} StatsEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} StatsSlots */
|
|
4
|
+
export default class Stats extends SvelteComponentTyped<{
|
|
5
|
+
data: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type StatsProps = typeof __propDef.props;
|
|
11
|
+
export type StatsEvents = typeof __propDef.events;
|
|
12
|
+
export type StatsSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
data: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import Icon from './Icon.svelte'
|
|
3
|
+
|
|
4
|
+
import { slide } from 'svelte/transition';
|
|
5
|
+
import { onMount } from 'svelte'
|
|
6
|
+
|
|
7
|
+
export let data;
|
|
8
|
+
|
|
9
|
+
let anchor;
|
|
10
|
+
let index = 0;
|
|
11
|
+
let interval = 12000;
|
|
12
|
+
let auto = true;
|
|
13
|
+
let slideInterval;
|
|
14
|
+
|
|
15
|
+
onMount(() => {
|
|
16
|
+
anchor = document.getElementById('slider');
|
|
17
|
+
setSlideAutomation();
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
function setSlideAutomation() {
|
|
21
|
+
if (auto) {
|
|
22
|
+
clearInterval(slideInterval);
|
|
23
|
+
slideInterval = setInterval(next, interval);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const prev = () => {
|
|
28
|
+
let amount;
|
|
29
|
+
if (index == 0) {
|
|
30
|
+
index = data.quotes.length - 1;
|
|
31
|
+
} else if (index <= data.quotes.length) {
|
|
32
|
+
index = (index - 1) % data.quotes.length;
|
|
33
|
+
}
|
|
34
|
+
setSlideAutomation();
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const next = () => {
|
|
38
|
+
index = (index + 1) % data.quotes.length;
|
|
39
|
+
setSlideAutomation();
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
function fadeSlide(node, options) {
|
|
43
|
+
const slideTrans = slide(node, options);
|
|
44
|
+
return {
|
|
45
|
+
duration: options.duration,
|
|
46
|
+
css: (t) => `
|
|
47
|
+
${slideTrans.css(t)}
|
|
48
|
+
opacity: ${t};
|
|
49
|
+
`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
</script>
|
|
53
|
+
|
|
54
|
+
<section id="slider" class="overflow-hidden">
|
|
55
|
+
<div class="relative mx-auto max-w-4xl lg:max-w-none mt-10 lg:px-4 lg:py-8 lg:mt-0">
|
|
56
|
+
<svg
|
|
57
|
+
class="absolute right-full top-1/2 hidden translate-x-1/2 -translate-y-1/2 transform lg:block"
|
|
58
|
+
width="404"
|
|
59
|
+
height="784"
|
|
60
|
+
fill="none"
|
|
61
|
+
viewBox="0 0 404 784"
|
|
62
|
+
aria-hidden="true"
|
|
63
|
+
>
|
|
64
|
+
<defs>
|
|
65
|
+
<pattern
|
|
66
|
+
id="56409614-3d62-4985-9a10-7ca758a8f4f0"
|
|
67
|
+
x="0"
|
|
68
|
+
y="0"
|
|
69
|
+
width="20"
|
|
70
|
+
height="20"
|
|
71
|
+
patternUnits="userSpaceOnUse"
|
|
72
|
+
>
|
|
73
|
+
<rect
|
|
74
|
+
x="0"
|
|
75
|
+
y="0"
|
|
76
|
+
width="4"
|
|
77
|
+
height="4"
|
|
78
|
+
class="text-gray-200"
|
|
79
|
+
fill="currentColor"></rect>
|
|
80
|
+
</pattern>
|
|
81
|
+
</defs>
|
|
82
|
+
<rect
|
|
83
|
+
width="404"
|
|
84
|
+
height="784"
|
|
85
|
+
fill="url(#56409614-3d62-4985-9a10-7ca758a8f4f0)"></rect>
|
|
86
|
+
</svg>
|
|
87
|
+
<div
|
|
88
|
+
class="relative flex h-auto flex-col items-center justify-items-center"
|
|
89
|
+
>
|
|
90
|
+
{#each [data.quotes[index]] as quote (index)}
|
|
91
|
+
<div
|
|
92
|
+
transition:fadeSlide="{{ duration: 300 }}"
|
|
93
|
+
class="relative mx-auto w-full lg:flex lg:items-center"
|
|
94
|
+
>
|
|
95
|
+
<div class="hidden lg:block lg:flex-shrink-0">
|
|
96
|
+
<img
|
|
97
|
+
class="h-64 w-64 rounded-full xl:h-80 xl:w-80"
|
|
98
|
+
src="https://teci-files.imgix.net/www/images/{quote.image}?w=320&fit=facearea,crop&facepad=3&monochrome=9B9B9B&auto=compress&auto=format"
|
|
99
|
+
alt="Image of {quote.fullname}"
|
|
100
|
+
title="{quote.fullname}"
|
|
101
|
+
/>
|
|
102
|
+
</div>
|
|
103
|
+
<div class="relative w-full lg:ml-10">
|
|
104
|
+
<svg
|
|
105
|
+
class="absolute top-0 left-0 h-24 w-24 -translate-x-0 -translate-y-12 transform text-teci-blue-light opacity-10 lg:-translate-x-8 lg:-translate-y-10"
|
|
106
|
+
stroke="currentColor"
|
|
107
|
+
fill="none"
|
|
108
|
+
viewBox="0 0 144 144"
|
|
109
|
+
aria-hidden="true"
|
|
110
|
+
>
|
|
111
|
+
<path
|
|
112
|
+
stroke-width="2"
|
|
113
|
+
d="M41.485 15C17.753 31.753 1 59.208 1 89.455c0 24.664 14.891 39.09 32.109 39.09 16.287 0 28.386-13.03 28.386-28.387 0-15.356-10.703-26.524-24.663-26.524-2.792 0-6.515.465-7.446.93 2.327-15.821 17.218-34.435 32.11-43.742L41.485 15zm80.04 0c-23.268 16.753-40.02 44.208-40.02 74.455 0 24.664 14.891 39.09 32.109 39.09 15.822 0 28.386-13.03 28.386-28.387 0-15.356-11.168-26.524-25.129-26.524-2.792 0-6.049.465-6.98.93 2.327-15.821 16.753-34.435 31.644-43.742L121.525 15z"
|
|
114
|
+
></path>
|
|
115
|
+
</svg>
|
|
116
|
+
<blockquote class="relative block w-full min-w-full">
|
|
117
|
+
<div class="relative w-full text-2xl font-medium leading-9 text-gray-700">
|
|
118
|
+
<p>{@html quote.text}</p>
|
|
119
|
+
<svg
|
|
120
|
+
class="absolute bottom-0 right-0 h-24 w-24 translate-y-8 rotate-180 transform text-teci-blue-light opacity-10"
|
|
121
|
+
stroke="currentColor"
|
|
122
|
+
fill="none"
|
|
123
|
+
viewBox="0 0 144 144"
|
|
124
|
+
aria-hidden="true"
|
|
125
|
+
>
|
|
126
|
+
<path
|
|
127
|
+
stroke-width="2"
|
|
128
|
+
d="M41.485 15C17.753 31.753 1 59.208 1 89.455c0 24.664 14.891 39.09 32.109 39.09 16.287 0 28.386-13.03 28.386-28.387 0-15.356-10.703-26.524-24.663-26.524-2.792 0-6.515.465-7.446.93 2.327-15.821 17.218-34.435 32.11-43.742L41.485 15zm80.04 0c-23.268 16.753-40.02 44.208-40.02 74.455 0 24.664 14.891 39.09 32.109 39.09 15.822 0 28.386-13.03 28.386-28.387 0-15.356-11.168-26.524-25.129-26.524-2.792 0-6.049.465-6.98.93 2.327-15.821 16.753-34.435 31.644-43.742L121.525 15z"
|
|
129
|
+
></path>
|
|
130
|
+
</svg>
|
|
131
|
+
</div>
|
|
132
|
+
<footer class="mt-8">
|
|
133
|
+
<div class="flex">
|
|
134
|
+
<div class="flex-shrink-0 lg:hidden">
|
|
135
|
+
<img
|
|
136
|
+
class="h-12 w-12 rounded-full"
|
|
137
|
+
src="https://teci-files.imgix.net/www/images/{quote.image}?w=48&fit=clip&monochrome=9B9B9B&auto=compress&auto=format"
|
|
138
|
+
alt="Thumbnail Image of {quote.fullname}"
|
|
139
|
+
/>
|
|
140
|
+
</div>
|
|
141
|
+
<div class="ml-4 lg:ml-0">
|
|
142
|
+
<div class="text-base text-gray-900">
|
|
143
|
+
{quote.fullname}
|
|
144
|
+
</div>
|
|
145
|
+
<div
|
|
146
|
+
class="text-base font-medium {data.color == 'pyrosim'
|
|
147
|
+
? 'text-pyrosim'
|
|
148
|
+
: data.color == 'pathfinder'
|
|
149
|
+
? 'text-pathfinder'
|
|
150
|
+
: 'text-teci-blue-dark'}"
|
|
151
|
+
>
|
|
152
|
+
{quote.fulltitle}
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
</footer>
|
|
157
|
+
</blockquote>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
{/each}
|
|
161
|
+
<div class="bg-white relative w-half pt-6 md:pt-2 lg:pt-4 flex flex-row space-x-8 justify-center">
|
|
162
|
+
<button type="button" title="Previous" on:click="{prev}">
|
|
163
|
+
<Icon icon="icon-arrow_left" classes="text-4xl text-gray-400" />
|
|
164
|
+
</button>
|
|
165
|
+
<button type="button" title="Next" on:click="{next}">
|
|
166
|
+
<Icon icon="icon-arrow_right" classes="text-4xl text-gray-400" />
|
|
167
|
+
</button>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</section>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @typedef {typeof __propDef.props} TestimonialProps */
|
|
2
|
+
/** @typedef {typeof __propDef.events} TestimonialEvents */
|
|
3
|
+
/** @typedef {typeof __propDef.slots} TestimonialSlots */
|
|
4
|
+
export default class Testimonial extends SvelteComponentTyped<{
|
|
5
|
+
data: any;
|
|
6
|
+
}, {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
}, {}> {
|
|
9
|
+
}
|
|
10
|
+
export type TestimonialProps = typeof __propDef.props;
|
|
11
|
+
export type TestimonialEvents = typeof __propDef.events;
|
|
12
|
+
export type TestimonialSlots = typeof __propDef.slots;
|
|
13
|
+
import { SvelteComponentTyped } from "svelte";
|
|
14
|
+
declare const __propDef: {
|
|
15
|
+
props: {
|
|
16
|
+
data: any;
|
|
17
|
+
};
|
|
18
|
+
events: {
|
|
19
|
+
[evt: string]: CustomEvent<any>;
|
|
20
|
+
};
|
|
21
|
+
slots: {};
|
|
22
|
+
};
|
|
23
|
+
export {};
|
package/components/Video.svelte
CHANGED
|
@@ -1,24 +1,118 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
let
|
|
2
|
+
import { onMount } from 'svelte'
|
|
3
|
+
|
|
4
|
+
export let data={};
|
|
5
|
+
export let v="";
|
|
6
|
+
export let thumbnail="";
|
|
7
|
+
|
|
8
|
+
let id="";
|
|
9
|
+
let thumb="";
|
|
10
|
+
let youtube=false;
|
|
11
|
+
let videoURL="";
|
|
12
|
+
|
|
13
|
+
onMount(() => {
|
|
14
|
+
var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy"));
|
|
15
|
+
|
|
16
|
+
if ("IntersectionObserver" in window) {
|
|
17
|
+
var lazyVideoObserver = new IntersectionObserver(function(entries, observer) {
|
|
18
|
+
entries.forEach(function(video) {
|
|
19
|
+
if (video.isIntersecting) {
|
|
20
|
+
for (var source in video.target.children) {
|
|
21
|
+
var videoSource = video.target.children[source];
|
|
22
|
+
if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") {
|
|
23
|
+
videoSource.src = videoSource.dataset.src;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
video.target.load();
|
|
28
|
+
video.target.classList.remove("lazy");
|
|
29
|
+
lazyVideoObserver.unobserve(video.target);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
lazyVideos.forEach(function(lazyVideo) {
|
|
35
|
+
lazyVideoObserver.observe(lazyVideo);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
})
|
|
5
39
|
|
|
6
40
|
if (v) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
41
|
+
if (v.includes("mp4")) {
|
|
42
|
+
youtube = false;
|
|
43
|
+
videoURL = `https://teci-files.imgix.net/www/videos/${v}`;
|
|
44
|
+
} else {
|
|
45
|
+
youtube = true;
|
|
46
|
+
id = v;
|
|
47
|
+
};
|
|
48
|
+
} else if (data.v) {
|
|
49
|
+
if (data.v.includes("mp4")) {
|
|
50
|
+
youtube = false;
|
|
51
|
+
videoURL = `https://teci-files.imgix.net/www/videos/${data.v}`;
|
|
52
|
+
} else {
|
|
53
|
+
youtube = true;
|
|
54
|
+
id = data.v;
|
|
55
|
+
};
|
|
10
56
|
} else {
|
|
11
57
|
id = "";
|
|
58
|
+
videoURL = "";
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
if (thumbnail) {
|
|
62
|
+
thumb = `https://teci-files.imgix.net/www/images/${thumbnail}?w=1214&fit=clip&auto=compress&auto=format`;
|
|
63
|
+
} else if (data.thumbnail) {
|
|
64
|
+
thumb = `https://teci-files.imgix.net/www/images/${data.thumbnail}?w=1214&fit=clip&auto=compress&auto=format`;
|
|
65
|
+
} else if (id) {
|
|
66
|
+
if (youtube) {
|
|
67
|
+
thumb = `https://img.youtube.com/vi/${id}/hqdefault.jpg`;
|
|
68
|
+
}
|
|
12
69
|
}
|
|
13
70
|
</script>
|
|
14
71
|
|
|
15
|
-
<section class="aspect-video w-full border border-gray-200 bg-black shadow-md">
|
|
16
|
-
|
|
17
|
-
|
|
72
|
+
<section class="aspect-video not-prose w-full border border-gray-200 bg-black shadow-md">
|
|
73
|
+
{#if youtube}
|
|
74
|
+
<iframe
|
|
18
75
|
title="YouTube Video ID {id}"
|
|
19
76
|
class="aspect-video w-full"
|
|
20
77
|
frameborder="0"
|
|
21
|
-
allow="
|
|
78
|
+
allow="autoplay; encrypted-media"
|
|
22
79
|
allowfullscreen
|
|
80
|
+
src="https://www.youtube.com/embed/${id}?autoplay=1&start=0&mute=1"
|
|
81
|
+
srcdoc="{`
|
|
82
|
+
<style>
|
|
83
|
+
body, .youtubeembed {
|
|
84
|
+
width: 100%;
|
|
85
|
+
height: 100%;
|
|
86
|
+
margin: 0;
|
|
87
|
+
position: absolute;
|
|
88
|
+
display: flex;
|
|
89
|
+
justify-content: center;
|
|
90
|
+
object-fit: cover;
|
|
91
|
+
}
|
|
92
|
+
</style>
|
|
93
|
+
<a
|
|
94
|
+
href='https://www.youtube.com/embed/${id}?autoplay=1&start=0&mute=1'
|
|
95
|
+
class='youtubeembed'
|
|
96
|
+
>
|
|
97
|
+
<img
|
|
98
|
+
src='${thumb}'
|
|
99
|
+
class='youtubeembed'
|
|
100
|
+
/>
|
|
101
|
+
<svg
|
|
102
|
+
version='1.1'
|
|
103
|
+
viewBox='0 0 68 48'
|
|
104
|
+
width='68px'
|
|
105
|
+
style='position: relative;'
|
|
106
|
+
>
|
|
107
|
+
<path d='M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z' fill='#f00'></path>
|
|
108
|
+
<path d='M 45,24 27,14 27,34' fill='#fff'></path>
|
|
109
|
+
</svg>
|
|
110
|
+
</a>
|
|
111
|
+
`}"
|
|
23
112
|
/>
|
|
24
|
-
|
|
113
|
+
{:else}
|
|
114
|
+
<video class="lazy aspect-video w-full" autoplay muted loop playsinline controls poster={thumb}>
|
|
115
|
+
<source data-src={videoURL} type="video/mp4">
|
|
116
|
+
</video>
|
|
117
|
+
{/if}
|
|
118
|
+
</section>
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
export default class Video extends SvelteComponentTyped<{
|
|
5
5
|
data?: {};
|
|
6
6
|
v?: string;
|
|
7
|
+
thumbnail?: string;
|
|
7
8
|
}, {
|
|
8
9
|
[evt: string]: CustomEvent<any>;
|
|
9
10
|
}, {}> {
|
|
@@ -16,6 +17,7 @@ declare const __propDef: {
|
|
|
16
17
|
props: {
|
|
17
18
|
data?: {};
|
|
18
19
|
v?: string;
|
|
20
|
+
thumbnail?: string;
|
|
19
21
|
};
|
|
20
22
|
events: {
|
|
21
23
|
[evt: string]: CustomEvent<any>;
|
package/layouts/blocks.svelte
CHANGED
|
@@ -12,6 +12,15 @@
|
|
|
12
12
|
import TrialForm from "../components/TrialForm.svelte";
|
|
13
13
|
import Video from "../components/Video.svelte";
|
|
14
14
|
import MetaSocial from "../components/MetaSocial.svelte";
|
|
15
|
+
import Hero from "../components/Hero.svelte";
|
|
16
|
+
import CTABranded from "../components/CTABranded.svelte";
|
|
17
|
+
import FeatureGrid from "../components/FeatureGrid.svelte";
|
|
18
|
+
import LogoCloud from "../components/LogoCloud.svelte";
|
|
19
|
+
import CtaSplitImage from "../components/CTASplitImage.svelte";
|
|
20
|
+
import ContentTwoColumns from "../components/ContentTwoColumns.svelte";
|
|
21
|
+
import PricingTable from "../components/PricingTable.svelte";
|
|
22
|
+
import Stats from "../components/Stats.svelte";
|
|
23
|
+
import Testimonial from "../components/Testimonial.svelte";
|
|
15
24
|
|
|
16
25
|
let blocks = [
|
|
17
26
|
{ ref: "cta-center", component: CTA },
|
|
@@ -23,6 +32,15 @@
|
|
|
23
32
|
{ ref: "three-column", component: ThreeColumn },
|
|
24
33
|
{ ref: "trial-form", component: TrialForm },
|
|
25
34
|
{ ref: "video", component: Video },
|
|
35
|
+
{ ref: "hero", component: Hero },
|
|
36
|
+
{ ref: "cta-branded", component: CTABranded },
|
|
37
|
+
{ ref: "feature-grid", component: FeatureGrid },
|
|
38
|
+
{ ref: "logo-cloud", component: LogoCloud },
|
|
39
|
+
{ ref: "cta-split-image", component: CtaSplitImage },
|
|
40
|
+
{ ref: "content-two-columns", component: ContentTwoColumns },
|
|
41
|
+
{ ref: "pricing-table", component: PricingTable },
|
|
42
|
+
{ ref: "stats", component: Stats },
|
|
43
|
+
{ ref: "testimonial", component: Testimonial },
|
|
26
44
|
];
|
|
27
45
|
|
|
28
46
|
export let title;
|
|
@@ -45,13 +63,13 @@
|
|
|
45
63
|
featuredImage = images[0];
|
|
46
64
|
} else {
|
|
47
65
|
featuredImage =
|
|
48
|
-
"https://
|
|
66
|
+
"https://teci-files.imgix.net/www/images/" +
|
|
49
67
|
images[0] +
|
|
50
68
|
"?w=1200&h=627&fit=crop&auto=compress&auto=format";
|
|
51
69
|
}
|
|
52
70
|
} else {
|
|
53
71
|
featuredImage =
|
|
54
|
-
"https://files.
|
|
72
|
+
"https://teci-files.imgix.net/www/images/teci_icon_250.png";
|
|
55
73
|
}
|
|
56
74
|
</script>
|
|
57
75
|
|
|
@@ -63,7 +81,7 @@
|
|
|
63
81
|
{/if}
|
|
64
82
|
</svelte:head>
|
|
65
83
|
|
|
66
|
-
<article class="flex flex-col space-y-
|
|
84
|
+
<article class="flex flex-col space-y-16 {layout}">
|
|
67
85
|
{#each page_sections as section}
|
|
68
86
|
{#if section && section.fieldGroup === "sidebar-content"}
|
|
69
87
|
<svelte:component
|
package/package.json
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tecitheme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"svelte": true,
|
|
5
5
|
"devDependencies": {
|
|
6
6
|
"@jsdevtools/rehype-toc": "^3.0.2",
|
|
7
|
-
"@sveltejs/adapter-netlify": "
|
|
8
|
-
"@sveltejs/kit": "1.
|
|
9
|
-
"@sveltejs/package": "^1.0.
|
|
7
|
+
"@sveltejs/adapter-netlify": "2.0.4",
|
|
8
|
+
"@sveltejs/kit": "1.6.0",
|
|
9
|
+
"@sveltejs/package": "^1.0.2",
|
|
10
10
|
"@tailwindcss/forms": "^0.5.3",
|
|
11
|
-
"@tailwindcss/typography": "^0.5.
|
|
11
|
+
"@tailwindcss/typography": "^0.5.9",
|
|
12
12
|
"@types/cookie": "^0.5.1",
|
|
13
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
14
|
-
"@typescript-eslint/parser": "^5.
|
|
13
|
+
"@typescript-eslint/eslint-plugin": "^5.52.0",
|
|
14
|
+
"@typescript-eslint/parser": "^5.52.0",
|
|
15
15
|
"autoprefixer": "^10.4.13",
|
|
16
16
|
"dotenv": "^16.0.3",
|
|
17
17
|
"encoding": "^0.1.13",
|
|
18
|
-
"eslint": "^8.
|
|
19
|
-
"eslint-config-prettier": "^8.
|
|
18
|
+
"eslint": "^8.34.0",
|
|
19
|
+
"eslint-config-prettier": "^8.6.0",
|
|
20
20
|
"eslint-plugin-svelte3": "^4.0.0",
|
|
21
|
-
"html-to-text": "^
|
|
21
|
+
"html-to-text": "^9.0.4",
|
|
22
22
|
"markdown-yaml-metadata-parser": "^3.0.0",
|
|
23
23
|
"mdsvex": "^0.10.6",
|
|
24
|
-
"postcss": "^8.4.
|
|
25
|
-
"prettier": "^2.
|
|
26
|
-
"prettier-plugin-tailwindcss": "^0.
|
|
24
|
+
"postcss": "^8.4.21",
|
|
25
|
+
"prettier": "^2.8.4",
|
|
26
|
+
"prettier-plugin-tailwindcss": "^0.2.2",
|
|
27
27
|
"rehype-parse": "^8.0.4",
|
|
28
28
|
"rehype-slug": "^5.1.0",
|
|
29
29
|
"rehype-stringify": "^9.0.3",
|
|
30
30
|
"stream": "^0.0.2",
|
|
31
|
-
"svelte": "^3.
|
|
32
|
-
"svelte-check": "^
|
|
31
|
+
"svelte": "^3.55.1",
|
|
32
|
+
"svelte-check": "^3.0.3",
|
|
33
33
|
"svelte-paginate": "^0.1.0",
|
|
34
|
-
"svelte-preprocess": "^
|
|
35
|
-
"svelte2tsx": "^0.
|
|
36
|
-
"tailwindcss": "^3.2.
|
|
37
|
-
"tslib": "^2.
|
|
38
|
-
"typescript": "^4.9.
|
|
34
|
+
"svelte-preprocess": "^5.0.1",
|
|
35
|
+
"svelte2tsx": "^0.6.1",
|
|
36
|
+
"tailwindcss": "^3.2.6",
|
|
37
|
+
"tslib": "^2.5.0",
|
|
38
|
+
"typescript": "^4.9.5",
|
|
39
39
|
"uuid-by-string": "^4.0.0",
|
|
40
|
-
"vite": "^
|
|
40
|
+
"vite": "^4.1.1",
|
|
41
41
|
"vite-plugin-autoimport": "^1.6.6"
|
|
42
42
|
},
|
|
43
43
|
"type": "module",
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@lukeed/uuid": "^2.0.0",
|
|
46
46
|
"cookie": "^0.5.0",
|
|
47
|
-
"katex": "^0.16.
|
|
48
|
-
"svelte": "^3.
|
|
47
|
+
"katex": "^0.16.4",
|
|
48
|
+
"svelte": "^3.55.1"
|
|
49
49
|
},
|
|
50
50
|
"exports": {
|
|
51
51
|
"./package.json": "./package.json",
|
|
@@ -53,20 +53,29 @@
|
|
|
53
53
|
"./components/Banner.svelte": "./components/Banner.svelte",
|
|
54
54
|
"./components/Button.svelte": "./components/Button.svelte",
|
|
55
55
|
"./components/CTA.svelte": "./components/CTA.svelte",
|
|
56
|
+
"./components/CTABranded.svelte": "./components/CTABranded.svelte",
|
|
57
|
+
"./components/CTASplitImage.svelte": "./components/CTASplitImage.svelte",
|
|
56
58
|
"./components/Card.svelte": "./components/Card.svelte",
|
|
59
|
+
"./components/ContentTwoColumns.svelte": "./components/ContentTwoColumns.svelte",
|
|
57
60
|
"./components/CountrySelector.svelte": "./components/CountrySelector.svelte",
|
|
61
|
+
"./components/FeatureGrid.svelte": "./components/FeatureGrid.svelte",
|
|
58
62
|
"./components/Figure.svelte": "./components/Figure.svelte",
|
|
59
63
|
"./components/Footer.svelte": "./components/Footer.svelte",
|
|
60
64
|
"./components/Header.svelte": "./components/Header.svelte",
|
|
61
65
|
"./components/HeadingCentered.svelte": "./components/HeadingCentered.svelte",
|
|
66
|
+
"./components/Hero.svelte": "./components/Hero.svelte",
|
|
62
67
|
"./components/Icon.svelte": "./components/Icon.svelte",
|
|
68
|
+
"./components/LogoCloud.svelte": "./components/LogoCloud.svelte",
|
|
63
69
|
"./components/Math.svelte": "./components/Math.svelte",
|
|
64
70
|
"./components/MediaFeature.svelte": "./components/MediaFeature.svelte",
|
|
65
71
|
"./components/MetaSocial.svelte": "./components/MetaSocial.svelte",
|
|
66
72
|
"./components/Modal.svelte": "./components/Modal.svelte",
|
|
67
73
|
"./components/NewsGrid.svelte": "./components/NewsGrid.svelte",
|
|
74
|
+
"./components/PricingTable.svelte": "./components/PricingTable.svelte",
|
|
68
75
|
"./components/SidebarContent.svelte": "./components/SidebarContent.svelte",
|
|
76
|
+
"./components/Stats.svelte": "./components/Stats.svelte",
|
|
69
77
|
"./components/Subscribe.svelte": "./components/Subscribe.svelte",
|
|
78
|
+
"./components/Testimonial.svelte": "./components/Testimonial.svelte",
|
|
70
79
|
"./components/ThreeColumn.svelte": "./components/ThreeColumn.svelte",
|
|
71
80
|
"./components/TrialForm.svelte": "./components/TrialForm.svelte",
|
|
72
81
|
"./components/Video.svelte": "./components/Video.svelte",
|
package/site_config.json
CHANGED