tecitheme 0.0.3 → 0.0.7

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.
@@ -0,0 +1,73 @@
1
+ <script>
2
+ //Based on:
3
+ //https://tailwindui.com/components/marketing/sections/feature-sections#component-c683653471044e6ffc32739e199dfbf2
4
+ //https://tailwindui.com/components/marketing/sections/team-sections#component-0efa5ebc92e2aa72bc2332fcf5578869
5
+ //Allows icons from https://fonts.google.com/icons?selected=Material+Icons by name in the format 'icon-XXXX'.
6
+
7
+ import Icon from './Icon.svelte';
8
+
9
+ export let title = 'A better way to do things.';
10
+
11
+ export let data = [
12
+ {
13
+ icon: 'pyrosim',
14
+ image: 'https://www.thunderheadeng.com/wp-content/uploads/2013/09/company_pyrosim.jpg',
15
+ heading: 'Product 1',
16
+ subheading: 'Nutshell',
17
+ text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed quis quam ultrices, vestibulum lacus nec, interdum est. Ut.',
18
+ linkURL: '/product'
19
+ },
20
+ {
21
+ icon: '',
22
+ image: 'https://www.thunderheadeng.com/wp-content/uploads/2013/08/company_pathfinder.png',
23
+ heading: 'Product 2',
24
+ subheading: 'No Icon',
25
+ text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed quis quam ultrices, vestibulum lacus nec, interdum est. Ut.',
26
+ linkURL: '/product'
27
+ },
28
+ {
29
+ icon: 'icon-auto_stories',
30
+ image: 'https://www.thunderheadeng.com/wp-content/uploads/2013/08/company_petrasim.png',
31
+ heading: 'Google Icon, No Subtitle or Text',
32
+ subheading: '',
33
+ text: '',
34
+ linkURL: '/product'
35
+ }
36
+ ];
37
+ </script>
38
+
39
+ <!-- This example requires Tailwind CSS v2.0+ -->
40
+ <div class="pb-12 bg-white mx-auto">
41
+ <h2 class="sr-only">{title}</h2>
42
+ <dl class="space-y-10 sm:grid sm:grid-cols-2 sm:gap-8 sm:space-y-0 lg:grid-cols-3">
43
+ {#each data as col}
44
+ <div>
45
+ <a href={col.linkURL}>
46
+ <div class="space-y-4">
47
+ {#if col.image}
48
+ <div class="w-full aspect-square bg-slate-100">
49
+ <img class="w-full aspect-square object-cover shadow-md border border-gray-200" src={col.image} alt="" />
50
+ </div>
51
+ {/if}
52
+ <div class="flex flex-row items-start space-x-4">
53
+ {#if col.icon}
54
+ <Icon classes="h-12 w-auto" icon={col.icon} />
55
+ {/if}
56
+ <div class="leading-none font-medium flex flex-col">
57
+ <h3 class="text-2xl leading-none">{col.heading}</h3>
58
+ {#if col.subheading}
59
+ <p class="text-teci-blue-dark leading-6">{col.subheading}</p>
60
+ {/if}
61
+ </div>
62
+ </div>
63
+ {#if col.text}
64
+ <div class="text-lg">
65
+ <p class="text-gray-500">{col.text}</p>
66
+ </div>
67
+ {/if}
68
+ </div>
69
+ </a>
70
+ </div>
71
+ {/each}
72
+ </dl>
73
+ </div>
@@ -0,0 +1,39 @@
1
+ /** @typedef {typeof __propDef.props} ThreeColumnProps */
2
+ /** @typedef {typeof __propDef.events} ThreeColumnEvents */
3
+ /** @typedef {typeof __propDef.slots} ThreeColumnSlots */
4
+ export default class ThreeColumn extends SvelteComponentTyped<{
5
+ data?: {
6
+ icon: string;
7
+ image: string;
8
+ heading: string;
9
+ subheading: string;
10
+ text: string;
11
+ linkURL: string;
12
+ }[];
13
+ title?: string;
14
+ }, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}> {
17
+ }
18
+ export type ThreeColumnProps = typeof __propDef.props;
19
+ export type ThreeColumnEvents = typeof __propDef.events;
20
+ export type ThreeColumnSlots = typeof __propDef.slots;
21
+ import { SvelteComponentTyped } from "svelte";
22
+ declare const __propDef: {
23
+ props: {
24
+ data?: {
25
+ icon: string;
26
+ image: string;
27
+ heading: string;
28
+ subheading: string;
29
+ text: string;
30
+ linkURL: string;
31
+ }[];
32
+ title?: string;
33
+ };
34
+ events: {
35
+ [evt: string]: CustomEvent<any>;
36
+ };
37
+ slots: {};
38
+ };
39
+ export {};
@@ -1,5 +1,5 @@
1
1
  <script >import CountrySelector from './CountrySelector.svelte';
2
- import IconTE from '../Logos/TECi_icon_250.svelte';
2
+ import Icon from './Icon.svelte';
3
3
  import { onMount } from 'svelte';
4
4
  import { scrollTo, validateEmail } from '../utils.js';
5
5
  import { variables } from '../variables';
@@ -59,164 +59,190 @@ const submitForm = async () => {
59
59
  };
60
60
  </script>
61
61
 
62
- <form id="trial-request" on:submit|preventDefault={submitForm}>
63
- <div class=" border shadow overflow-hidden">
64
- {#if message}
65
- <div class="px-4 py-5 bg-white sm:p-6 prose">
62
+ <div class="prose">
63
+ <h2>30-day Trial Request</h2>
64
+ </div>
65
+ <div class="mt-10 sm:mt-0 pb-12">
66
+ <div class="md:grid md:grid-cols-3 md:gap-6 mt-8">
67
+ <div class="md:col-span-1">
68
+ <div class=" prose px-4 sm:px-0">
66
69
  <p>
67
- Thank you <strong>{message.name}</strong> for requesting a trial of {#if message.product == 1}PyroSim{:else if message.product == 2}Pathfinder{:else if message.product == 3}PyroSim
68
- and Pathfinder{/if}!<br />
69
- You will receive an email to <strong>{message.email}</strong> with your activation key{#if message.product == 3}s{/if}
70
- in a few moments.
70
+ Please complete the form and click "Send Request". <b>All fields are required.</b>
71
71
  </p>
72
- {#if message.product == 1}
73
- <h3>PyroSim</h3>
74
- <p>
75
- To download the most recent version visit the <a
76
- href="https://support.thunderheadeng.com/pyrosim/">PyroSim Support</a
77
- > page.
78
- </p>
79
- {:else if message.product == 2}
80
- <h3>Pathfinder</h3>
81
- <p>
82
- To download the most recent version visit the <a
83
- href="https://support.thunderheadeng.com/pathfinder/">Pathfinder Support</a
84
- > page.
85
- </p>
86
- {:else if message.product == 3}
87
- <h3>PyroSim</h3>
88
- <p>
89
- To download the most recent version visit the <a
90
- href="https://support.thunderheadeng.com/pyrosim/">PyroSim Support</a
91
- > page.
92
- </p>
93
- <h3>Pathfinder</h3>
94
- <p>
95
- To download the most recent version visit the <a
96
- href="https://support.thunderheadeng.com/pathfinder/">Pathfinder Support</a
97
- > page.
98
- </p>
99
- {/if}
100
- <h3>Need Help?</h3>
72
+ <p>Within a few minutes, you will receive an email message containing a download link.</p>
101
73
  <p>
102
- Please email <a href="mailto:support@thunderheadeng.com">support@thunderheadeng.com</a> if
103
- you have any questions.
74
+ If you need assistance, please send an email to <a href="mailto:sales@thunderheadeng.com">sales</a>.
104
75
  </p>
105
76
  </div>
106
- {:else if error}
107
- <p>There was an error: {error}</p>
108
- {:else if waiting}
109
- <div id="waiting" class="p-12 mx-auto">
110
- <p class="text-center pb-8 font-bold">Waiting for Trial Approval...</p>
111
- <IconTE classes="h-24 w-24 mx-auto animate-pulse" />
112
- </div>
113
- {:else}
114
- <div class="px-4 py-5 bg-white space-y-6 sm:p-6">
115
- <fieldset>
116
- <div>
117
- <legend class="text-lg font-bold text-gray-900"> Personal Information </legend>
118
- </div>
119
- <div class="flex flex-row align-middle items-center pt-4">
120
- <label for="name" class="whitespace-nowrap pr-2 block font-medium text-gray-700">
121
- Full Name:
122
- </label>
123
- <input
124
- id="name"
125
- type="text"
126
- name="name"
127
- bind:value={name}
128
- class="w-full p-1 border-0 border-b-2 border-gray-500"
129
- />
130
- </div>
131
- <div class="flex flex-row align-middle items-center pt-4">
132
- <label for="email" class="pr-2 block font-medium text-gray-700"> Email: </label>
133
- <input
134
- id="email"
135
- type="text"
136
- name="email"
137
- bind:value={email}
138
- class="w-full p-1 border-0 border-b-2 border-gray-500"
139
- />
140
- </div>
141
- <div class="flex flex-row align-middle items-center pt-4">
142
- <label for="country" class="pr-2 block font-medium text-gray-700"> Country: </label>
143
- <input id="country" type="hidden" name="country" value={country} />
144
- <CountrySelector bind:selection={country} bind:resellerModal />
145
- </div>
146
- </fieldset>
147
- <fieldset>
148
- <div>
149
- <legend class="text-lg font-bold text-gray-900"> What would you like to try? </legend>
150
- </div>
151
- <div class="mt-4 space-y-4">
152
- <div class="flex items-center">
153
- <input
154
- id="pyrosim"
155
- name="product"
156
- type="radio"
157
- value={1}
158
- bind:group={product}
159
- class="focus:ring-teci-blue-dark h-4 w-4 text-blue-600 border-gray-300"
160
- />
161
- <label for="pyrosim" class="ml-3 block text-sm font-medium text-gray-700">
162
- PyroSim
163
- </label>
77
+ </div>
78
+ <div class="mt-5 md:mt-0 md:col-span-2">
79
+ <form id="trial-request" on:submit|preventDefault={submitForm}>
80
+ <div class="border shadow overflow-hidden">
81
+ {#if message}
82
+ <div class="px-4 py-5 bg-white sm:p-6 prose">
83
+ <p>
84
+ Thank you <strong>{message.name}</strong> for requesting a trial of {#if message.product == 1}PyroSim{:else if message.product == 2}Pathfinder{:else if message.product == 3}PyroSim
85
+ and Pathfinder{/if}!<br />
86
+ You will receive an email to <strong>{message.email}</strong> with your activation
87
+ key{#if message.product == 3}s{/if}
88
+ in a few moments.
89
+ </p>
90
+ {#if message.product == 1}
91
+ <h3>PyroSim</h3>
92
+ <p>
93
+ To download the most recent version visit the <a
94
+ href="https://support.thunderheadeng.com/pyrosim/">PyroSim Support</a
95
+ > page.
96
+ </p>
97
+ {:else if message.product == 2}
98
+ <h3>Pathfinder</h3>
99
+ <p>
100
+ To download the most recent version visit the <a
101
+ href="https://support.thunderheadeng.com/pathfinder/">Pathfinder Support</a
102
+ > page.
103
+ </p>
104
+ {:else if message.product == 3}
105
+ <h3>PyroSim</h3>
106
+ <p>
107
+ To download the most recent version visit the <a
108
+ href="https://support.thunderheadeng.com/pyrosim/">PyroSim Support</a
109
+ > page.
110
+ </p>
111
+ <h3>Pathfinder</h3>
112
+ <p>
113
+ To download the most recent version visit the <a
114
+ href="https://support.thunderheadeng.com/pathfinder/">Pathfinder Support</a
115
+ > page.
116
+ </p>
117
+ {/if}
118
+ <h3>Need Help?</h3>
119
+ <p>
120
+ Please email <a href="mailto:support@thunderheadeng.com"
121
+ >support@thunderheadeng.com</a
122
+ > if you have any questions.
123
+ </p>
164
124
  </div>
165
- <div class="flex items-center">
166
- <input
167
- id="pathfinder"
168
- name="product"
169
- type="radio"
170
- value={2}
171
- bind:group={product}
172
- class="focus:ring-teci-blue-dark h-4 w-4 text-blue-600 border-gray-300"
173
- />
174
- <label for="pathfinder" class="ml-3 block text-sm font-medium text-gray-700">
175
- Pathfinder
176
- </label>
125
+ {:else if error}
126
+ <p>There was an error: {error}</p>
127
+ {:else if waiting}
128
+ <div id="waiting" class="p-12 mx-auto">
129
+ <p class="text-center pb-8 font-bold">Waiting for Trial Approval...</p>
130
+ <Icon classes="h-24 w-24 mx-auto animate-pulse" />
177
131
  </div>
178
- <div class="flex items-center">
132
+ {:else}
133
+ <div class="px-4 py-5 bg-white space-y-6 sm:p-6">
134
+ <fieldset>
135
+ <div>
136
+ <legend class="text-lg font-bold text-gray-900"> Personal Information </legend>
137
+ </div>
138
+ <div class="flex flex-row align-middle items-center pt-4">
139
+ <label for="name" class="whitespace-nowrap pr-2 block font-medium text-gray-700">
140
+ Full Name:
141
+ </label>
142
+ <input
143
+ id="name"
144
+ type="text"
145
+ name="name"
146
+ bind:value={name}
147
+ class="w-full p-1 border-0 border-b-2 border-gray-500"
148
+ />
149
+ </div>
150
+ <div class="flex flex-row align-middle items-center pt-4">
151
+ <label for="email" class="pr-2 block font-medium text-gray-700"> Email: </label>
152
+ <input
153
+ id="email"
154
+ type="text"
155
+ name="email"
156
+ bind:value={email}
157
+ class="w-full p-1 border-0 border-b-2 border-gray-500"
158
+ />
159
+ </div>
160
+ <div class="flex flex-row align-middle items-center pt-4">
161
+ <label for="country" class="pr-2 block font-medium text-gray-700">
162
+ Country:
163
+ </label>
164
+ <input id="country" type="hidden" name="country" value={country} />
165
+ <CountrySelector bind:selection={country} bind:resellerModal />
166
+ </div>
167
+ </fieldset>
168
+ <fieldset>
169
+ <div>
170
+ <legend class="text-lg font-bold text-gray-900">
171
+ What would you like to try?
172
+ </legend>
173
+ </div>
174
+ <div class="mt-4 space-y-4">
175
+ <div class="flex items-center">
176
+ <input
177
+ id="pyrosim"
178
+ name="product"
179
+ type="radio"
180
+ value={1}
181
+ bind:group={product}
182
+ class="focus:ring-teci-blue-dark h-4 w-4 text-blue-600 border-gray-300"
183
+ />
184
+ <label for="pyrosim" class="ml-3 block text-sm font-medium text-gray-700">
185
+ PyroSim
186
+ </label>
187
+ </div>
188
+ <div class="flex items-center">
189
+ <input
190
+ id="pathfinder"
191
+ name="product"
192
+ type="radio"
193
+ value={2}
194
+ bind:group={product}
195
+ class="focus:ring-teci-blue-dark h-4 w-4 text-blue-600 border-gray-300"
196
+ />
197
+ <label for="pathfinder" class="ml-3 block text-sm font-medium text-gray-700">
198
+ Pathfinder
199
+ </label>
200
+ </div>
201
+ <div class="flex items-center">
202
+ <input
203
+ id="pyropath"
204
+ name="product"
205
+ type="radio"
206
+ value={3}
207
+ bind:group={product}
208
+ class="focus:ring-teci-blue-dark h-4 w-4 text-blue-600 border-gray-300"
209
+ />
210
+ <label for="pyropath" class="ml-3 block text-sm font-medium text-gray-700">
211
+ PyroSim and Pathfinder
212
+ </label>
213
+ </div>
214
+ </div>
215
+ </fieldset>
179
216
  <input
180
- id="pyropath"
181
- name="product"
182
- type="radio"
183
- value={3}
184
- bind:group={product}
185
- class="focus:ring-teci-blue-dark h-4 w-4 text-blue-600 border-gray-300"
217
+ class="confident"
218
+ id="answer"
219
+ type="text"
220
+ name="answer"
221
+ bind:value={answer}
222
+ placeholder="Correct answers only..."
186
223
  />
187
- <label for="pyropath" class="ml-3 block text-sm font-medium text-gray-700">
188
- PyroSim and Pathfinder
189
- </label>
190
224
  </div>
191
- </div>
192
- </fieldset>
193
- <input
194
- class="confident"
195
- id="answer"
196
- type="text"
197
- name="answer"
198
- bind:value={answer}
199
- placeholder="Correct answers only..."
200
- />
201
- </div>
202
- <div class="px-4 py-3 text-right sm:px-6">
203
- <button
204
- type="submit"
205
- disabled={!valid}
206
- class="inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium text-white {valid ===
207
- true
208
- ? 'bg-teci-blue-light hover:bg-teci-blue-dark focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500'
209
- : 'bg-gray-300 cursor-not-allowed'}"
210
- >
211
- Send Request
212
- </button>
213
- {#if answer}
214
- <p>Something is wrong with the form, please email support@thunderheadeng.com.</p>
215
- {/if}
216
- </div>
217
- {/if}
225
+ <div class="px-4 py-3 text-right sm:px-6">
226
+ <button
227
+ type="submit"
228
+ disabled={!valid}
229
+ class="inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium text-white {valid ===
230
+ true
231
+ ? 'bg-teci-blue-light hover:bg-teci-blue-dark focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500'
232
+ : 'bg-gray-300 cursor-not-allowed'}"
233
+ >
234
+ Send Request
235
+ </button>
236
+ {#if answer}
237
+ <p>Something is wrong with the form, please email support@thunderheadeng.com.</p>
238
+ {/if}
239
+ </div>
240
+ {/if}
241
+ </div>
242
+ </form>
243
+ </div>
218
244
  </div>
219
- </form>
245
+ </div>
220
246
 
221
247
  <style >
222
248
  .confident {
@@ -0,0 +1,14 @@
1
+ <script>
2
+ export let v
3
+ </script>
4
+
5
+ <section class="w-full aspect-video border bg-black border-gray-200 shadow-md mb-12">
6
+ <iframe
7
+ src="https://www.youtube-nocookie.com/embed/{v}?rel=0&modestbranding=1"
8
+ title="YouTube Video ID {v}"
9
+ class="w-full aspect-video"
10
+ frameborder="0"
11
+ allow="accelerometer; clipboard-write; encrypted-media; gyroscope"
12
+ allowfullscreen
13
+ />
14
+ </section>
@@ -0,0 +1,23 @@
1
+ /** @typedef {typeof __propDef.props} YtProps */
2
+ /** @typedef {typeof __propDef.events} YtEvents */
3
+ /** @typedef {typeof __propDef.slots} YtSlots */
4
+ export default class Yt extends SvelteComponentTyped<{
5
+ v: any;
6
+ }, {
7
+ [evt: string]: CustomEvent<any>;
8
+ }, {}> {
9
+ }
10
+ export type YtProps = typeof __propDef.props;
11
+ export type YtEvents = typeof __propDef.events;
12
+ export type YtSlots = typeof __propDef.slots;
13
+ import { SvelteComponentTyped } from "svelte";
14
+ declare const __propDef: {
15
+ props: {
16
+ v: any;
17
+ };
18
+ events: {
19
+ [evt: string]: CustomEvent<any>;
20
+ };
21
+ slots: {};
22
+ };
23
+ export {};
@@ -0,0 +1,31 @@
1
+ <script>
2
+ import SectionHeaderCentered from '../components/SectionHeaderCentered.svelte';
3
+ import ThreeColumn from '../components/ThreeColumn.svelte';
4
+ import NewsGrid from '../components/NewsGrid.svelte';
5
+ import YT from '../components/YT.svelte';
6
+ import CTA from '../components/CTA.svelte';
7
+
8
+ export let title
9
+ export let page_sections
10
+ export let posts
11
+ </script>
12
+
13
+ <svelte:head>
14
+ <title>{title} | Thunderhead Engineering</title>
15
+ </svelte:head>
16
+
17
+ {#each page_sections as section}
18
+ {#if section.block == "heading-centered"}
19
+ <SectionHeaderCentered bind:data={section} />
20
+ {:else if section.block == "three-column"}
21
+ <ThreeColumn bind:data={section.cards} />
22
+ {:else if section.block == "news-grid"}
23
+ <NewsGrid bind:data={section} bind:posts={posts} />
24
+ {:else if section.block == "video"}
25
+ <YT bind:v={section.v} />
26
+ {:else if section.block == "cta-center"}
27
+ <CTA bind:data={section} />
28
+ {:else if section.block == "content"}
29
+ <div class="content prose"><slot/></div>
30
+ {/if}
31
+ {/each}
@@ -0,0 +1,31 @@
1
+ /** @typedef {typeof __propDef.props} BlocksProps */
2
+ /** @typedef {typeof __propDef.events} BlocksEvents */
3
+ /** @typedef {typeof __propDef.slots} BlocksSlots */
4
+ export default class Blocks extends SvelteComponentTyped<{
5
+ title: any;
6
+ page_sections: any;
7
+ posts: any;
8
+ }, {
9
+ [evt: string]: CustomEvent<any>;
10
+ }, {
11
+ default: {};
12
+ }> {
13
+ }
14
+ export type BlocksProps = typeof __propDef.props;
15
+ export type BlocksEvents = typeof __propDef.events;
16
+ export type BlocksSlots = typeof __propDef.slots;
17
+ import { SvelteComponentTyped } from "svelte";
18
+ declare const __propDef: {
19
+ props: {
20
+ title: any;
21
+ page_sections: any;
22
+ posts: any;
23
+ };
24
+ events: {
25
+ [evt: string]: CustomEvent<any>;
26
+ };
27
+ slots: {
28
+ default: {};
29
+ };
30
+ };
31
+ export {};
@@ -0,0 +1,14 @@
1
+ <script>
2
+ export let title;
3
+ export let date;
4
+ </script>
5
+
6
+ <svelte:head>
7
+ <title>{title} | Thunderhead Engineering</title>
8
+ </svelte:head>
9
+
10
+ <div class="prose lg:prose-lg">
11
+ <h1>{title}</h1>
12
+ <p>Published on {date}</p>
13
+ <slot/>
14
+ </div>
@@ -0,0 +1,29 @@
1
+ /** @typedef {typeof __propDef.props} NewsProps */
2
+ /** @typedef {typeof __propDef.events} NewsEvents */
3
+ /** @typedef {typeof __propDef.slots} NewsSlots */
4
+ export default class News extends SvelteComponentTyped<{
5
+ title: any;
6
+ date: any;
7
+ }, {
8
+ [evt: string]: CustomEvent<any>;
9
+ }, {
10
+ default: {};
11
+ }> {
12
+ }
13
+ export type NewsProps = typeof __propDef.props;
14
+ export type NewsEvents = typeof __propDef.events;
15
+ export type NewsSlots = typeof __propDef.slots;
16
+ import { SvelteComponentTyped } from "svelte";
17
+ declare const __propDef: {
18
+ props: {
19
+ title: any;
20
+ date: any;
21
+ };
22
+ events: {
23
+ [evt: string]: CustomEvent<any>;
24
+ };
25
+ slots: {
26
+ default: {};
27
+ };
28
+ };
29
+ export {};