@linzjs/lui 24.1.2 → 24.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +1 -1
- package/dist/components/LuiSearchInput/LuiSearchInput.d.ts +7 -0
- package/dist/components/common/Hooks.d.ts +9 -0
- package/dist/contexts/LuiFilterCharactersProvider.d.ts +11 -0
- package/dist/functions/LinzFreeTextFilter.d.ts +14 -0
- package/dist/functions/LinzFreeTextValidator.d.ts +2 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +160 -12
- package/dist/index.js.map +1 -1
- package/dist/lui.esm.js +157 -14
- package/dist/lui.esm.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,20 @@
|
|
|
5
5
|
|
|
6
6
|
* **LuiComboSelect:** restore interface to support styling of the input element. ([#1270](https://github.com/linz/lui/issues/1270)) ([7ce6a13](https://github.com/linz/lui/commit/7ce6a137c7f16ffa3acbe4357569a6eb59ef47db))
|
|
7
7
|
|
|
8
|
+
## [24.3.0](https://github.com/linz/Lui/compare/lui-v24.2.0...lui-v24.3.0) (2025-11-20)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* CS-8474 - filter characters in LuiInput ([#1272](https://github.com/linz/Lui/issues/1272)) ([2b58207](https://github.com/linz/Lui/commit/2b58207f2844eb769d9c274f55a5b1b8e2336dcf))
|
|
14
|
+
|
|
15
|
+
## [24.2.0](https://github.com/linz/Lui/compare/lui-v24.1.2...lui-v24.2.0) (2025-11-19)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
* **LuiSearchInput:** prevent internal clear ([#1285](https://github.com/linz/Lui/issues/1285)) ([a8a8e93](https://github.com/linz/Lui/commit/a8a8e93fbf2c75c7dc640d548b698dd90593abb5))
|
|
21
|
+
|
|
8
22
|
## [24.1.2](https://github.com/linz/Lui/compare/lui-v24.1.1...lui-v24.1.2) (2025-11-18)
|
|
9
23
|
|
|
10
24
|
|
package/README.md
CHANGED
|
@@ -26,5 +26,12 @@ export interface ISearchInputProps<SearchResult extends ISearchResult = ISearchR
|
|
|
26
26
|
hideSearchIcon?: boolean;
|
|
27
27
|
filterElement?: ReactElement;
|
|
28
28
|
trimBeforeMinCharCheck?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* When true, clicking the clear (X) icon will NOT clear the internal input
|
|
31
|
+
* value or results – it will only call onClearCallback().
|
|
32
|
+
* Useful when parent wants to treat clear as "navigation" and control
|
|
33
|
+
* when the text actually disappears (e.g. unsaved changes flows).
|
|
34
|
+
*/
|
|
35
|
+
isClearable?: boolean;
|
|
29
36
|
}
|
|
30
37
|
export declare const LuiSearchInput: <SearchResult extends ISearchResult = ISearchResult>(props: React.PropsWithChildren<ISearchInputProps<SearchResult>>) => React.JSX.Element;
|
|
@@ -10,6 +10,15 @@ export declare const useEscapeFunction: (onEscape: (e: KeyboardEvent) => void |
|
|
|
10
10
|
* A hook which allows handling of click event anywhere on the page.
|
|
11
11
|
* Provides a way of handling clicks done inside or outside the element bound to the returned react ref.
|
|
12
12
|
*
|
|
13
|
+
* @deprecated
|
|
14
|
+
* This hook is deprecated. It's no longer supported and will be removed in future version.
|
|
15
|
+
*
|
|
16
|
+
* For click inside element handling, consider attaching an `onClick` handler directly onto the element.
|
|
17
|
+
*
|
|
18
|
+
* For click outside element handling, consider using the `useClickedOutsideElement` hook instead.
|
|
19
|
+
*
|
|
20
|
+
* For click anywhere (both inside and outside) handling, consider attaching an `onClick` handler directly onto the document.
|
|
21
|
+
*
|
|
13
22
|
* @param onClickInsideArg handler for mouse clicks inside the element
|
|
14
23
|
* @param onClickOutsideArg handler for mouse clicks outside the element
|
|
15
24
|
* @return a react ref which can be bound to an html element
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React, { ChangeEvent, PropsWithChildren } from 'react';
|
|
2
|
+
export interface LuiFilterCharactersContext {
|
|
3
|
+
filterCharacters: (input: string | undefined) => string | undefined;
|
|
4
|
+
filterInputEvent: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare const LuiFilterCharactersContext: React.Context<LuiFilterCharactersContext>;
|
|
7
|
+
export declare function useFilterCharacters(): LuiFilterCharactersContext;
|
|
8
|
+
export type LuiFilterCharactersProviderProps = {
|
|
9
|
+
filterFunction?: (input: string) => string;
|
|
10
|
+
};
|
|
11
|
+
export declare const LuiFilterCharactersProvider: ({ children, filterFunction, }: PropsWithChildren<LuiFilterCharactersProviderProps>) => React.JSX.Element;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type LinzFreeTextFilterType = (value?: string | null) => string;
|
|
2
|
+
/**
|
|
3
|
+
* Default LINZ free text filter function.
|
|
4
|
+
* Silently converts some invalid characters with supported alternatives.
|
|
5
|
+
* Removes all other invalid characters.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LinzFreeTextFilter: LinzFreeTextFilterType;
|
|
8
|
+
/**
|
|
9
|
+
* LINZ free text filter function that leaves invalid characters intact.
|
|
10
|
+
* Silently converts some invalid characters with supported alternatives.
|
|
11
|
+
* Leaves all other invalid characters as is.
|
|
12
|
+
* Should be paired with LinzFreeTextValidator to warn users about invalid characters.
|
|
13
|
+
*/
|
|
14
|
+
export declare const LinzFreeTextFilterConvertOnly: LinzFreeTextFilterType;
|
package/dist/index.d.ts
CHANGED
|
@@ -85,3 +85,6 @@ export { LuiErrorPanel } from './components/LuiErrorPanel/LuiErrorPanel';
|
|
|
85
85
|
export { DrawerGlobalProvider, useDrawerGlobalContext, DrawerGlobalContext, } from './components/Drawer/DrawerGlobalContext';
|
|
86
86
|
export { Drawer, DrawerProps } from './components/Drawer/Drawer';
|
|
87
87
|
export { DrawerGlobal, DrawerGlobalProps, } from './components/Drawer/DrawerGlobal';
|
|
88
|
+
export { LuiFilterCharactersProvider, useFilterCharacters, } from './contexts/LuiFilterCharactersProvider';
|
|
89
|
+
export { LinzFreeTextValidator } from './functions/LinzFreeTextValidator';
|
|
90
|
+
export { LinzFreeTextFilter, LinzFreeTextFilterConvertOnly, } from './functions/LinzFreeTextFilter';
|
package/dist/index.js
CHANGED
|
@@ -7018,6 +7018,113 @@ var DateInput = React.forwardRef(function (props, ref) {
|
|
|
7018
7018
|
} })));
|
|
7019
7019
|
});
|
|
7020
7020
|
|
|
7021
|
+
// eslint-disable-next-line no-control-regex
|
|
7022
|
+
var LinzInvalidCharMatcher = /([^\u0000-\u017f])/gu;
|
|
7023
|
+
var LinzFreeTextValidator = function (value, invalidCharMatcher, maxReportedChars) {
|
|
7024
|
+
if (invalidCharMatcher === void 0) { invalidCharMatcher = LinzInvalidCharMatcher; }
|
|
7025
|
+
if (maxReportedChars === void 0) { maxReportedChars = 10; }
|
|
7026
|
+
if (!value) {
|
|
7027
|
+
return undefined;
|
|
7028
|
+
}
|
|
7029
|
+
var matchedItems = value.match(invalidCharMatcher);
|
|
7030
|
+
if (matchedItems === null) {
|
|
7031
|
+
return undefined;
|
|
7032
|
+
}
|
|
7033
|
+
var invalidCharacters = Array.from(new Set(matchedItems)).slice(0, maxReportedChars);
|
|
7034
|
+
return "Invalid character".concat(invalidCharacters.length === 1 ? '' : 's', " ").concat(invalidCharacters.join(', '));
|
|
7035
|
+
};
|
|
7036
|
+
|
|
7037
|
+
function CreateLinzFreeTextFilter(removeInvalidChars) {
|
|
7038
|
+
if (removeInvalidChars === void 0) { removeInvalidChars = true; }
|
|
7039
|
+
return function (value) {
|
|
7040
|
+
if (!value) {
|
|
7041
|
+
return '';
|
|
7042
|
+
}
|
|
7043
|
+
var strLength = value.length;
|
|
7044
|
+
if (!strLength) {
|
|
7045
|
+
return '';
|
|
7046
|
+
}
|
|
7047
|
+
return Array.prototype.flatMap
|
|
7048
|
+
.call(value, function (char) {
|
|
7049
|
+
// Supported character range
|
|
7050
|
+
if (char.match(LinzInvalidCharMatcher) === null) {
|
|
7051
|
+
return char;
|
|
7052
|
+
}
|
|
7053
|
+
var charCode = char.charCodeAt(0);
|
|
7054
|
+
// Silent conversion characters
|
|
7055
|
+
// why: https://toitutewhenua.atlassian.net/wiki/spaces/STEP/pages/124322198/Minimum+Text+Validation#Silent-conversion-characters
|
|
7056
|
+
switch (charCode) {
|
|
7057
|
+
case 0x2018:
|
|
7058
|
+
case 0x2019:
|
|
7059
|
+
return "'";
|
|
7060
|
+
case 0x201c:
|
|
7061
|
+
case 0x201d:
|
|
7062
|
+
return '"';
|
|
7063
|
+
case 0x2022:
|
|
7064
|
+
return '*';
|
|
7065
|
+
case 0x2013:
|
|
7066
|
+
case 0x2014:
|
|
7067
|
+
return '-';
|
|
7068
|
+
}
|
|
7069
|
+
return removeInvalidChars ? '' : char;
|
|
7070
|
+
})
|
|
7071
|
+
.join('');
|
|
7072
|
+
};
|
|
7073
|
+
}
|
|
7074
|
+
/**
|
|
7075
|
+
* Default LINZ free text filter function.
|
|
7076
|
+
* Silently converts some invalid characters with supported alternatives.
|
|
7077
|
+
* Removes all other invalid characters.
|
|
7078
|
+
*/
|
|
7079
|
+
var LinzFreeTextFilter = CreateLinzFreeTextFilter(true);
|
|
7080
|
+
/**
|
|
7081
|
+
* LINZ free text filter function that leaves invalid characters intact.
|
|
7082
|
+
* Silently converts some invalid characters with supported alternatives.
|
|
7083
|
+
* Leaves all other invalid characters as is.
|
|
7084
|
+
* Should be paired with LinzFreeTextValidator to warn users about invalid characters.
|
|
7085
|
+
*/
|
|
7086
|
+
var LinzFreeTextFilterConvertOnly = CreateLinzFreeTextFilter(false);
|
|
7087
|
+
|
|
7088
|
+
var LuiFilterCharactersContext = React.createContext({
|
|
7089
|
+
filterCharacters: function (input) {
|
|
7090
|
+
// Default implementation: return input as is.
|
|
7091
|
+
return input;
|
|
7092
|
+
},
|
|
7093
|
+
filterInputEvent: function () {
|
|
7094
|
+
// Default implementation: do nothing.
|
|
7095
|
+
return;
|
|
7096
|
+
}
|
|
7097
|
+
});
|
|
7098
|
+
function useFilterCharacters() {
|
|
7099
|
+
return React.useContext(LuiFilterCharactersContext);
|
|
7100
|
+
}
|
|
7101
|
+
var LuiFilterCharactersProvider = function (_a) {
|
|
7102
|
+
var children = _a.children, filterFunction = _a.filterFunction;
|
|
7103
|
+
var filterCharacters = React.useCallback(function (input) {
|
|
7104
|
+
if (input === undefined) {
|
|
7105
|
+
return input;
|
|
7106
|
+
}
|
|
7107
|
+
var filter = typeof filterFunction === 'function'
|
|
7108
|
+
? filterFunction
|
|
7109
|
+
: LinzFreeTextFilter;
|
|
7110
|
+
return filter(input);
|
|
7111
|
+
}, [filterFunction]);
|
|
7112
|
+
var filterInputEvent = React.useCallback(function (event) {
|
|
7113
|
+
var value = event.target.value;
|
|
7114
|
+
var filteredValue = filterCharacters(value);
|
|
7115
|
+
if (filteredValue !== value) {
|
|
7116
|
+
var caretPosition = event.target.selectionStart;
|
|
7117
|
+
event.target.value = filteredValue;
|
|
7118
|
+
if (caretPosition !== null) {
|
|
7119
|
+
var positionOffset = value.length - filteredValue.length;
|
|
7120
|
+
var newCaretPosition = Math.max(caretPosition - positionOffset, 0);
|
|
7121
|
+
event.target.setSelectionRange(newCaretPosition, newCaretPosition);
|
|
7122
|
+
}
|
|
7123
|
+
}
|
|
7124
|
+
}, [filterFunction]);
|
|
7125
|
+
return (React__default["default"].createElement(LuiFilterCharactersContext.Provider, { value: { filterCharacters: filterCharacters, filterInputEvent: filterInputEvent } }, children));
|
|
7126
|
+
};
|
|
7127
|
+
|
|
7021
7128
|
function useGenerateOrDefaultId(idFromProps) {
|
|
7022
7129
|
var id = React.useState(idFromProps ? idFromProps : v4())[0];
|
|
7023
7130
|
return id;
|
|
@@ -7026,6 +7133,7 @@ var BareInput = React.forwardRef(function (props, ref) { return React__default["
|
|
|
7026
7133
|
var LuiTextInput = React.forwardRef(function (props, ref) {
|
|
7027
7134
|
var _a, _b, _c;
|
|
7028
7135
|
var id = useGenerateOrDefaultId((_a = props.inputProps) === null || _a === void 0 ? void 0 : _a.id);
|
|
7136
|
+
var filterInputEvent = useFilterCharacters().filterInputEvent;
|
|
7029
7137
|
var LuiInput = ((_b = props.inputProps) === null || _b === void 0 ? void 0 : _b.type) === 'date' ? DateInput : BareInput;
|
|
7030
7138
|
return (React__default["default"].createElement("div", { className: clsx$1('LuiTextInput', props.error && 'hasError', props.warning && 'hasWarning', props.className) },
|
|
7031
7139
|
React__default["default"].createElement("label", { className: 'LuiTextInput-label', htmlFor: id },
|
|
@@ -7033,7 +7141,15 @@ var LuiTextInput = React.forwardRef(function (props, ref) {
|
|
|
7033
7141
|
React__default["default"].createElement("span", { className: 'LuiTextInput-label-text ' +
|
|
7034
7142
|
clsx$1(props.hideLabel ? 'LuiScreenReadersOnly' : '') }, props.label),
|
|
7035
7143
|
React__default["default"].createElement("span", { className: "LuiTextInput-inputWrapper" },
|
|
7036
|
-
React__default["default"].createElement(LuiInput, __assign({ ref: ref, className: clsx$1('LuiTextInput-input', props.showPadlockIcon ? 'LuiTextInput-padlock-icon ' : '', props.size ? "LuiTextInput-".concat(props.size) : ''), min: ((_c = props.inputProps) === null || _c === void 0 ? void 0 : _c.type) === 'date' ? undefined : '0', value: props.value, onChange:
|
|
7144
|
+
React__default["default"].createElement(LuiInput, __assign({ ref: ref, className: clsx$1('LuiTextInput-input', props.showPadlockIcon ? 'LuiTextInput-padlock-icon ' : '', props.size ? "LuiTextInput-".concat(props.size) : ''), min: ((_c = props.inputProps) === null || _c === void 0 ? void 0 : _c.type) === 'date' ? undefined : '0', value: props.value, onChange: function (event) {
|
|
7145
|
+
var _a;
|
|
7146
|
+
if (((_a = props.inputProps) === null || _a === void 0 ? void 0 : _a.type) !== 'date') {
|
|
7147
|
+
filterInputEvent(event);
|
|
7148
|
+
}
|
|
7149
|
+
if (props.onChange) {
|
|
7150
|
+
props.onChange(event);
|
|
7151
|
+
}
|
|
7152
|
+
} }, props.inputProps, { id: id })),
|
|
7037
7153
|
props.icon),
|
|
7038
7154
|
props.error && (React__default["default"].createElement("span", { className: "LuiTextInput-error" },
|
|
7039
7155
|
React__default["default"].createElement(LuiIcon, { alt: "error", name: "ic_error", className: "LuiTextInput-error-icon", size: "sm", status: "error" }),
|
|
@@ -7178,13 +7294,22 @@ var LuiSelectInput = function (props) {
|
|
|
7178
7294
|
var LuiTextAreaInput = React__default["default"].forwardRef(function (props, ref) {
|
|
7179
7295
|
var _a, _b;
|
|
7180
7296
|
var id = useGenerateOrDefaultId((_a = props.inputProps) === null || _a === void 0 ? void 0 : _a.id);
|
|
7297
|
+
var filterInputEvent = useFilterCharacters().filterInputEvent;
|
|
7181
7298
|
var rows = props.rows !== undefined ? props.rows : 5;
|
|
7182
7299
|
return (React__default["default"].createElement("div", { className: clsx$1('LuiTextAreaInput', ((_b = props.inputProps) === null || _b === void 0 ? void 0 : _b.disabled) ? 'isDisabled' : '', props.error ? 'hasError' : '', props.warning ? 'hasWarning' : '') },
|
|
7183
7300
|
React__default["default"].createElement("label", { htmlFor: id },
|
|
7184
7301
|
props.mandatory && (React__default["default"].createElement("span", { className: "LuiTextAreaInput-mandatory" }, "*")),
|
|
7185
7302
|
React__default["default"].createElement("span", { className: "LuiTextAreaInput-label" }, props.label),
|
|
7186
7303
|
React__default["default"].createElement("div", { className: "LuiTextAreaInput-wrapper" },
|
|
7187
|
-
React__default["default"].createElement("textarea", __assign({ id: id, value: props.value, onChange:
|
|
7304
|
+
React__default["default"].createElement("textarea", __assign({ id: id, value: props.value, onChange: function (event) {
|
|
7305
|
+
var _a;
|
|
7306
|
+
if (((_a = props.inputProps) === null || _a === void 0 ? void 0 : _a.type) !== 'date') {
|
|
7307
|
+
filterInputEvent(event);
|
|
7308
|
+
}
|
|
7309
|
+
if (props.onChange) {
|
|
7310
|
+
props.onChange(event);
|
|
7311
|
+
}
|
|
7312
|
+
}, ref: ref, rows: rows }, props.inputProps)))),
|
|
7188
7313
|
props.error && (React__default["default"].createElement("span", { className: "LuiTextAreaInput-error" },
|
|
7189
7314
|
React__default["default"].createElement(LuiIcon, { alt: "error", name: "ic_error", className: "LuiTextAreaInput-error-icon", size: "sm", status: "error" }),
|
|
7190
7315
|
props.error)),
|
|
@@ -15763,6 +15888,14 @@ var logo = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idX
|
|
|
15763
15888
|
|
|
15764
15889
|
var motif = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjIuMywgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIxMTMuNHB4IiBoZWlnaHQ9IjEwMi42cHgiIHZpZXdCb3g9IjAgMCAxMTMuNCAxMDIuNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTEzLjQgMTAyLjY7IiB4bWw6c3BhY2U9InByZXNlcnZlIgo+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6I0ZGRkZGRjt9Cgkuc3Qxe2ZpbGw6dXJsKCNTVkdJRF8xXyk7fQoJLnN0MntmaWxsOnVybCgjU1ZHSURfMl8pO30KCS5zdDN7ZmlsbDp1cmwoI1NWR0lEXzNfKTt9Cgkuc3Q0e2ZpbGw6dXJsKCNTVkdJRF80Xyk7fQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfNV8pO30KCS5zdDZ7b3BhY2l0eTowLjQ7ZmlsbDp1cmwoI1NWR0lEXzZfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KPC9zdHlsZT4KCTxnPgoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTExMi45LDIxLjZjLTAuNy0xLjQtMi4zLTIuNC0zLjgtMi42bC0xLjctMC4xYzAuMS0wLjEsMC4zLTAuNCwwLjMtMC42YzEuNC0yLjMsMC43LTUuMi0xLjYtNi43CgkJYy0wLjctMC40LTEuNC0wLjYtMi4xLTAuN2gtMC4zaC0wLjFoLTAuMWgtMC4zSDEwM2wtMi40LTAuM2MwLjEtMi42LTEuOC00LjgtNC41LTVoLTFoLTAuMUM4NS45LDUsNzcsNC41LDY4LjEsNC41CgkJYy0yLDAtNS4xLDAtNy4xLDAuMWwtMC4zLTAuNGMtMC40LTAuNy0wLjktMS4zLTEuMy0xLjhjLTAuNi0wLjYtMS4xLTEuMS0xLjgtMS42QzU2LjcsMC4zLDU2LDAsNTUsMGgtMC4xaC0xbDAsMEg1M2wwLDAKCQljLTMuNSwwLjEtNy4xLDAuMy0xMC42LDAuNmgtMC4zYy0zLjMsMC4zLTYuMiwwLjYtOC45LDAuOWMtMS4xLDAuMS0yLjEsMC43LTMsMS40Yy00LjUsNC41LTkuMSwxMS4zLTEzLjYsMjAuM3YwLjEKCQljLTAuMSwwLjEtMC4xLDAuNC0wLjMsMC42Yy0xLjcsMy4zLTMuMyw2LjgtNC44LDEwLjZjMCwwLDAsMCwwLDAuMWwtMC4zLDAuN2MtMS40LDMuNC0yLjgsNy00LjEsMTAuNVY0NmwtMC4xLDAuNGwtMC4xLDAuM3YwLjEKCQljLTEuMywzLjUtMi40LDctMy4zLDEwLjR2MC4xbC0wLjEsMC40djAuMVY1OEMyLjEsNjIuNCwxLDY2LjUsMC4yLDcwLjJsMCwwdjAuMWwwLDB2MC4zbC0wLjEsMC40Yy0wLjYsMi43LDEuMyw1LjEsMy44LDUuNwoJCWMwLjMsMCwwLjYsMC4xLDAuOSwwLjFoMC4xYy0wLjEsMC42LTAuMywxLjMtMC40LDEuOHYwLjFsLTAuMSwwLjljLTAuNCwyLjYsMS4zLDUuMSwzLjgsNS43YzAuMywwLDAuNywwLjEsMSwwLjFoMC4xCgkJYy0wLjEsMC43LTAuMywxLjMtMC40LDEuOHYwLjF2MC4xbDAsMFY4OHYwLjF2MC4zYy0wLjYsMi42LDEuMSw1LjIsMy43LDUuN2MwLjMsMCwwLjYsMC4xLDAuNywwLjFoMC4xYy0wLjEsMC42LTAuMywxLTAuMywxLjYKCQljLTAuNiwyLjcsMS4zLDUuMSwzLjgsNS43YzAuMywwLDAuNiwwLjEsMC45LDAuMWMwLjMsMCwwLjQsMCwwLjcsMGM5LjUtMS4zLDE5LjItMS44LDI4LjgtMS43YzEyLjYsMCwyNS4zLDAuOSwzNy45LDIuNAoJCWMwLjEsMCwwLjQsMCwwLjYsMGMyLjQsMCw0LjQtMS43LDQuOC00LjFjMy40LTIyLjQsMTAuOS01My4xLDIyLTcxLjhDMTEzLjYsMjQuOCwxMTMuNiwyMy4xLDExMi45LDIxLjZ6Ii8+CgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iNDAuMjU3IiB5MT0iOTYzLjkxOTUiIHgyPSIxMDQuNTE5NSIgeTI9IjEwMjguMTkyNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDAgLTkyNi4xMTAyKSI+CgkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzczQzhFMSIvPgoJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMDA3MTk5Ii8+Cgk8L2xpbmVhckdyYWRpZW50PgoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xMDguNiwyNC4xYy0yMi4xLTEuOC00My0xLjQtNTcuOSwwLjRDMzcsMzguNywyMi41LDczLjYsMTcuOCw5Ny41YzE1LjctMi40LDQxLjktMi44LDY4LjEsMC40CgkJQzg5LjIsNzUuOSw5Ni45LDQ0LDEwOC42LDI0LjF6Ii8+CgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMl8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMzUuMzI4IiB5MT0iOTU2LjA4NjEiIHgyPSI5OC45MSIgeTI9IjEwMTkuNjY4MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDAgLTkyNi4xMTAyKSI+CgkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6Izc1Q0JDNyIvPgoJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMDA4NzgyIi8+Cgk8L2xpbmVhckdyYWRpZW50PgoJCTxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik0xMDMuMSwxNmMtMjIuMS0xLjgtNDIuOC0xLjQtNTcuOSwwLjRDMzEuMywzMC42LDE4LDY1LjcsMTMuMiw4OS41YzE1LjktMi40LDM5LjQtMy4xLDY1LTAuNwoJCUM4Mi4yLDY0LDkwLjYsMzcsMTAzLjEsMTZ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTEzLDg5LjlsMC4xLTAuOWMxNy40LTIuNiw0MS40LTIuOCw2NC40LTAuN2M0LjgtMjcuNywxMy42LTUzLjMsMjUtNzIuNGwwLjksMC4xYy0xMS4zLDE5LTIwLjMsNDUuMS0yNSw3Mi44CgkJbC0wLjEsMC40SDc4QzU0LjksODcuMSwzMC42LDg3LjQsMTMsODkuOXoiLz4KCgkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8zXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIzMC4wNzE5IiB5MT0iOTQ5Ljk4MjUiIHgyPSI5MS4wNzg0IiB5Mj0iMTAxMC45Nzg2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMCAtOTI2LjExMDIpIj4KCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojOUREMTlBIi8+CgkJCTxzdG9wICBvZmZzZXQ9IjAuNSIgc3R5bGU9InN0b3AtY29sb3I6IzA2QTI0QSIvPgoJPC9saW5lYXJHcmFkaWVudD4KCQk8cGF0aCBjbGFzcz0ic3QzIiBkPSJNNzEuMiw0OGwyLjMtNi4ybDEwLjgtMTIuM2MwLjQtMC4xLDAuOS0wLjEsMS4zLTAuMWMyLjgtNi40LDYtMTIuNiw5LjUtMTguNmMtMjEuMy0xLjgtNDEuMS0xLjQtNTUuNiwwLjQKCQlDMjYuMiwyNC41LDEzLjIsNTgsOC42LDgwLjZjOC4yLTEuMSwxNi41LTEuOCwyNC43LTJjLTAuNi0wLjMtMC4xLTIuMy0wLjEtMi4zYzAuNi0yLjQsMi4zLTQuMyw0LjUtNi4yYzIuMy0yLDEuMy0zLjMsMy4xLTQKCQljMy44LTEuNyw3LjUtMy44LDEwLjktNi4yYzQuMy0zLjEsNS44LTE0LDYtMTMuM2MwLjEsMC43LDEuNywwLjQsMS43LDEuMWMwLDAuNiwwLjQsMS44LDAuNywyYzAuMywwLDEuNi0zLjMsNC41LTMuMwoJCWMxLjgsMC4xLDMuNSwwLjcsNSwyYzAuMSwwLDEuMy0wLjEsMS4zLTAuMUw3MS4yLDQ4eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik04NS4yLDMwLjZsLTAuNy0wLjRsMC42LTEuMWMyLjctNi40LDUuOC0xMi41LDkuNC0xOC40aDAuOWMtMy41LDYtNi44LDEyLjItOS42LDE4LjdMODUuMiwzMC42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik01Ny43LDkuMmMtMC4zLDAuMSwwLjEsMC4zLDAuNywxYzAuOSwxLDEuNCwyLDEuOCwzLjNjMCwwLjYtMC43LDAuMywwLjEsMS4zYzAuOSwxLDMuNSw1LDMuOCw1LjcKCQlzMC45LDAuNiwwLjksMC4xczAuNCwwLjMsMC42LDAuN2MwLDAuMy0wLjMsMC4xLTAuMywwLjNjMCwwLjEsMC45LDEuMywxLjYsMy4xYzAuOSwyLjEsMS42LDMuMywxLjMsNS4yYy0wLjEsMi0wLjYsNS0yLjEsNS44CgkJYy0xLjYsMC45LTIuOCwxLTIuNywyLjRjMC4xLDEuNCwxLjcsMS42LDIuOCwyLjRzMi44LDAuNCwzLjQsMmMwLjYsMS40LTAuMSw0LjEtMS4xLDUuMnMtMS40LDEuNy0wLjksMi4xYzAuNiwwLjQsMC45LDAuNCwxLjMsMC4zCgkJYzAuNC0wLjEsMC45LDAuMSwwLjksMC43YzAsMC42LDAuMywwLjcsMi0wLjNzMi40LTMuMSwzLjctNC44YzEuMS0xLjYsMi4xLTMuMSwzLTVjMC4xLTAuMywwLjEtMC40LTAuNC0wLjcKCQljLTAuNi0wLjEtMC45LTAuOS0wLjYtMS40YzAsMCwwLTAuMSwwLjEtMC4xYzAuNy0xLjMsMS43LTEuNiwzLTEuOGMwLjYtMC4xLDEuMS0wLjEsMS43LDBjMC40LDAuNCwwLjEsMS4zLDAuNCwxczAuNi0wLjcsMC43LTEKCQljMC0wLjEsMC0wLjEtMC4xLTAuM2MtMC4xLTAuMS0wLjYtMC40LTAuMS0xLjNjMC40LTEuMSwxLjgtMC45LDIuMS0yLjhjMC40LTIsMS42LTMuMywxLTRzLTEuOC0wLjQtMi44LTAuMWMtMSwwLjQtMi4xLDIuNC0zLjUsMgoJCWMtMS4zLTAuNC00LjUtMS40LTUuMS0yLjNjLTAuNy0xLjctMS4xLTMuMy0xLjQtNS4xYy0wLjEtMS4xLTEtMC43LTEuNC0xLjRjLTAuNC0wLjYtMC43LDAuNC0wLjYsMS40YzAuMSwxLjEsMS4xLDIuMSwwLjYsMi42CgkJYy0wLjcsMC40LTEuMS0xLjYtMi4xLTJjLTEtMC40LTEuNC0xLTEuMS0yLjhjMC4xLTItMS43LTIuMy0xLjQtMy4zczAuNi0yLjEtMS43LTMuN2MtMi4zLTEuNi0zLjctMS00LjUtMS43CgkJYy0wLjktMC45LTEuNC0xLjMtMS42LTJjLTAuMS0wLjksMC42LTEtMC42LTAuN0M1OC4xLDkuMiw1OCw5LjEsNTcuNyw5LjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTY0LjQsNTMuNmMwLjQtMC40LDAuNy0xLDEtMS43YzAuMS0wLjQtMS0wLjMtMS0xLjFjMC0wLjksMC42LTEuNywwLjYtMi4xYzAtMC4zLTAuMy0wLjEtMC40LTAuMQoJCXMtMC40LTAuMS0wLjQtMC4zYy0wLjEtMC40LTAuNi0wLjYtMS42LTAuMWMtMSwwLjQtMS44LDEuNC0yLjEsMS40Yy0wLjMsMC0wLjctMS40LTAuNy0yYzAtMC43LTEuNy0wLjQtMS42LTEuMQoJCWMwLTAuMywwLjEtMC42LDAuMy0wLjljMC0wLjEsMC4xLTAuMSwwLTAuM2MtMS4zLTAuMS0yLjMsMS4xLTIuOCwxLjdjLTAuNiwwLjYsMC45LDIuOC0wLjcsNC4xYy0xLjYsMS4zLTIuMSwwLjktMi4zLDEuNgoJCWMtMC40LDMtMiw1LjgtNC41LDcuNWMtNC4zLDMuMy02LjUsNS4yLTguMiw2LjFjLTEuNywwLjctMi4xLDMuMS00LjMsNS4xYy0yLjEsMi0zLjUsNi40LTIuNCw3LjVjMC45LDAuOSwyLjEsMS4xLDMuMywwLjcKCQljMC42LTAuMSwxLjMsMC4xLDEuNywwLjZjMC4zLDAuNCwxLjQtMC4xLDIsMC40YzEsMC42LDIuMSwwLjksMy4zLDAuN2MxLjQtMC4xLDQuMS0xLjMsNi4yLTQuOGMyLjMtMy41LDEuOC02LjUsMi40LTcuOAoJCWMwLjctMS43LDItMy4xLDMuNy0zLjdjMS44LTAuNiwyLjEtMC43LDIuOC0wLjRzMiwwLjYsMS44LTAuN2MtMC4xLTEuMy0xLjctMC43LTEuNy0xLjdzLTAuMy0xLjYsMC45LTIuMWMxLjEtMC40LDEuOC0yLjEsMi42LTMuNAoJCUM2Mi43LDU1LjMsNjMuNSw1NC45LDY0LjQsNTMuNnoiLz4KCgkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF80XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxNi44NTkyIiB5MT0iOTUyLjAxMzciIHgyPSI2Mi45MjU1IiB5Mj0iOTk4LjA5MDUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSAwIC05MjYuMTEwMikiPgoJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiM5REQxOUEiLz4KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6IzA2QTI0QSIvPgoJPC9saW5lYXJHcmFkaWVudD4KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNNjkuNSw0Mi42Yy0wLjEtMC4zLTAuMy0wLjQtMC40LTAuNmMtMC4xLTAuMS0wLjMtMC4zLTAuNC0wLjNjLTAuNy0wLjQtMS43LTAuNC0yLjYtMWMtMS4xLTAuOS0yLjctMS0yLjgtMi40CgkJYy0wLjEtMS40LDEuMS0xLjcsMi43LTIuNGMxLjYtMC45LDItMy43LDIuMS01LjhjMC4xLTItMC42LTMuMy0xLjMtNS4yYy0wLjctMS44LTEuNi0yLjgtMS42LTMuMXMwLjMsMCwwLjMtMC4zCgkJYy0wLjEtMC40LTAuNi0xLTAuNi0wLjdzLTAuNCwwLjYtMC45LTAuMWMtMC40LTAuNy0zLjEtNC43LTMuOC01LjdjLTAuNy0xLTAuMS0wLjctMC4xLTEuM2MtMC40LTEuMS0xLTIuMy0xLjgtMy4zCgkJYy0wLjEtMC4zLTAuNC0wLjYtMC43LTAuN2wwLDBjLTAuMSwwLTAuMSwwLDAsMGMtMC4xLTAuMS0wLjEtMC4xLTAuMS0wLjNjLTAuNi0xLjMtMS40LTIuNi0yLjMtMy43Yy0wLjEtMC4xLTAuMy0wLjMtMC42LTAuNAoJCUM0Ny4xLDUuNCwzOS4xLDYsMzMuMiw2LjdDMjAuNywxOS40LDguNiw1MC4yLDQuMiw3MS44YzYuNC0wLjksMjAtMiwyOS4yLTIuMWgxLjFoMS4zaDEuNGMwLjktMS4zLDEuNC0yLjQsMi40LTIuOAoJCWMxLjctMC43LDQuMS0yLjgsOC4yLTYuMWMyLjQtMS44LDQuMS00LjUsNC41LTcuNWMwLjEtMC42LDAuNy0wLjMsMi4zLTEuNmMxLjYtMS4zLDAuMS0zLjUsMC43LTQuMWMwLjYtMC42LDEuNi0yLDIuOC0xLjcKCQljMC4xLDAsMCwwLjEsMCwwLjNDNTguMSw0Ni40LDU4LDQ2LjcsNTgsNDdjMCwwLjksMS42LDAuNiwxLjYsMS4xYzAsMC43LDAuNCwyLDAuNywyYzAuMywwLDEuMS0xLDIuMS0xLjRsMC4zLTAuMWwwLDAKCQljMC4xLDAsMC4zLTAuMSwwLjQtMC4xbDAsMGMxLDAsMS44LDAuMywyLjcsMC42YzAuNCwwLjMsMC43LDAuNiwxLDFjMC0wLjQsMC40LTAuOSwxLTEuN0M2OS4yLDQ2LjcsNzAsNDQsNjkuNSw0Mi42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0zMyw3OC4zYy04LjEsMC4zLTE2LDAuOS0yNC4xLDJsLTAuMSwwLjljOC4yLTEuMSwxNi41LTEuNywyNC44LTJMMzMuNCw3OUMzMy4yLDc4LjksMzMsNzguNiwzMyw3OC4zeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0zNy42LDY5LjJoLTEuNGgtMS4zaC0xLjFjLTkuMiwwLjMtMjIuOCwxLjMtMjkuMiwyLjF2MC4xdjAuM2wtMC4xLDAuNmM2LjItMC45LDIwLjEtMiwyOS41LTIuMUgzNWgxLjgKCQljMC4xLTAuMSwwLjMtMC40LDAuNC0wLjZsMCwwTDM3LjYsNjkuMkwzNy42LDY5LjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTM4LjUsODEuN2MtMC45LTAuMy0wLjQsMC40LTAuNCwxYzAsMC42LTAuMywwLjYtMC40LDFjLTAuMSwwLjYtMC40LDEtMC4xLDEuM2MwLjEsMC4zLDAuMywwLjMsMC43LTAuMQoJCWMwLjQtMC40LDAuNC0wLjQsMS0wLjRjMC42LDAsMC45LTAuMSwwLjktMUM0MCw4Mi42LDM5LjMsODEuOSwzOC41LDgxLjd6Ii8+CgoJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfNV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMjIuODEyMSIgeTE9Ijk0Mi4zMTA0IiB4Mj0iNDcuOTI4NyIgeTI9Ijk4OC41NTQ4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMCAtOTI2LjExMDIpIj4KCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGO3N0b3Atb3BhY2l0eTowLjkiLz4KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0ZGRkZGRjtzdG9wLW9wYWNpdHk6MC4xIi8+Cgk8L2xpbmVhckdyYWRpZW50PgoJCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xMyw3MC42aDAuN2MxLTQuMSwyLTguMSwzLjEtMTEuOGMzLTAuMSw2LjQtMC40LDEwLjEtMC42Yy0xLjEsMy43LTIuMSw3LjUtMy4xLDExLjZoMC43CgkJYzEtNC4xLDItNy45LDMuMS0xMS41YzMuMy0wLjEsNi43LTAuMywxMC4xLTAuM2MtMS4xLDMuNS0yLjEsNy40LTMuMSwxMS41aDAuM2gwLjNjMS00LDItNy44LDMuMS0xMS41YzMuNCwwLDYuOCwwLDEwLjEsMAoJCUM0OC4xLDU5LDQ3LjgsNjAsNDcuNSw2MWMwLjEtMC4xLDAuNC0wLjMsMC42LTAuNGwwLjMtMC4zYzAuMS0wLjcsMC40LTEuNCwwLjYtMi4xaDEuNGMwLjEtMC4xLDAuMy0wLjQsMC40LTAuNkg0OQoJCWMxLjEtMy43LDIuMy03LjIsMy40LTEwLjVsMy4xLDAuMWMwLjEtMC4xLDAuMy0wLjQsMC42LTAuNmMtMS4xLDAtMi4zLTAuMS0zLjQtMC4xYzEuNC0zLjcsMi43LTcuMiw0LjEtMTAuNQoJCWMyLjgsMCw1LjUsMC4xLDguMiwwLjNjMC4zLTAuMSwwLjYtMC4zLDAuOS0wLjRjMC4xLDAsMC4xLTAuMSwwLjMtMC4xYy0yLjgtMC4xLTYtMC4zLTguOS0wLjRjMS43LTMuOCwzLjQtNy40LDUtMTAuNQoJCWMxLjYsMCwzLjEsMC4xLDQuNywwLjFsLTAuMS0wLjNsLTAuMS0wLjNjLTEuNCwwLTIuNy0wLjEtNC4zLTAuMWMwLjctMS4xLDEuMy0yLjQsMS44LTMuNGMtMC4xLTAuMS0wLjEtMC4xLTAuMy0wLjNsLTAuMS0wLjMKCQljLTAuNywxLjMtMS40LDIuNi0yLjEsNGMtMy40LDAtNi44LDAtMTAuMSwwYzIuMS00LjMsNC4zLTcuNyw2LjEtMTAuNUg2MHYtMC4xYzAtMC4xLDAtMC4zLTAuMS0wLjRINThjMC4zLTAuNiwwLjctMSwxLTEuNgoJCWMtMC4xLTAuMS0wLjMtMC40LTAuNC0wLjZjLTAuNCwwLjctMC45LDEuMy0xLjQsMi4xYy0zLjQsMC02LjgsMC4xLTkuOSwwLjNjMS44LTMsNC01LjcsNi4yLTguNGgtMC45Yy0yLjMsMi42LTQuMyw1LjQtNi4xLDguMgoJCWMtMy43LDAuMS03LjEsMC4zLTkuOSwwLjZjMS44LTMsNC01LjcsNi4yLTguNEg0MmMtMi4zLDIuNy00LjMsNS40LTYuMSw4LjRjLTQuNSwwLjMtNy44LDAuNi05LjEsMC43Yy0wLjEsMC4xLTAuMywwLjQtMC40LDAuNwoJCWMwLjYsMCw0LTAuMyw5LjEtMC43Yy0xLjgsMi44LTMuOCw2LjItNi4xLDEwLjVjLTQuNSwwLjMtNy44LDAuNi04LjksMC43bC0wLjMsMC43YzAuNywwLDQuMS0wLjMsOC45LTAuN2MtMS42LDMuMS0zLjMsNi41LTUsMTAuNAoJCWMtNC4zLDAuMy03LjUsMC42LTguOCwwLjdMMTUsMzcuNWMxLjEtMC4xLDQuNC0wLjQsOC44LTAuN2MtMS40LDMuMy0yLjgsNi43LTQuMSwxMC41Yy00LjEsMC4zLTcuNCwwLjQtOC40LDAuNkwxMSw0OC40CgkJYzAuNywwLDQtMC4zLDguOC0wLjdjLTEuMSwzLjMtMi4zLDYuOC0zLjQsMTAuNWMtNC40LDAuMy03LjcsMC42LTguNywwLjZjMCwwLjEtMC4xLDAuNC0wLjEsMC42YzAuNywwLDQtMC4zLDguNy0wLjcKCQlDMTUsNjIuNiwxNCw2Ni40LDEzLDcwLjZ6IE0zNy44LDU3LjNjLTMuNSwwLTcsMC4xLTEwLjEsMC4zYzEuMS0zLjcsMi4zLTcuMSwzLjQtMTAuNWMzLjMtMC4xLDYuNy0wLjMsMTAuMS0wLjMKCQlDNDAuMSw1MC4xLDM5LDUzLjYsMzcuOCw1Ny4zeiBNNDUuNiwzNS43Yy0xLjQsMy4zLTIuNyw2LjctNC4xLDEwLjVjLTMuNSwwLTcsMC4xLTEwLjEsMC4zYzEuNC0zLjcsMi43LTcuMiw0LjMtMTAuNQoJCUMzOC43LDM1LjksNDIuMSwzNS45LDQ1LjYsMzUuN3ogTTM1LjksMzUuNWMxLjctMy44LDMuNC03LjQsNS0xMC41YzMuMS0wLjEsNi41LTAuMywxMC4xLTAuM2MtMS42LDMuMS0zLjMsNi41LTUsMTAuNQoJCUM0Mi40LDM1LjIsMzksMzUuMywzNS45LDM1LjV6IE00OC42LDU3LjNjLTMuNCwwLTYuOCwwLTEwLjEsMGMxLjEtMy43LDIuMy03LjIsMy40LTEwLjVjMy40LDAsNi44LDAsMTAuMSwwCgkJQzUwLjksNTAuMSw0OS44LDUzLjYsNDguNiw1Ny4zeiBNNTIuMyw0Ni4yYy0zLjQsMC02LjgsMC0xMC4xLDBjMS40LTMuNywyLjctNy4yLDQuMS0xMC41YzMuNCwwLDYuNywwLDEwLjEsMAoJCUM1NSwzOSw1My43LDQyLjYsNTIuMyw0Ni4yeiBNNjEuNSwyNC43Yy0xLjYsMy4xLTMuMyw2LjUtNSwxMC41Yy0zLjQsMC02LjgsMC0xMC4xLDBjMS43LTMuOCwzLjQtNy40LDUtMTAuNQoJCUM1NC45LDI0LjcsNTguMywyNC43LDYxLjUsMjQuN0w2MS41LDI0Ljd6IE00Ny4yLDE0YzMuMS0wLjEsNi41LTAuMyw5LjktMC4zYy0xLjgsMi44LTMuOCw2LjItNiwxMC41Yy0zLjQsMC02LjgsMC4xLTEwLjEsMC4zCgkJQzQzLjIsMjAuMyw0NS40LDE2LjcsNDcuMiwxNHogTTM2LjQsMTQuNmMyLjgtMC4xLDYuMi0wLjQsOS45LTAuNmMtMS44LDIuOC0zLjgsNi4yLTYuMSwxMC41Yy0zLjcsMC4xLTcuMSwwLjMtMTAuMSwwLjYKCQlDMzIuNiwyMC45LDM0LjYsMTcuMywzNi40LDE0LjZ6IE0zMCwyNS41YzMtMC4xLDYuNC0wLjQsMTAuMS0wLjZjLTEuNiwzLjEtMy4zLDYuNS01LDEwLjVjLTMuNywwLjEtNy4xLDAuMy0xMC4xLDAuNgoJCUMyNi44LDMyLjIsMjguMywyOC43LDMwLDI1LjV6IE0yNC44LDM2LjZjMy0wLjEsNi40LTAuNCwxMC4xLTAuNmMtMS40LDMuMy0yLjcsNi43LTQuMSwxMC41Yy0zLjcsMC4xLTcuMiwwLjMtMTAuMSwwLjYKCQlDMjIsNDMuMywyMy40LDM5LjksMjQuOCwzNi42eiBNMjAuNCw0Ny43YzMtMC4xLDYuNC0wLjQsMTAuMS0wLjZjLTEuMSwzLjMtMi4zLDYuOC0zLjQsMTAuNGMtMy43LDAuMS03LjIsMC4zLTEwLjEsMC42CgkJQzE4LjEsNTQuNSwxOS4zLDUwLjksMjAuNCw0Ny43eiIvPgoKCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjYxLjU3OTkiIHkxPSI5NjguNDMxIiB4Mj0iNjUuMzkwOSIgeTI9Ijk3NS40NjY2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMCAtOTI2LjExMDIpIj4KCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGNzk5O3N0b3Atb3BhY2l0eTowLjkiLz4KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0ZGRjhBMztzdG9wLW9wYWNpdHk6MC4xIi8+Cgk8L2xpbmVhckdyYWRpZW50PgoJCTxwYXRoIGNsYXNzPSJzdDYiIGQ9Ik02My43LDQ2LjdjMC43LTIuMSwxLjYtNC4zLDIuNC02LjJjLTAuMS0wLjEtMC4zLTAuMy0wLjYtMC4zYy0wLjksMi4xLTEuNyw0LjMtMi40LDYuNAoJCWMtMS42LTAuMS0zLjEtMC4xLTQuOC0wLjNjMCwwLjQsMC40LDAuNiwwLjksMC43YzEuMywwLDIuNiwwLjEsMy43LDAuMWwtMC40LDEuMWgwLjFjMC4xLTAuMSwwLjQtMC4xLDAuNy0wLjFsMC4zLTAuNwoJCWMxLjcsMC4xLDMuMywwLjMsNSwwLjRjMC4xLTAuMSwwLjMtMC40LDAuNC0wLjZDNjcuMSw0Nyw2NS40LDQ2LjgsNjMuNyw0Ni43eiIvPgo8L2c+Cjwvc3ZnPg==';
|
|
15765
15890
|
|
|
15891
|
+
function useDeprecatedWarning(componentName) {
|
|
15892
|
+
React.useEffect(function () {
|
|
15893
|
+
if (window.location.hostname.includes('localhost')) {
|
|
15894
|
+
console.warn("".concat(componentName, " will be deprecated in future versions of Lui. Please see the 'Current Deprecations' page in Lui docs."));
|
|
15895
|
+
}
|
|
15896
|
+
}, []);
|
|
15897
|
+
}
|
|
15898
|
+
|
|
15766
15899
|
/**
|
|
15767
15900
|
* A hook which allows you to register a handler when the escape key is pressed
|
|
15768
15901
|
*
|
|
@@ -15789,11 +15922,21 @@ var useEscapeFunction = function (onEscape, trigger, elRef) {
|
|
|
15789
15922
|
* A hook which allows handling of click event anywhere on the page.
|
|
15790
15923
|
* Provides a way of handling clicks done inside or outside the element bound to the returned react ref.
|
|
15791
15924
|
*
|
|
15925
|
+
* @deprecated
|
|
15926
|
+
* This hook is deprecated. It's no longer supported and will be removed in future version.
|
|
15927
|
+
*
|
|
15928
|
+
* For click inside element handling, consider attaching an `onClick` handler directly onto the element.
|
|
15929
|
+
*
|
|
15930
|
+
* For click outside element handling, consider using the `useClickedOutsideElement` hook instead.
|
|
15931
|
+
*
|
|
15932
|
+
* For click anywhere (both inside and outside) handling, consider attaching an `onClick` handler directly onto the document.
|
|
15933
|
+
*
|
|
15792
15934
|
* @param onClickInsideArg handler for mouse clicks inside the element
|
|
15793
15935
|
* @param onClickOutsideArg handler for mouse clicks outside the element
|
|
15794
15936
|
* @return a react ref which can be bound to an html element
|
|
15795
15937
|
*/
|
|
15796
15938
|
var usePageClickFunction = function (onClickInsideArg, onClickOutsideArg) {
|
|
15939
|
+
useDeprecatedWarning('usePageClickFunction');
|
|
15797
15940
|
var elementRef = React.useRef(null);
|
|
15798
15941
|
var onClickInside = React.useCallback(onClickInsideArg, [onClickInsideArg]);
|
|
15799
15942
|
var onClickOutside = React.useCallback(onClickOutsideArg, [onClickOutsideArg]);
|
|
@@ -15858,14 +16001,6 @@ var buildHideClassDict = function (_a) {
|
|
|
15858
16001
|
};
|
|
15859
16002
|
};
|
|
15860
16003
|
|
|
15861
|
-
function useDeprecatedWarning(componentName) {
|
|
15862
|
-
React.useEffect(function () {
|
|
15863
|
-
if (window.location.hostname.includes('localhost')) {
|
|
15864
|
-
console.warn("".concat(componentName, " will be deprecated in future versions of Lui. Please see the 'Current Deprecations' page in Lui docs."));
|
|
15865
|
-
}
|
|
15866
|
-
}, []);
|
|
15867
|
-
}
|
|
15868
|
-
|
|
15869
16004
|
/**
|
|
15870
16005
|
* @deprecated: this is replaced by LuiHeaderV2
|
|
15871
16006
|
*/
|
|
@@ -18652,10 +18787,18 @@ var LuiSearchInput = function (props) {
|
|
|
18652
18787
|
}, [typedValue]);
|
|
18653
18788
|
var cancelIcon = typedValue !== '' ? (React__default["default"].createElement(LuiIcon, { alt: "clear", name: "ic_cancel_clear", size: "md", className: 'LuiSearchInput-iconPosition', spanProps: {
|
|
18654
18789
|
onClick: function () {
|
|
18655
|
-
var _a;
|
|
18790
|
+
var _a, _b, _c;
|
|
18791
|
+
var canClearInternally = (_a = props.isClearable) !== null && _a !== void 0 ? _a : true;
|
|
18792
|
+
if (!canClearInternally) {
|
|
18793
|
+
// Parent (e.g. unsaved-changes flow) will decide when
|
|
18794
|
+
// input gets cleared. We only signal the intent.
|
|
18795
|
+
(_b = props.onClearCallback) === null || _b === void 0 ? void 0 : _b.call(props);
|
|
18796
|
+
return;
|
|
18797
|
+
}
|
|
18798
|
+
// Default behaviour: clear input + results, and notify parent
|
|
18656
18799
|
setInputValue('');
|
|
18657
|
-
(_a = props.onClearCallback) === null || _a === void 0 ? void 0 : _a.call(props);
|
|
18658
18800
|
setResults([]);
|
|
18801
|
+
(_c = props.onClearCallback) === null || _c === void 0 ? void 0 : _c.call(props);
|
|
18659
18802
|
}
|
|
18660
18803
|
} })) : null;
|
|
18661
18804
|
var searchIcon = props.externalSearch ? (React__default["default"].createElement(LuiIcon, { className: "LuiSearchInput-startIconPosition ".concat(typedValue ? 'LuiSearchInput-startIconPosition-enabled' : ''), name: "ic_create", size: "md", alt: "edit", spanProps: { onClick: function () { var _a; return (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus(); } } })) : (React__default["default"].createElement(LuiIcon, { className: 'LuiSearchInput-startIconPosition', name: "ic_search", size: "md", alt: "search", spanProps: { onClick: function () { var _a; return (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus(); } } }));
|
|
@@ -41326,6 +41469,9 @@ exports.Drawer = Drawer;
|
|
|
41326
41469
|
exports.DrawerGlobal = DrawerGlobal;
|
|
41327
41470
|
exports.DrawerGlobalContext = DrawerGlobalContext;
|
|
41328
41471
|
exports.DrawerGlobalProvider = DrawerGlobalProvider;
|
|
41472
|
+
exports.LinzFreeTextFilter = LinzFreeTextFilter;
|
|
41473
|
+
exports.LinzFreeTextFilterConvertOnly = LinzFreeTextFilterConvertOnly;
|
|
41474
|
+
exports.LinzFreeTextValidator = LinzFreeTextValidator;
|
|
41329
41475
|
exports.LuiAccordicard = LuiAccordicard;
|
|
41330
41476
|
exports.LuiAccordicardStatic = LuiAccordicardStatic;
|
|
41331
41477
|
exports.LuiAccordion = LuiAccordion;
|
|
@@ -41368,6 +41514,7 @@ exports.LuiErrorPage = LuiErrorPage;
|
|
|
41368
41514
|
exports.LuiErrorPanel = LuiErrorPanel;
|
|
41369
41515
|
exports.LuiExpandableBanner = LuiExpandableBanner;
|
|
41370
41516
|
exports.LuiFileInputBox = LuiFileInputBox;
|
|
41517
|
+
exports.LuiFilterCharactersProvider = LuiFilterCharactersProvider;
|
|
41371
41518
|
exports.LuiFilterContainer = LuiFilterContainer;
|
|
41372
41519
|
exports.LuiFilterMenu = LuiFilterMenu;
|
|
41373
41520
|
exports.LuiFooter = LuiFooter;
|
|
@@ -41438,6 +41585,7 @@ exports.isChromatic = isChromatic;
|
|
|
41438
41585
|
exports.useClickedOutsideElement = useClickedOutsideElement;
|
|
41439
41586
|
exports.useDrawerGlobalContext = useDrawerGlobalContext;
|
|
41440
41587
|
exports.useEscapeFunction = useEscapeFunction;
|
|
41588
|
+
exports.useFilterCharacters = useFilterCharacters;
|
|
41441
41589
|
exports.useLuiCloseableHeaderMenuContextV2 = useLuiCloseableHeaderMenuContextV2;
|
|
41442
41590
|
exports.useMediaQuery = useMediaQuery;
|
|
41443
41591
|
exports.usePageClickFunction = usePageClickFunction;
|