@iamproperty/components 5.7.1-beta2 → 5.7.1-beta4

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.
Files changed (56) hide show
  1. package/assets/css/components/barchart.component.css +1 -0
  2. package/assets/css/components/barchart.component.css.map +1 -0
  3. package/assets/css/components/charts.config.css +1 -0
  4. package/assets/css/components/charts.config.css.map +1 -0
  5. package/assets/css/components/charts.module.css +1 -0
  6. package/assets/css/components/charts.module.css.map +1 -0
  7. package/assets/css/components/tabs.css +1 -1
  8. package/assets/css/components/tabs.css.map +1 -1
  9. package/assets/css/core.min.css +1 -1
  10. package/assets/css/core.min.css.map +1 -1
  11. package/assets/css/style.min.css +1 -1
  12. package/assets/css/style.min.css.map +1 -1
  13. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  14. package/assets/js/components/actionbar/actionbar.component.min.js +1 -1
  15. package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
  16. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  17. package/assets/js/components/barchart/barchart.component.js +53 -0
  18. package/assets/js/components/barchart/barchart.component.min.js +21 -0
  19. package/assets/js/components/barchart/barchart.component.min.js.map +1 -0
  20. package/assets/js/components/card/card.component.min.js +1 -1
  21. package/assets/js/components/carousel/carousel.component.min.js +1 -1
  22. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  23. package/assets/js/components/fileupload/fileupload.component.js +2 -1
  24. package/assets/js/components/fileupload/fileupload.component.min.js +4 -4
  25. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  26. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  27. package/assets/js/components/header/header.component.min.js +1 -1
  28. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  29. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  30. package/assets/js/components/multiselect/multiselect.component.min.js +1 -1
  31. package/assets/js/components/nav/nav.component.min.js +1 -1
  32. package/assets/js/components/notification/notification.component.min.js +1 -1
  33. package/assets/js/components/pagination/pagination.component.min.js +1 -1
  34. package/assets/js/components/search/search.component.min.js +1 -1
  35. package/assets/js/components/slider/slider.component.min.js +1 -1
  36. package/assets/js/components/table/table.component.min.js +1 -1
  37. package/assets/js/components/tabs/tabs.component.min.js +4 -4
  38. package/assets/js/dynamic.min.js +1 -1
  39. package/assets/js/modules/chart.module.js +350 -0
  40. package/assets/js/scripts.bundle.js +1 -1
  41. package/assets/js/scripts.bundle.min.js +1 -1
  42. package/assets/sass/_components.scss +0 -8
  43. package/assets/sass/_corefiles.scss +2 -0
  44. package/assets/sass/components/barchart.component.scss +341 -0
  45. package/assets/sass/components/charts.config.scss +79 -0
  46. package/assets/sass/components/charts.module.scss +652 -0
  47. package/assets/sass/components/tabs.scss +3 -14
  48. package/assets/ts/components/barchart/README.md +37 -0
  49. package/assets/ts/components/barchart/barchart.component.ts +79 -0
  50. package/assets/ts/components/fileupload/fileupload.component.ts +2 -1
  51. package/assets/ts/modules/chart.module.ts +506 -0
  52. package/dist/components.es.js +11 -11
  53. package/dist/components.umd.js +24 -24
  54. package/dist/style.css +1 -1
  55. package/package.json +1 -1
  56. package/src/components/BarChart/BarChart.vue +25 -0
