@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.
Files changed (143) hide show
  1. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-content-editor/nile-content-editor.css.js +4 -2
  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
  3. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-content-editor/nile-content-editor.d.ts +8 -3
  4. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-content-editor/nile-content-editor.js +58 -31
  5. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-content-editor/nile-content-editor.js.map +1 -1
  6. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/index.d.ts +1 -0
  7. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/index.js +1 -0
  8. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/index.js.map +1 -1
  9. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/switch.d.ts +5 -0
  10. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/switch.js +5 -0
  11. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/switch.js.map +1 -0
  12. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.css.js +1 -1
  13. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.css.js.map +1 -1
  14. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.d.ts +3 -0
  15. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.js +93 -5
  16. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.js.map +1 -1
  17. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.css.js +5 -9
  18. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.css.js.map +1 -1
  19. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.d.ts +2 -0
  20. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.js +29 -15
  21. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-switcher/nile-switcher.js.map +1 -1
  22. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-tab/nile-tab.css.js +1 -1
  23. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-tab/nile-tab.css.js.map +1 -1
  24. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/tsconfig.tsbuildinfo +1 -1
  25. package/demo/filenames.txt +1 -1
  26. package/dist/index.cjs.js +1 -1
  27. package/dist/index.esm.js +1 -1
  28. package/dist/index.iife.js +254 -249
  29. package/dist/nile-badge/index.cjs.js +1 -1
  30. package/dist/nile-badge/index.esm.js +1 -1
  31. package/dist/nile-badge/nile-badge.cjs.js +1 -1
  32. package/dist/nile-badge/nile-badge.cjs.js.map +1 -1
  33. package/dist/nile-badge/nile-badge.esm.js +1 -1
  34. package/dist/nile-button/index.cjs.js +1 -1
  35. package/dist/nile-button/index.esm.js +1 -1
  36. package/dist/nile-button/nile-button.cjs.js +1 -1
  37. package/dist/nile-button/nile-button.cjs.js.map +1 -1
  38. package/dist/nile-button/nile-button.esm.js +1 -1
  39. package/dist/nile-content-editor/nile-content-editor.cjs.js +1 -1
  40. package/dist/nile-content-editor/nile-content-editor.cjs.js.map +1 -1
  41. package/dist/nile-content-editor/nile-content-editor.css.cjs.js +1 -1
  42. package/dist/nile-content-editor/nile-content-editor.css.cjs.js.map +1 -1
  43. package/dist/nile-content-editor/nile-content-editor.css.esm.js +4 -2
  44. package/dist/nile-content-editor/nile-content-editor.esm.js +5 -5
  45. package/dist/nile-dialog/index.cjs.js +1 -1
  46. package/dist/nile-dialog/index.esm.js +1 -1
  47. package/dist/nile-dialog/nile-dialog.cjs.js +1 -1
  48. package/dist/nile-dialog/nile-dialog.cjs.js.map +1 -1
  49. package/dist/nile-dialog/nile-dialog.esm.js +1 -1
  50. package/dist/nile-icon/icons/svg/index.cjs.js +1 -1
  51. package/dist/nile-icon/icons/svg/index.esm.js +1 -1
  52. package/dist/nile-icon/icons/svg/switch.cjs.js +2 -0
  53. package/dist/nile-icon/icons/svg/switch.cjs.js.map +1 -0
  54. package/dist/nile-icon/icons/svg/switch.esm.js +1 -0
  55. package/dist/nile-icon/index.cjs.js +1 -1
  56. package/dist/nile-icon/index.cjs.js.map +1 -1
  57. package/dist/nile-icon/index.esm.js +2 -2
  58. package/dist/nile-icon-button/index.cjs.js +1 -1
  59. package/dist/nile-icon-button/index.esm.js +1 -1
  60. package/dist/nile-icon-button/nile-icon-button.cjs.js +1 -1
  61. package/dist/nile-icon-button/nile-icon-button.cjs.js.map +1 -1
  62. package/dist/nile-icon-button/nile-icon-button.esm.js +1 -1
  63. package/dist/nile-input/index.cjs.js +1 -1
  64. package/dist/nile-input/index.esm.js +1 -1
  65. package/dist/nile-input/nile-input.cjs.js +1 -1
  66. package/dist/nile-input/nile-input.cjs.js.map +1 -1
  67. package/dist/nile-input/nile-input.esm.js +1 -1
  68. package/dist/nile-menu-item/index.cjs.js +1 -1
  69. package/dist/nile-menu-item/index.esm.js +1 -1
  70. package/dist/nile-menu-item/nile-menu-item.cjs.js +1 -1
  71. package/dist/nile-menu-item/nile-menu-item.cjs.js.map +1 -1
  72. package/dist/nile-menu-item/nile-menu-item.esm.js +1 -1
  73. package/dist/nile-option/index.cjs.js +1 -1
  74. package/dist/nile-option/index.esm.js +1 -1
  75. package/dist/nile-option/nile-option.cjs.js +1 -1
  76. package/dist/nile-option/nile-option.cjs.js.map +1 -1
  77. package/dist/nile-option/nile-option.esm.js +1 -1
  78. package/dist/nile-select/index.cjs.js +1 -1
  79. package/dist/nile-select/index.esm.js +1 -1
  80. package/dist/nile-select/nile-select.cjs.js +1 -1
  81. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  82. package/dist/nile-select/nile-select.css.cjs.js +1 -1
  83. package/dist/nile-select/nile-select.css.cjs.js.map +1 -1
  84. package/dist/nile-select/nile-select.css.esm.js +1 -1
  85. package/dist/nile-select/nile-select.esm.js +3 -3
  86. package/dist/nile-switcher/nile-switcher.cjs.js +1 -1
  87. package/dist/nile-switcher/nile-switcher.cjs.js.map +1 -1
  88. package/dist/nile-switcher/nile-switcher.css.cjs.js +1 -1
  89. package/dist/nile-switcher/nile-switcher.css.cjs.js.map +1 -1
  90. package/dist/nile-switcher/nile-switcher.css.esm.js +7 -11
  91. package/dist/nile-switcher/nile-switcher.esm.js +33 -26
  92. package/dist/nile-tab/index.cjs.js +1 -1
  93. package/dist/nile-tab/index.esm.js +1 -1
  94. package/dist/nile-tab/nile-tab.cjs.js +1 -1
  95. package/dist/nile-tab/nile-tab.cjs.js.map +1 -1
  96. package/dist/nile-tab/nile-tab.css.cjs.js +1 -1
  97. package/dist/nile-tab/nile-tab.css.cjs.js.map +1 -1
  98. package/dist/nile-tab/nile-tab.css.esm.js +1 -1
  99. package/dist/nile-tab/nile-tab.esm.js +1 -1
  100. package/dist/nile-tab-group/index.cjs.js +1 -1
  101. package/dist/nile-tab-group/index.esm.js +1 -1
  102. package/dist/nile-tab-group/nile-tab-group.cjs.js +1 -1
  103. package/dist/nile-tab-group/nile-tab-group.cjs.js.map +1 -1
  104. package/dist/nile-tab-group/nile-tab-group.esm.js +1 -1
  105. package/dist/nile-tag/index.cjs.js +1 -1
  106. package/dist/nile-tag/index.esm.js +1 -1
  107. package/dist/nile-tag/nile-tag.cjs.js +1 -1
  108. package/dist/nile-tag/nile-tag.cjs.js.map +1 -1
  109. package/dist/nile-tag/nile-tag.esm.js +1 -1
  110. package/dist/src/nile-content-editor/nile-content-editor.css.js +4 -2
  111. package/dist/src/nile-content-editor/nile-content-editor.css.js.map +1 -1
  112. package/dist/src/nile-content-editor/nile-content-editor.d.ts +8 -3
  113. package/dist/src/nile-content-editor/nile-content-editor.js +58 -31
  114. package/dist/src/nile-content-editor/nile-content-editor.js.map +1 -1
  115. package/dist/src/nile-icon/icons/svg/index.d.ts +1 -0
  116. package/dist/src/nile-icon/icons/svg/index.js +1 -0
  117. package/dist/src/nile-icon/icons/svg/index.js.map +1 -1
  118. package/dist/src/nile-icon/icons/svg/switch.d.ts +5 -0
  119. package/dist/src/nile-icon/icons/svg/switch.js +5 -0
  120. package/dist/src/nile-icon/icons/svg/switch.js.map +1 -0
  121. package/dist/src/nile-select/nile-select.css.js +1 -1
  122. package/dist/src/nile-select/nile-select.css.js.map +1 -1
  123. package/dist/src/nile-select/nile-select.d.ts +3 -0
  124. package/dist/src/nile-select/nile-select.js +93 -5
  125. package/dist/src/nile-select/nile-select.js.map +1 -1
  126. package/dist/src/nile-switcher/nile-switcher.css.js +5 -9
  127. package/dist/src/nile-switcher/nile-switcher.css.js.map +1 -1
  128. package/dist/src/nile-switcher/nile-switcher.d.ts +2 -0
  129. package/dist/src/nile-switcher/nile-switcher.js +29 -15
  130. package/dist/src/nile-switcher/nile-switcher.js.map +1 -1
  131. package/dist/src/nile-tab/nile-tab.css.js +1 -1
  132. package/dist/src/nile-tab/nile-tab.css.js.map +1 -1
  133. package/dist/tsconfig.tsbuildinfo +1 -1
  134. package/package.json +1 -1
  135. package/src/nile-content-editor/nile-content-editor.css.ts +4 -2
  136. package/src/nile-content-editor/nile-content-editor.ts +74 -39
  137. package/src/nile-icon/icons/svg/index.ts +1 -0
  138. package/src/nile-icon/icons/svg/switch.ts +5 -0
  139. package/src/nile-select/nile-select.css.ts +1 -1
  140. package/src/nile-select/nile-select.ts +130 -26
  141. package/src/nile-switcher/nile-switcher.css.ts +5 -9
  142. package/src/nile-switcher/nile-switcher.ts +46 -22
  143. package/src/nile-tab/nile-tab.css.ts +1 -1
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Webcomponent nile-elements following open-wc recommendations",
4
4
  "license": "MIT",
