tecitheme 1.2.3 → 1.3.0

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.
@@ -12,8 +12,8 @@ export function humanizeProduct(product) {
12
12
  return "License Manager";
13
13
  case "usage":
14
14
  return "Usage (Internal)"
15
- case "sales-licensing":
16
- return "Sales & Licensing";
15
+ case "purchasing-licensing":
16
+ return "Purchasing, Licensing, & Support";
17
17
  default:
18
18
  return product;
19
19
  }
@@ -9,42 +9,26 @@
9
9
  let modalData;
10
10
  let resellerIndex = -1;
11
11
 
12
- let resellerArray = [
13
- ['BE', 'NL', 'LU'],
14
- ['CN', 'HK'],
15
- ['CZ', 'SK'],
16
- ['FR'],
17
- ['DE', 'CH', 'AT', 'LI'],
18
- ['GR','CY'],
19
- ['IN', 'BD', 'LK', 'CM', 'BT', 'MM'],
20
- ['IT', 'HU'],
21
- ['JP'],
22
- ['KR'],
23
- ['PL', 'UA'],
24
- ['RO'],
25
- ['SG', 'MY', 'ID', 'VN'],
26
- ['ES'],
27
- ];
28
-
29
- let resellerLinks = [
30
- 'aeolus-consulting',
31
- 'beijing-huanzhongruichi-technology-co.-ltd.-(reachsoft)',
32
- 'recognity-s.r.o.',
33
- '1point2',
34
- 'simtego-gmbh',
35
- 'elitesoft-srl',
36
- 'shiretechnik-solutions',
37
- 'cantene-s.r.l',
38
- 'cae-solutions-corporation',
39
- 'basissoft-inc.',
40
- 'stigo-sp.-z-o.o.',
41
- 'sigura-total-fire-and-building-engineering-srl.',
42
- 'building-system-and-diagnostics-pte.-ltd.-(bsd)',
43
- 'incendio3d',
12
+ const regionArray = [
13
+ ['Belgium','Netherlands','Luxembourg'],
14
+ ['Brazil'],
15
+ ['China','Hong Kong'],
16
+ ['Czech Republic','Slovakia'],
17
+ ['France'],
18
+ ['Germany','Switzerland','Austria','Liechtenstein'],
19
+ ['Greece','Cyprus'],
20
+ ['India','Bangladesh','Sri Lanka','Nepal','Bhutan','Myanmar'],
21
+ ['Italy','Hungary'],
22
+ ['Japan'],
23
+ ['South Korea'],
24
+ ['Poland','Ukraine'],
25
+ ['Romania'],
26
+ ['Singapore','Malaysia','Indonesia','Vietnam'],
27
+ ['Spain']
44
28
  ];
45
29
 
46
30
  function isReseller() {
47
- resellerIndex = resellerArray.findIndex((arr) => arr.includes(selection));
31
+ resellerIndex = regionArray.findIndex((arr) => arr.includes(selection));
48
32
  return resellerIndex > -1;
49
33
  }
50
34
 
@@ -62,7 +46,21 @@
62
46
  }
63
47
 
64
48
  $:modalData = {
65
- modalContent: `<h2 class="text-lg leading-6 font-medium text-gray-900">Reseller Required</h2><div class="mt-2 px-7 py-3"><p class="text-sm text-gray-500">Thunderhead cannot sell to you directly, you must use the authorized reseller for your region.</p></div><div class="items-center px-4 py-3"><a href="https://www.thunderheadeng.com/partners/#${resellerLinks[resellerIndex]}" id="ok-btn" class="px-4 py-2 bg-teci-blue-light text-white text-base font-medium w-full shadow-sm hover:bg-teci-blue-dark focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">Reseller Contact Information</a></div>`,
49
+ modalContent: `<h2 class="text-lg leading-6 font-medium text-gray-900">
50
+ Reseller Required
51
+ </h2>
52
+ <div class="mt-2 px-7 py-3">
53
+ <p class="text-sm text-gray-500">
54
+ Thunderhead cannot sell to you directly, you must use the authorized reseller for your region.
55
+ </p>
56
+ </div>
57
+ <div class="items-center px-4 py-3">
58
+ <a href="https://www.thunderheadeng.com/partners?region=${encodeURIComponent(selection)}"
59
+ id="ok-btn"
60
+ class="px-4 py-2 bg-teci-blue-light text-white text-base font-medium w-full shadow-sm hover:bg-teci-blue-dark focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
61
+ Reseller Contact Information
62
+ </a>
63
+ </div>`
66
64
  };