@@ -0,0 +1,350 @@
1
+ import { numberOfDays } from './helpers.js';
2
+ // #region Functions that setup and trigger other functions
3
+ export const addClasses = (chartElement) => {
4
+ // add colour classes
5
+ for (let i = 1; i <= 10; i++) {
6
+ if (chartElement.hasAttribute(`data-colour-${i}`)) {
7
+ let colour = chartElement.getAttribute(`data-colour-${i}`);
8
+ chartElement.style.setProperty(`--chart-colour-${i}`, `var(--chart-colour-${colour})`);
9
+ chartElement.style.setProperty(`--chart-colour-${i}-hover`, `var(--chart-colour-${colour}-hover)`);
10
+ }
11
+ }
12
+ return true;
13
+ };
14
+ export const setupChart = (chartElement, chartOuter, tableElement) => {
15
+ // #region Reset the chart
16
+ // empty divs to re-populate
17
+ const chartKey = chartOuter.querySelector('.chart__key');
18
+ chartKey.innerHTML = '';
19
+ const chartGuidelines = chartOuter.querySelector('.chart__guidelines');
20
+ chartGuidelines.innerHTML = ``;
21
+ const chartYaxis = chartOuter.querySelector('.chart__yaxis');
22
+ chartYaxis.innerHTML = ``;
23
+ // Remove old input fields
24
+ Array.from(chartOuter.querySelectorAll(':scope > input[type="checkbox"],:scope > input[type="radio"]')).map((element) => { element.remove(); });
25
+ // #endregion
26
+ let { xaxis } = getChartData(chartElement, chartOuter);
27
+ setCellData(chartElement, chartOuter, tableElement);
28
+ createChartKey(chartOuter, tableElement, chartKey);
29
+ createChartGuidelines(chartElement, chartOuter, chartGuidelines);
30
+ createChartYaxis(chartElement, chartOuter, chartYaxis);
31
+ if (xaxis) {
32
+ createXaxis(chartElement, chartOuter, xaxis);
33
+ }
34
+ return true;
35
+ };
36
+ // #endregion
37
+ // #region Event handlers and observers
38
+ export const setEventListener = function (chartOuter) {
39
+ let chart = chartOuter.querySelector('.chart');
40
+ chart.addEventListener('mousemove', (event) => {
41
+ if (event && event.target instanceof HTMLElement && event.target.closest('td:not(:first-child')) {
42
+ let column = event.target.closest('td:not(:first-child');
43
+ var rect = column.getBoundingClientRect();
44
+ let x = event.clientX - rect.left;
45
+ let y = event.clientY - rect.top;
46
+ chart.setAttribute('style', `--cursor-x: ${x}px; --cursor-y: ${y}px;`);
47
+ }
48
+ });
49
+ // Use the part for the chart items to pass through states to the pages CSS
50
+ let labels = chartOuter.querySelectorAll('label');
51
+ Array.from(labels).forEach((label) => {
52
+ if (chartOuter.querySelector(`input#${label.getAttribute('for')}`).checked)
53
+ label.setAttribute('part', 'key-checked');
54
+ else
55
+ label.setAttribute('part', 'key-unchecked');
56
+ });
57
+ chartOuter.addEventListener('change', function () {
58
+ Array.from(labels).forEach((label) => {
59
+ if (chartOuter.querySelector(`input#${label.getAttribute('for')}`).checked)
60
+ label.setAttribute('part', 'key-checked');
61
+ else
62
+ label.setAttribute('part', 'key-unchecked');
63
+ });
64
+ });
65
+ };
66
+ export const setEventObservers = function (chartElement, chartOuter) {
67
+ let table = chartElement.querySelector('table');
68
+ let shadowTable = chartOuter.querySelector('table');
69
+ const attributesUpdated = (mutationList, observer) => {
70
+ observer.disconnect();
71
+ observer2.disconnect();
72
+ for (const mutation of mutationList) {
73
+ if (mutation.attributeName == 'class' || (mutation.type === 'attributes' && mutation.attributeName === 'data-total') || mutation.type === 'attributes') {
74
+ shadowTable.innerHTML = table.innerHTML;
75
+ setupChart(chartElement, chartOuter, shadowTable);
76
+ }
77
+ }
78
+ observer.observe(table, { characterData: true, subtree: true });
79
+ observer2.observe(chartElement, { attributes: true });
80
+ };
81
+ const tableUpdated = (mutationList, observer) => {
82
+ observer.disconnect();
83
+ observer2.disconnect();
84
+ for (const mutation of mutationList) {
85
+ if (mutation.type == "characterData" || (mutation.type == "childList" && mutation.addedNodes.length)) {
86
+ shadowTable.innerHTML = table.innerHTML;
87
+ setupChart(chartElement, chartOuter, shadowTable);
88
+ }
89
+ }
90
+ observer.observe(table, { characterData: true, subtree: true });
91
+ observer2.observe(chartElement, { attributes: true });
92
+ };
93
+ let observer = new MutationObserver(tableUpdated);
94
+ let observer2 = new MutationObserver(attributesUpdated);
95
+ observer.observe(table, { characterData: true, subtree: true });
96
+ observer2.observe(chartElement, { attributes: true });
97
+ return true;
98
+ };
99
+ // #endregion
100
+ // #region GET functions
101
+ export const getChartData = function (chartElement, chartOuter) {
102
+ let table = chartOuter.querySelector('.chart__wrapper table');
103
+ let min = chartElement.hasAttribute('data-min') ? chartElement.getAttribute('data-min') : 0;
104
+ let max = chartElement.hasAttribute('data-max') ? chartElement.getAttribute('data-max') : getLargestValue(table);
105
+ let type = chartElement.hasAttribute('data-type') ? chartElement.getAttribute('data-type') : 'column';
106
+ let yaxis = chartElement.hasAttribute('data-yaxis') ? chartElement.getAttribute('data-yaxis').split(',') : [];
107
+ let guidelines = chartElement.hasAttribute('data-guidelines') ? chartElement.getAttribute('data-guidelines').split(',') : [];
108
+ let targets = chartElement.hasAttribute('data-targets') ? JSON.parse(chartElement.getAttribute('data-targets')) : null;
109
+ let events = chartElement.hasAttribute('data-events') ? JSON.parse(chartElement.getAttribute('data-events')) : null;
110
+ let xaxis = chartElement.hasAttribute('data-xaxis') ? chartElement.getAttribute('data-xaxis').split(',') : null;
111
+ let increment = chartElement.hasAttribute('data-increment') ? chartElement.getAttribute('data-increment') : null;
112
+ let start = chartElement.hasAttribute('data-start') ? chartElement.getAttribute('data-start') : 0;
113
+ let end = chartElement.hasAttribute('data-end') ? chartElement.getAttribute('data-end') : getLargestValue(table); // TODO - get largest value from the data-xaxis
114
+ let slope = chartElement.hasAttribute('data-slope') ? chartElement.getAttribute('data-slope') : null;
115
+ let yInt = chartElement.hasAttribute('data-yint') ? chartElement.getAttribute('data-yint') : null;
116
+ return { min, max, type, yaxis, targets, events, xaxis, increment, start, end, slope, yInt, guidelines };
117
+ };
118
+ function getLargestValue(table) {
119
+ let values = Array.from(table.querySelectorAll('tbody td:not(:first-child)')).map((element) => {
120
+ let currentValue = String(element.textContent);
121
+ currentValue = currentValue.replace('£', '');
122
+ currentValue = currentValue.replace('%', '');
123
+ currentValue = currentValue.replace(',', '');
124
+ currentValue = Number.parseFloat(currentValue);
125
+ return currentValue;
126
+ });
127
+ let largetValue = Math.max(...values);
128
+ // TO DO round to the nearest 10, 100, 1000 and so on
129
+ return Math.ceil(largetValue);
130
+ }
131
+ const getValues = function (value, min, max, start) {
132
+ let cleanValue = String(value);
133
+ cleanValue = cleanValue.replace('£', '');
134
+ cleanValue = cleanValue.replace('%', '');
135
+ cleanValue = cleanValue.replace(',', '');
136
+ cleanValue = Number.parseFloat(cleanValue);
137
+ let percent = ((cleanValue - min) / (max - min)) * 100;
138
+ let axis = percent;
139
+ let bottom = 0;
140
+ if (start && start != 0) {
141
+ bottom = ((start - min) / (max - min)) * 100;
142
+ }
143
+ // If the value is negative the position below the 0 line
144
+ if (min < 0) {
145
+ bottom = Math.abs(((min) / (max - min)) * 100);
146
+ if (cleanValue < 0) {
147
+ percent = bottom - percent;
148
+ bottom = bottom - percent;
149
+ axis = bottom;
150
+ }
151
+ else {
152
+ percent = percent - bottom;
153
+ axis = percent + bottom;
154
+ }
155
+ }
156
+ return { percent, axis, bottom };
157
+ };
158
+ // #endregion
159
+ // #region SET functions - set data attributes and classes
160
+ export const setCellData = function (chartElement, chartOuter, table) {
161
+ let { min, max } = getChartData(chartElement, chartOuter);
162
+ let increment = chartElement.getAttribute('data-increment');
163
+ let startDay = min;
164
+ Array.from(table.querySelectorAll('tbody tr')).forEach((tr, index) => {
165
+ let group = tr.querySelector('td:first-child, th:first-child') ? tr.querySelector('td:first-child, th:first-child').textContent : '';
166
+ tr.setAttribute('part', 'group');
167
+ // Set the data numeric value if not set
168
+ Array.from(tr.querySelectorAll('td:not([data-numeric]):not(:first-child)')).forEach((td) => {
169
+ let value = parseFloat(td.textContent.replace('£', '').replace('%', '').replace(',', ''));
170
+ let start = 0;
171
+ if (increment == "days") {
172
+ let dates = td.textContent.split(' - ');
173
+ if (dates[1]) {
174
+ value = numberOfDays(dates[0], dates[1]);
175
+ start = numberOfDays(startDay, dates[0]) - 1;
176
+ }
177
+ }
178
+ td.setAttribute('data-numeric', value);
179
+ td.setAttribute('data-value', td.textContent);
180
+ td.setAttribute('data-start', start);
181
+ });
182
+ // Set the data label value if not set
183
+ Array.from(tr.querySelectorAll('td:not([data-label])')).forEach((td, index) => {
184
+ if (index == 0)
185
+ td.setAttribute('part', 'xaxis-label'); // PART
186
+ else
187
+ td.setAttribute('part', 'value');
188
+ if (tr.querySelectorAll('td').length > 2)
189
+ td.setAttribute('data-label', table.querySelectorAll('thead th')[index].textContent);
190
+ });
191
+ /*
192
+ if(tr.querySelector('[data-label="Total"]')){
193
+ tr.setAttribute('data-total',tr.querySelector('[data-label="Total"][data-numeric]').getAttribute('data-numeric'));
194
+ }
195
+
196
+ if(tr.querySelector('[data-label="Min"]')){
197
+ tr.setAttribute('data-min',tr.querySelector('[data-label="Min"][data-numeric]').getAttribute('data-numeric'));
198
+ }
199
+ if(tr.querySelector('[data-label="Max"]')){
200
+ tr.setAttribute('data-max',tr.querySelector('[data-label="Max"][data-numeric]').getAttribute('data-numeric'));
201
+ }
202
+
203
+ */
204
+ let rowMin = tr.hasAttribute('data-min') ? tr.getAttribute('data-min') : min;
205
+ let rowMax = tr.hasAttribute('data-max') ? tr.getAttribute('data-max') : max;
206
+ if (rowMin < 0) {
207
+ let minBottom = Math.abs(((rowMin) / (rowMax - rowMin)) * 100);
208
+ chartElement.setAttribute('style', `--min-bottom: ${minBottom}%;`);
209
+ }
210
+ // Add a useful index css var for the use of animatons.
211
+ tr.style.setProperty('--row-index', index + 1);
212
+ // Add css vars to cells
213
+ Array.from(tr.querySelectorAll('td[data-numeric]:not([data-label="Min"]):not([data-label="Max"]):not(:first-child)')).forEach((td) => {
214
+ let display = getComputedStyle(td).display;
215
+ if (display == 'none')
216
+ return;
217
+ const content = td.innerHTML;
218
+ const value = Number.parseFloat(td.getAttribute('data-numeric'));
219
+ const start = Number.parseFloat(td.getAttribute('data-start'));
220
+ if (!td.querySelector('span[data-group]'))
221
+ td.innerHTML = `<span data-group="${group}" ${td.hasAttribute('data-label') ? `data-label="${td.getAttribute('data-label')}"` : ''} part="popover">${content}</span>`;
222
+ if (!td.hasAttribute('style')) {
223
+ let { percent, bottom, axis } = getValues(value, rowMin, rowMax, start);
224
+ td.setAttribute('data-percent', percent);
225
+ td.setAttribute("style", `--bottom:${bottom}%;--percent:${percent}%;--axis:${axis}%;`);
226
+ }
227
+ });
228
+ });
229
+ };
230
+ export const setLongestLabel = function (chartOuter) {
231
+ let chartWrapper = chartOuter.querySelector('.chart__wrapper');
232
+ let chartSpacer = chartOuter.querySelector('.chart__spacer span');
233
+ let table = chartOuter.querySelector('.chart table');
234
+ // set the longest label attr so that the bar chart knows what margin to set on the left
235
+ let longestLabel = '';
236
+ Array.from(table.querySelectorAll('tbody tr td:first-child')).forEach((td) => {
237
+ if (typeof td.textContent != "undefined" && td.textContent.length > longestLabel.length) {
238
+ longestLabel = td.textContent;
239
+ }
240
+ });
241
+ chartWrapper.setAttribute('data-longest-label', longestLabel);
242
+ chartSpacer.innerHTML = longestLabel;
243
+ };
244
+ export const setLongestValue = function (chartOuter) {
245
+ let chartWrapper = chartOuter.querySelector('.chart__wrapper');
246
+ let table = chartOuter.querySelector('.chart table');
247
+ let longestValue = '';
248
+ Array.from(table.querySelectorAll('tbody tr td:not(:first-child) span')).forEach((td) => {
249
+ if (typeof td.textContent != "undefined" && td.textContent.length > longestValue.length)
250
+ longestValue = td.textContent;
251
+ });
252
+ chartWrapper.setAttribute('data-longest-value', longestValue);
253
+ };
254
+ // #endregion
255
+ // #region CREATE function
256
+ export const createChartKey = function (chartOuter, tableElement, chartKey) {
257
+ const chartID = `chart-${Date.now() + (Math.floor(Math.random() * 100) + 1)}`;
258
+ //const chartOuter = chartElement.querySelector('.chart__outer');
259
+ let previousInput;
260
+ let headings = Array.from(tableElement.querySelectorAll('thead th'));
261
+ headings.forEach((arrayElement, index) => {
262
+ if (index != 0) {
263
+ previousInput = createChartKeyItem(chartID, index, arrayElement.textContent, chartKey, chartOuter, previousInput);
264
+ }
265
+ if (index == 50) {
266
+ headings.length = index + 1;
267
+ }
268
+ });
269
+ return true;
270
+ };
271
+ function createChartKeyItem(chartID, index, text, chartKey, chartOuter, previousInput) {
272
+ let input = document.createElement('input');
273
+ input.setAttribute('name', `${chartID}-dataset-${index}`);
274
+ input.setAttribute('id', `${chartID}-dataset-${index}`);
275
+ input.checked = true;
276
+ input.setAttribute('type', `checkbox`);
277
+ if (index == 1)
278
+ chartOuter.prepend(input);
279
+ else
280
+ chartOuter.insertBefore(input, previousInput.nextSibling);
281
+ previousInput = input;
282
+ let label = document.createElement('label');
283
+ label.setAttribute('class', `key btn btn-action`);
284
+ label.setAttribute('for', `${chartID}-dataset-${index}`);
285
+ label.setAttribute('data-label', `${text}`);
286
+ label.setAttribute('part', `key`);
287
+ label.innerHTML = `${text}`;
288
+ chartKey.append(label);
289
+ return previousInput;
290
+ }
291
+ export const createChartGuidelines = function (chartElement, chartOuter, chartGuidelines) {
292
+ let { min, max, yaxis, increment, guidelines } = getChartData(chartElement, chartOuter);
293
+ if (!guidelines.length)
294
+ guidelines = yaxis;
295
+ if (increment == "days") {
296
+ max = numberOfDays(min, max);
297
+ min = 0;
298
+ }
299
+ chartGuidelines.innerHTML = '';
300
+ for (var i = 0; i < guidelines.length; i++) {
301
+ let value = parseFloat(guidelines[i].replace('£', '').replace('%', '').replace(',', ''));
302
+ let { axis } = getValues(value, min, max);
303
+ chartGuidelines.innerHTML += `<div class="guideline" style="--percent:${axis}%;">${yaxis.indexOf(guidelines[i]) != -1 ? `<span>${guidelines[i]}</span>` : ''}</div>`;
304
+ }
305
+ };
306
+ export const createChartYaxis = function (chartElement, chartOuter, chartYaxis) {
307
+ let { min, max, yaxis, increment } = getChartData(chartElement, chartOuter);
308
+ let startDay = min;
309
+ if (increment == "days") {
310
+ max = numberOfDays(min, max);
311
+ min = 0;
312
+ }
313
+ chartYaxis.innerHTML = '';
314
+ for (var i = 0; i < yaxis.length; i++) {
315
+ let value = parseFloat(yaxis[i].replace('£', '').replace('%', ''));
316
+ if (increment == "days") {
317
+ value = numberOfDays(startDay, yaxis[i]);
318
+ }
319
+ let { axis } = getValues(value, min, max);
320
+ chartYaxis.innerHTML += `<div class="axis__point" style="--percent:${axis}%;"><span>${yaxis[i]}</span></div>`;
321
+ }
322
+ };
323
+ export const createXaxis = function (chartElement, chartOuter, xaxis) {
324
+ const chart = chartOuter.querySelector('.chart');
325
+ let chartXaxis = chartOuter.querySelector('.chart__xaxis');
326
+ let { increment, start, end } = getChartData(chartElement, chartOuter);
327
+ if (!chartXaxis) {
328
+ chartXaxis = document.createElement('div');
329
+ chartXaxis.setAttribute('class', 'chart__xaxis');
330
+ }
331
+ if (increment && start && end) {
332
+ chartXaxis.innerHTML = '';
333
+ for (var i = 0; i < xaxis.length; i++) {
334
+ let value = parseFloat(xaxis[i].replace('£', '').replace('%', ''));
335
+ let position = ((value - start) / (end - start)) * 100;
336
+ chartXaxis.innerHTML += `<div class="axis__point" style="--percent:${position}%;"><span>${xaxis[i]}</span></div>`;
337
+ }
338
+ }
339
+ chart.prepend(chartXaxis);
340
+ };
341
+ export const createTooltips = function (chartOuter) {
342
+ const titles = chartOuter.querySelectorAll('thead th[title], tbody th[title]:first-child, tbody td[title]:first-child');
343
+ Array.from(titles).forEach((title) => {
344
+ let tooltipId = `tooltip-${Date.now()}-${Math.floor(Math.random() * 100)}`;
345
+ title.innerHTML = `<button class="tooltip" popovertarget="${tooltipId}" part="tooltip" style="anchor-name: --${tooltipId};">${title.textContent}</button><span id="${tooltipId}" style="position-anchor: --${tooltipId};" popover part="tooltip__content" class="tooltip__content">${title.getAttribute('title')}</span>`;
346
+ //title.removeAttribute('title'); // TODO add a supports query for anchor positioning
347
+ });
348
+ };
349
+ // #endregion
350
+ export default setupChart;
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * iamKey v5.7.1-beta2
2
+ * iamKey v5.7.1-beta4
3
3
  * Copyright 2022-2024 iamproperty
