@linzjs/lui 17.10.3 → 17.11.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.
- package/CHANGELOG.md +7 -0
- package/dist/components/LuiListBox/LuiListBox.d.ts +33 -0
- package/dist/components/LuiListBox/LuiListBoxItem.d.ts +10 -0
- package/dist/components/LuiListBox/Renderers/CheckboxItemRenderer.d.ts +4 -0
- package/dist/components/LuiListBox/Renderers/DefaultItemRenderer.d.ts +3 -0
- package/dist/components/LuiListBox/Renderers/RadioItemRenderer.d.ts +4 -0
- package/dist/components/LuiListBox/helpers.d.ts +3 -0
- package/dist/index.js +886 -996
- package/dist/index.js.map +1 -1
- package/dist/lui.esm.js +872 -982
- package/dist/lui.esm.js.map +1 -1
- package/package.json +6 -1
package/dist/lui.esm.js
CHANGED
|
@@ -9,127 +9,8 @@ import { useQuery } from 'react-query';
|
|
|
9
9
|
|
|
10
10
|
function r$2(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r$2(e[t]))&&(n&&(n+=" "),n+=f);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}function clsx(){for(var e,t,f=0,n="";f<arguments.length;)(e=arguments[f++])&&(t=r$2(e))&&(n&&(n+=" "),n+=t);return n}
|
|
11
11
|
|
|
12
|
-
/*! *****************************************************************************
|
|
13
|
-
Copyright (c) Microsoft Corporation.
|
|
14
|
-
|
|
15
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
16
|
-
purpose with or without fee is hereby granted.
|
|
17
|
-
|
|
18
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
19
|
-
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
20
|
-
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
21
|
-
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
22
|
-
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
23
|
-
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
24
|
-
PERFORMANCE OF THIS SOFTWARE.
|
|
25
|
-
***************************************************************************** */
|
|
26
|
-
/* global Reflect, Promise */
|
|
27
|
-
|
|
28
|
-
var extendStatics = function(d, b) {
|
|
29
|
-
extendStatics = Object.setPrototypeOf ||
|
|
30
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
31
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
32
|
-
return extendStatics(d, b);
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
function __extends(d, b) {
|
|
36
|
-
if (typeof b !== "function" && b !== null)
|
|
37
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
38
|
-
extendStatics(d, b);
|
|
39
|
-
function __() { this.constructor = d; }
|
|
40
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
var __assign = function() {
|
|
44
|
-
__assign = Object.assign || function __assign(t) {
|
|
45
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
46
|
-
s = arguments[i];
|
|
47
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
48
|
-
}
|
|
49
|
-
return t;
|
|
50
|
-
};
|
|
51
|
-
return __assign.apply(this, arguments);
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
function __rest(s, e) {
|
|
55
|
-
var t = {};
|
|
56
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
57
|
-
t[p] = s[p];
|
|
58
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
59
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
60
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
61
|
-
t[p[i]] = s[p[i]];
|
|
62
|
-
}
|
|
63
|
-
return t;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function __awaiter(thisArg, _arguments, P, generator) {
|
|
67
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
68
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
69
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
70
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
71
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
72
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function __generator(thisArg, body) {
|
|
77
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
78
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
79
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
80
|
-
function step(op) {
|
|
81
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
82
|
-
while (_) try {
|
|
83
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
84
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
85
|
-
switch (op[0]) {
|
|
86
|
-
case 0: case 1: t = op; break;
|
|
87
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
88
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
89
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
90
|
-
default:
|
|
91
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
92
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
93
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
94
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
95
|
-
if (t[2]) _.ops.pop();
|
|
96
|
-
_.trys.pop(); continue;
|
|
97
|
-
}
|
|
98
|
-
op = body.call(thisArg, _);
|
|
99
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
100
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function __read(o, n) {
|
|
105
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
106
|
-
if (!m) return o;
|
|
107
|
-
var i = m.call(o), r, ar = [], e;
|
|
108
|
-
try {
|
|
109
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
110
|
-
}
|
|
111
|
-
catch (error) { e = { error: error }; }
|
|
112
|
-
finally {
|
|
113
|
-
try {
|
|
114
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
115
|
-
}
|
|
116
|
-
finally { if (e) throw e.error; }
|
|
117
|
-
}
|
|
118
|
-
return ar;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
function __spreadArray(to, from, pack) {
|
|
122
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
123
|
-
if (ar || !(i in from)) {
|
|
124
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
125
|
-
ar[i] = from[i];
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
129
|
-
}
|
|
130
|
-
|
|
131
12
|
// START OF GENERATED FILE`;
|
|
132
|
-
|
|
13
|
+
let iconMap = {};
|
|
133
14
|
// @TODO This is a generated file, nothing is safe.
|
|
134
15
|
iconMap['ic_account_circle'] = (React__default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" },
|
|
135
16
|
React__default.createElement("path", { d: "M12 19.219q1.594 0 3.352-.938T18 15.984q-.047-1.313-2.109-2.203T12 12.89t-3.891.867T6 15.984q.891 1.359 2.648 2.297t3.352.938zm0-14.203q-1.219 0-2.109.891T9 8.016t.891 2.109 2.109.891 2.109-.891T15 8.016t-.891-2.109T12 5.016zm0-3q4.125 0 7.055 2.93t2.93 7.055-2.93 7.055T12 21.986t-7.055-2.93-2.93-7.055 2.93-7.055T12 2.016z" })));
|
|
@@ -427,33 +308,32 @@ iconMap['ic_zoom_out'] = (React__default.createElement("svg", { viewBox: "0 0 24
|
|
|
427
308
|
React__default.createElement("path", { d: "M19 13H5v-2h14v2Z" })));
|
|
428
309
|
iconMap['ic_zoom_previous'] = (React__default.createElement("svg", { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" },
|
|
429
310
|
React__default.createElement("path", { d: "M6 6h2v12H6V6Zm12 12-8.5-6L18 6v12Zm-5.03-6L16 14.14V9.86L12.97 12Z" })));
|
|
430
|
-
|
|
311
|
+
const ICONS = iconMap;
|
|
431
312
|
// END OF GENERATED FILE
|
|
432
313
|
|
|
433
|
-
|
|
314
|
+
const ICON_SIZES = {
|
|
434
315
|
xs: 'LuiIcon--xs',
|
|
435
316
|
sm: 'LuiIcon--sm',
|
|
436
317
|
md: 'LuiIcon--md',
|
|
437
318
|
lg: 'LuiIcon--lg',
|
|
438
319
|
xl: 'LuiIcon--xl',
|
|
439
|
-
ns: 'LuiIcon--noSize'
|
|
320
|
+
ns: 'LuiIcon--noSize',
|
|
440
321
|
};
|
|
441
|
-
|
|
322
|
+
const ICON_STATUS = {
|
|
442
323
|
none: '',
|
|
443
324
|
error: 'LuiIcon--error',
|
|
444
325
|
warning: 'LuiIcon--warning',
|
|
445
326
|
success: 'LuiIcon--success',
|
|
446
327
|
interactive: 'LuiIcon--interactive',
|
|
447
|
-
disabled: 'LuiIcon--disabled'
|
|
328
|
+
disabled: 'LuiIcon--disabled',
|
|
448
329
|
};
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
var iconSVG = ICONS[name];
|
|
330
|
+
const LuiIcon = ({ name, className, size = 'ns', title, alt, status = 'none', spanProps, }) => {
|
|
331
|
+
const iconSVG = ICONS[name];
|
|
452
332
|
if (!iconSVG) {
|
|
453
|
-
console.warn(
|
|
333
|
+
console.warn(`<LuiIcon>: No icon found for: ${iconSVG}`);
|
|
454
334
|
return null;
|
|
455
335
|
}
|
|
456
|
-
return (React.createElement("span",
|
|
336
|
+
return (React.createElement("span", { className: clsx('LuiIcon', className, size && ICON_SIZES[size], status && ICON_STATUS[status]), "data-icon": name, title: title, "aria-label": alt, ...spanProps }, iconSVG));
|
|
457
337
|
};
|
|
458
338
|
|
|
459
339
|
function getMaterialIconForLevel(level) {
|
|
@@ -468,85 +348,84 @@ function getMaterialIconForLevel(level) {
|
|
|
468
348
|
return 'error';
|
|
469
349
|
}
|
|
470
350
|
}
|
|
471
|
-
|
|
472
|
-
return (React__default.createElement("div", { className: clsx('lui-msg-banner-container', props.className ?
|
|
351
|
+
const LuiBanner = (props) => {
|
|
352
|
+
return (React__default.createElement("div", { className: clsx('lui-msg-banner-container', props.className ? `${props.className}-bannerContainer` : '') },
|
|
473
353
|
React__default.createElement(LuiBannerContent, { level: props.level, className: props.className }, props.children)));
|
|
474
354
|
};
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
return (React__default.createElement("div", { className: clsx(
|
|
478
|
-
React__default.createElement(LuiIcon, { name:
|
|
355
|
+
const LuiBannerContent = (props) => {
|
|
356
|
+
let materialIcon = getMaterialIconForLevel(props.level);
|
|
357
|
+
return (React__default.createElement("div", { className: clsx(`lui-msg-${props.level} lui-msg-dynamic-banner`, props.className) },
|
|
358
|
+
React__default.createElement(LuiIcon, { name: `ic_${materialIcon}`, alt: `${props.level} banner icon`, size: "lg", className: "lui-msg-status-icon" }),
|
|
479
359
|
React__default.createElement("div", null, props.children)));
|
|
480
360
|
};
|
|
481
361
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
return display ? (React__default.createElement("div", { className: clsx(
|
|
486
|
-
React__default.createElement(LuiIcon, { name:
|
|
362
|
+
const LuiStaticMessage = (props) => {
|
|
363
|
+
const [display, setDisplay] = useState(true);
|
|
364
|
+
let materialIcon = getMaterialIconForLevel(props.level);
|
|
365
|
+
return display ? (React__default.createElement("div", { className: clsx(`lui-msg-${props.level}`, props.className), "data-testid": 'static-message-container' },
|
|
366
|
+
React__default.createElement(LuiIcon, { name: `ic_${materialIcon}`, alt: `${props.level} static icon`, size: "lg", className: "lui-msg-status-icon" }),
|
|
487
367
|
props.children,
|
|
488
|
-
(props.closable === undefined || props.closable) && (React__default.createElement("button", { "aria-label": "Close dialog", onClick:
|
|
368
|
+
(props.closable === undefined || props.closable) && (React__default.createElement("button", { "aria-label": "Close dialog", onClick: () => {
|
|
489
369
|
setDisplay(false);
|
|
490
370
|
} },
|
|
491
371
|
React__default.createElement(LuiIcon, { name: "ic_clear", alt: 'close', size: "md", className: "LuiStaticMsg-close" }))))) : (React__default.createElement(React__default.Fragment, null));
|
|
492
372
|
};
|
|
493
373
|
|
|
494
|
-
|
|
495
|
-
return (React__default.createElement("button",
|
|
374
|
+
const PlainButton = React__default.forwardRef((props, ref) => {
|
|
375
|
+
return (React__default.createElement("button", { ...props.buttonProps, type: props.type, title: props.title, disabled: props.disabled, name: props.name, onClick: props.onClick, className: clsx('lui-button', `lui-button-${props.level}`, `lui-button-${props.size}`, props.className), "data-testid": props['data-testid'], style: props.style, ref: ref }, props.children));
|
|
496
376
|
});
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
377
|
+
const LuiButton = React__default.forwardRef((props, ref) => {
|
|
378
|
+
const _level = props.level ? props.level : 'primary';
|
|
379
|
+
const size = props.size ? props.size : 'med';
|
|
500
380
|
if (props.href) {
|
|
501
|
-
|
|
381
|
+
let aProps = {
|
|
502
382
|
href: props.href,
|
|
503
383
|
'data-testid': props['data-testid'],
|
|
504
384
|
name: props.name,
|
|
505
385
|
title: props.title,
|
|
506
|
-
className: clsx('lui-button',
|
|
507
|
-
style: props.style
|
|
386
|
+
className: clsx('lui-button', `lui-button-${props.level}`, `lui-button-${props.size}`, props.className),
|
|
387
|
+
style: props.style,
|
|
508
388
|
};
|
|
509
389
|
if (props.openInNewTab) {
|
|
510
390
|
aProps.target = '_blank';
|
|
511
391
|
aProps.rel = 'noopener noreferrer';
|
|
512
392
|
}
|
|
513
|
-
return React__default.createElement("a",
|
|
393
|
+
return React__default.createElement("a", { ...aProps }, props.children);
|
|
514
394
|
}
|
|
515
395
|
return (React__default.createElement(PlainButton, { type: props.type, title: props.title, disabled: props.disabled, name: props.name, onClick: props.onClick, level: _level, size: size, "data-testid": props['data-testid'], style: props.style, className: props.className, buttonProps: props.buttonProps, ref: ref }, props.children));
|
|
516
396
|
});
|
|
517
397
|
/**
|
|
518
398
|
* A series of Lui buttons together.
|
|
519
399
|
*/
|
|
520
|
-
|
|
521
|
-
|
|
400
|
+
const LuiButtonGroup = (props) => {
|
|
401
|
+
const children = Array.isArray(props.children)
|
|
522
402
|
? props.children
|
|
523
403
|
: [props.children];
|
|
524
|
-
return (React__default.createElement("div", { className: "lui-button-group", "data-testid": 'button-group' }, children.map(
|
|
404
|
+
return (React__default.createElement("div", { className: "lui-button-group", "data-testid": 'button-group' }, children.map((child, i) => {
|
|
525
405
|
return (React__default.createElement("div", { key: i, className: 'lui-button-wrapper' }, child));
|
|
526
406
|
})));
|
|
527
407
|
};
|
|
528
408
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
var callOnCloseAfterDissolved = function () {
|
|
409
|
+
const LuiToastMessage = ({ level, displayTimeout = 4000, display = true, requireDismiss, onClose, children, type, }) => {
|
|
410
|
+
const [className, setClassname] = useState('lui-msg-toast-show');
|
|
411
|
+
const [fadeOutTimer, setFadeOutTimer] = useState(undefined);
|
|
412
|
+
const [removeTimer, setRemoveTimer] = useState(undefined);
|
|
413
|
+
let materialIcon = getMaterialIconForLevel(level);
|
|
414
|
+
const callOnCloseAfterDissolved = () => {
|
|
536
415
|
// This is so the caller can remove it from the dom
|
|
537
416
|
if (onClose) {
|
|
538
|
-
|
|
417
|
+
const timer = window.setTimeout(onClose, displayTimeout);
|
|
539
418
|
setRemoveTimer(timer);
|
|
540
419
|
}
|
|
541
420
|
};
|
|
542
|
-
useEffect(
|
|
421
|
+
useEffect(() => {
|
|
543
422
|
// clear timers if previously set
|
|
544
423
|
fadeOutTimer && clearTimeout(fadeOutTimer);
|
|
545
424
|
removeTimer && clearTimeout(removeTimer);
|
|
546
425
|
setClassname('lui-msg-toast-show');
|
|
547
426
|
if (!requireDismiss && displayTimeout !== 0) {
|
|
548
427
|
// set a new timer
|
|
549
|
-
|
|
428
|
+
const timer = window.setTimeout(() => {
|
|
550
429
|
setClassname('lui-msg-toast-hide');
|
|
551
430
|
callOnCloseAfterDissolved();
|
|
552
431
|
}, displayTimeout);
|
|
@@ -554,36 +433,36 @@ var LuiToastMessage = function (_a) {
|
|
|
554
433
|
}
|
|
555
434
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
556
435
|
}, [requireDismiss, displayTimeout, children]);
|
|
557
|
-
useEffect(
|
|
436
|
+
useEffect(() => {
|
|
558
437
|
if (!display) {
|
|
559
438
|
setClassname('lui-msg-toast-hide');
|
|
560
439
|
callOnCloseAfterDissolved();
|
|
561
440
|
}
|
|
562
441
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
563
442
|
}, [display]);
|
|
564
|
-
return (React__default.createElement("div", { role: "status", "data-testid": className, className:
|
|
443
|
+
return (React__default.createElement("div", { role: "status", "data-testid": className, className: `lui-msg-${level} lui-msg-toast lui-msg-toast-dismissable ${className}` },
|
|
565
444
|
React__default.createElement("i", { className: "lui-msg-status-icon material-icons-round" }, materialIcon),
|
|
566
445
|
children,
|
|
567
|
-
React__default.createElement("button", { "aria-label": "Close dialog", type: type || 'button', onClick:
|
|
446
|
+
React__default.createElement("button", { "aria-label": "Close dialog", type: type || 'button', onClick: () => {
|
|
568
447
|
setClassname('lui-msg-toast-hide');
|
|
569
448
|
callOnCloseAfterDissolved();
|
|
570
449
|
} },
|
|
571
450
|
React__default.createElement("i", { className: "material-icons-round" }, "close"))));
|
|
572
451
|
};
|
|
573
452
|
|
|
574
|
-
|
|
453
|
+
const UIMessagingContext = createContext({
|
|
575
454
|
// @ts-ignore
|
|
576
|
-
showMessage:
|
|
455
|
+
showMessage: (props) => { },
|
|
577
456
|
});
|
|
578
457
|
function useShowLUIMessage() {
|
|
579
458
|
return useContext(UIMessagingContext).showMessage;
|
|
580
459
|
}
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
460
|
+
const LuiMessagingContextProvider = (props) => {
|
|
461
|
+
const [_message, setMessage] = useState();
|
|
462
|
+
const [_messageType, setMessageType] = useState();
|
|
463
|
+
const [_messageLevel, setMessageLevel] = useState('success');
|
|
464
|
+
const [_requireDismiss, setRequireDismiss] = useState(true);
|
|
465
|
+
const showMessage = (props) => {
|
|
587
466
|
setMessage(props.message);
|
|
588
467
|
setMessageType(props.messageType);
|
|
589
468
|
setMessageLevel(props.messageLevel);
|
|
@@ -591,10 +470,10 @@ var LuiMessagingContextProvider = function (props) {
|
|
|
591
470
|
? props.messageLevel === 'error'
|
|
592
471
|
: props.requireDismiss);
|
|
593
472
|
};
|
|
594
|
-
|
|
473
|
+
const renderMessage = () => {
|
|
595
474
|
switch (_messageType) {
|
|
596
475
|
case 'toast':
|
|
597
|
-
return (React__default.createElement(LuiToastMessage, { onClose:
|
|
476
|
+
return (React__default.createElement(LuiToastMessage, { onClose: () => {
|
|
598
477
|
setMessage(undefined);
|
|
599
478
|
}, level: _messageLevel, requireDismiss: _requireDismiss },
|
|
600
479
|
React__default.createElement("span", { "data-testid": 'toastMessageShow' }, typeof _message === 'string' ? React__default.createElement("h2", null, _message) : _message)));
|
|
@@ -602,45 +481,45 @@ var LuiMessagingContextProvider = function (props) {
|
|
|
602
481
|
return null;
|
|
603
482
|
}
|
|
604
483
|
};
|
|
605
|
-
return (React__default.createElement(UIMessagingContext.Provider, { value: { showMessage
|
|
484
|
+
return (React__default.createElement(UIMessagingContext.Provider, { value: { showMessage } },
|
|
606
485
|
_message && renderMessage(),
|
|
607
486
|
props.children));
|
|
608
487
|
};
|
|
609
488
|
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
489
|
+
const LuiExpandableBanner = (props) => {
|
|
490
|
+
const display = useRef(null);
|
|
491
|
+
const [collapse, setCollapse] = useState(true);
|
|
492
|
+
const collapseSection = (element) => {
|
|
614
493
|
// get the height of the element's inner content, regardless of its actual size
|
|
615
|
-
|
|
494
|
+
const sectionHeight = element.scrollHeight;
|
|
616
495
|
// on the next frame (as soon as the previous style change has taken effect),
|
|
617
496
|
// explicitly set the element's height to its current pixel height, so we
|
|
618
497
|
// aren't transitioning out of 'auto'
|
|
619
|
-
requestAnimationFrame(
|
|
498
|
+
requestAnimationFrame(() => {
|
|
620
499
|
element.style.height = sectionHeight + 'px';
|
|
621
500
|
// on the next frame (as soon as the previous style change has taken effect),
|
|
622
501
|
// have the element transition to height: 0
|
|
623
|
-
requestAnimationFrame(
|
|
502
|
+
requestAnimationFrame(() => {
|
|
624
503
|
element.style.height = 0 + 'px';
|
|
625
504
|
});
|
|
626
505
|
});
|
|
627
506
|
// mark the section as "currently collapsed"
|
|
628
507
|
setCollapse(true);
|
|
629
508
|
};
|
|
630
|
-
|
|
509
|
+
const expandSection = (element) => {
|
|
631
510
|
// get the height of the element's inner content, regardless of its actual size
|
|
632
|
-
|
|
511
|
+
const sectionHeight = element.scrollHeight;
|
|
633
512
|
// have the element transition to the height of its inner content
|
|
634
513
|
element.style.height = sectionHeight + 'px';
|
|
635
514
|
// when the next css transition finishes (which should be the one we just triggered)
|
|
636
|
-
setTimeout(
|
|
515
|
+
setTimeout(() => {
|
|
637
516
|
element.style.height = 'auto';
|
|
638
517
|
}, 500);
|
|
639
518
|
// mark the section as "currently not collapsed"
|
|
640
519
|
setCollapse(false);
|
|
641
520
|
};
|
|
642
|
-
|
|
643
|
-
|
|
521
|
+
const expandFunction = () => {
|
|
522
|
+
const section = display.current;
|
|
644
523
|
if (collapse) {
|
|
645
524
|
expandSection(section);
|
|
646
525
|
}
|
|
@@ -663,36 +542,33 @@ var LuiExpandableBanner = function (props) {
|
|
|
663
542
|
* A menu controlled by a user-supplied MenuButton. Open/closed state is managed internally. The defaulted style props,
|
|
664
543
|
* menuClassName and offsetY, can be overridden simply by setting them in the usual way.
|
|
665
544
|
*/
|
|
666
|
-
|
|
667
|
-
return React__default.createElement(Menu$1,
|
|
545
|
+
const LuiMenu = (props) => {
|
|
546
|
+
return React__default.createElement(Menu$1, { menuClassName: 'lui-menu', offsetY: 12, ...props });
|
|
668
547
|
};
|
|
669
548
|
/**
|
|
670
549
|
* A menu with state managed externally. Can be used quite conveniently as a context menu. The defaulted style props,
|
|
671
550
|
* menuClassName and offsetY, can be overridden simply by setting them in the usual way.
|
|
672
551
|
*/
|
|
673
|
-
|
|
674
|
-
return React__default.createElement(ControlledMenu,
|
|
552
|
+
const LuiControlledMenu = (props) => {
|
|
553
|
+
return React__default.createElement(ControlledMenu, { menuClassName: 'lui-menu', offsetY: 12, ...props });
|
|
675
554
|
};
|
|
676
555
|
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
return React__default.createElement(Menu$1, __assign({ menuClassName: 'lui-select-menu', offsetY: 12 }, props));
|
|
556
|
+
const LuiSelectMenu = ({ ...props }) => {
|
|
557
|
+
return React__default.createElement(Menu$1, { menuClassName: 'lui-select-menu', offsetY: 12, ...props });
|
|
680
558
|
};
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
return (React__default.createElement(MenuItem, __assign({}, rest, { className: clsx('lui-select-menuItem', "lui-select-menuItem--".concat(level ? level : 'primary'), rest.className), "data-testid": rest['data-testid'] }),
|
|
559
|
+
const LuiSelectMenuItem = ({ iconName, iconAlt, level, noPadding = false, ...rest }) => {
|
|
560
|
+
return (React__default.createElement(MenuItem, { ...rest, className: clsx('lui-select-menuItem', `lui-select-menuItem--${level ? level : 'primary'}`, rest.className), "data-testid": rest['data-testid'] },
|
|
684
561
|
iconName ? (React__default.createElement(LuiIcon, { className: "lui-select-icon", name: iconName, alt: iconAlt ? iconAlt : '', size: "md" })) : (''),
|
|
685
562
|
React__default.createElement("p", { className: clsx('lui-select-menuItemText', {
|
|
686
|
-
'lui-select-menuItemText--noPadding': noPadding
|
|
563
|
+
'lui-select-menuItemText--noPadding': noPadding,
|
|
687
564
|
}) }, rest.children)));
|
|
688
565
|
};
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
return (React__default.createElement(SubMenu, __assign({}, rest, { className: clsx({ 'lui-select-submenu': iconName === undefined }, { 'lui-select-submenu-with-icon': !!iconName }, rest.className), menuClassName: 'lui-select-menu', label: iconName === undefined
|
|
566
|
+
const LuiSelectSubMenuItem = ({ label, iconName, iconAlt, ...rest }) => {
|
|
567
|
+
return (React__default.createElement(SubMenu, { ...rest, className: clsx({ 'lui-select-submenu': iconName === undefined }, { 'lui-select-submenu-with-icon': !!iconName }, rest.className), menuClassName: 'lui-select-menu', label: iconName === undefined
|
|
692
568
|
? label
|
|
693
|
-
: LuiSubMenuComponent(label, iconName, iconAlt) }
|
|
569
|
+
: LuiSubMenuComponent(label, iconName, iconAlt) }, rest.children));
|
|
694
570
|
};
|
|
695
|
-
|
|
571
|
+
const LuiSubMenuComponent = (label, iconName, iconAlt) => {
|
|
696
572
|
return (React__default.createElement(React__default.Fragment, null,
|
|
697
573
|
iconName === undefined ? ('') : (React__default.createElement(LuiIcon, { className: "lui-menu-sub-header-icon", name: iconName, alt: iconAlt ? iconAlt : '', size: "md" })),
|
|
698
574
|
label));
|
|
@@ -727,11 +603,10 @@ let nanoid = (size = 21) => {
|
|
|
727
603
|
};
|
|
728
604
|
|
|
729
605
|
// Lui Select menu with dynamic data
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
return (React__default.createElement(LuiSelectMenu, __assign({ menuClassName: 'lui-select-menu', offsetY: 12 }, props), displayMenu(props.items)));
|
|
606
|
+
const LuiSelectDataMenu = ({ ...props }) => {
|
|
607
|
+
return (React__default.createElement(LuiSelectMenu, { menuClassName: 'lui-select-menu', offsetY: 12, ...props }, displayMenu(props.items)));
|
|
733
608
|
};
|
|
734
|
-
|
|
609
|
+
const displayMenu = (items) => (React__default.createElement(React__default.Fragment, null, items.map((item) => {
|
|
735
610
|
if (item.options === undefined) {
|
|
736
611
|
return (React__default.createElement(React__default.Fragment, { key: nanoid() },
|
|
737
612
|
item.header ? React__default.createElement(GroupHeader, null, item.headerLabel) : null,
|
|
@@ -741,18 +616,15 @@ var displayMenu = function (items) { return (React__default.createElement(React_
|
|
|
741
616
|
return (React__default.createElement(React__default.Fragment, { key: nanoid() },
|
|
742
617
|
React__default.createElement(LuiSelectSubMenuItem, { label: item.label, iconName: item.iconName }, displayMenu(item.options))));
|
|
743
618
|
}
|
|
744
|
-
})));
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
children && (React__default.createElement(MenuHeader, { autoCapitalize: "false", className: "lui-select-menu-group" }, children))));
|
|
750
|
-
};
|
|
751
|
-
var LuiSelectMenuDivider = function () {
|
|
619
|
+
})));
|
|
620
|
+
const GroupHeader = ({ children, }) => (React__default.createElement(React__default.Fragment, null,
|
|
621
|
+
React__default.createElement(MenuDivider, { className: "lui-select-divider" }),
|
|
622
|
+
children && (React__default.createElement(MenuHeader, { autoCapitalize: "false", className: "lui-select-menu-group" }, children))));
|
|
623
|
+
const LuiSelectMenuDivider = () => {
|
|
752
624
|
return React__default.createElement(MenuDivider, { className: "lui-select-divider" });
|
|
753
625
|
};
|
|
754
|
-
|
|
755
|
-
return React__default.createElement(MenuHeader,
|
|
626
|
+
const LuiSelectMenuHeader = (props) => {
|
|
627
|
+
return React__default.createElement(MenuHeader, { className: "lui-select-menu-group", ...props });
|
|
756
628
|
};
|
|
757
629
|
|
|
758
630
|
function styleInject(css, ref) {
|
|
@@ -782,12 +654,12 @@ function styleInject(css, ref) {
|
|
|
782
654
|
}
|
|
783
655
|
}
|
|
784
656
|
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
657
|
+
const LuiFilterMenu = (props) => {
|
|
658
|
+
const [filter, setFilter] = useState('');
|
|
659
|
+
const { toggleMenu, ...menuProps } = useMenuState();
|
|
660
|
+
const ref = useRef(null);
|
|
789
661
|
return (React__default.createElement("div", { ref: ref },
|
|
790
|
-
props.menuButton(
|
|
662
|
+
props.menuButton(() => {
|
|
791
663
|
switch (props.enabled) {
|
|
792
664
|
case false: {
|
|
793
665
|
toggleMenu(false);
|
|
@@ -799,28 +671,23 @@ var LuiFilterMenu = function (props) {
|
|
|
799
671
|
}
|
|
800
672
|
}
|
|
801
673
|
}),
|
|
802
|
-
React__default.createElement(ControlledMenu,
|
|
674
|
+
React__default.createElement(ControlledMenu, { ...menuProps, anchorRef: ref, onClose: () => toggleMenu(false), className: "lui-menu", offsetY: 12, onChange: (e) => {
|
|
803
675
|
e.open && setFilter('');
|
|
804
676
|
}, menuStyles: props.maxRows !== undefined
|
|
805
677
|
? { maxHeight: 62 + 34 * props.maxRows, overflowY: 'auto' }
|
|
806
|
-
: {} }
|
|
807
|
-
React__default.createElement(FocusableItem, null,
|
|
808
|
-
var ref = _a.ref;
|
|
809
|
-
return (React__default.createElement("input", { ref: ref, type: "text", placeholder: "Type to filter", value: filter, onChange: function (e) { return setFilter(e.target.value); } }));
|
|
810
|
-
}),
|
|
678
|
+
: {} },
|
|
679
|
+
React__default.createElement(FocusableItem, null, ({ ref }) => (React__default.createElement("input", { ref: ref, type: "text", placeholder: "Type to filter", value: filter, onChange: (e) => setFilter(e.target.value) }))),
|
|
811
680
|
props.filteredItems
|
|
812
|
-
.filter(
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
.map(function (item) {
|
|
816
|
-
if ((item === null || item === void 0 ? void 0 : item.specialType) === 'div') {
|
|
681
|
+
.filter((item) => item.display.toUpperCase().includes(filter.trim().toUpperCase()))
|
|
682
|
+
.map((item) => {
|
|
683
|
+
if (item?.specialType === 'div') {
|
|
817
684
|
return React__default.createElement(MenuDivider, { key: item.id });
|
|
818
685
|
}
|
|
819
|
-
else if (
|
|
686
|
+
else if (item?.specialType === 'head') {
|
|
820
687
|
return React__default.createElement(MenuHeader, { key: item.id }, item.display);
|
|
821
688
|
}
|
|
822
689
|
else {
|
|
823
|
-
return (React__default.createElement(MenuItem, { key: item.id, onMouseDown:
|
|
690
|
+
return (React__default.createElement(MenuItem, { key: item.id, onMouseDown: (e) => {
|
|
824
691
|
props.onItemClick(item.id);
|
|
825
692
|
e.stopPropagation();
|
|
826
693
|
} }, item.display));
|
|
@@ -828,51 +695,50 @@ var LuiFilterMenu = function (props) {
|
|
|
828
695
|
}))));
|
|
829
696
|
};
|
|
830
697
|
|
|
831
|
-
|
|
698
|
+
const LuiTabsContext = React__default.createContext({
|
|
832
699
|
activePanel: null,
|
|
833
|
-
setActivePanel:
|
|
700
|
+
setActivePanel: () => { },
|
|
834
701
|
});
|
|
835
|
-
|
|
836
|
-
|
|
702
|
+
const LuiTabs = (props) => {
|
|
703
|
+
let [activePanel, setActivePanel] = useState(props.defaultPanel);
|
|
837
704
|
return (React__default.createElement("div", { className: "LuiTabs" },
|
|
838
|
-
React__default.createElement(LuiTabsContext.Provider, { value: { activePanel
|
|
705
|
+
React__default.createElement(LuiTabsContext.Provider, { value: { activePanel, setActivePanel } }, props.children)));
|
|
839
706
|
};
|
|
840
707
|
|
|
841
|
-
|
|
842
|
-
return (React__default.createElement("button", { className: clsx('LuiTab', props.active && 'LuiTab--active'), id: props.id, role: "tab", "aria-selected": props.active, "aria-controls":
|
|
708
|
+
const LuiTab = (props) => {
|
|
709
|
+
return (React__default.createElement("button", { className: clsx('LuiTab', props.active && 'LuiTab--active'), id: props.id, role: "tab", "aria-selected": props.active, "aria-controls": `${props.ariaControls}`, title: props.titleAttribute, onClick: props.onClick }, props.children));
|
|
843
710
|
};
|
|
844
711
|
|
|
845
712
|
// import './LuiTabsGroup.scss';
|
|
846
|
-
|
|
847
|
-
return (React__default.createElement("div", { className:
|
|
713
|
+
const LuiTabsGroup = (props) => {
|
|
714
|
+
return (React__default.createElement("div", { className: `LuiTabsGroup ${props.justify ? 'LuiTabsGroup--justified' : ''}`, role: "tablist", "aria-label": props.ariaLabel }, props.children));
|
|
848
715
|
};
|
|
849
716
|
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
useEffect(function () {
|
|
717
|
+
const LuiTabsPanel = ({ children, panel, mode = 'eager', }) => {
|
|
718
|
+
const context = useContext(LuiTabsContext);
|
|
719
|
+
const [shouldShow, setShouldShow] = useState(mode === 'eager');
|
|
720
|
+
let active = context.activePanel === panel;
|
|
721
|
+
useEffect(() => {
|
|
856
722
|
if (active && !shouldShow) {
|
|
857
723
|
setShouldShow(true);
|
|
858
724
|
}
|
|
859
725
|
}, [active, shouldShow]);
|
|
860
|
-
return (React__default.createElement("div", { className: clsx('LuiTabsPanel', active && 'LuiTabsPanel--active'), id:
|
|
726
|
+
return (React__default.createElement("div", { className: clsx('LuiTabsPanel', active && 'LuiTabsPanel--active'), id: `${panel}-tab-panel`, role: "tabpanel", "aria-labelledby": `${panel}-tab` }, shouldShow ? children : null));
|
|
861
727
|
};
|
|
862
728
|
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
return (React__default.createElement(LuiTab, { id:
|
|
729
|
+
const LuiTabsPanelSwitch = (props) => {
|
|
730
|
+
const context = useContext(LuiTabsContext);
|
|
731
|
+
let active = context.activePanel === props.targetPanel;
|
|
732
|
+
return (React__default.createElement(LuiTab, { id: `${props.targetPanel}-tab`, ariaControls: `${props.targetPanel}-tab-panel`, active: active, onClick: () => {
|
|
867
733
|
if (context.setActivePanel)
|
|
868
734
|
context.setActivePanel(props.targetPanel);
|
|
869
735
|
} }, props.children));
|
|
870
736
|
};
|
|
871
737
|
|
|
872
738
|
function useDeprecatedWarning(componentName) {
|
|
873
|
-
useEffect(
|
|
739
|
+
useEffect(() => {
|
|
874
740
|
if (window.location.hostname.includes('localhost')) {
|
|
875
|
-
console.warn(
|
|
741
|
+
console.warn(`${componentName} will be deprecated in future versions of Lui. Please see the 'Current Deprecations' page in Lui docs.`);
|
|
876
742
|
}
|
|
877
743
|
}, []);
|
|
878
744
|
}
|
|
@@ -880,11 +746,11 @@ function useDeprecatedWarning(componentName) {
|
|
|
880
746
|
function LuiFormikForm(props) {
|
|
881
747
|
useDeprecatedWarning('LuiFormikForm');
|
|
882
748
|
// this spreads all keys, except className
|
|
883
|
-
|
|
884
|
-
|
|
749
|
+
const { className, ...formikProps } = { ...props };
|
|
750
|
+
const classNames = clsx(props.className);
|
|
885
751
|
return (
|
|
886
752
|
// @ts-ignore not fixing due this component being deprecated
|
|
887
|
-
React__default.createElement(Formik,
|
|
753
|
+
React__default.createElement(Formik, { ...formikProps },
|
|
888
754
|
React__default.createElement("div", { className: classNames },
|
|
889
755
|
React__default.createElement(Form, null,
|
|
890
756
|
props.children,
|
|
@@ -894,12 +760,9 @@ function LuiFormikForm(props) {
|
|
|
894
760
|
var css_248z$5 = "/**\n @deprecated\n */\n/**\n @deprecated\n */\n/**\n @deprecated\n */\n.LuiError {\n font-family: \"Open Sans\", system-ui, sans-serif;\n font-style: normal;\n font-weight: 600;\n margin-bottom: 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5rem;\n color: #2a292c;\n}\n.LuiError-errorIcon {\n vertical-align: middle;\n display: inline-block;\n}\n.LuiError-errorText {\n margin-left: 0.5rem;\n}";
|
|
895
761
|
styleInject(css_248z$5);
|
|
896
762
|
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
React__default.createElement(LuiIcon, { className: "LuiError-errorIcon ".concat(className, "-errorIcon"), alt: 'Error', name: "ic_error", size: "md", status: "error" }),
|
|
901
|
-
error && (React__default.createElement("span", { className: "LuiError-errorText ".concat(className, "-errorText") }, error))));
|
|
902
|
-
};
|
|
763
|
+
const LuiError = ({ error, className }) => (React__default.createElement("div", { className: `LuiError ${className}-error` },
|
|
764
|
+
React__default.createElement(LuiIcon, { className: `LuiError-errorIcon ${className}-errorIcon`, alt: 'Error', name: "ic_error", size: "md", status: "error" }),
|
|
765
|
+
error && (React__default.createElement("span", { className: `LuiError-errorText ${className}-errorText` }, error))));
|
|
903
766
|
|
|
904
767
|
// Unique ID creation requires a high quality random # generator. In the browser we therefore
|
|
905
768
|
// require the crypto API and do not support built-in fallback to lower quality random number
|
|
@@ -976,57 +839,53 @@ function v4(options, buf, offset) {
|
|
|
976
839
|
}
|
|
977
840
|
|
|
978
841
|
function useGenerateOrDefaultId(idFromProps) {
|
|
979
|
-
|
|
842
|
+
const [id] = useState(idFromProps ? idFromProps : v4());
|
|
980
843
|
return id;
|
|
981
844
|
}
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
var id = useGenerateOrDefaultId((_a = props.inputProps) === null || _a === void 0 ? void 0 : _a.id);
|
|
845
|
+
const LuiTextInput = (props) => {
|
|
846
|
+
const id = useGenerateOrDefaultId(props.inputProps?.id);
|
|
985
847
|
return (React__default.createElement("div", { className: clsx('LuiTextInput', props.error && 'hasError', props.className) },
|
|
986
848
|
React__default.createElement("label", { className: 'LuiTextInput-label', htmlFor: id },
|
|
987
849
|
props.mandatory && React__default.createElement("span", { className: "LuiTextInput-mandatory" }, "*"),
|
|
988
850
|
React__default.createElement("span", { className: 'LuiTextInput-label-text ' +
|
|
989
851
|
clsx(props.hideLabel ? 'LuiScreenReadersOnly' : '') }, props.label),
|
|
990
852
|
React__default.createElement("span", { className: "LuiTextInput-inputWrapper" },
|
|
991
|
-
React__default.createElement("input",
|
|
992
|
-
clsx('LuiTextInput-input'), min: "0", value: props.value, onChange: props.onChange
|
|
853
|
+
React__default.createElement("input", { type: 'text', className: (props.showPadlockIcon ? 'LuiTextInput-padlock-icon ' : '') +
|
|
854
|
+
clsx('LuiTextInput-input'), min: "0", value: props.value, onChange: props.onChange, ...props.inputProps, id: id }),
|
|
993
855
|
props.icon),
|
|
994
856
|
props.error && (React__default.createElement("span", { className: "LuiTextInput-error" },
|
|
995
857
|
React__default.createElement(LuiIcon, { alt: "error", name: "ic_error", className: "LuiTextInput-error-icon", size: "sm", status: "error" }),
|
|
996
858
|
props.error)))));
|
|
997
859
|
};
|
|
998
860
|
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
var id = useGenerateOrDefaultId((_a = props.inputProps) === null || _a === void 0 ? void 0 : _a.id);
|
|
861
|
+
const LuiCheckboxInput = (props) => {
|
|
862
|
+
const id = useGenerateOrDefaultId(props.inputProps?.id);
|
|
1002
863
|
return (React__default.createElement("div", { className: clsx('LuiCheckboxInput', {
|
|
1003
864
|
'LuiCheckboxInput--isChecked': props.isChecked,
|
|
1004
865
|
'LuiCheckboxInput--hasError': !!props.error,
|
|
1005
|
-
'LuiCheckboxInput--isDisabled': !!props.isDisabled
|
|
866
|
+
'LuiCheckboxInput--isDisabled': !!props.isDisabled,
|
|
1006
867
|
}, props.className) },
|
|
1007
868
|
React__default.createElement("label", { htmlFor: id, className: "LuiCheckboxInput-group" },
|
|
1008
869
|
props.mandatory && (React__default.createElement("span", { "aria-label": "Required", className: "LuiCheckboxInput-mandatory" }, "*")),
|
|
1009
|
-
React__default.createElement("input",
|
|
870
|
+
React__default.createElement("input", { className: clsx('LuiCheckboxInput-input'), id: id, type: "checkbox", value: props.value, onChange: props.onChange, checked: props.isChecked, disabled: props.isDisabled, ...props.inputProps }),
|
|
1010
871
|
React__default.createElement("span", { className: "LuiCheckboxInput-label" },
|
|
1011
872
|
props.label,
|
|
1012
873
|
React__default.createElement(LuiIcon, { name: props.isIndeterminate ? 'ic_zoom_out' : 'ic_check', size: "md", alt: props.isIndeterminate ? 'Indeterminate Check' : 'Check', className: "LuiCheckboxInput-labelCheck", title: props.titleAttribute }))),
|
|
1013
874
|
props.error && (React__default.createElement(LuiError, { className: "LuiCheckboxInput", error: props.error }))));
|
|
1014
875
|
};
|
|
1015
876
|
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
877
|
+
const LuiFileInputBox = (props) => {
|
|
878
|
+
const [file, setFile] = useState();
|
|
879
|
+
const [hasFileFormatError, setHasFileFormatError] = useState(false);
|
|
880
|
+
const onChange = (e) => {
|
|
1020
881
|
// Logic to go here to check extensions and setHasFileFormatError
|
|
1021
882
|
setHasFileFormatError(false);
|
|
1022
|
-
|
|
883
|
+
const files = e.target.files;
|
|
1023
884
|
// File upload box is configured to only accept 1 file, we can't have more than one here
|
|
1024
885
|
if (files && files.length === 1) {
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
});
|
|
1029
|
-
var fileName = selectedFile.name;
|
|
886
|
+
const selectedFile = files[0];
|
|
887
|
+
const supportedFileTypes = props.acceptedExtensions.map((ext) => ext.toUpperCase());
|
|
888
|
+
const fileName = selectedFile.name;
|
|
1030
889
|
if (!supportedFileTypes.includes(getFileNameExtension(fileName))) {
|
|
1031
890
|
setHasFileFormatError(true);
|
|
1032
891
|
setFile(undefined);
|
|
@@ -1037,10 +896,10 @@ var LuiFileInputBox = function (props) {
|
|
|
1037
896
|
}
|
|
1038
897
|
}
|
|
1039
898
|
};
|
|
1040
|
-
|
|
899
|
+
const hasError = hasFileFormatError || props.showMustSelectFileError === true;
|
|
1041
900
|
return (React__default.createElement("div", { className: clsx('LuiFileInputBox-upload', hasError && 'LuiFileInputBox-upload-error'), style: { width: props.width || 320, height: props.height || 320 } },
|
|
1042
901
|
React__default.createElement("input", { role: "button", "aria-label": "File Upload", type: "file", className: "LuiFileInputBox-upload-input", accept: props.acceptedExtensions
|
|
1043
|
-
.map(
|
|
902
|
+
.map((extension) => `.${extension}`)
|
|
1044
903
|
.join(','), onChange: onChange }),
|
|
1045
904
|
React__default.createElement(React__default.Fragment, null, hasError ? (React__default.createElement("div", { className: "LuiFileInputBox-upload-container" },
|
|
1046
905
|
React__default.createElement(React__default.Fragment, null,
|
|
@@ -1050,26 +909,26 @@ var LuiFileInputBox = function (props) {
|
|
|
1050
909
|
"You must select a file with extension of",
|
|
1051
910
|
' ',
|
|
1052
911
|
extensionsAsHumanReadableList(props.acceptedExtensions),
|
|
1053
|
-
"."))))) : (React__default.createElement(FileUploadInfo, { fileName: file
|
|
912
|
+
"."))))) : (React__default.createElement(FileUploadInfo, { fileName: file?.name, fileFormatText: props.fileFormatText, fileDescription: props.fileDescription })))));
|
|
1054
913
|
};
|
|
1055
914
|
// Only exported for chromatic
|
|
1056
|
-
|
|
1057
|
-
|
|
915
|
+
const FileUploadInfo = (props) => {
|
|
916
|
+
const DragAndDropInstruction = () => (React__default.createElement("p", { className: "LuiFileInputBox-upload-text" },
|
|
1058
917
|
"Drag and drop your ",
|
|
1059
918
|
props.fileDescription,
|
|
1060
919
|
" into the box",
|
|
1061
920
|
React__default.createElement("br", null),
|
|
1062
|
-
React__default.createElement("span", null, "(or upload file manually)")));
|
|
1063
|
-
|
|
921
|
+
React__default.createElement("span", null, "(or upload file manually)")));
|
|
922
|
+
const WaitingForFileSelection = () => (React__default.createElement(React__default.Fragment, null,
|
|
1064
923
|
React__default.createElement("div", { className: 'LuiFileInputBox-upload-icon-upload' },
|
|
1065
924
|
React__default.createElement(LuiIcon, { name: "ic_publish", size: 'ns', alt: "Upload" })),
|
|
1066
925
|
React__default.createElement(DragAndDropInstruction, null),
|
|
1067
|
-
props.fileFormatText && (React__default.createElement("p", { className: "LuiFileInputBox-upload-text LuiFileInputBox-upload-text-no-padding" }, props.fileFormatText))));
|
|
1068
|
-
|
|
926
|
+
props.fileFormatText && (React__default.createElement("p", { className: "LuiFileInputBox-upload-text LuiFileInputBox-upload-text-no-padding" }, props.fileFormatText))));
|
|
927
|
+
const UploadSuccess = () => (React__default.createElement(React__default.Fragment, null,
|
|
1069
928
|
React__default.createElement("div", { className: 'LuiFileInputBox-upload-icon-success' },
|
|
1070
929
|
React__default.createElement(LuiIcon, { name: "ic_check_circle_outline", size: 'ns', alt: "Success" })),
|
|
1071
930
|
React__default.createElement("p", { className: "LuiFileInputBox-upload-file-name" }, props.fileName),
|
|
1072
|
-
React__default.createElement(DragAndDropInstruction, null)));
|
|
931
|
+
React__default.createElement(DragAndDropInstruction, null)));
|
|
1073
932
|
return (React__default.createElement("div", { className: "LuiFileInputBox-upload-container" }, props.fileName ? React__default.createElement(UploadSuccess, null) : React__default.createElement(WaitingForFileSelection, null)));
|
|
1074
933
|
};
|
|
1075
934
|
/**
|
|
@@ -1078,8 +937,8 @@ var FileUploadInfo = function (props) {
|
|
|
1078
937
|
* @param fileName File-name to get extension from
|
|
1079
938
|
* @return fileName extension in upper-case if found else empty string
|
|
1080
939
|
*/
|
|
1081
|
-
|
|
1082
|
-
|
|
940
|
+
const getFileNameExtension = (fileName) => {
|
|
941
|
+
const idx = fileName.lastIndexOf('.');
|
|
1083
942
|
return idx === -1 ? '' : fileName.substr(idx + 1).toUpperCase();
|
|
1084
943
|
};
|
|
1085
944
|
/**
|
|
@@ -1089,68 +948,63 @@ var getFileNameExtension = function (fileName) {
|
|
|
1089
948
|
* @param extensions List of extensions to convert.
|
|
1090
949
|
* @return Extensions in a human readable string in upper-case.
|
|
1091
950
|
*/
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
return extension.toUpperCase();
|
|
1095
|
-
});
|
|
951
|
+
const extensionsAsHumanReadableList = (extensions) => {
|
|
952
|
+
const uppercaseExtensions = extensions.map((extension) => extension.toUpperCase());
|
|
1096
953
|
if (!extensions.length)
|
|
1097
954
|
return '';
|
|
1098
955
|
if (extensions.length === 1)
|
|
1099
956
|
return uppercaseExtensions[0];
|
|
1100
|
-
return
|
|
957
|
+
return `${uppercaseExtensions.slice(0, -1).join(', ')} or ${uppercaseExtensions[extensions.length - 1]}`;
|
|
1101
958
|
};
|
|
1102
959
|
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
return (React__default.createElement("div", { className: clsx('LuiSelect', ((_b = props.selectProps) === null || _b === void 0 ? void 0 : _b.disabled) ? 'isDisabled' : '', props.error ? 'hasError' : '') },
|
|
960
|
+
const LuiSelectInput = (props) => {
|
|
961
|
+
const id = useGenerateOrDefaultId(props.selectProps?.id);
|
|
962
|
+
return (React__default.createElement("div", { className: clsx('LuiSelect', props.selectProps?.disabled ? 'isDisabled' : '', props.error ? 'hasError' : '') },
|
|
1107
963
|
React__default.createElement("label", { htmlFor: id, className: "LuiSelect-label" },
|
|
1108
964
|
props.mandatory && React__default.createElement("span", { className: "LuiSelect-mandatory" }, "*"),
|
|
1109
965
|
React__default.createElement("span", { className: clsx('LuiSelect-label-text', props.hideLabel ? 'LuiScreenReadersOnly' : '') }, props.label),
|
|
1110
966
|
React__default.createElement("div", { className: "LuiSelect-wrapper" },
|
|
1111
|
-
React__default.createElement("select",
|
|
967
|
+
React__default.createElement("select", { name: id, onChange: props.onChange, value: props.value, className: "LuiSelect-select", ...props.selectProps },
|
|
1112
968
|
props.placeholderText && (React__default.createElement("option", { value: "", disabled: true }, props.placeholderText)),
|
|
1113
|
-
props.options.map(
|
|
969
|
+
props.options.map((selection) => (React__default.createElement("option", { key: selection.value, value: selection.value }, selection.label)))),
|
|
1114
970
|
React__default.createElement(LuiIcon, { alt: 'Error', name: "ic_keyboard_arrow_down", className: "LuiSelect-chevron-icon", size: "md" })),
|
|
1115
971
|
props.error && (React__default.createElement("span", { className: "LuiSelect-error" },
|
|
1116
972
|
React__default.createElement(LuiIcon, { alt: 'Error', name: "ic_error", className: "LuiSelect-error-icon", size: "sm", status: "error" }),
|
|
1117
973
|
props.error)))));
|
|
1118
974
|
};
|
|
1119
975
|
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
return (React__default.createElement("div", { className: clsx('LuiTextAreaInput', ((_b = props.inputProps) === null || _b === void 0 ? void 0 : _b.disabled) ? 'isDisabled' : '', (props === null || props === void 0 ? void 0 : props.error) ? 'hasError' : '') },
|
|
976
|
+
const LuiTextAreaInput = (props) => {
|
|
977
|
+
const id = useGenerateOrDefaultId(props.inputProps?.id);
|
|
978
|
+
return (React__default.createElement("div", { className: clsx('LuiTextAreaInput', props.inputProps?.disabled ? 'isDisabled' : '', props?.error ? 'hasError' : '') },
|
|
1124
979
|
React__default.createElement("label", { htmlFor: id },
|
|
1125
980
|
props.mandatory && (React__default.createElement("span", { className: "LuiTextAreaInput-mandatory" }, "*")),
|
|
1126
981
|
React__default.createElement("span", { className: "LuiTextAreaInput-label" }, props.label),
|
|
1127
982
|
React__default.createElement("div", { className: "LuiTextAreaInput-wrapper" },
|
|
1128
983
|
' ',
|
|
1129
|
-
React__default.createElement("textarea",
|
|
984
|
+
React__default.createElement("textarea", { id: id, value: props.value, onChange: props.onChange, rows: 5, ...props.inputProps }))),
|
|
1130
985
|
props.error && (React__default.createElement("span", { className: "LuiTextAreaInput-error" },
|
|
1131
986
|
React__default.createElement(LuiIcon, { alt: "error", name: "ic_error", className: "LuiTextAreaInput-error-icon", size: "sm", status: "error" }),
|
|
1132
987
|
props.error))));
|
|
1133
988
|
};
|
|
1134
989
|
|
|
1135
990
|
// @NOTE Can use LuiRadioInput in block form and pass through your own legend (label)
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
var id = useGenerateOrDefaultId((_a = props.inputProps) === null || _a === void 0 ? void 0 : _a.id);
|
|
991
|
+
const LuiRadioInput = (props) => {
|
|
992
|
+
const id = useGenerateOrDefaultId(props.inputProps?.id);
|
|
1139
993
|
return (React__default.createElement(React__default.Fragment, null,
|
|
1140
994
|
React__default.createElement("div", { className: clsx('LuiRadioInput', {
|
|
1141
|
-
'LuiRadioInput--hasError': props.error
|
|
995
|
+
'LuiRadioInput--hasError': props.error,
|
|
1142
996
|
}) },
|
|
1143
997
|
React__default.createElement("fieldset", { className: 'LuiRadioInput-fieldset' },
|
|
1144
998
|
props.legend && (React__default.createElement("legend", { className: "LuiRadioInput-legend" }, props.legend)),
|
|
1145
|
-
props.options.map(
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
999
|
+
props.options.map((option, index) => {
|
|
1000
|
+
const radioId = `${id}-${index}`;
|
|
1001
|
+
const isSelected = props.selectedValue === option;
|
|
1002
|
+
const isDisabled = props.isOptionDisabled && props.isOptionDisabled(index);
|
|
1149
1003
|
return (React__default.createElement("label", { htmlFor: radioId, className: clsx('LuiRadioInput-label', {
|
|
1150
1004
|
'LuiRadioInput-label--isDisabled': isDisabled,
|
|
1151
|
-
'LuiRadioInput-label--isSelected': isSelected
|
|
1005
|
+
'LuiRadioInput-label--isSelected': isSelected,
|
|
1152
1006
|
}), key: radioId },
|
|
1153
|
-
React__default.createElement("input",
|
|
1007
|
+
React__default.createElement("input", { disabled: isDisabled, className: "LuiRadioInput-input", type: "radio", id: radioId, name: option, value: option, checked: isSelected, onChange: props.onChange, ...props.inputProps }),
|
|
1154
1008
|
props.renderLabelFor ? props.renderLabelFor(option) : option));
|
|
1155
1009
|
})),
|
|
1156
1010
|
props.error && (React__default.createElement("div", { className: "LuiRadioInput-errorMsg" },
|
|
@@ -1160,76 +1014,70 @@ var LuiRadioInput = function (props) {
|
|
|
1160
1014
|
|
|
1161
1015
|
function LuiFormikCheckbox(props) {
|
|
1162
1016
|
useDeprecatedWarning('LuiFormikCheckbox');
|
|
1163
|
-
|
|
1017
|
+
let ctx = useFormikContext();
|
|
1164
1018
|
return (React__default.createElement(React__default.Fragment, null,
|
|
1165
|
-
React__default.createElement(Field, { name: props.name },
|
|
1166
|
-
|
|
1167
|
-
var showError = getIn(ctx === null || ctx === void 0 ? void 0 : ctx.errors, props.name);
|
|
1019
|
+
React__default.createElement(Field, { name: props.name }, ({ field }) => {
|
|
1020
|
+
const showError = getIn(ctx?.errors, props.name);
|
|
1168
1021
|
return (React__default.createElement("div", { className: clsx(showError && 'lui-input-error') },
|
|
1169
1022
|
React__default.createElement("div", { className: "lui-input-group-wrapper " },
|
|
1170
1023
|
showError && (React__default.createElement("i", { className: "lui-form-status-icon material-icons-round" }, "error")),
|
|
1171
1024
|
React__default.createElement("div", { className: clsx('lui-checkbox-container', props.className) },
|
|
1172
|
-
React__default.createElement("input",
|
|
1025
|
+
React__default.createElement("input", { ...props.inputProps, type: "checkbox", id: props.value, disabled: !!props.disabled, checked: field.value, ...field }),
|
|
1173
1026
|
typeof props.label === 'string' ? (React__default.createElement("label", { htmlFor: props.value }, props.label)) : (props.label)))));
|
|
1174
1027
|
})));
|
|
1175
1028
|
}
|
|
1176
1029
|
|
|
1177
|
-
|
|
1030
|
+
const LuiFormikFormLabel = (props) => {
|
|
1178
1031
|
useDeprecatedWarning('LuiFormikFormLabel');
|
|
1179
|
-
return (React__default.createElement("div", { className: clsx('LuiFormLabel-wrapper', props.className &&
|
|
1032
|
+
return (React__default.createElement("div", { className: clsx('LuiFormLabel-wrapper', props.className && `${props.className}`) },
|
|
1180
1033
|
props.children,
|
|
1181
|
-
React__default.createElement("label", { className: "LuiFormLabel", htmlFor: props
|
|
1034
|
+
React__default.createElement("label", { className: "LuiFormLabel", htmlFor: props.for },
|
|
1182
1035
|
props.required && React__default.createElement("span", { className: "lui-required-input-icon" }, "*"),
|
|
1183
1036
|
props.label),
|
|
1184
1037
|
props.tooltip && React__default.createElement("i", { className: "material-icons-round" }, "help")));
|
|
1185
1038
|
};
|
|
1186
1039
|
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1040
|
+
const LuiFormikTextInput = connect((props) => {
|
|
1041
|
+
const error = getIn(props.formik.errors, props.name);
|
|
1042
|
+
const touch = getIn(props.formik.touched, props.name);
|
|
1043
|
+
const showError = touch && error;
|
|
1044
|
+
const { setFieldValue } = useFormikContext();
|
|
1192
1045
|
useDeprecatedWarning('LuiFormikTextInput');
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
props.
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
} })));
|
|
1213
|
-
};
|
|
1214
|
-
return (React__default.createElement("div", { className: clsx(props.className && "".concat(props.className)) },
|
|
1215
|
-
props.label && (React__default.createElement(LuiFormikFormLabel, { required: props.required, label: props.label, "for": props.name, tooltip: props.tooltip })),
|
|
1046
|
+
const multiLineToggle = (field) => !props.multiLine ? (React__default.createElement("input", { id: props.name, "data-testid": props.name, ...field, type: "text", ...props.inputProps, onChange: (event) => {
|
|
1047
|
+
setFieldValue(props.name, event.target.value, props.validateOnChange ?? true);
|
|
1048
|
+
if (props.onValueChange) {
|
|
1049
|
+
props.onValueChange({
|
|
1050
|
+
value: event.target.value,
|
|
1051
|
+
formik: props.formik,
|
|
1052
|
+
});
|
|
1053
|
+
}
|
|
1054
|
+
} })) : (React__default.createElement("textarea", { id: props.name, "data-testid": props.name, ...field, rows: 1, ...props.inputProps, onChange: (event) => {
|
|
1055
|
+
setFieldValue(props.name, event.target.value, props.validateOnChange ?? true);
|
|
1056
|
+
if (props.onValueChange) {
|
|
1057
|
+
props.onValueChange({
|
|
1058
|
+
value: event.target.value,
|
|
1059
|
+
formik: props.formik,
|
|
1060
|
+
});
|
|
1061
|
+
}
|
|
1062
|
+
} }));
|
|
1063
|
+
return (React__default.createElement("div", { className: clsx(props.className && `${props.className}`) },
|
|
1064
|
+
props.label && (React__default.createElement(LuiFormikFormLabel, { required: props.required, label: props.label, for: props.name, tooltip: props.tooltip })),
|
|
1216
1065
|
props.helperInfo,
|
|
1217
|
-
React__default.createElement(Field, { name: props.name, validate: props.validate },
|
|
1218
|
-
var field = _a.field;
|
|
1066
|
+
React__default.createElement(Field, { name: props.name, validate: props.validate }, ({ field }) => {
|
|
1219
1067
|
return (React__default.createElement("div", { className: clsx(showError && 'lui-input-error') },
|
|
1220
|
-
React__default.createElement(ErrorMessage, { name: props.name, render:
|
|
1068
|
+
React__default.createElement(ErrorMessage, { name: props.name, render: () => (React__default.createElement("i", { className: "lui-form-status-icon material-icons-round" }, "error")) }),
|
|
1221
1069
|
multiLineToggle(field),
|
|
1222
1070
|
React__default.createElement(ErrorMessage, { name: props.name, className: 'lui-error-msg', component: "p" })));
|
|
1223
1071
|
})));
|
|
1224
1072
|
});
|
|
1225
1073
|
|
|
1226
|
-
|
|
1227
|
-
|
|
1074
|
+
const LuiFormikRadioButton = (props) => {
|
|
1075
|
+
const [field, meta] = useField(props);
|
|
1228
1076
|
useDeprecatedWarning('LuiFormikRadioButton');
|
|
1229
1077
|
return (React__default.createElement("div", { className: props.className },
|
|
1230
1078
|
meta.touched && meta.error && (React__default.createElement("i", { className: "lui-form-status-icon material-icons-round" }, "error")),
|
|
1231
1079
|
React__default.createElement("div", { className: 'lui-radio-container' },
|
|
1232
|
-
React__default.createElement("input",
|
|
1080
|
+
React__default.createElement("input", { disabled: !!props.disabled, ...field, checked: props.value === field.value, value: props.value, id: props.value, type: "radio", ...props.inputProps }),
|
|
1233
1081
|
React__default.createElement("label", { htmlFor: props.value }, props.label))));
|
|
1234
1082
|
};
|
|
1235
1083
|
|
|
@@ -1369,14 +1217,14 @@ camelcase$1.exports.default = camelCase;
|
|
|
1369
1217
|
var camelcase = camelcase$1.exports;
|
|
1370
1218
|
|
|
1371
1219
|
// TODO: It's annoying that we have to pass name into the RadioGroup and RadioButton
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1220
|
+
const LuiFormikRadioGroup = (props) => {
|
|
1221
|
+
let ctx = useFormikContext();
|
|
1222
|
+
const error = getIn(ctx.errors, props.name);
|
|
1223
|
+
const touch = getIn(ctx.touched, props.name);
|
|
1224
|
+
const showError = touch && error;
|
|
1377
1225
|
useDeprecatedWarning('LuiFormikRadioGroup');
|
|
1378
|
-
|
|
1379
|
-
|
|
1226
|
+
const describedby = props.hint && camelcase(props?.hint) + 'Id';
|
|
1227
|
+
const errorDescribedBy = error && camelcase(error) + 'Id';
|
|
1380
1228
|
return (React__default.createElement("div", { className: clsx('lui-fieldsetBlock-form-group', showError && 'lui-input-error') },
|
|
1381
1229
|
React__default.createElement("fieldset", { "aria-describedby": clsx(props.hint && describedby + 'Id', showError && errorDescribedBy) },
|
|
1382
1230
|
React__default.createElement("legend", null,
|
|
@@ -1389,42 +1237,42 @@ var LuiFormikRadioGroup = function (props) {
|
|
|
1389
1237
|
React__default.createElement("div", { className: "lui-input-group-wrapper" }, props.children))));
|
|
1390
1238
|
};
|
|
1391
1239
|
|
|
1392
|
-
|
|
1240
|
+
const LuiFormikFormSubmitButton = connect((props) => {
|
|
1393
1241
|
useDeprecatedWarning('LuiFormikFormSubmitButton');
|
|
1394
1242
|
return (React__default.createElement(LuiButton, { type: "submit", className: props.className, level: "primary", "data-testid": props['data-testid'], disabled: !!props.disabled }, props.children));
|
|
1395
1243
|
});
|
|
1396
1244
|
|
|
1397
|
-
|
|
1245
|
+
const LuiFormikSelect = connect((props) => {
|
|
1398
1246
|
useDeprecatedWarning('LuiFormikSelect');
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1247
|
+
const error = getIn(props.formik.errors, props.name);
|
|
1248
|
+
const touch = getIn(props.formik.touched, props.name);
|
|
1249
|
+
const showError = touch && error;
|
|
1402
1250
|
return (React__default.createElement("div", { className: props.className },
|
|
1403
|
-
props.label && (React__default.createElement(LuiFormikFormLabel, { className: 'lui-margin-bottom-xxs',
|
|
1251
|
+
props.label && (React__default.createElement(LuiFormikFormLabel, { className: 'lui-margin-bottom-xxs', for: props.name, label: props.label, required: !!props.required, tooltip: props.tooltip })),
|
|
1404
1252
|
props.helperInfo,
|
|
1405
1253
|
React__default.createElement("div", { className: clsx('lui-input-wrapper', showError && 'lui-input-error') },
|
|
1406
|
-
React__default.createElement(ErrorMessage, { name: props.name, render:
|
|
1407
|
-
React__default.createElement(Field,
|
|
1254
|
+
React__default.createElement(ErrorMessage, { name: props.name, render: () => (React__default.createElement("i", { className: "lui-form-status-icon material-icons-round" }, "error")) }),
|
|
1255
|
+
React__default.createElement(Field, { disabled: props.disabled, defaultValue: props.defaultValue, name: props.name, id: props.name, validate: props.validate, as: "select", ...props.inputProps }, props.children),
|
|
1408
1256
|
React__default.createElement(ErrorMessage, { name: props.name, className: 'lui-error-msg', component: "p" }))));
|
|
1409
1257
|
});
|
|
1410
1258
|
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1259
|
+
const LuiBearingInput = (props) => {
|
|
1260
|
+
const maxDecimal = 1;
|
|
1261
|
+
const maxAfterDP = 4 + maxDecimal;
|
|
1262
|
+
const parseBearing = (decimalIsh) => {
|
|
1263
|
+
const sign = decimalIsh.startsWith('-') ? '-' : '+';
|
|
1264
|
+
const parts = decimalIsh.split('.');
|
|
1265
|
+
const degrees = Math.abs(parseInt(parts[0])) || 0;
|
|
1266
|
+
let remainder = parts.length > 1 ? parts[1] : '0000';
|
|
1419
1267
|
while (remainder.length < 4) {
|
|
1420
1268
|
remainder += '0';
|
|
1421
1269
|
}
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
return { sign
|
|
1270
|
+
const minutes = parseInt(remainder.substr(0, 2));
|
|
1271
|
+
const seconds = parseFloat(`${remainder.substr(2, 2)}.${remainder.length > 4 ? remainder.substr(4, 2) : '0'}`);
|
|
1272
|
+
return { sign, degrees, minutes, seconds };
|
|
1425
1273
|
};
|
|
1426
|
-
|
|
1427
|
-
|
|
1274
|
+
const validateBearing = (bearing) => {
|
|
1275
|
+
const signedDegrees = bearing.sign === '-' ? bearing.degrees * -1 : bearing.degrees;
|
|
1428
1276
|
if (signedDegrees < -360 || signedDegrees > 360)
|
|
1429
1277
|
return 'Degrees must be between -360 and 360';
|
|
1430
1278
|
if (bearing.minutes < 0 || bearing.minutes >= 60)
|
|
@@ -1435,16 +1283,16 @@ var LuiBearingInput = function (props) {
|
|
|
1435
1283
|
//here ---
|
|
1436
1284
|
return null;
|
|
1437
1285
|
};
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
return
|
|
1286
|
+
const formatBearing = (decimalIsh) => {
|
|
1287
|
+
const { sign, degrees, minutes, seconds } = parseBearing(decimalIsh);
|
|
1288
|
+
const displaySign = degrees === 0 && minutes === 0 && seconds === 0 ? '' : sign;
|
|
1289
|
+
return `${displaySign} ${degrees}° ${padToTwo(minutes)}' ${padToTwo(seconds)}"`;
|
|
1442
1290
|
};
|
|
1443
|
-
|
|
1444
|
-
|
|
1291
|
+
const onChange = (event) => {
|
|
1292
|
+
const newValue = event.target.value;
|
|
1445
1293
|
if (newValue === '' ||
|
|
1446
1294
|
newValue === '-' ||
|
|
1447
|
-
newValue.match(RegExp(
|
|
1295
|
+
newValue.match(RegExp(`^-?[0-9]+(\\.[0-9]{0,${maxAfterDP}})?$`))) {
|
|
1448
1296
|
props.onChange && props.onChange(event);
|
|
1449
1297
|
}
|
|
1450
1298
|
else {
|
|
@@ -1454,26 +1302,26 @@ var LuiBearingInput = function (props) {
|
|
|
1454
1302
|
function padToTwo(number) {
|
|
1455
1303
|
return number <= 9 ? '0' + number : number.toString();
|
|
1456
1304
|
}
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1305
|
+
const parsedBearing = parseBearing(props.value);
|
|
1306
|
+
const internalError = validateBearing(parsedBearing);
|
|
1307
|
+
const error = props.preferValidationError
|
|
1460
1308
|
? props.validationError || internalError || null
|
|
1461
1309
|
: internalError || props.validationError || null;
|
|
1462
|
-
|
|
1310
|
+
const showError = error !== null;
|
|
1463
1311
|
props.onValidate && props.onValidate(internalError);
|
|
1464
1312
|
return (React__default.createElement(React__default.Fragment, null,
|
|
1465
|
-
props.label && (React__default.createElement(LuiFormikFormLabel, { required: !!props.required, label: props.label,
|
|
1313
|
+
props.label && (React__default.createElement(LuiFormikFormLabel, { required: !!props.required, label: props.label, for: props.name, tooltip: props.tooltip })),
|
|
1466
1314
|
props.helperInfo,
|
|
1467
1315
|
React__default.createElement("div", { className: clsx('lui-margin-top-xs', showError && 'lui-input-error') },
|
|
1468
1316
|
showError && (React__default.createElement("i", { className: "lui-form-status-icon material-icons-round" }, "error")),
|
|
1469
1317
|
React__default.createElement("div", { className: 'lui-bearing-input-wrapper' },
|
|
1470
|
-
React__default.createElement("input",
|
|
1318
|
+
React__default.createElement("input", { id: props.name, type: "text", disabled: props.disabled, ...props.inputProps, onChange: onChange, value: props.value }),
|
|
1471
1319
|
React__default.createElement("div", { className: 'lui-bearing-display' }, formatBearing(props.value || '0'))),
|
|
1472
1320
|
showError && React__default.createElement("p", null, error))));
|
|
1473
1321
|
};
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1322
|
+
const LuiBearingFormikInput = (props) => {
|
|
1323
|
+
let ctx = useFormikContext();
|
|
1324
|
+
const [error, setError] = useState(null);
|
|
1477
1325
|
function validateBearing() {
|
|
1478
1326
|
return error;
|
|
1479
1327
|
}
|
|
@@ -1481,8 +1329,8 @@ var LuiBearingFormikInput = function (props) {
|
|
|
1481
1329
|
setError(error);
|
|
1482
1330
|
}
|
|
1483
1331
|
return (React__default.createElement(React__default.Fragment, null,
|
|
1484
|
-
React__default.createElement(Field, { name: props.name, validate: validateBearing },
|
|
1485
|
-
return (React__default.createElement(LuiBearingInput,
|
|
1332
|
+
React__default.createElement(Field, { name: props.name, validate: validateBearing }, (renderProps) => {
|
|
1333
|
+
return (React__default.createElement(LuiBearingInput, { name: props.name, ...renderProps.field, validationError: getIn(ctx?.errors, props.name), required: true, onValidate: onValidate, inputProps: props.inputProps, preferValidationError: props.preferValidationError }));
|
|
1486
1334
|
})));
|
|
1487
1335
|
};
|
|
1488
1336
|
|
|
@@ -1490,7 +1338,7 @@ var LinzLogoFooter = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53
|
|
|
1490
1338
|
|
|
1491
1339
|
var NzGovtLogoRev = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMTkwIDIwIj4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGlkPSJhIiBkPSJNMCAwaDE4OS41NzJ2MTkuMzEySDB6Ii8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIG9wYWNpdHk9Ii43Ij4KICAgICAgICA8bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+CiAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2EiLz4KICAgICAgICA8L21hc2s+CiAgICAgICAgPHBhdGggZmlsbD0iI0ZFRkVGRSIgZD0iTTgzLjEzOSAxMy44MTNIODEuMzFWNy4wMjFjMC0uOTA0LS4wODItMS4yMjYtLjMyMy0xLjU0Ny0uMi0uMjYxLS41NjItLjQwMi0xLjAyNC0uNDAyLS43MjQgMC0xLjgxLjU2My0yLjQ5MiAxLjI4NnY3LjQ1NWgtLjkzYy0uNTg2IDAtLjktLjQ0LS45LTEuMTI3VjYuMzE4YzAtMS4yMDYtLjEtMS42NjgtLjM4MS0yLjM5MmwxLjc0OS0uNDgyYy4yNC40ODIuMzQyLjkyNC4zNDIgMS41NDcuNTgyLS40ODIuODg0LS43NDMgMS4zMDYtLjk4NGEzLjczMiAzLjczMiAwIDAgMSAxLjg2OS0uNTAyYzEuMDY0IDAgMi4wMDkuNTYyIDIuMzcgMS40MjYuMTYxLjM2Mi4yNDIuODA0LjI0MiAxLjI2N3Y3LjYxNXptOC4wNTQtMi41NTJWNS45OTZjLS41MjItLjYyMy0xLjE4Ni0uOTQ0LTIuMTMtLjk0NC0uNzYzIDAtMS4zNjcuMzgxLTEuNzQ4IDEuMDI1LS4zODIuNjYyLS41MjMgMS40NjctLjUyMyAyLjc3MyAwIDEuOTUuMjQxIDIuNDkyLjc4NCAzLjA1NC4zNDEuMzYyLjgwNC41MjMgMS40ODcuNTIzIDEuMDY1IDAgMS43ODktLjU2MyAyLjEzLTEuMTY2em0yLjE1IDIuNTUyaC0xLjc2OGMtLjEtLjMwMS0uMTItLjQ0Mi0uMTgxLS45NDQtLjcwMy43NDQtMS41MjggMS4xMDUtMi41OTIgMS4xMDUtMi41NzIgMC00LjA4LTEuOTI5LTQuMDgtNS4xMDQgMC0yLjE3Ljc0NC0zLjgzOCAyLjExLTQuNzIzYTMuNDc3IDMuNDc3IDAgMCAxIDEuOTctLjU4MmMuOTY0IDAgMS43NjguMzQxIDIuNDUxIDEuMTY2IDAtLjI4Mi0uMDQtMS44MTktLjA0LTIuNTAyVi4xNDNsMS44NDkuMzAxdjkuOTk0YzAgMS42MjcuMDYgMi43NTMuMjgxIDMuMzc1ek03MS44NiA4Ljg3Yy0uMjgyLS4wMi0uNDQyLS4wNC0uNjAzLS4wNC0xLjM4NyAwLTIuMjMuMjYxLTIuNjMzLjcyMy0uMzgxLjQ0My0uNTIyLjgwNC0uNTIyIDEuNDY3IDAgMS4xMDYuNTYzIDEuNzQ5IDEuNTg4IDEuNzQ5Ljg0MyAwIDEuNjQ4LS41MjMgMi4xMS0xLjMyN2wuMDYtMi41NzJ6bTIuNjEyIDQuMTJsLS45NDQgMS4yNDVjLS42MjMtLjI0LTEuMTA2LS43NDMtMS4zNDctMS40NDctLjI2LjMyMi0xLjEwNSAxLjMyNy0yLjg1MyAxLjMyNy0yLjAxIDAtMy4yNTUtMS4wMjUtMy4yNTUtMi45NTQgMC0yLjMzMSAxLjg2OC0zLjU3NyA1LjEyNC0zLjU3Ny4yNCAwIC40NDIgMCAuNzAzLjAyVjYuOTRjMC0xLjE4Ni0uMTYtMS45OS0xLjU2Ny0xLjk5LTEuMDY1IDAtMi4yNzIuNTIzLTMuMDk1IDEuMTQ2bC0uODQ0LTEuMzI3Yy45ODUtLjU2MiAyLjI3LTEuMzI2IDQuMjItMS4zMjYgMS40NjcgMCAyLjUzMi41NDMgMi45MTQgMS42MDguMTYuNDQyLjIuNzg0LjIgMS43NjggMCAuNzI0LS4wOCAyLjI3MS0uMDggMy43MzggMCAxLjM4Ny4wNCAxLjk1LjgyNCAyLjQzMnptLTkuMTcxLjgwM2EyLjcxIDIuNzEgMCAwIDEtMS4xNDYuMjIxYy0uNzIzIDAtMS4xODYtLjIyLTEuNTY3LS43NjMtLjMwMS0uNDIyLS4zODItLjc2NC0uMzgyLTEuNzQ5VjMuMjk1YzAtMS40MjYtLjA2LTIuMTEtLjIyMS0yLjg5M0w2My45MTUgMGMuMTguNjYzLjE4IDEuNjI4LjE4IDIuODc0djguMTQ2YzAgMS4wNjUuMDYgMS4zMDYuMjYxIDEuNDg3LjEyMS4xNDEuNDAyLjIwMS42MjMuMTQxbC4zMjIgMS4xNDV6TTU4LjI2NyA4Ljg3Yy0uMjgtLjAyLS40NDItLjA0LS42MDItLjA0LTEuMzg3IDAtMi4yMy4yNjEtMi42MzMuNzIzLS4zODIuNDQzLS41MjMuODA0LS41MjMgMS40NjcgMCAxLjEwNi41NjMgMS43NDkgMS41ODggMS43NDkuODQ0IDAgMS42NDgtLjUyMyAyLjExLTEuMzI3bC4wNi0yLjU3MnptMi42MTMgNC4xMmwtLjk0NCAxLjI0NWMtLjYyMy0uMjQtMS4xMDYtLjc0My0xLjM0Ny0xLjQ0Ny0uMjYuMzIyLTEuMTA1IDEuMzI3LTIuODU0IDEuMzI3LTIuMDA5IDAtMy4yNTUtMS4wMjUtMy4yNTUtMi45NTQgMC0yLjMzMSAxLjg2OS0zLjU3NyA1LjEyNC0zLjU3Ny4yNDEgMCAuNDQzIDAgLjcwNC4wMlY2Ljk0YzAtMS4xODYtLjE2MS0xLjk5LTEuNTY4LTEuOTktMS4wNjUgMC0yLjI3LjUyMy0zLjA5NSAxLjE0NmwtLjg0My0xLjMyN2MuOTg0LS41NjIgMi4yNy0xLjMyNiA0LjIyLTEuMzI2IDEuNDY2IDAgMi41MzIuNTQzIDIuOTE0IDEuNjA4LjE2LjQ0Mi4yLjc4NC4yIDEuNzY4IDAgLjcyNC0uMDggMi4yNzEtLjA4IDMuNzM4IDAgMS4zODcuMDQgMS45NS44MjQgMi40MzJ6TTQ5LjQ2MSA3LjgwNWMwLS45NjQtLjIyLTEuNzY4LS42MjItMi4yNzFhMS44MSAxLjgxIDAgMCAwLTEuNDQ3LS43MDNjLTEuNDA3IDAtMi4xMSAxLjE0Ni0yLjExIDIuOTc0aDQuMTh6bTEuOTMgMS4zNjZoLTYuMTN2LjI0MmMwIC44NjMuMTIxIDEuNTI3LjQyMyAyLjAxLjUyMi44MDMgMS4zNDUgMS4xODUgMi4zMSAxLjE4NS45NDUgMCAxLjc0OS0uMzIyIDIuNDcyLS45NjVsLjcwNCAxLjEwNmMtLjk4Ni44NjQtMi4xNyAxLjI4NS0zLjQ3NyAxLjI4NS0yLjc5MyAwLTQuNTAyLTIuMDI5LTQuNTAyLTUuMzI0IDAtMS43NDkuMzQyLTIuODc0IDEuMjA2LTMuOS44MDQtLjk0NCAxLjc4OS0xLjM4NiAzLjAzNS0xLjM4NiAxLjEyNSAwIDIuMDMuMzYyIDIuNzMzIDEuMDg1Ljg4NC45MDUgMS4yMDUgMi4wMyAxLjIyNiA0LjM0di4zMjJ6TTMyLjY0IDMuNzQ2bC0yLjgxMyAxMC4xNDhIMjguMDRsLTEuNDY3LTUuNDg2Yy0uMTgtLjcwMy0uNjIzLTIuMzcxLS42MjMtMi4zNzFoLS4wNnMtLjQwMiAxLjcwOC0uNTQyIDIuMjVsLTEuNTA4IDUuNjA3aC0xLjc2OEwxOS4zMTggMy44MjZsMS44NjgtLjMwMSAxLjI4NyA1LjY0NmMuMjIgMS4wMDUuNTIyIDIuNDcyLjUyMiAyLjQ3MmguMDYxcy4yMi0xLjQyNi40NjItMi4yOWwxLjUyNy01LjYwN2gxLjkxTDI4LjM2IDkuMTljLjI4MSAxLjA4NS41NjIgMi4zNTIuNTYyIDIuNDUyaC4wOGMwLS4xLjMyMi0xLjcyOC40NjMtMi4zOWwxLjI0Ni01LjUwN2gxLjkzem0tMTUuODIgNC4wNmMwLS45NjUtLjIyLTEuNzctLjYyMy0yLjI3MmExLjgwNyAxLjgwNyAwIDAgMC0xLjQ0Ni0uNzAzYy0xLjQwNyAwLTIuMTEgMS4xNDYtMi4xMSAyLjk3NGg0LjE4em0xLjkzIDEuMzY1aC02LjEzdi4yNDJjMCAuODYzLjEyMSAxLjUyNy40MjMgMi4wMS41MjMuODAzIDEuMzQ2IDEuMTg1IDIuMzEgMS4xODUuOTQ1IDAgMS43NDktLjMyMiAyLjQ3Mi0uOTY1bC43MDMgMS4xMDZjLS45ODQuODY0LTIuMTcgMS4yODUtMy40NzYgMS4yODUtMi43OTMgMC00LjUwMS0yLjAyOS00LjUwMS01LjMyNCAwLTEuNzQ5LjM0MS0yLjg3NCAxLjIwNS0zLjkuODA0LS45NDQgMS43OS0xLjM4NiAzLjAzNS0xLjM4NiAxLjEyNSAwIDIuMDMuMzYyIDIuNzMzIDEuMDg1Ljg4NC45MDUgMS4yMDUgMi4wMyAxLjIyNiA0LjM0di4zMjJ6bTE3MC44MjItNS4zOTZsLS41IDEuM2gtMS45OHY2LjAzOWMwIDEuMjQuMyAxLjYyIDEuMyAxLjYyLjM0IDAgLjYyLS4wNi45MzktLjJsLjIyIDEuMTJjLS41Ni4yOC0xLjE2LjQyLTEuODIuNDItLjY2IDAtMS4zNzktLjItMS43LS41LS40MTktLjM4MS0uNzQtLjU4LS43NC0yLjA0di02LjQ2aC0xLjE5OHYtMS4zaDEuMTk5YzAtLjc3OS4wMi0xLjguMTItMi41NTlsMS45LS40NGMtLjA4LjcyLS4xOCAxLjk4LS4xOCAzaDIuNDR6bS02Ljc3NSAxMC4wMThoLTEuODJWNy4wMzVjMC0uOS0uMDgtMS4yMi0uMzE5LTEuNTQtLjItLjI2LS41Ni0uNC0xLjAyLS40LS43MiAwLTEuOC41Ni0yLjQ4IDEuMjh2Ny40MThoLTEuODJWNi4zMzRjMC0xLjItLjEtMS42NTktLjM4LTIuMzhsMS43NC0uNDc5Yy4yNC40OC4zNC45Mi4zNCAxLjU0LjU4LS40OC44OC0uNzQgMS4zLS45OC41OC0uMzQgMS4yNC0uNSAxLjg2LS41IDEuMDYgMCAxLjk5OS41NiAyLjM2IDEuNDIuMTU5LjM2LjI0LjguMjQgMS4yNnY3LjU3OHptLTEwLjk4My01Ljk3OWMwLS45Ni0uMjItMS43Ni0uNjItMi4yNi0uMzItLjQtLjgtLjctMS40NC0uNy0xLjM5OSAwLTIuMSAxLjE0LTIuMSAyLjk2aDQuMTZ6bTEuOTIgMS4zNmgtNi4xdi4yNGMwIC44Ni4xMiAxLjUyLjQyIDIgLjUyMS44IDEuMzQgMS4xOCAyLjMgMS4xOC45NCAwIDEuNzQtLjMyIDIuNDYtLjk2bC43IDEuMWMtLjk4Ljg2LTIuMTYgMS4yOC0zLjQ2IDEuMjgtMi43OCAwLTQuNDc5LTIuMDItNC40NzktNS4zIDAtMS43NC4zNC0yLjg2IDEuMi0zLjg4LjgtLjk0IDEuNzgtMS4zNzkgMy4wMi0xLjM3OSAxLjEyIDAgMi4wMi4zNiAyLjcyIDEuMDguODguOSAxLjE5OSAyLjAyIDEuMjE5IDQuMzJ2LjMxOXptLTkuNTc3IDQuNjJoLTEuODJ2LTcuMThjMC0xLjE0LS4zNi0xLjU0LTEuMi0xLjU0LS45MiAwLTEuNTguNi0yLjMzOSAxLjM2djcuMzZoLTEuOHYtNy4xNGMwLTEuMTItLjMyLTEuNTQtMS4yNC0xLjU0LS42OCAwLTEuNDQuMzQtMi4zIDEuMTZ2Ny41MmgtMS44MnYtNy4zNmMwLTEuNDItLjA4LTEuOC0uMzU5LTIuNDk5bDEuNzItLjQyYy4yLjM0LjM0Ljg0LjM0IDEuNC44Ni0uOSAxLjg4LTEuNDIgMi44MTktMS40Mi45NCAwIDEuODguNSAyLjM4IDEuNTggMS0xLjA2IDIuMDQtMS41OCAzLjA2LTEuNTggMS41NTkgMCAyLjU1OS45OCAyLjU1OSAyLjgydjcuNDc4em0tMTQuMzk3IDBoLTEuODJ2LTYuNzZjMC0uODk5LS4wOC0xLjIyLS4zMi0xLjU0LS4yLS4yNi0uNTYtLjQtMS4wMi0uNC0uNzIgMC0xLjc5OS41Ni0yLjQ4IDEuMjh2Ny40MmgtMS44MnYtNy40NmMwLTEuMi0uMDk5LTEuNjU5LS4zNzktMi4zOGwxLjc0LS40NzljLjI0LjQ4LjM0LjkyLjM0IDEuNTQuNTgtLjQ4Ljg4LS43NCAxLjMtLjk4LjU4LS4zNCAxLjI0LS41IDEuODYtLjUgMS4wNTkgMCAxLjk5OS41NiAyLjM2IDEuNDIuMTU5LjM2LjIzOS44LjIzOSAxLjI2djcuNTc4em0tOC43ODItMTAuMjM5bC0uNjQgMS44NGExLjUgMS41IDAgMCAwLS41Mi0uMWMtMS4xMiAwLTIuMDc5Ljk0LTIuMDc5IDIuMDM5djYuNDZoLTEuODR2LTcuMzZjMC0xLjIyLS4xNC0xLjg4LS4zOC0yLjQ5OWwxLjc4LS40NmMuMTguMzguMzQgMS4wNC4zNCAxLjU0di4xOGMuOC0xLjE2IDEuNjYtMS43NCAyLjcyLTEuNzQuMjQgMCAuNDYuMDQuNjIuMXptLTguNjAzIDQuMjU5YzAtLjk2LS4yMi0xLjc2LS42Mi0yLjI2LS4zMi0uNC0uOC0uNy0xLjQ0LS43LTEuMzk5IDAtMi4xIDEuMTQtMi4xIDIuOTZoNC4xNnptMS45MiAxLjM2aC02LjF2LjI0YzAgLjg2LjEyIDEuNTIuNDIxIDIgLjUyLjggMS4zNCAxLjE4IDIuMyAxLjE4LjkzOSAwIDEuNzQtLjMyIDIuNDU5LS45NmwuNyAxLjFjLS45OC44Ni0yLjE2IDEuMjgtMy40NiAxLjI4LTIuNzc5IDAtNC40NzktMi4wMi00LjQ3OS01LjMgMC0xLjc0LjM0LTIuODYgMS4yLTMuODguOC0uOTQgMS43OC0xLjM3OSAzLjAyLTEuMzc5IDEuMTIgMCAyLjAyLjM2IDIuNzE5IDEuMDguODguOSAxLjIgMi4wMiAxLjIyIDQuMzJ2LjMxOXptLTguMzczLTUuNGwtMy42NTkgMTAuMWgtMS43MmwtMy41OC0xMC4wNiAxLjktLjMgMS45OCA2LjA2Yy4yMi42OC40NCAxLjQ4LjYgMi4xNi4xNi0uNi4zNi0xLjM4LjY0LTIuMmwxLjktNS43NmgxLjk0em0tMTEuMjU4IDUuMThjMC0zLjEtLjktNC4wNC0yLjM0LTQuMDQtMS42IDAtMi4yNTkgMS4xNC0yLjI1OSAzLjY2IDAgMy4wNi43OCA0LjA4IDIuMzQgNC4wOCAxLjQgMCAyLjI2LTEuMDggMi4yNi0zLjd6bTIuMDYtLjA4YzAgMy4xOC0xLjcgNS4yLTQuMzYgNS4yLTIuNjc5IDAtNC4zNC0yLjA0LTQuMzQtNS4zIDAtMy4yNCAxLjY2MS01LjI4IDQuMy01LjI4IDIuOTYgMCA0LjQgMi4zNiA0LjQgNS4zOHptLTEwLjAyNSA0LjAyYy0xLjEyLjctMi42MiAxLjEtNC4wOCAxLjEtMS44NCAwLTMuMy0uNjItNC4zNTgtMS44Ni0xLjEtMS4yOC0xLjYtMi45LTEuNi01LjE2IDAtMS45MTMuOC00LjEwMyAyLjM4LTUuNDAzLjk5OC0uODIgMi4wOTktMS4xOCAzLjQ1OS0xLjE4IDEuNSAwIDIuODE5LjQ0IDMuODk5IDEuMzhsLS45MiAxLjJjLTEuMDItLjc0LTEuODgtMS4wNC0yLjk0LTEuMDQtMS4zMiAwLTIuMjk4LjU1Mi0yLjk1OSAxLjc2LS40ODEuODgtLjc2IDEuNzQ0LS43NiAzLjM4MyAwIDEuOS4zNCAzLjMyLjk4IDQuMTYuNi43OCAxLjc4IDEuMjQgMi45NiAxLjI0Ljc3OSAwIDEuNDgtLjIgMi4wNC0uNTJ2LTMuOTJoLTIuNTRsLS4zMi0xLjU4aDQuNzU5djYuNDR6bS02My4yMy0uMzc0bC0uNDggMS42aC04LjIxOHYtMS40OGw1LjU1OS04Ljc4MmMuMy0uNTIuNy0xLjA2Ljk4LTEuNDItLjQuMDQtLjkuMDYtMS41OC4wNmgtNC43MTlsLjQ2LTEuNmg3LjkxOHYxLjU0bC01LjQ5OSA4Ljc4M2MtLjMuNTItLjYyLjkyLS44NiAxLjMyLjQyLS4wMi44OC0uMDIgMS4zOC0uMDJoNS4wNnpNOS4xOTQgMTMuOTU3aC0yLjA2bC0zLjYyLTcuMzE5Yy0uNy0xLjQyLTEuNDE5LTIuOTgtMS42NzktMy43OGwtLjEyLjAyYy4xIDEuMTguMTQgMi41Ni4xNiAzLjg0bC4wOCA3LjIzOWgtLjc1NmMtLjg3MyAwLTEuMTg0LS44NDQtMS4xODQtMS43OTZWLjE4aDIuMjRsMy44NCA3LjU5OWMuNTggMS4xNCAxLjI2IDIuOTIgMS4zNiAzLjNsLjEyLS4wNDFjLS4wNC0uNC0uMi0yLjU4LS4yLTQuMUw3LjMzMy4xOGgxLjg2djEzLjc3OHpNMCAxOC4zNTlzMjMuOTA5LTIuNjk5IDQ2LjUyMy0yLjY5OWMyMy4xIDAgNDcuMTUgMi43IDQ3LjE1IDIuN3YuOTUycy0yNC4yMS0yLjU1OS00Ny4xNDYtMi41NTlDMjMuOTEgMTYuNzUzIDAgMTkuMzEzIDAgMTkuMzEzdi0uOTU0eiIgbWFzaz0idXJsKCNiKSIvPgogICAgPC9nPgo8L3N2Zz4=';
|
|
1492
1340
|
|
|
1493
|
-
|
|
1341
|
+
const LuiFooter = (props) => {
|
|
1494
1342
|
return (React__default.createElement("footer", { className: 'lui-footer' },
|
|
1495
1343
|
React__default.createElement("div", { className: 'lui-footer-columns' },
|
|
1496
1344
|
React__default.createElement("h2", null, props.footerText),
|
|
@@ -24983,49 +24831,47 @@ var loaderDataChristmas = {
|
|
|
24983
24831
|
* Very trivial react wrapper for Lottie-web light. Using lottie-web directly rather than with `react-lottie` or
|
|
24984
24832
|
* `lottie-react` reduces our bundle size and enables use to use lottie-web in light mode.
|
|
24985
24833
|
*/
|
|
24986
|
-
|
|
24987
|
-
|
|
24988
|
-
|
|
24989
|
-
|
|
24990
|
-
React__default.useEffect(function () {
|
|
24834
|
+
const LuiLottieLight = ({ animationData, style, rendererSettings, autoplay, loop, }) => {
|
|
24835
|
+
const element = React__default.useRef(null);
|
|
24836
|
+
const lottieInstance = React__default.useRef();
|
|
24837
|
+
React__default.useEffect(() => {
|
|
24991
24838
|
if (element.current) {
|
|
24992
24839
|
lottieInstance.current = lottie.loadAnimation({
|
|
24993
|
-
animationData
|
|
24840
|
+
animationData,
|
|
24994
24841
|
container: element.current,
|
|
24995
|
-
rendererSettings
|
|
24996
|
-
autoplay
|
|
24997
|
-
loop
|
|
24842
|
+
rendererSettings,
|
|
24843
|
+
autoplay,
|
|
24844
|
+
loop,
|
|
24998
24845
|
});
|
|
24999
24846
|
}
|
|
25000
|
-
return
|
|
25001
|
-
|
|
25002
|
-
(_a = lottieInstance.current) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
24847
|
+
return () => {
|
|
24848
|
+
lottieInstance.current?.destroy();
|
|
25003
24849
|
};
|
|
25004
24850
|
}, [animationData, autoplay, loop, rendererSettings]);
|
|
25005
24851
|
return React__default.createElement("div", { style: style, ref: element });
|
|
25006
24852
|
};
|
|
25007
24853
|
|
|
25008
24854
|
// This prevents spinners from animating and causing diffs in chromatic
|
|
25009
|
-
|
|
25010
|
-
|
|
25011
|
-
|
|
25012
|
-
preserveAspectRatio: 'xMidYMid slice'
|
|
24855
|
+
const autoplay = !isChromatic();
|
|
24856
|
+
const style = { height: 148, width: 148 };
|
|
24857
|
+
const renderSettings = {
|
|
24858
|
+
preserveAspectRatio: 'xMidYMid slice',
|
|
25013
24859
|
};
|
|
25014
|
-
|
|
24860
|
+
const LuiLoadingSpinnerBase = (props) => {
|
|
25015
24861
|
return (React__default.createElement("div", { style: {
|
|
25016
24862
|
position: 'absolute',
|
|
25017
24863
|
top: '50%',
|
|
25018
24864
|
left: '50%',
|
|
25019
24865
|
zIndex: 1000,
|
|
25020
24866
|
marginLeft: '-74px',
|
|
25021
|
-
marginTop: '-74px'
|
|
24867
|
+
marginTop: '-74px',
|
|
25022
24868
|
}, "data-testid": "loading-spinner" },
|
|
25023
24869
|
React__default.createElement(LuiLottieLight, { animationData: props.animationData, loop: true, autoplay: autoplay, rendererSettings: renderSettings, style: style })));
|
|
25024
24870
|
};
|
|
25025
24871
|
/**
|
|
25026
24872
|
* A LuiSpinner with a status message beneath it.
|
|
25027
24873
|
*/
|
|
25028
|
-
|
|
24874
|
+
const LuiStatusSpinner = (props) => {
|
|
25029
24875
|
return (React__default.createElement("div", { className: 'LuiStatusSpinner' },
|
|
25030
24876
|
React__default.createElement(LuiLoadingSpinner, null),
|
|
25031
24877
|
React__default.createElement("div", { style: {
|
|
@@ -25033,32 +24879,32 @@ var LuiStatusSpinner = function (props) {
|
|
|
25033
24879
|
top: '50%',
|
|
25034
24880
|
left: '50%',
|
|
25035
24881
|
marginLeft: '-150px',
|
|
25036
|
-
marginTop: '74px'
|
|
24882
|
+
marginTop: '74px',
|
|
25037
24883
|
} },
|
|
25038
24884
|
React__default.createElement("div", { style: {
|
|
25039
24885
|
textAlign: 'center',
|
|
25040
|
-
width: '300px'
|
|
24886
|
+
width: '300px',
|
|
25041
24887
|
} }, props.children))));
|
|
25042
24888
|
};
|
|
25043
|
-
|
|
25044
|
-
return (React__default.createElement("div",
|
|
24889
|
+
const LuiMiniSpinner = (props) => {
|
|
24890
|
+
return (React__default.createElement("div", { ...props.divProps },
|
|
25045
24891
|
React__default.createElement(LuiLottieLight, { animationData: loaderData, loop: true, autoplay: autoplay, rendererSettings: {
|
|
25046
|
-
preserveAspectRatio: 'xMidYMid slice'
|
|
24892
|
+
preserveAspectRatio: 'xMidYMid slice',
|
|
25047
24893
|
}, style: { height: props.size, width: props.size } })));
|
|
25048
24894
|
};
|
|
25049
|
-
|
|
24895
|
+
const LuiLoadingSpinner = () => {
|
|
25050
24896
|
return React__default.createElement(LuiLoadingSpinnerBase, { animationData: loaderData });
|
|
25051
24897
|
};
|
|
25052
|
-
|
|
24898
|
+
const LuiLoadingSpinnerEaster = () => {
|
|
25053
24899
|
return React__default.createElement(LuiLoadingSpinnerBase, { animationData: loaderDataEaster });
|
|
25054
24900
|
};
|
|
25055
|
-
|
|
24901
|
+
const LuiLoadingSpinnerChristmas = () => {
|
|
25056
24902
|
return React__default.createElement(LuiLoadingSpinnerBase, { animationData: loaderDataChristmas });
|
|
25057
24903
|
};
|
|
25058
24904
|
// this function was extracted from chromatic/isChromatic. It was causing TS issues for the consumer
|
|
25059
24905
|
function isChromatic() {
|
|
25060
|
-
return !!(
|
|
25061
|
-
|
|
24906
|
+
return !!(window?.navigator.userAgent.match(/Chromatic/) ||
|
|
24907
|
+
window?.location.href.match(/chromatic=true/));
|
|
25062
24908
|
}
|
|
25063
24909
|
|
|
25064
24910
|
var css_248z$4 = ":export {\n charcoal: #2a292c;\n fuscous: #6b6966;\n gray: #989189;\n silver: #beb9b4;\n lily: #eaeaea;\n hint: #f9f9f9;\n snow: #ffffff;\n white: #ffffff;\n teal: #00425d;\n sea: #007198;\n electric: #0096cc;\n spray: #73c8e1;\n polar: #e2f3f7;\n sherpa: #004b50;\n surfie: #017a76;\n persian: #00a599;\n downy: #73cdc8;\n iceberg: #dcf5f0;\n sacramento: #004e32;\n salem: #08814d;\n pigment: #0aa245;\n granny: #9bd79b;\n panache: #e9fae7;\n brand-primary: #004b50;\n brand-secondary: #017a76;\n error: #cc0000;\n error-bg: #f5cccc;\n error-focus: #5a0000;\n warning: #ea6a2e;\n warning-bg: #fbdfd2;\n warning-focus: #b33a01;\n success: #0aa245;\n success-bg: #e9fae7;\n info: #3a7cdf;\n info-bg: #d8e5f9;\n visited: #00425d;\n green-hover: #107c3a;\n green-active: #094a22;\n green-btn: #0aa245;\n txt-link: #0096cc;\n primary-hover-btn: #005678;\n selection: #c7e9f3;\n heading-color: #017a76;\n heading-color--secondary: #2a292c;\n base-type-color: #2a292c;\n input-text: #2a292c;\n input-placeholder: #6b6966;\n input-placeholder-when-disabled: #989189;\n base-icon-color: #007198;\n disabled-color: #989189;\n disabled-color-dark: #6b6966;\n linz-color-primary: #023d48;\n linz-color-primary-hover: #01818a;\n linz-color-tertiary: #e1e44a;\n linz-color-tertiary-hover: #cdcf59;\n color-test-pink: #f09;\n linz-linear-gradient-blue: linear-gradient(70deg, #00425d 12%, #007198 100%);\n linz-linear-gradient-teal: linear-gradient(270deg, #00a599 1%, #73cdc8 100%);\n}";
|
|
@@ -25169,61 +25015,114 @@ var CreatableSelect = /*#__PURE__*/React__default.forwardRef(function (props, re
|
|
|
25169
25015
|
/**
|
|
25170
25016
|
* A wrapper around React Select with Lui styling
|
|
25171
25017
|
*/
|
|
25172
|
-
|
|
25018
|
+
const LuiComboSelect = forwardRef(LuiComboSelectActual);
|
|
25173
25019
|
// declare the indicator in here so it gets the types from
|
|
25174
25020
|
// the function declaration
|
|
25175
|
-
|
|
25021
|
+
const LuiLoadingIndicator = () => React__default.createElement(LuiMiniSpinner, { size: 25 });
|
|
25176
25022
|
function LuiComboSelectActual(givenProps, ref) {
|
|
25177
|
-
|
|
25178
|
-
noOptionsMessage:
|
|
25179
|
-
return "No options found containing '".concat(i.inputValue, "'");
|
|
25180
|
-
}
|
|
25023
|
+
const props = Object.assign({
|
|
25024
|
+
noOptionsMessage: (i) => `No options found containing '${i.inputValue}'`,
|
|
25181
25025
|
}, givenProps);
|
|
25182
|
-
props.components =
|
|
25026
|
+
props.components = {
|
|
25027
|
+
LoadingIndicator: LuiLoadingIndicator,
|
|
25028
|
+
...props.components,
|
|
25029
|
+
};
|
|
25183
25030
|
// box-shadow: "-8px 0px 0 0 #cc0000";
|
|
25184
25031
|
// border-radius: "4px";
|
|
25185
|
-
|
|
25186
|
-
|
|
25187
|
-
|
|
25032
|
+
const id = useGenerateOrDefaultId(props?.id);
|
|
25033
|
+
const selectProp = {
|
|
25034
|
+
inputId: id,
|
|
25035
|
+
...props,
|
|
25036
|
+
classNamePrefix: 'LuiComboSelect',
|
|
25037
|
+
theme: (theme) => ({
|
|
25038
|
+
...theme,
|
|
25039
|
+
colors: {
|
|
25040
|
+
...theme.colors,
|
|
25041
|
+
primary: css_248z$4['sea'],
|
|
25042
|
+
primary75: css_248z$4['electric'],
|
|
25043
|
+
primary50: css_248z$4['spray'],
|
|
25044
|
+
primary25: css_248z$4['polar'],
|
|
25045
|
+
neutral90: css_248z$4['charcoal'],
|
|
25046
|
+
neutral80: css_248z$4['charcoal'],
|
|
25047
|
+
neutral70: css_248z$4['charcoal'],
|
|
25048
|
+
neutral60: css_248z$4['fuscous'],
|
|
25049
|
+
neutral50: css_248z$4['fuscous'],
|
|
25050
|
+
neutral40: css_248z$4['gray'],
|
|
25051
|
+
neutral30: css_248z$4['gray'],
|
|
25052
|
+
neutral20: css_248z$4['silver'],
|
|
25053
|
+
neutral10: css_248z$4['lily'],
|
|
25054
|
+
neutral5: css_248z$4['hint'],
|
|
25055
|
+
danger: css_248z$4['error'],
|
|
25056
|
+
dangerLight: css_248z$4['error-bg'],
|
|
25057
|
+
},
|
|
25058
|
+
}),
|
|
25059
|
+
styles: {
|
|
25060
|
+
control: (provided, state) => ({
|
|
25061
|
+
...provided,
|
|
25188
25062
|
/* matches style of .LuiTextInput-input */
|
|
25189
|
-
boxShadow: 'none',
|
|
25190
|
-
|
|
25191
|
-
|
|
25192
|
-
|
|
25193
|
-
|
|
25194
|
-
|
|
25195
|
-
|
|
25196
|
-
|
|
25197
|
-
|
|
25198
|
-
|
|
25063
|
+
boxShadow: 'none',
|
|
25064
|
+
border: state.isFocused ? '1px solid #053d52' : '1px solid #b2b2b2',
|
|
25065
|
+
'&:hover, &:active': {
|
|
25066
|
+
borderColor: '#053d52',
|
|
25067
|
+
},
|
|
25068
|
+
}),
|
|
25069
|
+
dropdownIndicator: (provided) => ({
|
|
25070
|
+
...provided,
|
|
25071
|
+
color: css_248z$4['fuscous'],
|
|
25072
|
+
}),
|
|
25073
|
+
indicatorSeparator: (provided) => ({
|
|
25074
|
+
...provided,
|
|
25075
|
+
width: 0,
|
|
25076
|
+
}),
|
|
25077
|
+
input: (provided) => ({
|
|
25078
|
+
...provided,
|
|
25079
|
+
height: '40px',
|
|
25080
|
+
minHeight: '40px',
|
|
25081
|
+
fontWeight: 400,
|
|
25082
|
+
input: {
|
|
25083
|
+
height: '38px !important',
|
|
25084
|
+
},
|
|
25085
|
+
}),
|
|
25086
|
+
singleValue: (provided) => ({
|
|
25087
|
+
...provided,
|
|
25088
|
+
color: '#414042',
|
|
25089
|
+
fontWeight: 400,
|
|
25090
|
+
}),
|
|
25091
|
+
placeholder: (provided) => ({
|
|
25092
|
+
...provided,
|
|
25199
25093
|
/* please keep this in sync with FormVars.scss/mixin.formPlaceholder */
|
|
25200
|
-
fontWeight: 'normal',
|
|
25201
|
-
|
|
25202
|
-
|
|
25203
|
-
|
|
25204
|
-
}
|
|
25205
|
-
|
|
25094
|
+
fontWeight: 'normal',
|
|
25095
|
+
fontStyle: 'italic',
|
|
25096
|
+
color: css_248z$4['input-placeholder'],
|
|
25097
|
+
}),
|
|
25098
|
+
option: (provided, { isSelected }) => ({
|
|
25099
|
+
...provided,
|
|
25100
|
+
color: css_248z$4['input-text'],
|
|
25101
|
+
backgroundColor: isSelected ? css_248z$4['selection'] : css_248z$4['white'],
|
|
25102
|
+
}),
|
|
25103
|
+
},
|
|
25104
|
+
};
|
|
25206
25105
|
return (React__default.createElement("label", { htmlFor: id, className: clsx('LuiComboSelect-label', props.error && 'hasError') },
|
|
25207
25106
|
React__default.createElement("span", { className: clsx('LuiSelect-label-text', props.hideLabel ? 'LuiScreenReadersOnly' : '') }, props.label),
|
|
25208
|
-
props.isCreateable ? (React__default.createElement(CreatableSelect,
|
|
25107
|
+
props.isCreateable ? (React__default.createElement(CreatableSelect, { formatCreateLabel: (inputValue) => inputValue, createOptionPosition: "first", ref: ref, ...selectProp })) : (React__default.createElement(Select, { ref: ref, ...selectProp })),
|
|
25209
25108
|
props.error && (React__default.createElement("span", { className: "LuiComboSelect-error" },
|
|
25210
25109
|
React__default.createElement(LuiIcon, { alt: 'Error', name: "ic_error", className: "LuiComboSelect-error-icon", size: "sm", status: "error" }),
|
|
25211
25110
|
props.error))));
|
|
25212
25111
|
}
|
|
25213
25112
|
|
|
25214
|
-
|
|
25113
|
+
const LuiShadow = (props) => {
|
|
25215
25114
|
return (React__default.createElement("div", { className: clsx('LuiShadow', props.className) }, props.children));
|
|
25216
25115
|
};
|
|
25217
25116
|
|
|
25218
|
-
|
|
25117
|
+
const HelpInfo = (props) => (React__default.createElement("div", { className: clsx('lui-small', 'HelpInfo') },
|
|
25219
25118
|
React__default.createElement(LuiIcon, { name: "ic_error_outline", className: 'HelpInfo-icon', size: "sm", alt: "Extra Information" }),
|
|
25220
|
-
React__default.createElement("div", { className: 'HelpInfo-info' }, props.info)));
|
|
25119
|
+
React__default.createElement("div", { className: 'HelpInfo-info' }, props.info)));
|
|
25221
25120
|
|
|
25222
|
-
|
|
25121
|
+
const LuiFormSectionHeader = (props) => (React__default.createElement("div", { className: "LuiFormSectionHeader" },
|
|
25223
25122
|
React__default.createElement("div", { className: "LuiFormSectionHeader-header" },
|
|
25224
25123
|
React__default.createElement("h3", { className: "LuiFormSectionHeader-heading" }, props.header),
|
|
25225
25124
|
props.details && React__default.createElement(HelpInfo, { info: props.details })),
|
|
25226
|
-
React__default.createElement(LuiShadow, { className: 'LuiFormSectionHeader-details' }, props.children)));
|
|
25125
|
+
React__default.createElement(LuiShadow, { className: 'LuiFormSectionHeader-details' }, props.children)));
|
|
25227
25126
|
|
|
25228
25127
|
var logo = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjIuMywgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIzMDBweCIgaGVpZ2h0PSI3MHB4IiB2aWV3Qm94PSIwIDAgMzAwIDcwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzMDAgNzA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRkZGRkZGO30KCS5zdDF7ZmlsbDp1cmwoI1NWR0lEXzFfKTt9Cgkuc3Qye2ZpbGw6dXJsKCNTVkdJRF8yXyk7fQoJLnN0M3tmaWxsOnVybCgjU1ZHSURfM18pO30KCS5zdDR7ZmlsbDp1cmwoI1NWR0lEXzRfKTt9Cgkuc3Q1e2ZpbGw6dXJsKCNTVkdJRF81Xyk7fQoJLnN0NntvcGFjaXR5OjAuNDtmaWxsOnVybCgjU1ZHSURfNl8pO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQo8L3N0eWxlPgoJPGcgaWQ9IkxheWVyXzJfMl8iPgoJPGcgaWQ9IlRvaXR1X0xvZ29zIj4KCQk8ZyBpZD0iQmFkZ2VfVG9pdHUiPgoJCQk8ZyBpZD0iX0dyb3VwXyI+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNOTUuOSw1LjZjLTIuMSwwLTMuOS0wLjEtNi4zLTAuMWMwLDAuNiwwLDEuNCwwLDEuOHYxMC41YzAsMS4xLDAsMy4zLDAuMSw0LjFoLTVjMC4xLTEuNCwwLjItNS4xLDAuMi03di01CgkJCQkJYzAtMS4xLDAtMy0wLjEtNC41Yy0yLjQsMC00LjQsMC02LjQsMC4xYzAuMS0xLjIsMC4xLTIuNywwLjEtNGMyLjcsMC4xLDUuNCwwLjEsOC43LDAuMXM2LjEtMC4xLDguOC0wLjEKCQkJCQlDOTYsMyw5NS45LDQuMyw5NS45LDUuNnoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMDAsMjIuNmMtMy43LDAuMS02LjktMi44LTctNi41YzAtMC4yLDAtMC4zLDAtMC41YzAtNC40LDIuOS03LjcsNy4zLTcuN2MzLjctMC4xLDYuOSwyLjgsNyw2LjUKCQkJCQljMCwwLjIsMCwwLjMsMCwwLjVDMTA3LjQsMTkuMywxMDQuNSwyMi42LDEwMCwyMi42eiBNMTAwLjMsMTEuMWMtMS44LDAtMywxLjUtMyw0YzAsMywxLjIsNC4yLDIuOSw0LjJjMS45LDAsMy0xLjUsMy00CgkJCQkJQzEwMy4yLDEyLjMsMTAxLjksMTEuMSwxMDAuMywxMS4xeiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTExMS44LDUuOGMtMS4zLDAuMS0yLjQtMC45LTIuNS0yLjJjMCwwLDAtMC4xLDAtMC4xYzAtMS40LDEuMS0yLjQsMi41LTIuNGMwLDAsMC4xLDAsMC4xLDAKCQkJCQljMS4zLTAuMSwyLjQsMC45LDIuNSwyLjNjMCwwLDAsMCwwLDBjMCwxLjMtMS4xLDIuNC0yLjUsMi40QzExMS44LDUuOCwxMTEuOCw1LjgsMTExLjgsNS44eiBNMTA5LjMsMjIuMQoJCQkJCWMwLjEtMS42LDAuMi0zLjEsMC4yLTQuN3YtNC4xYzAtMS43LTAuMS0zLjctMC4yLTQuOWMxLDAsMy44LTAuMiw0LjctMC4zYy0wLjEsMC43LTAuMSwyLjEtMC4xLDMuMXY4LjFjMCwwLjksMCwxLjksMC4xLDIuOAoJCQkJCUwxMDkuMywyMi4xeiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTEyNS40LDIxLjdjLTEsMC41LTIuMSwwLjgtMy4yLDAuOGMtMi45LDAtNC41LTEuMi00LjUtNC44di02LjVoLTIuNGwwLjctMy4xaDEuN2wwLjMtMi44bDQtMS4zdjQuMmgzLjUKCQkJCQljLTAuMSwwLjYtMC4xLDIuMS0wLjEsMy4xSDEyMnY2YzAsMS40LDAuNSwxLjgsMS41LDEuOGMwLjcsMCwxLjQtMC4yLDIuMS0wLjZMMTI1LjQsMjEuN3oiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMzcuMiwyMi4xbC0wLjUtMi40Yy0wLjksMS43LTIuNywyLjgtNC43LDIuOWMtMywwLTQuNi0xLjgtNC42LTUuMnYtNC4yYzAtMS42LTAuMS0zLjQtMC4xLTQuOAoJCQkJCWMxLjYsMCwzLjMtMC4xLDQuNi0wLjJjLTAuMSwxLjEtMC4yLDIuMS0wLjEsMy4ydjQuOWMwLDIsMC41LDIuOSwyLjEsMi45YzEuNC0wLjEsMi42LTEuMiwyLjctMi43di0zLjNjMC0xLjYtMC4xLTMuNC0wLjItNC44CgkJCQkJYzEuNiwwLDMuMy0wLjEsNC43LTAuMmMtMC4xLDEuMS0wLjIsMi4xLTAuMiwzLjJ2NS45YzAsMS42LDAuMSwzLjIsMC4yLDQuOEwxMzcuMiwyMi4xeiBNMTM5LjIsNS40Yy0xLjMsMC0yLjMtMC4xLTMuNC0wLjFoLTMKCQkJCQljLTEuNCwwLTIuNCwwLTMuNCwwLjFjMC4xLTAuNywwLjEtMi4xLDAuMS0yLjljMS42LDAuMSwyLjgsMC4xLDUsMC4xYzEuNSwwLDMuMywwLDQuOS0wLjFDMTM5LjMsMy4zLDEzOS4yLDQuNCwxMzkuMiw1LjR6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTY1LjEsNS42Yy0yLjEsMC0zLjktMC4xLTYuMy0wLjFjMCwwLjYsMCwxLjQsMCwxLjh2MTAuNWMwLDEuMSwwLDMuMywwLjEsNC4xaC01YzAuMS0xLjQsMC4yLTUuMSwwLjItNwoJCQkJCXYtNWMwLTEuMSwwLTMtMC4xLTQuNWMtMi40LDAtNC40LDAtNi40LDAuMWMwLjEtMS4yLDAuMS0yLjcsMC4xLTRjMi43LDAuMSw1LjQsMC4xLDguNywwLjFzNi4xLTAuMSw4LjktMC4xCgkJCQkJQzE2NS4yLDMsMTY1LjEsNC4zLDE2NS4xLDUuNnoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNzUuMSwxNS44bC04LDAuMmMwLjEsMi4xLDEuNCwzLjIsMy43LDMuMmMxLjgsMCwzLjYtMC42LDUuMi0xLjZsLTAuMSwzLjNjLTEuNywxLjEtMy42LDEuNi01LjYsMS42CgkJCQkJYy01LDAtNy40LTMuMi03LjQtNy4xYzAtNC40LDMtNy42LDcuNC03LjZjNC40LDAsNi4yLDMsNi4yLDYuOEwxNzUuMSwxNS44eiBNMTcyLjYsMTMuOGMtMC4yLTEuOC0wLjktMi44LTIuNS0yLjgKCQkJCQljLTEuNywwLTIuNywxLjMtMywzTDE3Mi42LDEzLjh6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjA1LjgsMTYuNmMtMC45LDIuNS0xLjQsNC0xLjksNS43bC0zLDAuM2wtNC42LTEzLjNsLTIuNyw4Yy0wLjUsMS42LTEuMiwzLjMtMS44LDUuMmgtM2wtNS4xLTE0LjcKCQkJCQljLTAuNi0xLjgtMS40LTQuMS0yLjEtNS45bDUtMC4ybDQuMSwxMy42bDIuOC04LjhjMC40LTEuMiwxLjItMy42LDEuNi00LjhsMi44LTAuM2w0LjYsMTMuN2wyLjUtOC42bDEuNC00LjdoNC44TDIwNS44LDE2LjZ6IgoJCQkJLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMjAuOSwyMi4xYzAuMS0xLjIsMC4yLTMuMiwwLjItNC45VjE0YzAtMS43LTAuNC0yLjYtMS44LTIuNmMtMS42LDAtMi45LDEuMy0zLDIuOXY1YzAsMSwwLDEuOSwwLjEsMi45CgkJCQkJaC00LjZjMC4xLTEuMiwwLjItMy4xLDAuMi00Ljh2LTExYzAtMS43LTAuMS0zLjQtMC4yLTQuNmMxLTAuMSwzLjgtMC4zLDQuNi0wLjVjLTAuMSwwLjgtMC4xLDMuMy0wLjEsMy44djYKCQkJCQljMS0xLjgsMi45LTIuOSw1LTMuMWMyLjksMCw0LjIsMS44LDQuMiw0Ljl2Ni4zYzAsMSwwLjEsMi4yLDAuMSwzSDIyMC45eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTIzOS43LDE1LjhsLTgsMC4yYzAuMSwyLjEsMS40LDMuMiwzLjcsMy4yYzEuOSwwLDMuNy0wLjYsNS4yLTEuNmwtMC4xLDMuM2MtMS43LDEuMS0zLjYsMS42LTUuNiwxLjYKCQkJCQljLTUsMC03LjQtMy4yLTcuNC03LjFjMC00LjQsMy03LjYsNy40LTcuNnM2LjIsMyw2LjIsNi44TDIzOS43LDE1Ljh6IE0yMzcuMiwxMy44Yy0wLjItMS44LTAuOS0yLjgtMi41LTIuOGMtMS43LDAtMi43LDEuMy0zLDMKCQkJCQlMMjM3LjIsMTMuOHoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNTIuMSwyMi4xYzAuMS0xLjIsMC4yLTMuMiwwLjItNC45VjE0YzAtMS43LTAuNC0yLjYtMS44LTIuNmMtMS42LDAuMS0yLjksMS4zLTMsMi45djQuOWMwLDEsMCwyLDAuMSwzCgkJCQkJSDI0M2MwLjEtMS4yLDAuMi0zLjIsMC4yLTQuOXYtNGMwLTEuNy0wLjEtMy41LTAuMi00LjhjMSwwLDMuNC0wLjMsNC4zLTAuNGwwLjIsMi45YzEtMS44LDIuOS0zLDUtMy4xYzIuOSwwLDQuMiwxLjgsNC4yLDQuOQoJCQkJCXY2LjNjMCwxLDAuMSwyLjIsMC4xLDNIMjUyLjF6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjY5LjEsMjIuMWwtMC41LTIuNGMtMC45LDEuNy0yLjcsMi44LTQuNywyLjljLTMsMC00LjUtMS44LTQuNS01LjJ2LTQuMmMwLTEuNi0wLjEtMy40LTAuMS00LjgKCQkJCQljMS42LDAsMy4zLTAuMSw0LjYtMC4yYy0wLjEsMS4xLTAuMiwyLjEtMC4xLDMuMnY0LjljMCwyLDAuNSwyLjksMi4xLDIuOWMxLjQtMC4xLDIuNi0xLjIsMi43LTIuN3YtMy4zYzAtMS42LTAuMS0zLjQtMC4yLTQuOAoJCQkJCWMxLjYsMCwzLjMtMC4xLDQuNy0wLjJjLTAuMSwxLjEtMC4yLDIuMS0wLjIsMy4ydjUuOWMwLDEuNiwwLjEsMy4yLDAuMiw0LjhMMjY5LjEsMjIuMXoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNzQuOSwxOC42YzAtMi43LDIuNC00LjYsNy4xLTQuNmMwLjMsMCwwLjcsMCwxLjEsMC4xbDAtMC40YzAuMS0xLjUtMC42LTIuMy0yLjQtMi4zCgkJCQkJYy0xLjUsMC0yLjksMC41LTQuMiwxLjNsLTAuNi0zLjJjMS43LTEsMy43LTEuNSw1LjYtMS41YzQsMCw1LjgsMS45LDUuNyw1LjVsLTAuMSw1YzAsMC44LDAuMiwxLjEsMC44LDEuMQoJCQkJCWMwLjMsMCwwLjYtMC4xLDAuOS0wLjJsLTAuMiwyLjZjLTAuNywwLjMtMS41LDAuNC0yLjMsMC41Yy0xLjQsMC0yLjYtMC42LTMtMi4zYy0wLjksMS40LTIuNSwyLjMtNC4yLDIuMwoJCQkJCUMyNzYuNSwyMi40LDI3NC45LDIxLDI3NC45LDE4LjZ6IE0yODMsMTcuM1YxNmMtMC4zLDAtMC42LTAuMS0wLjktMC4xYy0yLjMsMC0zLjIsMC45LTMuMiwyLjFjLTAuMSwwLjksMC42LDEuNiwxLjUsMS43CgkJCQkJYzAuMSwwLDAuMiwwLDAuMywwQzI4MiwxOS44LDI4Mi45LDE4LjgsMjgzLDE3LjN6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNOTMuMiw0Ni4yYy0xLjQtMC4xLTMtMC4xLTQuNy0wLjFzLTMuNCwwLTQuOSwwLjFjMC4xLTEsMC4xLTMuOCwwLjEtNS4ydi00LjdjMC0xLjQsMC00LjEtMC4xLTUuMQoJCQkJCWMwLjgsMCwyLjksMCwzLjYtMC4xYy0wLjEsMC42LTAuMSwyLjMtMC4xLDMuMXY4YzAsMC40LDAsMC44LDAsMS4yYzAuNSwwLDEuMSwwLDEuNywwYzEuNiwwLDMsMCw0LjQtMC4xCgkJCQkJQzkzLjMsNDQuMiw5My4yLDQ1LjEsOTMuMiw0Ni4yeiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTk0LjMsNDMuNWMwLTIuMSwxLjctMy40LDUuMi0zLjRjMC4yLDAsMC41LDAsMC44LDB2LTAuM2MwLTEuMS0wLjQtMS43LTEuNy0xLjdjLTEuMSwwLTIuMiwwLjQtMy4xLDAuOQoJCQkJCWwtMC40LTIuNGMxLjMtMC43LDIuNy0xLjEsNC4yLTEuMWMyLjksMCw0LjMsMS40LDQuMiw0LjFsLTAuMSwzLjdjMCwwLjYsMC4yLDAuOCwwLjYsMC44YzAuMiwwLDAuNCwwLDAuNi0wLjFsLTAuMiwxLjkKCQkJCQljLTAuNSwwLjItMS4xLDAuMy0xLjcsMC4zYy0xLjEsMC4xLTItMC42LTIuMi0xLjdjLTAuNywxLjEtMS45LDEuNy0zLjEsMS43Qzk1LjYsNDYuNCw5NC4zLDQ1LjMsOTQuMyw0My41eiBNMTAwLjMsNDIuNnYtMQoJCQkJCWMtMC4yLDAtMC40LDAtMC43LDBjLTEuNywwLTIuNCwwLjctMi40LDEuNmMwLDAuNywwLjUsMS4yLDEuMSwxLjNjMC4xLDAsMC4xLDAsMC4yLDBjMC45LDAsMS43LTAuNywxLjctMS43CgkJCQkJQzEwMC4zLDQyLjcsMTAwLjMsNDIuNiwxMDAuMyw0Mi42TDEwMC4zLDQyLjZ6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTEyLjYsNDYuMWMwLjEtMC45LDAuMS0yLjQsMC4xLTMuNnYtMi40YzAtMS4yLTAuMy0yLTEuNC0yYy0xLjIsMC0yLjEsMS0yLjIsMi4xdjMuNmMwLDAuNywwLDEuNiwwLjEsMi4yCgkJCQkJaC0zLjRjMC4xLTAuOSwwLjEtMi40LDAuMS0zLjZ2LTIuOWMwLTEuMiwwLTIuNi0wLjEtMy41YzAuNywwLDIuNS0wLjIsMy4yLTAuM2wwLjIsMi4xYzAuOC0xLjQsMi4yLTIuMiwzLjgtMi4zCgkJCQkJYzIuMSwwLDMuMSwxLjQsMy4xLDMuNnY0LjdjMCwwLjcsMCwxLjYsMC4xLDIuMkgxMTIuNnoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMjQuOSwzNi4zdi0xLjljMC0xLjIsMC0yLjUtMC4xLTMuNGMwLjgtMC4xLDIuOC0wLjMsMy40LTAuNGMtMC4xLDAuNi0wLjEsMS42LTAuMSwyLjN2OS42CgkJCQkJYzAsMS4yLDAsMi42LDAuMiwzLjVoLTMuMUwxMjUsNDVjLTAuNywwLjktMS44LDEuNC0yLjksMS40Yy0yLjgsMC00LjUtMi40LTQuNS01YzAtMy4zLDIuMS01LjgsNS4xLTUuOAoJCQkJCUMxMjMuNCwzNS42LDEyNC4yLDM1LjgsMTI0LjksMzYuM3ogTTEyMC44LDQxLjFjMCwyLDEsMywyLjMsM2MwLjcsMCwxLjQtMC40LDEuOC0xdi00LjVjLTAuNS0wLjQtMS4xLTAuNy0xLjctMC42CgkJCQkJQzEyMS42LDM4LDEyMC44LDM5LjQsMTIwLjgsNDEuMXoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMzUuMyw0Ni4xYzAuMS0xLDAuMi0zLjcsMC4yLTUuMXYtNC43YzAtMS40LDAtNC4xLTAuMi01LjFjMC44LDAsMywwLDMuNy0wLjFjLTAuMSwwLjYtMC4xLDIuMy0wLjEsMy4xCgkJCQkJVjQzYzAsMC44LDAsMi41LDAuMSwzLjFIMTM1LjN6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQ4LjMsNDYuMWMwLjEtMC45LDAuMi0yLjQsMC4yLTMuNnYtMi40YzAtMS4yLTAuMy0yLTEuNC0yYy0xLjIsMC0yLjEsMS0yLjIsMi4xdjMuNmMwLDAuNywwLDEuNiwwLjEsMi4yCgkJCQkJaC0zLjRjMC4xLTAuOSwwLjEtMi40LDAuMS0zLjZ2LTIuOWMwLTEuMiwwLTIuNi0wLjEtMy41YzAuNywwLDIuNS0wLjIsMy4yLTAuM2wwLjIsMi4xYzAuOC0xLjMsMi4yLTIuMiwzLjctMi4zCgkJCQkJYzIuMSwwLDMuMSwxLjQsMy4xLDMuNnY0LjdjMCwwLjcsMCwxLjYsMC4xLDIuMkgxNDguM3oiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNjAuNCwzMy4zYy0wLjMtMC4xLTAuNi0wLjItMS0wLjJjLTEuMSwwLTEuNywwLjctMS43LDIuMXYwLjdoMi41Yy0wLjEsMC41LTAuMSwxLjUtMC4xLDIuM2gtMi40djUuOQoJCQkJCWMwLDAuNywwLDEuNCwwLjEsMi4xaC0zLjRjMC4xLTEuMiwwLjItMi4zLDAuMi0zLjV2LTQuNWgtMS44bDAuNS0yLjNoMS4zdi0wLjVjMC0yLjksMS41LTQuNyw0LjMtNC43YzAuNSwwLDAuOSwwLjEsMS40LDAuMgoJCQkJCUwxNjAuNCwzMy4zeiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE2NS45LDQ2LjVjLTIuOCwwLjEtNS4xLTIuMS01LjEtNC44YzAtMC4xLDAtMC4yLDAtMC4zYzAtMy4zLDIuMi01LjcsNS40LTUuN2MyLjgtMC4xLDUuMSwyLDUuMiw0LjgKCQkJCQljMCwwLjEsMCwwLjMsMCwwLjRDMTcxLjMsNDQsMTY5LjIsNDYuNSwxNjUuOSw0Ni41eiBNMTY2LjEsMzhjLTEuMywwLTIuMiwxLjEtMi4yLDNjMCwyLjIsMC45LDMuMSwyLjEsMy4xYzEuNCwwLDIuMi0xLjEsMi4yLTMKCQkJCQlDMTY4LjIsMzguOSwxNjcuMywzOCwxNjYuMSwzOHoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNzkuNiwzOC43Yy0xLjYtMC4yLTMuNCwwLjMtMy40LDIuMXYzYzAsMC43LDAsMS42LDAuMSwyLjJoLTMuNGMwLjEtMS4yLDAuMS0yLjQsMC4xLTMuNnYtMy4xCgkJCQkJYzAtMS4xLDAtMi4yLTAuMi0zLjJjMS4xLTAuMSwyLjEtMC4yLDMuMi0wLjRsMC4yLDIuNGMwLjYtMS41LDIuMS0yLjQsMy42LTIuNUwxNzkuNiwzOC43eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE5My44LDQ2LjFjMC4xLTEuMiwwLjEtMi40LDAuMS0zLjZ2LTIuNGMwLTEuMi0wLjMtMi0xLjMtMmMtMS4xLDAtMiwwLjktMiwxLjljMCwwLDAsMCwwLDB2My44CgkJCQkJYzAsMC43LDAsMS42LDAuMSwyLjJoLTMuNGMwLjEtMC45LDAuMS0yLjQsMC4xLTMuNnYtMi4zYzAtMS4yLTAuMi0yLTEuMi0yYy0xLjEsMC0yLDAuOS0yLDJ2My44YzAsMC43LDAsMS41LDAuMSwyLjJoLTMuNAoJCQkJCWMwLjEtMC45LDAuMS0yLjQsMC4xLTMuNnYtMi45YzAtMS4yLDAtMi42LTAuMS0zLjVjMC43LDAsMi41LTAuMiwzLjItMC4zbDAuMiwxLjljMC43LTEuMiwyLTIsMy40LTIuMWMxLjQtMC4xLDIuNiwwLjgsMi45LDIuMQoJCQkJCWMwLjctMS4zLDIuMS0yLjEsMy41LTIuMWMyLjEsMCwzLjEsMS40LDMuMSwzLjZ2NC43YzAsMC43LDAsMS41LDAuMSwyLjJMMTkzLjgsNDYuMXoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xOTguNyw0My41YzAtMi4xLDEuNy0zLjQsNS4yLTMuNGMwLjIsMCwwLjUsMCwwLjgsMHYtMC4zYzAtMS4xLTAuNC0xLjctMS43LTEuN2MtMS4xLDAtMi4yLDAuNC0zLjEsMC45CgkJCQkJbC0wLjQtMi40YzEuMy0wLjcsMi43LTEuMSw0LjItMS4xYzIuOSwwLDQuMywxLjQsNC4yLDQuMWwtMC4xLDMuN2MwLDAuNiwwLjIsMC44LDAuNiwwLjhjMC4yLDAsMC40LDAsMC42LTAuMWwtMC4xLDEuOQoJCQkJCWMtMC41LDAuMi0xLjEsMC4zLTEuNywwLjNjLTEuMSwwLjEtMi0wLjYtMi4yLTEuN2MtMC43LDEuMS0xLjksMS43LTMuMSwxLjdDMTk5LjksNDYuNCwxOTguNyw0NS4zLDE5OC43LDQzLjV6IE0yMDQuNyw0Mi42di0xCgkJCQkJYy0wLjIsMC0wLjQsMC0wLjcsMGMtMS43LDAtMi40LDAuNy0yLjQsMS42YzAsMC43LDAuNSwxLjIsMS4xLDEuM2MwLjEsMCwwLjEsMCwwLjIsMGMxLDAsMS43LTAuNywxLjgtMS43CgkJCQkJQzIwNC43LDQyLjcsMjA0LjcsNDIuNiwyMDQuNyw0Mi42TDIwNC43LDQyLjZ6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjE2LjUsNDUuOGMtMC43LDAuNC0xLjUsMC42LTIuNCwwLjZjLTIuMSwwLTMuNC0wLjktMy40LTMuNXYtNC44SDIwOWwwLjUtMi4zaDEuM2wwLjItMi4xbDMtMXYzLjFoMi42CgkJCQkJYzAsMC41LTAuMSwxLjUtMC4xLDIuM0gyMTR2NC40YzAsMS4xLDAuNCwxLjMsMS4xLDEuM2MwLjUsMCwxLjEtMC4yLDEuNS0wLjVMMjE2LjUsNDUuOHoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMTkuOSwzNC4xYy0xLDAuMS0xLjgtMC42LTEuOC0xLjZjMCwwLDAsMCwwLTAuMWMwLTEsMC44LTEuOCwxLjgtMS44YzAsMCwwLDAsMC4xLDBjMSwwLDEuOCwwLjcsMS44LDEuNwoJCQkJCWMwLDAsMCwwLDAsMEMyMjEuOCwzMy4zLDIyMSwzNC4xLDIxOS45LDM0LjFDMjIwLDM0LjEsMjE5LjksMzQuMSwyMTkuOSwzNC4xeiBNMjE4LjEsNDYuMWMwLjEtMS4yLDAuMi0yLjMsMC4yLTMuNXYtMwoJCQkJCWMwLTEuMiwwLTIuNC0wLjItMy42YzAuOCwwLDIuOC0wLjEsMy40LTAuMmMtMC4xLDAuNS0wLjEsMS41LTAuMSwyLjN2NmMwLDAuNywwLDEuNCwwLjEsMi4xTDIxOC4xLDQ2LjF6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjI4LjIsNDYuNWMtMi44LDAuMS01LjEtMi4xLTUuMS00LjhjMC0wLjEsMC0wLjIsMC0wLjNjMC0zLjMsMi4yLTUuNyw1LjQtNS43YzIuNy0wLjEsNS4xLDIuMSw1LjEsNC44CgkJCQkJYzAsMC4xLDAsMC4yLDAsMC40QzIzMy42LDQ0LDIzMS41LDQ2LjUsMjI4LjIsNDYuNXogTTIyOC40LDM4Yy0xLjMsMC0yLjIsMS4xLTIuMiwzYzAsMi4yLDAuOSwzLjEsMi4xLDMuMWMxLjQsMCwyLjItMS4xLDIuMi0zCgkJCQkJQzIzMC41LDM4LjksMjI5LjYsMzgsMjI4LjQsMzh6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjQyLDQ2LjFjMC4xLTEuMiwwLjItMi40LDAuMi0zLjZ2LTIuNGMwLTEuMi0wLjMtMi0xLjMtMmMtMS4yLDAtMi4xLDEtMi4yLDIuMXYzLjZjMCwwLjcsMCwxLjUsMC4xLDIuMgoJCQkJCWgtMy40YzAuMS0wLjksMC4xLTIuNCwwLjEtMy42di0yLjljMC0xLjIsMC0yLjYtMC4xLTMuNWMwLjcsMCwyLjUtMC4yLDMuMi0wLjNsMC4yLDIuMWMwLjgtMS4zLDIuMi0yLjIsMy43LTIuMwoJCQkJCWMyLjEsMCwzLjEsMS40LDMuMSwzLjZ2NC43YzAsMC43LDAsMS42LDAuMSwyLjJIMjQyeiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTgzLjcsNjIuMmwwLTQuOWMwLTEuNCwwLTQtMC4xLTVsMi4xLTAuMmw4LDkuNnYtNC4yYzAtMS40LDAtNC4xLTAuMi01LjFjMC44LDAsMi44LDAsMy41LTAuMQoJCQkJCWMtMC4xLDAuNi0wLjEsMi4zLTAuMSwzLjFMOTcsNjQuNGMwLDAuOCwwLDIuNSwwLDMuMUw5NSw2Ny43bC04LTkuNnY2LjJjMCwwLjgsMCwyLjUsMC4xLDMuMWgtMy41CgkJCQkJQzgzLjYsNjYuMyw4My43LDYzLjYsODMuNyw2Mi4yeiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTEwOC4yLDYyLjhsLTUuOSwwLjJjMC4xLDEuNiwxLDIuNCwyLjcsMi40YzEuNCwwLDIuNy0wLjQsMy44LTEuMmwwLDIuNGMtMS4yLDAuOC0yLjcsMS4yLTQuMSwxLjIKCQkJCQljLTMuNywwLTUuNC0yLjQtNS40LTUuMmMwLTMuMywyLjItNS42LDUuNC01LjZjMy4yLDAsNC42LDIuMiw0LjYsNUwxMDguMiw2Mi44eiBNMTA2LjMsNjEuMmMtMC4xLTEuNC0wLjctMi4xLTEuOC0yLjEKCQkJCQlzLTIuMSwwLjktMi4yLDIuMkwxMDYuMyw2MS4yeiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTExMS45LDY0bC0xLTIuN2MtMC41LTEuMy0xLjEtMy0xLjUtMy45YzAuMywwLDIuOC0wLjIsMy4yLTAuMmwxLjksNmwwLjgtMi4zbDEuMi0zLjZsMi4xLTAuMWwyLjEsNgoJCQkJCWwwLjgtMi4zYzAuMS0wLjQsMC45LTMsMS4xLTMuNmMxLjIsMCwyLjEsMCwzLjEtMC4xbC0zLjgsMTAuM2wtMi4yLDAuMWMtMC4zLTEuMS0wLjgtMi40LTEuMy0zLjhsLTAuOC0yLjFsLTIuMSw1LjlsLTIuMywwLjEKCQkJCQlDMTEyLjgsNjYuNSwxMTIuNCw2NS4zLDExMS45LDY0eiIvPgoJCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE0My40LDUzLjhsLTgsMTAuOWgyLjZjMS44LDAsMy45LDAsNS4xLTAuMWMtMC4xLDAuOS0wLjIsMS44LTAuMiwyLjhjLTEuMy0wLjEtMy43LTAuMS01LjgtMC4xCgkJCQkJYy0yLjQsMC00LjcsMC02LjMsMC4xbC0wLjMtMS42bDgtMTAuOGgtMi4zYy0xLjksMC0zLjYsMC01LDBjMC4xLTAuOCwwLjItMS45LDAuMy0yLjhjMi4xLDAuMSwzLDAuMSw1LjgsMC4xCgkJCQkJYzIuNywwLDQuNCwwLDUuOC0wLjFMMTQzLjQsNTMuOHoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNTMuMiw2Mi44bC01LjksMC4yYzAuMSwxLjYsMSwyLjQsMi43LDIuNGMxLjQsMCwyLjctMC40LDMuOC0xLjJsLTAuMSwyLjRjLTEuMiwwLjgtMi43LDEuMi00LjEsMS4yCgkJCQkJYy0zLjcsMC01LjQtMi40LTUuNC01LjJjMC0zLjMsMi4yLTUuNiw1LjQtNS42YzMuMiwwLDQuNiwyLjIsNC42LDVMMTUzLjIsNjIuOHogTTE1MS40LDYxLjJjLTAuMS0xLjQtMC43LTIuMS0xLjgtMi4xCgkJCQkJcy0yLjEsMC45LTIuMiwyLjJMMTUxLjQsNjEuMnoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNTUuMSw2NC44YzAtMi4xLDEuNy0zLjQsNS4yLTMuNGMwLjIsMCwwLjUsMCwwLjgsMHYtMC4zYzAtMS4xLTAuNC0xLjctMS43LTEuN2MtMS4xLDAtMi4yLDAuNC0zLjEsMC45CgkJCQkJbC0wLjQtMi40YzEuMy0wLjcsMi43LTEuMSw0LjItMS4xYzIuOSwwLDQuMywxLjQsNC4yLDQuMWwtMC4xLDMuN2MwLDAuNiwwLjIsMC44LDAuNiwwLjhjMC4yLDAsMC40LDAsMC42LTAuMWwtMC4yLDEuOQoJCQkJCWMtMC41LDAuMi0xLjEsMC4zLTEuNywwLjNjLTEuMSwwLjEtMi0wLjYtMi4yLTEuN2MtMC43LDEuMS0xLjksMS43LTMuMSwxLjdDMTU2LjMsNjcuNiwxNTUuMSw2Ni42LDE1NS4xLDY0Ljh6IE0xNjEuMSw2My45di0xCgkJCQkJYy0wLjIsMC0wLjUsMC0wLjcsMGMtMS43LDAtMi40LDAuNy0yLjQsMS42YzAsMC43LDAuNSwxLjIsMS4xLDEuM2MwLjEsMCwwLjEsMCwwLjIsMGMxLDAsMS43LTAuNywxLjgtMS43CgkJCQkJQzE2MS4xLDYzLjksMTYxLjEsNjMuOSwxNjEuMSw2My45TDE2MS4xLDYzLjl6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTY2LjYsNjcuNGMwLjEtMC45LDAuMS0yLjMsMC4xLTMuNnYtOC4xYzAtMS4yLDAtMi41LTAuMS0zLjRjMC43LDAsMi44LTAuMywzLjQtMC40CgkJCQkJYy0wLjEsMC42LTAuMSwyLjQtMC4xLDIuOHYxMC41YzAsMC43LDAsMS42LDAuMSwyLjFIMTY2LjZ6Ii8+CgkJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTcxLjUsNjQuOGMwLTIuMSwxLjctMy40LDUuMi0zLjRjMC4yLDAsMC41LDAsMC44LDB2LTAuM2MwLTEuMS0wLjQtMS43LTEuNy0xLjdjLTEuMSwwLTIuMiwwLjQtMy4xLDAuOQoJCQkJCWwtMC40LTIuNGMxLjMtMC43LDIuNy0xLjEsNC4yLTEuMWMyLjksMCw0LjMsMS40LDQuMiw0LjFsLTAuMSwzLjdjMCwwLjYsMC4yLDAuOCwwLjYsMC44YzAuMiwwLDAuNCwwLDAuNi0wLjFsLTAuMSwxLjkKCQkJCQljLTAuNSwwLjItMS4xLDAuMy0xLjcsMC4zYy0xLDAuMS0yLTAuNi0yLjItMS43Yy0wLjcsMS4xLTEuOCwxLjctMy4xLDEuN0MxNzIuNyw2Ny42LDE3MS41LDY2LjYsMTcxLjUsNjQuOHogTTE3Ny40LDYzLjl2LTEKCQkJCQljLTAuMiwwLTAuNCwwLTAuNywwYy0xLjcsMC0yLjQsMC43LTIuNCwxLjZjMCwwLjcsMC41LDEuMiwxLjEsMS4zYzAuMSwwLDAuMSwwLDAuMiwwYzAuOSwwLDEuNy0wLjcsMS44LTEuNwoJCQkJCUMxNzcuNCw2NCwxNzcuNCw2My45LDE3Ny40LDYzLjlMMTc3LjQsNjMuOXoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xODkuNyw2Ny40YzAuMS0xLjIsMC4yLTIuNCwwLjItMy42di0yLjRjMC0xLjItMC4zLTItMS4zLTJjLTEuMiwwLTIuMSwxLTIuMiwyLjF2My42YzAsMC43LDAsMS41LDAuMSwyLjIKCQkJCQlIMTgzYzAuMS0wLjksMC4xLTIuNCwwLjEtMy42di0yLjljMC0xLjIsMC0yLjYtMC4xLTMuNWMwLjcsMCwyLjUtMC4yLDMuMi0wLjNsMC4xLDIuMWMwLjgtMS4zLDIuMi0yLjIsMy43LTIuMwoJCQkJCWMyLjEsMCwzLjEsMS40LDMuMSwzLjZ2NC43YzAsMC43LDAsMS42LDAuMSwyLjJMMTg5LjcsNjcuNHoiLz4KCQkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMDIsNTcuNXYtMS45YzAtMS4yLDAtMi41LTAuMS0zLjRjMC44LTAuMSwyLjgtMC4zLDMuNC0wLjRjLTAuMSwwLjYtMC4xLDEuNi0wLjEsMi4zdjkuNgoJCQkJCWMwLDEuMiwwLDIuNCwwLjIsMy41aC0zLjFsLTAuMS0xLjFjLTAuNywwLjktMS44LDEuNC0yLjksMS40Yy0yLjgsMC00LjUtMi40LTQuNS01YzAtMy4zLDIuMS01LjgsNS4xLTUuOAoJCQkJCUMyMDAuNSw1Ni44LDIwMS4zLDU3LjEsMjAyLDU3LjV6IE0xOTcuOSw2Mi40YzAsMi4xLDEsMywyLjMsM2MwLjcsMCwxLjQtMC40LDEuOC0xdi00LjVjLTAuNS0wLjQtMS4xLTAuNy0xLjctMC42CgkJCQkJQzE5OC44LDU5LjIsMTk3LjksNjAuNywxOTcuOSw2Mi40TDE5Ny45LDYyLjR6Ii8+CgkJCTwvZz4KCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTczLDE1LjFjLTAuNS0xLTEuNS0xLjYtMi42LTEuN2wtMS4xLTAuMWMwLjEtMC4xLDAuMS0wLjIsMC4yLTAuNGMwLjktMS41LDAuNC0zLjQtMS4xLTQuNAoJCQkJYy0wLjQtMC4zLTAuOS0wLjQtMS40LTAuNGgtMC4yaC0wLjFoLTAuMWgtMC4yaC0wLjFMNjQuOCw4YzAtMS43LTEuMy0zLjEtMi45LTMuMmwtMC42LDBoLTAuMUM1NS40LDQuMyw0OS40LDQsNDMuNiw0CgkJCQljLTEuMywwLTMuMywwLTQuNiwwLjFsLTAuMy0wLjNjLTAuMy0wLjQtMC42LTAuOC0wLjktMS4yYy0wLjMtMC40LTAuNy0wLjgtMS4yLTFjLTAuNS0wLjMtMS0wLjQtMS42LTAuNEgzNWgtMC43bDAsMGgtMC41bDAsMAoJCQkJYy0yLjQsMC4xLTQuNiwwLjItNi45LDAuNGgtMC4yYy0yLjIsMC4yLTQuMSwwLjMtNS45LDAuNWMtMC43LDAuMS0xLjQsMC40LTEuOSwwLjljLTMsMy01LjksNy41LTguOSwxMy4ydjAuMQoJCQkJYy0wLjEsMC4xLTAuMSwwLjMtMC4yLDAuNGMtMS4xLDIuMi0yLjIsNC41LTMuMiw2LjljMCwwLDAsMCwwLDAuMUw2LjQsMjRjLTAuOSwyLjItMS44LDQuNS0yLjcsNi45bDAsMC4xbC0wLjEsMC4zbC0wLjEsMC4yCgkJCQljMCwwLDAsMC4xLDAsMC4xQzIuNywzMy44LDIsMzYsMS4zLDM4LjNjMCwwLDAsMC4xLDAsMC4xbC0wLjEsMC4zbDAsMC4xYzAsMCwwLDAuMSwwLDAuMWMtMC45LDIuOC0xLjYsNS41LTIuMSw4bDAsMFY0N3YwbDAsMC4yCgkJCQlsLTAuMSwwLjNjLTAuMywxLjcsMC44LDMuNCwyLjUsMy43YzAuMiwwLDAuNCwwLjEsMC42LDAuMWgwLjFjLTAuMSwwLjQtMC4yLDAuOC0wLjMsMS4ydjAuMWwtMC4xLDAuNmMtMC40LDEuNywwLjcsMy40LDIuNSwzLjgKCQkJCUM0LjYsNTcsNC44LDU3LDUsNTdoMC4xYy0wLjEsMC40LTAuMiwwLjgtMC4zLDEuMmMwLDAsMCwwLjEsMCwwLjF2MC4xbDAsMHYwLjFjMCwwLDAsMC4xLDAsMC4xdjAuMmMtMC40LDEuNywwLjcsMy40LDIuNSwzLjgKCQkJCWMwLjIsMCwwLjMsMC4xLDAuNSwwLjFIOGMtMC4xLDAuMy0wLjEsMC43LTAuMiwxYy0wLjMsMS43LDAuOCwzLjQsMi41LDMuN2MwLjIsMCwwLjQsMC4xLDAuNiwwLjFjMC4yLDAsMC4zLDAsMC41LDAKCQkJCWM2LjMtMC44LDEyLjYtMS4yLDE4LjktMS4yYzguMywwLDE2LjYsMC41LDI0LjgsMS41YzAuMSwwLDAuMywwLDAuNCwwYzEuNiwwLDIuOS0xLjEsMy4xLTIuN2MyLjItMTQuNyw3LjEtMzQuNywxNC40LTQ3CgkJCQlDNzMuNSwxNy4zLDczLjUsMTYuMSw3MywxNS4xeiIvPgoKCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8xXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNS40MDE4IiB5MT0iNDYuMjE0MiIgeDI9IjY3LjUxNzQiIHkyPSI0LjA5MTciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMCA3MikiPgoJCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzczQzhFMSIvPgoJCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6IzAwNzE5OSIvPgoJCQk8L2xpbmVhckdyYWRpZW50PgoJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzAuMiwxNi44QzU1LjcsMTUuNiw0MiwxNS45LDMyLjMsMTdjLTkuMSw5LjMtMTguNSwzMi4xLTIxLjYsNDcuOEMyMSw2My4zLDM4LjEsNjMsNTUuNCw2NS4yCgkJCQlDNTcuNSw1MC44LDYyLjUsMjkuOSw3MC4yLDE2Ljh6Ii8+CgoJCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzJfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjIyLjE2NTQiIHkxPSI1MS4zNDE5IiB4Mj0iNjMuODM1IiB5Mj0iOS42NzIzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgNzIpIj4KCQkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiM3NUNCQzciLz4KCQkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDg3ODIiLz4KCQkJPC9saW5lYXJHcmFkaWVudD4KCQkJPHBhdGggY2xhc3M9InN0MiIgZD0iTTY2LjYsMTEuNWMtMTQuNS0xLjItMjguMS0wLjktMzcuOSwwLjNjLTkuMSw5LjMtMTcuOSwzMi4zLTIxLDQ3LjljMTAuNC0xLjUsMjUuOS0yLDQyLjUtMC41CgkJCQlDNTMsNDIuOSw1OC40LDI1LjMsNjYuNiwxMS41eiIvPgoJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNy42LDU5LjlsMC4xLTAuNmMxMS40LTEuNywyNy4xLTEuOSw0Mi4yLTAuNWMzLjItMTguMiw4LjktMzQuOSwxNi4zLTQ3LjRsMC42LDAKCQkJCUM1OS40LDI0LDUzLjUsNDEuMSw1MC40LDU5LjNsMCwwLjNoLTAuMkMzNSw1OC4xLDE5LDU4LjMsNy42LDU5Ljl6Ii8+CgoJCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzNfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjE4LjcwOTQiIHkxPSI1NS4zMzA2IiB4Mj0iNTguNjkxMSIgeTI9IjE1LjM1NTgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgMCA3MikiPgoJCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzlERDE5QSIvPgoJCQkJPHN0b3AgIG9mZnNldD0iMC41IiBzdHlsZT0ic3RvcC1jb2xvcjojMDZBMjRBIi8+CgkJCTwvbGluZWFyR3JhZGllbnQ+CgkJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik00NS42LDMyLjRsMS41LTRsNy4xLTguMWMwLjMtMC4xLDAuNi0wLjEsMC45LTAuMUM1Ni45LDE2LDU5LDEyLDYxLjMsOC4xYy0xMy45LTEuMi0yNy0wLjktMzYuNCwwLjIKCQkJCUMxNi4zLDE3LjEsNy43LDM5LjEsNC44LDUzLjljNS40LTAuNywxMC44LTEuMiwxNi4yLTEuM2MtMC4zLTAuMi0wLjEtMS40LTAuMS0xLjVjMC40LTEuNiwxLjUtMi44LDMtNC4xYzEuNS0xLjMsMC44LTIuMSwyLTIuNgoJCQkJYzIuNS0xLjEsNC45LTIuNSw3LjEtNC4xYzIuOC0yLjEsMy44LTkuMiwzLjktOC43YzAuMSwwLjUsMS4xLDAuMywxLjEsMC43YzAsMC40LDAuMywxLjIsMC41LDEuM3MxLTIuMSwyLjktMi4yCgkJCQljMS4yLDAuMSwyLjQsMC41LDMuMywxLjNjMC4xLDAsMC44LTAuMSwwLjgtMC4xTDQ1LjYsMzIuNHoiLz4KCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTU0LjksMjEuMWwtMC41LTAuM2wwLjQtMC43YzEuOC00LjEsMy45LTguMiw2LjItMTJsMC42LDBjLTIuNCwzLjktNC41LDgtNi4zLDEyLjJMNTQuOSwyMS4xeiIvPgoJCQk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzYuOCw3LjFjLTAuMiwwLjEsMC4xLDAuMiwwLjUsMC43YzAuNSwwLjYsMC45LDEuMywxLjIsMi4xYzAsMC40LTAuNSwwLjIsMC4xLDAuOGMwLjUsMC42LDIuMywzLjIsMi41LDMuNwoJCQkJczAuNSwwLjMsMC41LDAuMWMwLTAuMywwLjMsMC4yLDAuNCwwLjVjMCwwLjItMC4yLDAuMS0wLjIsMC4yczAuNiwwLjgsMSwyLjFjMC41LDEuNCwxLDIuMSwwLjksMy41Yy0wLjEsMS4zLTAuNCwzLjMtMS40LDMuOAoJCQkJYy0xLDAuNS0xLjksMC42LTEuOCwxLjZjMC4xLDEsMS4xLDEuMSwxLjgsMS42YzAuNywwLjUsMS44LDAuMywyLjIsMS4zcy0wLjEsMi43LTAuOCwzLjRzLTAuOSwxLjEtMC42LDEuNAoJCQkJYzAuMywwLjMsMC42LDAuMywwLjksMC4yczAuNSwwLjEsMC41LDAuNXMwLjIsMC41LDEuMy0wLjJzMS42LTIuMSwyLjUtMy4xYzAuOC0xLDEuNC0yLjEsMi0zLjJjMC4xLTAuMiwwLjEtMC4zLTAuMy0wLjQKCQkJCWMtMC40LTAuMS0wLjUtMC41LTAuNC0wLjljMCwwLDAtMC4xLDAtMC4xYzAuNC0wLjksMS4yLTEsMS45LTEuMmMwLjQtMC4xLDAuNy0wLjEsMS4xLDBjMC4zLDAuMywwLjEsMC44LDAuMiwwLjcKCQkJCWMwLjItMC4yLDAuMy0wLjQsMC40LTAuN2MwLTAuMSwwLTAuMS0wLjEtMC4yYy0wLjEsMC0wLjMtMC4zLTAuMS0wLjljMC4zLTAuOCwxLjItMC41LDEuNC0xLjljMC4zLTEuMywxLTIuMSwwLjYtMi42CgkJCQljLTAuNC0wLjUtMS4yLTAuMy0xLjktMC4xYy0wLjYsMC4zLTEuNCwxLjYtMi4zLDEuM2MtMC45LTAuMy0zLTAuOS0zLjMtMS41Yy0wLjQtMS4xLTAuNy0yLjItMC45LTMuM2MtMC4xLTAuOC0wLjctMC41LTEtMC45CgkJCQljLTAuMy0wLjQtMC41LDAuMy0wLjQsMWMwLjEsMC43LDAuOCwxLjQsMC4zLDEuN3MtMC44LTEtMS40LTEuM3MtMC45LTAuNi0wLjgtMS45YzAuMS0xLjMtMS4xLTEuNS0wLjktMi4yCgkJCQljMC4yLTAuNywwLjQtMS40LTEuMS0yLjRjLTEuNS0xLTIuMS0wLjgtMi42LTEuM2MtMC41LTAuNS0xLTAuOC0xLTEuM3MwLjQtMC43LTAuNC0wLjVDMzcuMSw3LjEsMzcsNywzNi44LDcuMXoiLz4KCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTQxLjIsMzYuMmMwLjMtMC4zLDAuNS0wLjcsMC42LTEuMWMwLjEtMC4yLTAuNy0wLjItMC43LTAuN2MwLTAuNiwwLjQtMS4xLDAuNC0xLjRjMC0wLjItMC4yLTAuMS0wLjMtMC4xCgkJCQljLTAuMSwwLTAuMy0wLjEtMC4zLTAuMmMtMC4xLTAuMy0wLjQtMC4zLTEtMC4xYy0wLjYsMC4yLTEuMiwxLTEuNCwwLjljLTAuMiwwLTAuNS0wLjktMC41LTEuM3MtMS4xLTAuMi0xLTAuOAoJCQkJYzAtMC4yLDAuMS0wLjQsMC4yLTAuNWMwLDAsMC4xLTAuMSwwLTAuMmMtMC44LTAuMS0xLjQsMC44LTEuOCwxLjJDMzUsMzIuMywzNiwzMy43LDM1LDM0LjVjLTEsMC44LTEuNCwwLjYtMS41LDEKCQkJCWMtMC4zLDItMS4zLDMuOC0yLjksNC45Yy0yLjcsMi4yLTQuMiwzLjUtNS40LDRzLTEuNCwyLjEtMi44LDMuNGMtMS40LDEuMy0yLjMsNC4yLTEuNSw1YzAuNiwwLjUsMS40LDAuNywyLjEsMC40CgkJCQljMC40LTAuMSwwLjgsMCwxLjEsMC4zYzAuMiwwLjMsMC45LTAuMSwxLjMsMC4zYzAuNiwwLjQsMS40LDAuNiwyLjEsMC41YzEtMC4xLDIuNy0wLjksNC4xLTMuMWMxLjQtMi4zLDEuMi00LjMsMS41LTUuMQoJCQkJYzAuNC0xLjEsMS4zLTIsMi41LTIuNGMxLjItMC4zLDEuNC0wLjUsMS44LTAuM3MxLjMsMC4zLDEuMi0wLjRzLTEuMS0wLjUtMS4xLTEuMWMwLTAuNi0wLjItMSwwLjYtMS40YzAuOC0wLjMsMS4yLTEuNCwxLjctMi4zCgkJCQlDNDAuMSwzNy4zLDQwLjcsMzcsNDEuMiwzNi4yeiIvPgoKCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF80XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxMC4yMzUiIHkxPSI1NC4xODQzIiB4Mj0iNDAuNDI1NCIgeTI9IjIzLjk4NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAwIDcyKSI+CgkJCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojOUREMTlBIi8+CgkJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMDZBMjRBIi8+CgkJCTwvbGluZWFyR3JhZGllbnQ+CgkJCTxwYXRoIGNsYXNzPSJzdDQiIGQ9Ik00NC41LDI4LjljLTAuMS0wLjEtMC4yLTAuMy0wLjMtMC40Yy0wLjEtMC4xLTAuMi0wLjItMC4zLTAuMmMtMC41LTAuMy0xLjItMC4zLTEuNi0wLjcKCQkJCUM0MS42LDI3LDQwLjYsMjcsNDAuNSwyNnMwLjgtMS4xLDEuOC0xLjZjMS0wLjUsMS4zLTIuNCwxLjQtMy44YzAuMS0xLjMtMC40LTIuMS0wLjktMy41Yy0wLjUtMS4yLTEtMS45LTEtMi4xczAuMiwwLDAuMi0wLjIKCQkJCWMtMC4xLTAuMy0wLjQtMC42LTAuNC0wLjVzLTAuMywwLjQtMC41LTAuMWMtMC4zLTAuNC0yLjEtMy4xLTIuNS0zLjdzLTAuMS0wLjQtMC4xLTAuOGMtMC4zLTAuOC0wLjctMS41LTEuMi0yLjEKCQkJCWMtMC4xLTAuMi0wLjMtMC4zLTAuNC0wLjVsMCwwYy0wLjEsMC0wLjEsMCwwLDBjLTAuMS0wLjEtMC4xLTAuMS0wLjEtMC4yYy0wLjQtMC45LTAuOS0xLjctMS41LTIuNWMtMC4xLTAuMS0wLjItMC4yLTAuNC0wLjMKCQkJCWMtNC45LDAuMS0xMC4yLDAuNS0xNCwwLjlDMTIuOCwxMy42LDQuOCwzMy43LDIsNDcuOWM0LjItMC42LDEzLjEtMS4zLDE5LjItMS40aDAuOGwwLjgsMGgwLjljMC41LTAuOSwwLjktMS42LDEuNi0xLjkKCQkJCWMxLjEtMC41LDIuNy0xLjgsNS40LTRjMS42LTEuMiwyLjctMywyLjktNC45YzAuMS0wLjQsMC41LTAuMiwxLjUtMWMxLTAuOCwwLTIuMywwLjQtMi43YzAuNC0wLjQsMS0xLjMsMS44LTEuMgoJCQkJYzAuMSwwLDAsMC4xLDAsMC4yYy0wLjEsMC4yLTAuMiwwLjMtMC4yLDAuNWMwLDAuNSwxLDAuMywxLDAuOGMwLDAuNCwwLjMsMS4zLDAuNSwxLjNzMC43LTAuNywxLjQtMC45bDAuMi0wLjFsMCwwCgkJCQljMC4xLDAsMC4yLTAuMSwwLjMtMC4xbDAsMGMwLjYsMCwxLjIsMC4xLDEuOCwwLjRjMC4zLDAuMiwwLjUsMC40LDAuNywwLjdjMC0wLjIsMC4yLTAuNiwwLjctMS4xQzQ0LjQsMzEuNiw0NC45LDI5LjgsNDQuNSwyOC45CgkJCQl6Ii8+CgkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMC42LDUyLjRjLTUuMywwLjEtMTAuNSwwLjYtMTUuOCwxLjNsLTAuMSwwLjZjNS40LTAuNywxMC44LTEuMSwxNi4zLTEuM2MwLDAtMC4xLTAuMS0wLjEtMC4xCgkJCQlDMjAuOCw1Mi43LDIwLjcsNTIuNSwyMC42LDUyLjR6Ii8+CgkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMy42LDQ2LjRoLTAuOWwtMC44LDBoLTAuOGMtNi4xLDAuMS0xNSwwLjgtMTkuMiwxLjR2MC4xdjAuMmwtMC4xLDAuM2M0LjEtMC42LDEzLjItMS4zLDE5LjMtMS40SDIybDEuMiwwCgkJCQljMC4xLTAuMSwwLjItMC4yLDAuMy0wLjRsMCwwTDIzLjYsNDYuNEwyMy42LDQ2LjR6Ii8+CgkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNC4zLDU0LjVjLTAuNS0wLjItMC4zLDAuMy0wLjMsMC43YzAsMC40LTAuMiwwLjMtMC4zLDAuN2MtMC4xLDAuMy0wLjIsMC43LTAuMSwwLjlzMC4yLDAuMiwwLjUtMC4xCgkJCQljMC4zLTAuMywwLjMtMC4zLDAuNy0wLjNzMC42LTAuMSwwLjYtMC42QzI1LjIsNTUuMSwyNC44LDU0LjcsMjQuMyw1NC41eiIvPgoKCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF81XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxMy45ODAyIiB5MT0iNjAuMzg1MyIgeDI9IjMwLjQ0MDkiIHkyPSIzMC4wNzgzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgNzIpIj4KCQkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGRkY7c3RvcC1vcGFjaXR5OjAuOSIvPgoJCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0ZGRkZGRjtzdG9wLW9wYWNpdHk6MC4xIi8+CgkJCTwvbGluZWFyR3JhZGllbnQ+CgkJCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik03LjUsNDcuM2gwLjRjMC43LTIuNywxLjMtNS4zLDIuMS03LjdjMS45LTAuMSw0LjItMC4yLDYuNi0wLjNjLTAuNywyLjQtMS40LDQuOS0yLjEsNy42SDE1CgkJCQljMC43LTIuNywxLjMtNS4yLDIuMS03LjVjMi4xLTAuMSw0LjMtMC4yLDYuNi0wLjJjLTAuNywyLjQtMS40LDQuOS0yLjEsNy41aDAuMkgyMmMwLjYtMi42LDEuMy01LjEsMi4xLTcuNWMyLjIsMCw0LjQsMCw2LjYsMAoJCQkJYy0wLjIsMC42LTAuNCwxLjItMC41LDEuOGMwLjEtMC4xLDAuMi0wLjIsMC40LTAuM2wwLjItMC4yYzAuMS0wLjUsMC4zLTAuOSwwLjQtMS40aDAuOWMwLjEtMC4xLDAuMi0wLjMsMC4zLTAuNGgtMS4xCgkJCQljMC43LTIuNCwxLjUtNC43LDIuMy02LjlsMi4xLDBjMC4xLTAuMSwwLjItMC4yLDAuNC0wLjRjLTAuNywwLTEuNSwwLTIuMy0wLjFjMC45LTIuNSwxLjgtNC43LDIuNy02LjljMS44LDAsMy42LDAuMSw1LjQsMC4yCgkJCQljMC4yLTAuMSwwLjQtMC4yLDAuNS0wLjNjMC4xLDAsMC4xLTAuMSwwLjItMC4xYy0xLjktMC4xLTMuOS0wLjItNS45LTAuMmMxLjEtMi41LDIuMi00LjgsMy4yLTYuOWMxLDAsMi4xLDAsMy4xLDAuMWwtMC4xLTAuMgoJCQkJTDQyLjcsMTdjLTAuOSwwLTEuOC0wLjEtMi43LTAuMWMwLjQtMC44LDAuOC0xLjUsMS4yLTIuM2MtMC4xLTAuMS0wLjEtMC4xLTAuMS0wLjJMNDEsMTQuM2MtMC41LDAuOC0wLjksMS43LTEuNCwyLjYKCQkJCWMtMi4yLDAtNC40LDAtNi42LDBjMS40LTIuNywyLjctNSw0LTYuOWgxLjVjMCwwLDAtMC4xLDAtMC4xYzAtMC4xLDAtMC4yLTAuMS0wLjNoLTEuMmMwLjItMC40LDAuNS0wLjcsMC43LTEKCQkJCWMtMC4xLTAuMS0wLjItMC4yLTAuMi0wLjRjLTAuMywwLjQtMC42LDAuOS0wLjksMS40Yy0yLjMsMC00LjUsMC4xLTYuNSwwLjJjMS4yLTEuOSwyLjYtMy43LDQuMS01LjRoLTAuNQoJCQkJYy0xLjUsMS43LTIuOCwzLjUtNCw1LjRjLTIuNCwwLjEtNC42LDAuMi02LjUsMC4zYzEuMi0xLjksMi42LTMuNyw0LjEtNS41bC0wLjYsMGMtMS41LDEuNy0yLjgsMy41LTQsNS40CgkJCQljLTMsMC4yLTUuMSwwLjMtNS45LDAuNGMtMC4xLDAuMS0wLjIsMC4zLTAuMywwLjRjMC40LDAsMi42LTAuMiw1LjktMC40Yy0xLjIsMS44LTIuNSw0LjEtNCw2LjljLTMsMC4yLTUuMSwwLjQtNS45LDAuNAoJCQkJbC0wLjIsMC40YzAuNSwwLDIuNy0wLjIsNS45LTAuNGMtMS4xLDItMi4xLDQuMy0zLjIsNi44Yy0yLjgsMC4yLTQuOSwwLjMtNS44LDAuNGwtMC4yLDAuNGMwLjctMC4xLDIuOS0wLjIsNS44LTAuNAoJCQkJYy0wLjksMi4xLTEuOCw0LjQtMi43LDYuOWMtMi45LDAuMi01LDAuNC01LjcsMC40bC0wLjEsMC40YzAuNSwwLDIuNi0wLjIsNS43LTAuNGMtMC44LDIuMS0xLjUsNC40LTIuMyw2LjkKCQkJCWMtMi45LDAuMi01LDAuMy01LjcsMC40QzQsMzkuNyw0LDM5LjksNCw0MGMwLjUsMCwyLjYtMC4yLDUuNy0wLjRDOC45LDQyLDguMiw0NC41LDcuNSw0Ny4zeiBNMjMuOCwzOC41Yy0yLjMsMC00LjUsMC4xLTYuNiwwLjIKCQkJCWMwLjctMi40LDEuNS00LjcsMi4zLTYuOWMyLjEtMC4xLDQuMy0wLjIsNi42LTAuMkMyNS4zLDMzLjksMjQuNiwzNi4xLDIzLjgsMzguNXogTTI4LjksMjQuNWMtMC45LDIuMS0xLjgsNC40LTIuNyw2LjkKCQkJCWMtMi4zLDAtNC41LDAuMS02LjYsMC4yYzAuOS0yLjUsMS44LTQuNywyLjctNi45QzI0LjQsMjQuNiwyNi42LDI0LjUsMjguOSwyNC41eiBNMjIuNSwyNC4yYzEuMS0yLjUsMi4yLTQuOCwzLjMtNi45CgkJCQljMi4xLTAuMSw0LjMtMC4yLDYuNi0wLjJjLTEsMi4xLTIuMSw0LjMtMy4yLDYuOUMyNi44LDI0LjEsMjQuNiwyNC4yLDIyLjUsMjQuMnogTTMwLjksMzguNWMtMi4yLDAtNC40LDAtNi42LDAKCQkJCWMwLjctMi40LDEuNS00LjcsMi4zLTYuOWMyLjIsMCw0LjQsMCw2LjYsMEMzMi40LDMzLjgsMzEuNiwzNi4xLDMwLjksMzguNXogTTMzLjMsMzEuM2MtMi4yLDAtNC40LDAtNi42LDAKCQkJCWMwLjktMi41LDEuOC00LjcsMi43LTYuOWMyLjIsMCw0LjQsMCw2LjYsMEMzNS4xLDI2LjYsMzQuMiwyOC44LDMzLjMsMzEuM3ogTTM5LjQsMTcuMmMtMSwyLjEtMi4xLDQuMy0zLjIsNi45CgkJCQljLTIuMiwwLTQuNCwwLTYuNiwwYzEuMS0yLjUsMi4yLTQuOCwzLjItNi45QzM0LjksMTcuMiwzNy4yLDE3LjIsMzkuNCwxNy4yTDM5LjQsMTcuMnogTTI5LjksMTAuMmMyLjEtMC4xLDQuMy0wLjIsNi41LTAuMgoJCQkJYy0xLjIsMS45LTIuNSw0LjEtMy45LDYuOWMtMi4zLDAtNC41LDAuMS02LjYsMC4yQzI3LjQsMTQuMywyOC43LDEyLDI5LjksMTAuMnogTTIyLjksMTAuNWMxLjktMC4xLDQuMS0wLjIsNi42LTAuMwoJCQkJYy0xLjIsMS44LTIuNSw0LjEtNCw2LjljLTIuNCwwLjEtNC43LDAuMi02LjYsMC4zQzIwLjMsMTQuNiwyMS43LDEyLjQsMjIuOSwxMC41eiBNMTguNywxNy44YzEuOS0wLjEsNC4yLTAuMiw2LjYtMC4zCgkJCQljLTEsMi4xLTIuMSw0LjMtMy4yLDYuOWMtMi40LDAuMS00LjcsMC4yLTYuNiwwLjNDMTYuNSwyMi4xLDE3LjYsMTkuOCwxOC43LDE3Ljh6IE0xNS4zLDI1YzEuOS0wLjEsNC4yLTAuMiw2LjYtMC4zCgkJCQljLTAuOSwyLjEtMS44LDQuNC0yLjcsNi45Yy0yLjUsMC4xLTQuNywwLjItNi42LDAuM0MxMy40LDI5LjQsMTQuNCwyNy4xLDE1LjMsMjV6IE0xMi40LDMyLjNjMS45LTAuMSw0LjItMC4yLDYuNi0wLjMKCQkJCWMtMC44LDIuMS0xLjUsNC40LTIuMiw2LjhjLTIuNSwwLjEtNC43LDAuMi02LjYsMC4zQzEwLjksMzYuNywxMS42LDM0LjQsMTIuNCwzMi4zeiIvPgoKCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF82XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIzOS4yOTMxIiB5MT0iNDMuMjE1NiIgeDI9IjQxLjc5MDYiIHkyPSIzOC42MDQ3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgNzIpIj4KCQkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkY3OTk7c3RvcC1vcGFjaXR5OjAuOSIvPgoJCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0ZGRjhBMztzdG9wLW9wYWNpdHk6MC4xIi8+CgkJCTwvbGluZWFyR3JhZGllbnQ+CgkJCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik00MC43LDMxLjZjMC41LTEuNCwxLTIuNywxLjUtNGMtMC4xLTAuMS0wLjItMC4yLTAuMy0wLjJjLTAuNSwxLjQtMS4xLDIuNy0xLjYsNC4yYy0xLTAuMS0yLjEtMC4xLTMuMi0wLjIKCQkJCWMwLDAuMywwLjMsMC4zLDAuNiwwLjRjMC44LDAsMS42LDAuMSwyLjQsMC4xTDQwLDMyLjZINDBjMC4xLTAuMSwwLjMtMC4xLDAuNC0wLjFsMC4yLTAuNGMxLjEsMC4xLDIuMiwwLjIsMy4yLDAuMwoJCQkJYzAuMS0wLjEsMC4yLTAuMiwwLjItMC40QzQzLDMxLjgsNDEuOSwzMS43LDQwLjcsMzEuNnoiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPC9zdmc+';
|
|
25229
25128
|
|
|
@@ -25234,15 +25133,15 @@ var motif = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id
|
|
|
25234
25133
|
*
|
|
25235
25134
|
* @param onEscape the handler function
|
|
25236
25135
|
*/
|
|
25237
|
-
|
|
25238
|
-
|
|
25136
|
+
const useEscapeFunction = (onEscape) => {
|
|
25137
|
+
const escFunction = useCallback((event) => {
|
|
25239
25138
|
if (event.keyCode === 27) {
|
|
25240
25139
|
onEscape();
|
|
25241
25140
|
}
|
|
25242
25141
|
}, [onEscape]);
|
|
25243
|
-
useEffect(
|
|
25142
|
+
useEffect(() => {
|
|
25244
25143
|
document.addEventListener('keydown', escFunction, false);
|
|
25245
|
-
return
|
|
25144
|
+
return () => {
|
|
25246
25145
|
document.removeEventListener('keydown', escFunction, false);
|
|
25247
25146
|
};
|
|
25248
25147
|
}, [escFunction]);
|
|
@@ -25255,14 +25154,13 @@ var useEscapeFunction = function (onEscape) {
|
|
|
25255
25154
|
* @param onClickOutsideArg handler for mouse clicks outside the element
|
|
25256
25155
|
* @return a react ref which can be bound to an html element
|
|
25257
25156
|
*/
|
|
25258
|
-
|
|
25259
|
-
|
|
25260
|
-
|
|
25261
|
-
|
|
25262
|
-
useEffect(
|
|
25263
|
-
|
|
25264
|
-
|
|
25265
|
-
if ((_a = elementRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) {
|
|
25157
|
+
const usePageClickFunction = (onClickInsideArg, onClickOutsideArg) => {
|
|
25158
|
+
const elementRef = useRef(null);
|
|
25159
|
+
const onClickInside = useCallback(onClickInsideArg, []);
|
|
25160
|
+
const onClickOutside = useCallback(onClickOutsideArg, []);
|
|
25161
|
+
useEffect(() => {
|
|
25162
|
+
const handleClick = (e) => {
|
|
25163
|
+
if (elementRef.current?.contains(e.target)) {
|
|
25266
25164
|
onClickInside(e);
|
|
25267
25165
|
}
|
|
25268
25166
|
else {
|
|
@@ -25272,18 +25170,17 @@ var usePageClickFunction = function (onClickInsideArg, onClickOutsideArg) {
|
|
|
25272
25170
|
// add when mounted
|
|
25273
25171
|
document.addEventListener('click', handleClick);
|
|
25274
25172
|
// return function to be called when unmounted
|
|
25275
|
-
return
|
|
25173
|
+
return () => {
|
|
25276
25174
|
document.removeEventListener('click', handleClick);
|
|
25277
25175
|
};
|
|
25278
25176
|
}, [elementRef, onClickInside, onClickOutside]);
|
|
25279
25177
|
return elementRef;
|
|
25280
25178
|
};
|
|
25281
25179
|
|
|
25282
|
-
|
|
25283
|
-
|
|
25284
|
-
|
|
25285
|
-
|
|
25286
|
-
var idx = sizes.indexOf(size);
|
|
25180
|
+
const sizes = ['xs', 'sm', 'md', 'lg', 'xl'];
|
|
25181
|
+
const buildHideClassDict = ({ from = 'xs', upto = 'xl', }) => {
|
|
25182
|
+
const inRange = (size) => {
|
|
25183
|
+
const idx = sizes.indexOf(size);
|
|
25287
25184
|
return idx >= sizes.indexOf(from) && idx <= sizes.indexOf(upto);
|
|
25288
25185
|
};
|
|
25289
25186
|
return {
|
|
@@ -25291,19 +25188,18 @@ var buildHideClassDict = function (_a) {
|
|
|
25291
25188
|
'lui-hide-sm': inRange('sm'),
|
|
25292
25189
|
'lui-hide-md': inRange('md'),
|
|
25293
25190
|
'lui-hide-lg': inRange('lg'),
|
|
25294
|
-
'lui-hide-xl': inRange('xl')
|
|
25191
|
+
'lui-hide-xl': inRange('xl'),
|
|
25295
25192
|
};
|
|
25296
25193
|
};
|
|
25297
25194
|
|
|
25298
|
-
|
|
25299
|
-
|
|
25300
|
-
|
|
25301
|
-
var logoContainer = logoElement;
|
|
25195
|
+
const LuiHeader = ({ headingText, size = 'small', homeLink, transparent, children, sticky = true, }) => {
|
|
25196
|
+
const logoElement = size === 'normal' ? (React__default.createElement("img", { className: "linz-logo", alt: "LINZ Logo", src: logo })) : (React__default.createElement("img", { className: "linz-motif", alt: "LINZ Logo", src: motif }));
|
|
25197
|
+
let logoContainer = logoElement;
|
|
25302
25198
|
if (typeof homeLink === 'string') {
|
|
25303
25199
|
logoContainer = React__default.createElement("a", { href: homeLink }, logoElement);
|
|
25304
25200
|
}
|
|
25305
25201
|
else if (typeof homeLink === 'function') {
|
|
25306
|
-
logoContainer = (React__default.createElement("div", { className: "clickable", onClick:
|
|
25202
|
+
logoContainer = (React__default.createElement("div", { className: "clickable", onClick: () => {
|
|
25307
25203
|
homeLink();
|
|
25308
25204
|
} }, logoElement));
|
|
25309
25205
|
}
|
|
@@ -25311,7 +25207,7 @@ var LuiHeader = function (_a) {
|
|
|
25311
25207
|
'lui-header': true,
|
|
25312
25208
|
'lui-header-transparent': transparent,
|
|
25313
25209
|
'lui-header-small': size === 'small',
|
|
25314
|
-
'lui-header-sticky': sticky
|
|
25210
|
+
'lui-header-sticky': sticky,
|
|
25315
25211
|
}) },
|
|
25316
25212
|
React__default.createElement("div", { className: "lui-header-row" },
|
|
25317
25213
|
React__default.createElement("div", { className: "lui-header-col" },
|
|
@@ -25325,10 +25221,9 @@ var LuiHeader = function (_a) {
|
|
|
25325
25221
|
* Note that it depends on it being rendered inside a LuiHeader for its styles to apply properly.
|
|
25326
25222
|
* To configure the item for responsiveness, ensure to set any of the hideOn* properties.
|
|
25327
25223
|
*/
|
|
25328
|
-
|
|
25329
|
-
|
|
25330
|
-
|
|
25331
|
-
var resolvedIcon = !icon && !label ? 'menu' : icon;
|
|
25224
|
+
const LuiHeaderMenuItem = forwardRef(({ icon, label, badge, hide, onClick, 'data-testid': dataTestId = 'menu-item', children, }, ref) => {
|
|
25225
|
+
const menuItemClasses = clsx('lui-header-menu-item', hide && buildHideClassDict(hide));
|
|
25226
|
+
const resolvedIcon = !icon && !label ? 'menu' : icon;
|
|
25332
25227
|
return (React__default.createElement("div", { className: menuItemClasses, ref: ref },
|
|
25333
25228
|
React__default.createElement("div", { className: clsx('lui-header-menu-icon', onClick && 'clickable'), onClick: onClick, "data-testid": dataTestId },
|
|
25334
25229
|
resolvedIcon && (React__default.createElement("i", { title: "Main menu", className: "material-icons-round md-36" }, resolvedIcon)),
|
|
@@ -25336,44 +25231,38 @@ var LuiHeaderMenuItem = forwardRef(function (_a, ref) {
|
|
|
25336
25231
|
badge && React__default.createElement("div", { className: "badge" }, badge)),
|
|
25337
25232
|
children));
|
|
25338
25233
|
});
|
|
25339
|
-
|
|
25340
|
-
isOpen:
|
|
25341
|
-
open:
|
|
25342
|
-
close:
|
|
25234
|
+
const LuiCloseableHeaderMenuContext = createContext({
|
|
25235
|
+
isOpen: () => false,
|
|
25236
|
+
open: () => { },
|
|
25237
|
+
close: () => { },
|
|
25343
25238
|
});
|
|
25344
|
-
|
|
25345
|
-
|
|
25346
|
-
|
|
25347
|
-
var menuDiv = usePageClickFunction(function (event) { return open || event.stopPropagation(); }, function (event) {
|
|
25239
|
+
const LuiCloseableHeaderMenuItem = ({ open, setOpen, ...props }) => {
|
|
25240
|
+
useEscapeFunction(() => setOpen(false));
|
|
25241
|
+
const menuDiv = usePageClickFunction((event) => open || event.stopPropagation(), (event) => {
|
|
25348
25242
|
if (!open) {
|
|
25349
25243
|
event.stopPropagation();
|
|
25350
25244
|
setOpen(false);
|
|
25351
25245
|
}
|
|
25352
25246
|
});
|
|
25353
|
-
|
|
25354
|
-
isOpen:
|
|
25355
|
-
open:
|
|
25356
|
-
close:
|
|
25247
|
+
const menuControls = {
|
|
25248
|
+
isOpen: () => open,
|
|
25249
|
+
open: () => setOpen(true),
|
|
25250
|
+
close: () => setOpen(false),
|
|
25357
25251
|
};
|
|
25358
|
-
|
|
25252
|
+
const menuItemProps = { onClick: () => menuControls.open(), ...props };
|
|
25359
25253
|
return (React__default.createElement(LuiCloseableHeaderMenuContext.Provider, { value: menuControls },
|
|
25360
|
-
React__default.createElement(LuiHeaderMenuItem,
|
|
25254
|
+
React__default.createElement(LuiHeaderMenuItem, { ref: menuDiv, ...menuItemProps }, props.children)));
|
|
25361
25255
|
};
|
|
25362
|
-
|
|
25363
|
-
|
|
25364
|
-
|
|
25365
|
-
var classes = clsx('material-icons-round', 'lui-menu-close-button', hide && buildHideClassDict(hide));
|
|
25256
|
+
const LuiMenuCloseButton = ({ icon = 'close', hide, 'data-testid': dataTestId = 'close-button', }) => {
|
|
25257
|
+
const menu = useContext(LuiCloseableHeaderMenuContext);
|
|
25258
|
+
const classes = clsx('material-icons-round', 'lui-menu-close-button', hide && buildHideClassDict(hide));
|
|
25366
25259
|
return (React__default.createElement("i", { className: classes, onClick: menu.close, "data-testid": dataTestId }, icon));
|
|
25367
25260
|
};
|
|
25368
25261
|
|
|
25369
|
-
|
|
25370
|
-
|
|
25371
|
-
|
|
25372
|
-
|
|
25373
|
-
var LuiDrawerMenuOption = function (_a) {
|
|
25374
|
-
var icon = _a.icon, label = _a.label, badge = _a.badge, _b = _a.onClick, onClick = _b === void 0 ? function () { } : _b;
|
|
25375
|
-
var menu = useContext(LuiCloseableHeaderMenuContext);
|
|
25376
|
-
return (React__default.createElement("div", { className: "lui-menu-drawer-option", onClick: function () {
|
|
25262
|
+
const LuiDrawerMenuOptions = ({ children }) => (React__default.createElement("div", { className: "lui-menu-drawer-options" }, children));
|
|
25263
|
+
const LuiDrawerMenuOption = ({ icon, label, badge, onClick = () => { }, }) => {
|
|
25264
|
+
const menu = useContext(LuiCloseableHeaderMenuContext);
|
|
25265
|
+
return (React__default.createElement("div", { className: "lui-menu-drawer-option", onClick: () => {
|
|
25377
25266
|
menu.close();
|
|
25378
25267
|
onClick();
|
|
25379
25268
|
}, "data-testid": 'drawer-option' },
|
|
@@ -25382,12 +25271,17 @@ var LuiDrawerMenuOption = function (_a) {
|
|
|
25382
25271
|
label),
|
|
25383
25272
|
badge));
|
|
25384
25273
|
};
|
|
25385
|
-
|
|
25386
|
-
|
|
25387
|
-
|
|
25388
|
-
|
|
25389
|
-
|
|
25390
|
-
|
|
25274
|
+
const LuiDrawerMenu = ({ ...restOfProps }) => {
|
|
25275
|
+
const { children, hasStickyHeader = true, ...menuPropsCopy } = restOfProps;
|
|
25276
|
+
const [open, setOpen] = useState(false);
|
|
25277
|
+
const closeableMenuProps = {
|
|
25278
|
+
...menuPropsCopy,
|
|
25279
|
+
open,
|
|
25280
|
+
setOpen,
|
|
25281
|
+
icon: open ? 'close' : 'menu',
|
|
25282
|
+
onClick: () => setOpen(!open),
|
|
25283
|
+
};
|
|
25284
|
+
useEffect(() => {
|
|
25391
25285
|
// Support for non-sticky headers. Scroll back to top when menu is opened
|
|
25392
25286
|
if (open && !hasStickyHeader) {
|
|
25393
25287
|
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
@@ -25400,27 +25294,26 @@ var LuiDrawerMenu = function (_a) {
|
|
|
25400
25294
|
document.body.classList.remove('lui-menu-drawer-open');
|
|
25401
25295
|
}
|
|
25402
25296
|
}, [open, hasStickyHeader]);
|
|
25403
|
-
return (React__default.createElement(LuiCloseableHeaderMenuItem,
|
|
25297
|
+
return (React__default.createElement(LuiCloseableHeaderMenuItem, { ...closeableMenuProps },
|
|
25404
25298
|
React__default.createElement("div", { className: clsx({
|
|
25405
25299
|
'lui-menu-drawer': true,
|
|
25406
|
-
'lui-menu-drawer-closed': !open
|
|
25300
|
+
'lui-menu-drawer-closed': !open,
|
|
25407
25301
|
}), "data-testid": 'drawer', "aria-hidden": !open }, children)));
|
|
25408
25302
|
};
|
|
25409
|
-
|
|
25410
|
-
|
|
25411
|
-
|
|
25412
|
-
|
|
25413
|
-
|
|
25414
|
-
return (React__default.createElement(LuiCloseableHeaderMenuItem, __assign({}, closeableMenuProps),
|
|
25303
|
+
const LuiDropdownMenu = ({ ...restOfProps }) => {
|
|
25304
|
+
const { children, ...menuPropsCopy } = restOfProps;
|
|
25305
|
+
const [open, setOpen] = useState(false);
|
|
25306
|
+
const closeableMenuProps = { ...menuPropsCopy, open, setOpen };
|
|
25307
|
+
return (React__default.createElement(LuiCloseableHeaderMenuItem, { ...closeableMenuProps },
|
|
25415
25308
|
React__default.createElement("div", { className: clsx({
|
|
25416
25309
|
'lui-menu-dropdown lui-box-shadow': true,
|
|
25417
|
-
'lui-menu-dropdown-closed': !open
|
|
25310
|
+
'lui-menu-dropdown-closed': !open,
|
|
25418
25311
|
}), "data-testid": 'dropdown', "aria-hidden": !open },
|
|
25419
25312
|
children,
|
|
25420
25313
|
' ')));
|
|
25421
25314
|
};
|
|
25422
|
-
|
|
25423
|
-
|
|
25315
|
+
const LuiDrawerMenuSection = (props) => {
|
|
25316
|
+
const { children, title, collapsible } = props;
|
|
25424
25317
|
return (React__default.createElement("div", null,
|
|
25425
25318
|
collapsible && (React__default.createElement(LuiExpandableBanner, { label: title || '', className: "LuiDrawerMenuSection-header" }, children)),
|
|
25426
25319
|
!collapsible && (React__default.createElement(React__default.Fragment, null,
|
|
@@ -25429,7 +25322,7 @@ var LuiDrawerMenuSection = function (props) {
|
|
|
25429
25322
|
React__default.createElement("h3", null, title)))),
|
|
25430
25323
|
children))));
|
|
25431
25324
|
};
|
|
25432
|
-
|
|
25325
|
+
const LuiDrawerMenuDivider = () => {
|
|
25433
25326
|
return React__default.createElement("hr", { className: "LuiDrawerMenuDivider" });
|
|
25434
25327
|
};
|
|
25435
25328
|
|
|
@@ -27777,8 +27670,8 @@ function polyfill(Component) {
|
|
|
27777
27670
|
}
|
|
27778
27671
|
|
|
27779
27672
|
var reactLifecyclesCompat_es = /*#__PURE__*/Object.freeze({
|
|
27780
|
-
|
|
27781
|
-
|
|
27673
|
+
__proto__: null,
|
|
27674
|
+
polyfill: polyfill
|
|
27782
27675
|
});
|
|
27783
27676
|
|
|
27784
27677
|
var require$$6 = /*@__PURE__*/getAugmentedNamespace(reactLifecyclesCompat_es);
|
|
@@ -28071,30 +27964,29 @@ module.exports = exports["default"];
|
|
|
28071
27964
|
|
|
28072
27965
|
var Modal = /*@__PURE__*/getDefaultExportFromCjs(lib.exports);
|
|
28073
27966
|
|
|
28074
|
-
|
|
28075
|
-
|
|
28076
|
-
var node = useRef(null);
|
|
27967
|
+
const LuiUpdatesSplashModal = (props) => {
|
|
27968
|
+
const node = useRef(null);
|
|
28077
27969
|
// We have to do this as the CSS takes over a lot of the page
|
|
28078
27970
|
// https://medium.com/@pitipatdop/little-neat-trick-to-capture-click-outside-with-react-hook-ba77c37c7e82
|
|
28079
|
-
|
|
27971
|
+
const handleClickOutside = useCallback((e) => {
|
|
28080
27972
|
console.log('clicking anywhere');
|
|
28081
27973
|
// current DOES have a contains!
|
|
28082
|
-
if (
|
|
27974
|
+
if (node?.current && node.current.contains(e.target)) {
|
|
28083
27975
|
// inside click
|
|
28084
27976
|
return;
|
|
28085
27977
|
}
|
|
28086
27978
|
// outside click
|
|
28087
27979
|
props.onClose();
|
|
28088
27980
|
}, [props]);
|
|
28089
|
-
useEffect(
|
|
27981
|
+
useEffect(() => {
|
|
28090
27982
|
document.addEventListener('mousedown', handleClickOutside);
|
|
28091
|
-
return
|
|
27983
|
+
return () => {
|
|
28092
27984
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
28093
27985
|
};
|
|
28094
27986
|
}, [handleClickOutside]);
|
|
28095
27987
|
// process may be undefined, e.g. webpack 5 does not include a polyfill for it. Assume if process is undefined then
|
|
28096
27988
|
// this isn't running in a test.
|
|
28097
|
-
if (typeof process === 'undefined' ||
|
|
27989
|
+
if (typeof process === 'undefined' || process?.env?.NODE_ENV !== 'test') {
|
|
28098
27990
|
Modal.setAppElement('#root');
|
|
28099
27991
|
}
|
|
28100
27992
|
return (React__default.createElement(Modal, { key: props.id, isOpen: true, shouldCloseOnOverlayClick: true, onRequestClose: props.onClose, contentLabel: "Recent updates", className: "lui-scrim", style: { overlay: { backgroundColor: 'transparent' } } },
|
|
@@ -28108,12 +28000,11 @@ var LuiUpdatesSplashModal = function (props) {
|
|
|
28108
28000
|
React__default.createElement("div", { className: 'lui-feature-text' }, props.children))));
|
|
28109
28001
|
};
|
|
28110
28002
|
|
|
28111
|
-
|
|
28112
|
-
|
|
28113
|
-
|
|
28114
|
-
var handleClickOutside = useCallback(function (e) {
|
|
28003
|
+
const LuiModal = (props) => {
|
|
28004
|
+
const node = useRef(null);
|
|
28005
|
+
const handleClickOutside = useCallback((e) => {
|
|
28115
28006
|
// current DOES have a contains!
|
|
28116
|
-
if (
|
|
28007
|
+
if (node?.current && node.current.contains(e.target)) {
|
|
28117
28008
|
// inside click
|
|
28118
28009
|
return;
|
|
28119
28010
|
}
|
|
@@ -28122,37 +28013,37 @@ var LuiModal = function (props) {
|
|
|
28122
28013
|
props.onClose && props.onClose();
|
|
28123
28014
|
}
|
|
28124
28015
|
}, [props]);
|
|
28125
|
-
useEffect(
|
|
28016
|
+
useEffect(() => {
|
|
28126
28017
|
document.addEventListener('mousedown', handleClickOutside);
|
|
28127
|
-
return
|
|
28018
|
+
return () => {
|
|
28128
28019
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
28129
28020
|
};
|
|
28130
28021
|
}, [handleClickOutside]);
|
|
28131
|
-
|
|
28022
|
+
let isTest = false;
|
|
28132
28023
|
// this is here for the tests
|
|
28133
28024
|
if (typeof process !== 'undefined') {
|
|
28134
|
-
isTest =
|
|
28025
|
+
isTest = process?.env?.NODE_ENV === 'test';
|
|
28135
28026
|
if (!isTest) {
|
|
28136
28027
|
Modal.setAppElement('#root');
|
|
28137
28028
|
}
|
|
28138
28029
|
}
|
|
28139
|
-
return (React__default.createElement(Modal,
|
|
28140
|
-
|
|
28141
|
-
|
|
28030
|
+
return (React__default.createElement(Modal, { key: props.key, isOpen: true, shouldCloseOnOverlayClick: props.shouldCloseOnOverlayClick, onRequestClose: props.onClose, overlayClassName: "modal", className: props.lowContrast ? 'lui-scrim-low-contrast' : 'lui-scrim', ariaHideApp: !isTest, ...(props.appendToElement && {
|
|
28031
|
+
parentSelector: props.appendToElement,
|
|
28032
|
+
}) },
|
|
28142
28033
|
React__default.createElement("div", { ref: node, className: clsx('lui-modal lui-box-shadow', props.maxWidth && 'lui-max-width', props.headingText && 'lui-modal-no-padding', props.className) },
|
|
28143
28034
|
props.headingText && (React__default.createElement(LuiModalHeader, { headingText: props.headingText, onClose: props.onClose })),
|
|
28144
28035
|
React__default.createElement("div", { className: clsx(props.headingText && 'lui-modal-container') }, props.children))));
|
|
28145
28036
|
};
|
|
28146
|
-
|
|
28147
|
-
|
|
28148
|
-
return (React__default.createElement(LuiModal, { key: props.key, shouldCloseOnOverlayClick: props.shouldCloseOnOverlayClick, onClose: props.onClose, className: clsx(
|
|
28149
|
-
React__default.createElement(LuiIcon, { name:
|
|
28037
|
+
const LuiAlertModal = (props) => {
|
|
28038
|
+
let materialIcon = getMaterialIconForLevel(props.level);
|
|
28039
|
+
return (React__default.createElement(LuiModal, { key: props.key, shouldCloseOnOverlayClick: props.shouldCloseOnOverlayClick, onClose: props.onClose, className: clsx(`lui-modal-${props.level}`, props.className), appendToElement: props.appendToElement },
|
|
28040
|
+
React__default.createElement(LuiIcon, { name: `ic_${materialIcon}`, alt: `${props.level} status icon`, size: "lg", className: "lui-msg-status-icon" }),
|
|
28150
28041
|
props.children));
|
|
28151
28042
|
};
|
|
28152
|
-
|
|
28043
|
+
const LuiAlertModalButtons = (props) => {
|
|
28153
28044
|
return React__default.createElement("div", { className: "modal-btn-row" }, props.children);
|
|
28154
28045
|
};
|
|
28155
|
-
|
|
28046
|
+
const LuiModalHeader = (props) => {
|
|
28156
28047
|
return (React__default.createElement("header", { className: "lui-modal-header" }, props.headingText && (React__default.createElement("div", { className: "lui-modal-header-title" },
|
|
28157
28048
|
React__default.createElement("h1", null, props.headingText),
|
|
28158
28049
|
props.onClose && (React__default.createElement("button", { className: "lui-modal-header-close-btn", onClick: props.onClose },
|
|
@@ -28253,18 +28144,17 @@ function Skeleton({ count = 1, wrapper: Wrapper, className: customClassName, con
|
|
|
28253
28144
|
: elements));
|
|
28254
28145
|
}
|
|
28255
28146
|
|
|
28256
|
-
|
|
28257
|
-
|
|
28258
|
-
|
|
28259
|
-
|
|
28260
|
-
|
|
28261
|
-
return (React__default.createElement("div", { className: clsx('LuiSearchInput-resultEntry', isSelected && 'selected'), key: result.id, ref: isSelected ? selectedRef : null, onClick: function () { return onClick(result.id); }, onMouseEnter: function () { return setSelectedId(result.id); } }, renderItem(result)));
|
|
28147
|
+
const SKELETON_COUNT = 3;
|
|
28148
|
+
const ResultsDisplay = ({ isLoading, onClick, children, selectedId, selectedRef, setSelectedId, results, renderItem, }) => {
|
|
28149
|
+
const ResultLine = (result) => {
|
|
28150
|
+
const isSelected = result.id === selectedId;
|
|
28151
|
+
return (React__default.createElement("div", { className: clsx('LuiSearchInput-resultEntry', isSelected && 'selected'), key: result.id, ref: isSelected ? selectedRef : null, onClick: () => onClick(result.id), onMouseEnter: () => setSelectedId(result.id) }, renderItem(result)));
|
|
28262
28152
|
};
|
|
28263
|
-
|
|
28153
|
+
const GroupedResult = (result) => {
|
|
28264
28154
|
return (React__default.createElement("div", null,
|
|
28265
28155
|
React__default.createElement("div", { className: "LuiSearchInput-resultHeader" }, result.label),
|
|
28266
|
-
result.items.map(
|
|
28267
|
-
return React__default.createElement(ResultLine,
|
|
28156
|
+
result.items.map((item) => {
|
|
28157
|
+
return React__default.createElement(ResultLine, { key: item.id, ...item });
|
|
28268
28158
|
})));
|
|
28269
28159
|
};
|
|
28270
28160
|
return (React__default.createElement("div", { className: "LuiSearchInput-results" },
|
|
@@ -28272,15 +28162,15 @@ var ResultsDisplay = function (_a) {
|
|
|
28272
28162
|
React__default.createElement(Skeleton, { className: "LuiSearchInput-skeletonItem", count: SKELETON_COUNT }))),
|
|
28273
28163
|
!isLoading &&
|
|
28274
28164
|
isGroupedResult(results) &&
|
|
28275
|
-
results.map(
|
|
28165
|
+
results.map((result, index) => {
|
|
28276
28166
|
return (React__default.createElement(React__default.Fragment, null,
|
|
28277
|
-
React__default.createElement(GroupedResult,
|
|
28167
|
+
React__default.createElement(GroupedResult, { key: result.id, ...result }),
|
|
28278
28168
|
index !== results.length - 1 && (React__default.createElement("hr", { className: "LuiSearchInput-groupSeparator" }))));
|
|
28279
28169
|
}),
|
|
28280
28170
|
!isLoading &&
|
|
28281
28171
|
!isGroupedResult(results) &&
|
|
28282
|
-
results.map(
|
|
28283
|
-
return React__default.createElement(ResultLine,
|
|
28172
|
+
results.map((result) => {
|
|
28173
|
+
return React__default.createElement(ResultLine, { key: result.id, ...result });
|
|
28284
28174
|
}),
|
|
28285
28175
|
children));
|
|
28286
28176
|
};
|
|
@@ -28293,36 +28183,34 @@ function isGroupedResult(result) {
|
|
|
28293
28183
|
}
|
|
28294
28184
|
function flatten(items) {
|
|
28295
28185
|
if (isGroupedResult(items)) {
|
|
28296
|
-
return items.flatMap(
|
|
28186
|
+
return items.flatMap((item) => item.items);
|
|
28297
28187
|
}
|
|
28298
28188
|
return items;
|
|
28299
28189
|
}
|
|
28300
|
-
|
|
28301
|
-
|
|
28302
|
-
|
|
28303
|
-
|
|
28304
|
-
|
|
28305
|
-
|
|
28306
|
-
|
|
28307
|
-
|
|
28190
|
+
const LuiSearchInput = (props) => {
|
|
28191
|
+
const [typedValue, setTypedValue] = useState(props.initialValue ? props.initialValue : '');
|
|
28192
|
+
const [results, setResults] = useState([]);
|
|
28193
|
+
const [selectedId, setSelectedId] = useState('');
|
|
28194
|
+
const [haveFocus, setHaveFocus] = useState(false);
|
|
28195
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
28196
|
+
const inputRef = useRef(null);
|
|
28197
|
+
const selectedRef = useRef(null);
|
|
28308
28198
|
//set focus to inut box
|
|
28309
|
-
useEffect(
|
|
28310
|
-
var _a;
|
|
28199
|
+
useEffect(() => {
|
|
28311
28200
|
if (props.focusUpdate !== undefined)
|
|
28312
|
-
|
|
28201
|
+
inputRef.current?.focus();
|
|
28313
28202
|
}, [props.focusUpdate]);
|
|
28314
28203
|
//clear result after search types changed
|
|
28315
|
-
useEffect(
|
|
28204
|
+
useEffect(() => {
|
|
28316
28205
|
setResults([]);
|
|
28317
28206
|
}, [props.getOptions]);
|
|
28318
28207
|
function setInputValue(value) {
|
|
28319
28208
|
setTypedValue(props.inputTransformer ? props.inputTransformer(value) : value);
|
|
28320
28209
|
}
|
|
28321
28210
|
function moveDown() {
|
|
28322
|
-
|
|
28323
|
-
|
|
28324
|
-
for (
|
|
28325
|
-
var item = items_1[_i];
|
|
28211
|
+
const items = flatten(results);
|
|
28212
|
+
let takeNext = selectedId === '';
|
|
28213
|
+
for (const item of items) {
|
|
28326
28214
|
if (item.id === selectedId) {
|
|
28327
28215
|
takeNext = true;
|
|
28328
28216
|
}
|
|
@@ -28334,10 +28222,9 @@ var LuiSearchInput = function (props) {
|
|
|
28334
28222
|
return;
|
|
28335
28223
|
}
|
|
28336
28224
|
function moveUp() {
|
|
28337
|
-
|
|
28338
|
-
|
|
28339
|
-
for (
|
|
28340
|
-
var item = _a[_i];
|
|
28225
|
+
const items = flatten(results);
|
|
28226
|
+
let takeNext = false;
|
|
28227
|
+
for (const item of [...items].reverse()) {
|
|
28341
28228
|
if (item.id === selectedId) {
|
|
28342
28229
|
takeNext = true;
|
|
28343
28230
|
}
|
|
@@ -28349,42 +28236,30 @@ var LuiSearchInput = function (props) {
|
|
|
28349
28236
|
return;
|
|
28350
28237
|
}
|
|
28351
28238
|
function selectItem(itemId) {
|
|
28352
|
-
|
|
28353
|
-
|
|
28239
|
+
const id = itemId ? itemId : selectedId;
|
|
28240
|
+
const selectedItem = flatten(results).find((item) => item.id === id);
|
|
28354
28241
|
if (selectedItem) {
|
|
28355
28242
|
setHaveFocus(false);
|
|
28356
28243
|
setInputValue(selectedItem.description);
|
|
28357
28244
|
props.onSelectOption(selectedItem);
|
|
28358
28245
|
}
|
|
28359
28246
|
}
|
|
28360
|
-
function retrieveResults(input) {
|
|
28361
|
-
|
|
28362
|
-
|
|
28363
|
-
|
|
28364
|
-
|
|
28365
|
-
|
|
28366
|
-
|
|
28367
|
-
|
|
28368
|
-
|
|
28369
|
-
|
|
28370
|
-
_a.trys.push([1, , 3, 4]);
|
|
28371
|
-
return [4 /*yield*/, props.getOptions(input)];
|
|
28372
|
-
case 2:
|
|
28373
|
-
results_1 = _a.sent();
|
|
28374
|
-
items = flatten(results_1);
|
|
28375
|
-
setResults(results_1);
|
|
28376
|
-
selectedIdInResults = items.some(function (item) { return item.id === selectedId; });
|
|
28377
|
-
if (!selectedIdInResults) {
|
|
28378
|
-
setSelectedId(items.length ? items[0].id : '');
|
|
28379
|
-
}
|
|
28380
|
-
return [3 /*break*/, 4];
|
|
28381
|
-
case 3:
|
|
28382
|
-
setIsLoading(false);
|
|
28383
|
-
return [7 /*endfinally*/];
|
|
28384
|
-
case 4: return [2 /*return*/];
|
|
28247
|
+
async function retrieveResults(input) {
|
|
28248
|
+
if (input !== '' && input.length >= props.minCharactersForSearch) {
|
|
28249
|
+
setIsLoading(true);
|
|
28250
|
+
try {
|
|
28251
|
+
const results = await props.getOptions(input);
|
|
28252
|
+
const items = flatten(results);
|
|
28253
|
+
setResults(results);
|
|
28254
|
+
const selectedIdInResults = items.some((item) => item.id === selectedId);
|
|
28255
|
+
if (!selectedIdInResults) {
|
|
28256
|
+
setSelectedId(items.length ? items[0].id : '');
|
|
28385
28257
|
}
|
|
28386
|
-
}
|
|
28387
|
-
|
|
28258
|
+
}
|
|
28259
|
+
finally {
|
|
28260
|
+
setIsLoading(false);
|
|
28261
|
+
}
|
|
28262
|
+
}
|
|
28388
28263
|
}
|
|
28389
28264
|
function handleKeyDown(event) {
|
|
28390
28265
|
switch (event.key) {
|
|
@@ -28407,19 +28282,19 @@ var LuiSearchInput = function (props) {
|
|
|
28407
28282
|
}
|
|
28408
28283
|
function scrollToViewSelected(topOfView) {
|
|
28409
28284
|
// Wait for ref to update before scrolling to it
|
|
28410
|
-
setTimeout(
|
|
28285
|
+
setTimeout(() => selectedRef.current?.scrollIntoView(topOfView), 0);
|
|
28411
28286
|
}
|
|
28412
|
-
useEffect(
|
|
28287
|
+
useEffect(() => {
|
|
28413
28288
|
retrieveResults(typedValue);
|
|
28414
28289
|
}, [typedValue]);
|
|
28415
|
-
|
|
28416
|
-
onClick:
|
|
28290
|
+
const cancelIcon = typedValue !== '' ? (React__default.createElement(LuiIcon, { alt: "clear", name: "ic_cancel_clear", size: "md", className: 'LuiSearchInput-iconPosition', spanProps: {
|
|
28291
|
+
onClick: () => {
|
|
28417
28292
|
setInputValue('');
|
|
28418
28293
|
setResults([]);
|
|
28419
|
-
}
|
|
28294
|
+
},
|
|
28420
28295
|
} })) : null;
|
|
28421
|
-
|
|
28422
|
-
|
|
28296
|
+
const searchIcon = (React__default.createElement(LuiIcon, { className: 'LuiSearchInput-startIconPosition', name: "ic_search", size: "md", alt: "search", spanProps: { onClick: () => inputRef.current?.focus() } }));
|
|
28297
|
+
const typeMore = 'You need to type a few more characters';
|
|
28423
28298
|
function enoughChars(input) {
|
|
28424
28299
|
if (typeof props.minCharactersForSearch === 'number')
|
|
28425
28300
|
return input.length >= props.minCharactersForSearch;
|
|
@@ -28434,20 +28309,20 @@ var LuiSearchInput = function (props) {
|
|
|
28434
28309
|
return typeMore;
|
|
28435
28310
|
}
|
|
28436
28311
|
if (props.name)
|
|
28437
|
-
return
|
|
28312
|
+
return `The ${props.name} could not be displayed or does not exist.`;
|
|
28438
28313
|
else
|
|
28439
28314
|
return null;
|
|
28440
28315
|
}
|
|
28441
28316
|
return (React__default.createElement("div", { className: "LuiSearchInput" },
|
|
28442
28317
|
React__default.createElement("span", { className: "LuiSearchInput-inputWrapper" },
|
|
28443
28318
|
searchIcon,
|
|
28444
|
-
React__default.createElement("input", { type: "text", className: clsx('LuiSearchInput-input'), ref: inputRef, value: typedValue, placeholder: props.placeholderText, "aria-label": "Search", onChange:
|
|
28319
|
+
React__default.createElement("input", { type: "text", className: clsx('LuiSearchInput-input'), ref: inputRef, value: typedValue, placeholder: props.placeholderText, "aria-label": "Search", onChange: (e) => setInputValue(e.target.value), onKeyDown: handleKeyDown, onFocus: (e) => {
|
|
28445
28320
|
e.target.select();
|
|
28446
28321
|
retrieveResults(typedValue);
|
|
28447
28322
|
setHaveFocus(true);
|
|
28448
28323
|
},
|
|
28449
28324
|
// This timeout could be a little brittle but allows the menu to stay open long enough to click it
|
|
28450
|
-
onBlur:
|
|
28325
|
+
onBlur: () => setTimeout(() => setHaveFocus(false), 200) }),
|
|
28451
28326
|
cancelIcon),
|
|
28452
28327
|
(isLoading || results.length > 0) && haveFocus && (React__default.createElement("div", null,
|
|
28453
28328
|
React__default.createElement(ResultsDisplay, { results: results, selectedId: selectedId, setSelectedId: setSelectedId, selectedRef: selectedRef, onClick: selectItem, isLoading: isLoading, renderItem: props.renderItem }))),
|
|
@@ -28463,43 +28338,33 @@ var LuiSearchInput = function (props) {
|
|
|
28463
28338
|
React__default.createElement("div", { "data-testid": "disclaimer", className: "LuiSearchInput-disclaimer" }, props.disclaimer)))));
|
|
28464
28339
|
};
|
|
28465
28340
|
|
|
28466
|
-
|
|
28341
|
+
const resultStyle$1 = { verticalAlign: 'middle' };
|
|
28467
28342
|
/**
|
|
28468
28343
|
* LuiSearchBox is a search input with select menu.
|
|
28469
28344
|
* The options of the menu and input can be passed in as an array.
|
|
28470
28345
|
* See examples in SearchBox in storybook.
|
|
28471
28346
|
*/
|
|
28472
|
-
|
|
28473
|
-
|
|
28474
|
-
|
|
28475
|
-
var value = _a.value;
|
|
28476
|
-
return value === initOptionValue;
|
|
28477
|
-
});
|
|
28478
|
-
var _b = useState(initOption ? initOption : searchBoxOptions[0]), selectedMenuOption = _b[0], setSelectedMenuOption = _b[1];
|
|
28347
|
+
const LuiSearchBox = ({ searchBoxOptions, initOptionValue, onMenuSelect, autoFocus, }) => {
|
|
28348
|
+
const initOption = searchBoxOptions.find(({ value }) => value === initOptionValue);
|
|
28349
|
+
const [selectedMenuOption, setSelectedMenuOption,] = useState(initOption ? initOption : searchBoxOptions[0]);
|
|
28479
28350
|
//auto focus every time select a menu item
|
|
28480
|
-
|
|
28351
|
+
const [focusUpdate, setFocusUpdate] = useState(false);
|
|
28481
28352
|
//don't focus when first time display
|
|
28482
|
-
|
|
28483
|
-
useEffect(
|
|
28484
|
-
|
|
28485
|
-
var value = _a.value;
|
|
28486
|
-
return value === initOptionValue;
|
|
28487
|
-
});
|
|
28353
|
+
const [isFocus, setIsFocus] = useState(false);
|
|
28354
|
+
useEffect(() => {
|
|
28355
|
+
const updatedOption = searchBoxOptions.find(({ value }) => value === initOptionValue);
|
|
28488
28356
|
if (updatedOption)
|
|
28489
28357
|
setSelectedMenuOption(updatedOption);
|
|
28490
28358
|
}, [initOptionValue]);
|
|
28491
|
-
|
|
28359
|
+
const handleMenuSelected = (e) => {
|
|
28492
28360
|
setSelectedMenuOption(findSelectedOption(e.value));
|
|
28493
28361
|
if (onMenuSelect !== undefined)
|
|
28494
28362
|
onMenuSelect(e);
|
|
28495
28363
|
setIsFocus(true);
|
|
28496
28364
|
setFocusUpdate(!focusUpdate);
|
|
28497
28365
|
};
|
|
28498
|
-
|
|
28499
|
-
|
|
28500
|
-
var value = _a.value;
|
|
28501
|
-
return value === v;
|
|
28502
|
-
});
|
|
28366
|
+
const findSelectedOption = (v) => {
|
|
28367
|
+
const selectedOption = searchBoxOptions.find(({ value }) => value === v);
|
|
28503
28368
|
return selectedOption ? selectedOption : searchBoxOptions[0];
|
|
28504
28369
|
};
|
|
28505
28370
|
return (React__default.createElement("div", { className: "LuiSearchBox" },
|
|
@@ -28507,53 +28372,53 @@ var LuiSearchBox = function (_a) {
|
|
|
28507
28372
|
React__default.createElement("div", { className: "LuiSearchBox-right" },
|
|
28508
28373
|
React__default.createElement(LuiSearchInput, { name: selectedMenuOption.name ? selectedMenuOption.name : undefined, minCharactersForSearch: 2, placeholderText: selectedMenuOption.placeholderText, getOptions: selectedMenuOption.getOption, onSelectOption: selectedMenuOption.onSelectOption, renderItem: selectedMenuOption.renderItem
|
|
28509
28374
|
? selectedMenuOption.renderItem
|
|
28510
|
-
:
|
|
28375
|
+
: (item) => {
|
|
28511
28376
|
return React__default.createElement("span", { style: resultStyle$1 }, item.description);
|
|
28512
28377
|
}, disclaimer: selectedMenuOption.disclaimer, focusUpdate: autoFocus && isFocus ? focusUpdate : undefined }))));
|
|
28513
28378
|
};
|
|
28514
|
-
|
|
28515
|
-
return (React__default.createElement(LuiButton,
|
|
28379
|
+
const LuiSearchBoxButton = React__default.forwardRef((props, ref) => {
|
|
28380
|
+
return (React__default.createElement(LuiButton, { level: "tertiary", ...props, ref: ref, className: "LuiSearchBox-button" },
|
|
28516
28381
|
props.children,
|
|
28517
28382
|
React__default.createElement(LuiIcon, { size: "md", name: 'ic_keyboard_arrow_down', className: 'LuiSearchBox-button-icon', alt: '' })));
|
|
28518
28383
|
});
|
|
28519
|
-
|
|
28384
|
+
const renderSelectMenu = (items, onClick) => (React__default.createElement(React__default.Fragment, null, items.map((item) => {
|
|
28520
28385
|
return (React__default.createElement(React__default.Fragment, { key: item.value },
|
|
28521
28386
|
item.groupDivider ? React__default.createElement(LuiSelectMenuDivider, null) : null,
|
|
28522
28387
|
item.groupTitle ? (React__default.createElement(LuiSelectMenuHeader, null, item.groupTitle)) : null,
|
|
28523
|
-
React__default.createElement(LuiSelectMenuItem, { "data-testid":
|
|
28524
|
-
})));
|
|
28388
|
+
React__default.createElement(LuiSelectMenuItem, { "data-testid": `select-box-${item.value}`, value: item.value, onClick: onClick, noPadding: true }, item.title)));
|
|
28389
|
+
})));
|
|
28525
28390
|
|
|
28526
|
-
|
|
28391
|
+
const exampleSearchResults = [
|
|
28527
28392
|
{
|
|
28528
28393
|
id: 'DP44035-1',
|
|
28529
|
-
description: 'This is a example Newlands search result'
|
|
28394
|
+
description: 'This is a example Newlands search result',
|
|
28530
28395
|
},
|
|
28531
28396
|
{
|
|
28532
28397
|
id: 'DP44035-2',
|
|
28533
|
-
description: 'This is a example Newlands search result 2'
|
|
28398
|
+
description: 'This is a example Newlands search result 2',
|
|
28534
28399
|
},
|
|
28535
28400
|
];
|
|
28536
|
-
|
|
28401
|
+
const getDefaultOptions = (input) => {
|
|
28537
28402
|
if (input) {
|
|
28538
|
-
|
|
28403
|
+
const results = exampleSearchResults.filter((item) => {
|
|
28539
28404
|
return item.description.toUpperCase().includes(input.toUpperCase());
|
|
28540
28405
|
});
|
|
28541
|
-
return new Promise(
|
|
28542
|
-
setTimeout(
|
|
28406
|
+
return new Promise((resolve) => {
|
|
28407
|
+
setTimeout(() => resolve(results), 250);
|
|
28543
28408
|
});
|
|
28544
28409
|
}
|
|
28545
28410
|
else {
|
|
28546
28411
|
return Promise.resolve([]);
|
|
28547
28412
|
}
|
|
28548
28413
|
};
|
|
28549
|
-
|
|
28414
|
+
const defaultSelectOption = (selectedOption) => {
|
|
28550
28415
|
console.log('SELECTED OPTION: ', selectedOption);
|
|
28551
28416
|
};
|
|
28552
|
-
|
|
28553
|
-
|
|
28417
|
+
const resultStyle = { verticalAlign: 'middle' };
|
|
28418
|
+
const defaultRenderItem = (item) => {
|
|
28554
28419
|
return React__default.createElement("span", { style: resultStyle }, item.description);
|
|
28555
28420
|
};
|
|
28556
|
-
|
|
28421
|
+
const searchBoxOptions = [
|
|
28557
28422
|
{
|
|
28558
28423
|
groupTitle: 'Title',
|
|
28559
28424
|
value: 'address',
|
|
@@ -28563,28 +28428,28 @@ var searchBoxOptions = [
|
|
|
28563
28428
|
disclaimer: 'This is a default disclaimer, add your own search options',
|
|
28564
28429
|
getOption: getDefaultOptions,
|
|
28565
28430
|
onSelectOption: defaultSelectOption,
|
|
28566
|
-
renderItem: defaultRenderItem
|
|
28431
|
+
renderItem: defaultRenderItem,
|
|
28567
28432
|
},
|
|
28568
28433
|
{
|
|
28569
28434
|
value: 'titleReference',
|
|
28570
28435
|
title: 'Title Reference',
|
|
28571
28436
|
placeholderText: 'Enter a title reference e.g. TN117/154',
|
|
28572
28437
|
getOption: getDefaultOptions,
|
|
28573
|
-
onSelectOption: defaultSelectOption
|
|
28438
|
+
onSelectOption: defaultSelectOption,
|
|
28574
28439
|
},
|
|
28575
28440
|
{
|
|
28576
28441
|
value: 'ownerName',
|
|
28577
28442
|
title: 'Registered Owner',
|
|
28578
28443
|
placeholderText: 'Enter owners name',
|
|
28579
28444
|
getOption: getDefaultOptions,
|
|
28580
|
-
onSelectOption: defaultSelectOption
|
|
28445
|
+
onSelectOption: defaultSelectOption,
|
|
28581
28446
|
},
|
|
28582
28447
|
{
|
|
28583
28448
|
value: 'lgdId',
|
|
28584
28449
|
title: 'Legal Description',
|
|
28585
28450
|
placeholderText: 'Example: Lot 2 DP 1234',
|
|
28586
28451
|
getOption: getDefaultOptions,
|
|
28587
|
-
onSelectOption: defaultSelectOption
|
|
28452
|
+
onSelectOption: defaultSelectOption,
|
|
28588
28453
|
},
|
|
28589
28454
|
{
|
|
28590
28455
|
value: 'parcelId',
|
|
@@ -28592,7 +28457,7 @@ var searchBoxOptions = [
|
|
|
28592
28457
|
placeholderText: 'Enter a parcel id e.g 93851642',
|
|
28593
28458
|
disclaimer: 'testdd2',
|
|
28594
28459
|
getOption: getDefaultOptions,
|
|
28595
|
-
onSelectOption: defaultSelectOption
|
|
28460
|
+
onSelectOption: defaultSelectOption,
|
|
28596
28461
|
},
|
|
28597
28462
|
{
|
|
28598
28463
|
groupTitle: 'Survey',
|
|
@@ -28601,7 +28466,7 @@ var searchBoxOptions = [
|
|
|
28601
28466
|
title: 'Survey number',
|
|
28602
28467
|
placeholderText: 'Enter a survey number, e.g. DP 44035',
|
|
28603
28468
|
getOption: getDefaultOptions,
|
|
28604
|
-
onSelectOption: defaultSelectOption
|
|
28469
|
+
onSelectOption: defaultSelectOption,
|
|
28605
28470
|
},
|
|
28606
28471
|
{
|
|
28607
28472
|
groupTitle: 'Instrument',
|
|
@@ -28610,20 +28475,19 @@ var searchBoxOptions = [
|
|
|
28610
28475
|
title: 'Instrument Number',
|
|
28611
28476
|
placeholderText: 'Example: 7723502.2',
|
|
28612
28477
|
getOption: getDefaultOptions,
|
|
28613
|
-
onSelectOption: defaultSelectOption
|
|
28478
|
+
onSelectOption: defaultSelectOption,
|
|
28614
28479
|
},
|
|
28615
28480
|
];
|
|
28616
|
-
|
|
28481
|
+
const getDefaultSearchMenuOptions = () => {
|
|
28617
28482
|
return searchBoxOptions;
|
|
28618
28483
|
};
|
|
28619
|
-
|
|
28620
|
-
var searchBoxOptions = _a.searchBoxOptions, initOptionValue = _a.initOptionValue, onMenuSelect = _a.onMenuSelect;
|
|
28484
|
+
const LOLSearchBox = ({ searchBoxOptions, initOptionValue, onMenuSelect, }) => {
|
|
28621
28485
|
return (React__default.createElement(LuiSearchBox, { onMenuSelect: onMenuSelect, initOptionValue: initOptionValue, searchBoxOptions: searchBoxOptions ? searchBoxOptions : getDefaultSearchMenuOptions() }));
|
|
28622
28486
|
};
|
|
28623
28487
|
|
|
28624
28488
|
var mountainBroken = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMzAwIDI1MCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOm5vbmU7fS5jbHMtMntmaWxsOiM0MjQ1NDc7fS5jbHMtM3tjbGlwLXBhdGg6dXJsKCNjbGlwLXBhdGgpO30uY2xzLTR7ZmlsbDojN2E3YTdhO30uY2xzLTV7b3BhY2l0eTowLjU7fS5jbHMtNntmaWxsOmdyYXk7fS5jbHMtN3tmaWxsOiNhM2EzYTM7fS5jbHMtOHtmaWxsOiNmZmY7fS5jbHMtOXtmaWxsOnVybCgjcmFkaWFsLWdyYWRpZW50KTt9LmNscy0xMHtmaWxsOnVybCgjcmFkaWFsLWdyYWRpZW50LTIpO30uY2xzLTExe2ZpbGw6dXJsKCNsaW5lYXItZ3JhZGllbnQpO30uY2xzLTEye2ZpbGw6I2ViY2VhYzt9LmNscy0xM3tmaWxsOiNkNGJhOWI7fS5jbHMtMTR7b3BhY2l0eTowLjM7fS5jbHMtMTUsLmNscy0xNntmaWxsOiM3ZDczNjg7fS5jbHMtMTZ7b3BhY2l0eTowLjI7fS5jbHMtMTd7ZmlsbDojYjNlZWY4O30uY2xzLTE4e2ZpbGw6IzAwYTRhMjt9LmNscy0xOXtmaWxsOiM2YmNhYzk7fS5jbHMtMjB7ZmlsbDojOTZkYWQ5O30uY2xzLTIxe2ZpbGw6IzAwNjkyYTt9LmNscy0yMntmaWxsOiMwMDgzOWQ7fS5jbHMtMjN7ZmlsbDojMDA4YTE3O30uY2xzLTI0e2ZpbGw6IzAwNjU1Yzt9LmNscy0yNXtmaWxsOiMwMGFkMWI7fS5jbHMtMjZ7ZmlsbDp1cmwoI2xpbmVhci1ncmFkaWVudC0yKTt9LmNscy0yN3tmaWxsOiM2YjE2MGY7fS5jbHMtMjh7ZmlsbDojYmMyNjFhO30uY2xzLTI5e2ZpbGw6IzNkMDUwMDt9LmNscy0zMHtmaWxsOnVybCgjbGluZWFyLWdyYWRpZW50LTMpO30uY2xzLTMxe2ZpbGw6I2ViNGMzZjt9LmNscy0zMntmaWxsOnVybCgjbGluZWFyLWdyYWRpZW50LTQpO30uY2xzLTMze2ZpbGw6IzYxNjA2MDt9LmNscy0zNHtmaWxsOiNkYmQ5ZDk7fTwvc3R5bGU+PGNsaXBQYXRoIGlkPSJjbGlwLXBhdGgiPjxwb2x5Z29uIGNsYXNzPSJjbHMtMSIgcG9pbnRzPSIyMTEuMTQgMTIwLjAxIDE3NS43MSA3MC44NiAxNDUuNDIgMjMuNDMgMTE5LjMyIDc2LjU4IDk0LjU2IDExNS40NCA1Ni44NCAxNzkuNDUgMTI4LjkzIDE3NC42OSAxODMuNzEgMTgxLjc0IDI1OS43MiAxNjcuNDUgMjExLjE0IDEyMC4wMSIvPjwvY2xpcFBhdGg+PHJhZGlhbEdyYWRpZW50IGlkPSJyYWRpYWwtZ3JhZGllbnQiIGN4PSIxNDguNiIgY3k9IjEwNC40NSIgcj0iNzYuODIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAuMTMiIHN0b3AtY29sb3I9IiM3Zjg1OGEiIHN0b3Atb3BhY2l0eT0iMCIvPjxzdG9wIG9mZnNldD0iMC4yMiIgc3RvcC1jb2xvcj0iIzZlNzM3NyIgc3RvcC1vcGFjaXR5PSIwLjA5Ii8+PHN0b3Agb2Zmc2V0PSIwLjk2IiBzdG9wLWNvbG9yPSIjMGUwZjBmIiBzdG9wLW9wYWNpdHk9IjAuNiIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPSJyYWRpYWwtZ3JhZGllbnQtMiIgY3g9IjExNS40OSIgY3k9Ijg0LjE3IiByPSIxNTUuMjQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiN2MwYzciLz48c3RvcCBvZmZzZXQ9IjAuMDQiIHN0b3AtY29sb3I9IiNhY2I0YmIiLz48c3RvcCBvZmZzZXQ9IjAuMjgiIHN0b3AtY29sb3I9IiM3NDdhN2UiLz48c3RvcCBvZmZzZXQ9IjAuNSIgc3RvcC1jb2xvcj0iIzQ4NGM0ZSIvPjxzdG9wIG9mZnNldD0iMC43IiBzdG9wLWNvbG9yPSIjMjgyYjJjIi8+PHN0b3Agb2Zmc2V0PSIwLjg2IiBzdG9wLWNvbG9yPSIjMTUxNjE3Ii8+PHN0b3Agb2Zmc2V0PSIwLjk2IiBzdG9wLWNvbG9yPSIjMGUwZjBmIi8+PC9yYWRpYWxHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudCIgeDE9IjIwMC44MSIgeTE9IjE5NC43OSIgeDI9IjI5MC4wOSIgeTI9IjE5NC43OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2JhYmFiYSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2Y1ZjVmNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtMiIgeDE9IjExMi40MSIgeTE9IjE5NC4zNiIgeDI9IjE1NCIgeTI9IjE4NC4wMyIgeGxpbms6aHJlZj0iI2xpbmVhci1ncmFkaWVudCIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50LTMiIHgxPSItMjc2LjQyIiB5MT0iLTc2Ljg3IiB4Mj0iLTI1NC44OSIgeTI9Ii03Ny4xNSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtNzcuNTUgMzgyKSByb3RhdGUoMTE3LjY5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2M3ZDBkNiIvPjxzdG9wIG9mZnNldD0iMC4wOSIgc3RvcC1jb2xvcj0iI2FlYjZiYiIvPjxzdG9wIG9mZnNldD0iMC4zMiIgc3RvcC1jb2xvcj0iIzc2N2I3ZSIvPjxzdG9wIG9mZnNldD0iMC41MyIgc3RvcC1jb2xvcj0iIzQ5NGM0ZSIvPjxzdG9wIG9mZnNldD0iMC43MSIgc3RvcC1jb2xvcj0iIzI5MmIyYyIvPjxzdG9wIG9mZnNldD0iMC44NiIgc3RvcC1jb2xvcj0iIzE1MTYxNyIvPjxzdG9wIG9mZnNldD0iMC45NiIgc3RvcC1jb2xvcj0iIzBlMGYwZiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtNCIgeDE9IjExNi4yNCIgeTE9IjE4NC42NSIgeDI9IjExNi4yOCIgeTI9IjE4OC4zNiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMjEuNDEgMTcuODcpIHJvdGF0ZSgtNy4wNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNhNmFmYjUiLz48c3RvcCBvZmZzZXQ9IjAuMjQiIHN0b3AtY29sb3I9IiM3NDdhN2UiLz48c3RvcCBvZmZzZXQ9IjAuNDciIHN0b3AtY29sb3I9IiM0ODRjNGUiLz48c3RvcCBvZmZzZXQ9IjAuNjgiIHN0b3AtY29sb3I9IiMyODJiMmMiLz48c3RvcCBvZmZzZXQ9IjAuODUiIHN0b3AtY29sb3I9IiMxNTE2MTciLz48c3RvcCBvZmZzZXQ9IjAuOTYiIHN0b3AtY29sb3I9IiMwZTBmMGYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iMjExLjE0IDEyMC4wMSAxNzUuNzEgNzAuODYgMTQ1LjQyIDIzLjQzIDExOS4zMiA3Ni41OCA5NC41NiAxMTUuNDQgNTYuODQgMTc5LjQ1IDEyOC45MyAxNzQuNjkgMTgzLjcxIDE4MS43NCAyNTkuNzIgMTY3LjQ1IDIxMS4xNCAxMjAuMDEiLz48ZyBjbGFzcz0iY2xzLTMiPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTE0Ni43OSw2OS44MmwtMS0uNDNjLS44Mi0uMzQtLjg3LTEtLjEyLTEuNDdsMS0uNTljLjc1LS40Ny42NC0uOS0uMjUtMWwtMS4xMS0uMDdjLS44OS0uMDYtMS4xNS0uNjYtLjU5LTEuMzVsLjctLjg3Yy41Ni0uNjkuMzItMS4wNS0uNTQtLjgybC0xLjA4LjNjLS44NS4yMy0xLjMtLjI2LTEtMS4wOWwuMzgtMWMuMzEtLjgzLDAtMS4xLS43Ny0uNmwtLjkzLjYzYy0uNzMuNS0xLjMxLjE5LTEuMjktLjdsMC0xLjEyYzAtLjg4LS40LTEtLjkzLS4zMmwtLjY3LjljLS41Mi43MS0xLjE4LjYtMS40NS0uMjRsLS4zNC0xLjA3Yy0uMjctLjg0LS43MS0uODQtMSwwTDEzNS40Myw2MGMtLjI3Ljg0LS45MywxLTEuNDUuMjRsLS42Ny0uOWMtLjUzLS43MS0uOTUtLjU2LS45My4zMmwwLDEuMTJjMCwuODktLjU2LDEuMi0xLjI5LjdsLS45My0uNjNjLS43My0uNS0xLjA4LS4yMy0uNzcuNmwuMzgsMWMuMzEuODMtLjE0LDEuMzItMSwxLjA5bC0xLjA4LS4zYy0uODYtLjIzLTEuMS4xMy0uNTQuODJsLjcxLjg3Yy41NS42OS4yOSwxLjI5LS42LDEuMzVsLTEuMTEuMDdjLS44OS4wNS0xLC40OC0uMjUsMWwxLC41OWMuNzUuNDcuNjksMS4xMy0uMTMsMS40N2wtMSwuNDNjLS44Mi4zNC0uNzguNzguMDgsMWwxLjA5LjI1Yy44Ni4yLDEsLjg0LjM2LDEuNDNsLS44NC43NGMtLjY2LjU4LS40OCwxLC40LjlsMS4xMS0uMTJjLjg4LS4wOSwxLjI0LjQ2LjgxLDEuMjNsLS41NiwxYy0uNDMuNzctLjEzLDEuMDkuNjcuNzJsMS0uNDdjLjgxLS4zNywxLjMzLDAsMS4xNy45bC0uMjEsMS4xYy0uMTcuODcuMjIsMS4wOC44Ni40N2wuODEtLjc4Yy42NC0uNjEsMS4yNi0uMzksMS4zOS40OGwuMTYsMS4xMWMuMTMuODguNTcsMSwxLC4xNmwuNTEtMWMuNDEtLjc5LDEuMDctLjc5LDEuNDgsMGwuNTEsMWMuNC43OS44NC43MiwxLS4xNmwuMTYtMS4xMWMuMTMtLjg3Ljc1LTEuMDksMS4zOS0uNDhsLjgxLjc4Yy42NC42MSwxLC40Ljg2LS40N2wtLjIxLTEuMWMtLjE2LS44Ny4zNi0xLjI3LDEuMTctLjlsMSwuNDdjLjgxLjM3LDEuMSwwLC42Ny0uNzJsLS41Ni0xYy0uNDMtLjc3LS4wNy0xLjMyLjgxLTEuMjNsMS4xMS4xMmMuODguMDksMS4wNi0uMzIuNC0uOWwtLjg0LS43NGMtLjY2LS41OS0uNS0xLjIzLjM2LTEuNDNsMS4wOS0uMjVDMTQ3LjU3LDcwLjYsMTQ3LjYxLDcwLjE2LDE0Ni43OSw2OS44MlptLTEwLjUzLDYuODNhNy4zLDcuMywwLDEsMSw3LjMtNy4yOUE3LjI5LDcuMjksMCwwLDEsMTM2LjI2LDc2LjY1WiIvPjxjaXJjbGUgY2xhc3M9ImNscy00IiBjeD0iMTM2LjI2IiBjeT0iNjkuMzYiIHI9IjMuNjIiLz48cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik0xMTEsMTI5LjgzbC0xLjY1LS42OGMtMS4zLS41NC0xLjM4LTEuNTktLjE5LTIuMzRsMS41MS0uOTRjMS4xOS0uNzQsMS0xLjQyLS4zOC0xLjUxbC0xLjc4LS4xMWMtMS40MS0uMDktMS44My0xLS45NC0yLjE0bDEuMTItMS4zOWMuODktMS4wOS41LTEuNjgtLjg1LTEuM2wtMS43Mi40N2MtMS4zNi4zNy0yLjA3LS40LTEuNTktMS43MmwuNjItMS42OGMuNDgtMS4zMi0uMDctMS43NS0xLjIzLS45NWwtMS40NywxYy0xLjE3Ljc5LTIuMDkuMjktMi4wNi0xLjExbDAtMS43OGMwLTEuNDEtLjYzLTEuNjQtMS40Ny0uNTFsLTEuMDcsMS40M2MtLjg0LDEuMTItMS44OCwxLTIuMzEtLjM5bC0uNTQtMS42OWMtLjQzLTEuMzQtMS4xMy0xLjM0LTEuNTYsMEw5MywxMTQuMThjLS40MywxLjM0LTEuNDcsMS41MS0yLjMxLjM5bC0xLjA3LTEuNDNjLS44NC0xLjEzLTEuNS0uOS0xLjQ3LjUxbDAsMS43OGMwLDEuNC0uODksMS45LTIsMS4xMWwtMS40OC0xYy0xLjE2LS44LTEuNzEtLjM3LTEuMjMuOTVsLjYyLDEuNjhjLjQ4LDEuMzItLjIzLDIuMDktMS41OSwxLjcybC0xLjcyLS40N2MtMS4zNS0uMzgtMS43NC4yMS0uODUsMS4zTDgxLDEyMi4xMWMuODksMS4wOS40NywyLS45NCwyLjE0bC0xLjc3LjExYy0xLjQxLjA5LTEuNTguNzctLjM5LDEuNTFsMS41MS45NGMxLjIuNzUsMS4xMSwxLjgtLjE5LDIuMzRsLTEuNjUuNjhjLTEuMjkuNTQtMS4yNCwxLjI0LjEzLDEuNTVsMS43NC40MWMxLjM3LjMxLDEuNjMsMS4zMy41NywyLjI2bC0xLjMzLDEuMThjLTEuMDYuOTMtLjc3LDEuNTguNjIsMS40M2wxLjc4LS4xOGMxLjQtLjE1LDIsLjc0LDEuMjgsMkw4MS40MywxNDBjLS43LDEuMjItLjIyLDEuNzQsMSwxLjE1bDEuNjItLjc1YzEuMjgtLjU5LDIuMTEuMDUsMS44NSwxLjQzbC0uMzMsMS43NWMtLjI2LDEuMzkuMzYsMS43MiwxLjM3Ljc1bDEuMjktMS4yNGMxLTEsMi0uNjMsMi4yMS43NmwuMjYsMS43N2MuMiwxLjM5Ljg5LDEuNSwxLjUzLjI1bC44Mi0xLjU4Yy42NC0xLjI1LDEuNy0xLjI1LDIuMzQsMGwuODIsMS41OGMuNjQsMS4yNSwxLjMzLDEuMTQsMS41NC0uMjVsLjI1LTEuNzdjLjIxLTEuMzksMS4yLTEuNzMsMi4yMi0uNzZsMS4yOCwxLjI0YzEsMSwxLjYzLjY0LDEuMzctLjc1bC0uMzMtMS43NWMtLjI2LTEuMzguNTgtMiwxLjg1LTEuNDNsMS42Mi43NWMxLjI3LjU5LDEuNzUuMDcsMS0xLjE1bC0uODgtMS41NWMtLjY5LTEuMjItLjExLTIuMTEsMS4yOC0ybDEuNzguMThjMS4zOS4xNSwxLjY4LS41LjYyLTEuNDNsLTEuMzMtMS4xOGMtMS4wNi0uOTMtLjgtMiwuNTctMi4yNmwxLjc0LS40MUMxMTIuMjYsMTMxLjA3LDExMi4zMiwxMzAuMzcsMTExLDEyOS44M1pNOTQuMjcsMTQwLjdhMTEuNjEsMTEuNjEsMCwxLDEsMTEuNi0xMS42MUExMS42LDExLjYsMCwwLDEsOTQuMjcsMTQwLjdaIi8+PGNpcmNsZSBjbGFzcz0iY2xzLTQiIGN4PSI5NC4yNyIgY3k9IjEyOS4wOSIgcj0iNS43NSIvPjxnIGNsYXNzPSJjbHMtNSI+PHJlY3QgY2xhc3M9ImNscy02IiB4PSIxMzQuMTYiIHk9Ijc3LjMiIHdpZHRoPSIzOS40NCIgaGVpZ2h0PSIzNS45MSIgcng9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMi4yOCAxMzYuNzEpIHJvdGF0ZSgtNDUpIi8+PGNpcmNsZSBjbGFzcz0iY2xzLTIiIGN4PSIxNTMuODgiIGN5PSI5NS4yNSIgcj0iNy41MiIvPjxyZWN0IGNsYXNzPSJjbHMtNiIgeD0iMjA0LjIxIiB5PSI4MSIgd2lkdGg9IjIzLjQyIiBoZWlnaHQ9IjE1Mi41OSIgcng9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ny45OCAxOTguNzUpIHJvdGF0ZSgtNDUpIi8+PHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxNTguNzUiIHk9IjExMS4zNiIgd2lkdGg9IjIzLjQyIiBoZWlnaHQ9IjAuOTQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yOS4xNSAxNTMuMjkpIHJvdGF0ZSgtNDUpIi8+PHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxNjAuMzUiIHk9IjExMi45NiIgd2lkdGg9IjIzLjQyIiBoZWlnaHQ9IjAuOTQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yOS44MSAxNTQuODkpIHJvdGF0ZSgtNDUpIi8+PHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxNjEuOTciIHk9IjExNC41OCIgd2lkdGg9IjIzLjQyIiBoZWlnaHQ9IjAuOTQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMC40OSAxNTYuNTEpIHJvdGF0ZSgtNDUpIi8+PC9nPjxwYXRoIGNsYXNzPSJjbHMtNyIgZD0iTTE3MC42OSw5NS45LDE2OSw5NS4yMmMtMS4yOS0uNTQtMS4zOC0xLjU5LS4xOS0yLjMzbDEuNTEtMWMxLjE5LS43NCwxLTEuNDItLjM4LTEuNTFsLTEuNzgtLjExYy0xLjQtLjA5LTEuODMtMS0uOTQtMi4xNGwxLjEyLTEuMzljLjg5LTEuMDkuNTEtMS42OC0uODUtMS4zbC0xLjcyLjQ3Yy0xLjM1LjM3LTIuMDctLjQtMS41OC0xLjcybC42MS0xLjY3Yy40OC0xLjMyLS4wNy0xLjc2LTEuMjMtMWwtMS40NywxYy0xLjE2Ljc5LTIuMDkuMjktMi4wNi0xLjExbDAtMS43OGMwLTEuNDEtLjY0LTEuNjQtMS40OC0uNTFsLTEuMDYsMS40M2MtLjg0LDEuMTMtMS44OCwxLTIuMzEtLjM5bC0uNTUtMS42OWMtLjQyLTEuMzQtMS4xMy0xLjM0LTEuNTYsMGwtLjU0LDEuNjljLS40MywxLjM0LTEuNDcsMS41Mi0yLjMxLjM5bC0xLjA2LTEuNDNjLS44NC0xLjEzLTEuNTEtLjktMS40OC41MWwwLDEuNzhjMCwxLjQtLjksMS45LTIuMDYsMS4xMWwtMS40Ny0xYy0xLjE2LS44LTEuNzItLjM2LTEuMjMsMWwuNjEsMS42N2MuNDgsMS4zMi0uMjMsMi4wOS0xLjU5LDEuNzJsLTEuNzEtLjQ3Yy0xLjM2LS4zOC0xLjc0LjIxLS44NiwxLjNsMS4xMywxLjM5Yy44OCwxLjA5LjQ2LDItLjk0LDIuMTRsLTEuNzguMTFjLTEuNC4wOS0xLjU4Ljc3LS4zOCwxLjUxbDEuNTEsMWMxLjE5Ljc0LDEuMSwxLjc5LS4yLDIuMzNsLTEuNjQuNjhjLTEuMy41NC0xLjI0LDEuMjQuMTMsMS41NmwxLjczLjRjMS4zNy4zMSwxLjYzLDEuMzQuNTgsMi4yN2wtMS4zNCwxLjE4Yy0xLjA1LjkzLS43NywxLjU3LjYzLDEuNDJsMS43Ny0uMThjMS40LS4xNCwyLC43NCwxLjI4LDJsLS44OCwxLjU1Yy0uNjksMS4yMi0uMjIsMS43NCwxLjA2LDEuMTVsMS42MS0uNzVjMS4yOC0uNTksMi4xMS4wNSwxLjg1LDEuNDRsLS4zMywxLjc1Yy0uMjYsMS4zOC4zNiwxLjcxLDEuMzcuNzRsMS4yOS0xLjIzYzEtMSwyLS42NCwyLjIxLjc2bC4yNiwxLjc2Yy4yLDEuMzkuODksMS41LDEuNTQuMjVsLjgxLTEuNThjLjY1LTEuMjUsMS43LTEuMjUsMi4zNCwwbC44MiwxLjU4Yy42NCwxLjI1LDEuMzQsMS4xNCwxLjU0LS4yNWwuMjYtMS43NmMuMi0xLjQsMS4xOS0xLjc0LDIuMjEtLjc2bDEuMjgsMS4yM2MxLDEsMS42NC42NCwxLjM4LS43NGwtLjMzLTEuNzVjLS4yNi0xLjM5LjU3LTIsMS44NC0xLjQ0bDEuNjIuNzVjMS4yOC41OSwxLjc1LjA3LDEuMDYtMS4xNWwtLjg4LTEuNTVjLS43LTEuMjItLjEyLTIuMSwxLjI4LTJsMS43Ny4xOGMxLjQuMTUsMS42OC0uNDkuNjMtMS40MmwtMS4zNC0xLjE4Yy0xLjA1LS45My0uNzktMiwuNTgtMi4yN2wxLjczLS40QzE3MS45Myw5Ny4xNCwxNzIsOTYuNDQsMTcwLjY5LDk1LjlabS0xNi43NSwxMC44N2ExMS42MSwxMS42MSwwLDEsMSwxMS42MS0xMS42MUExMS42MSwxMS42MSwwLDAsMSwxNTMuOTQsMTA2Ljc3WiIvPjxjaXJjbGUgY2xhc3M9ImNscy03IiBjeD0iMTUzLjk0IiBjeT0iOTUuMTYiIHI9IjUuNzUiLz48cmVjdCBjbGFzcz0iY2xzLTYiIHg9IjExNi4wMyIgeT0iMTAwLjA3IiB3aWR0aD0iNDguNTUiIGhlaWdodD0iNTMuMzIiIHJ4PSI2Ljc2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAuMTYgMjQxLjIxKSByb3RhdGUoLTc5LjM2KSIvPjxjaXJjbGUgY2xhc3M9ImNscy0yIiBjeD0iMTQwLjMiIGN5PSIxMjYuNzMiIHI9IjEwLjE3Ii8+PHJlY3QgY2xhc3M9ImNscy02IiB4PSIxNS4yNSIgeT0iMjI3LjQ3IiB3aWR0aD0iMjA2LjI5IiBoZWlnaHQ9IjMxLjY3IiByeD0iNi43NiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE0Mi41OSAzMTQuNzIpIHJvdGF0ZSgtNzkuMzYpIi8+PHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxMTguNjEiIHk9IjE1Ny4yNSIgd2lkdGg9IjMxLjY3IiBoZWlnaHQ9IjEuMjgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMxLjQ3IC0yMi4xMikgcm90YXRlKDEwLjY0KSIvPjxyZWN0IGNsYXNzPSJjbHMtMiIgeD0iMTE4LjA1IiB5PSIxNjAuMjUiIHdpZHRoPSIzMS42NyIgaGVpZ2h0PSIxLjI4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi4wMiAtMjEuOTYpIHJvdGF0ZSgxMC42NCkiLz48cmVjdCBjbGFzcz0iY2xzLTIiIHg9IjExNy40OCIgeT0iMTYzLjMiIHdpZHRoPSIzMS42NyIgaGVpZ2h0PSIxLjI4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi41NyAtMjEuOCkgcm90YXRlKDEwLjY0KSIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTEzOC43OSwxMDAuODdjLjY3LTIuMSwxLjc3LTIuMSwyLjQ0LDBsLjg1LDIuNjVjLjY3LDIuMSwyLjMsMi4zNywzLjYxLjZsMS42Ny0yLjIzYzEuMzEtMS43NiwyLjM1LTEuNDEsMi4zMS43OWwtLjA2LDIuNzljLS4wNSwyLjIsMS40LDMsMy4yMiwxLjc0bDIuMy0xLjU3YzEuODItMS4yNCwyLjY4LS41NywxLjkzLDEuNWwtMSwyLjYyYy0uNzYsMi4wNi4zNiwzLjI3LDIuNDgsMi42OWwyLjY5LS43NGMyLjEyLS41OCwyLjcyLjM0LDEuMzMsMi4wNWwtMS43NiwyLjE2Yy0xLjM4LDEuNzEtLjcyLDMuMjIsMS40OCwzLjM1bDIuNzguMThjMi4xOS4xMywyLjQ2LDEuMi42LDIuMzZsLTIuMzcsMS40OGMtMS44NiwxLjE2LTEuNzMsMi44MS4zLDMuNjVsMi41OCwxLjA2YzIsLjg1LDEuOTQsMS45NC0uMiwyLjQ0bC0yLjcyLjYzYy0yLjE0LjQ5LTIuNTUsMi4wOS0uOSwzLjU1bDIuMDksMS44NGMxLjY1LDEuNDYsMS4yMSwyLjQ2LTEsMi4yNGwtMi43Ny0uMjljLTIuMTktLjIzLTMuMDksMS4xNS0yLDMuMDdsMS4zNywyLjQyYzEuMDksMS45MS4zNSwyLjcyLTEuNjUsMS43OWwtMi41My0xLjE3Yy0yLS45Mi0zLjMuMDktMi44OSwyLjI1bC41MiwyLjc0Yy40LDIuMTYtLjU2LDIuNjktMi4xNSwxLjE2bC0yLTEuOTNjLTEuNTktMS41Mi0zLjE1LTEtMy40NywxLjE5bC0uNCwyLjc2Yy0uMzIsMi4xOC0xLjQsMi4zNi0yLjQxLjRsLTEuMjctMi40OGMtMS0yLTIuNjYtMi0zLjY2LDBsLTEuMjgsMi40OGMtMSwyLTIuMDksMS43OC0yLjQxLS40bC0uNC0yLjc2Yy0uMzItMi4xNy0xLjg4LTIuNzEtMy40Ni0xLjE5bC0yLDEuOTNjLTEuNTksMS41My0yLjU2LDEtMi4xNS0xLjE2bC41MS0yLjc0Yy40MS0yLjE2LS44OS0zLjE3LTIuODktMi4yNWwtMi41MywxLjE3Yy0yLC45My0yLjc0LjEyLTEuNjUtMS43OWwxLjM4LTIuNDJjMS4wOC0xLjkyLjE4LTMuMy0yLTMuMDdsLTIuNzguMjljLTIuMTkuMjItMi42My0uNzgtMS0yLjI0bDIuMDktMS44NGMxLjY1LTEuNDYsMS4yNS0zLjA2LS45LTMuNTVsLTIuNzEtLjYzYy0yLjE1LS41LTIuMjQtMS41OS0uMi0yLjQ0bDIuNTctMS4wNmMyLS44NCwyLjE3LTIuNDkuMy0zLjY1bC0yLjM2LTEuNDhjLTEuODctMS4xNi0xLjYtMi4yMy42LTIuMzZsMi43OC0uMThjMi4yLS4xMywyLjg2LTEuNjQsMS40Ny0zLjM1bC0xLjc2LTIuMTZjLTEuMzgtMS43MS0uNzgtMi42MywxLjM0LTIuMDVsMi42OS43NGMyLjEyLjU4LDMuMjMtLjYzLDIuNDgtMi42OWwtMS0yLjYyYy0uNzYtMi4wNy4xMS0yLjc0LDEuOTItMS41bDIuMzEsMS41N2MxLjgxLDEuMjQsMy4yNi40NiwzLjIyLTEuNzRsLS4wNi0yLjc5YzAtMi4yLDEtMi41NSwyLjMxLS43OWwxLjY2LDIuMjNjMS4zMiwxLjc3LDIuOTQsMS41LDMuNjItLjZaIi8+PGNpcmNsZSBjbGFzcz0iY2xzLTIiIGN4PSIxNDAuMDEiIGN5PSIxMjYuODUiIHI9IjE4LjE1Ii8+PGNpcmNsZSBjbGFzcz0iY2xzLTgiIGN4PSIxNDAuMDEiIGN5PSIxMjYuODUiIHI9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0xMDcuNDYsMTQxLjc0Yy42Ny0yLjA5LDEuNzctMi4wOSwyLjQ0LDBsLjg1LDIuNjZjLjY3LDIuMDksMi4yOSwyLjM2LDMuNjEuNmwxLjY3LTIuMjRjMS4zMS0xLjc2LDIuMzUtMS40LDIuMy44bDAsMi43OGMwLDIuMiwxLjQsMywzLjIyLDEuNzVsMi4zLTEuNThjMS44Mi0xLjI0LDIuNjgtLjU2LDEuOTMsMS41bC0xLDIuNjJjLS43NiwyLjA3LjM2LDMuMjgsMi40OCwyLjdsMi42OC0uNzRjMi4xMy0uNTksMi43My4zMywxLjM0LDJsLTEuNzYsMi4xNmMtMS4zOCwxLjcxLS43MiwzLjIyLDEuNDcsMy4zNmwyLjc5LjE3YzIuMTkuMTQsMi40NiwxLjIuNiwyLjM3TDEzMiwxNjQuMTZjLTEuODcsMS4xNy0xLjczLDIuODEuMywzLjY1bDIuNTgsMS4wN2MyLC44NCwxLjk0LDEuOTQtLjIsMi40M2wtMi43Mi42M2MtMi4xNC41LTIuNTUsMi4wOS0uOSwzLjU1bDIuMDksMS44NWMxLjY1LDEuNDUsMS4yMSwyLjQ2LTEsMi4yM2wtMi43Ny0uMjljLTIuMTktLjIyLTMuMDksMS4xNi0yLDMuMDdsMS4zNywyLjQyYzEuMDksMS45Mi4zNCwyLjcyLTEuNjUsMS44bC0yLjUzLTEuMTdjLTItLjkzLTMuMy4wOC0yLjg5LDIuMjVsLjUyLDIuNzRjLjQsMi4xNi0uNTYsMi42OC0yLjE1LDEuMTZsLTItMS45M2MtMS41OS0xLjUzLTMuMTUtMS0zLjQ3LDEuMTlsLS40LDIuNzZjLS4zMiwyLjE3LTEuNCwyLjM1LTIuNDEuNGwtMS4yNy0yLjQ4Yy0xLTItMi42Ni0yLTMuNjYsMEwxMDUuNTcsMTk0Yy0xLDEuOTUtMi4wOSwxLjc3LTIuNDEtLjRsLS40LTIuNzZjLS4zMi0yLjE4LTEuODgtMi43Mi0zLjQ2LTEuMTlsLTIsMS45M2MtMS41OCwxLjUyLTIuNTUsMS0yLjE0LTEuMTZsLjUxLTIuNzRjLjQxLTIuMTctLjg5LTMuMTgtMi44OS0yLjI1bC0yLjUzLDEuMTdjLTIsLjkyLTIuNzQuMTItMS42NS0xLjhMOTAsMTgyLjM1YzEuMDgtMS45MS4xOC0zLjI5LTItMy4wN2wtMi43Ny4yOWMtMi4xOS4yMy0yLjYzLS43OC0xLTIuMjNsMi4wOS0xLjg1YzEuNjUtMS40NiwxLjI0LTMuMDUtLjktMy41NWwtMi43MS0uNjNjLTIuMTUtLjQ5LTIuMjQtMS41OS0uMjEtMi40M2wyLjU4LTEuMDdjMi0uODQsMi4xNy0yLjQ4LjMtMy42NUw4MywxNjIuNjljLTEuODctMS4xNy0xLjYtMi4yMy42LTIuMzdsMi43OC0uMTdjMi4xOS0uMTQsMi44Ni0xLjY1LDEuNDctMy4zNmwtMS43Ni0yLjE2Yy0xLjM4LTEuNzEtLjc4LTIuNjMsMS4zNC0ybDIuNjkuNzRjMi4xMi41OCwzLjIzLS42MywyLjQ4LTIuN2wtMS0yLjYyYy0uNzYtMi4wNi4xMS0yLjc0LDEuOTItMS41bDIuMywxLjU4YzEuODIsMS4yNCwzLjI3LjQ1LDMuMjItMS43NWwwLTIuNzhjMC0yLjIsMS0yLjU2LDIuMzEtLjhMMTAzLDE0NWMxLjMyLDEuNzYsMi45NCwxLjQ5LDMuNjEtLjZaIi8+PGNpcmNsZSBjbGFzcz0iY2xzLTIiIGN4PSIxMDguNjgiIGN5PSIxNjcuNzMiIHI9IjE4LjE1Ii8+PGNpcmNsZSBjbGFzcz0iY2xzLTgiIGN4PSIxMDguNjgiIGN5PSIxNjcuNzMiIHI9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0xNzAuMjksMTQyLjM0Yy41LTEuNTUsMS4zMS0xLjU1LDEuODEsMHMxLjY5LDEuNzUsMi42Ny40NSwxLjc0LTEsMS43LjU4LDEsMi4yMSwyLjM4LDEuMjksMi0uNDIsMS40MywxLjExLjI2LDIuNDIsMS44MywyLDIsLjI1LDEsMS41MS0uNTQsMi4zOCwxLjA4LDIuNDgsMS44My44OS40NSwxLjc1LTEuMjgsMi4wNy4yMiwyLjcsMS40NCwxLjQzLS4xNSwxLjgtMS44OCwxLjU0LS42NiwyLjYyLjg5LDEuODItLjczLDEuNjUtMi4yOC44NS0xLjQ4LDIuMjcuMjUsMi0xLjIyLDEuMzMtMi40NC4wNi0yLjE0LDEuNjYtLjQxLDItMS41OC44Ni0yLjMzLS43My0yLjU2Ljg4LTEsMS43NC0xLjc4LjI5LTItMS40NC0yLjcxLDAtMS41NCwxLjMxLTEuNzgtLjI5LTEuMzktMi0yLjU2LS44OC0xLjg5Ljc0LTEuNTktLjg2LS42Ni0yLjM1LTIuMTMtMS42Ni0yLC4wOC0xLjIyLTEuMzMuMTMtMi40NC0xLjQ4LTIuMjctMi0uNTctLjczLTEuNjUuOTItMi4yNi0uNjYtMi42Mi0xLjY2LTEuMTgtLjE1LTEuOCwxLjYtMS44NC4yMi0yLjctMS4xOC0xLjY1LjQ0LTEuNzUsMi4xMi0xLjIyLDEuMDktMi40OC0uNTgtMS45NCwxLTEuNTEsMi4zOS0uNDYsMS44My0yLC4wOC0yLDEuNDItMS4xMSwyLjQyLjM0LDIuMzktMS4yOS43My0xLjg5LDEuNy0uNThTMTY5LjgsMTQzLjg5LDE3MC4yOSwxNDIuMzRaIi8+PGNpcmNsZSBjbGFzcz0iY2xzLTIiIGN4PSIxNzEuMTkiIGN5PSIxNTUuODYiIHI9IjkuOTUiLz48Y2lyY2xlIGNsYXNzPSJjbHMtOCIgY3g9IjE3MS4xOSIgY3k9IjE1NS44NiIgcj0iNy4wNCIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTE5OS42OCwxMjcuNTJjLjcxLTMuMDcsMS44Ny0zLjA3LDIuNTksMHMzLDMuNjIsNSwxLjI0LDMuMDktMS44NCwyLjMsMS4yLDEsNC41OSwzLjg4LDMuNDQsMy41OC0uMiwxLjQ3LDIuMTMtMS4yOSw0LjUxLDEuODQsNC44NSwzLjI2LDEuNDkuMzEsMi41Ny0zLjI0LDMuMzktLjYzLDUuMTUsMi4yLDIuODQtLjkyLDIuNDItNC40NCwxLjUtMi45NCw0LjI2LjYzLDMuNTQtMS45NCwxLjcyLTQuNjMtLjczLTQuNTksMi40MS0xLjA5LDMuNDMtMi41Mi42Mi0zLjc1LTIuOC01LjE4LDAtMi41NiwyLjUzLTIuNTItLjYyLTItNC4yMy00LjU5LTIuNDEtMy40MywxLjA1LTEuOTQtMS43Mi4xOC00LjY4LTIuOTQtNC4yNi0zLjUzLS42Ny0uOTItMi40MiwyLjMzLTQuMDctLjYyLTUuMTUtMi44Mi0yLjIzLjMxLTIuNTcsNC0yLjUyLDEuODQtNC44NS0xLjQ2LTMuMjksMS40Ny0yLjEzLDQuNjctLjQsMy44OC0zLjQ0LjI0LTMuNTksMi4yOS0xLjJTMTk5LDEzMC41OCwxOTkuNjgsMTI3LjUyWiIvPjxjaXJjbGUgY2xhc3M9ImNscy0yIiBjeD0iMjAwLjk3IiBjeT0iMTQzLjI5IiByPSI3Ljk5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMTYxLjY2LDQxLjY0Yy43MS0zLjA2LDEuODgtMy4wNiwyLjU5LDBzMywzLjYzLDUsMS4yNCwzLjA4LTEuODQsMi4yOSwxLjIxLjk1LDQuNTksMy44OCwzLjQzLDMuNTktLjE5LDEuNDcsMi4xNC0xLjI5LDQuNTEsMS44NCw0Ljg0LDMuMjcsMS41LjMxLDIuNTgtMy4yMywzLjM5LS42Miw1LjE0LDIuMiwyLjg1LS45MiwyLjQzLTQuNDQsMS41LTIuOTUsNC4yNi42MywzLjU0LTEuOTQsMS43MlMxNjgsNjkuODksMTY4LjA3LDczcy0xLjEsMy40Mi0yLjUyLjYyLTMuNzYtMi44MS01LjE4LDAtMi41NiwyLjUzLTIuNTItLjYyLTItNC4yMy00LjU5LTIuNDEtMy40NCwxLjA1LTEuOTQtMS43Mi4xNy00LjY4LTIuOTUtNC4yNi0zLjUzLS42Ny0uOTEtMi40MywyLjMzLTQuMDctLjYzLTUuMTQtMi44Mi0yLjI0LjMxLTIuNTgsNC0yLjUxLDEuODQtNC44NC0xLjQ1LTMuMjksMS40Ny0yLjE0LDQuNjgtLjM5LDMuODgtMy40My4yNC0zLjU5LDIuMy0xLjIxUzE2MSw0NC43MSwxNjEuNjYsNDEuNjRaIi8+PGNpcmNsZSBjbGFzcz0iY2xzLTIiIGN4PSIxNjIuOTYiIGN5PSI1Ny40MiIgcj0iNy45OSIvPjwvZz48L2c+PGcgaWQ9IkxheWVyXzUiIGRhdGEtbmFtZT0iTGF5ZXIgNSI+PHBvbHlnb24gY2xhc3M9ImNscy05IiBwb2ludHM9IjIxMS4xNCAxMjAuMDEgMTc1LjcxIDcwLjg2IDE0NS40MiAyMy40MyAxMTkuMzIgNzYuNTggOTQuNTYgMTE1LjQ0IDU2Ljg0IDE3OS40NSAxMjguOTMgMTc0LjY5IDE4My43MSAxODEuNzQgMjU5LjcyIDE2Ny40NSAyMTEuMTQgMTIwLjAxIi8+PC9nPjxnIGlkPSJMYXllcl80IiBkYXRhLW5hbWU9IkxheWVyIDQiPjxwb2x5Z29uIGNsYXNzPSJjbHMtMTAiIHBvaW50cz0iNjEuOTEgMTc4LjcyIDEwMy45NSAxMDcuNDIgMTIzLjE3IDc4LjIyIDE0Ny4yNSAyNi4yOSAxNDUuNDIgMjMuNDMgMTE5LjMyIDc2LjU4IDkzLjE0IDExNy44MyA1Ni44NCAxNzkuNDUgNjEuOTEgMTc4LjcyIi8+PC9nPjxnIGlkPSJMYXllcl83IiBkYXRhLW5hbWU9IkxheWVyIDciPjxwb2x5Z29uIGNsYXNzPSJjbHMtMTEiIHBvaW50cz0iMjUxLjMgMjE0LjAzIDI2MS41OSAyMDAuMzUgMjc1LjAyIDE5OS4wOCAyNzQuMDUgMTg5LjQyIDI5MC4wOSAxNzUuNTUgMjQ5LjM1IDE3Ny45OCAyMDAuODEgMTgyLjk4IDI1MS4zIDIxNC4wMyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMTIiIHBvaW50cz0iMjQxLjc1IDE5My40NiAyNjQuMzIgMTkxLjY0IDI2NC40MiAxOTMuMTkgMjQyLjc5IDE5NC42NiAyNDEuNzUgMTkzLjQ2Ii8+PHBhdGggY2xhc3M9ImNscy0xMyIgZD0iTTIzMywyMDMuMDhjMS0uMTIsNDItNCw0Mi00TDIxNC42Myw2Ny42MVY4Nmw0OS43OSwxMDcuMTYtMzAuNiwyLjA3Ii8+PGcgY2xhc3M9ImNscy0xNCI+PHBhdGggY2xhc3M9ImNscy0xNSIgZD0iTTI2NC41NywxNzYuMzMsMjE0LjYzLDY3LjYxVjg2bDQ3LjcsMTAyLjY3QzI2Mi40NywxODIuOSwyNjQuNDYsMTgxLjQxLDI2NC41NywxNzYuMzNaIi8+PHBhdGggY2xhc3M9ImNscy0xNSIgZD0iTTI0MS42LDIwMi4yNWwyMC0xLjljLjExLTEuNTguNzYtMy44Ny44Ny03bC0yOC42NCwxLjk0LS42NCw2LjMxWiIvPjwvZz48cG9seWdvbiBjbGFzcz0iY2xzLTE2IiBwb2ludHM9IjI2Mi40NiAxOTMuMzIgMjYzLjIzIDE5MS45MiAyNDEuMTIgMTkzLjM2IDI0MS4xMiAxOTQuNzcgMjYyLjQ2IDE5My4zMiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMTMiIHBvaW50cz0iMjQ4LjIzIDIxNC45NiAyNTEuMyAyMTQuMDMgMjM2LjYgMTM5Ljk4IDIyNC4yMiA4MS41MSAyMTIuNzkgMjQuNjMgMjEwLjM1IDI0LjYzIDIxOC43NCA4Ni4wMyAyNDEuNzUgMjA4LjA3IDI0OC4yMyAyMTQuOTYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTE3IiBwb2ludHM9IjIxMC4zNSAyNC42MyAyMDEuMDMgNzkuODIgMjIxLjE2IDgxLjUxIDIxMC4zNSAyNC42MyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMTgiIHBvaW50cz0iMjIxLjE2IDgxLjUxIDIzMy44MSAxNDEuMDEgMjE0LjYzIDEyOC4zMSAyMjEuMTYgODEuNTEiLz48cG9seWdvbiBjbGFzcz0iY2xzLTE5IiBwb2ludHM9IjIwMS4wMyA3OS44MiAyMjEuMTYgODEuNTEgMjE0LjYzIDEyOC4zMSAyMDEuMDMgNzkuODIiLz48cG9seWdvbiBjbGFzcz0iY2xzLTIwIiBwb2ludHM9IjIwMS4wMyA3OS44MiAxOTIuMTggMTE5LjM3IDIxNC42MyAxMjguMzEgMjAxLjAzIDc5LjgyIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yMSIgcG9pbnRzPSIyNDguMjMgMjE0Ljk2IDIxMi43MiAyMTAuNDMgMjMzLjgxIDE0MS4wMSAyNDguMjMgMjE0Ljk2Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0yMiIgcG9pbnRzPSIyMzMuODEgMTQxLjAxIDIxNC42MyAxMjguMzEgMjEyLjcyIDIxMC40MyAyMzMuODEgMTQxLjAxIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yMyIgcG9pbnRzPSIyMTIuNzIgMjEwLjQzIDIwMC4yMiAxODYuMjIgMjE0LjYzIDEyOC4zMSAyMTIuNzIgMjEwLjQzIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yNCIgcG9pbnRzPSIxOTIuMTggMTE5LjM3IDIxNC42MyAxMjguMzEgMjAwLjIyIDE4Ni4yMiAxOTIuMTggMTE5LjM3Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0yNSIgcG9pbnRzPSIxNzYuODggMTgxLjU0IDE5Mi4xOCAxMTkuMzcgMjAwLjIyIDE4Ni4yMiAxNzYuODggMTgxLjU0Ii8+PC9nPjxnIGlkPSJ0b29sX2JveCIgZGF0YS1uYW1lPSJ0b29sIGJveCI+PHBvbHlnb24gY2xhc3M9ImNscy0yNiIgcG9pbnRzPSI5OC41NCAyMDAuMTkgMTQ0LjkgMTkyLjIgMTQ3Ljk1IDE4Ni42MSAxMzkuNjQgMTg1LjExIDE0Mi45NiAxODMuNTQgMTQwLjA1IDE4My41NCAxMzYuNTkgMTg0LjQ3IDEzMi4xNiAxODMuNTQgOTguNTQgMjAwLjE5Ii8+PHBhdGggY2xhc3M9ImNscy0yNyIgZD0iTTcxLjQsMTY5LjU2bDM2LjM0LTMuOTRzMTAuODQsNi40NCwxMC40Nyw2LjQ5LTEuMzIsMy42NC0xLjMyLDMuNjRsLTM1LDUuNzlaIi8+PHBhdGggY2xhc3M9ImNscy0yOCIgZD0iTTEwNy41LDE2OC4xOHM5Ljc3LDYuMyw5LjY5LDUuOTEsMS0yLDEtMmwtMTAuNDctNi40OVoiLz48cG9seWdvbiBjbGFzcz0iY2xzLTI5IiBwb2ludHM9IjcxIDE3Mi41MSAxMDcuNSAxNjguMTggMTA3Ljc0IDE2NS42MiA3MS40IDE2OS41NiA3MSAxNzIuNTEiLz48cG9seWdvbiBjbGFzcz0iY2xzLTI3IiBwb2ludHM9IjgzLjI1IDE3OC4yOSAxMTkuMjIgMTcyLjczIDEzNC43OSAxNzcuNDUgMTI4LjcgMTg0LjQgOTQuMDMgMTkxLjQ3IDgzLjI1IDE3OC4yOSIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMjkiIHBvaW50cz0iMTE4LjcyIDE3Mi44MSA4My4yNSAxNzguMjkgOTQuMDMgMTkxLjQ3IDExOS42NyAxODAuNDkgMTE4LjcyIDE3Mi44MSIvPjxwYXRoIGNsYXNzPSJjbHMtMzAiIGQ9Ik0xMjEuMywxNzIuNjZhMy43NCwzLjc0LDAsMSwwLTMuNzktMi4zNWgwTDEwOSwxODYuNDRsMy45NCwyLjA3Wm0tMy4xMy0zLjYxLDEuMzEtMi41MSwyLjgzLS4xMSwxLjUxLDIuMzktMS4zMSwyLjUxLTIuODMuMTFaIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yOCIgcG9pbnRzPSI5OC41NCAyMDAuMTkgMTM1LjMgMTkxLjc5IDEzNC43OSAxNzcuNDUgOTcuNiAxODQuMzEgOTguNTQgMjAwLjE5Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0zMSIgcG9pbnRzPSI5Ny42IDE4NC4zMSA4My4yNSAxNzguMjkgODQuMjkgMTkzLjQ4IDk4LjU0IDIwMC4xOSA5Ny42IDE4NC4zMSIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMzEiIHBvaW50cz0iODIuNjEgMTc4LjM3IDgxLjkxIDE4MS41NCA3MC42OSAxNzIuNzMgNzEuNCAxNjkuNTYgODIuNjEgMTc4LjM3Ii8+PHBhdGggY2xhc3M9ImNscy0zMiIgZD0iTTExNC44OCwxODVsLjQsMi41N3MuNzYsMS4zNiwxLjkxLDEuMTIuODgtMS44My44OC0xLjgzbC0uMy0yLjQxWiIvPjxwYXRoIGNsYXNzPSJjbHMtMzMiIGQ9Ik0xMTUuMjYsMTg1LjA2bC4zOSwyLjU3cy42LDEuMjksMS43NCwxLjA2LDEtMS43NywxLTEuNzdsLS4zLTIuNDFaIi8+PHBvbHlnb24gY2xhc3M9ImNscy0zNCIgcG9pbnRzPSIxMTguMTQgMTg0LjUxIDExNy43NyAxODQuNDcgMTE0Ljg5IDE4NS4wMiAxMTUuMjYgMTg1LjA2IDExOC4xNCAxODQuNTEiLz48L2c+PC9zdmc+';
|
|
28625
28489
|
|
|
28626
|
-
|
|
28490
|
+
const LuiErrorPage = (props) => {
|
|
28627
28491
|
return (React__default.createElement("div", { className: 'LuiErrorPage' },
|
|
28628
28492
|
props.header,
|
|
28629
28493
|
React__default.createElement("div", { className: 'Container' },
|
|
@@ -28634,36 +28498,36 @@ var LuiErrorPage = function (props) {
|
|
|
28634
28498
|
props.footer));
|
|
28635
28499
|
};
|
|
28636
28500
|
|
|
28637
|
-
|
|
28501
|
+
const userHasAnyPrivilege = (privileges, selectedFirm) => {
|
|
28638
28502
|
return (privileges.length === 0 ||
|
|
28639
28503
|
(selectedFirm !== undefined &&
|
|
28640
|
-
selectedFirm.privileges.filter(
|
|
28504
|
+
selectedFirm.privileges.filter((value) => privileges.indexOf(value) > -1)
|
|
28641
28505
|
.length > 0));
|
|
28642
28506
|
};
|
|
28643
|
-
|
|
28644
|
-
|
|
28507
|
+
const userIsInternal = (user) => {
|
|
28508
|
+
const loginType = user?.loginType.code || user?.loginType;
|
|
28645
28509
|
return loginType === 'INTN';
|
|
28646
28510
|
};
|
|
28647
28511
|
|
|
28648
28512
|
function useLOLUserContext() {
|
|
28649
28513
|
return useContext(LOLUserContext);
|
|
28650
28514
|
}
|
|
28651
|
-
|
|
28515
|
+
const LOLUserContext = React__default.createContext({
|
|
28652
28516
|
user: undefined,
|
|
28653
28517
|
selectedFirm: undefined,
|
|
28654
|
-
changeFirm:
|
|
28518
|
+
changeFirm: (firmId) => {
|
|
28655
28519
|
console.error('Called changeFirm before UserContext loaded', firmId);
|
|
28656
28520
|
},
|
|
28657
|
-
isInternal:
|
|
28658
|
-
hasAnyPrivilege:
|
|
28521
|
+
isInternal: () => false,
|
|
28522
|
+
hasAnyPrivilege: () => false,
|
|
28659
28523
|
});
|
|
28660
28524
|
function LOLUserContextProvider(props) {
|
|
28661
|
-
|
|
28662
|
-
|
|
28663
|
-
|
|
28664
|
-
useEffect(
|
|
28525
|
+
const { isLoading, data, isError } = useGetUserInfo();
|
|
28526
|
+
const [selectedFirm, setSelectedFirm] = useState();
|
|
28527
|
+
const [ready, setReady] = useState(false);
|
|
28528
|
+
useEffect(() => {
|
|
28665
28529
|
// User data is still loading
|
|
28666
|
-
if (!
|
|
28530
|
+
if (!data?.user) {
|
|
28667
28531
|
return;
|
|
28668
28532
|
}
|
|
28669
28533
|
// Clear firm value if there are no firms
|
|
@@ -28674,23 +28538,22 @@ function LOLUserContextProvider(props) {
|
|
|
28674
28538
|
}
|
|
28675
28539
|
if (data.user.firms.length > 0 &&
|
|
28676
28540
|
(!getSelectedFirmIdCache() ||
|
|
28677
|
-
!data.user.firms.find(
|
|
28678
|
-
|
|
28541
|
+
!data.user.firms.find((firm) => firm.id === getSelectedFirmIdCache()))) {
|
|
28542
|
+
const firstFirm = data.user.firms[0];
|
|
28679
28543
|
setSelectedFirmCache(firstFirm.id, firstFirm.name);
|
|
28680
28544
|
setSelectedFirm(firstFirm);
|
|
28681
28545
|
setReady(true);
|
|
28682
28546
|
}
|
|
28683
28547
|
else {
|
|
28684
28548
|
// pull firm from cache and use it
|
|
28685
|
-
|
|
28686
|
-
|
|
28549
|
+
const selectedFirmIdFromCache = getSelectedFirmIdCache();
|
|
28550
|
+
const selectedFirmDerivedFromCache = data.user.firms.find((firm) => firm.id === selectedFirmIdFromCache);
|
|
28687
28551
|
setSelectedFirm(selectedFirmDerivedFromCache || undefined);
|
|
28688
28552
|
setReady(true);
|
|
28689
28553
|
}
|
|
28690
28554
|
}, [data]);
|
|
28691
|
-
|
|
28692
|
-
|
|
28693
|
-
var firm = (_a = data === null || data === void 0 ? void 0 : data.user) === null || _a === void 0 ? void 0 : _a.firms.find(function (f) {
|
|
28555
|
+
const changeFirm = useCallback((firmId) => {
|
|
28556
|
+
const firm = data?.user?.firms.find((f) => {
|
|
28694
28557
|
return f.id === firmId;
|
|
28695
28558
|
});
|
|
28696
28559
|
if (firm === undefined) {
|
|
@@ -28701,14 +28564,12 @@ function LOLUserContextProvider(props) {
|
|
|
28701
28564
|
setSelectedFirmCache(firm.id, firm.name);
|
|
28702
28565
|
setSelectedFirm(firm);
|
|
28703
28566
|
}, [data]);
|
|
28704
|
-
|
|
28705
|
-
|
|
28706
|
-
|
|
28707
|
-
|
|
28708
|
-
useEffect(function () {
|
|
28709
|
-
var onCachedFirmUpdate = function (event) {
|
|
28567
|
+
const isInternal = useCallback(() => userIsInternal(data?.user), [data]);
|
|
28568
|
+
const hasAnyPrivilege = useCallback((privileges) => userHasAnyPrivilege(privileges, selectedFirm), [selectedFirm]);
|
|
28569
|
+
useEffect(() => {
|
|
28570
|
+
const onCachedFirmUpdate = (event) => {
|
|
28710
28571
|
if (event.storageArea === localStorage && event.key === FIRM_KEY) {
|
|
28711
|
-
|
|
28572
|
+
const selectedFirmId = event.newValue;
|
|
28712
28573
|
if (selectedFirmId) {
|
|
28713
28574
|
changeFirm(selectedFirmId);
|
|
28714
28575
|
}
|
|
@@ -28719,7 +28580,7 @@ function LOLUserContextProvider(props) {
|
|
|
28719
28580
|
window.addEventListener('storage', onCachedFirmUpdate, false);
|
|
28720
28581
|
}
|
|
28721
28582
|
// cleanup listener on unmount
|
|
28722
|
-
return
|
|
28583
|
+
return () => {
|
|
28723
28584
|
window.removeEventListener('storage', onCachedFirmUpdate, false);
|
|
28724
28585
|
};
|
|
28725
28586
|
}, [ready, changeFirm]);
|
|
@@ -28733,10 +28594,10 @@ function LOLUserContextProvider(props) {
|
|
|
28733
28594
|
if (data && data.user && data.user.id) {
|
|
28734
28595
|
return (React__default.createElement(LOLUserContext.Provider, { value: {
|
|
28735
28596
|
user: data.user,
|
|
28736
|
-
selectedFirm
|
|
28737
|
-
changeFirm
|
|
28738
|
-
isInternal
|
|
28739
|
-
hasAnyPrivilege
|
|
28597
|
+
selectedFirm,
|
|
28598
|
+
changeFirm,
|
|
28599
|
+
isInternal,
|
|
28600
|
+
hasAnyPrivilege,
|
|
28740
28601
|
} }, props.children));
|
|
28741
28602
|
}
|
|
28742
28603
|
else {
|
|
@@ -28745,41 +28606,24 @@ function LOLUserContextProvider(props) {
|
|
|
28745
28606
|
}
|
|
28746
28607
|
}
|
|
28747
28608
|
function useGetUserInfo() {
|
|
28748
|
-
|
|
28749
|
-
|
|
28750
|
-
|
|
28751
|
-
|
|
28752
|
-
|
|
28753
|
-
|
|
28754
|
-
url = "/auth/api/userinfo";
|
|
28755
|
-
return [4 /*yield*/, fetch(url)];
|
|
28756
|
-
case 1:
|
|
28757
|
-
res = _a.sent();
|
|
28758
|
-
return [4 /*yield*/, checkForStandardErrors(res)];
|
|
28759
|
-
case 2:
|
|
28760
|
-
_a.sent();
|
|
28761
|
-
return [4 /*yield*/, res.json()];
|
|
28762
|
-
case 3: return [2 /*return*/, _a.sent()];
|
|
28763
|
-
}
|
|
28764
|
-
});
|
|
28765
|
-
}); });
|
|
28609
|
+
return useQuery(`useGetUserInfo`, async () => {
|
|
28610
|
+
const url = `/auth/api/userinfo`;
|
|
28611
|
+
const res = await fetch(url);
|
|
28612
|
+
await checkForStandardErrors(res);
|
|
28613
|
+
return await res.json();
|
|
28614
|
+
});
|
|
28766
28615
|
}
|
|
28767
28616
|
function reAuthUser() {
|
|
28768
|
-
|
|
28769
|
-
window.location.assign(
|
|
28617
|
+
const redirectPath = `${window.location.pathname}${window.location.search}${window.location.hash}`;
|
|
28618
|
+
window.location.assign(`/auth/login?redirectPath=${encodeURIComponent(redirectPath)}`);
|
|
28770
28619
|
}
|
|
28771
|
-
function checkForStandardErrors(res) {
|
|
28772
|
-
|
|
28773
|
-
|
|
28774
|
-
|
|
28775
|
-
reAuthUser();
|
|
28776
|
-
}
|
|
28777
|
-
return [2 /*return*/];
|
|
28778
|
-
});
|
|
28779
|
-
});
|
|
28620
|
+
async function checkForStandardErrors(res) {
|
|
28621
|
+
if (res.status !== 200) {
|
|
28622
|
+
reAuthUser();
|
|
28623
|
+
}
|
|
28780
28624
|
}
|
|
28781
|
-
|
|
28782
|
-
|
|
28625
|
+
const FIRM_KEY = 'firmId';
|
|
28626
|
+
const FIRM_NAME_KEY = 'firmName';
|
|
28783
28627
|
function getSelectedFirmIdCache() {
|
|
28784
28628
|
return window.localStorage.getItem(FIRM_KEY);
|
|
28785
28629
|
}
|
|
@@ -28794,21 +28638,21 @@ function setSelectedFirmCache(firmId, firmName) {
|
|
|
28794
28638
|
}
|
|
28795
28639
|
}
|
|
28796
28640
|
|
|
28797
|
-
|
|
28798
|
-
|
|
28799
|
-
|
|
28641
|
+
const ClearableLuiTextInput = (props) => {
|
|
28642
|
+
const [currentValue, setCurrentValue] = useState(props.value ? props.value : '');
|
|
28643
|
+
const clear = () => {
|
|
28800
28644
|
setCurrentValue('');
|
|
28801
28645
|
if (props.onValueChange) {
|
|
28802
28646
|
props.onValueChange('');
|
|
28803
28647
|
}
|
|
28804
28648
|
};
|
|
28805
|
-
|
|
28806
|
-
return (React__default.createElement(LuiTextInput,
|
|
28649
|
+
const cancelIcon = currentValue !== '' ? (React__default.createElement(LuiIcon, { alt: "clear", name: "ic_cancel_clear", size: "lg", className: 'LuiTextInput-iconPosition', spanProps: { onClick: clear } })) : undefined;
|
|
28650
|
+
return (React__default.createElement(LuiTextInput, { ...props, icon: cancelIcon, value: currentValue, onChange: (e) => {
|
|
28807
28651
|
setCurrentValue(e.target.value);
|
|
28808
28652
|
if (props.onValueChange) {
|
|
28809
28653
|
props.onValueChange(e.target.value);
|
|
28810
28654
|
}
|
|
28811
|
-
} }))
|
|
28655
|
+
} }));
|
|
28812
28656
|
};
|
|
28813
28657
|
|
|
28814
28658
|
/**
|
|
@@ -28817,42 +28661,42 @@ var ClearableLuiTextInput = function (props) {
|
|
|
28817
28661
|
* @param props
|
|
28818
28662
|
* @constructor
|
|
28819
28663
|
*/
|
|
28820
|
-
|
|
28821
|
-
|
|
28822
|
-
|
|
28664
|
+
const LuiFilterContainer = (props) => {
|
|
28665
|
+
const { renderFunction, filterFunction, showFilter = true, isFilterClearable = true, } = props;
|
|
28666
|
+
const [filter, setFilter] = useState('');
|
|
28823
28667
|
return (React__default.createElement("div", null,
|
|
28824
28668
|
showFilter && (React__default.createElement("div", { className: 'LuiFilterContainer-filter-container LuiDeprecatedForms' },
|
|
28825
28669
|
isFilterClearable && (React__default.createElement(ClearableLuiTextInput, { label: 'Filter', inputProps: {
|
|
28826
|
-
placeholder: 'Type to filter'
|
|
28827
|
-
}, hideLabel: true, onValueChange:
|
|
28828
|
-
!isFilterClearable && (React__default.createElement("input", { type: "text", placeholder: "Type to filter", value: filter, onChange:
|
|
28670
|
+
placeholder: 'Type to filter',
|
|
28671
|
+
}, hideLabel: true, onValueChange: (value) => setFilter(value) })),
|
|
28672
|
+
!isFilterClearable && (React__default.createElement("input", { type: "text", placeholder: "Type to filter", value: filter, onChange: (e) => setFilter(e.target.value) })))),
|
|
28829
28673
|
renderFunction(filterFunction(filter))));
|
|
28830
28674
|
};
|
|
28831
28675
|
|
|
28832
28676
|
function useLOLGlobalClientRefContext() {
|
|
28833
28677
|
return useContext(LOLGlobalClientRefContext);
|
|
28834
28678
|
}
|
|
28835
|
-
|
|
28679
|
+
const LOLGlobalClientRefContext = React__default.createContext({
|
|
28836
28680
|
clientRef: '',
|
|
28837
|
-
changeClientRef:
|
|
28681
|
+
changeClientRef: () => {
|
|
28838
28682
|
// no-op
|
|
28839
|
-
}
|
|
28683
|
+
},
|
|
28840
28684
|
});
|
|
28841
|
-
|
|
28842
|
-
|
|
28843
|
-
|
|
28844
|
-
|
|
28845
|
-
|
|
28846
|
-
|
|
28685
|
+
const LOLGlobalClientRefContextProvider = (props) => {
|
|
28686
|
+
const { useUserIdAsClientReference } = props;
|
|
28687
|
+
const { user, selectedFirm } = useLOLUserContext();
|
|
28688
|
+
const [clientRef, setClientRef] = useState('');
|
|
28689
|
+
const [lastSelectedFirmId, setLastSelectedFirmId] = useState(undefined);
|
|
28690
|
+
const changeClientRef = useCallback((clientRef) => {
|
|
28847
28691
|
setClientRef(clientRef);
|
|
28848
28692
|
setGlobalClientRefCache(clientRef);
|
|
28849
28693
|
}, []);
|
|
28850
|
-
useEffect(
|
|
28694
|
+
useEffect(() => {
|
|
28851
28695
|
if (!user) {
|
|
28852
28696
|
return;
|
|
28853
28697
|
}
|
|
28854
|
-
|
|
28855
|
-
|
|
28698
|
+
const cachedClientRef = getGlobalClientRefCache();
|
|
28699
|
+
let clientRef = '';
|
|
28856
28700
|
if (cachedClientRef === null && useUserIdAsClientReference) {
|
|
28857
28701
|
clientRef = user.id;
|
|
28858
28702
|
}
|
|
@@ -28861,9 +28705,9 @@ var LOLGlobalClientRefContextProvider = function (props) {
|
|
|
28861
28705
|
}
|
|
28862
28706
|
setClientRef(clientRef);
|
|
28863
28707
|
setGlobalClientRefCache(clientRef);
|
|
28864
|
-
setLastSelectedFirmId(selectedFirm
|
|
28708
|
+
setLastSelectedFirmId(selectedFirm?.id);
|
|
28865
28709
|
}, [user, selectedFirm, useUserIdAsClientReference]);
|
|
28866
|
-
useEffect(
|
|
28710
|
+
useEffect(() => {
|
|
28867
28711
|
if (!selectedFirm ||
|
|
28868
28712
|
!lastSelectedFirmId ||
|
|
28869
28713
|
selectedFirm.id === lastSelectedFirmId) {
|
|
@@ -28880,11 +28724,11 @@ var LOLGlobalClientRefContextProvider = function (props) {
|
|
|
28880
28724
|
useUserIdAsClientReference,
|
|
28881
28725
|
]);
|
|
28882
28726
|
return (React__default.createElement(LOLGlobalClientRefContext.Provider, { value: {
|
|
28883
|
-
clientRef
|
|
28884
|
-
changeClientRef
|
|
28727
|
+
clientRef,
|
|
28728
|
+
changeClientRef,
|
|
28885
28729
|
} }, props.children));
|
|
28886
28730
|
};
|
|
28887
|
-
|
|
28731
|
+
const GLOBAL_CLIENT_REFERENCE_KEY = 'globalClientReference';
|
|
28888
28732
|
function getGlobalClientRefCache() {
|
|
28889
28733
|
return window.sessionStorage.getItem(GLOBAL_CLIENT_REFERENCE_KEY);
|
|
28890
28734
|
}
|
|
@@ -28897,17 +28741,16 @@ function setGlobalClientRefCache(clientReference) {
|
|
|
28897
28741
|
}
|
|
28898
28742
|
}
|
|
28899
28743
|
|
|
28900
|
-
|
|
28901
|
-
|
|
28902
|
-
|
|
28903
|
-
|
|
28904
|
-
|
|
28905
|
-
var clientRefElement = showClientRef ? (React__default.createElement(React__default.Fragment, null,
|
|
28744
|
+
const LOLFirmSwitcherMenu = ({ showClientRef = false, ...restOfProps }) => {
|
|
28745
|
+
const { user, selectedFirm, changeFirm, isInternal } = useLOLUserContext();
|
|
28746
|
+
const { clientRef } = useLOLGlobalClientRefContext();
|
|
28747
|
+
const firms = user.firms;
|
|
28748
|
+
const clientRefElement = showClientRef ? (React__default.createElement(React__default.Fragment, null,
|
|
28906
28749
|
React__default.createElement("br", null),
|
|
28907
28750
|
React__default.createElement("span", null,
|
|
28908
28751
|
"Client Ref: ",
|
|
28909
28752
|
clientRef))) : null;
|
|
28910
|
-
|
|
28753
|
+
const label = isInternal() ? (React__default.createElement("div", { className: "LOLFirmSwitcherMenu-header" },
|
|
28911
28754
|
user.id,
|
|
28912
28755
|
clientRefElement)) : (React__default.createElement("div", { className: "LOLFirmSwitcherMenu-header" },
|
|
28913
28756
|
selectedFirm && (React__default.createElement(React__default.Fragment, null,
|
|
@@ -28917,97 +28760,69 @@ var LOLFirmSwitcherMenu = function (_a) {
|
|
|
28917
28760
|
"User ID: ",
|
|
28918
28761
|
user.id),
|
|
28919
28762
|
clientRefElement));
|
|
28920
|
-
|
|
28763
|
+
const dropdownMenuProps = {
|
|
28764
|
+
...restOfProps,
|
|
28765
|
+
label,
|
|
28766
|
+
};
|
|
28921
28767
|
if (firms.length < 2) {
|
|
28922
|
-
return React__default.createElement(LuiHeaderMenuItem,
|
|
28768
|
+
return React__default.createElement(LuiHeaderMenuItem, { ...dropdownMenuProps });
|
|
28923
28769
|
}
|
|
28924
|
-
return (React__default.createElement(LuiDropdownMenu,
|
|
28770
|
+
return (React__default.createElement(LuiDropdownMenu, { ...dropdownMenuProps },
|
|
28925
28771
|
React__default.createElement(LOLFirmSwitcherMenuContent, { firms: firms, selectedFirm: selectedFirm, changeFirm: changeFirm })));
|
|
28926
28772
|
};
|
|
28927
|
-
|
|
28928
|
-
|
|
28929
|
-
var showFilter = firms.length >= minimumFilterCount;
|
|
28773
|
+
const LOLFirmSwitcherMenuContent = ({ firms, selectedFirm, changeFirm, collapsible = false, minimumFilterCount = 5, }) => {
|
|
28774
|
+
const showFilter = firms.length >= minimumFilterCount;
|
|
28930
28775
|
return (React__default.createElement(LuiDrawerMenuSection, { title: "Switch account", collapsible: collapsible && showFilter },
|
|
28931
|
-
React__default.createElement(FirmSwitcher, { options: firms, selectedId: selectedFirm
|
|
28932
|
-
return [2 /*return*/, changeFirm(id)];
|
|
28933
|
-
}); }); }, showFilter: showFilter })));
|
|
28776
|
+
React__default.createElement(FirmSwitcher, { options: firms, selectedId: selectedFirm?.id, onSelect: async (id) => changeFirm(id), showFilter: showFilter })));
|
|
28934
28777
|
};
|
|
28935
|
-
|
|
28936
|
-
|
|
28937
|
-
return (React__default.createElement("div", { className: 'LOLFirmSwitcherMenu-option', onClick: function () { return onSelect(id); }, "aria-disabled": disabled, "data-testid": "firm-".concat(id) },
|
|
28778
|
+
const FirmOption = ({ value: { id, name }, onSelect, selected, disabled, }) => {
|
|
28779
|
+
return (React__default.createElement("div", { className: 'LOLFirmSwitcherMenu-option', onClick: () => onSelect(id), "aria-disabled": disabled, "data-testid": `firm-${id}` },
|
|
28938
28780
|
React__default.createElement("span", null, name),
|
|
28939
28781
|
selected && React__default.createElement("i", { className: "material-icons-round" }, "check_circle")));
|
|
28940
28782
|
};
|
|
28941
|
-
|
|
28942
|
-
|
|
28943
|
-
|
|
28944
|
-
|
|
28945
|
-
|
|
28946
|
-
|
|
28947
|
-
|
|
28948
|
-
|
|
28949
|
-
|
|
28950
|
-
|
|
28951
|
-
|
|
28952
|
-
|
|
28953
|
-
setBusy(false);
|
|
28954
|
-
_a.label = 2;
|
|
28955
|
-
case 2: return [2 /*return*/];
|
|
28956
|
-
}
|
|
28957
|
-
});
|
|
28958
|
-
}); };
|
|
28959
|
-
var filterFunction = useCallback(function (filterString) {
|
|
28960
|
-
var upperCaseFilterString = filterString.trim().toUpperCase();
|
|
28961
|
-
return options.filter(function (firm) {
|
|
28962
|
-
return firm.name.toUpperCase().includes(upperCaseFilterString);
|
|
28963
|
-
});
|
|
28783
|
+
const FirmSwitcher = ({ options, selectedId, onSelect, showFilter = true, }) => {
|
|
28784
|
+
const [busy, setBusy] = useState(false);
|
|
28785
|
+
const onSelectInternal = async (optionId) => {
|
|
28786
|
+
if (!busy) {
|
|
28787
|
+
setBusy(true);
|
|
28788
|
+
await onSelect(optionId);
|
|
28789
|
+
setBusy(false);
|
|
28790
|
+
}
|
|
28791
|
+
};
|
|
28792
|
+
const filterFunction = useCallback((filterString) => {
|
|
28793
|
+
const upperCaseFilterString = filterString.trim().toUpperCase();
|
|
28794
|
+
return options.filter((firm) => firm.name.toUpperCase().includes(upperCaseFilterString));
|
|
28964
28795
|
}, [options]);
|
|
28965
|
-
|
|
28966
|
-
return (React__default.createElement(React__default.Fragment, null, filteredOptions.map(
|
|
28796
|
+
const renderFunction = (filteredOptions) => {
|
|
28797
|
+
return (React__default.createElement(React__default.Fragment, null, filteredOptions.map((option) => (React__default.createElement(FirmOption, { key: option.id, value: option, selected: option.id === selectedId, onSelect: onSelectInternal, disabled: busy })))));
|
|
28967
28798
|
};
|
|
28968
28799
|
return (React__default.createElement("div", { className: "LOLFirmSwitcherMenu" },
|
|
28969
28800
|
React__default.createElement(LuiFilterContainer, { showFilter: showFilter, filterFunction: filterFunction, renderFunction: renderFunction })));
|
|
28970
28801
|
};
|
|
28971
28802
|
|
|
28972
|
-
|
|
28973
|
-
|
|
28974
|
-
|
|
28803
|
+
const LOLLogoutLink = (props) => {
|
|
28804
|
+
const redirectPathString = props.redirectPath();
|
|
28805
|
+
const { user } = useLOLUserContext();
|
|
28975
28806
|
if (!user) {
|
|
28976
28807
|
return null;
|
|
28977
28808
|
}
|
|
28978
|
-
|
|
28979
|
-
|
|
28980
|
-
|
|
28981
|
-
|
|
28982
|
-
|
|
28983
|
-
|
|
28984
|
-
|
|
28985
|
-
|
|
28986
|
-
|
|
28987
|
-
|
|
28988
|
-
|
|
28989
|
-
case 2:
|
|
28990
|
-
if (_a) {
|
|
28991
|
-
return [2 /*return*/];
|
|
28992
|
-
}
|
|
28993
|
-
return [4 /*yield*/, fetch('/auth/api/logout')];
|
|
28994
|
-
case 3:
|
|
28995
|
-
res = _b.sent();
|
|
28996
|
-
if (res.status === 200) {
|
|
28997
|
-
window.location.assign("/auth/login?redirectPath=".concat(redirectPathString));
|
|
28998
|
-
}
|
|
28999
|
-
return [2 /*return*/];
|
|
29000
|
-
}
|
|
29001
|
-
});
|
|
29002
|
-
}); };
|
|
29003
|
-
return React__default.createElement(LuiDrawerMenuOption, { label: "Logout ".concat(user.id), onClick: logout });
|
|
28809
|
+
const logout = async () => {
|
|
28810
|
+
if (props.callBackBeforeLogout &&
|
|
28811
|
+
(await props.callBackBeforeLogout()) === false) {
|
|
28812
|
+
return;
|
|
28813
|
+
}
|
|
28814
|
+
const res = await fetch('/auth/api/logout');
|
|
28815
|
+
if (res.status === 200) {
|
|
28816
|
+
window.location.assign(`/auth/login?redirectPath=${redirectPathString}`);
|
|
28817
|
+
}
|
|
28818
|
+
};
|
|
28819
|
+
return React__default.createElement(LuiDrawerMenuOption, { label: `Logout ${user.id}`, onClick: logout });
|
|
29004
28820
|
};
|
|
29005
28821
|
|
|
29006
|
-
|
|
29007
|
-
|
|
29008
|
-
|
|
29009
|
-
|
|
29010
|
-
var lastLoginISO = (_a = context === null || context === void 0 ? void 0 : context.user) === null || _a === void 0 ? void 0 : _a.lastLogin;
|
|
28822
|
+
const LOLUserLastLogin = () => {
|
|
28823
|
+
let lastLogin;
|
|
28824
|
+
const context = useLOLUserContext();
|
|
28825
|
+
const lastLoginISO = context?.user?.lastLogin;
|
|
29011
28826
|
lastLogin = lastLoginISO
|
|
29012
28827
|
? new Date(lastLoginISO).toLocaleString('en-NZ')
|
|
29013
28828
|
: null;
|
|
@@ -29021,11 +28836,11 @@ var LOLUserLastLogin = function () {
|
|
|
29021
28836
|
React__default.createElement("span", null, "Not you? Please, call us on 0800 665 463"))));
|
|
29022
28837
|
};
|
|
29023
28838
|
|
|
29024
|
-
|
|
29025
|
-
|
|
29026
|
-
|
|
29027
|
-
|
|
29028
|
-
useEffect(
|
|
28839
|
+
const LOLActiveFirmMessage = (props) => {
|
|
28840
|
+
const { selectedFirm, user } = useLOLUserContext();
|
|
28841
|
+
const [visible, setVisible] = useState(false);
|
|
28842
|
+
const hide = props.showFrom !== 'xl' ? { from: props.showFrom || 'sm' } : undefined;
|
|
28843
|
+
useEffect(() => {
|
|
29029
28844
|
setVisible(true);
|
|
29030
28845
|
}, [selectedFirm]);
|
|
29031
28846
|
if (!selectedFirm || !visible || user.firms.length < 2) {
|
|
@@ -29035,7 +28850,7 @@ var LOLActiveFirmMessage = function (props) {
|
|
|
29035
28850
|
React__default.createElement(LuiBannerContent, { level: 'info' },
|
|
29036
28851
|
"Active account is ",
|
|
29037
28852
|
selectedFirm.name,
|
|
29038
|
-
React__default.createElement("button", { "aria-label": "Close dialog", onClick:
|
|
28853
|
+
React__default.createElement("button", { "aria-label": "Close dialog", onClick: () => {
|
|
29039
28854
|
setVisible(false);
|
|
29040
28855
|
} },
|
|
29041
28856
|
React__default.createElement("i", { className: "material-icons-round" }, "close")))));
|
|
@@ -29043,20 +28858,17 @@ var LOLActiveFirmMessage = function (props) {
|
|
|
29043
28858
|
|
|
29044
28859
|
var ExternalIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzk4OTE4OSI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE5IDE5SDVWNWg3VjNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPg==';
|
|
29045
28860
|
|
|
29046
|
-
|
|
29047
|
-
|
|
29048
|
-
|
|
29049
|
-
|
|
29050
|
-
|
|
29051
|
-
|
|
29052
|
-
|
|
29053
|
-
|
|
29054
|
-
|
|
29055
|
-
|
|
29056
|
-
|
|
29057
|
-
return [2 /*return*/];
|
|
29058
|
-
});
|
|
29059
|
-
}); };
|
|
28861
|
+
const LOLAuthorisedLink = (props) => {
|
|
28862
|
+
const { hasAnyPrivilege } = useLOLUserContext();
|
|
28863
|
+
const { icon, activeIcon, active, label, path, openExternally, anyPrivileges, } = props;
|
|
28864
|
+
const onClickHandler = async () => {
|
|
28865
|
+
if (openExternally) {
|
|
28866
|
+
window.open(path, '_blank');
|
|
28867
|
+
}
|
|
28868
|
+
else {
|
|
28869
|
+
window.location.assign(path);
|
|
28870
|
+
}
|
|
28871
|
+
};
|
|
29060
28872
|
if (!hasAnyPrivilege(anyPrivileges)) {
|
|
29061
28873
|
return null;
|
|
29062
28874
|
}
|
|
@@ -29085,26 +28897,26 @@ var TitlesIconActive = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy
|
|
|
29085
28897
|
|
|
29086
28898
|
function createLink(pathname, label, target, activeIcon, icon, anyPrivileges) {
|
|
29087
28899
|
return {
|
|
29088
|
-
label
|
|
28900
|
+
label,
|
|
29089
28901
|
path: target,
|
|
29090
|
-
icon
|
|
29091
|
-
activeIcon
|
|
28902
|
+
icon,
|
|
28903
|
+
activeIcon,
|
|
29092
28904
|
active: pathname.startsWith(target),
|
|
29093
|
-
anyPrivileges
|
|
29094
|
-
openExternally: true
|
|
28905
|
+
anyPrivileges,
|
|
28906
|
+
openExternally: true,
|
|
29095
28907
|
};
|
|
29096
28908
|
}
|
|
29097
|
-
|
|
29098
|
-
|
|
29099
|
-
|
|
29100
|
-
|
|
29101
|
-
|
|
29102
|
-
|
|
29103
|
-
|
|
28909
|
+
const SEARCH_LABEL = 'Search';
|
|
28910
|
+
const NOC_LABEL = 'Post registered NoC';
|
|
28911
|
+
const SURVEY_LABEL = 'Survey';
|
|
28912
|
+
const TITLES_LABEL = 'Titles';
|
|
28913
|
+
const LOLAppLauncherMenu = (props) => {
|
|
28914
|
+
const { user, isInternal } = useLOLUserContext();
|
|
28915
|
+
const { pathname, enableNOCLink = false, enableSurveyLink = false, enableTitlesLink = false, } = props;
|
|
29104
28916
|
if (!user) {
|
|
29105
28917
|
return null;
|
|
29106
28918
|
}
|
|
29107
|
-
|
|
28919
|
+
const links = [
|
|
29108
28920
|
createLink(pathname, SEARCH_LABEL, '/search', SearchIconActive, SearchIcon, isInternal() ? [] : ['prv_search_privilege', 'prv_spatial_view']),
|
|
29109
28921
|
];
|
|
29110
28922
|
if (!isInternal() && enableNOCLink) {
|
|
@@ -29148,13 +28960,13 @@ var LOLAppLauncherMenu = function (props) {
|
|
|
29148
28960
|
'prv_withdraw_dealing',
|
|
29149
28961
|
]));
|
|
29150
28962
|
}
|
|
29151
|
-
return (React__default.createElement(LuiDrawerMenuSection, { title: "Launch app" }, links.map(
|
|
28963
|
+
return (React__default.createElement(LuiDrawerMenuSection, { title: "Launch app" }, links.map((link) => (React__default.createElement(LOLAuthorisedLink, { key: link.path, ...link })))));
|
|
29152
28964
|
};
|
|
29153
28965
|
|
|
29154
|
-
|
|
29155
|
-
|
|
29156
|
-
|
|
29157
|
-
|
|
28966
|
+
const LOLDrawerMenuFirmSwitcher = (props) => {
|
|
28967
|
+
const { minimumFilterCount } = props;
|
|
28968
|
+
const { user, selectedFirm, changeFirm } = useLOLUserContext();
|
|
28969
|
+
const firms = user?.firms;
|
|
29158
28970
|
if (!firms || !selectedFirm) {
|
|
29159
28971
|
return null;
|
|
29160
28972
|
}
|
|
@@ -29164,18 +28976,18 @@ var LOLDrawerMenuFirmSwitcher = function (props) {
|
|
|
29164
28976
|
return (React__default.createElement(LOLFirmSwitcherMenuContent, { firms: firms, selectedFirm: selectedFirm, changeFirm: changeFirm, collapsible: true, minimumFilterCount: minimumFilterCount }));
|
|
29165
28977
|
};
|
|
29166
28978
|
|
|
29167
|
-
|
|
28979
|
+
const LOLDrawerMenu = (props) => {
|
|
29168
28980
|
return (React__default.createElement(LuiDrawerMenu, { hasStickyHeader: props.hasStickyHeader },
|
|
29169
28981
|
React__default.createElement("div", { className: "LOLDrawerMenu" },
|
|
29170
28982
|
React__default.createElement("div", { className: "LOLDrawerMenu-contents" }, props.children),
|
|
29171
28983
|
React__default.createElement("div", { className: "LOLDrawerMenu-footer" },
|
|
29172
28984
|
React__default.createElement(LOLUserLastLogin, null)))));
|
|
29173
28985
|
};
|
|
29174
|
-
|
|
29175
|
-
|
|
28986
|
+
const LOLCommonDrawerMenu = (props) => {
|
|
28987
|
+
const { appSpecificLinks, appSpecificSections, path, hasStickyHeader, showRequestsLink, ...restOfProps } = props;
|
|
29176
28988
|
return (React__default.createElement(LOLDrawerMenu, { hasStickyHeader: hasStickyHeader },
|
|
29177
28989
|
appSpecificSections,
|
|
29178
|
-
React__default.createElement(LOLAppLauncherMenu,
|
|
28990
|
+
React__default.createElement(LOLAppLauncherMenu, { pathname: path, ...restOfProps }),
|
|
29179
28991
|
React__default.createElement(LOLDrawerMenuFirmSwitcher, { minimumFilterCount: 5 }),
|
|
29180
28992
|
showRequestsLink && (React__default.createElement(React__default.Fragment, null,
|
|
29181
28993
|
React__default.createElement(LuiDrawerMenuDivider, null),
|
|
@@ -29186,24 +28998,24 @@ var LOLCommonDrawerMenu = function (props) {
|
|
|
29186
28998
|
React__default.createElement(LuiDrawerMenuDivider, null),
|
|
29187
28999
|
React__default.createElement(LOLCommonDrawerMenuAfterLinks, { path: path })));
|
|
29188
29000
|
};
|
|
29189
|
-
|
|
29190
|
-
|
|
29191
|
-
|
|
29192
|
-
|
|
29193
|
-
|
|
29001
|
+
const LOLCommonDrawerMenuAfterLinks = (props) => {
|
|
29002
|
+
const { isInternal } = useLOLUserContext();
|
|
29003
|
+
const { path } = props;
|
|
29004
|
+
const contextPath = path.substr(0, path.indexOf('/', 1));
|
|
29005
|
+
const gotoLink = (url) => {
|
|
29194
29006
|
window.location.assign(url);
|
|
29195
29007
|
};
|
|
29196
29008
|
return (React__default.createElement(React__default.Fragment, null,
|
|
29197
|
-
!isInternal() && (React__default.createElement(LuiDrawerMenuOption, { label: "Change password", onClick:
|
|
29198
|
-
gotoLink(
|
|
29009
|
+
!isInternal() && (React__default.createElement(LuiDrawerMenuOption, { label: "Change password", onClick: () => {
|
|
29010
|
+
gotoLink(`/manage/my-preferences?redirectPath=${encodeURIComponent(path)}`);
|
|
29199
29011
|
} })),
|
|
29200
|
-
React__default.createElement(LOLLogoutLink, { redirectPath:
|
|
29012
|
+
React__default.createElement(LOLLogoutLink, { redirectPath: () => contextPath })));
|
|
29201
29013
|
};
|
|
29202
|
-
|
|
29203
|
-
|
|
29014
|
+
const LOLCommonMenuRequestsLink = () => {
|
|
29015
|
+
const openRequestsApp = () => {
|
|
29204
29016
|
window.open('/requests', '_blank');
|
|
29205
29017
|
};
|
|
29206
|
-
return (React__default.createElement(LuiDrawerMenuOption, { label: 'Create request', onClick:
|
|
29018
|
+
return (React__default.createElement(LuiDrawerMenuOption, { label: 'Create request', onClick: () => {
|
|
29207
29019
|
openRequestsApp();
|
|
29208
29020
|
}, badge: React__default.createElement("img", { src: ExternalIcon, alt: "Link opens in a new tab", style: { width: '16px', height: '16px', marginTop: '4px' } }) }));
|
|
29209
29021
|
};
|
|
@@ -32737,27 +32549,26 @@ styleInject(css_248z$2);
|
|
|
32737
32549
|
var css_248z$1 = ".tippy-box{border:1px transparent}.tippy-box[data-placement^=top]>.tippy-arrow:after{border-top-color:inherit;border-width:8px 8px 0;bottom:-8px;left:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:inherit;border-width:0 8px 8px;top:-8px;left:0}.tippy-box[data-placement^=left]>.tippy-arrow:after{border-left-color:inherit;border-width:8px 0 8px 8px;right:-8px;top:0}.tippy-box[data-placement^=right]>.tippy-arrow:after{border-width:8px 8px 8px 0;left:-8px;top:0;border-right-color:inherit}.tippy-box[data-placement^=top]>.tippy-svg-arrow>svg:first-child:not(:last-child){top:17px}.tippy-box[data-placement^=bottom]>.tippy-svg-arrow>svg:first-child:not(:last-child){bottom:17px}.tippy-box[data-placement^=left]>.tippy-svg-arrow>svg:first-child:not(:last-child){left:12px}.tippy-box[data-placement^=right]>.tippy-svg-arrow>svg:first-child:not(:last-child){right:12px}.tippy-arrow{border-color:inherit}.tippy-arrow:after{content:\"\";z-index:-1;position:absolute;border-color:transparent;border-style:solid}";
|
|
32738
32550
|
styleInject(css_248z$1);
|
|
32739
32551
|
|
|
32740
|
-
|
|
32741
|
-
|
|
32742
|
-
|
|
32743
|
-
|
|
32744
|
-
|
|
32552
|
+
let id = 0;
|
|
32553
|
+
const getKey = () => id++;
|
|
32554
|
+
const LuiTooltip = (props) => {
|
|
32555
|
+
const { children, message, placement, trigger, animation = true } = props;
|
|
32556
|
+
const id = `LuiToolTip_${useMemo(getKey, [])}`;
|
|
32745
32557
|
if (typeof message !== 'string') {
|
|
32746
32558
|
throw new Error('LuiTooltip message must be a string!');
|
|
32747
32559
|
}
|
|
32748
|
-
useEffect(
|
|
32749
|
-
tippy(
|
|
32560
|
+
useEffect(() => {
|
|
32561
|
+
tippy(`#${id}`, {
|
|
32750
32562
|
content: message,
|
|
32751
32563
|
arrow: true,
|
|
32752
|
-
trigger
|
|
32564
|
+
trigger,
|
|
32753
32565
|
theme: 'LUI',
|
|
32754
|
-
placement
|
|
32566
|
+
placement,
|
|
32755
32567
|
offset: [0, 24],
|
|
32756
|
-
animation
|
|
32568
|
+
animation,
|
|
32757
32569
|
});
|
|
32758
|
-
return
|
|
32759
|
-
|
|
32760
|
-
(_b = (_a = document.getElementById(id)) === null || _a === void 0 ? void 0 : _a._tippy) === null || _b === void 0 ? void 0 : _b.destroy();
|
|
32570
|
+
return () => {
|
|
32571
|
+
document.getElementById(id)?._tippy?.destroy();
|
|
32761
32572
|
};
|
|
32762
32573
|
}, [id, message, placement, trigger, animation]);
|
|
32763
32574
|
return React__default.createElement("span", { id: id }, children);
|
|
@@ -32776,49 +32587,48 @@ var LuiTooltip = function (props) {
|
|
|
32776
32587
|
```
|
|
32777
32588
|
*/
|
|
32778
32589
|
function useClickedOutsideElement(refElement, handleClickOutside) {
|
|
32779
|
-
React__default.useEffect(
|
|
32590
|
+
React__default.useEffect(() => {
|
|
32780
32591
|
function onOutsideClicked(event) {
|
|
32781
|
-
|
|
32782
|
-
if (!
|
|
32592
|
+
const element = refElement.current;
|
|
32593
|
+
if (!element?.contains(event.target)) {
|
|
32783
32594
|
handleClickOutside();
|
|
32784
32595
|
}
|
|
32785
32596
|
}
|
|
32786
32597
|
document.addEventListener('mousedown', onOutsideClicked);
|
|
32787
|
-
return
|
|
32598
|
+
return () => {
|
|
32788
32599
|
document.removeEventListener('mousedown', onOutsideClicked);
|
|
32789
32600
|
};
|
|
32790
32601
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
32791
32602
|
}, []);
|
|
32792
32603
|
}
|
|
32793
32604
|
|
|
32794
|
-
|
|
32605
|
+
const LuiBadge = (props) => (React__default.createElement("p", { className: clsx('LuiBadge', props.size === 'sm' && 'LuiBadge--sm', props.size === 'lg' && 'LuiBadge--lg', props.backgroundFill && 'LuiBadge--fill', props.variation === 'warning' && 'LuiBadge--warning'), "aria-roledescription": props.ariaRoleDescription }, props.children));
|
|
32795
32606
|
|
|
32796
|
-
|
|
32607
|
+
const LuiSidePanelContext = React__default.createContext({ setProps: () => undefined });
|
|
32797
32608
|
/* eslint-disable react/prop-types */
|
|
32798
|
-
|
|
32799
|
-
|
|
32800
|
-
|
|
32801
|
-
|
|
32802
|
-
|
|
32803
|
-
return function () {
|
|
32609
|
+
const LuiSidePanel = ({ children, onClose, width, top }) => {
|
|
32610
|
+
const { setProps } = React__default.useContext(LuiSidePanelContext);
|
|
32611
|
+
React__default.useEffect(() => {
|
|
32612
|
+
setProps({ children, onClose, width, top });
|
|
32613
|
+
return () => {
|
|
32804
32614
|
setProps(undefined);
|
|
32805
32615
|
};
|
|
32806
32616
|
}, [setProps, children, onClose, width, top]);
|
|
32807
32617
|
return React__default.createElement(React__default.Fragment, null);
|
|
32808
32618
|
};
|
|
32809
|
-
|
|
32810
|
-
|
|
32619
|
+
const LuiSidePanelContainer = (props) => {
|
|
32620
|
+
const { children, onClose, width = '50%', top = 60 } = props ?? {};
|
|
32811
32621
|
return (React__default.createElement("section", { style: {
|
|
32812
32622
|
position: 'fixed',
|
|
32813
32623
|
right: 0,
|
|
32814
32624
|
bottom: 0,
|
|
32815
32625
|
top: top,
|
|
32816
32626
|
background: 'white',
|
|
32817
|
-
width: children ? width
|
|
32627
|
+
width: children ? width ?? '50%' : '0%',
|
|
32818
32628
|
transition: 'width 0.2s ease',
|
|
32819
32629
|
boxShadow: '-0.1em 0 0.4em rgba(0, 0, 0, 0.2)',
|
|
32820
32630
|
padding: 0,
|
|
32821
|
-
zIndex: 3
|
|
32631
|
+
zIndex: 3,
|
|
32822
32632
|
} },
|
|
32823
32633
|
children && (React__default.createElement("button", { type: "button", "data-testid": "close", onClick: onClose, style: {
|
|
32824
32634
|
color: '#5e5e61',
|
|
@@ -32829,30 +32639,110 @@ var LuiSidePanelContainer = function (props) {
|
|
|
32829
32639
|
border: 'none',
|
|
32830
32640
|
display: 'flex',
|
|
32831
32641
|
cursor: 'pointer',
|
|
32832
|
-
borderBottomLeftRadius: '5px'
|
|
32642
|
+
borderBottomLeftRadius: '5px',
|
|
32833
32643
|
} },
|
|
32834
32644
|
React__default.createElement(LuiIcon, { alt: "Close", name: "ic_clear", size: "lg", status: "interactive" }))),
|
|
32835
32645
|
children));
|
|
32836
32646
|
};
|
|
32837
|
-
|
|
32838
|
-
|
|
32839
|
-
|
|
32840
|
-
return (React__default.createElement(LuiSidePanelContext.Provider, { value: { setProps: setProps } },
|
|
32647
|
+
const LuiSidePanelProvider = ({ children }) => {
|
|
32648
|
+
const [props, setProps] = React__default.useState();
|
|
32649
|
+
return (React__default.createElement(LuiSidePanelContext.Provider, { value: { setProps } },
|
|
32841
32650
|
children,
|
|
32842
|
-
React__default.createElement(LuiSidePanelContainer,
|
|
32651
|
+
React__default.createElement(LuiSidePanelContainer, { ...props })));
|
|
32843
32652
|
};
|
|
32844
32653
|
|
|
32845
32654
|
var css_248z = ".lui-switch-checkbox {\n height: 0;\n width: 0;\n visibility: hidden;\n}\n\n.lui-switch-label {\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n width: 40px;\n height: 20px;\n background: grey;\n border-radius: 40px;\n position: relative;\n transition: background-color 0.2s;\n}\n\n.lui-switch-label .lui-switch-button {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 16px;\n border-radius: 18px;\n transition: 0.2s;\n background: #fff;\n box-shadow: 0 0 2px 0 rgba(10, 10, 10, 0.29);\n}\n\n.lui-switch-checkbox:checked + .lui-switch-label .lui-switch-button {\n left: calc(100% - 2px);\n transform: translateX(-100%);\n}\n\n.lui-switch-label:active .lui-switch-button {\n width: 20px;\n}";
|
|
32846
32655
|
styleInject(css_248z);
|
|
32847
32656
|
|
|
32848
|
-
|
|
32849
|
-
|
|
32657
|
+
const LuiSwitchButton = (props) => {
|
|
32658
|
+
const generatedId = useGenerateOrDefaultId();
|
|
32850
32659
|
return (React__default.createElement(React__default.Fragment, null,
|
|
32851
|
-
React__default.createElement("input",
|
|
32852
|
-
React__default.createElement("label", { "data-testid":
|
|
32853
|
-
React__default.createElement("span", { className:
|
|
32660
|
+
React__default.createElement("input", { className: "lui-switch-checkbox", type: "checkbox", "data-testid": 'lui-switch-new', id: generatedId, ...props }),
|
|
32661
|
+
React__default.createElement("label", { "data-testid": `label`, style: { background: props.checked ? '#007198' : 'gray' }, className: "lui-switch-label", htmlFor: generatedId },
|
|
32662
|
+
React__default.createElement("span", { className: `lui-switch-button` }))));
|
|
32854
32663
|
};
|
|
32855
32664
|
|
|
32665
|
+
/******************************************************************************
|
|
32666
|
+
Copyright (c) Microsoft Corporation.
|
|
32667
|
+
|
|
32668
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
32669
|
+
purpose with or without fee is hereby granted.
|
|
32670
|
+
|
|
32671
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
32672
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
32673
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
32674
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
32675
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
32676
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
32677
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
32678
|
+
***************************************************************************** */
|
|
32679
|
+
/* global Reflect, Promise */
|
|
32680
|
+
|
|
32681
|
+
var extendStatics = function(d, b) {
|
|
32682
|
+
extendStatics = Object.setPrototypeOf ||
|
|
32683
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
32684
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
32685
|
+
return extendStatics(d, b);
|
|
32686
|
+
};
|
|
32687
|
+
|
|
32688
|
+
function __extends(d, b) {
|
|
32689
|
+
if (typeof b !== "function" && b !== null)
|
|
32690
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
32691
|
+
extendStatics(d, b);
|
|
32692
|
+
function __() { this.constructor = d; }
|
|
32693
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
32694
|
+
}
|
|
32695
|
+
|
|
32696
|
+
var __assign = function() {
|
|
32697
|
+
__assign = Object.assign || function __assign(t) {
|
|
32698
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
32699
|
+
s = arguments[i];
|
|
32700
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
32701
|
+
}
|
|
32702
|
+
return t;
|
|
32703
|
+
};
|
|
32704
|
+
return __assign.apply(this, arguments);
|
|
32705
|
+
};
|
|
32706
|
+
|
|
32707
|
+
function __rest(s, e) {
|
|
32708
|
+
var t = {};
|
|
32709
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
32710
|
+
t[p] = s[p];
|
|
32711
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
32712
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
32713
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
32714
|
+
t[p[i]] = s[p[i]];
|
|
32715
|
+
}
|
|
32716
|
+
return t;
|
|
32717
|
+
}
|
|
32718
|
+
|
|
32719
|
+
function __read(o, n) {
|
|
32720
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
32721
|
+
if (!m) return o;
|
|
32722
|
+
var i = m.call(o), r, ar = [], e;
|
|
32723
|
+
try {
|
|
32724
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
32725
|
+
}
|
|
32726
|
+
catch (error) { e = { error: error }; }
|
|
32727
|
+
finally {
|
|
32728
|
+
try {
|
|
32729
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
32730
|
+
}
|
|
32731
|
+
finally { if (e) throw e.error; }
|
|
32732
|
+
}
|
|
32733
|
+
return ar;
|
|
32734
|
+
}
|
|
32735
|
+
|
|
32736
|
+
function __spreadArray(to, from, pack) {
|
|
32737
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
32738
|
+
if (ar || !(i in from)) {
|
|
32739
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
32740
|
+
ar[i] = from[i];
|
|
32741
|
+
}
|
|
32742
|
+
}
|
|
32743
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
32744
|
+
}
|
|
32745
|
+
|
|
32856
32746
|
var createDefinition = function (propNames) { return ({
|
|
32857
32747
|
isEnabled: function (props) { return propNames.some(function (name) { return !!props[name]; }); },
|
|
32858
32748
|
}); };
|
|
@@ -40410,10 +40300,10 @@ var AnimatePresence = function (_a) {
|
|
|
40410
40300
|
};
|
|
40411
40301
|
|
|
40412
40302
|
// import clsx from 'clsx';
|
|
40413
|
-
|
|
40414
|
-
|
|
40415
|
-
|
|
40416
|
-
|
|
40303
|
+
const LuiAccordicard = (props) => {
|
|
40304
|
+
const { defaultToOpen = false, children, headerContent } = props;
|
|
40305
|
+
const [isOpen, setIsOpen] = useState(defaultToOpen);
|
|
40306
|
+
const AccordicardContent = () => {
|
|
40417
40307
|
return (React__default.createElement(motion.div, { className: "LuiAccordicard-contentWrapper", key: "content", initial: ['collapsed'], animate: "open", exit: "collapsed", variants: {
|
|
40418
40308
|
open: {
|
|
40419
40309
|
opacity: 1,
|
|
@@ -40422,14 +40312,14 @@ var LuiAccordicard = function (props) {
|
|
|
40422
40312
|
opacity: {
|
|
40423
40313
|
delay: 0.1,
|
|
40424
40314
|
duration: 0.6,
|
|
40425
|
-
ease: [0.04, 0.62, 0.23, 0.98]
|
|
40315
|
+
ease: [0.04, 0.62, 0.23, 0.98],
|
|
40426
40316
|
},
|
|
40427
40317
|
height: {
|
|
40428
40318
|
delay: 0,
|
|
40429
40319
|
duration: 0.2,
|
|
40430
|
-
ease: [0.04, 0.62, 0.23, 0.98]
|
|
40431
|
-
}
|
|
40432
|
-
}
|
|
40320
|
+
ease: [0.04, 0.62, 0.23, 0.98],
|
|
40321
|
+
},
|
|
40322
|
+
},
|
|
40433
40323
|
},
|
|
40434
40324
|
collapsed: {
|
|
40435
40325
|
opacity: 0,
|
|
@@ -40438,15 +40328,15 @@ var LuiAccordicard = function (props) {
|
|
|
40438
40328
|
opacity: {
|
|
40439
40329
|
delay: 0,
|
|
40440
40330
|
duration: 0.2,
|
|
40441
|
-
ease: [0.04, 0.62, 0.23, 0.98]
|
|
40331
|
+
ease: [0.04, 0.62, 0.23, 0.98],
|
|
40442
40332
|
},
|
|
40443
40333
|
height: {
|
|
40444
40334
|
delay: 0.1,
|
|
40445
40335
|
duration: 0.2,
|
|
40446
|
-
ease: [0.04, 0.62, 0.23, 0.98]
|
|
40447
|
-
}
|
|
40448
|
-
}
|
|
40449
|
-
}
|
|
40336
|
+
ease: [0.04, 0.62, 0.23, 0.98],
|
|
40337
|
+
},
|
|
40338
|
+
},
|
|
40339
|
+
},
|
|
40450
40340
|
} },
|
|
40451
40341
|
React__default.createElement("div", { className: clsx('LuiAccordicard-content', isOpen ? 'LuiAccordicard-content--isOpen' : null) }, isOpen ? children : React__default.createElement(React__default.Fragment, null))));
|
|
40452
40342
|
};
|
|
@@ -40456,13 +40346,13 @@ var LuiAccordicard = function (props) {
|
|
|
40456
40346
|
React__default.createElement(motion.header, { layout: true, initial: false, className: "LuiAccordicard-header" },
|
|
40457
40347
|
React__default.createElement("div", { className: "LuiAccordicard-headerContent" }, headerContent)),
|
|
40458
40348
|
React__default.createElement(AnimatePresence, { initial: false }, isOpen && React__default.createElement(AccordicardContent, null)),
|
|
40459
|
-
React__default.createElement("button", { "aria-label": isOpen ? 'Expanded' : 'Closed', className: "LuiAccordicard-trigger", onClick:
|
|
40349
|
+
React__default.createElement("button", { "aria-label": isOpen ? 'Expanded' : 'Closed', className: "LuiAccordicard-trigger", onClick: () => setIsOpen(!isOpen) },
|
|
40460
40350
|
React__default.createElement(LuiIcon, { className: clsx('LuiAccordicard-chevron', isOpen ? 'LuiAccordicard-chevron--isOpen' : null), name: 'ic_expand_more', alt: "expand", size: "md" }))));
|
|
40461
40351
|
};
|
|
40462
40352
|
|
|
40463
|
-
|
|
40464
|
-
|
|
40465
|
-
|
|
40353
|
+
const LuiAccordicardStatic = (props) => {
|
|
40354
|
+
const { defaultToOpen = false, children, headerContent } = props;
|
|
40355
|
+
const [isOpen, setIsOpen] = useState(defaultToOpen);
|
|
40466
40356
|
return (React__default.createElement("div", { className: clsx('LuiAccordicardStatic', isOpen ? 'LuiAccordicardStatic--isOpen' : null, props.warning ? 'LuiAccordicardStatic--warning' : null, props.className) },
|
|
40467
40357
|
props.warning && (React__default.createElement("div", { className: "LuiAccordicardStatic-sideBar" },
|
|
40468
40358
|
React__default.createElement(LuiIcon, { className: "LuiAccordicardStatic-warningIcon", alt: "Accordicard warning", name: 'ic_warning', size: 'md' }))),
|
|
@@ -40470,7 +40360,7 @@ var LuiAccordicardStatic = function (props) {
|
|
|
40470
40360
|
React__default.createElement("div", { className: "LuiAccordicardStatic-headerContent" }, headerContent)),
|
|
40471
40361
|
React__default.createElement("div", { className: clsx('LuiAccordicardStatic-contentWrapper', isOpen ? 'LuiAccordicardStatic-contentWrapper--isOpen' : null) },
|
|
40472
40362
|
React__default.createElement("div", { className: clsx('LuiAccordicardStatic-content', isOpen ? 'LuiAccordicardStatic-content--isOpen' : null) }, isOpen ? children : React__default.createElement(React__default.Fragment, null))),
|
|
40473
|
-
React__default.createElement("button", { "aria-label": isOpen ? 'Expanded' : 'Closed', className: "LuiAccordicardStatic-trigger", onClick:
|
|
40363
|
+
React__default.createElement("button", { "aria-label": isOpen ? 'Expanded' : 'Closed', className: "LuiAccordicardStatic-trigger", onClick: () => setIsOpen(!isOpen) },
|
|
40474
40364
|
React__default.createElement(LuiIcon, { className: clsx('LuiAccordicardStatic-chevron', isOpen ? 'LuiAccordicardStatic-chevron--isOpen' : null), name: 'ic_expand_more', alt: "expand", title: "Expand and collapse panel", size: "md" }))));
|
|
40475
40365
|
};
|
|
40476
40366
|
|