67
65
  </script>
68
66
 
@@ -72,92 +70,92 @@
72
70
  on:change="{handleSelection}"
73
71
  >
74
72
  <option value="sel">Select Your Country</option>
75
- <option value="AI">Anguilla</option>
76
- <option value="AR">Argentina</option>
77
- <option value="AM">Armenia</option>
78
- <option value="AU">Australia</option>
79
- <option value="AT">Austria</option>
80
- <option value="AZ">Azerbaijan</option>
81
- <option value="BD">Bangladesh</option>
82
- <option value="BY">Belarus</option>
83
- <option value="BE">Belgium</option>
84
- <option value="BR">Brazil</option>
85
- <option value="CA">Canada</option>
86
- <option value="CL">Chile</option>
87
- <option value="HR">Croatia</option>
88
- <option value="CN">China</option>
89
- <option value="CR">Costa Rica</option>
90
- <option value="CY">Cyprus</option>
91
- <option value="CZ">Czech Republic</option>
92
- <option value="DK">Denmark</option>
93
- <option value="DO">Dominican Republic</option>
94
- <option value="EC">Ecuador</option>
95
- <option value="EG">Egypt</option>
96
- <option value="EE">Estonia</option>
97
- <option value="FO">Faroe Islands</option>
98
- <option value="FI">Finland</option>
99
- <option value="FR">France</option>
100
- <option value="GE">Georgia</option>
101
- <option value="DE">Germany</option>
102
- <option value="GR">Greece</option>
103
- <option value="HK">Hong Kong</option>
104
- <option value="HU">Hungary</option>
105
- <option value="IS">Iceland</option>
106
- <option value="IN">India</option>
107
- <option value="ID">Indonesia</option>
108
- <option value="IE">Ireland</option>
109
- <option value="IL">Israel</option>
110
- <option value="IT">Italy</option>
111
- <option value="JM">Jamaica</option>
112
- <option value="JP">Japan</option>
113
- <option value="JO">Jordan</option>
114
- <option value="KZ">Kazakhstan</option>
115
- <option value="KW">Kuwait</option>
116
- <option value="KG">Kyrgyzstan</option>
117
- <option value="LV">Latvia</option>
118
- <option value="LB">Lebanon</option>
119
- <option value="LT">Lithuania</option>
120
- <option value="LU">Luxembourg</option>
121
- <option value="MY">Malaysia</option>
122
- <option value="MT">Malta</option>
123
- <option value="MX">Mexico</option>
124
- <option value="MD">Moldova</option>
125
- <option value="MM">Myanmar</option>
126
- <option value="CM">Nepal</option>
127
- <option value="NL">Netherlands</option>
128
- <option value="NZ">New Zealand</option>
129
- <option value="NO">Norway</option>
130
- <option value="OM">Oman</option>
131
- <option value="PE">Peru</option>
132
- <option value="PH">Philippines</option>
133
- <option value="PL">Poland</option>
134
- <option value="PT">Portugal</option>
135
- <option value="QA">Qatar</option>
136
- <option value="RO">Romania</option>
137
- <option value="RU">Russia</option>
138
- <option value="SA">Saudi Arabia</option>
139
- <option value="SG">Singapore</option>
140
- <option value="SK">Slovakia</option>
141
- <option value="SI">Slovenia</option>
142
- <option value="ZA">South Africa</option>
143
- <option value="KR">South Korea</option>
144
- <option value="ES">Spain</option>
145
- <option value="LK">Sri Lanka</option>
146
- <option value="SE">Sweden</option>
147
- <option value="CH">Switzerland</option>
148
- <option value="TW">Taiwan</option>
149
- <option value="TJ">Tajikistan</option>
150
- <option value="TH">Thailand</option>
151
- <option value="TR">Turkey</option>
152
- <option value="TM">Turkmenistan</option>
153
- <option value="UA">Ukraine</option>
154
- <option value="AE">United Arab Emirates</option>
155
- <option value="GB">United Kingdom</option>
156
- <option value="US">United States</option>
157
- <option value="UY">Uruguay</option>
158
- <option value="UZ">Uzbekistan</option>
159
- <option value="VE">Venezuela</option>
160
- <option value="VN">Viet Nam</option>
73
+ <option value="Anguilla">Anguilla</option>
74
+ <option value="Argentina">Argentina</option>
75
+ <option value="Armenia">Armenia</option>
76
+ <option value="Australia">Australia</option>
77
+ <option value="Austria">Austria</option>
78
+ <option value="Azerbaijan">Azerbaijan</option>
79
+ <option value="Bangladesh">Bangladesh</option>
80
+ <option value="Belarus">Belarus</option>
81
+ <option value="Belgium">Belgium</option>
82
+ <option value="Brazil">Brazil</option>
83
+ <option value="Canada">Canada</option>
84
+ <option value="Chile">Chile</option>
85
+ <option value="Croatia">Croatia</option>
86
+ <option value="China">China</option>
87
+ <option value="Costa Rica">Costa Rica</option>
88
+ <option value="Cyprus">Cyprus</option>
89
+ <option value="Czech Republic">Czech Republic</option>
90
+ <option value="Denmark">Denmark</option>
91
+ <option value="Dominican Republic">Dominican Republic</option>
92
+ <option value="Ecuador">Ecuador</option>
93
+ <option value="Egypt">Egypt</option>
94
+ <option value="Estonia">Estonia</option>
95
+ <option value="Faroe Islands">Faroe Islands</option>
96
+ <option value="Finland">Finland</option>
97
+ <option value="France">France</option>
98
+ <option value="Georgia">Georgia</option>
99
+ <option value="Germany">Germany</option>
100
+ <option value="Greece">Greece</option>
101
+ <option value="Hong Kong">Hong Kong</option>
102
+ <option value="Hungary">Hungary</option>
103
+ <option value="Iceland">Iceland</option>
104
+ <option value="India">India</option>
105
+ <option value="Indonesia">Indonesia</option>
106
+ <option value="Ireland">Ireland</option>
107
+ <option value="Israel">Israel</option>
108
+ <option value="Italy">Italy</option>
109
+ <option value="Jamaica">Jamaica</option>
110
+ <option value="Japan">Japan</option>
111
+ <option value="Jordan">Jordan</option>
112
+ <option value="Kazakhstan">Kazakhstan</option>
113
+ <option value="Kuwait">Kuwait</option>
114
+ <option value="Kyrgyzstan">Kyrgyzstan</option>
115
+ <option value="Latvia">Latvia</option>
116
+ <option value="Lebanon">Lebanon</option>
117
+ <option value="Lithuania">Lithuania</option>
118
+ <option value="Luxembourg">Luxembourg</option>
119
+ <option value="Malaysia">Malaysia</option>
120
+ <option value="Malta">Malta</option>
121
+ <option value="Mexico">Mexico</option>
122
+ <option value="Moldova">Moldova</option>
123
+ <option value="Myanmar">Myanmar</option>
124
+ <option value="Nepal">Nepal</option>
125
+ <option value="Netherlands">Netherlands</option>
126
+ <option value="New Zealand">New Zealand</option>
127
+ <option value="Norway">Norway</option>
128
+ <option value="Oman">Oman</option>
129
+ <option value="Peru">Peru</option>
130
+ <option value="Philippines">Philippines</option>
131
+ <option value="Poland">Poland</option>
132
+ <option value="Portugal">Portugal</option>
133
+ <option value="Qatar">Qatar</option>
134
+ <option value="Romania">Romania</option>
135
+ <option value="Russia">Russia</option>
136
+ <option value="Saudi Arabia">Saudi Arabia</option>
137
+ <option value="Singapore">Singapore</option>
138
+ <option value="Slovakia">Slovakia</option>
139
+ <option value="Slovenia">Slovenia</option>
140
+ <option value="South Africa">South Africa</option>
141
+ <option value="South Korea">South Korea</option>
142
+ <option value="Spain">Spain</option>
143
+ <option value="Sri Lanka">Sri Lanka</option>
144
+ <option value="Sweden">Sweden</option>
145
+ <option value="Switzerland">Switzerland</option>
146
+ <option value="Taiwan">Taiwan</option>
147
+ <option value="Tajikistan">Tajikistan</option>
148
+ <option value="Thailand">Thailand</option>
149
+ <option value="Turkey">Turkey</option>
150
+ <option value="Turkmenistan">Turkmenistan</option>
151
+ <option value="Ukraine">Ukraine</option>
152
+ <option value="United Arab Emirates">United Arab Emirates</option>
153
+ <option value="United Kingdom">United Kingdom</option>
154
+ <option value="United States">United States</option>
155
+ <option value="Uruguay">Uruguay</option>
156
+ <option value="Uzbekistan">Uzbekistan</option>
157
+ <option value="Venezuela">Venezuela</option>
158
+ <option value="Viet Nam">Viet Nam</option>
161
159
  </select>