4
4
  */(function(I){typeof define=="function"&&define.amd?define(I):I()})(function(){"use strict";var I=r=>(r.classList.add("js-enabled"),(navigator.userAgent.indexOf("MSIE")!==-1||navigator.appVersion.indexOf("Trident/")>0)&&r.classList.add("ie"),null),ct=r=>{var t=function(a){var i=document.querySelector('label[for="'.concat(a.replace("#",""),'"]')),c=document.querySelector(a+" summary"),o=document.querySelector("dialog".concat(a)),n=document.querySelector("detail".concat(a));i instanceof HTMLElement?i.click():c instanceof HTMLElement?c.click():o instanceof HTMLElement?o.showModal():n instanceof HTMLElement&&n.addAttribute("open")};return location.hash&&t(location.hash),window.addEventListener("hashchange",function(){t(location.hash)},!1),addEventListener("popstate",e=>{if(e&&e.state&&e.state.type&&e.state.type=="pagination"){var a=document.querySelector("#".concat(e.state.form)),i=document.querySelector("#".concat(e.state.form," [data-pagination]"));i?i.value=e.state.page:a.innerHTML+='<input name="page" type="hidden" data-pagination="true" value="'.concat(e.state.page,'" />'),a.dispatchEvent(new Event("submit"))}}),document.addEventListener("submit",e=>{if(e&&e.target instanceof HTMLElement&&e.target.matches("form")){var a=e.target;Array.from(a.querySelectorAll("[data-password-type]")).forEach((i,c)=>{i.setAttribute("type","password")}),(a.querySelector(":invalid")||a.querySelector('.pwd-checker[data-strength="1"]')||a.querySelector('.pwd-checker[data-strength="2"]'))&&(a.classList.add("was-validated"),e.preventDefault()),a.querySelector("iam-multiselect[data-is-required][data-error]")&&(a.classList.add("was-validated"),e.preventDefault())}}),document.addEventListener("keydown",e=>{e.key==="Escape"&&document.querySelector(".dialog--transactional[open], .dialog--acknowledgement[open]")&&(e.preventDefault(),e.stopPropagation())}),Array.from(document.querySelectorAll("label progress")).forEach((e,a)=>{var i=e.closest("label");i.setAttribute("data-percent",e.getAttribute("value"))}),null},dt=function(t){return typeof t!="string"?!1:!isNaN(t)&&!isNaN(parseFloat(t))},lt=(r,t)=>String(r).padStart(t,"0"),ut=r=>r.charAt(0).toUpperCase()+r.slice(1),C=(r,t,e)=>t.split(/[\.\[\]\'\"]/).filter(a=>a).reduce((a,i)=>a?a[i]:e,r),ht=(r,t,e,a)=>{var i=Math.tan(.375*Math.PI),c=window.innerWidth||document.body.clientWidth,o=Math.max(1,Math.floor(.01*c)),n=e-r,d=a-t,s=Math.abs(n/d),l=Math.abs(d/n);if(Math.abs(n)>o||Math.abs(d)>o){if(l<=i)return n<0?"left":"right";if(s<=i)return d<0?"top":"bottom"}else return"tap"};class ft{constructor(t){document.body.classList.contains("youtubeLoaded")?t.addEventListener("click",function(e){for(var a=e.target;a&&a!=this;a=a.parentNode)if(a.matches("a")){e.preventDefault(),U(a);break}},!1):this.loadScripts(t,this.createEmbed)}loadScripts(t){return new Promise((e,a)=>{var i=new Image;i.onload=function(){var c=document.createElement("script");c.src="https://www.youtube.com/iframe_api";var o=document.getElementsByTagName("script")[0];o.parentNode.insertBefore(c,o),document.body.classList.add("youtubeLoaded"),e(!0),c.onload=()=>{t.addEventListener("click",function(n){console.log("click"),n&&n.target instanceof HTMLElement&&n.target.closest("a")&&(n.preventDefault(),U(n.target.closest("a")))},!1)}},i.onerror=function(){a(!1)},i.src="https://youtube.com/favicon.ico"})}}var U=function(t){typeof window.player<"u"&&typeof window.player.pauseVideo=="function"&&window.player.pauseVideo();var e=t.getAttribute("data-id"),a=t.getAttribute("id");if(typeof a>"u"||a==null){var i=String.fromCharCode(65+Math.floor(Math.random()*26));a=i+Date.now(),t.setAttribute("id",a)}function c(){window.player=new YT.Player(a,{height:"100%",width:"100%",videoId:e,playerVars:{modestbranding:1,playsinline:1,rel:0,showinfo:0},events:{onReady:o,onStateChange:d}})}c();function o(s){s.target.playVideo()}var n=!1;function d(s){if(s.data==YT.PlayerState.PLAYING&&!n){var l=document.getElementById(a);l.classList.add("player-ready"),n=!0}}},bt=r=>(Array.from(r.querySelectorAll("dialog[open]")).forEach((t,e)=>{var a=t.closest(".dialog__wrapper");a||(t.removeAttribute("open"),t.showModal(),t.focus(),X(t))}),r.addEventListener("click",t=>{if(t.target.tagName=="IAM-ACTIONBAR")return!1;if(t&&t.target instanceof HTMLElement&&t.target.closest("[data-modal]")){var e=t.target.closest("[data-modal]"),a=e.hasAttribute("data-modal")?e.getAttribute("data-modal"):e.getAttribute("data-filter"),i=document.querySelector("dialog#".concat(a));X(i),i.showModal(),i.focus();var c=i.offsetWidth;i.setAttribute("style","max-width: ".concat(c,"px;")),Array.from(i.querySelectorAll("[data-duplicate]")).forEach((L,S)=>{var T=L.getAttribute("data-duplicate"),E=document.getElementById(T);if(L.checked!=E.checked){L.checked=E.checked;var M=new Event("change");L.dispatchEvent(M)}}),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"openModal",id:a})}if(t&&t.target instanceof HTMLElement&&t.target.closest("button.dialog__close")){var o=t.target.closest("dialog[open]");t.preventDefault(),o.close(),Array.from(document.querySelectorAll(".dialog__wrapper > button")).forEach((L,S)=>{L.classList.remove("active")});var n=new CustomEvent("dialog-closed",{bubbles:!0,cancelable:!0,detail:{modalId:o.id}});t.target.dispatchEvent(n),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"closeModal",id:o.getAttribute("id")})}if(t&&t.target instanceof HTMLElement&&t.target.closest('button[formmethod="dialog"]')){var d=t.target.closest("dialog[open]");Array.from(document.querySelectorAll(".dialog__wrapper > button")).forEach((L,S)=>{L.classList.remove("active")}),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"closeModal",id:d.getAttribute("id")})}if(t&&t.target instanceof HTMLElement&&t.target.closest("dialog[open]")){var s=t.target.closest("dialog[open]"),l=window.getComputedStyle(s);if(l.display==="contents"&&(s=s.parentNode.closest("dialog[open]")),!s.classList.contains("dialog--transactional")&&!s.classList.contains("dialog--acknowledgement")){var h=s.getBoundingClientRect();(t.clientX<h.left||t.clientX>h.right||t.clientY<h.top||t.clientY>h.bottom)&&(t.target.closest("dialog *")||s.close(),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"closeModal",id:s.getAttribute("id")}))}}if(t&&t.target instanceof HTMLElement&&t.target.closest(".dialog__wrapper > button")){t.stopPropagation();var b=t.target.closest(".dialog__wrapper > button"),v=b.parentNode,u="openPopover",f=v.querySelector(":scope > dialog");if(document.querySelector("*:not([data-keep-open]) > dialog[open]")&&document.querySelector("*:not([data-keep-open]) > dialog[open]")!=f&&b.closest("dialog[open]")!=document.querySelector("*:not([data-keep-open]) > dialog[open]")&&document.querySelector("*:not([data-keep-open]) > dialog[open]").close(),Array.from(document.querySelectorAll(".dialog__wrapper > button")).forEach((L,S)=>{L.removeAttribute("aria-expanded")}),f.hasAttribute("open"))f.close(),u="closePopover",f.removeAttribute("style"),b.removeAttribute("aria-expanded");else{f.show(),b.setAttribute("aria-expanded",!0);var m=b.getBoundingClientRect(),p=m.top,y=m.left;if(b.closest("iam-table")){var g=b.closest("iam-table").parentNode.getBoundingClientRect();p-=g.top,y-=g.left}f.classList.contains("dialog--fix")&&f.setAttribute("style","position:fixed;top: ".concat(p,"px; left: ").concat(y,"px; margin: 3rem 0 0 0;"))}var A=f.getBoundingClientRect(),q=A.bottom-window.scrollY,x=window.innerHeight-window.scrollY;if(q>x){var k=f.hasAttribute("style")?f.getAttribute("style")+" ":"";f.setAttribute("style",k+"transform: translate(0, calc(-100% - 4rem))"),A=f.getBoundingClientRect();var w=A.top-window.scrollY;w<100&&f.removeAttribute("style")}window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:u,id:b.textContent})}t&&t.target instanceof HTMLElement&&!t.target.closest("dialog[open]")&&!t.target.closest(".dialog__wrapper > button")&&(document.querySelector(".dialog__wrapper:not([data-keep-open]) > dialog[open]")&&document.querySelector(".dialog__wrapper:not([data-keep-open]) > dialog[open]").close(),Array.from(document.querySelectorAll(".dialog__wrapper:not([data-keep-open]) > button")).forEach((L,S)=>{L.removeAttribute("aria-expanded")}))}),null),X=r=>{var t=r.querySelector(".youtube-embed a");if(t&&U(t),r.classList.contains("dialog--multi")&&!r.querySelector(":scope > .steps")&&vt(r),!r.querySelector(":scope .mh-lg")&&!r.classList.contains("dialog--multi")){r.innerHTML='<div class="mh-lg">'.concat(r.innerHTML,"</div>");var e=r.querySelector(".mh-lg"),a=r.querySelector(".mh-lg :is(.h1,.h2,.h3,.h4,.h5,.h6)");if(a){var i=a.previousSibling;e.before(a),i&&a.before(i)}}r.querySelector(":scope > button:first-child")||r.insertAdjacentHTML("afterbegin",'<button class="dialog__close">Close</button>')},vt=r=>{var t="",e=Array.from(r.querySelectorAll("fieldset[data-title]")),a=r.querySelector("form");e.forEach((s,l)=>{t+='<button data-title="'.concat(s.getAttribute("data-title"),'" type="button" class="').concat(l==0?"active":"",'" tabindex="-1">').concat(s.getAttribute("data-title"),"</button>");var h=document.createElement("div");if(h.classList.add("btn--wrapper"),s.appendChild(h),l!=0&&(h.innerHTML+='<button data-title="'.concat(e[l-1].getAttribute("data-title"),'" class="btn btn-secondary mb-0" data-previous type="button">Previous</button>')),l!=e.length-1&&(h.innerHTML+='<button data-title="'.concat(e[l+1].getAttribute("data-title"),'" class="btn btn-primary mb-0" data-next type="button">Next</button>')),l==e.length-1)if(a&&a.querySelector(':scope > button[type="submit"]')){var b=a.querySelector(':scope > button[type="submit"]');b.classList.add("mb-0"),h.insertAdjacentElement("beforeend",b)}else h.innerHTML+='<button data-title="'.concat(e[l].getAttribute("data-title"),'" class="btn btn-primary mb-0" data-next type="submit">Submit</button>')}),r.insertAdjacentHTML("afterbegin",'<div class="steps bg-primary">'.concat(t,"</div>"));for(var i=Array.from(r.querySelectorAll("fieldset.was-validated")),c=0;c<i.length;c++){var o=i[c],n=o.getAttribute("data-title");if(o.querySelector(".is-invalid")){Array.from(r.querySelectorAll('[data-title="'.concat(n,'"]'))).forEach((s,l)=>{s.classList.add("active")});break}else Array.from(r.querySelectorAll('[data-title="'.concat(n,'"]'))).forEach((s,l)=>{s.classList.add("valid")})}r.addEventListener("invalid",function(){return function(s){s.preventDefault()}}(),!0);function d(s){var l=r.querySelector("fieldset.active")?r.querySelector("fieldset.active"):r.querySelector("fieldset[data-title]"),h=l.getAttribute("data-title"),b=!0;if(l.classList.add("was-validated"),Array.from(l.querySelectorAll("input")).forEach((p,y)=>{p.checkValidity()||(b=!1)}),b?Array.from(r.querySelectorAll('[data-title="'.concat(h,'"]'))).forEach((p,y)=>{p.classList.add("valid")}):Array.from(r.querySelectorAll('[data-title="'.concat(h,'"]'))).forEach((p,y)=>{p.classList.remove("valid")}),b||!s.hasAttribute("data-next")){var v=r.querySelector('fieldset[data-title="'.concat(s.getAttribute("data-title"),'"]')),u=r.querySelector('.steps button[data-title="'.concat(s.getAttribute("data-title"),'"]'));Array.from(r.querySelectorAll("button")).forEach((p,y)=>{p.classList.remove("active")}),Array.from(r.querySelectorAll("fieldset")).forEach((p,y)=>{p.classList.remove("active")}),u.classList.add("active"),v.classList.add("active")}var f=Array.from(r.querySelectorAll("fieldset")).length,m=Array.from(r.querySelectorAll("fieldset.valid")).length;r.style.setProperty("--progress","".concat(m/(f-1)*100,"%"))}r.addEventListener("keydown",s=>{if(s&&s.target instanceof HTMLElement&&s.target.closest("button")){var l=s.target.closest("button");s.keyCode==13&&l.getAttribute("type")!="submit"&&(s.preventDefault(),d(l))}if(s&&s.target instanceof HTMLElement&&s.target.closest("input")){var h=s.target.closest("input");h.classList.remove("is-invalid"),s.keyCode==13&&s.preventDefault()}}),r.addEventListener("click",s=>{if(s&&s.target instanceof HTMLElement&&s.target.closest('button[type="submit"]')){var l=s.target.closest("form");l.classList.add("was-validated")}else if(s&&s.target instanceof HTMLElement&&s.target.closest("button[data-title]")){var h=s.target.closest("button[data-title]");d(h)}return null})};function mt(){window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"Pageview",pageTitle:document.title}),document.addEventListener("click",r=>{var t=r.target.closest("[open] summary");if(t)window.dataLayer.push({event:"closeDetails",detailsTitle:t.textContent||""});else{var e=r.target.closest("summary"),a=r.target.closest("a"),i=r.target.closest("button");e&&window.dataLayer.push({event:"openDetails",detailsTitle:e.textContent||""}),a&&window.dataLayer.push({event:"linkClicked",linkText:a.hasAttribute("title")?a.getAttribute("title")||"":a.textContent||"",class:a.hasAttribute("class")&&a.getAttribute("class")||"",href:a.getAttribute("href")||""}),i&&window.dataLayer.push({event:"buttonClicked",buttonText:i.textContent||"",class:i.hasAttribute("class")&&i.getAttribute("class")||""})}})}function pt(r){var t=new TextEncoder("utf-8").encode(r);return crypto.subtle.digest("SHA-1",t).then(function(e){for(var a=[],i=new DataView(e),c=0;c<i.byteLength;c+=4){var o=i.getUint32(c),n=o.toString(16),d="00000000",s=(d+n).slice(-d.length);a.push(s)}return a.join("")})}var gt=(r,t)=>{pt(r).then(function(e){var a=new XMLHttpRequest;a.addEventListener("load",function(){var i=this.responseText.split(`
5
5
  `),c=e.slice(5).toUpperCase(),o=!1;for(var n in i)if(i[n].substring(0,35)==c){o=!0;break}var d=new CustomEvent("hibpCheck",{detail:o});t.dispatchEvent(d)}),a.open("GET","https://api.pwnedpasswords.com/range/"+e.substr(0,5)),a.send()})},yt=r=>{function t(){if(Array.from(document.querySelectorAll("input[maxlength],textarea[maxlength]")).forEach((a,i)=>{a.parentElement,At(a)}),Array.from(document.querySelectorAll("label input")).forEach((a,i)=>{!a.closest("label").querySelector(".optional-text")&&!a.hasAttribute("required")&&(a.parentNode.tagName.toLowerCase()=="span"?a.parentElement.insertAdjacentHTML("beforebegin",'<span class="optional-text"></span>'):a.insertAdjacentHTML("beforebegin",'<span class="optional-text"></span>'))}),document.querySelector('input[type="date"]')){let a=function(i){var c=i.getFullYear(),o=String(i.getMonth()+1).padStart(2,"0"),n=String(i.getDate()).padStart(2,"0");return"".concat(c,"-").concat(o,"-").concat(n)};var e=new Date;Array.from(document.querySelectorAll('input[type="date"]')).forEach((i,c)=>{var o=e;if(i.hasAttribute("data-start")&&(o.setDate(o.getDate()+parseInt(i.getAttribute("data-start"))),i.setAttribute("min",a(o))),i.hasAttribute("data-period")){var n=parseInt(i.getAttribute("data-period")),d=new Date;d.setDate(o.getDate()+n),i.setAttribute("max",a(d))}if(i.hasAttribute("data-allowed-days")){var s=JSON.parse("[".concat(i.getAttribute("data-allowed-days"),"]"));i.addEventListener("input",function(l){var h=new Date(this.value).getUTCDay();s.includes(h)?i.setCustomValidity(""):i.setCustomValidity("That day of the week is not allowed")})}})}}document.readyState==="complete"&&t(),document.onreadystatechange=()=>{document.readyState==="complete"&&t()},r.addEventListener("input",e=>{if(e&&e.target instanceof HTMLElement&&e.target.closest("input,textarea,select")){var a=e.target.closest("input,textarea,select");a.parentElement,a.hasAttribute("type")&&a.getAttribute("type")=="color"&&(a.nextElementSibling.value=a.value),a.hasAttribute("maxlength")&&a.nextElementSibling&&a.nextElementSibling.setAttribute("data-count",a.value.length),a.hasAttribute("data-strength-checker")&&wt(a)}}),r.addEventListener("change",e=>{if(e&&e.target instanceof HTMLElement&&e.target.closest("select")){var a=e.target.closest("select");if(a.hasAttribute("data-change-type")&&a.hasAttribute("data-input")){var i=document.getElementById(a.getAttribute("data-input")),c=a.value;J(i,c)}}if(e&&e.target instanceof HTMLElement&&e.target.closest('dialog [type="radio"]')){var o=e.target.closest("dialog");e.target.closest('dialog [type="radio"]'),Array.from(o.querySelectorAll('[type="radio"][autofocus]')).forEach((n,d)=>{n.removeAttribute("autofocus")}),Array.from(o.querySelectorAll('[type="radio"]:checked')).forEach((n,d)=>{n.setAttribute("autofocus",!0)})}}),r.addEventListener("click",e=>{if(e&&e.target instanceof HTMLElement&&e.target.closest("[data-change-type][data-input]:not(select)")){var a=e.target.closest("[data-change-type]"),i=document.getElementById(a.getAttribute("data-input")),c=a.getAttribute("data-change-type");if(a.setAttribute("data-change-type",i.getAttribute("type")),J(i,c),a.hasAttribute("data-alt-class")){var o=a.getAttribute("data-alt-class");a.setAttribute("data-alt-class",a.getAttribute("class")),a.setAttribute("class",o)}}})},At=r=>{var t=r.parentElement,e=r.getAttribute("maxlength");t.style.setProperty("--maxlength",e);var a=r.nextElementSibling;(!a||a&&a.classList.contains("invalid-feedback"))&&(a=document.createElement("span"),t.insertBefore(a,r.nextSibling)),a.setAttribute("data-count",r.value.length)},J=(r,t)=>{r.hasAttribute("type")&&r.getAttribute("type")=="password"&&r.setAttribute("data-password-type",!0),r.setAttribute("type",t)},wt=function r(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"no",a=document.getElementById(t.getAttribute("data-strength-checker")),i=t.value,c=t.hasAttribute("minlength")?t.getAttribute("minlength"):12,o=1,n=["Very weak","Weak","Average","Strong","Very strong"],d="";if(i.match(/(?=.*[0-9])/)&&(o+=1),i.match(/(?=.*[!,%,&,#,$,^,*,?,_,~,<,>,])/)&&(o+=1),i.match(/(?=.*[a-z])/)&&(o+=1),i.match(/(?=.*[A-Z])/)&&(o+=1),i.length<c&&(o=1,d="(must be at least ".concat(c," characters.)")),o>=3&&e=="no"){let s=function(l,h){l.detail?r(h,"danger"):r(h,"success"),h.removeEventListener("hibpCheck",s)};gt(i,t),t.addEventListener("hibpCheck",function(l){s(l,t)})}else o>=3&&e=="danger"&&(o=3,d="(this password is very common)");a&&(o<=3?a.classList.add("invalid-feedback"):a.classList.remove("invalid-feedback"),a.setAttribute("data-strength",o),a.innerHTML="Password strength: ".concat(n[o-1]," ").concat(d))},Lt=r=>{if(Array.from(r.querySelectorAll("details")).forEach((e,a)=>{e.addEventListener("mouseenter",function(i){window.matchMedia("(min-width: 62em)").matches&&e.setAttribute("open","true")},!1),e.addEventListener("mouseleave",function(i){window.matchMedia("(min-width: 62em)").matches&&e.removeAttribute("open")},!1)}),"IntersectionObserver"in window){var t=new IntersectionObserver(e=>{var[a]=e;return a.target.classList.toggle("is-stuck",a.intersectionRatio<1)},{threshold:[1]});t.observe(r)}};function St(r){var t,e=r.querySelector(".testimonial__images"),a=e.querySelectorAll("img").length;if(a==1)return!1;r.classList.add("testimonial--multi");var i=function(o){var n=r.querySelector(".btn-next"),d=r.querySelector(".btn-prev");n.setAttribute("data-go",o+1),d.setAttribute("data-go",o-1),n.removeAttribute("disabled"),d.removeAttribute("disabled"),o==1?d.setAttribute("disabled",!0):o==a&&n.setAttribute("disabled",!0)};e.addEventListener("scroll",function(c){clearTimeout(t),t=setTimeout(function(){var o=e.scrollWidth,n=e.scrollHeight,d=e.scrollLeft,s=e.scrollTop,l=Math.round(d/o*a)+1;d==0&&s!=0&&(l=Math.round(s/n*a)+1),r.setAttribute("data-show",l),i(l)},300)},!1),r.addEventListener("click",function(c){for(var o=c.target;o&&o!=this;o=o.parentNode)if(o.matches("[data-go]")){var n=parseInt(o.getAttribute("data-go")),d=0,s=0,l=e.scrollWidth,h=e.scrollHeight;l>h?s=Math.floor(l*((n-1)/a)):d=Math.floor(h*((n-1)/a)),e.scroll({top:d,left:s,behavior:"smooth"});break}},!1)}function Et(r,t){var e,a=r.querySelector(".carousel__inner"),i=r.querySelector(".carousel__controls"),c=t.querySelectorAll(":scope > .col").length;a.addEventListener("scroll",function(o){clearTimeout(e),e=setTimeout(function(){var n=a.clientWidth,d=a.scrollWidth,s=a.scrollLeft,l=Math.round(s/d*c)+1,h=t.querySelector(":scope > .col").scrollWidth,b=t.querySelector(":scope > .col:last-child").offsetLeft,v=a.scrollLeft+n+a.getBoundingClientRect().left>=b+60,u=Math.round(n/h),f=Math.ceil(c/u)*u-c;f>0&&v&&(l=Math.floor(c/u)*u+1),Array.from(r.querySelectorAll(".carousel__controls button")).forEach((m,p)=>{m.removeAttribute("aria-current")}),r.querySelector(".control-"+l).setAttribute("aria-current",!0),l==1?r.querySelector(".btn-prev").setAttribute("disabled","disabled"):r.querySelector(".btn-prev").removeAttribute("disabled"),l>c-u?r.querySelector(".btn-next").setAttribute("disabled","disabled"):r.querySelector(".btn-next").removeAttribute("disabled")},100)},!1),i.addEventListener("click",function(o){for(var n=o.target;n&&n!=this;n=n.parentNode)if(typeof n.matches=="function"&&n.matches("button")){o.preventDefault(),Array.from(i.querySelectorAll("button")).forEach((s,l)=>{s.removeAttribute("aria-current")}),n.setAttribute("aria-current",!0);var d=t.querySelector(":scope > *:nth-child(".concat(n.getAttribute("data-slide"),")"));a.scroll({top:0,left:d.offsetLeft-a.getBoundingClientRect().left,behavior:"smooth"});break}},!1),r.addEventListener("click",function(o){var n=a.clientWidth;a.scrollWidth;for(var d=t.querySelector(":scope > .col").scrollWidth,s=Math.round(n/d),l=t.querySelector(":scope > .col:last-child").offsetLeft,h=a.scrollLeft+n+a.getBoundingClientRect().left>=l+60,b=Math.ceil(c/s)*s-c,v=s-b,u=h&&b>0?v*d:a.clientWidth,f=o.target;f&&f!=this;f=f.parentNode)if(typeof f.matches=="function"&&f.matches(".btn-next, .btn-prev")){o.preventDefault();var m=f.classList.contains("btn-prev")?a.scrollLeft-u:a.scrollLeft+a.clientWidth;a.scroll({top:0,left:m,behavior:"smooth"});break}},!1)}function qt(r){r.addEventListener("change",function(t){var e=parseInt(r.querySelector("[data-min] select,[data-min] input").value),a=parseInt(r.querySelector("[data-max] select,[data-max] input").value);Array.from(r.querySelectorAll("[data-min] input")).forEach((i,c)=>{i.setAttribute("max",a)}),Array.from(r.querySelectorAll("[data-max] input")).forEach((i,c)=>{i.setAttribute("min",e)}),Array.from(r.querySelectorAll("[data-min] select option")).forEach((i,c)=>{parseInt(i.getAttribute("value"))>a?i.classList.add("d-none"):i.classList.remove("d-none")}),Array.from(r.querySelectorAll("[data-max] select option")).forEach((i,c)=>{parseInt(i.getAttribute("value"))<e?i.classList.add("d-none"):i.classList.remove("d-none")})},!1)}function xt(r){r.addEventListener("change",function(t){if(r.matches("[data-value-if]")){var e=r.getAttribute("data-redirect"),a=r.getAttribute("data-value-if");r.value==a&&(document.location.href=e)}else typeof r.value<"u"&&(document.location.href=r.value)},!1)}function kt(r){var t=r.querySelector(".row"),e=t.cloneNode(!0),a=r.querySelector("[data-add]");r.addEventListener("click",function(i){for(var c=i.target;c&&c!=this;c=c.parentNode){if(c.matches("[data-add]")){var o=e.cloneNode(!0);r.insertBefore(o,c),a.matches("[data-maxfiles]")&&Array.from(r.querySelectorAll(":scope > .row")).length>=a.dataset.maxfiles&&a.setAttribute("disabled","disabled");break}if(c.matches("[data-delete]")){var n=c.closest(".row");n.remove(),a.matches("[data-maxfiles]")&&Array.from(r.querySelectorAll(":scope > .row")).length<a.dataset.maxfiles&&a.removeAttribute("disabled");break}}},!1)}function Tt(r){Array.from(r.querySelectorAll("[data-input-range]")).forEach((t,e)=>{qt(t)}),Array.from(r.querySelectorAll("[data-redirect]")).forEach((t,e)=>{xt(t)}),Array.from(r.querySelectorAll(".multiple-file-uploads")).forEach((t,e)=>{kt(t)}),r.addEventListener("change",function(t){for(var e=t.target;e&&e!=this;e=e.parentNode)if(e.matches('[type="file"][data-filesize]')&&e.files&&e.files[0]){var a=e.dataset.filesize;e.files[0].size>a&&(e.value="",alert("File too large"));break}},!1),r.addEventListener("change",function(t){Array.from(r.querySelectorAll("select[data-activeif][data-equals],input[data-activeif][data-equals]")).forEach((e,a)=>{var i=e.closest("[data-group]")?e.closest("[data-group]"):r,c=e.dataset.activeif,o=e.dataset.equals,n=i.querySelector('select[data-id="'.concat(c,'"],input[data-id="').concat(c,'"]'));n.value==o?e.removeAttribute("disabled"):(e.setAttribute("disabled","disabled"),e.value="")}),Array.from(r.querySelectorAll(".form-control__wrapper[data-displayif][data-equals]")).forEach((e,a)=>{var i=e.closest("[data-group]")?e.closest("[data-group]"):r,c=e.dataset.activeif,o=e.dataset.equals,n=i.querySelector('select[data-id="'.concat(c,'"],input[data-id="').concat(c,'"]'));n.value==o?e.classList.remove("d-none"):e.classList.add("d-none")})},!1)}window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"customElementRegistered",element:"header"});class Ct extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"});var t=document.body.hasAttribute("data-assets-location")?document.body.getAttribute("data-assets-location"):"/assets",e=document.body.hasAttribute("data-core-css")?document.body.getAttribute("data-core-css"):"".concat(t,"/css/core.min.css"),a='@import "'.concat(t,'/css/components/header.css";'),i=document.createElement("template");i.innerHTML=`