tecitheme 0.7.6 → 0.8.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/package.json +1 -1
- package/dist/assets/TECi_logo.svelte +0 -177
- package/dist/assets/TECi_logo.svelte.d.ts +0 -23
- package/dist/assets/js/store.d.ts +0 -3
- package/dist/assets/js/store.js +0 -4
- package/dist/components/Accordion.svelte +0 -74
- package/dist/components/Accordion.svelte.d.ts +0 -27
- package/dist/components/Banner.svelte +0 -91
- package/dist/components/Banner.svelte.d.ts +0 -33
- package/dist/components/Button.svelte +0 -21
- package/dist/components/Button.svelte.d.ts +0 -37
- package/dist/components/CTA.svelte +0 -51
- package/dist/components/CTA.svelte.d.ts +0 -23
- package/dist/components/CTASplitImage.svelte +0 -34
- package/dist/components/CTASplitImage.svelte.d.ts +0 -23
- package/dist/components/Card.svelte +0 -91
- package/dist/components/Card.svelte.d.ts +0 -25
- package/dist/components/CognitoForm.svelte +0 -24
- package/dist/components/CognitoForm.svelte.d.ts +0 -27
- package/dist/components/ContentTwoColumns.svelte +0 -54
- package/dist/components/ContentTwoColumns.svelte.d.ts +0 -23
- package/dist/components/CountrySelector.svelte +0 -167
- package/dist/components/CountrySelector.svelte.d.ts +0 -27
- package/dist/components/FeatureGrid.svelte +0 -44
- package/dist/components/FeatureGrid.svelte.d.ts +0 -23
- package/dist/components/Figure.svelte +0 -40
- package/dist/components/Figure.svelte.d.ts +0 -29
- package/dist/components/Footer.svelte +0 -243
- package/dist/components/Footer.svelte.d.ts +0 -23
- package/dist/components/Header.svelte +0 -1178
- package/dist/components/Header.svelte.d.ts +0 -30
- package/dist/components/HeadingCentered.svelte +0 -38
- package/dist/components/HeadingCentered.svelte.d.ts +0 -23
- package/dist/components/Hero.svelte +0 -82
- package/dist/components/Hero.svelte.d.ts +0 -23
- package/dist/components/Icon.svelte +0 -162
- package/dist/components/Icon.svelte.d.ts +0 -25
- package/dist/components/LogoCloud.svelte +0 -25
- package/dist/components/LogoCloud.svelte.d.ts +0 -23
- package/dist/components/Math.svelte +0 -24
- package/dist/components/Math.svelte.d.ts +0 -25
- package/dist/components/MediaFeature.svelte +0 -76
- package/dist/components/MediaFeature.svelte.d.ts +0 -23
- package/dist/components/Modal.svelte +0 -69
- package/dist/components/Modal.svelte.d.ts +0 -29
- package/dist/components/NewsGrid.svelte +0 -196
- package/dist/components/NewsGrid.svelte.d.ts +0 -23
- package/dist/components/PricingTable.svelte +0 -100
- package/dist/components/PricingTable.svelte.d.ts +0 -23
- package/dist/components/SidebarContent.svelte +0 -124
- package/dist/components/SidebarContent.svelte.d.ts +0 -33
- package/dist/components/Stats.svelte +0 -40
- package/dist/components/Stats.svelte.d.ts +0 -23
- package/dist/components/Testimonial.svelte +0 -168
- package/dist/components/Testimonial.svelte.d.ts +0 -23
- package/dist/components/ThreeColumn.svelte +0 -20
- package/dist/components/ThreeColumn.svelte.d.ts +0 -23
- package/dist/components/TrialForm.svelte +0 -296
- package/dist/components/TrialForm.svelte.d.ts +0 -14
- package/dist/components/Video.svelte +0 -125
- package/dist/components/Video.svelte.d.ts +0 -27
- package/dist/components/Wrap.svelte +0 -12
- package/dist/components/Wrap.svelte.d.ts +0 -31
- package/dist/get-content.d.ts +0 -9
- package/dist/get-content.js +0 -98
- package/dist/index.d.ts +0 -31
- package/dist/index.js +0 -31
- package/dist/layouts/blocks.svelte +0 -95
- package/dist/layouts/blocks.svelte.d.ts +0 -47
- package/dist/req_utils.d.ts +0 -3
- package/dist/req_utils.js +0 -63
- package/dist/site_config.json +0 -13
- package/dist/utils.d.ts +0 -5
- package/dist/utils.js +0 -162
- package/dist/variables.d.ts +0 -3
- package/dist/variables.js +0 -5
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import Button from './Button.svelte'
|
|
3
|
-
import Icon from './Icon.svelte'
|
|
4
|
-
|
|
5
|
-
import { getColorStyles } from '../utils'
|
|
6
|
-
import { slide } from 'svelte/transition';
|
|
7
|
-
import { quintInOut } from 'svelte/easing';
|
|
8
|
-
import { onMount } from 'svelte'
|
|
9
|
-
|
|
10
|
-
export let data = {};
|
|
11
|
-
|
|
12
|
-
let index = 0;
|
|
13
|
-
let interval = 12000;
|
|
14
|
-
let auto = true;
|
|
15
|
-
let slideInterval;
|
|
16
|
-
let id;
|
|
17
|
-
|
|
18
|
-
if (data.name) {
|
|
19
|
-
id = encodeURIComponent(data.name).toLowerCase()
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
onMount(() => {
|
|
23
|
-
setSlideAutomation();
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
function setSlideAutomation() {
|
|
27
|
-
if (auto) {
|
|
28
|
-
clearInterval(slideInterval);
|
|
29
|
-
slideInterval = setInterval(next, interval);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const prev = () => {
|
|
34
|
-
let amount;
|
|
35
|
-
if (index == 0) {
|
|
36
|
-
index = data.quotes.length - 1;
|
|
37
|
-
} else if (index <= data.quotes.length) {
|
|
38
|
-
index = (index - 1) % data.quotes.length;
|
|
39
|
-
}
|
|
40
|
-
setSlideAutomation();
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const next = () => {
|
|
44
|
-
index = (index + 1) % data.quotes.length;
|
|
45
|
-
setSlideAutomation();
|
|
46
|
-
};
|
|
47
|
-
</script>
|
|
48
|
-
|
|
49
|
-
<section {id} class="overflow-hidden">
|
|
50
|
-
<div class="relative mx-auto max-w-4xl lg:max-w-none mt-10 lg:px-4 lg:py-8 lg:mt-0">
|
|
51
|
-
<svg
|
|
52
|
-
class="absolute right-full top-1/2 hidden translate-x-1/2 -translate-y-1/2 transform lg:block"
|
|
53
|
-
width="404"
|
|
54
|
-
height="784"
|
|
55
|
-
fill="none"
|
|
56
|
-
viewBox="0 0 404 784"
|
|
57
|
-
aria-hidden="true"
|
|
58
|
-
>
|
|
59
|
-
<defs>
|
|
60
|
-
<pattern
|
|
61
|
-
id="56409614-3d62-4985-9a10-7ca758a8f4f0"
|
|
62
|
-
x="0"
|
|
63
|
-
y="0"
|
|
64
|
-
width="20"
|
|
65
|
-
height="20"
|
|
66
|
-
patternUnits="userSpaceOnUse"
|
|
67
|
-
>
|
|
68
|
-
<rect
|
|
69
|
-
x="0"
|
|
70
|
-
y="0"
|
|
71
|
-
width="4"
|
|
72
|
-
height="4"
|
|
73
|
-
class="{getColorStyles('text', data.color)} opacity-20"
|
|
74
|
-
fill="currentColor"></rect>
|
|
75
|
-
</pattern>
|
|
76
|
-
</defs>
|
|
77
|
-
<rect
|
|
78
|
-
width="404"
|
|
79
|
-
height="784"
|
|
80
|
-
fill="url(#56409614-3d62-4985-9a10-7ca758a8f4f0)"></rect>
|
|
81
|
-
</svg>
|
|
82
|
-
<div
|
|
83
|
-
class="relative flex h-auto flex-col items-center justify-items-center"
|
|
84
|
-
>
|
|
85
|
-
{#each [data.quotes[index]] as quote (index)}
|
|
86
|
-
<div transition:slide={{ duration: 1000, easing:quintInOut, axis: 'y' }}
|
|
87
|
-
class="relative mx-auto w-full lg:flex lg:items-center"
|
|
88
|
-
>
|
|
89
|
-
<div class="hidden lg:block lg:flex-shrink-0">
|
|
90
|
-
<img
|
|
91
|
-
class="h-64 w-64 rounded-full xl:h-80 xl:w-80"
|
|
92
|
-
src="https://teci.imgix.net/www/images/{quote.image}?w=320&fit=facearea,crop&facepad=3&monochrome=9B9B9B&auto=compress&auto=format"
|
|
93
|
-
alt="Image of {quote.fullname}"
|
|
94
|
-
title="{quote.fullname}"
|
|
95
|
-
/>
|
|
96
|
-
</div>
|
|
97
|
-
<div class="relative w-full lg:ml-10">
|
|
98
|
-
<svg
|
|
99
|
-
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"
|
|
100
|
-
stroke="currentColor"
|
|
101
|
-
fill="none"
|
|
102
|
-
viewBox="0 0 144 144"
|
|
103
|
-
aria-hidden="true"
|
|
104
|
-
>
|
|
105
|
-
<path
|
|
106
|
-
stroke-width="2"
|
|
107
|
-
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"
|
|
108
|
-
></path>
|
|
109
|
-
</svg>
|
|
110
|
-
<blockquote class="relative block w-full min-w-full">
|
|
111
|
-
<div class="relative w-full text-2xl font-medium leading-9 text-gray-700">
|
|
112
|
-
<p>{@html quote.text}</p>
|
|
113
|
-
<svg
|
|
114
|
-
class="absolute bottom-0 right-0 h-24 w-24 translate-y-8 rotate-180 transform text-teci-blue-light opacity-10"
|
|
115
|
-
stroke="currentColor"
|
|
116
|
-
fill="none"
|
|
117
|
-
viewBox="0 0 144 144"
|
|
118
|
-
aria-hidden="true"
|
|
119
|
-
>
|
|
120
|
-
<path
|
|
121
|
-
stroke-width="2"
|
|
122
|
-
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"
|
|
123
|
-
></path>
|
|
124
|
-
</svg>
|
|
125
|
-
</div>
|
|
126
|
-
<footer class="mt-8">
|
|
127
|
-
<div class="flex flex-col sm:flex-row justify-between">
|
|
128
|
-
<div class="flex flex-row">
|
|
129
|
-
<div class="flex-shrink-0 lg:hidden">
|
|
130
|
-
<img
|
|
131
|
-
class="h-12 w-12 rounded-full"
|
|
132
|
-
src="https://teci.imgix.net/www/images/{quote.image}?w=48&fit=clip&monochrome=9B9B9B&auto=compress&auto=format"
|
|
133
|
-
alt="Thumbnail Image of {quote.fullname}"
|
|
134
|
-
/>
|
|
135
|
-
</div>
|
|
136
|
-
<div class="ml-4 lg:ml-0">
|
|
137
|
-
<div class="text-base text-gray-900">
|
|
138
|
-
{quote.fullname}
|
|
139
|
-
</div>
|
|
140
|
-
<div
|
|
141
|
-
class="text-base font-medium {getColorStyles('text', data.color)}"
|
|
142
|
-
>
|
|
143
|
-
{quote.fulltitle}
|
|
144
|
-
</div>
|
|
145
|
-
</div>
|
|
146
|
-
</div>
|
|
147
|
-
{#if quote.url}
|
|
148
|
-
<div class="sm:pl-4 pb-2 lg:pb-0 pt-4">
|
|
149
|
-
<Button text={quote.link_text || "Read More"} url={quote.url} justify="right" fullwidth=true color={data.color} />
|
|
150
|
-
</div>
|
|
151
|
-
{/if}
|
|
152
|
-
</div>
|
|
153
|
-
</footer>
|
|
154
|
-
</blockquote>
|
|
155
|
-
</div>
|
|
156
|
-
</div>
|
|
157
|
-
{/each}
|
|
158
|
-
<div class="bg-white relative w-half pt-6 md:pt-2 lg:pt-4 flex flex-row space-x-8 justify-center">
|
|
159
|
-
<button type="button" title="Previous" on:click="{prev}">
|
|
160
|
-
<Icon icon="icon-arrow_left" classes="text-4xl text-gray-400" />
|
|
161
|
-
</button>
|
|
162
|
-
<button type="button" title="Next" on:click="{next}">
|
|
163
|
-
<Icon icon="icon-arrow_right" classes="text-4xl text-gray-400" />
|
|
164
|
-
</button>
|
|
165
|
-
</div>
|
|
166
|
-
</div>
|
|
167
|
-
</div>
|
|
168
|
-
</section>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/** @typedef {typeof __propDef.props} TestimonialProps */
|
|
2
|
-
/** @typedef {typeof __propDef.events} TestimonialEvents */
|
|
3
|
-
/** @typedef {typeof __propDef.slots} TestimonialSlots */
|
|
4
|
-
export default class Testimonial extends SvelteComponent<{
|
|
5
|
-
data?: {};
|
|
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 { SvelteComponent } from "svelte";
|
|
14
|
-
declare const __propDef: {
|
|
15
|
-
props: {
|
|
16
|
-
data?: {};
|
|
17
|
-
};
|
|
18
|
-
events: {
|
|
19
|
-
[evt: string]: CustomEvent<any>;
|
|
20
|
-
};
|
|
21
|
-
slots: {};
|
|
22
|
-
};
|
|
23
|
-
export {};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import Card from "./Card.svelte";
|
|
3
|
-
export let data = {};
|
|
4
|
-
let id
|
|
5
|
-
|
|
6
|
-
if (data.name) {
|
|
7
|
-
id = encodeURIComponent(data.name).toLowerCase()
|
|
8
|
-
}
|
|
9
|
-
</script>
|
|
10
|
-
|
|
11
|
-
<section {id} class="mx-auto w-full">
|
|
12
|
-
{#if data.title}
|
|
13
|
-
<h2 class="sr-only">{data.title}</h2>
|
|
14
|
-
{/if}
|
|
15
|
-
<div class="grid grid-cols-1 gap-4 md:grid-cols-3">
|
|
16
|
-
{#each data.cards as card}
|
|
17
|
-
<Card bind:data={card} bind:halfHeight={data.halfHeight} />
|
|
18
|
-
{/each}
|
|
19
|
-
</div>
|
|
20
|
-
</section>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/** @typedef {typeof __propDef.props} ThreeColumnProps */
|
|
2
|
-
/** @typedef {typeof __propDef.events} ThreeColumnEvents */
|
|
3
|
-
/** @typedef {typeof __propDef.slots} ThreeColumnSlots */
|
|
4
|
-
export default class ThreeColumn extends SvelteComponent<{
|
|
5
|
-
data?: {};
|
|
6
|
-
}, {
|
|
7
|
-
[evt: string]: CustomEvent<any>;
|
|
8
|
-
}, {}> {
|
|
9
|
-
}
|
|
10
|
-
export type ThreeColumnProps = typeof __propDef.props;
|
|
11
|
-
export type ThreeColumnEvents = typeof __propDef.events;
|
|
12
|
-
export type ThreeColumnSlots = typeof __propDef.slots;
|
|
13
|
-
import { SvelteComponent } from "svelte";
|
|
14
|
-
declare const __propDef: {
|
|
15
|
-
props: {
|
|
16
|
-
data?: {};
|
|
17
|
-
};
|
|
18
|
-
events: {
|
|
19
|
-
[evt: string]: CustomEvent<any>;
|
|
20
|
-
};
|
|
21
|
-
slots: {};
|
|
22
|
-
};
|
|
23
|
-
export {};
|
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
<script>import CountrySelector from "./CountrySelector.svelte";
|
|
2
|
-
import Icon from "./Icon.svelte";
|
|
3
|
-
import { onMount } from "svelte";
|
|
4
|
-
import { scrollTo, validateEmail } from "../utils.js";
|
|
5
|
-
import { variables } from "../variables";
|
|
6
|
-
onMount(() => {
|
|
7
|
-
setTimeout(() => {
|
|
8
|
-
timePassed = true;
|
|
9
|
-
}, 3000);
|
|
10
|
-
});
|
|
11
|
-
let resellerModal = false;
|
|
12
|
-
let country = "sel";
|
|
13
|
-
let name = "";
|
|
14
|
-
let email = "";
|
|
15
|
-
let product = 0;
|
|
16
|
-
let valid = false;
|
|
17
|
-
let message = "";
|
|
18
|
-
let error = "";
|
|
19
|
-
let answer = "";
|
|
20
|
-
let submitted = false;
|
|
21
|
-
let waiting = false;
|
|
22
|
-
let timePassed = false;
|
|
23
|
-
$: if (country != "sel" &&
|
|
24
|
-
name != "" &&
|
|
25
|
-
validateEmail(email) &&
|
|
26
|
-
product != 0 &&
|
|
27
|
-
answer == "" &&
|
|
28
|
-
timePassed) {
|
|
29
|
-
valid = true;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
valid = false;
|
|
33
|
-
}
|
|
34
|
-
$: if (submitted == true && message == "") {
|
|
35
|
-
waiting = true;
|
|
36
|
-
scrollTo("trial-request");
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
waiting = false;
|
|
40
|
-
}
|
|
41
|
-
const submitForm = async () => {
|
|
42
|
-
submitted = true;
|
|
43
|
-
error = "";
|
|
44
|
-
try {
|
|
45
|
-
const submit = await fetch(variables.trialEndpoint, {
|
|
46
|
-
method: "POST",
|
|
47
|
-
body: JSON.stringify({
|
|
48
|
-
name,
|
|
49
|
-
email,
|
|
50
|
-
country,
|
|
51
|
-
product,
|
|
52
|
-
}),
|
|
53
|
-
});
|
|
54
|
-
message = await submit.json();
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
console.log(err);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
</script>
|
|
61
|
-
|
|
62
|
-
<div class="mt-10 sm:mt-0">
|
|
63
|
-
<div class="mt-8 md:grid md:grid-cols-3 md:gap-6">
|
|
64
|
-
<div class="md:col-span-1">
|
|
65
|
-
<div class="prose px-4 sm:px-0">
|
|
66
|
-
<h2>30-day Trial Request</h2>
|
|
67
|
-
<p>
|
|
68
|
-
Please complete the form and click "Send Request". <b
|
|
69
|
-
>All fields are required.</b
|
|
70
|
-
>
|
|
71
|
-
</p>
|
|
72
|
-
<p>
|
|
73
|
-
Within a few minutes, you will receive an email message containing a
|
|
74
|
-
download link.
|
|
75
|
-
</p>
|
|
76
|
-
<p>
|
|
77
|
-
If you need assistance, please send an email to <a
|
|
78
|
-
href="mailto:sales@thunderheadeng.com">sales</a
|
|
79
|
-
>.
|
|
80
|
-
</p>
|
|
81
|
-
</div>
|
|
82
|
-
</div>
|
|
83
|
-
<div class="mt-5 md:col-span-2 md:mt-0">
|
|
84
|
-
<form id="trial-request" on:submit|preventDefault={submitForm}>
|
|
85
|
-
<div class="overflow-hidden border shadow">
|
|
86
|
-
{#if message}
|
|
87
|
-
<div class="prose bg-white px-4 py-5 sm:p-6">
|
|
88
|
-
<p>
|
|
89
|
-
Thank you <strong>{message.name}</strong> for requesting a trial
|
|
90
|
-
of {#if message.product == 1}PyroSim{:else if message.product == 2}Pathfinder{:else if message.product == 3}PyroSim
|
|
91
|
-
and Pathfinder{/if}!<br />
|
|
92
|
-
You will receive an email to <strong>{message.email}</strong>
|
|
93
|
-
with your activation key{#if message.product == 3}s{/if}
|
|
94
|
-
in a few moments.
|
|
95
|
-
</p>
|
|
96
|
-
{#if message.product == 1}
|
|
97
|
-
<h3>PyroSim</h3>
|
|
98
|
-
<p>
|
|
99
|
-
To download the most recent version visit the <a
|
|
100
|
-
href="https://support.thunderheadeng.com/pyrosim/"
|
|
101
|
-
>PyroSim Support</a
|
|
102
|
-
> page.
|
|
103
|
-
</p>
|
|
104
|
-
{:else if message.product == 2}
|
|
105
|
-
<h3>Pathfinder</h3>
|
|
106
|
-
<p>
|
|
107
|
-
To download the most recent version visit the <a
|
|
108
|
-
href="https://support.thunderheadeng.com/pathfinder/"
|
|
109
|
-
>Pathfinder Support</a
|
|
110
|
-
> page.
|
|
111
|
-
</p>
|
|
112
|
-
{:else if message.product == 3}
|
|
113
|
-
<h3>PyroSim</h3>
|
|
114
|
-
<p>
|
|
115
|
-
To download the most recent version visit the <a
|
|
116
|
-
href="https://support.thunderheadeng.com/pyrosim/"
|
|
117
|
-
>PyroSim Support</a
|
|
118
|
-
> page.
|
|
119
|
-
</p>
|
|
120
|
-
<h3>Pathfinder</h3>
|
|
121
|
-
<p>
|
|
122
|
-
To download the most recent version visit the <a
|
|
123
|
-
href="https://support.thunderheadeng.com/pathfinder/"
|
|
124
|
-
>Pathfinder Support</a
|
|
125
|
-
> page.
|
|
126
|
-
</p>
|
|
127
|
-
{/if}
|
|
128
|
-
<h3>Need Help?</h3>
|
|
129
|
-
<p>
|
|
130
|
-
Please email <a href="mailto:support@thunderheadeng.com"
|
|
131
|
-
>support@thunderheadeng.com</a
|
|
132
|
-
> if you have any questions.
|
|
133
|
-
</p>
|
|
134
|
-
</div>
|
|
135
|
-
{:else if error}
|
|
136
|
-
<p>There was an error: {error}</p>
|
|
137
|
-
{:else if waiting}
|
|
138
|
-
<div id="waiting" class="mx-auto p-12">
|
|
139
|
-
<p class="pb-8 text-center font-bold">
|
|
140
|
-
Waiting for Trial Approval...
|
|
141
|
-
</p>
|
|
142
|
-
<Icon classes="h-24 w-24 mx-auto animate-pulse" />
|
|
143
|
-
</div>
|
|
144
|
-
{:else}
|
|
145
|
-
<div class="space-y-6 bg-white px-4 py-5 sm:p-6">
|
|
146
|
-
<fieldset>
|
|
147
|
-
<div>
|
|
148
|
-
<legend class="text-lg font-bold text-gray-900">
|
|
149
|
-
Personal Information
|
|
150
|
-
</legend>
|
|
151
|
-
</div>
|
|
152
|
-
<div class="flex flex-row items-center pt-4 align-middle">
|
|
153
|
-
<label
|
|
154
|
-
for="name"
|
|
155
|
-
class="block whitespace-nowrap pr-2 font-medium text-gray-700"
|
|
156
|
-
>
|
|
157
|
-
Full Name:
|
|
158
|
-
</label>
|
|
159
|
-
<input
|
|
160
|
-
id="name"
|
|
161
|
-
type="text"
|
|
162
|
-
name="name"
|
|
163
|
-
bind:value={name}
|
|
164
|
-
class="w-full border-0 border-b-2 border-gray-500 p-1"
|
|
165
|
-
/>
|
|
166
|
-
</div>
|
|
167
|
-
<div class="flex flex-row items-center pt-4 align-middle">
|
|
168
|
-
<label
|
|
169
|
-
for="email"
|
|
170
|
-
class="block pr-2 font-medium text-gray-700"
|
|
171
|
-
>
|
|
172
|
-
Email:
|
|
173
|
-
</label>
|
|
174
|
-
<input
|
|
175
|
-
id="email"
|
|
176
|
-
type="text"
|
|
177
|
-
name="email"
|
|
178
|
-
bind:value={email}
|
|
179
|
-
class="w-full border-0 border-b-2 border-gray-500 p-1"
|
|
180
|
-
/>
|
|
181
|
-
</div>
|
|
182
|
-
<div class="flex flex-row items-center pt-4 align-middle">
|
|
183
|
-
<label
|
|
184
|
-
for="country"
|
|
185
|
-
class="block pr-2 font-medium text-gray-700"
|
|
186
|
-
>
|
|
187
|
-
Country:
|
|
188
|
-
</label>
|
|
189
|
-
<input
|
|
190
|
-
id="country"
|
|
191
|
-
type="hidden"
|
|
192
|
-
name="country"
|
|
193
|
-
value={country}
|
|
194
|
-
/>
|
|
195
|
-
<CountrySelector
|
|
196
|
-
bind:selection={country}
|
|
197
|
-
bind:resellerModal
|
|
198
|
-
/>
|
|
199
|
-
</div>
|
|
200
|
-
</fieldset>
|
|
201
|
-
<fieldset>
|
|
202
|
-
<div>
|
|
203
|
-
<legend class="text-lg font-bold text-gray-900">
|
|
204
|
-
What would you like to try?
|
|
205
|
-
</legend>
|
|
206
|
-
</div>
|
|
207
|
-
<div class="mt-4 space-y-4">
|
|
208
|
-
<div class="flex items-center">
|
|
209
|
-
<input
|
|
210
|
-
id="pyrosim"
|
|
211
|
-
name="product"
|
|
212
|
-
type="radio"
|
|
213
|
-
value={1}
|
|
214
|
-
bind:group={product}
|
|
215
|
-
class="h-4 w-4 border-gray-300 text-blue-600 focus:ring-teci-blue-dark"
|
|
216
|
-
/>
|
|
217
|
-
<label
|
|
218
|
-
for="pyrosim"
|
|
219
|
-
class="ml-3 block text-sm font-medium text-gray-700"
|
|
220
|
-
>
|
|
221
|
-
PyroSim
|
|
222
|
-
</label>
|
|
223
|
-
</div>
|
|
224
|
-
<div class="flex items-center">
|
|
225
|
-
<input
|
|
226
|
-
id="pathfinder"
|
|
227
|
-
name="product"
|
|
228
|
-
type="radio"
|
|
229
|
-
value={2}
|
|
230
|
-
bind:group={product}
|
|
231
|
-
class="h-4 w-4 border-gray-300 text-blue-600 focus:ring-teci-blue-dark"
|
|
232
|
-
/>
|
|
233
|
-
<label
|
|
234
|
-
for="pathfinder"
|
|
235
|
-
class="ml-3 block text-sm font-medium text-gray-700"
|
|
236
|
-
>
|
|
237
|
-
Pathfinder
|
|
238
|
-
</label>
|
|
239
|
-
</div>
|
|
240
|
-
<div class="flex items-center">
|
|
241
|
-
<input
|
|
242
|
-
id="pyropath"
|
|
243
|
-
name="product"
|
|
244
|
-
type="radio"
|
|
245
|
-
value={3}
|
|
246
|
-
bind:group={product}
|
|
247
|
-
class="h-4 w-4 border-gray-300 text-blue-600 focus:ring-teci-blue-dark"
|
|
248
|
-
/>
|
|
249
|
-
<label
|
|
250
|
-
for="pyropath"
|
|
251
|
-
class="ml-3 block text-sm font-medium text-gray-700"
|
|
252
|
-
>
|
|
253
|
-
PyroSim and Pathfinder
|
|
254
|
-
</label>
|
|
255
|
-
</div>
|
|
256
|
-
</div>
|
|
257
|
-
</fieldset>
|
|
258
|
-
<input
|
|
259
|
-
class="confident"
|
|
260
|
-
id="answer"
|
|
261
|
-
type="text"
|
|
262
|
-
name="answer"
|
|
263
|
-
bind:value={answer}
|
|
264
|
-
placeholder="Correct answers only..."
|
|
265
|
-
/>
|
|
266
|
-
</div>
|
|
267
|
-
<div class="px-4 py-3 text-right sm:px-6">
|
|
268
|
-
<button
|
|
269
|
-
type="submit"
|
|
270
|
-
disabled={!valid}
|
|
271
|
-
class="inline-flex justify-center border border-transparent py-2 px-4 text-sm font-medium text-white shadow-sm {valid ===
|
|
272
|
-
true
|
|
273
|
-
? 'bg-teci-blue-light hover:bg-teci-blue-dark focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2'
|
|
274
|
-
: 'cursor-not-allowed bg-gray-300'}"
|
|
275
|
-
>
|
|
276
|
-
Send Request
|
|
277
|
-
</button>
|
|
278
|
-
{#if answer}
|
|
279
|
-
<p>
|
|
280
|
-
Something is wrong with the form, please email
|
|
281
|
-
support@thunderheadeng.com.
|
|
282
|
-
</p>
|
|
283
|
-
{/if}
|
|
284
|
-
</div>
|
|
285
|
-
{/if}
|
|
286
|
-
</div>
|
|
287
|
-
</form>
|
|
288
|
-
</div>
|
|
289
|
-
</div>
|
|
290
|
-
</div>
|
|
291
|
-
|
|
292
|
-
<style>
|
|
293
|
-
.confident {
|
|
294
|
-
@apply hidden;
|
|
295
|
-
}
|
|
296
|
-
</style>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
|
2
|
-
declare const __propDef: {
|
|
3
|
-
props: Record<string, never>;
|
|
4
|
-
events: {
|
|
5
|
-
[evt: string]: CustomEvent<any>;
|
|
6
|
-
};
|
|
7
|
-
slots: {};
|
|
8
|
-
};
|
|
9
|
-
export type TrialFormProps = typeof __propDef.props;
|
|
10
|
-
export type TrialFormEvents = typeof __propDef.events;
|
|
11
|
-
export type TrialFormSlots = typeof __propDef.slots;
|
|
12
|
-
export default class TrialForm extends SvelteComponent<TrialFormProps, TrialFormEvents, TrialFormSlots> {
|
|
13
|
-
}
|
|
14
|
-
export {};
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { onMount } from 'svelte'
|
|
3
|
-
|
|
4
|
-
export let data={};
|
|
5
|
-
export let v = undefined;
|
|
6
|
-
export let thumbnail = undefined;
|
|
7
|
-
|
|
8
|
-
let videoID="";
|
|
9
|
-
let thumb="";
|
|
10
|
-
let youtube=false;
|
|
11
|
-
let videoURL="";
|
|
12
|
-
let id
|
|
13
|
-
|
|
14
|
-
if (data.v) {
|
|
15
|
-
id = `video-${encodeURIComponent(data.v).toLowerCase()}`
|
|
16
|
-
} else if (v) {
|
|
17
|
-
id = `video-${encodeURIComponent(v).toLowerCase()}`
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
onMount(() => {
|
|
21
|
-
var lazyVideos = [].slice.call(document.querySelectorAll("video.lazy"));
|
|
22
|
-
|
|
23
|
-
if ("IntersectionObserver" in window) {
|
|
24
|
-
var lazyVideoObserver = new IntersectionObserver(function(entries, observer) {
|
|
25
|
-
entries.forEach(function(video) {
|
|
26
|
-
if (video.isIntersecting) {
|
|
27
|
-
for (var source in video.target.children) {
|
|
28
|
-
var videoSource = video.target.children[source];
|
|
29
|
-
if (typeof videoSource.tagName === "string" && videoSource.tagName === "SOURCE") {
|
|
30
|
-
videoSource.src = videoSource.dataset.src;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
video.target.load();
|
|
35
|
-
video.target.classList.remove("lazy");
|
|
36
|
-
lazyVideoObserver.unobserve(video.target);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
lazyVideos.forEach(function(lazyVideo) {
|
|
42
|
-
lazyVideoObserver.observe(lazyVideo);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
if (v) {
|
|
48
|
-
if (v.includes("mp4")) {
|
|
49
|
-
youtube = false;
|
|
50
|
-
videoURL = `https://teci.imgix.net/www/videos/${v}`;
|
|
51
|
-
} else {
|
|
52
|
-
youtube = true;
|
|
53
|
-
videoID = v;
|
|
54
|
-
};
|
|
55
|
-
} else if (data.v) {
|
|
56
|
-
if (data.v.includes("mp4")) {
|
|
57
|
-
youtube = false;
|
|
58
|
-
videoURL = `https://teci.imgix.net/www/videos/${data.v}`;
|
|
59
|
-
} else {
|
|
60
|
-
youtube = true;
|
|
61
|
-
videoID = data.v;
|
|
62
|
-
};
|
|
63
|
-
} else {
|
|
64
|
-
videoID = "";
|
|
65
|
-
videoURL = "";
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
if (thumbnail) {
|
|
69
|
-
thumb = `https://teci.imgix.net/www/images/${thumbnail}?w=1214&fit=clip&auto=compress&auto=format`;
|
|
70
|
-
} else if (data.thumbnail) {
|
|
71
|
-
thumb = `https://teci.imgix.net/www/images/${data.thumbnail}?w=1214&fit=clip&auto=compress&auto=format`;
|
|
72
|
-
} else if (videoID) {
|
|
73
|
-
if (youtube) {
|
|
74
|
-
thumb = `https://i.ytimg.com/vi/${videoID}/maxresdefault.jpg`;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
</script>
|
|
78
|
-
|
|
79
|
-
<section {id} class="aspect-video not-prose w-full border border-gray-200 bg-black shadow-md">
|
|
80
|
-
{#if youtube}
|
|
81
|
-
<iframe
|
|
82
|
-
title="YouTube Video ID {videoID}"
|
|
83
|
-
class="aspect-video w-full"
|
|
84
|
-
frameborder="0"
|
|
85
|
-
allow="autoplay; encrypted-media"
|
|
86
|
-
allowfullscreen
|
|
87
|
-
src="https://www.youtube.com/embed/${videoID}?autoplay=1&start=0&mute=1"
|
|
88
|
-
srcdoc="{`
|
|
89
|
-
<style>
|
|
90
|
-
body, .youtubeembed {
|
|
91
|
-
width: 100%;
|
|
92
|
-
height: 100%;
|
|
93
|
-
margin: 0;
|
|
94
|
-
position: absolute;
|
|
95
|
-
display: flex;
|
|
96
|
-
justify-content: center;
|
|
97
|
-
object-fit: cover;
|
|
98
|
-
}
|
|
99
|
-
</style>
|
|
100
|
-
<a
|
|
101
|
-
href='https://www.youtube.com/embed/${videoID}?autoplay=1&start=0&mute=1'
|
|
102
|
-
class='youtubeembed'
|
|
103
|
-
>
|
|
104
|
-
<img
|
|
105
|
-
src='${thumb}'
|
|
106
|
-
class='youtubeembed'
|
|
107
|
-
/>
|
|
108
|
-
<svg
|
|
109
|
-
version='1.1'
|
|
110
|
-
viewBox='0 0 68 48'
|
|
111
|
-
width='68px'
|
|
112
|
-
style='position: relative;'
|
|
113
|
-
>
|
|
114
|
-
<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>
|
|
115
|
-
<path d='M 45,24 27,14 27,34' fill='#fff'></path>
|
|
116
|
-
</svg>
|
|
117
|
-
</a>
|
|
118
|
-
`}"
|
|
119
|
-
/>
|
|
120
|
-
{:else}
|
|
121
|
-
<video class="lazy aspect-video w-full" autoplay muted loop playsinline controls poster={thumb}>
|
|
122
|
-
<source data-src={videoURL} type="video/mp4">
|
|
123
|
-
</video>
|
|
124
|
-
{/if}
|
|
125
|
-
</section>
|