162
160
 
163
161
  <Modal bind:this="{modal}" bind:data="{modalData}" />
@@ -489,6 +489,7 @@
489
489
  placeholderShort="Search"
490
490
  indices={[searchIndex]}
491
491
  title=""
492
+ keyCombo={["Control", "y"]}
492
493
  />
493
494
  </div>
494
495
  </div>
@@ -1,15 +1,21 @@
1
1
  <script>
2
2
  import { filter_partners, get_supported_regions } from "../partners";
3
+ import { page } from "$app/stores";
3
4
  import { slide } from "svelte/transition";
4
5
  import { cubicIn, cubicOut } from "svelte/easing";
5
6
  import Icon from "./Icon.svelte";
6
7
  import slugify from "slugify";
7
- import { onMount } from "svelte";
8
+ import { onMount, beforeUpdate} from "svelte";
8
9
  import { makeIdString } from "../utils";
9
10
 
10
11
  export let data, all_partners;
11
12
  let {name, product} = data;
13
+ let regionParam;
12
14
 
15
+ beforeUpdate(() => {
16
+ regionParam = $page.url.searchParams.get("region");
17
+ });
18
+
13
19
  //List of all partners for the specified product
14
20
  let partners = filter_partners(product, [], all_partners).partners;
15
21
 