5
5
  "author": "nile-elements",
6
- "version": "0.0.21",
6
+ "version": "0.0.23",
7
7
  "main": "dist/src/index.js",
8
8
  "type": "module",
9
9
  "module": "dist/src/index.js",
@@ -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: 20px;
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
- this.addEventListener('click', this.handleOutsideClick);
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
- handleOutsideClick(event: Event) {
130
- if (event && event.target) {
131
- this.toggleDropdown(false);
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
- var result = string.replace(pattern, (match: any, option: any) => {
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(/&nbsp;/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
- insertNodes(parentNode: Node, childNodes: NodeList, autoOptionsTag?: Node) {
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
- parentNode.childNodes[index].nodeValue = node.nodeValue?.replace(
250
- this.tagIdentifier + this.filteredValue,
251
- ''
252
- );
253
- parentNode.childNodes[index].after(autoOptionsTag);
249
+ this.insertAutoOptionsTag(node, autoOptionsTag);
254
250
  }
255
- this.filteredValue =
256
- parentNode?.childNodes[index]?.nodeValue
257
- ?.split(this.tagIdentifier)
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=";
@@ -35,7 +35,7 @@ export const styles = css`
35
35
 
36
36
  /* Label */
37
37
  .form-control--has-label .form-control__label {
38
- display: inline-block;
38
+ display: block;
39
39
  margin-bottom: 12px;
40
40
  color: var(--nile-colors-dark-900);
41
41
  font-family: Colfax-regular;
@@ -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 = "No results found";
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 , name: this.name });
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 , name: this.name });
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 , name: this.name });
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 , name: this.name });
376
- this.emit('nile-change', { value: this.value , name: this.name });
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 , 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 });
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 , name: this.name });
544
- this.emit('nile-change', { value: this.value , name: this.name });
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 , name: this.name });
597
- this.emit('nile-change', { value: this.value , name: this.name });
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
- return [...this.querySelectorAll<NileOption>('nile-option')];
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('slot[name="prefix"]') as HTMLSlotElement;
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() ? this.selectedOptions[0].getTextLabel() : (this.value ?? '');
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 (lowerCaseLabel.includes(lowerCaseSearchValue) || lowerCaseValue.includes(lowerCaseSearchValue)) {
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 , name: this.name });
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 , name: this.name });
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 , name: this.name });
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 , name: this.name });
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
- >clear all</span
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
- .tooltip-container {
29
- display: flex;
30
- flex-grow: 1;
31
- flex-shrink: 0;
26
+ .input-container > :first-child {
27
+ max-width: 99%;
28
+ min-width: 99%;
32
29
  }
33
30
 
34
- .input-container > :first-child {
35
- flex-grow: 1;
36
- flex-shrink: 0;
31
+ nile-icon {
32
+ max-height: 38px;
37
33
  }
38
34
 
39
35
  nile-radio {