@aquera/nile-elements 0.0.21 → 0.0.23
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/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-content-editor/nile-content-editor.css.js +4 -2
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-content-editor/nile-content-editor.css.js.map +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-content-editor/nile-content-editor.d.ts +8 -3
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-content-editor/nile-content-editor.js +58 -31
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-content-editor/nile-content-editor.js.map +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/index.d.ts +1 -0
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/index.js +1 -0
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/index.js.map +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/switch.d.ts +5 -0
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/switch.js +5 -0
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/switch.js.map +1 -0
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.css.js +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.css.js.map +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.d.ts +3 -0
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.js +93 -5
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.js.map +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.css.js +5 -9
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.css.js.map +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.d.ts +2 -0
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.js +29 -15
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.js.map +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-tab/nile-tab.css.js +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-tab/nile-tab.css.js.map +1 -1
- package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/tsconfig.tsbuildinfo +1 -1
- package/demo/filenames.txt +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.iife.js +254 -249
- package/dist/nile-badge/index.cjs.js +1 -1
- package/dist/nile-badge/index.esm.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.esm.js +1 -1
- package/dist/nile-button/index.cjs.js +1 -1
- package/dist/nile-button/index.esm.js +1 -1
- package/dist/nile-button/nile-button.cjs.js +1 -1
- package/dist/nile-button/nile-button.cjs.js.map +1 -1
- package/dist/nile-button/nile-button.esm.js +1 -1
- package/dist/nile-content-editor/nile-content-editor.cjs.js +1 -1
- package/dist/nile-content-editor/nile-content-editor.cjs.js.map +1 -1
- package/dist/nile-content-editor/nile-content-editor.css.cjs.js +1 -1
- package/dist/nile-content-editor/nile-content-editor.css.cjs.js.map +1 -1
- package/dist/nile-content-editor/nile-content-editor.css.esm.js +4 -2
- package/dist/nile-content-editor/nile-content-editor.esm.js +5 -5
- package/dist/nile-dialog/index.cjs.js +1 -1
- package/dist/nile-dialog/index.esm.js +1 -1
- package/dist/nile-dialog/nile-dialog.cjs.js +1 -1
- package/dist/nile-dialog/nile-dialog.cjs.js.map +1 -1
- package/dist/nile-dialog/nile-dialog.esm.js +1 -1
- package/dist/nile-icon/icons/svg/index.cjs.js +1 -1
- package/dist/nile-icon/icons/svg/index.esm.js +1 -1
- package/dist/nile-icon/icons/svg/switch.cjs.js +2 -0
- package/dist/nile-icon/icons/svg/switch.cjs.js.map +1 -0
- package/dist/nile-icon/icons/svg/switch.esm.js +1 -0
- package/dist/nile-icon/index.cjs.js +1 -1
- package/dist/nile-icon/index.cjs.js.map +1 -1
- package/dist/nile-icon/index.esm.js +2 -2
- package/dist/nile-icon-button/index.cjs.js +1 -1
- package/dist/nile-icon-button/index.esm.js +1 -1
- package/dist/nile-icon-button/nile-icon-button.cjs.js +1 -1
- package/dist/nile-icon-button/nile-icon-button.cjs.js.map +1 -1
- package/dist/nile-icon-button/nile-icon-button.esm.js +1 -1
- package/dist/nile-input/index.cjs.js +1 -1
- package/dist/nile-input/index.esm.js +1 -1
- package/dist/nile-input/nile-input.cjs.js +1 -1
- package/dist/nile-input/nile-input.cjs.js.map +1 -1
- package/dist/nile-input/nile-input.esm.js +1 -1
- package/dist/nile-menu-item/index.cjs.js +1 -1
- package/dist/nile-menu-item/index.esm.js +1 -1
- package/dist/nile-menu-item/nile-menu-item.cjs.js +1 -1
- package/dist/nile-menu-item/nile-menu-item.cjs.js.map +1 -1
- package/dist/nile-menu-item/nile-menu-item.esm.js +1 -1
- package/dist/nile-option/index.cjs.js +1 -1
- package/dist/nile-option/index.esm.js +1 -1
- package/dist/nile-option/nile-option.cjs.js +1 -1
- package/dist/nile-option/nile-option.cjs.js.map +1 -1
- package/dist/nile-option/nile-option.esm.js +1 -1
- package/dist/nile-select/index.cjs.js +1 -1
- package/dist/nile-select/index.esm.js +1 -1
- package/dist/nile-select/nile-select.cjs.js +1 -1
- package/dist/nile-select/nile-select.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.css.cjs.js +1 -1
- package/dist/nile-select/nile-select.css.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.css.esm.js +1 -1
- package/dist/nile-select/nile-select.esm.js +3 -3
- package/dist/nile-switcher/nile-switcher.cjs.js +1 -1
- package/dist/nile-switcher/nile-switcher.cjs.js.map +1 -1
- package/dist/nile-switcher/nile-switcher.css.cjs.js +1 -1
- package/dist/nile-switcher/nile-switcher.css.cjs.js.map +1 -1
- package/dist/nile-switcher/nile-switcher.css.esm.js +7 -11
- package/dist/nile-switcher/nile-switcher.esm.js +33 -26
- package/dist/nile-tab/index.cjs.js +1 -1
- package/dist/nile-tab/index.esm.js +1 -1
- package/dist/nile-tab/nile-tab.cjs.js +1 -1
- package/dist/nile-tab/nile-tab.cjs.js.map +1 -1
- package/dist/nile-tab/nile-tab.css.cjs.js +1 -1
- package/dist/nile-tab/nile-tab.css.cjs.js.map +1 -1
- package/dist/nile-tab/nile-tab.css.esm.js +1 -1
- package/dist/nile-tab/nile-tab.esm.js +1 -1
- package/dist/nile-tab-group/index.cjs.js +1 -1
- package/dist/nile-tab-group/index.esm.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.cjs.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.cjs.js.map +1 -1
- package/dist/nile-tab-group/nile-tab-group.esm.js +1 -1
- package/dist/nile-tag/index.cjs.js +1 -1
- package/dist/nile-tag/index.esm.js +1 -1
- package/dist/nile-tag/nile-tag.cjs.js +1 -1
- package/dist/nile-tag/nile-tag.cjs.js.map +1 -1
- package/dist/nile-tag/nile-tag.esm.js +1 -1
- package/dist/src/nile-content-editor/nile-content-editor.css.js +4 -2
- package/dist/src/nile-content-editor/nile-content-editor.css.js.map +1 -1
- package/dist/src/nile-content-editor/nile-content-editor.d.ts +8 -3
- package/dist/src/nile-content-editor/nile-content-editor.js +58 -31
- package/dist/src/nile-content-editor/nile-content-editor.js.map +1 -1
- package/dist/src/nile-icon/icons/svg/index.d.ts +1 -0
- package/dist/src/nile-icon/icons/svg/index.js +1 -0
- package/dist/src/nile-icon/icons/svg/index.js.map +1 -1
- package/dist/src/nile-icon/icons/svg/switch.d.ts +5 -0
- package/dist/src/nile-icon/icons/svg/switch.js +5 -0
- package/dist/src/nile-icon/icons/svg/switch.js.map +1 -0
- package/dist/src/nile-select/nile-select.css.js +1 -1
- package/dist/src/nile-select/nile-select.css.js.map +1 -1
- package/dist/src/nile-select/nile-select.d.ts +3 -0
- package/dist/src/nile-select/nile-select.js +93 -5
- package/dist/src/nile-select/nile-select.js.map +1 -1
- package/dist/src/nile-switcher/nile-switcher.css.js +5 -9
- package/dist/src/nile-switcher/nile-switcher.css.js.map +1 -1
- package/dist/src/nile-switcher/nile-switcher.d.ts +2 -0
- package/dist/src/nile-switcher/nile-switcher.js +29 -15
- package/dist/src/nile-switcher/nile-switcher.js.map +1 -1
- package/dist/src/nile-tab/nile-tab.css.js +1 -1
- package/dist/src/nile-tab/nile-tab.css.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-content-editor/nile-content-editor.css.ts +4 -2
- package/src/nile-content-editor/nile-content-editor.ts +74 -39
- package/src/nile-icon/icons/svg/index.ts +1 -0
- package/src/nile-icon/icons/svg/switch.ts +5 -0
- package/src/nile-select/nile-select.css.ts +1 -1
- package/src/nile-select/nile-select.ts +130 -26
- package/src/nile-switcher/nile-switcher.css.ts +5 -9
- package/src/nile-switcher/nile-switcher.ts +46 -22
- package/src/nile-tab/nile-tab.css.ts +1 -1
package/package.json
CHANGED
@@ -12,7 +12,6 @@ import { css } from 'lit-element';
|
|
12
12
|
*/
|
13
13
|
export const styles = css`
|
14
14
|
:host {
|
15
|
-
width: 100%;
|
16
15
|
box-sizing: border-box;
|
17
16
|
font-size: 14px;
|
18
17
|
}
|
@@ -25,7 +24,7 @@ export const styles = css`
|
|
25
24
|
|
26
25
|
.dropdown-position {
|
27
26
|
position: relative;
|
28
|
-
bottom:
|
27
|
+
bottom: 1px;
|
29
28
|
}
|
30
29
|
.content-editable-input {
|
31
30
|
box-sizing: border-box;
|
@@ -33,6 +32,7 @@ export const styles = css`
|
|
33
32
|
padding: 9px;
|
34
33
|
border: 1px solid #c7ced4;
|
35
34
|
border-radius: 4px;
|
35
|
+
overflow: auto;
|
36
36
|
overflow-x: auto;
|
37
37
|
overflow-anchor: none;
|
38
38
|
scrollbar-width: none;
|
@@ -51,6 +51,8 @@ export const styles = css`
|
|
51
51
|
}
|
52
52
|
|
53
53
|
.read-only {
|
54
|
+
background-color: hsl(240 4.8% 95.9%);
|
55
|
+
opacity: 0.5;
|
54
56
|
cursor: not-allowed;
|
55
57
|
}
|
56
58
|
|
@@ -63,6 +63,8 @@ export class NileContentEditor extends NileElement {
|
|
63
63
|
@property({ attribute: 'error' }) error = false;
|
64
64
|
@property({ attribute: 'noborder' }) noborder = false;
|
65
65
|
|
66
|
+
@state() initialValue = '';
|
67
|
+
|
66
68
|
static styles: CSSResultGroup = styles;
|
67
69
|
|
68
70
|
connectedCallback() {
|
@@ -74,17 +76,8 @@ export class NileContentEditor extends NileElement {
|
|
74
76
|
this.setInitialValues();
|
75
77
|
}
|
76
78
|
|
77
|
-
setInitialValues() {
|
78
|
-
this.updateComplete.then(res => {
|
79
|
-
if (res && !!this.value)
|
80
|
-
this.contentEditor.innerHTML = this.generateHTMLTagsWithValues(
|
81
|
-
this.value
|
82
|
-
);
|
83
|
-
});
|
84
|
-
}
|
85
|
-
|
86
79
|
addOpenListeners() {
|
87
|
-
|
80
|
+
window.addEventListener('click', this.handleOutsideClick);
|
88
81
|
this.addEventListener('cut', this.handleClipboardEvent);
|
89
82
|
this.addEventListener('copy', this.handleClipboardEvent);
|
90
83
|
this.addEventListener('paste', this.handleClipboardEvent);
|
@@ -97,6 +90,12 @@ export class NileContentEditor extends NileElement {
|
|
97
90
|
this.removeEventListener('paste', this.handleClipboardEvent);
|
98
91
|
}
|
99
92
|
|
93
|
+
handleOutsideClick(event: any) {
|
94
|
+
if (event && event.target && !this.contains(event.target)) {
|
95
|
+
this.toggleDropdown(false);
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
100
99
|
async handleClipboardEvent(event: Event) {
|
101
100
|
const selectedText = window?.getSelection()?.toString();
|
102
101
|
switch (event.type) {
|
@@ -126,13 +125,16 @@ export class NileContentEditor extends NileElement {
|
|
126
125
|
this.openDropdown = value;
|
127
126
|
}
|
128
127
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
128
|
+
setInitialValues() {
|
129
|
+
this.updateComplete.then(res => {
|
130
|
+
if (res)
|
131
|
+
this.contentEditor.innerHTML = this.generateHTMLTagsWithValues(
|
132
|
+
this.value
|
133
|
+
);
|
134
|
+
});
|
133
135
|
}
|
134
136
|
|
135
|
-
@watch(['type'], { waitUntilFirstUpdate: true })
|
137
|
+
@watch(['type', 'value'], { waitUntilFirstUpdate: true })
|
136
138
|
handleTypeChange() {
|
137
139
|
this.contentEditor.innerHTML = this.generateHTMLTagsWithValues(this.value);
|
138
140
|
}
|
@@ -155,14 +157,6 @@ export class NileContentEditor extends NileElement {
|
|
155
157
|
return;
|
156
158
|
}
|
157
159
|
|
158
|
-
if (event.code === KeyCode.ARROW_RIGHT) {
|
159
|
-
this.contentEditor.focus();
|
160
|
-
// select all the content in the element
|
161
|
-
document.execCommand('selectAll', false, undefined);
|
162
|
-
// collapse selection to the end
|
163
|
-
|
164
|
-
document?.getSelection()?.collapseToEnd();
|
165
|
-
}
|
166
160
|
if (event.code === KeyCode.ESCAPE) {
|
167
161
|
event.preventDefault();
|
168
162
|
this.toggleDropdown(false);
|
@@ -194,9 +188,12 @@ export class NileContentEditor extends NileElement {
|
|
194
188
|
}
|
195
189
|
|
196
190
|
generateValuesFromHTMLTags(string: any): string {
|
191
|
+
let errorTag =
|
192
|
+
/<span class="chips chip-error" contenteditable="false">(.*?)<\/span>/g;
|
193
|
+
this.error = !!string.match(errorTag);
|
197
194
|
var pattern =
|
198
195
|
/<span class="chips(?: chip-error)?" contenteditable="false">(.*?)<\/span>/g;
|
199
|
-
|
196
|
+
let result = string.replace(pattern, (match: any, option: any) => {
|
200
197
|
return '{{' + option + '}}';
|
201
198
|
});
|
202
199
|
return result;
|
@@ -224,9 +221,6 @@ export class NileContentEditor extends NileElement {
|
|
224
221
|
emitInputChange(): void {
|
225
222
|
if (this.contentEditor) {
|
226
223
|
let fieldValue = this.contentEditor.innerHTML;
|
227
|
-
if (this.contentEditor.innerText !== '') {
|
228
|
-
fieldValue = this.generateValuesFromHTMLTags(fieldValue);
|
229
|
-
}
|
230
224
|
fieldValue = fieldValue.replace(/ /g, ' ');
|
231
225
|
fieldValue = fieldValue.replace('<br>', '');
|
232
226
|
this.emit('nile-change', {
|
@@ -235,7 +229,13 @@ export class NileContentEditor extends NileElement {
|
|
235
229
|
}
|
236
230
|
}
|
237
231
|
|
238
|
-
|
232
|
+
replaceText = '';
|
233
|
+
|
234
|
+
insertNodes(
|
235
|
+
parentNode: Node,
|
236
|
+
childNodes: NodeList,
|
237
|
+
autoOptionsTag?: HTMLElement
|
238
|
+
) {
|
239
239
|
[...childNodes].forEach((node: Node, index: number) => {
|
240
240
|
if (node.hasChildNodes()) {
|
241
241
|
if (autoOptionsTag) {
|
@@ -246,23 +246,54 @@ export class NileContentEditor extends NileElement {
|
|
246
246
|
} else {
|
247
247
|
if (node.nodeValue?.includes(this.tagIdentifier)) {
|
248
248
|
if (autoOptionsTag) {
|
249
|
-
|
250
|
-
this.tagIdentifier + this.filteredValue,
|
251
|
-
''
|
252
|
-
);
|
253
|
-
parentNode.childNodes[index].after(autoOptionsTag);
|
249
|
+
this.insertAutoOptionsTag(node, autoOptionsTag);
|
254
250
|
}
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
.slice(1)
|
259
|
-
.join() || '';
|
251
|
+
|
252
|
+
this.setFilterValue(node.nodeValue);
|
253
|
+
|
260
254
|
return;
|
261
255
|
}
|
262
256
|
}
|
263
257
|
});
|
264
258
|
}
|
265
259
|
|
260
|
+
insertAutoOptionsTag(node: any, autoOptionsTag: any) {
|
261
|
+
const selection = window.getSelection();
|
262
|
+
const range = document.createRange();
|
263
|
+
const curssorNodeindex = node.nodeValue.indexOf(this.tagIdentifier);
|
264
|
+
range.setStart(node, curssorNodeindex);
|
265
|
+
range.insertNode(autoOptionsTag);
|
266
|
+
range.setStartAfter(autoOptionsTag);
|
267
|
+
range.collapse(true);
|
268
|
+
selection?.removeAllRanges();
|
269
|
+
selection?.addRange(range);
|
270
|
+
|
271
|
+
if (autoOptionsTag.nextSibling?.nodeValue) {
|
272
|
+
autoOptionsTag.nextSibling.nodeValue =
|
273
|
+
autoOptionsTag.nextSibling?.nodeValue?.replace(
|
274
|
+
this.tagIdentifier + this.filteredValue,
|
275
|
+
''
|
276
|
+
);
|
277
|
+
}
|
278
|
+
this.contentEditor.focus();
|
279
|
+
}
|
280
|
+
|
281
|
+
setFilterValue(value: any) {
|
282
|
+
//replace Text - check if text exists after tagidentifier , if exists take account of that too
|
283
|
+
if (!this.openDropdown) {
|
284
|
+
this.replaceText = value.split(this.tagIdentifier).slice(1).join();
|
285
|
+
}
|
286
|
+
if (!!value && this.openDropdown) {
|
287
|
+
this.filteredValue = value
|
288
|
+
?.split(this.tagIdentifier)
|
289
|
+
.slice(1)
|
290
|
+
.join()
|
291
|
+
.replace(this.replaceText, '');
|
292
|
+
} else {
|
293
|
+
this.filteredValue = '';
|
294
|
+
}
|
295
|
+
}
|
296
|
+
|
266
297
|
handleOptions(option: any): void {
|
267
298
|
this.toggleDropdown(false);
|
268
299
|
let autoOptionsTag = document.createElement('span');
|
@@ -274,9 +305,13 @@ export class NileContentEditor extends NileElement {
|
|
274
305
|
this.contentEditor.childNodes,
|
275
306
|
autoOptionsTag
|
276
307
|
);
|
308
|
+
this.resetOptions();
|
309
|
+
this.emitInputChange();
|
310
|
+
}
|
311
|
+
|
312
|
+
resetOptions() {
|
277
313
|
this.filteredOptions = this.options;
|
278
314
|
this.filteredValue = '';
|
279
|
-
this.emitInputChange();
|
280
315
|
}
|
281
316
|
|
282
317
|
public renderAutoOptions(): TemplateResult {
|
@@ -334,6 +334,7 @@ export { default as stringinput } from './stringinput';
|
|
334
334
|
export { default as stringletters } from './stringletters';
|
335
335
|
export { default as support } from './support';
|
336
336
|
export { default as swap } from './swap';
|
337
|
+
export { default as switch } from './switch';
|
337
338
|
export { default as sync } from './sync';
|
338
339
|
export { default as table } from './table';
|
339
340
|
export { default as tag } from './tag';
|
@@ -0,0 +1,5 @@
|
|
1
|
+
/**
|
2
|
+
* Do not edit directly
|
3
|
+
*/
|
4
|
+
|
5
|
+
export default "PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PHJlY3Qgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiBmaWxsPSJ1cmwoI3BhdHRlcm4wKSIvPjxkZWZzPjxwYXR0ZXJuIGlkPSJwYXR0ZXJuMCIgcGF0dGVybkNvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHdpZHRoPSIxIiBoZWlnaHQ9IjEiPjx1c2UgeGxpbms6aHJlZj0iI2ltYWdlMF8xOTYxNV8zODM5NDEiIHRyYW5zZm9ybT0ic2NhbGUoMC4wMDE5NTMxMikiLz48L3BhdHRlcm4+PGltYWdlIGlkPSJpbWFnZTBfMTk2MTVfMzgzOTQxIiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FZQUFBRDBlTlQ2QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFPeEFBQURzUUJsU3NPR3dBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFDQUFTVVJCVkhpYzdkMTVuRjFGbWZEeFgzZG5od0FoWVllUXNPK0lMSUlFaFFGR0djVmxlSEhVbVVGRlhNWU5seGw1ZGVaVloxUkVSVVFVWjNCQmxoRWRVV1JUY0VBV0JXVGY5eWdKaXhBZ0FRSUpaTzErLzZqYjVxYnA3dHkrZmM5OTZwN3orMzQrejZjallxcnFPZTJwT25YcVZJRWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWtTWklrU1pJa1NaSWlkVVZYUU5sWkg1Z0dUSzNGSkdDOTJuODN2dmFmQWRZR3hyYTlkcElHV2c0c3F2MzVSV0JwN2MvUDFmN3pnbHJNQjU1cGUrMlVMUWNBMWRFTmJBTE1ySXNadGRpWVZSMStUMHoxSkxYQlNsWU5DT1lCYzRFNWRUL25BSThEZlRIVlV6czVBQ2lubWNDdXRkaTk5bk1tNlFsZWtvYXpGSGdJdUF1NHMrN24zTUE2cVFBT0FEcmZkR0FXc0Ird0I2bXpYeWUwUnBMS2FDRnBNSEE3OEFmZzk4Q2pvVFhTcURnQTZDdzl3QTdBL3FST2Z4YnB5VjZTSWp3QjNBSmNBMXdMM0Fnc0M2MlJHdVlBSUg4YkFxOEZEZ2ZlQ0V5SnJZNGtEV2t4Y0NWd0VYQUp6aEJrelFGQWZzYVFudkFQQTE1UGVvY3ZTWjJtRDdnRHVMUVcxd0lyUW11azFUZ0F5RU0zOEdyZ1NPRHZnSTFpcXlOSkxmY3NjREZ3TG1sQXNEeTJPbklBRUtlKzAzOGI2Vk04U2FxQ0JjQ3ZTWU9CUzNCbUlJUURnUGJiR2pnR09BcllOTGd1a2hUdHo4Qlp3QTlJbngrcVRSd0F0TWM0NE0zQSs0R0RNZStTTkZBZmNCMXBNSEEyOEZKc2RjclBqcWhZMndJZklEM3RieEJjRjBucUZFK1RCZ0tuQWJPRDYxSmFEZ0NLc1Nkd0xQQk8zRnBYa3ByVlMxb3I4QzNnOHVDNmxJNERnTmJwQnQ0QWZJYTBLNThrcVhWdUpRMEV6c0ZGZ3kzaEFHRDBKZ0x2QXo2T3UvSkpVdEVlQXI1SldqUzRKTGd1SGMwQlFQUEdBdThCUGdkc0Zsd1hTYXFheDRBVFNlc0VIQWcwd1FIQXlIVURSd0JmSVgzU0owbUs4d2p3WmVCMGZEVXdJZzRBR3RkTld0VDNlV0NiNExwSWtsWTNHL2gzNENla3hZTmFBd2NBamRrSE9Ca1g5MGxTN200bHJjbjZmWFJGY3RjZFhZSE1iVTc2RnZWNjdQd2xxUk84RXZnZDZVVENHYkZWeVp2ZnFBOXVFdkJKNEdmQTNqaFRJa21kWmp2U1JteVRTUTl4eTJLcmt4ODd0cGQ3TS9BZDB0Ty9KS256UFFKOGhEUXJvQnBmQWF5eUVXbTYvM3pzL0NXcFRLWURGNUlHQUg2MlhlTXJnT1JJMG5hVCswWlhSSkpVbU8yQW80Rm5TWXNGSzYzcXJ3Qm1ramFST0RTNklwS2t0dm9kYVJmWEI2TXJFcVhLTXdCSEFSY0RPMFpYUkpMVWRsc0N4d0NMZ0J1QzZ4S2lpak1BMDREdkEyK0pyb2drS1F1L0pNMEdMSWl1U0R0VmJRQndNSEFtTGdLUkpLM3VTZEw1THBkRVY2UmRxdklLWUR4cHIrai9BdFlOcm9za0tUOXJrN1o3WHgrNEVsZ1pXNTNpVldFR1lBdmc1NlR0ZkNWSldwTmJTWWUrelEydVI2SEtQZ0E0RkRpSDlONWZqWHVHOUM1c2Z1M25BbUJwTFY2cy9UdUxnT1VodFpOVWJ5enA2UlhTTHFiamF6RU5tRnFMYWNDVWtOcDFycWVCdHdOWFJGZWtLR1VkQUhRQnh3RmZvanF2T1VaaUhuQVBhWFRiSDNOcVArZFJnYWt2cVlKNmdJMUpuei9QcVBzNUE5aVp0Qm1hVnJjUytDendkYUF2dUM0dFY4WUJ3RHJBR2NCYmcrdVJnNVhBM2NCdHdGM0FuY0FkcEpHdEpOWGJFTml0THZZZ0RReDhpSUpma0JZSXZoQmRrVllxMndCZ0srQlh3QTdSRlFuUy96M3J0Ylc0SG5nK3RFYVNPdGs2cEpOUVh3M01JcTJsV252WS8wVjUzUXU4a1RSYnFzenNTL3FNbzY5QzBRdmNRdnJDWVJZd1p0UlpsS1NoalFFT0FJNG5MWlRySmY0KzJNNllod3ZLczNNRWFYRmE5QzlITytKRjBuVFV1MG52OHlRcHlzYWtxZkh6Z0plSXZ6KzJJeGJqUm5MWk9KYjByanY2bDZMSVdFSTZ4ZW9vMHBTY0pPVm1JbkE0NlZUVnhjVGZONHVNWHVBTExjbWFtdElEbkVyOEwwS1JjUTNwU2QvTml5UjFrdlZJTXdQWEVIOGZMVEpPQWJwYmxETTFxSWMweW95KytFWEVzNlFUQ25kcldiWWtLYzcyd0FuQVU4VGZYNHVJbjVEMllsQWJqQWN1SVA2aXR6cHVJbTFET2I1MXFaS2tiRXdBL2g2NG1majdiYXZqbDNqdkx0d2s0RGZFWCt4V1JTOXdHZW05bVNSVnhTemdaOEFLNHUvRHJZb3JxTzRua29WYkIvZ2Q4UmU1RmJHVWRDUnhWZmNya0NTQUhZRWZBTXVJdnkrM0lxNEdKcmMwUTJJOTRFYmlMKzVvWXpsd09ta0xUa2xTc2hWcEI5Y3l6QWpjZ0F1M1cyWVNuZi9rdjVJMDNiVmRpM01qU1dVeWs3UUl1dE1IQW4vQTF3R2pOcEgwWGlYNllvNG1MZ04yYVhWaUpLbkVkZ011Si83K1BacTRuTFR3VVUwWVM5cjhKdm9pTmh1emdTTmJuaFZKcW83RGdUOFNmejl2Tmk3RnJ3TkdiQXp3YytJdlhqT3hFUGhuWUZ6THN5SkoxVE1lK0RUcFlMUG8rM3N6OFQ5NG9tTER1b0F6aWI5b3pjUXZnVTFibnhKSnFyek5nUXVKdjg4M0U2ZFR2dE4zQy9GRjRpL1dTR01lYVo5K1NWS3hEZ2NlSS82K1A5TDRmQkhKS0pQM0VIK1JSaEs5cEpIZGxDS1NJVWthMVByQWo0anZBMGJhWC9pZ09JUURTUnZrUkYra1J1TXA0RTFGSkVLUzFKRFhBVThRM3g4MEdzdUFnd3ZKUkFmYmlYUUlUdlRGYVRRdXczZjlrcFNERFlHTGllOFhHbzJGd0s2RlpLSURiUXc4VFB4RmFTUmVBbzdGeFJ5U2xKTXU0T09rZTNSMFA5RklQRVFhdUZUYVdPRDN4RitNUmkvWUs0cEpneVNwQlY0SnpDRyt2MmdrcmlKOThsNVozeWIrSWpRU1YrQm9UWkk2d1ZUU0JqelIvVVlqY1ZKQk9jamVPNGxQL3BxaUZ6Z0JOM0dRcEU3U0JSeEhPb2NsdWg5WlUxVHV5NERkZ2NYRUozNjRXQVM4cGFnRVNKSUtkd1NkMGRkVTVyeVlLZVMvdC9NVHdGNUZKVUNTMURaN2t6WnJpKzVYaG92WnBHUHZTKzk4NHBNOVhOd05iRmxZNnlWSjdUWUR1SmY0L21XNCtIbFJqYy9GQjRsUDhuQnhPUlVaaFVsU3hheEgvc2ZMdjdldzFnZmJCbmlCK0FRUEZSZmdzWTJTVkdianlQdWsyVVhBOW9XMVBzaFk0QWJpa3p0VW5FUEZ2OGVVcElyb0FjNGd2dDhaS202bVpNZkpuMEI4VW9lSzA0RHU0cG91U2NwTUYzQUs4ZjNQVVBIbDRwcmVYZ2VTNzdlWUorRzJ2cEpVUlYzQXljVDNRNFBGQ3VBMXhUVTlLYnJ6bXdUY0NXeGRjRG5OT0JYNFNIUWxKS2tCNDBnNzNFMWoxZlR3dXFUWnk1WEE4N1YvdGdSWVVJdmxiYTVqcC9vRzhNbm9TZ3hpRHVuUW9NVkZGVkQwQU9CRTRGTUZsOUdNTTRHalNUdjlTVkswOGNET3BKTlJ0eVo5dGpZRDJJSzBEZm5rSnY3TzUwbmZ2ejlHNmt6bUFuOEM3Z0h1d3dGQ3Z5N2dlOEF4MFJVWnhOZElPeHAybkZlUWZzR2lwMUlHeHM5eHdaK2tPR05JaDlaOEZQZ3hxVU51OTcxeUdYQUhjQmJwOCt4ZHFmWmFxQjdnSjhUM1R3TmpPYkJuZ2UwdXhGamdkdUtUTnpBdXFOVk5rdHBwQitBVHdHL0k5M1BvNTRDTGdBOERXeFdUaHF5TkJTNG0vam9NakZ2cHNJZldmeVUrYVFQakptQ3RJaHN0U1RWZHdINmtSV1lQRVgvL2F5WWVBTDVLbXEyb2lvbkE5Y1RuZm1COHVzaEd0OUoyd0V2RUo2dytIZ0kyS3JMUmtrUjZqMzhpOEREeDk3MVd4bXpnUzZRTjNjcHVFOUo2aWVpYzE4ZUw1TG1ZL21WK1JYeXk2bU1oNmYyV0pCVmhBbkFrY0JscFlYSDBQYS9vdUJsNFArbHB1YXgyQXA0aFB0ZjFjWDZoTFc2QjF4T2ZwUHBZQ2h4VWFJc2xWZFdHd0JlQStjVGY2eUxpeVZyN3A0MHVqZGs2bUxSWU1qclA5WEZJb1MwZWhUR2trL1NpRTFRZkh5cTB4WktxYUZ2Z2ROSTM5OUgzdUJ4aU1mQWQwaWVMWmZNeDR2TmJIL2VRNllMQVk0bFBUbjJjWFd4ekpWWE1kTkxXNFRsKzNweERMSzNsWjlObUU1eXBIeEdmMi9ySTdzRjJmZkthQnJ1ZHRBdWhKSTNXK3FSOTQ1Y1NmMi9yaEZnTUhBK3MzVXl5TXpRUnVJWDR2UGJIQXRLdWtObjREdkZKNlkvNXBCMjBKR2sweHBBV3V6MUYvSDJ0RStQeFd2NTZScHI0REcxTlhvc0NUeTYydVkyYlNUNGo0MTdnamNVMlYxSUY3QWZjUmZ3OXJReHhQZVg0RXV1dHhPZXlQNWFRWGttRk81MzRaUFRIcVFXM1ZWSzVUU0lkWDc2QytQdFptV0o1TGE4VEdyOFVXZm9lOGJuc2o5TUtidXNhYlVzK0MyTHV4ZmYra3BwM0lQbHRBRk8ydUEvWXE3SExrYVcxU0cySXptTWY2UlBGME0yQmZqeElwU0ppQ2JCSHdXMlZWRTVqU04reis5VGZubGhleTNlbnJnMTRKZm04OWo2ajJLWU9iV2ZTT2RUUkNlZ0QvcVhndGtvcXA2MUpPOXRGMzhPcUdGZVN0dDN0Uko4aFBuOTlwRUhyOWdXM2RWRG5ObEhaSXVJbU9uY2tLU25PWWVTMXNydUs4UlR3VjJ1NlVCa2FRejZmQnA1VGNGdGZaanZ5ZVBwZmpsUC9ra2FtQy9nY2VkekRqUFF1KzZQRFhyRTg3VTRlV3dXdm9NMkhOSjFXUUNPYWlTOFYzVkJKcFRLZWZOWXVHYXZIRDRDeFExKzZMSDJWK0x6MUFkOHV1cUg5TmlBZFRSamQ0QWZvL0U5S0pMWFArc0RWeE4rN2pLSGpOOEE2UTEzQURFMGtIWlVjbmJmRnRPbFFwczhITkc2dzZNVDNScEppYkVsNmFJaStieGxyamx0SUQ1cWQ0blhFNTZ3UCtMZWlHem9CbUpkQlEzOVJkRU1sbGNaTTRDSGk3MXRHNDNFZnNQbGdGek5URnhLZnN5Y3BlRmI4QXhrMGNpbHBBeUpKV3BNZGdNZUl2MjhaSTQ4NUJHOTBNd0piazhmeDBNY1UyY2k3TTJqZ0NVVTJVRkpwYkFzOFFmdzl5MmcrSHFGekRuYzdrZmg4M1ZsVTQvYlBvSEZQQUpPTGFxQ2swcGlPMi9xV0pXYlRHUnNHclV1YWhvL08xNzVGTk82TURCcjJvU0lhSnFsVU5zTjMvbVdMTzBsZmNlVHVXT0p6OVlOV04ycGQwbWNHa1kxNm1QUU5yeVFOWlRKd0cvRTNZYVAxOFR2eTd3TW1BSThTbTZkRk5QZ3BaWGVEamZvSDRrL2Erdy9TQWtCSkdrd1BhWk9mVjBSWFJJVTRBRGlUdEpOanJwWUF4d2ZYWVMzZzdhMzhDMjhsZGtUelJ6cHZoeWhKN2ZXZnhEK2xHc1hIdjVPM3NjUy9ncnFwVlkzWk83Z2hmY0JScldxTXBGSjZIL0gzcWFKakplbndvcm5BUGNBTndHWEFqY0M5cE5la3p3QzlHZFMxeU9nRjNrTGVqaVkrVDJ1Y0NXdGtLdVdid01jYitQZUs4akRwb0lNVmdYV1FsSzk5Nkl6M3c0MWFRdXJVN3lIdFh0Z2ZENU02dnpVWlEvcDBibnZTUGdqYkFidVFIdWJLTXBQNlBPbTZQeEJka1NHTUpjMWNUdytzdzllQlQ0L21MK2dtZmhPTnlNR0hwTHhOSTMwckh2MjBOWnBZRGx4SE90enNZTkwrOGtWWUMzZzk2UUNibStqODB4RHZxYlVwVi85Q2JINGVZWlRySlE0SWJzQkNPdXRnQ0VudDlUUGlPNkxSZEdESEFSdTFQQ3VOMlpUMDJWcjBHcS9SeEdrdHowcnJyQU04UjJ4K1hqV2FCbnc3dVBMdStpZHBLSjM0M3Y5WjRHdkF6Z1hrWXpUMkJFNGhmVUlXbmFPUnhsc0x5RWVyUk84T2VGS3pGZThCSGcrcytESTY2ekFJU2UyekxaM1ZXVDBGZkphMHAwck9wZ0ZmSkExVW9uUFdhTXduMzUwQ3R5RDFaVkc1ZVpUR1AvZGZ6VUdCbGU0RHptMm0wcEpLcnd1NG12aU9wNUY0a3JTT0tYb2ZsWkZhaHpSZzZaU0J3SG5GcEtFbHppTTJON09hcWZSM2dpdjkxODFVV2xMcGZaRDREbWROMFF1Y1JYcWk3bVFiazlyUkNaOFcvbTFCT1JpdHc0ak55OG5OVlBxUGdSVitpQ2FuTFNTVjJtYkVMNnhhVTl4TStrU3RUQTRrN1RVUW5kdmg0bkZndllMYVB4cmR4QjVNTmVKUEpiY1ByR3dmOEs4anJiQ2tTamlIK0k1bXFGaE91bmYxRk5iNldHTkpueERtUEJ2d3JjSmFQenFmSnpZdlc0K2tzaDhQck9oeTB1Y3BrbFJ2UC9MdGZPWUJoeFRYOUt3Y1FtcHZkTTZINmo5MkthN3BUZHVjdEpsZFZGNCtQSkxLL2lhd29wZU1wS0tTS3FHYnREdGVkQWN6V0Z4T2VsZGVKWnNEdnljKzkwTmRqeHhkVGx4T0xtNjBraE9CRndNcit1NUdLeXFwTXY2QitJNWxzUGcyMVYydk5CWTRtL2hyTUZpOHZzQjJOeXR5MzRvWGFYQ0h5VGNFVm5JWnNINGpsWlJVR1QzQS9jUjNLZ1BEamNyU0o1bGZKZjVhREl5YnllL1k0Q21rSSsyamN0TFFsM1VuQlZhdzRXa0tTWlZ4RFBFZFNuMnNJSDJLcUZXT0piLzFHWWNYMnVMbVhFSmNQcjdXU0FVajM3UDlReU1WbEZRWlk0bjloR3BnOU9KOWFpZ2ZKZjc2MU1kdDVEY0w4RzdpOG5IZG1pbzNpYmh0QzVlUi96YVprdHJyS09JN2t2cjRaTEhON1hoZkpQNGExVWR1YXdHbWtMNVVpTWpGRW1EQ2NKV0wzUDczcWtZektLa3liaU8rRSttUDR3dHVhMW1jUXZ5MTZvL0xDbTVyTTY0aExoOEgxRmRrNE9yVi9Wdlp5aEh5OHo5SjlRNEdYaEZkaVpvemNJT3lSbjBDdUNDNkVqV0hrTS92VUw5TEE4c2V0bytQWEtDd1c4dWFLS2tNTGlEK0NiS1BOQXN4N05TcFhtWmRZcmVUcjQvVEMyN3JTTzFKWEM0dUdxcFMzY0F6UVpWNm5Qd1dhMGlLc3hteE82ZjF4d3ZBRGdXM3RheDJBMTRpL2hxK1NGNW5CSFNSK3J5SVhEeEQzY3gvL1N1QWJVa0xGQ0wwenp4SUVzQjd5V05QL1g4aTdVR2drYnNUK0hSMEpVZ2I0THc5dWhKMStvaGJtekNGSWM0RmVCdHhJN1NqV3QxS1NSMHIrdlMwL3NodDZyaFRYVWo4dGJ5bDhGYU96SHVKeThVUmcxVW84dk9OYlVhZVAwa2w5VnJpTzR6NXdMU2lHMW9SVzVCZXBVUmYwNTJLYnVnSTdFQmNIcjdRWDRuNlZ3QlJpL0NlSWkwV2tTUklzNUhSUGswYUJHajBIZ1crSEYwSjRNam9DdFI1QUhnNnFPeGRCL3VIYzRnWmpaelgrdlpKNmxEZHhDMlE2bzlyY0ZGeXE0MGhyUW1Jdks3M0ZkN0trWW42eW1WMmZ3WDZad0RXQWJZc3FwVnJjRzFRdVpMeWN3Q3dTV0Q1dmFTejAvc0M2MUJHSzBqN0EwVGFnYnhlQTBUMWZWc0JhOE9xQWNBdXhJMTRid29xVjFKKzNoQmMvdm5BSGNGMUtLdmZBcjhQcnNQZkJKZGY3OGFnY3J1Qm5mdi9BTEJqVUVYNlNOTkNrZ1J3V0hENVh3a3V2K3lpdDFPTy92MnFGOW4zN1FpckJnQXpneXJ4Q1BCY1VObVM4ckk1dFNlVElKZVN6cEZYY1M0bGR0WjNGakE1c1B4Nnp3Q1BCWlU5RStJSEFFNjFTZXAzS0xHTDc2S2ZUcXNpTXMvamdOY0Vsai9RWFVIbHpvRDRBWURULzVMNlJSNUdkaS94NzZlcjRrTGlubndoOXZkc29LZytjTFVaZ0JsQmxiZzdxRnhKK1ltOE1aOFpXSGJWOUFMbkJKWS9LN0RzZ2FKbUFQN3kwRCtCZEVFaXZrZmNzOUFtU3VvVVU0bTdENjBrclQ5USsreEUzSDRBUzREeHhUZXhJZnNTOXpzL3ZwdjA5Qi8xM20xdVVMbVM4ckluY2ZlaDN4STdKVjFGOXdLM0JwVTludlRwZXc3bUJKWGJEVXp2SnUzVEhPRUZZRUZRMlpMeUVyVVZPY0JQQTh1dXNzaThEN29kYm9DbmdNVkJaVS92QmpZSUtqeHE1Q01wUDVFRGdOOEdsbDFsa1huUFpRRFFCendjVlBhMGJ1Sk92Sm9iVks2ay9FVGRrUDlFM0EyNDZtNG5mUXNmSVpjQkFNUTlERS9yQnRZUEt2elJvSElsNWFVTDJDNm83Q3VDeWxWYTlIbDFVTm5iQjVVN21FZUN5cDBhT1FQd1ZGQzVrdkt5SVRBcHFPd3JnOHBWRXBYL3pVaWJBdVVnNmxqZzBBR0FDd0FsUWR3K0pBQTNCSll0dUQ2bzNCNWdlbERaQTBYMWhkTzZTZC9mUnBnZlZLNmt2RVR0UkxvVTMvOUhlekN3N0JtQlpkZUw2Z3VuUnE0QmlGcjhJU2t2bXdhVk81dTBJWXJpTEFUbUJaVWQ5WHMzVU5RTXdOUnVZR0pRNGM0QVNJSzRXY2dIZ3NyVjZxS3VROVR2M1VCUkE0Q0ozY1F0aEhnK3FGeEplWW1haFl5Y2Z0WXFVUU9BcVBWdkF5ME1LbmQ4TjNGN0lpOE5LbGRTWHFKdXhFOEVsYXZWUFI1VWJpNHpBRkY5NGJqSUdZQmxRZVZLeXN2YVFlVTZDNW1IUlVIbFJ2M2VEUlRWRnpvRElDbGMxRVBJQzBIbGFuVlJBN0ZjOWdGd0JrQlNaVGtBcUxhbzY1RExrY0JSQTREeERnQWtSWXU2QjBWTlBXdDFEZ0Jpak84T0tsaVNKQVhxSnU1SlBKZjNMNUppUmQyRGNsa0VWbldUZzhyTlpSMWEyRG84QndDU29rWGRnNkk2SHExdW5hQnlIUUFRK1A0aHFGeEplWEVBVUcxUjF5R1hkV2hSZmVFeVp3QWtSWXRhakJmMTVLblZSUTBBY2xrRUd0VVhPZ01nS1Z6VXVTQ2JCSldyMVVVZHl2TjBVTGtEVlhJR1lOMmdjaVhsSldvQXNIMVF1VnBkMUhXSU9vUm5vUFdDeWwzYURid1VWSGd1K3pCTGloVjFJM1lBa0llbzY1RExpYlJSaDJHOTFFM2MvL2x5T1lsSlVxeW9RM20yQVhxQ3lsYXlMckJSVU5uemdzb2RhSU9nY3VkSERnQ2NBWkFFTURlbzNQSEFqS0N5bFVUT3dzd0pMTHRlVkYrNG9KdTRhUkJuQUNSQjNBQUFZSi9Bc2dXdkNpcDNKZkJJVU5rRFJRMEFRbWNBSEFCSUFuZ1NXQnhVOWtGQjVTcUp5djlqd1BLZ3NnZUs2Z3VmaVJ3QWJCRlVycVQ4UEJoVTdzRkI1U3B0UmYvYW9MS2pmdDhHczJWUXVmTWpYd0hNRENwWFVuN3VEQ3AzSzF3SEVHVVA0bGJBM3hGVTdtQ2krc0xRQWNDTW9ISWw1ZWV1d0xLZEJZZ1JtZmQ3QXN1dTEwWGNETUNDYnVJV1FrekdMd0VrSlZFekFBQnZEeXk3eWlMekh2bjdWbTlEWUZKUTJROERUQUI2Z2I2QTJLdndKa3JxQkZOSUs3TWo3a01yY1UxU3UrMU16TFh1QTE0a243Tm85aVh1ZDM1OE43Q0UySTA0Sk9sWjRQNmdzcnVCZHdhVlhWWHZDaXo3UnZJNUNUQ3FEM3ljMmxiQUVQY2Q3cTVCNVVyS3o3V0JaUjhWV0hiVmRBUHZDQ3ovbXNDeUI5b3RxTnc1a0M0RXhBMEFvaG92S1QvWEJaYTlFL0Nhd1BLcjVNM0E1b0hsUi82ZURSVDFFTHphQUNCcVMwUUhBSkw2WFU1NlB4bmxzNEZsVjBsa25wY0J2d3NzZjZBc1pnQ2lCZ0RUaVRzS1VWSmVIZ1B1RGl6L2RjRGVnZVZYd1dIRUx2NytIYkFvc1B4NlU0Rk5nOHFlQzZzR0FQY0ZWUUtjQlpDMHlpWEI1WDhtdVB5eWk1NWx1VFM0L0hxUmErQlc2L01uRS9jcDREOFgxa1JKbmVZMXhIMGUxa2U2RCs1UmVDdXI2VkJpcjIwZnNHUGhyV3pjY2NSOUFyald3TXI4S2FneXYyd3llWkxLcHh2NE03R2R4STJzbWgxVmE0d0Q3aVgydWtidU5qbVlDNG5KdzEvT1Fhai9KWS9hR1drV2FUdEVTZW9GZmhGY2g3MkJvNFByVURhZkl2N3ArMmZCNWRmckF2WUxLbnZRdnY0L2lCdVpiZHZ5SmtycVZMT0lmVkxzSTUyUzZwSGxyVEdkdFBBdStwcEdEMERxN1VSY0hqN2ZYNG42R1lESTZaSDlBOHVXbEpmcmlOdWJwTi82d0luQmRTaURMdUJVQm5ubjNHYTNFTHZZZmFESVB1OHZNd0E1dkFJQU4rQ1F0RW92OE1Qb1NwQzJxLzNINkVwMHVJOEJiNHl1QlBEOTZBb01jRUJnMllOK2F0dEZtdmFLbUpKNEhOY0JTRnBsRTJBNThkUEdMd0E3Rk56V3N0cUxkTlpNOURWY0JLeFRjRnRIb2h1WVIwd3U1ak5NWC91cm9FcjFBYnVQS0lXU3l1NTg0anVQUHVCMjBxbXBhdHg2eEgxWk5qQnltRTJxdHhkeHViaWd2aUlEUDNXSlBJempzTUN5SmVYbmxPZ0sxT3dPbklhemxJM3FBYzRHdG9xdVNFMHV2MGY5SXZ1NllmdjQxeEkzTXJtNlpVMlVWQmEzRVA4RTJSOWZMYml0WmRBRi9JRDRhOVVmdnltMnVVMjVscmg4REx2NGNCTHBzSVNJaWkzSGN3RWtyZTd2aWU5RTZ1TlR4VGEzNDMyWitHdFVINGNXMjl3Uld4OVlRVXd1bHREQXE2d2JnaXJYaDJkeVMxcmRXT0FoNGp1Uy91akZMd09HOGpIaXIwOTkzRUorcjIyT0ppNGYxelJTd1c4RVZ2QlhqVlJRVXFWRTNqUUhpeFhBQnd0dGNlYzVscmp6WklhS054VGE0dVpjU2x3K0ducUY5VGVCRlZ4R21pS1JwSDQ5cEUxY29qdVVnWEZDa1kzdUVGM0ExNGkvRmdQakp2SjcrcDlHN0tldERiME9tUWk4R0ZoSjkrQ1dOTkE3aU85VUJvdFRxZTdCUWVPQWM0aS9CazEzZG0zMkFlTHlzWWdSZk1vYU9VMlI0NnBOU2JHNlNPOHdvenVXd2VJSzBzWkZWYklGK1Y2UGl3dHM5MmhjUVZ4T0xocEpSWThOck9oeVlMT1JWRlpTSmV4TGZ1K1orK05KNEsrTGEzcFdEaWZ0S0JlZDg4RmlHYkI5Y1UxdjJ1YkVyZjd2QXo0MGtzcHVGMWpSUHVEZlJsSlpTWlZ4TnZHZHpGQ3hBdmdjTUthdzFzY2FSem9nS2RkQldCOXdVbUd0SDUwdkVKdVhyVWRhNFQ4R1Z2Wmgwc0lmU2FxM0NmQXM4UjNOY0hFYmNXZTlGK1VRNEg3aWN6dGNQQWFzVzFRQ1JxR2JkTHBsVkY3dWI2YlMzdzZzY0Ivd3VtWXFMYW4wM2tkOFo3T202QVhPQWpZb0tBZnRzZ21wSFRrLzlmZkhXd3JLd1dnZFJteGV2dGxNcFY4YlhPbHptNm0wcE5MckluWkIxVWhpUHZEUHdOcUZaS0k0VTBpdk01NG5Qb2VkM2wvOGt0amN2THFaU25lVGp1bU5xdlF5MHNJSlNScG9HOUpSdmRFZFQ2TXhIL2gvNUwvZCtRYkE4Y0JDNG5QV2FEd0ZiRnhFTWxwZ09uSGI2L2NCanpDSy9SQytGVmp4UHRJR0U1STBtTngyQ0d3a0ZwSVcwdTFhUUQ1R1kyL2dPOEJpNG5NMGt1Z0YzbFJBUGxybEpHTHpjK0pvS3I5L2NPVVhrdWVpRGtsNStDbnhuVkN6Y1E5d0hIRlByNXVSUHZtK2JaZzY1aDdmYlhsV1dtY2Q0RGxpODdQM2FCclFSZXpxeFQ3Z2s2TnBnS1JTVzUvNGU5Um9Zd1Z3UFducS9WRFNxYXhGV0p1MDFmdlhTUWZsck15ZzdhT0pPeWt1VjYxd0hMSDVlWWcxVFA4MzhtN2dHOFIyd284Qlc1RTJDSktrZ2ZZazdVclg4RmFubVZ0SzJzditIdUJCMG1kY0Q1QUdPaXNiK04rUEJXYVNOc1RwajEyQXZTalBIZ1hQQWZzQXM2TXJNb1QrVXl3ajE3R2RBSHhtdEgvSm5zU1A5TjQxMmtaSUtyWDNFSCtmYWtjOFExcllkUy9wNlBiTGdCdEpoeVU5U3Y1N0pMUWlWcEoySTh6Wk1jVG5hYmRXTmViVzRJYk1JZTFDSlVsRCtRN3hOMTJqK1BnY2VldC8rby9NMFEydGJOQ0hnaHZUUjlyOFE1S0cwZ09jVC95OXlpZ3Vma0oreC93T1ZMcitjbDNTY1lLUkRYb1lHTi9LUmtrcW5VbWtwNS9vRzdEUityaWEvUHVBQ2FSWE1aRjVlb0gwQlVKTC9TaTRVWDNBUjFyZEtFbWxzd214WjVrWXJZL2J5WDhUSllCUEVKK3I3eGZSc0ZkbjBMQjVGREN5a1ZRNlc1RFdEa1hmczR6Ung0UGt1OU5mdmZWSXV4Skc1K3RWUlRYd3Jnd2E1KzZBa2hxeERiSGJtUnVqajRlQkxRZGUyRXhGNy9yWEI5eFJaQU56T0lWcktiQmRrWTJVVkJvN0VQOU8xbWd1SGlMdEFkTUp0aUgxVGRFNU83cklSbzRIbnNpZ2tlY1gyVWhKcFRJRDF3UjBXdHhMMnFxNFUveWErSnpOb3cyYllYMHVnNGIyQVljVTNWQkpwYkU1YWJPYzZQdVdzZWE0RVpnMitHWE0wbUhFNTZ3UCtHelJEWVcwOTNiMEo0RjlwSVVoRXd0dXE2VHltQUpjU2Z5OXl4ZzZMZ0VtRDNVQk16U0pQR2FYRmdGVEMyN3JYM3kzRFExcUpJNHZ1cUdTU21VY2NCYng5eTdqNVhFYW5YZFd3ZGVKejFzZmNITFJEYTIzRmVrRXEraEdMd2RlV1hCYkpaVkxGK21RbEJ6dVlVWmFQUGZCWWE5WW5uWUhsaEdmdnhYQTFnVzM5V1grcHdVVmIwWGNUT2VOR2lYRk94QjRrdmg3V0pYak1XQy9OVnluSEkwQmJpTStmMzNBZnhmYzFrSHRTRDRqNk9NS2JxdWtjcHFCV3dkSHhXWEFSbXU4UW5uNnI1dWkzZ0FBREdaSlJFRlVMUEg1NnlQTmdtOWJjRnVIZEhZREZXeEhMQVAyTHJpdGtzcHBEUEFGOG5tZ0tYc3NxK1c3ZTgyWEprdDdrc2MzLzMzQUR3dHU2N0MySVk5M0lIM0FiR0R0WXBzcnFjUU9JUDRZMTdMSFBjQWVqVjZRREswRjNFOThIdnRJZlcvNFJray9JRDRSL2ZIZGd0c3FxZHdtQWlmZ2JFQVJuZFVKNUgrYTM1cmsxTi85WjhGdGJjaVc1RE1kMGdlOHFkam1TcXFBZlVnbjBFWGZ6OG9RMXdBN2p5ejlXVHFDK0Z6MngwdWt6YTJ5Y0FyeENlbVBCV1F3TFNLcDQzVURSK0dYQXMzR240SDMwN252K3V0dEN6eExmRTc3NDZSaW16c3lVNENuaVU5S2Y5eEIycUZKa2tackN2Qk5ZQW54OTdaT2lFWEFGMG52eTh0Z0xmSTRDYmMvRnBCMjVNM0tSNGhQVEgzOHVOam1TcXFZTFlCdjRVQmdxRmhLMnMxdmsyWVRuS2t6aWM5dGZYeWcyT1kycHdlNGsvamsxTWRIQzIyeHBDcWFTZXJvWGlMK0hwZER2RUNhSWRsME5Fbk4xQ2VJejI5OTNFM0dHOThkU255QzZtTVpjSENoTFpaVVZSdVF2bWZQNmZWbk8yTmVyZjNaVFVlM3lLSGs4NWw3Znh4VWFJdGI0QUxpazFRZkM0SGRDbTJ4cENvYkR4eEoydG11bC9oN1hwR3hzdGJPb3lqM2FhdzdrZGVpdno3ZzU0VzJ1RVcyQVY0a1BsbjFNUmZZdU1BMlN4TEFEc0JYS04rR1F2ZVJudlpudGl4VCtkb1VlSVQ0bk5mSFlqb285LytYK0lRTmpGc296NnBVU2ZuYkd6Z1JlSkQ0KzE4emNUZndaYW8xZ3pxSlBNK0crRlNSalc2MU1jQ3R4Q2R0WUZ3TWpDMnczWkkwbUsxSlgwcGRERHhIL0wxd3NKZ1BuRWY2ZG45Nk1XbkkyampnRXVLdnc4QzRtYlRJdnFQa2NsYnl3UGdGR2EraWxGUjYzYVNuNmcrUkRsUzdrL2JmSzVlU0h0SitCTHlQOU02N3E4aEdaNjRIK0NueC9kUEFXQTY4c3FoR0YzM0J2d2I4UzhGbE5PTXM0RDJrQlR1U0ZHMGNhZjNBenFTZFRHZldZblBTa2Juck52RjNQZ3M4UlhxZlBhY1dENUdtOWg4a25YZWcxQTkrSDNodmRFVUc4UlhTMGNPRktIb0FNSkUwdXQybTRIS2E4VjNndzlHVmtLUUdqQUdtQWV1eGFpM1Q1Tm8vWDA3YWZZL2F6MmRKdThXdGJITWRPMUVYY0Nyd1Q5RVZHY1JzMGt6NlM5RVZHWTNYa08vSldpZFQ3V2t2U2FxcUx0TE9qdEg5MEdDeEFwaFZYTlBiNjNqaUV6cFVmSTl5SEZZaFNXcE1EMm5hUDdyL0dTcitvN2ltdDk4WTRIcmlrenBVL0FTL0RwQ2tLdWdodi8zOTYrTW1TdGdmYlEwOFQzeHloNHFMZ0FtRnRWNlNGRzBjNlZQSDZQNW1xRmdFYkZkWTY0TWRRM3lDaDR0clNBdHRKRW5sTWdXNGl2aCtacmg0ZDBGdHo4WXZpRS95Y0hFdkhiVGxvaVJwamJZQzdpZStmeGt1L3FldzFtZGtNcW1UalU3MmNERWYyTCtvQkVpUzJ1WlZ3SlBFOXl2RHhRTTB0OWREUjlxRjlLNGpPdW5EeFdMZ2lLSVNJRWtxM0pIa2R6amR3SGlldEJOanBieWQrTVN2S1hwSjM0bTZkYkFrZFk0ZTRBVHlQNTY1RjNoYlFUbkkza25FWDRCRzRpclNkcHlTcEx4TkEvNlgrSDZqa2ZocVFUbm9DR1BJZjFWbWZ6d003RlZJRmlSSnJiQVA2ZXlENlA2aWtmZ3R6aTZ6RWVtUWl1aUwwVWdzSVozTDdQYkJrcFNQYnRMQmMwdUo3eWNhaVQ4Qkd4U1NpUTYwSS9BTThSZGxKQ08zelFySmhDUnBKRFlDTGlHK1gyZzBGZ0RiRjVLSkR2WWEwaE4yOU1WcE5KNGxMV1NVSk1WNEsrbXo3ZWorb05GWUN2eFZJWmtvZ2FQSWY5WG13RGdUbUZwRU1pUkpnNW9HbkVYOC9YOGswUXU4czRoa2xNa1hpTDlRSTQwRndQc0x5SVVrYVhWSGt2L0dQb1BGdnhhUmpMTHBBbjVJL01WcUppNEd0bWg5U2lTcDhyWUVmazM4ZmI2Wk9LMkFmSlJXRDJsZjVPaUwxa3k4QUh3R1R4YVVwRmFZUUhwNnpuMzMyS0hpSE5KWENocUJzY0NGeEYrOFp1TVIwcG9HUHhtVXBPWWNEanhFL1AyODJiaUExSmVwQ1JPQXk0aS9pS09KSzRCWHREb3hrbFJpZTlBNW04UU5GZjhMakc5eFhpcG5FbkExOFJkek5ORUxYQVRzM3VMY1NGS1o3RWhhM2IrUytQdjJhT0k2WU8wVzU2YXkxZ1d1Si82aWpqWldBR2NEMjdRMlBaTFUwYllGL3B2TzcvajdnRDlRb2FOOTIyVXluVDhsMUIvTGdUTkl4eUpMVWxYdFN0cExaVG54OStWV3hKV2t2a29GR0U5YVZCRjlrVnNaMTVBV3VyaFlVRkpWekNLOUZ1MjBqZCtHaTE4REUxdVpKTDNjT09BODRpOTJxK01XNEIveDgwRko1VFNCZEkrN2xmajdiYXZqWEZMZnBEYm9BWDVFL0VVdklwNGpiUnJobHdPU3ltQkg0QVRnYWVMdnIwWEVqL0ZZMzdickJyNUYvTVV2TXY0QUhBTk1hVkhPSktrZDFnZmVSemtXYnc4WDM4Qk5ma0s5bi9Jc0lCa3FWcERXQ3J3ZlY1ZEt5dE82cE0zUExpS2RlaGQ5M3l6Nm52eVIxcVJOby9WbU9uZWJ5SkhHUzhENXdIdUJ6VnFSUEVscTB1YWtXY29MNkt6ajNFY1RpNEEzdGlKNWFwMjlnU2VJLytWb2Q5eE9lcjkySUc0NUthbFk0NENEZ0s4Q2R4Qi8vMnQzUEE3c09lb3NacUpzbjU3TklFMC9WZlg3K2hlQm00RGZrM2FpdWc1WUdGb2pTWjFzUGVEVnRaZ0Y3RU4xUDNXN2kvVGsvMGgwUlZxbGJBTUFTTnN2L2hCNFczUkZNdEFMM0VPYUpiaUxOR0svaXpSVElrbjFOaVZ0ekxOYjdlY2V3RTY0eUEzZ3A2UlhIWXVqSzlKS1pSd0FRR3JYSjBsVDQzNmU4WEx6U1FPRHVjQ2N1cGdMekNNdHFwUlVMbU9CallHWnBOblNyV28vWndJN0ExT2pLcGF4RmNDbmdXOUdWNlFJWlIwQTlEdUlOSExiTUxvaUhXWWhhWkF3SDFoUWk1ZEkvMmQ0b2ZidkxBYVdoZFJPVXIxeHdGcTFQMDhtUGZSTUpIWG9VNEZwd0FiQU9pRzE2MXhQQW45SE9veXVsTW8rQUlDMFV2N253TDdSRlpFa2RZU2JnZjhEUEJ4ZGtTTDFSRmVnRFY0Z0hUYlJCeHlBNzdNa1NZUHJBNzROdkIxNEpyZ3VoYXZDREVDOWcwaG5UVzhlWFJGSlVsWWVKVzFrZEZWd1BkcW1hay9EVjVJK0VmeEpkRVVrU2RuNEJlbjhsYXVDNjlGV1ZSc0FRRnJnOWs3Z1hhUWRuU1JKMWZRaThISFMrLzdTVC9rUFZMVlhBQVBOQVA0TGVGMXdQU1JKN1hVVjZYeVYyY0gxQ0ZQRkdZQjZjNEhYa3pZTm1oOWJGVWxTR3p3TGZBRDRLeXJjK1VNMXZnSm94TDJrM1FPblVLSjluaVZKcXprWE9JeTBYWHJsVmYwVndHRGVBSndLYkJsZEVVbFNTOHdCUGd4Y0VsMlJuRGdEOEhLemdlK1Nkci9iSHhnZld4MUpVcE5lQkk0SDNnSGNIMXlYN0RnQUdOeEs0QWJTQmtLVFNZZGlPRnNpU1oyaGo3UUQ3SnVCQzBqYm1Hc0FPN1hHN0FXY1RKb1JrQ1RsNjJiZ1dOSng2QnBHMWI4Q2FOVE5wRzJFM3dFOEVGd1hTZExMM1VjNnZHY2Y3UHdiNGd6QXlIVURSd0JmQnJZTnJvc2tWZDFjNEN2QTZUalZQeUlPQUpvM2xqUWo4SG5TdWRxU3BQWjVGUGdTZHZ4TmN3QXdldU9CbzRGUEF0c0UxMFdTeW00MjhBM2dSOEN5NExwME5BY0FyZE5OMmtQZ1k4QWh3WFdScExLNUJUZ0YrREhwU3kyTmtnT0FZdXhKV29YNkRtQk1jRjBrcVZQMUFyOEdUZ0N1RGE1TDZUZ0FLTlkycE1NbTNnVnNHRndYU2VvVVQ1TDJZZmtlOEtmZ3VwU1dBNEQyNkFFT0lnMEcvaFkzWUpLa2dYcUJLMGlkL2dYNGZyOXdEZ0RhYndacDBlQzdnT214VlpHa2NJOEFaNUJXOHo4Y1c1VnFjUUFRYTJmZ0gydXhhWEJkSktsZDVnUG5BV2VUM3UzM3hWYW5taHdBNUtFYmVEVndKUEEyWU9QWTZraFN5eTBnTGVnN2wzUXFuOS91QjNNQWtKOGVZRi9TbWRXdkIxNkoxMGxTNStrRmJnVXVKWFg0TitEbmUxbXhZOG5mQnNDQnBMMEYzb1N6QTVMeXRZQzBrTzl5NEZmQW4yT3JvK0U0QU9nOFd3R3pTQ2NUemdKMmlxMk9wQXA3QXJpRzlCNy9HdUEyMHBPL09vQURnTTYzT1drZ3NCK3dCN0Fyc0Y1b2pTU1YwWFBBbmNEdHBOUDJyc0VuL0k3bUFLQ2NwcE1HQXJ2VlloZlNwa1FUSWlzbHFTTXNJZTIzZnc5d0IzQlhMUjZKckpSYXp3RkF0V3dDekNUdFJUQ3o3czhiQTlPQXFiaDFzVlJteTBudjZSY0E4NEE1cE9OMDU5VDkrWW1ndXFuTkhBQm9vSFZKQ3crbjFtSXRZQjNTMXdsamdNbTFmMjh0WUZ4RUJTV3RaaG13dVBibkYwaWYxNjBFbnEvOTgvNE8vMmxnWVVRRkpVbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pFbVNKRW1TSkVtU0pMM2Mvd2RmV1FhQzBTVXkyUUFBQUFCSlJVNUVya0pnZ2c9PSIvPjwvZGVmcz48L3N2Zz4=";
|
@@ -117,6 +117,7 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
117
117
|
@state() displayLabel = '';
|
118
118
|
@state() currentOption: NileOption;
|
119
119
|
@state() selectedOptions: NileOption[] = [];
|
120
|
+
@state() oldValue: string | string[] = '';
|
120
121
|
|
121
122
|
/** The name of the select, submitted as a name/value pair with form data. */
|
122
123
|
@property() name = '';
|
@@ -205,7 +206,6 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
205
206
|
*/
|
206
207
|
@property({ reflect: true }) placement: 'top' | 'bottom' = 'bottom';
|
207
208
|
|
208
|
-
|
209
209
|
/**
|
210
210
|
* By default, form controls are associated with the nearest containing `<form>` element. This attribute allows you
|
211
211
|
* to place the form control outside of a form and associate it with the form that has this `id`. The form must be in
|
@@ -218,10 +218,9 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
218
218
|
|
219
219
|
@property({ type: Boolean }) showSelected = false;
|
220
220
|
|
221
|
-
|
222
221
|
@property({ type: Boolean }) showNoResults: boolean = false;
|
223
222
|
|
224
|
-
@property({ type: String }) noResultsMessage: string =
|
223
|
+
@property({ type: String }) noResultsMessage: string = 'No results found';
|
225
224
|
|
226
225
|
/** Gets the validity state object */
|
227
226
|
get validity() {
|
@@ -264,12 +263,12 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
264
263
|
private handleFocus() {
|
265
264
|
this.hasFocus = true;
|
266
265
|
this.displayInput.setSelectionRange(0, 0);
|
267
|
-
this.emit('nile-focus', { value: this.value
|
266
|
+
this.emit('nile-focus', { value: this.value, name: this.name });
|
268
267
|
}
|
269
268
|
|
270
269
|
private handleBlur() {
|
271
270
|
this.hasFocus = false;
|
272
|
-
this.emit('nile-blur', { value: this.value
|
271
|
+
this.emit('nile-blur', { value: this.value, name: this.name });
|
273
272
|
}
|
274
273
|
|
275
274
|
private handleDocumentFocusIn(event: FocusEvent) {
|
@@ -326,7 +325,7 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
326
325
|
});
|
327
326
|
this.value = '';
|
328
327
|
this.selectionChanged();
|
329
|
-
this.emit('nile-change', { value: this.value
|
328
|
+
this.emit('nile-change', { value: this.value, name: this.name });
|
330
329
|
}
|
331
330
|
|
332
331
|
private handleDocumentKeyDown(event: KeyboardEvent) {
|
@@ -372,8 +371,8 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
372
371
|
|
373
372
|
// Emit after updating
|
374
373
|
this.updateComplete.then(() => {
|
375
|
-
this.emit('nile-input', { value: this.value
|
376
|
-
this.emit('nile-change', { value: this.value
|
374
|
+
this.emit('nile-input', { value: this.value, name: this.name });
|
375
|
+
this.emit('nile-change', { value: this.value, name: this.name });
|
377
376
|
});
|
378
377
|
|
379
378
|
if (!this.multiple) {
|
@@ -474,6 +473,7 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
474
473
|
|
475
474
|
private handleLabelClick() {
|
476
475
|
this.displayInput.focus();
|
476
|
+
this.hide();
|
477
477
|
}
|
478
478
|
|
479
479
|
private handleComboboxMouseDown(event: MouseEvent) {
|
@@ -507,9 +507,9 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
507
507
|
|
508
508
|
// Emit after update
|
509
509
|
this.updateComplete.then(() => {
|
510
|
-
this.emit('nile-clear', { value: this.value
|
511
|
-
this.emit('nile-input', { value: this.value
|
512
|
-
this.emit('nile-change', { value: this.value
|
510
|
+
this.emit('nile-clear', { value: this.value, name: this.name });
|
511
|
+
this.emit('nile-input', { value: this.value, name: this.name });
|
512
|
+
this.emit('nile-change', { value: this.value, name: this.name });
|
513
513
|
});
|
514
514
|
}
|
515
515
|
}
|
@@ -524,6 +524,7 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
524
524
|
const target = event.target as HTMLElement;
|
525
525
|
const option = target.closest('nile-option');
|
526
526
|
const oldValue = this.value;
|
527
|
+
this.oldValue = oldValue;
|
527
528
|
|
528
529
|
if (option && !option.disabled) {
|
529
530
|
if (this.multiple) {
|
@@ -540,8 +541,8 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
540
541
|
if (this.value !== oldValue) {
|
541
542
|
// Emit after updating
|
542
543
|
this.updateComplete.then(() => {
|
543
|
-
this.emit('nile-input', { value: this.value
|
544
|
-
this.emit('nile-change', { value: this.value
|
544
|
+
this.emit('nile-input', { value: this.value, name: this.name });
|
545
|
+
this.emit('nile-change', { value: this.value, name: this.name });
|
545
546
|
});
|
546
547
|
}
|
547
548
|
|
@@ -561,7 +562,6 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
561
562
|
|
562
563
|
this.requestUpdate();
|
563
564
|
}
|
564
|
-
|
565
565
|
}
|
566
566
|
|
567
567
|
private handleDefaultSlotChange() {
|
@@ -591,21 +591,55 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
591
591
|
if (!this.disabled) {
|
592
592
|
this.toggleOptionSelection(option, false);
|
593
593
|
|
594
|
+
const allOptions = this.getAllOptions();
|
595
|
+
allOptions.forEach(el => {
|
596
|
+
if (!el.selected) {
|
597
|
+
el.hidden = this.showSelected;
|
598
|
+
}
|
599
|
+
});
|
600
|
+
|
594
601
|
// Emit after updating
|
595
602
|
this.updateComplete.then(() => {
|
596
|
-
this.emit('nile-input', { value: this.value
|
597
|
-
this.emit('nile-change', { value: this.value
|
603
|
+
this.emit('nile-input', { value: this.value, name: this.name });
|
604
|
+
this.emit('nile-change', { value: this.value, name: this.name });
|
598
605
|
});
|
599
606
|
}
|
600
607
|
}
|
601
608
|
|
602
609
|
// Gets an array of all <nile-option> elements
|
603
610
|
private getAllOptions() {
|
604
|
-
|
611
|
+
// Get all options as an array
|
612
|
+
const options = [...this.querySelectorAll<NileOption>('nile-option')];
|
613
|
+
|
614
|
+
// Sort the options based on the order of values in this.oldValue
|
615
|
+
options.sort((a, b) => {
|
616
|
+
let indexA = this.oldValue.indexOf(a.value);
|
617
|
+
let indexB = this.oldValue.indexOf(b.value);
|
618
|
+
|
619
|
+
// Handle cases where a __value is not found in this.oldValue
|
620
|
+
if (indexA === -1) {
|
621
|
+
indexA = Infinity; // Place at the end if not found
|
622
|
+
}
|
623
|
+
if (indexB === -1) {
|
624
|
+
indexB = Infinity; // Place at the end if not found
|
625
|
+
}
|
626
|
+
|
627
|
+
if (indexA < indexB) {
|
628
|
+
return -1;
|
629
|
+
}
|
630
|
+
if (indexA > indexB) {
|
631
|
+
return 1;
|
632
|
+
}
|
633
|
+
return 0;
|
634
|
+
});
|
635
|
+
|
636
|
+
return options;
|
605
637
|
}
|
606
638
|
|
607
639
|
private getOptionPrefix(option: NileOption): string {
|
608
|
-
const prefixSlot = option.shadowRoot?.querySelector(
|
640
|
+
const prefixSlot = option.shadowRoot?.querySelector(
|
641
|
+
'slot[name="prefix"]'
|
642
|
+
) as HTMLSlotElement;
|
609
643
|
if (!prefixSlot) return '';
|
610
644
|
|
611
645
|
const assignedNodes = prefixSlot.assignedNodes();
|
@@ -692,9 +726,23 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
692
726
|
} else {
|
693
727
|
this.displayLabel = this.selectedOptions.length + ' selected';
|
694
728
|
}
|
729
|
+
|
730
|
+
if (this.selectedOptions.length === 0) {
|
731
|
+
this.showSelected = false;
|
732
|
+
const allOptions = this.getAllOptions();
|
733
|
+
allOptions.forEach(el => {
|
734
|
+
if (!el.selected) {
|
735
|
+
el.hidden = this.showSelected;
|
736
|
+
}
|
737
|
+
});
|
738
|
+
|
739
|
+
this.requestUpdate();
|
740
|
+
}
|
695
741
|
} else {
|
696
742
|
this.value = this.selectedOptions[0]?.value ?? this.value;
|
697
|
-
this.displayLabel = this.selectedOptions[0]?.getTextLabel()
|
743
|
+
this.displayLabel = this.selectedOptions[0]?.getTextLabel()
|
744
|
+
? this.selectedOptions[0].getTextLabel()
|
745
|
+
: this.value ?? '';
|
698
746
|
}
|
699
747
|
|
700
748
|
// Update validity
|
@@ -702,6 +750,7 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
702
750
|
this.formControlController.updateValidity();
|
703
751
|
});
|
704
752
|
|
753
|
+
this.calculateTotalWidthOfTags();
|
705
754
|
}
|
706
755
|
|
707
756
|
handleSearchFocus() {
|
@@ -721,7 +770,8 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
721
770
|
this.showNoResults = true;
|
722
771
|
} else {
|
723
772
|
this.showNoResults = false;
|
724
|
-
}
|
773
|
+
}
|
774
|
+
}
|
725
775
|
|
726
776
|
filterOptions(searchValue: string) {
|
727
777
|
const allOptions = this.getAllOptions();
|
@@ -732,7 +782,10 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
732
782
|
allOptions.forEach(el => {
|
733
783
|
const lowerCaseLabel = el.getTextLabel().toLowerCase();
|
734
784
|
const lowerCaseValue = (el.value || '').toLowerCase();
|
735
|
-
if (
|
785
|
+
if (
|
786
|
+
lowerCaseLabel.includes(lowerCaseSearchValue) ||
|
787
|
+
lowerCaseValue.includes(lowerCaseSearchValue)
|
788
|
+
) {
|
736
789
|
el.hidden = false;
|
737
790
|
filteredOptions.push(el);
|
738
791
|
} else {
|
@@ -773,7 +826,7 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
773
826
|
this.setCurrentOption(this.selectedOptions[0] || this.getFirstOption());
|
774
827
|
|
775
828
|
// Show
|
776
|
-
this.emit('nile-show', { value: this.value
|
829
|
+
this.emit('nile-show', { value: this.value, name: this.name });
|
777
830
|
this.addOpenListeners();
|
778
831
|
|
779
832
|
await stopAnimations(this);
|
@@ -795,10 +848,10 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
795
848
|
scrollIntoView(this.currentOption, this.listbox, 'vertical', 'auto');
|
796
849
|
}
|
797
850
|
|
798
|
-
this.emit('nile-after-show', { value: this.value
|
851
|
+
this.emit('nile-after-show', { value: this.value, name: this.name });
|
799
852
|
} else {
|
800
853
|
// Hide
|
801
|
-
this.emit('nile-hide', { value: this.value
|
854
|
+
this.emit('nile-hide', { value: this.value, name: this.name });
|
802
855
|
this.removeOpenListeners();
|
803
856
|
|
804
857
|
await stopAnimations(this);
|
@@ -809,7 +862,7 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
809
862
|
this.listbox.hidden = true;
|
810
863
|
this.popup.active = false;
|
811
864
|
|
812
|
-
this.emit('nile-after-hide', { value: this.value
|
865
|
+
this.emit('nile-after-hide', { value: this.value, name: this.name });
|
813
866
|
}
|
814
867
|
}
|
815
868
|
|
@@ -871,6 +924,57 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
871
924
|
event.stopPropagation();
|
872
925
|
}
|
873
926
|
|
927
|
+
calculateWidthOfSelectTagsDiv() {
|
928
|
+
if (this.shadowRoot) {
|
929
|
+
const selectTagsDiv = this.shadowRoot.querySelector('div.select__tags');
|
930
|
+
if (selectTagsDiv instanceof HTMLElement) {
|
931
|
+
const width = selectTagsDiv.offsetWidth;
|
932
|
+
return width - 70;
|
933
|
+
}
|
934
|
+
}
|
935
|
+
}
|
936
|
+
|
937
|
+
calculateTotalWidthOfTags() {
|
938
|
+
this.maxOptionsVisible = Infinity;
|
939
|
+
|
940
|
+
setTimeout(() => {
|
941
|
+
let widths: number[] = [];
|
942
|
+
if (this.shadowRoot) {
|
943
|
+
const tags = this.shadowRoot.querySelectorAll('nile-tag');
|
944
|
+
tags.forEach(tag => {
|
945
|
+
if (tag instanceof HTMLElement) {
|
946
|
+
widths.push(tag.offsetWidth);
|
947
|
+
}
|
948
|
+
});
|
949
|
+
}
|
950
|
+
if (this.value.length !== widths.length) {
|
951
|
+
return;
|
952
|
+
}
|
953
|
+
|
954
|
+
let sum = widths.reduce(
|
955
|
+
(accumulator, currentValue) => accumulator + currentValue,
|
956
|
+
0
|
957
|
+
);
|
958
|
+
const widthOfSelectTagsDiv = this.calculateWidthOfSelectTagsDiv();
|
959
|
+
if (!widthOfSelectTagsDiv) {
|
960
|
+
return;
|
961
|
+
}
|
962
|
+
|
963
|
+
let summ = 0;
|
964
|
+
let lastindex = 0;
|
965
|
+
|
966
|
+
for (let i = 0; i < widths.length; i++) {
|
967
|
+
summ += widths[i];
|
968
|
+
|
969
|
+
if (summ > widthOfSelectTagsDiv) {
|
970
|
+
lastindex = i;
|
971
|
+
break;
|
972
|
+
}
|
973
|
+
}
|
974
|
+
this.maxOptionsVisible = lastindex;
|
975
|
+
}, 1);
|
976
|
+
}
|
977
|
+
|
874
978
|
render() {
|
875
979
|
const hasLabelSlot = this.hasSlotController.test('label');
|
876
980
|
const hasHelpTextSlot = this.hasSlotController.test('help-text');
|
@@ -1142,7 +1246,7 @@ export class NileSelect extends NileElement implements NileFormControl {
|
|
1142
1246
|
? html` <span
|
1143
1247
|
class="select__clear"
|
1144
1248
|
@click="${this.unSlectAll}"
|
1145
|
-
>
|
1249
|
+
>Clear All</span
|
1146
1250
|
>`
|
1147
1251
|
: ``}
|
1148
1252
|
</div>`
|
@@ -12,8 +12,6 @@ import { css } from 'lit-element';
|
|
12
12
|
*/
|
13
13
|
export const styles = css`
|
14
14
|
:host {
|
15
|
-
display: inline-block;
|
16
|
-
width: 100%;
|
17
15
|
box-sizing: border-box;
|
18
16
|
}
|
19
17
|
|
@@ -25,15 +23,13 @@ export const styles = css`
|
|
25
23
|
gap: 0.5rem;
|
26
24
|
}
|
27
25
|
|
28
|
-
.
|
29
|
-
|
30
|
-
|
31
|
-
flex-shrink: 0;
|
26
|
+
.input-container > :first-child {
|
27
|
+
max-width: 99%;
|
28
|
+
min-width: 99%;
|
32
29
|
}
|
33
30
|
|
34
|
-
|
35
|
-
|
36
|
-
flex-shrink: 0;
|
31
|
+
nile-icon {
|
32
|
+
max-height: 38px;
|
37
33
|
}
|
38
34
|
|
39
35
|
nile-radio {
|