@@ -32,13 +38,18 @@
32
38
 
33
39
  //Get anchor tag to expand specific elements
34
40
  onMount(async () => {
41
+ if (regionParam) {
42
+ if (filter_partners(product, [regionParam], all_partners).partners.length > 0) {
43
+ regionSelector[regionParam] = true;
44
+ }
45
+ }
46
+ refresh();
35
47
  let anchor = window.location.href.split("#")[1];
36
48
  if (!(anchor == undefined))
37
49
  {
38
50
  expanded[anchor] = true;
39
51
  }
40
52
  })
41
-
42
53
  </script>
43
54
 
44
55
  <div id={id} class="flex flex-col space-y-12 py-6">
@@ -64,6 +75,7 @@
64
75
  name={region}
65
76
  type="checkbox"
66
77
  class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600"
78
+ checked={regionParam == region}
67
79
  on:change={(e) => {
68
80
  regionSelector[region] = e.target.checked;
69
81
  refresh();
@@ -1,9 +1,12 @@
1
1
  <script>
2
2
  import { getModalStore } from "@skeletonlabs/skeleton";
3
3
 
4
- export let id, placeholder, placeholderShort, filters, title, indices;
4
+ export let id, placeholder, placeholderShort, filters, title, indices, keyCombo;
5
5
  export let showRefinements = undefined;
6
6
 
7
+ // Let users specify a key combo using Javascript key names, or default to Ctrl+K
8
+ keyCombo = keyCombo ? keyCombo : ["Control", "k"]
9
+
7
10
  const modalStore = getModalStore();
8
11
 
9
12
  const modal = {
@@ -35,28 +38,48 @@
35
38
  modalStore.trigger(modal)
36
39
  };
37
40
 
38
- let isCtrlDown = false;
39
- let isKDown = false;
40
-
41
+ // Fill an array to track which keys of the assigned combo have been pressed
42
+ let keysPressed = Array(keyCombo.length).fill(false);
41
43
  function onKeyMove(e, value)
42
44
  {
43
- switch(e.key)
45
+ // If a combo key is pressed or released, track that state
46
+ if (keyCombo.includes(e.key))
44
47
  {
45
- case "Control":
46
- isCtrlDown = value;
47
- break;
48
- case "k":
49
- isKDown = value;
50
- break;
48
+ keysPressed[keyCombo.indexOf(e.key)] = value;
51
49
  }
50
+
51
+ // Check that every combo key is currently pressed
52
+ const comboMatch = keysPressed.every(v => v === true);
52
53
 
53
- if (isCtrlDown && isKDown && !isModalOpen)
54
+ // If combo is pressed and modal isn't open, open the modal
55
+ if (comboMatch && !isModalOpen)
54
56
  {
55
57
  triggerSearch()
56
58
  e.preventDefault();
57
59
  }
58
60
  }
59
61
 
62
+ // Clean up the key combo names for display in the UI.
63
+ // This isn't exhaustive, and may need updated in the future to account for other keys
64
+ let keyComboDisplayValues = []
65
+ function createKeyDisplayValue(key)
66
+ {
67
+ switch (key)
68
+ {
69
+ case "Control":
70
+ return "Ctrl";
71
+ case "Escape":
72
+ return "Esc";
73
+ case "LShift":
74
+ return "LShift";
75
+ case "RShift":
76
+ return "RShift";
77
+ default:
78
+ return key.toUpperCase();
79
+ }
80
+ }
81
+ keyComboDisplayValues = keyCombo.map(key => createKeyDisplayValue(key));
82
+
60
83
  </script>
61
84
 
62
85
  <svelte:window
@@ -71,5 +94,5 @@
71
94
  <span class="hidden md:flex">{placeholder}</span>
72
95
  <span class="flex md:hidden">{placeholderShort}</span>
73
96
  <div class="hidden md:flex flex-grow"></div>
74
- <span class="hidden md:flex">Ctrl+K</span>
97
+ <span class="hidden md:flex">{keyComboDisplayValues.join("+")}</span>
75
98
  </button>
@@ -8,6 +8,7 @@ export default class SearchBar extends SvelteComponent<{
8
8
  placeholderShort: any;
9
9
  filters: any;
10
10
  indices: any;
11
+ keyCombo: any;
11
12
  showRefinements?: any;
12
13
  }, {
13
14
  [evt: string]: CustomEvent<any>;
@@ -25,6 +26,7 @@ declare const __propDef: {
25
26
  placeholderShort: any;
26
27
  filters: any;
27
28
  indices: any;
29
+ keyCombo: any;
28
30
  showRefinements?: any;
29
31
  };
30
32
  events: {
@@ -1,11 +1,26 @@
1
1
  <script>
2
+ import { debounce } from "instantsearch.js/es/lib/utils";
2
3
  import { SearchBox } from "svelte-algolia-instantsearch";
3
4
 
4
5
  export let placeholder;
5
6
  export let placeholderShort;
7
+
8
+ // Just debounces searches by 300ms. Almost not noticeable to users, but should clean up our query analytics
9
+ const debouncedRefine = debounce((refine, query) =>
10
+ {
11
+ refine(query);
12
+ }, 300);
13
+
14
+ // Hook to use the debounced refinement
15
+ function queryHook(query, refine)
16
+ {
17
+ debouncedRefine(refine, query);
18
+ }
6
19
  </script>
7
20
 
8
21
  <SearchBox
22
+ {queryHook}
23
+ {placeholder}
9
24
  classes={{
10
25
  root: "hidden md:flex w-full",
11
26
  form: "w-full relative",
@@ -14,10 +29,11 @@
14
29
  submitIcon: "w-3 h-3",
15
30
  reset: "absolute hidden right-0 top-0 w-0 h-0"
16
31
  }}
17
- placeholder={placeholder}
18
32
  />
19
33
 
20
34
  <SearchBox
35
+ {queryHook}
36
+ placeholder={placeholderShort}
21
37
  classes={{
22
38
  root: "flex md:hidden w-full",
23
39
  form: "w-full relative",
@@ -25,5 +41,4 @@
25
41
  submit: "absolute left-0 top-1/2 w-6 h-6 -translate-y-1/2 translate-x-1/2",
26
42
  reset: "absolute hidden right-0 top-0 w-0 h-0"
27
43
  }}
28
- placeholder={placeholderShort}
29
44
  />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tecitheme",
3
- "version": "1.2.3",
3
+ "version": "1.3.0",
4
4
  "license": "MIT",
5
5
  "scripts": {
6
6
  "dev": "vite dev",