@sebgroup/green-angular 4.6.1 → 4.6.3
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/esm2022/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.mjs +9 -9
- package/esm2022/src/v-angular/button/button.component.mjs +5 -5
- package/esm2022/src/v-angular/character-countdown/character-countdown.directive.mjs +5 -5
- package/esm2022/src/v-angular/core/core.globals.mjs +3 -3
- package/esm2022/src/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +4 -4
- package/esm2022/src/v-angular/dropdown/typeahead/index.mjs +4 -1
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +5 -5
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead.directive.mjs +177 -0
- package/esm2022/src/v-angular/info-circle/info-circle.component.mjs +3 -3
- package/esm2022/src/v-angular/input/input.component.mjs +7 -7
- package/esm2022/src/v-angular/input-mask/input-mask-format.pipe.mjs +5 -4
- package/esm2022/src/v-angular/input-mask/input-mask.directive.mjs +8 -8
- package/esm2022/src/v-angular/modal/dialog/dialog.component.mjs +16 -16
- package/esm2022/src/v-angular/modal/fold-out/fold-out.directive.mjs +3 -3
- package/esm2022/src/v-angular/modal/modal.globals.mjs +3 -3
- package/esm2022/src/v-angular/modal/slide-out/slide-out.component.mjs +15 -15
- package/esm2022/src/v-angular/textarea/textarea.component.mjs +4 -3
- package/esm2022/src/v-angular/textarea/textarea.module.mjs +5 -4
- package/esm2022/src/v-angular/tooltip/tooltip.directive.mjs +13 -13
- package/esm2022/v-angular/base-control-value-accessor/base-control-value-accessor.component.mjs +287 -0
- package/esm2022/v-angular/base-control-value-accessor/base-control-value-accessor.module.mjs +17 -0
- package/esm2022/v-angular/base-control-value-accessor/index.mjs +3 -0
- package/esm2022/v-angular/breadcrumbs/breadcrumbs.component.mjs +25 -0
- package/esm2022/v-angular/breadcrumbs/breadcrumbs.module.mjs +20 -0
- package/esm2022/v-angular/breadcrumbs/index.mjs +3 -0
- package/esm2022/v-angular/button/button.component.mjs +108 -0
- package/esm2022/v-angular/button/button.module.mjs +20 -0
- package/esm2022/v-angular/button/index.mjs +3 -0
- package/esm2022/v-angular/card/card.component.mjs +11 -0
- package/esm2022/v-angular/card/card.module.mjs +18 -0
- package/esm2022/v-angular/card/index.mjs +3 -0
- package/esm2022/v-angular/character-countdown/character-countdown.directive.mjs +51 -0
- package/esm2022/v-angular/character-countdown/character-countdown.module.mjs +18 -0
- package/esm2022/v-angular/character-countdown/index.mjs +3 -0
- package/esm2022/v-angular/checkbox/checkbox.component.mjs +72 -0
- package/esm2022/v-angular/checkbox/checkbox.module.mjs +19 -0
- package/esm2022/v-angular/checkbox/index.mjs +3 -0
- package/esm2022/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +256 -0
- package/esm2022/v-angular/dropdown/dropdown-list/index.mjs +2 -0
- package/esm2022/v-angular/dropdown/dropdown.component.mjs +239 -0
- package/esm2022/v-angular/dropdown/dropdown.module.mjs +22 -0
- package/esm2022/v-angular/dropdown/index.mjs +6 -0
- package/esm2022/v-angular/dropdown/typeahead/index.mjs +6 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +98 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.mjs +85 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.mjs +132 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead.directive.mjs +177 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead.module.mjs +33 -0
- package/esm2022/v-angular/i18n/i18n.json +12 -0
- package/esm2022/v-angular/i18n/i18n.module.mjs +83 -0
- package/esm2022/v-angular/i18n/i18n.test.module.mjs +89 -0
- package/esm2022/v-angular/i18n/index.mjs +3 -0
- package/esm2022/v-angular/index.mjs +18 -0
- package/esm2022/v-angular/info-circle/index.mjs +3 -0
- package/esm2022/v-angular/info-circle/info-circle.component.mjs +28 -0
- package/esm2022/v-angular/info-circle/info-circle.module.mjs +21 -0
- package/esm2022/v-angular/input/index.mjs +3 -0
- package/esm2022/v-angular/input/input.component.mjs +221 -0
- package/esm2022/v-angular/input/input.module.mjs +32 -0
- package/esm2022/v-angular/input-mask/config.mjs +9 -0
- package/esm2022/v-angular/input-mask/constants.mjs +2 -0
- package/esm2022/v-angular/input-mask/index.mjs +6 -0
- package/esm2022/v-angular/input-mask/input-mask-format.pipe.mjs +21 -0
- package/esm2022/v-angular/input-mask/input-mask.directive.mjs +165 -0
- package/esm2022/v-angular/input-mask/input-mask.module.mjs +35 -0
- package/esm2022/v-angular/input-mask/input-mask.types.mjs +2 -0
- package/esm2022/v-angular/modal/dialog/dialog.component.mjs +190 -0
- package/esm2022/v-angular/modal/fold-out/fold-out.component.mjs +56 -0
- package/esm2022/v-angular/modal/fold-out/fold-out.directive.mjs +19 -0
- package/esm2022/v-angular/modal/index.mjs +6 -0
- package/esm2022/v-angular/modal/modal.globals.mjs +20 -0
- package/esm2022/v-angular/modal/modal.module.mjs +40 -0
- package/esm2022/v-angular/modal/modal.types.mjs +2 -0
- package/esm2022/v-angular/modal/slide-out/slide-out.component.mjs +229 -0
- package/esm2022/v-angular/radio/index.mjs +3 -0
- package/esm2022/v-angular/radio/radio.component.mjs +130 -0
- package/esm2022/v-angular/radio/radio.module.mjs +20 -0
- package/esm2022/v-angular/sebgroup-green-angular-v-angular.mjs +5 -0
- package/esm2022/v-angular/textarea/index.mjs +3 -0
- package/esm2022/v-angular/textarea/textarea.component.mjs +102 -0
- package/esm2022/v-angular/textarea/textarea.module.mjs +19 -0
- package/esm2022/v-angular/tooltip/index.mjs +3 -0
- package/esm2022/v-angular/tooltip/tooltip.directive.mjs +273 -0
- package/esm2022/v-angular/tooltip/tooltip.module.mjs +18 -0
- package/esm2022/v-angular/v-angular.module.mjs +80 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +8 -8
- package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs +4 -4
- package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs +4 -4
- package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs +2 -2
- package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +179 -10
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs +2 -2
- package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs +11 -10
- package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs +6 -6
- package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +33 -33
- package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs +7 -5
- package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs +12 -12
- package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-v-angular.mjs +3408 -0
- package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -0
- package/package.json +8 -2
- package/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +3 -3
- package/src/v-angular/button/button.component.d.ts +2 -2
- package/src/v-angular/character-countdown/character-countdown.directive.d.ts +1 -1
- package/src/v-angular/core/core.globals.d.ts +1 -1
- package/src/v-angular/dropdown/typeahead/index.d.ts +3 -0
- package/src/v-angular/dropdown/typeahead/typeahead.directive.d.ts +76 -0
- package/src/v-angular/input/input.component.d.ts +3 -3
- package/src/v-angular/input-mask/input-mask-format.pipe.d.ts +1 -1
- package/src/v-angular/input-mask/input-mask.directive.d.ts +2 -2
- package/src/v-angular/modal/dialog/dialog.component.d.ts +5 -5
- package/src/v-angular/modal/fold-out/fold-out.directive.d.ts +1 -1
- package/src/v-angular/modal/modal.globals.d.ts +1 -1
- package/src/v-angular/modal/slide-out/slide-out.component.d.ts +6 -6
- package/src/v-angular/textarea/textarea.module.d.ts +2 -1
- package/src/v-angular/tooltip/tooltip.directive.d.ts +4 -4
- package/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +124 -0
- package/v-angular/base-control-value-accessor/base-control-value-accessor.module.d.ts +7 -0
- package/v-angular/base-control-value-accessor/index.d.ts +2 -0
- package/v-angular/breadcrumbs/breadcrumbs.component.d.ts +18 -0
- package/v-angular/breadcrumbs/breadcrumbs.module.d.ts +10 -0
- package/v-angular/breadcrumbs/index.d.ts +2 -0
- package/v-angular/button/button.component.d.ts +62 -0
- package/v-angular/button/button.module.d.ts +10 -0
- package/v-angular/button/index.d.ts +2 -0
- package/v-angular/card/card.component.d.ts +5 -0
- package/v-angular/card/card.module.d.ts +8 -0
- package/v-angular/card/index.d.ts +2 -0
- package/v-angular/character-countdown/character-countdown.directive.d.ts +17 -0
- package/v-angular/character-countdown/character-countdown.module.d.ts +8 -0
- package/v-angular/character-countdown/index.d.ts +2 -0
- package/v-angular/checkbox/checkbox.component.d.ts +27 -0
- package/v-angular/checkbox/checkbox.module.d.ts +9 -0
- package/v-angular/checkbox/index.d.ts +2 -0
- package/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +89 -0
- package/v-angular/dropdown/dropdown-list/index.d.ts +1 -0
- package/v-angular/dropdown/dropdown.component.d.ts +99 -0
- package/v-angular/dropdown/dropdown.module.d.ts +12 -0
- package/v-angular/dropdown/index.d.ts +5 -0
- package/v-angular/dropdown/typeahead/index.d.ts +5 -0
- package/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.d.ts +34 -0
- package/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.d.ts +34 -0
- package/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.d.ts +59 -0
- package/v-angular/dropdown/typeahead/typeahead.directive.d.ts +76 -0
- package/v-angular/dropdown/typeahead/typeahead.module.d.ts +11 -0
- package/v-angular/i18n/i18n.module.d.ts +15 -0
- package/v-angular/i18n/i18n.test.module.d.ts +27 -0
- package/v-angular/i18n/index.d.ts +2 -0
- package/v-angular/index.d.ts +17 -0
- package/v-angular/info-circle/index.d.ts +2 -0
- package/v-angular/info-circle/info-circle.component.d.ts +16 -0
- package/v-angular/info-circle/info-circle.module.d.ts +10 -0
- package/v-angular/input/index.d.ts +2 -0
- package/v-angular/input/input.component.d.ts +90 -0
- package/v-angular/input/input.module.d.ts +11 -0
- package/v-angular/input-mask/config.d.ts +6 -0
- package/v-angular/input-mask/constants.d.ts +2 -0
- package/v-angular/input-mask/index.d.ts +5 -0
- package/v-angular/input-mask/input-mask-format.pipe.d.ts +8 -0
- package/v-angular/input-mask/input-mask.directive.d.ts +39 -0
- package/v-angular/input-mask/input-mask.module.d.ts +11 -0
- package/v-angular/input-mask/input-mask.types.d.ts +20 -0
- package/v-angular/modal/dialog/dialog.component.d.ts +55 -0
- package/v-angular/modal/fold-out/fold-out.component.d.ts +24 -0
- package/v-angular/modal/fold-out/fold-out.directive.d.ts +6 -0
- package/v-angular/modal/index.d.ts +5 -0
- package/v-angular/modal/modal.globals.d.ts +13 -0
- package/v-angular/modal/modal.module.d.ts +13 -0
- package/v-angular/modal/modal.types.d.ts +5 -0
- package/v-angular/modal/slide-out/slide-out.component.d.ts +76 -0
- package/v-angular/radio/index.d.ts +2 -0
- package/v-angular/radio/radio.component.d.ts +48 -0
- package/v-angular/radio/radio.module.d.ts +9 -0
- package/v-angular/textarea/index.d.ts +2 -0
- package/v-angular/textarea/textarea.component.d.ts +44 -0
- package/v-angular/textarea/textarea.module.d.ts +9 -0
- package/v-angular/tooltip/index.d.ts +2 -0
- package/v-angular/tooltip/tooltip.directive.d.ts +106 -0
- package/v-angular/tooltip/tooltip.module.d.ts +8 -0
- package/v-angular/v-angular.module.d.ts +23 -0
package/esm2022/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.mjs
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class NgvTypeaheadHighlightComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.text = '';
|
|
7
|
+
this.input = '';
|
|
8
|
+
/**
|
|
9
|
+
* Regexp of characters that are allowed in textContent without being found in textToHighlight
|
|
10
|
+
* Allow whitespaces.
|
|
11
|
+
* */
|
|
12
|
+
this.allowedNonMatchingChars = new RegExp(/\s/);
|
|
13
|
+
}
|
|
14
|
+
ngOnChanges(changes) {
|
|
15
|
+
const { textContent, textToHighlight } = changes;
|
|
16
|
+
if (textContent?.currentValue != null)
|
|
17
|
+
this.text = `${textContent.currentValue}`;
|
|
18
|
+
if (textToHighlight?.currentValue != null)
|
|
19
|
+
this.input = `${textToHighlight.currentValue}`;
|
|
20
|
+
this.updateValues();
|
|
21
|
+
}
|
|
22
|
+
updateValues() {
|
|
23
|
+
const splittedText = this.text.toLocaleLowerCase().split('');
|
|
24
|
+
const splittedInput = this.input.toLocaleLowerCase().split('');
|
|
25
|
+
const { start, end } = this.getHighlightedPart(splittedText, splittedInput);
|
|
26
|
+
// If user input is not found within the textcontent, reset options and return.
|
|
27
|
+
if (start === -1 || end === -1) {
|
|
28
|
+
this.prefix = this.match = this.suffix = '';
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.prefix = this.text.substring(0, start);
|
|
32
|
+
this.match = this.text.substring(start, end);
|
|
33
|
+
this.suffix = this.text.substring(end);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Function that finds the start and end index of where the input is located within the text to display.
|
|
37
|
+
* First occurence is returned. Allows for spaces to occur despite input not matching space.
|
|
38
|
+
* Loops through each character in splittedText and when a char in splittedText equlas the first character of
|
|
39
|
+
* splittedInput, evaluate wether it's match on the entire input.
|
|
40
|
+
* - If it's => return indexes.
|
|
41
|
+
* - If it's not => break out and check next char in outer loop.
|
|
42
|
+
* @param splittedText the text content splitted in an array
|
|
43
|
+
* @param splittedInput the input splitted in an array
|
|
44
|
+
* @returns { start: number, end: number } Indexes of where the match starts and ends in the text displatyed
|
|
45
|
+
*/
|
|
46
|
+
getHighlightedPart(splittedText, splittedInput) {
|
|
47
|
+
let start = -1;
|
|
48
|
+
let end = -1;
|
|
49
|
+
for (let i = 0; i < splittedText.length; i++) {
|
|
50
|
+
// If start and end have been set, break and return
|
|
51
|
+
if (start > -1 || end > -1)
|
|
52
|
+
break;
|
|
53
|
+
// If current char match first in input, try see if whole input match from that index
|
|
54
|
+
if (splittedText[i] === splittedInput[0]) {
|
|
55
|
+
let matches = 1;
|
|
56
|
+
for (let t = 1; t <= splittedText.length; t++) {
|
|
57
|
+
// If match on last character of input, we're finished.
|
|
58
|
+
if (matches === splittedInput.length) {
|
|
59
|
+
start = i;
|
|
60
|
+
end = start + t;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
if (splittedText[t + i] === splittedInput[matches])
|
|
64
|
+
matches++;
|
|
65
|
+
else if (this.allowedNonMatchingChars.test(splittedText[t + i]))
|
|
66
|
+
continue; // Ignore whitespace, continue
|
|
67
|
+
else
|
|
68
|
+
break; // No match, break out of inner loop to check next char in text
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return { start, end };
|
|
73
|
+
}
|
|
74
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadHighlightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
75
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgvTypeaheadHighlightComponent, selector: "nggv-typeahead-highlight", inputs: { textContent: "textContent", textToHighlight: "textToHighlight" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!this.match\">{{ textContent }}</ng-container>\n<!-- Note that this is sensitive to line breaks producing extra spacing between the different parts -->\n<ng-container *ngIf=\"!!this.match\">\n {{ prefix || '' }}<span class=\"match\">{{ match }}</span>{{ suffix ||''}}\n</ng-container>", styles: [":host .match{font-weight:500}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
76
|
+
}
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadHighlightComponent, decorators: [{
|
|
78
|
+
type: Component,
|
|
79
|
+
args: [{ selector: 'nggv-typeahead-highlight', template: "<ng-container *ngIf=\"!this.match\">{{ textContent }}</ng-container>\n<!-- Note that this is sensitive to line breaks producing extra spacing between the different parts -->\n<ng-container *ngIf=\"!!this.match\">\n {{ prefix || '' }}<span class=\"match\">{{ match }}</span>{{ suffix ||''}}\n</ng-container>", styles: [":host .match{font-weight:500}\n"] }]
|
|
80
|
+
}], propDecorators: { textContent: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], textToHighlight: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}] } });
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLWhpZ2hsaWdodC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kcm9wZG93bi90eXBlYWhlYWQvdHlwZWFoZWFkLWhpZ2hsaWdodC90eXBlYWhlYWQtaGlnaGxpZ2h0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQtaGlnaGxpZ2h0L3R5cGVhaGVhZC1oaWdobGlnaHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFBOzs7QUFPMUUsTUFBTSxPQUFPLDhCQUE4QjtJQUwzQztRQWVFLFNBQUksR0FBRyxFQUFFLENBQUE7UUFDVCxVQUFLLEdBQUcsRUFBRSxDQUFBO1FBRVY7OzthQUdLO1FBQ0wsNEJBQXVCLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7S0FvRTNDO0lBbEVDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUNoRCxJQUFJLFdBQVcsRUFBRSxZQUFZLElBQUksSUFBSTtZQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQzNDLElBQUksZUFBZSxFQUFFLFlBQVksSUFBSSxJQUFJO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDaEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDNUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUU5RCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFFM0UsK0VBQStFO1FBQy9FLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7WUFDM0MsT0FBTTtTQUNQO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLGtCQUFrQixDQUN4QixZQUFzQixFQUN0QixhQUF1QjtRQUV2QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNkLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBRVosS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsbURBQW1EO1lBQ25ELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQUUsTUFBSztZQUVqQyxxRkFBcUY7WUFDckYsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUE7Z0JBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzdDLHVEQUF1RDtvQkFDdkQsSUFBSSxPQUFPLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTt3QkFDcEMsS0FBSyxHQUFHLENBQUMsQ0FBQTt3QkFDVCxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQTt3QkFDZixNQUFLO3FCQUNOO29CQUNELElBQUksWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsT0FBTyxDQUFDO3dCQUFFLE9BQU8sRUFBRSxDQUFBO3lCQUN4RCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDN0QsU0FBUSxDQUFDLDhCQUE4Qjs7d0JBQ3BDLE1BQUssQ0FBQywrREFBK0Q7aUJBQzNFO2FBQ0Y7U0FDRjtRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUE7SUFDdkIsQ0FBQzsrR0FwRlUsOEJBQThCO21HQUE5Qiw4QkFBOEIsaUtDUDNDLHVUQUllOzs0RkRHRiw4QkFBOEI7a0JBTDFDLFNBQVM7K0JBQ0UsMEJBQTBCOzhCQU0zQixXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2d2LXR5cGVhaGVhZC1oaWdobGlnaHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHlwZWFoZWFkLWhpZ2hsaWdodC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3R5cGVhaGVhZC1oaWdobGlnaHQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd2VHlwZWFoZWFkSGlnaGxpZ2h0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLyoqIFRoZSB0ZXh0IHRoYXQgaXMgZGlzcGxheWVkIGluIHRoZSBkcm9wZG93biBsaXN0ICovXG4gIEBJbnB1dCgpIHRleHRDb250ZW50Pzogc3RyaW5nXG4gIC8qKiBUaGUgc3Vic3RyaW5nIHRoYXQgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIHdpdGhpbiB0ZXh0Q29udGVudCAqL1xuICBASW5wdXQoKSB0ZXh0VG9IaWdobGlnaHQ/OiBzdHJpbmdcblxuICBwcmVmaXg/OiBzdHJpbmcgLy8gU3Vic3RyaW5nIGJlZm9yZSB0aGUgbWF0Y2hcbiAgbWF0Y2g/OiBzdHJpbmcgLy8gVGhlIG1hdGNoXG4gIHN1ZmZpeD86IHN0cmluZyAvLyBTdWJzdHJpbmcgYWZ0ZXIgdGhlIG1hdGNoXG5cbiAgdGV4dCA9ICcnXG4gIGlucHV0ID0gJydcblxuICAvKipcbiAgICogUmVnZXhwIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgYWxsb3dlZCBpbiB0ZXh0Q29udGVudCB3aXRob3V0IGJlaW5nIGZvdW5kIGluIHRleHRUb0hpZ2hsaWdodFxuICAgKiBBbGxvdyB3aGl0ZXNwYWNlcy5cbiAgICogKi9cbiAgYWxsb3dlZE5vbk1hdGNoaW5nQ2hhcnMgPSBuZXcgUmVnRXhwKC9cXHMvKVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCB7IHRleHRDb250ZW50LCB0ZXh0VG9IaWdobGlnaHQgfSA9IGNoYW5nZXNcbiAgICBpZiAodGV4dENvbnRlbnQ/LmN1cnJlbnRWYWx1ZSAhPSBudWxsKVxuICAgICAgdGhpcy50ZXh0ID0gYCR7dGV4dENvbnRlbnQuY3VycmVudFZhbHVlfWBcbiAgICBpZiAodGV4dFRvSGlnaGxpZ2h0Py5jdXJyZW50VmFsdWUgIT0gbnVsbClcbiAgICAgIHRoaXMuaW5wdXQgPSBgJHt0ZXh0VG9IaWdobGlnaHQuY3VycmVudFZhbHVlfWBcbiAgICB0aGlzLnVwZGF0ZVZhbHVlcygpXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlcygpIHtcbiAgICBjb25zdCBzcGxpdHRlZFRleHQgPSB0aGlzLnRleHQudG9Mb2NhbGVMb3dlckNhc2UoKS5zcGxpdCgnJylcbiAgICBjb25zdCBzcGxpdHRlZElucHV0ID0gdGhpcy5pbnB1dC50b0xvY2FsZUxvd2VyQ2FzZSgpLnNwbGl0KCcnKVxuXG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB0aGlzLmdldEhpZ2hsaWdodGVkUGFydChzcGxpdHRlZFRleHQsIHNwbGl0dGVkSW5wdXQpXG5cbiAgICAvLyBJZiB1c2VyIGlucHV0IGlzIG5vdCBmb3VuZCB3aXRoaW4gdGhlIHRleHRjb250ZW50LCByZXNldCBvcHRpb25zIGFuZCByZXR1cm4uXG4gICAgaWYgKHN0YXJ0ID09PSAtMSB8fCBlbmQgPT09IC0xKSB7XG4gICAgICB0aGlzLnByZWZpeCA9IHRoaXMubWF0Y2ggPSB0aGlzLnN1ZmZpeCA9ICcnXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5wcmVmaXggPSB0aGlzLnRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0KVxuICAgIHRoaXMubWF0Y2ggPSB0aGlzLnRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpXG4gICAgdGhpcy5zdWZmaXggPSB0aGlzLnRleHQuc3Vic3RyaW5nKGVuZClcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0aGF0IGZpbmRzIHRoZSBzdGFydCBhbmQgZW5kIGluZGV4IG9mIHdoZXJlIHRoZSBpbnB1dCBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgdGV4dCB0byBkaXNwbGF5LlxuICAgKiBGaXJzdCBvY2N1cmVuY2UgaXMgcmV0dXJuZWQuIEFsbG93cyBmb3Igc3BhY2VzIHRvIG9jY3VyIGRlc3BpdGUgaW5wdXQgbm90IG1hdGNoaW5nIHNwYWNlLlxuICAgKiBMb29wcyB0aHJvdWdoIGVhY2ggY2hhcmFjdGVyIGluIHNwbGl0dGVkVGV4dCBhbmQgd2hlbiBhIGNoYXIgaW4gc3BsaXR0ZWRUZXh0IGVxdWxhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mXG4gICAqIHNwbGl0dGVkSW5wdXQsIGV2YWx1YXRlIHdldGhlciBpdCdzIG1hdGNoIG9uIHRoZSBlbnRpcmUgaW5wdXQuXG4gICAqIC0gSWYgaXQncyA9PiByZXR1cm4gaW5kZXhlcy5cbiAgICogLSBJZiBpdCdzIG5vdCA9PiBicmVhayBvdXQgYW5kIGNoZWNrIG5leHQgY2hhciBpbiBvdXRlciBsb29wLlxuICAgKiBAcGFyYW0gc3BsaXR0ZWRUZXh0IHRoZSB0ZXh0IGNvbnRlbnQgc3BsaXR0ZWQgaW4gYW4gYXJyYXlcbiAgICogQHBhcmFtIHNwbGl0dGVkSW5wdXQgdGhlIGlucHV0IHNwbGl0dGVkIGluIGFuIGFycmF5XG4gICAqIEByZXR1cm5zIHsgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIgfSBJbmRleGVzIG9mIHdoZXJlIHRoZSBtYXRjaCBzdGFydHMgYW5kIGVuZHMgaW4gdGhlIHRleHQgZGlzcGxhdHllZFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIaWdobGlnaHRlZFBhcnQoXG4gICAgc3BsaXR0ZWRUZXh0OiBzdHJpbmdbXSxcbiAgICBzcGxpdHRlZElucHV0OiBzdHJpbmdbXSxcbiAgKTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IHtcbiAgICBsZXQgc3RhcnQgPSAtMVxuICAgIGxldCBlbmQgPSAtMVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdHRlZFRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIElmIHN0YXJ0IGFuZCBlbmQgaGF2ZSBiZWVuIHNldCwgYnJlYWsgYW5kIHJldHVyblxuICAgICAgaWYgKHN0YXJ0ID4gLTEgfHwgZW5kID4gLTEpIGJyZWFrXG5cbiAgICAgIC8vIElmIGN1cnJlbnQgY2hhciBtYXRjaCBmaXJzdCBpbiBpbnB1dCwgdHJ5IHNlZSBpZiB3aG9sZSBpbnB1dCBtYXRjaCBmcm9tIHRoYXQgaW5kZXhcbiAgICAgIGlmIChzcGxpdHRlZFRleHRbaV0gPT09IHNwbGl0dGVkSW5wdXRbMF0pIHtcbiAgICAgICAgbGV0IG1hdGNoZXMgPSAxXG4gICAgICAgIGZvciAobGV0IHQgPSAxOyB0IDw9IHNwbGl0dGVkVGV4dC5sZW5ndGg7IHQrKykge1xuICAgICAgICAgIC8vIElmIG1hdGNoIG9uIGxhc3QgY2hhcmFjdGVyIG9mIGlucHV0LCB3ZSdyZSBmaW5pc2hlZC5cbiAgICAgICAgICBpZiAobWF0Y2hlcyA9PT0gc3BsaXR0ZWRJbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gaVxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyB0XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3BsaXR0ZWRUZXh0W3QgKyBpXSA9PT0gc3BsaXR0ZWRJbnB1dFttYXRjaGVzXSkgbWF0Y2hlcysrXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5hbGxvd2VkTm9uTWF0Y2hpbmdDaGFycy50ZXN0KHNwbGl0dGVkVGV4dFt0ICsgaV0pKVxuICAgICAgICAgICAgY29udGludWUgLy8gSWdub3JlIHdoaXRlc3BhY2UsIGNvbnRpbnVlXG4gICAgICAgICAgZWxzZSBicmVhayAvLyBObyBtYXRjaCwgYnJlYWsgb3V0IG9mIGlubmVyIGxvb3AgdG8gY2hlY2sgbmV4dCBjaGFyIGluIHRleHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBzdGFydCwgZW5kIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0aGlzLm1hdGNoXCI+e3sgdGV4dENvbnRlbnQgfX08L25nLWNvbnRhaW5lcj5cbjwhLS0gTm90ZSB0aGF0IHRoaXMgaXMgc2Vuc2l0aXZlIHRvIGxpbmUgYnJlYWtzIHByb2R1Y2luZyBleHRyYSBzcGFjaW5nIGJldHdlZW4gdGhlIGRpZmZlcmVudCBwYXJ0cyAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhIXRoaXMubWF0Y2hcIj5cbiAgICB7eyBwcmVmaXggfHwgJycgfX08c3BhbiBjbGFzcz1cIm1hdGNoXCI+e3sgbWF0Y2ggfX08L3NwYW4+e3sgc3VmZml4IHx8Jyd9fVxuPC9uZy1jb250YWluZXI+Il19
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Component, ElementRef, HostListener, Inject, Input, Optional, Renderer2, Self, } from '@angular/core';
|
|
2
|
+
import { NgControl } from '@angular/forms';
|
|
3
|
+
import { takeUntil } from 'rxjs';
|
|
4
|
+
import { TRANSLOCO_SCOPE } from '@ngneat/transloco';
|
|
5
|
+
import { NgvDropdownComponent } from '../../dropdown.component';
|
|
6
|
+
import { NgvInputComponent } from '@sebgroup/green-angular/src/v-angular/input';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/forms";
|
|
9
|
+
import * as i2 from "@angular/common";
|
|
10
|
+
export class NgvTypeaheadInputComponent extends NgvInputComponent {
|
|
11
|
+
get dropdownButton() {
|
|
12
|
+
return this.hostComponent.inputRef?.nativeElement;
|
|
13
|
+
}
|
|
14
|
+
constructor(element, renderer2, ngControl, translocoScope, cdr) {
|
|
15
|
+
super(ngControl, translocoScope, cdr);
|
|
16
|
+
this.element = element;
|
|
17
|
+
this.renderer2 = renderer2;
|
|
18
|
+
this.ngControl = ngControl;
|
|
19
|
+
this.translocoScope = translocoScope;
|
|
20
|
+
this.cdr = cdr;
|
|
21
|
+
/** Boolean to indicate wether the dropdown is expanded or not, to apply appropriate styling */
|
|
22
|
+
this.expanded = false;
|
|
23
|
+
super.ngOnInit();
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
this.autocomplete = 'off';
|
|
27
|
+
this.debounceTime = 0;
|
|
28
|
+
this.hostComponent.selectOnSingleOption = false;
|
|
29
|
+
this.moveInput();
|
|
30
|
+
this.handleExpandedChange();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @internal
|
|
34
|
+
* Allow space to be inputted as text
|
|
35
|
+
* @param event fired containing which key was released.
|
|
36
|
+
*/
|
|
37
|
+
onKeyUp(event) {
|
|
38
|
+
if (event.code === 'Space') {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* @internal
|
|
44
|
+
* First time the dropdown is expanded, move the input sp it becomes a child of the dropdown button
|
|
45
|
+
* to better reflect semantics and styling.
|
|
46
|
+
*/
|
|
47
|
+
moveInput() {
|
|
48
|
+
// Workaround to execute code in setTimeout due to hooks management etc.
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
// Only move if parent dropdown is found
|
|
51
|
+
if (this.dropdownButton) {
|
|
52
|
+
this.renderer2.appendChild(this.dropdownButton.querySelector('button'), this.element.nativeElement);
|
|
53
|
+
// Get the height of the parent button so the input can be explicitly set to the same height since it's absolutely positioned
|
|
54
|
+
this.buttonHeight =
|
|
55
|
+
this.dropdownButton.getBoundingClientRect().height || 32; // Default to 2em;
|
|
56
|
+
}
|
|
57
|
+
}, 0);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @internal
|
|
61
|
+
* When dropdown is expanded, focus on the input. If a value is selected, set it in the input.
|
|
62
|
+
* When the dropdown is collapsed, empty the input from text.
|
|
63
|
+
*/
|
|
64
|
+
handleExpandedChange() {
|
|
65
|
+
this.hostComponent.expandedChange
|
|
66
|
+
.pipe(takeUntil(this._destroy$))
|
|
67
|
+
.subscribe((state) => {
|
|
68
|
+
this.expanded = state;
|
|
69
|
+
if (this.expanded) {
|
|
70
|
+
// Weird workaround for setting focus. Didn't set focus, but wrapping in setTimeout solved it.
|
|
71
|
+
// See suggestion here: https://github.com/ionic-team/stencil/issues/3772#issuecomment-1292599609
|
|
72
|
+
setTimeout(() => this.setFocus());
|
|
73
|
+
// Format and interpolate result since return type can be other than string from the formatter
|
|
74
|
+
const formattedValue = `${this.formatSelected(this.hostComponent.state)}`;
|
|
75
|
+
this.setInput(formattedValue, false);
|
|
76
|
+
}
|
|
77
|
+
else
|
|
78
|
+
this.setInput('', true);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* @internal Formats the selected option to display in the input. Interpolate the returned value
|
|
83
|
+
* since we don't know the return type or label type.
|
|
84
|
+
* @param value The selected value
|
|
85
|
+
* @returns The formatted value
|
|
86
|
+
*/
|
|
87
|
+
formatSelected(value) {
|
|
88
|
+
if (value?.key == null)
|
|
89
|
+
return '';
|
|
90
|
+
// If no formatter exists, return the label or empty string
|
|
91
|
+
if (!this.selectedFormatter)
|
|
92
|
+
return value.label ?? '';
|
|
93
|
+
// If a formatter exists, use it
|
|
94
|
+
return this.selectedFormatter(value) ?? '';
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Sets the input programmatically instead of native HTML input event.
|
|
98
|
+
* @param input
|
|
99
|
+
*/
|
|
100
|
+
setInput(input, triggerFilter) {
|
|
101
|
+
this.state = input;
|
|
102
|
+
if (triggerFilter) {
|
|
103
|
+
this.onChange(this.state);
|
|
104
|
+
this.inputChange$.next(this.state);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.NgControl, optional: true, self: true }, { token: TRANSLOCO_SCOPE, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
108
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgvTypeaheadInputComponent, selector: "nggv-typeahead-input", inputs: { hostComponent: "hostComponent", resultFormatter: "resultFormatter", selectedFormatter: "selectedFormatter" }, host: { listeners: { "document:keyup": "onKeyUp($event)" } }, usesInheritance: true, ngImport: i0, template: "<ng-container>\n <div class=\"input-wrapper\"\n [ngClass]=\"{ 'expanded': expanded, 'collapsed': !expanded }\"\n [ngStyle]=\"{ 'height.px': buttonHeight }\"\n (click)=\"$event.stopPropagation();\">\n <!-- INPUT FIELD -->\n <div class=\"input-group\">\n <input #input\n [id]=\"id + '-input'\"\n class=\"sdv-field\"\n [attr.type]=\"type\"\n [attr.name]=\"name\"\n [attr.required]=\"required\"\n [attr.email]=\"email\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [pattern]=\"pattern\"\n [disabled]=\"disabled\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\" />\n </div>\n </div>\n</ng-container>", styles: [":host{position:absolute;top:0;left:0;width:calc(100% - 2.625em)}:host .input-wrapper{border:none;box-shadow:none}:host .input-wrapper.expanded{display:flex}:host .input-wrapper.expanded .input-group input.sdv-field{height:100%;width:100%;min-height:unset;margin-left:1px;border:none;box-shadow:none}:host .input-wrapper.collapsed{display:none}:host .input-wrapper .input-group{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
|
|
109
|
+
}
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadInputComponent, decorators: [{
|
|
111
|
+
type: Component,
|
|
112
|
+
args: [{ selector: 'nggv-typeahead-input', template: "<ng-container>\n <div class=\"input-wrapper\"\n [ngClass]=\"{ 'expanded': expanded, 'collapsed': !expanded }\"\n [ngStyle]=\"{ 'height.px': buttonHeight }\"\n (click)=\"$event.stopPropagation();\">\n <!-- INPUT FIELD -->\n <div class=\"input-group\">\n <input #input\n [id]=\"id + '-input'\"\n class=\"sdv-field\"\n [attr.type]=\"type\"\n [attr.name]=\"name\"\n [attr.required]=\"required\"\n [attr.email]=\"email\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [pattern]=\"pattern\"\n [disabled]=\"disabled\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\" />\n </div>\n </div>\n</ng-container>", styles: [":host{position:absolute;top:0;left:0;width:calc(100% - 2.625em)}:host .input-wrapper{border:none;box-shadow:none}:host .input-wrapper.expanded{display:flex}:host .input-wrapper.expanded .input-group input.sdv-field{height:100%;width:100%;min-height:unset;margin-left:1px;border:none;box-shadow:none}:host .input-wrapper.collapsed{display:none}:host .input-wrapper .input-group{width:100%}\n"] }]
|
|
113
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.NgControl, decorators: [{
|
|
114
|
+
type: Self
|
|
115
|
+
}, {
|
|
116
|
+
type: Optional
|
|
117
|
+
}] }, { type: undefined, decorators: [{
|
|
118
|
+
type: Optional
|
|
119
|
+
}, {
|
|
120
|
+
type: Inject,
|
|
121
|
+
args: [TRANSLOCO_SCOPE]
|
|
122
|
+
}] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { hostComponent: [{
|
|
123
|
+
type: Input
|
|
124
|
+
}], resultFormatter: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], selectedFormatter: [{
|
|
127
|
+
type: Input
|
|
128
|
+
}], onKeyUp: [{
|
|
129
|
+
type: HostListener,
|
|
130
|
+
args: ['document:keyup', ['$event']]
|
|
131
|
+
}] } });
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQtaW5wdXQvdHlwZWFoZWFkLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQtaW5wdXQvdHlwZWFoZWFkLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUVoQyxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLG1CQUFtQixDQUFBO0FBR25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFBOzs7O0FBTy9FLE1BQU0sT0FBTywwQkFDWCxTQUFRLGlCQUFpQjtJQVl6QixJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUE7SUFDbkQsQ0FBQztJQVFELFlBQ1UsT0FBbUIsRUFDbkIsU0FBb0IsRUFDRCxTQUFvQixFQUdyQyxjQUE4QixFQUM5QixHQUFzQjtRQUVoQyxLQUFLLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxHQUFHLENB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LENBQUE7UUFDbEIsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ25DO0lBQ0gsQ0FBQzsrR0E1SFUsMEJBQTBCLDBIQTRCM0IsZUFBZTttR0E1QmQsMEJBQTBCLHlRQzVCdkMscXlDQWlDZTs7NEZETEYsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHNCQUFzQjs7MEJBOEI3QixJQUFJOzswQkFBSSxRQUFROzswQkFDaEIsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxlQUFlOzRFQXZCaEIsYUFBYTtzQkFBckIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkF3Q04sT0FBTztzQkFETixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgU2VsZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUsIFRyYW5zbG9jb1Njb3BlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nXG5cbmltcG9ydCB7IE9wdGlvbkJhc2UgfSBmcm9tICdAc2ViZ3JvdXAvZ3JlZW4tYW5ndWxhci9zcmMvdi1hbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBOZ3ZEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duLmNvbXBvbmVudCdcbmltcG9ydCB7IE5ndklucHV0Q29tcG9uZW50IH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9pbnB1dCdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdndi10eXBlYWhlYWQtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHlwZWFoZWFkLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdHlwZWFoZWFkLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndlR5cGVhaGVhZElucHV0Q29tcG9uZW50XG4gIGV4dGVuZHMgTmd2SW5wdXRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBob3N0IGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGhvc3RDb21wb25lbnQhOiBOZ3ZEcm9wZG93bkNvbXBvbmVudFxuXG4gIC8qKiBGb3JtYXRzIGVhY2ggaXRlbSB0aGF0IGlzIGRpc3BsYXllZCBhcyBhbiBvcHRpb24uIE9ubHkgYXBwbGllcyBmb3JtYXQgaWYgdGhlIG9wdGlvbiBpZiBpdCBpbXBsZW1lbnQgT3B0aW9uIGludGVyZmFjZS4gKi9cbiAgQElucHV0KCkgcmVzdWx0Rm9ybWF0dGVyPzogKG9wdGlvbjogT3B0aW9uQmFzZTxhbnk+KSA9PiBzdHJpbmdcblxuICAvKiogRm9ybWF0cyB0aGUgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgaW5wdXQgd2hlbiBkcm9wZG93biBpcyBvcGVuZWQuIElmIG5vIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGRpc3BsYXkgdGhlIHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBvYmplY3RzIGxhYmVsIHByb3BlcnR5ICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkRm9ybWF0dGVyPzogKHNlbGVjdGVkOiBPcHRpb25CYXNlPGFueT4pID0+IHN0cmluZ1xuXG4gIGdldCBkcm9wZG93bkJ1dHRvbigpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdENvbXBvbmVudC5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudFxuICB9XG5cbiAgLyoqIEJvb2xlYW4gdG8gaW5kaWNhdGUgd2V0aGVyIHRoZSBkcm9wZG93biBpcyBleHBhbmRlZCBvciBub3QsIHRvIGFwcGx5IGFwcHJvcHJpYXRlIHN0eWxpbmcgKi9cbiAgZXhwYW5kZWQgPSBmYWxzZVxuXG4gIC8qKiBVc2VkIHRvIGRldGVybWluZSB0aGUgaGVpZ2h0IG9mIHRoZSBpbnB1dGluIGh0bWwgKi9cbiAgYnV0dG9uSGVpZ2h0PzogbnVtYmVyXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjIsXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFRSQU5TTE9DT19TQ09QRSlcbiAgICBwcm90ZWN0ZWQgdHJhbnNsb2NvU2NvcGU6IFRyYW5zbG9jb1Njb3BlLFxuICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICBzdXBlcihuZ0NvbnRyb2wsIHRyYW5zbG9jb1Njb3BlLCBjZHIpXG4gICAgc3VwZXIubmdPbkluaXQoKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSAnb2ZmJ1xuICAgIHRoaXMuZGVib3VuY2VUaW1lID0gMFxuICAgIHRoaXMuaG9zdENvbXBvbmVudC5zZWxlY3RPblNpbmdsZU9wdGlvbiA9IGZhbHNlXG5cbiAgICB0aGlzLm1vdmVJbnB1dCgpXG4gICAgdGhpcy5oYW5kbGVFeHBhbmRlZENoYW5nZSgpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEFsbG93IHNwYWNlIHRvIGJlIGlucHV0dGVkIGFzIHRleHRcbiAgICogQHBhcmFtIGV2ZW50IGZpcmVkIGNvbnRhaW5pbmcgd2hpY2gga2V5IHdhcyByZWxlYXNlZC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwJywgWyckZXZlbnQnXSlcbiAgb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5jb2RlID09PSAnU3BhY2UnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBGaXJzdCB0aW1lIHRoZSBkcm9wZG93biBpcyBleHBhbmRlZCwgbW92ZSB0aGUgaW5wdXQgc3AgaXQgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBkcm9wZG93biBidXR0b25cbiAgICogdG8gYmV0dGVyIHJlZmxlY3Qgc2VtYW50aWNzIGFuZCBzdHlsaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBtb3ZlSW5wdXQoKSB7XG4gICAgLy8gV29ya2Fyb3VuZCB0byBleGVjdXRlIGNvZGUgaW4gc2V0VGltZW91dCBkdWUgdG8gaG9va3MgbWFuYWdlbWVudCBldGMuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBPbmx5IG1vdmUgaWYgcGFyZW50IGRyb3Bkb3duIGlzIGZvdW5kXG4gICAgICBpZiAodGhpcy5kcm9wZG93bkJ1dHRvbikge1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5hcHBlbmRDaGlsZChcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duQnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpLFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICApXG4gICAgICAgIC8vIEdldCB0aGUgaGVpZ2h0IG9mIHRoZSBwYXJlbnQgYnV0dG9uIHNvIHRoZSBpbnB1dCBjYW4gYmUgZXhwbGljaXRseSBzZXQgdG8gdGhlIHNhbWUgaGVpZ2h0IHNpbmNlIGl0J3MgYWJzb2x1dGVseSBwb3NpdGlvbmVkXG4gICAgICAgIHRoaXMuYnV0dG9uSGVpZ2h0ID1cbiAgICAgICAgICB0aGlzLmRyb3Bkb3duQnV0dG9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCB8fCAzMiAvLyBEZWZhdWx0IHRvIDJlbTtcbiAgICAgIH1cbiAgICB9LCAwKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXaGVuIGRyb3Bkb3duIGlzIGV4cGFuZGVkLCBmb2N1cyBvbiB0aGUgaW5wdXQuIElmIGEgdmFsdWUgaXMgc2VsZWN0ZWQsIHNldCBpdCBpbiB0aGUgaW5wdXQuXG4gICAqIFdoZW4gdGhlIGRyb3Bkb3duIGlzIGNvbGxhcHNlZCwgZW1wdHkgdGhlIGlucHV0IGZyb20gdGV4dC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlRXhwYW5kZWRDaGFuZ2UoKSB7XG4gICAgdGhpcy5ob3N0Q29tcG9uZW50LmV4cGFuZGVkQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IHN0YXRlXG5cbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAvLyBXZWlyZCB3b3JrYXJvdW5kIGZvciBzZXR0aW5nIGZvY3VzLiBEaWRuJ3Qgc2V0IGZvY3VzLCBidXQgd3JhcHBpbmcgaW4gc2V0VGltZW91dCBzb2x2ZWQgaXQuXG4gICAgICAgICAgLy8gU2VlIHN1Z2dlc3Rpb24gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL2lvbmljLXRlYW0vc3RlbmNpbC9pc3N1ZXMvMzc3MiNpc3N1ZWNvbW1lbnQtMTI5MjU5OTYwOVxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb2N1cygpKVxuICAgICAgICAgIC8vIEZvcm1hdCBhbmQgaW50ZXJwb2xhdGUgcmVzdWx0IHNpbmNlIHJldHVybiB0eXBlIGNhbiBiZSBvdGhlciB0aGFuIHN0cmluZyBmcm9tIHRoZSBmb3JtYXR0ZXJcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGAke3RoaXMuZm9ybWF0U2VsZWN0ZWQodGhpcy5ob3N0Q29tcG9uZW50LnN0YXRlKX1gXG4gICAgICAgICAgdGhpcy5zZXRJbnB1dChmb3JtYXR0ZWRWYWx1ZSwgZmFsc2UpXG4gICAgICAgIH0gZWxzZSB0aGlzLnNldElucHV0KCcnLCB0cnVlKVxuICAgICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgRm9ybWF0cyB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIGRpc3BsYXkgaW4gdGhlIGlucHV0LiBJbnRlcnBvbGF0ZSB0aGUgcmV0dXJuZWQgdmFsdWVcbiAgICogc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgcmV0dXJuIHR5cGUgb3IgbGFiZWwgdHlwZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBzZWxlY3RlZCB2YWx1ZVxuICAgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFNlbGVjdGVkKHZhbHVlOiBPcHRpb25CYXNlPGFueT4pIHtcbiAgICBpZiAodmFsdWU/LmtleSA9PSBudWxsKSByZXR1cm4gJydcbiAgICAvLyBJZiBubyBmb3JtYXR0ZXIgZXhpc3RzLCByZXR1cm4gdGhlIGxhYmVsIG9yIGVtcHR5IHN0cmluZ1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZvcm1hdHRlcikgcmV0dXJuIHZhbHVlLmxhYmVsID8/ICcnXG4gICAgLy8gSWYgYSBmb3JtYXR0ZXIgZXhpc3RzLCB1c2UgaXRcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZvcm1hdHRlcih2YWx1ZSkgPz8gJydcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbnB1dCBwcm9ncmFtbWF0aWNhbGx5IGluc3RlYWQgb2YgbmF0aXZlIEhUTUwgaW5wdXQgZXZlbnQuXG4gICAqIEBwYXJhbSBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbnB1dChpbnB1dDogc3RyaW5nLCB0cmlnZ2VyRmlsdGVyOiBib29sZWFuKSB7XG4gICAgdGhpcy5zdGF0ZSA9IGlucHV0XG4gICAgaWYgKHRyaWdnZXJGaWx0ZXIpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zdGF0ZSlcbiAgICAgIHRoaXMuaW5wdXRDaGFuZ2UkLm5leHQodGhpcy5zdGF0ZSlcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdleHBhbmRlZCc6IGV4cGFuZGVkLCAnY29sbGFwc2VkJzogIWV4cGFuZGVkIH1cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7ICdoZWlnaHQucHgnOiBidXR0b25IZWlnaHQgfVwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XG4gICAgICAgIDwhLS0gSU5QVVQgRklFTEQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0ICNpbnB1dFxuICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICctaW5wdXQnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkdi1maWVsZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIudHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIFthdHRyLnJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5lbWFpbF09XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4bGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5taW5sZW5ndGhdPVwibWlubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbcGF0dGVybl09XCJwYXR0ZXJuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cInJvbGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RhdGVcIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj4iXX0=
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { Directive, ElementRef, EventEmitter, Host, HostListener, Input, Optional, Output, ViewContainerRef, } from '@angular/core';
|
|
2
|
+
import { distinctUntilChanged, from, Subject, takeUntil, tap, withLatestFrom, } from 'rxjs';
|
|
3
|
+
import { NgvDropdownComponent } from '../dropdown.component';
|
|
4
|
+
import { NgvInputComponent } from '@sebgroup/green-angular/src/v-angular/input';
|
|
5
|
+
import { NgvTypeaheadDropdownListComponent } from '../typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component';
|
|
6
|
+
import { NgvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../dropdown.component";
|
|
9
|
+
import * as i2 from "@sebgroup/green-angular/src/v-angular/input";
|
|
10
|
+
export class NgvTypeaheadDirective {
|
|
11
|
+
/** Function that filter the inputvalue */
|
|
12
|
+
set nggvTypeahead(value) {
|
|
13
|
+
this.typeaheadFunction = value;
|
|
14
|
+
// If inputsubscription already exists, unsubscribe and subscribe again
|
|
15
|
+
if (this.inputSubscription$) {
|
|
16
|
+
this.inputSubscription$?.unsubscribe();
|
|
17
|
+
this.inputSubscription$ = undefined;
|
|
18
|
+
this.handleInputChanges();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Forward text inputs to apply the filter function*/
|
|
22
|
+
onNgvInput(event) {
|
|
23
|
+
this.inputValue$.next(event);
|
|
24
|
+
}
|
|
25
|
+
/** Helper to the determine if the host is nggv-drodpown or nggv-input*/
|
|
26
|
+
get hostIsDropdown() {
|
|
27
|
+
return !!this.hostDropdown;
|
|
28
|
+
}
|
|
29
|
+
/** Predefined options */
|
|
30
|
+
get defaultNullishOption() {
|
|
31
|
+
return { key: null, label: this.unselectLabel || '\u00A0' };
|
|
32
|
+
}
|
|
33
|
+
get emptyOption() {
|
|
34
|
+
return { key: null, label: 'label.nomatchingoptions', disabled: true };
|
|
35
|
+
}
|
|
36
|
+
/** Name of the component. nggv-dropdown if NgvDropdownComponent or nggv-input if NgvInputComponent */
|
|
37
|
+
get localName() {
|
|
38
|
+
return this.element.nativeElement.localName;
|
|
39
|
+
}
|
|
40
|
+
constructor(viewContainerRef, element, hostDropdown, hostInput) {
|
|
41
|
+
this.viewContainerRef = viewContainerRef;
|
|
42
|
+
this.element = element;
|
|
43
|
+
this.hostDropdown = hostDropdown;
|
|
44
|
+
this.hostInput = hostInput;
|
|
45
|
+
/** Allow option to be unselected in the dropdown even if it is required. Defaults to true */
|
|
46
|
+
this.allowUnselect = true;
|
|
47
|
+
/** Emits the entered string the user has written in the input */
|
|
48
|
+
this.filterPhraseChange = new EventEmitter();
|
|
49
|
+
this.inputValue$ = new Subject();
|
|
50
|
+
this.onDestroy$ = new Subject();
|
|
51
|
+
}
|
|
52
|
+
ngOnInit() {
|
|
53
|
+
this.handleInputChanges();
|
|
54
|
+
this.inputValue$.next('');
|
|
55
|
+
if (this.hostIsDropdown)
|
|
56
|
+
this.createInput();
|
|
57
|
+
else
|
|
58
|
+
this.createDropdownList();
|
|
59
|
+
}
|
|
60
|
+
ngOnDestroy() {
|
|
61
|
+
this.onDestroy$.next(true);
|
|
62
|
+
this.onDestroy$.complete();
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @internal
|
|
66
|
+
* Core functionality of typeahead. Emits input, then filters the result based on the supplied function
|
|
67
|
+
* If directive is applied on nggv-input, manually show or hide options in the list.
|
|
68
|
+
* If directive is applied on nggv-dropdown, let the dropdown itself choose when to open or close
|
|
69
|
+
*/
|
|
70
|
+
handleInputChanges() {
|
|
71
|
+
this.inputSubscription$ = this.inputValue$
|
|
72
|
+
.pipe(takeUntil(this.onDestroy$), distinctUntilChanged(), tap((inputValue) => this.filterPhraseChange.emit(inputValue)), this.typeaheadFunction ? this.typeaheadFunction : () => from([]), withLatestFrom(this.inputValue$))
|
|
73
|
+
.subscribe(([filteredValues, input]) => this.setOptions(filteredValues, input));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @internal
|
|
77
|
+
* Creates a nggv-input if the host itself is not a text-input
|
|
78
|
+
* Set styles to not display the input when closed
|
|
79
|
+
* Trigger filtering when changes occur in the field
|
|
80
|
+
* */
|
|
81
|
+
createInput() {
|
|
82
|
+
// Create the input component
|
|
83
|
+
this.inputComponent = this.viewContainerRef.createComponent(NgvTypeaheadInputComponent);
|
|
84
|
+
// Forward necessary info to component
|
|
85
|
+
this.inputComponent.setInput('hostComponent', this.hostDropdown);
|
|
86
|
+
this.inputComponent.setInput('selectedFormatter', this.selectedFormatter);
|
|
87
|
+
this.inputComponent.setInput('resultFormatter', this.resultFormatter);
|
|
88
|
+
// Listen to value changes
|
|
89
|
+
this.inputComponent.instance.nggvInput
|
|
90
|
+
.pipe(takeUntil(this.onDestroy$))
|
|
91
|
+
.subscribe((inputValue) => this.inputValue$.next(inputValue));
|
|
92
|
+
}
|
|
93
|
+
/** @internal Creates a nggv-dropdown-list if the host itself is a nggv-input */
|
|
94
|
+
createDropdownList() {
|
|
95
|
+
this.dropdownListComponent = this.viewContainerRef.createComponent(NgvTypeaheadDropdownListComponent);
|
|
96
|
+
this.dropdownListComponent.setInput('hostComponent', this.hostInput);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* @internal Sets the options the user can select.
|
|
100
|
+
* If the host is a nggv-dropdown, utilize the dropdown itself to display the options
|
|
101
|
+
* If the host is a nggv-input, use the created nggv-dropdown-list to displaye the options
|
|
102
|
+
* @param filteredValues The options to display in the dropdown
|
|
103
|
+
* @param emptyInput If the input is empty
|
|
104
|
+
*/
|
|
105
|
+
setOptions(filteredValues, input) {
|
|
106
|
+
if (!filteredValues)
|
|
107
|
+
return;
|
|
108
|
+
// Conditionally add empty or nullish option if it's allowed, the input is empty and does not already contain nullish
|
|
109
|
+
const allowNullish = this.allowUnselect &&
|
|
110
|
+
!input &&
|
|
111
|
+
!(Object.keys(filteredValues[0]).includes('key') &&
|
|
112
|
+
filteredValues[0].key == null);
|
|
113
|
+
if (filteredValues.length === 0) {
|
|
114
|
+
filteredValues = [this.emptyOption];
|
|
115
|
+
}
|
|
116
|
+
else if (allowNullish) {
|
|
117
|
+
filteredValues = [this.defaultNullishOption].concat(filteredValues);
|
|
118
|
+
}
|
|
119
|
+
if (this.hostIsDropdown) {
|
|
120
|
+
// Add nullish option when no input is written (or when dropdown is epanded and has a selection)
|
|
121
|
+
this.hostDropdown.allowControlNullishOption = false;
|
|
122
|
+
this.hostDropdown.options = this.formatOptions(filteredValues);
|
|
123
|
+
this.hostDropdown.textToHighlight = `${input || ''}`;
|
|
124
|
+
this.hostDropdown.detectChanges();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (!this.hostIsDropdown) {
|
|
128
|
+
this.dropdownListComponent.setInput('options', this.formatOptions(filteredValues));
|
|
129
|
+
this.dropdownListComponent.setInput('textToHighlight', `${input || ''}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @internal Formats the available options to display in the dropdown list
|
|
134
|
+
* @param options The selected value
|
|
135
|
+
* @returns The formatted value
|
|
136
|
+
*/
|
|
137
|
+
formatOptions(options) {
|
|
138
|
+
if (!options)
|
|
139
|
+
return [];
|
|
140
|
+
if (!this.resultFormatter)
|
|
141
|
+
return options;
|
|
142
|
+
return options.map((value) => value?.label ? this.resultFormatter?.(value) : value);
|
|
143
|
+
}
|
|
144
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i1.NgvDropdownComponent, host: true, optional: true }, { token: i2.NgvInputComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
145
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NgvTypeaheadDirective, isStandalone: true, selector: "nggv-input[nggvTypeahead], nggv-dropdown[nggvTypeahead]", inputs: { nggvTypeahead: "nggvTypeahead", resultFormatter: "resultFormatter", selectedFormatter: "selectedFormatter", allowUnselect: "allowUnselect", unselectLabel: "unselectLabel" }, outputs: { filterPhraseChange: "filterPhraseChange" }, host: { listeners: { "nggvInput": "onNgvInput($event)" } }, ngImport: i0 }); }
|
|
146
|
+
}
|
|
147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadDirective, decorators: [{
|
|
148
|
+
type: Directive,
|
|
149
|
+
args: [{
|
|
150
|
+
selector: 'nggv-input[nggvTypeahead], nggv-dropdown[nggvTypeahead]',
|
|
151
|
+
standalone: true,
|
|
152
|
+
}]
|
|
153
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i1.NgvDropdownComponent, decorators: [{
|
|
154
|
+
type: Optional
|
|
155
|
+
}, {
|
|
156
|
+
type: Host
|
|
157
|
+
}] }, { type: i2.NgvInputComponent, decorators: [{
|
|
158
|
+
type: Optional
|
|
159
|
+
}, {
|
|
160
|
+
type: Host
|
|
161
|
+
}] }]; }, propDecorators: { nggvTypeahead: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], resultFormatter: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], selectedFormatter: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], allowUnselect: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], unselectLabel: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], filterPhraseChange: [{
|
|
172
|
+
type: Output
|
|
173
|
+
}], onNgvInput: [{
|
|
174
|
+
type: HostListener,
|
|
175
|
+
args: ['nggvInput', ['$event']]
|
|
176
|
+
}] } });
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQTtBQUV0QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLElBQUksRUFFSixPQUFPLEVBRVAsU0FBUyxFQUNULEdBQUcsRUFDSCxjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUE7QUFHYixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQTtBQUMxSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQTs7OztBQU14RixNQUFNLE9BQU8scUJBQXFCO0lBT2hDLDBDQUEwQztJQUMxQyxJQUFhLGFBQWEsQ0FBQyxLQUFnRDtRQUN6RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO1FBRTlCLHVFQUF1RTtRQUN2RSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUE7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQTtZQUNuQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtTQUMxQjtJQUNILENBQUM7SUFpQkQsc0RBQXNEO0lBQ2YsVUFBVSxDQUFDLEtBQVU7UUFD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QUNILENBQUM7K0dBM0xVLHFCQUFxQjttR0FBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQUpqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx5REFBeUQ7b0JBQ25FLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBc0VJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFROzswQkFBSSxJQUFJOzRDQTlETixhQUFhO3NCQUF6QixLQUFLO2dCQVlHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBR2dDLFVBQVU7c0JBQWhELFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmcm9tLFxuICBPcGVyYXRvckZ1bmN0aW9uLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICB3aXRoTGF0ZXN0RnJvbSxcbn0gZnJvbSAncnhqcydcblxuaW1wb3J0IHsgT3B0aW9uLCBPcHRpb25CYXNlIH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmd2RHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi5jb21wb25lbnQnXG5pbXBvcnQgeyBOZ3ZJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvaW5wdXQnXG5pbXBvcnQgeyBOZ3ZUeXBlYWhlYWREcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi90eXBlYWhlYWQvdHlwZWFoZWFkLWRyb3Bkb3duLWxpc3QvdHlwZWFoZWFkLWRyb3Bkb3duLWxpc3QuY29tcG9uZW50J1xuaW1wb3J0IHsgTmd2VHlwZWFoZWFkSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3R5cGVhaGVhZC1pbnB1dC90eXBlYWhlYWQtaW5wdXQuY29tcG9uZW50J1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICduZ2d2LWlucHV0W25nZ3ZUeXBlYWhlYWRdLCBuZ2d2LWRyb3Bkb3duW25nZ3ZUeXBlYWhlYWRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmd2VHlwZWFoZWFkRGlyZWN0aXZlPFxuICAgIEsgPSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIFYgPSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIFQgZXh0ZW5kcyBPcHRpb248SywgVj4gPSBPcHRpb248SywgVj4sXG4gID5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAvKiogRnVuY3Rpb24gdGhhdCBmaWx0ZXIgdGhlIGlucHV0dmFsdWUgKi9cbiAgQElucHV0KCkgc2V0IG5nZ3ZUeXBlYWhlYWQodmFsdWU6IE9wZXJhdG9yRnVuY3Rpb248c3RyaW5nLCBUW10+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy50eXBlYWhlYWRGdW5jdGlvbiA9IHZhbHVlXG5cbiAgICAvLyBJZiBpbnB1dHN1YnNjcmlwdGlvbiBhbHJlYWR5IGV4aXN0cywgdW5zdWJzY3JpYmUgYW5kIHN1YnNjcmliZSBhZ2FpblxuICAgIGlmICh0aGlzLmlucHV0U3Vic2NyaXB0aW9uJCkge1xuICAgICAgdGhpcy5pbnB1dFN1YnNjcmlwdGlvbiQ/LnVuc3Vic2NyaWJlKClcbiAgICAgIHRoaXMuaW5wdXRTdWJzY3JpcHRpb24kID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlcygpXG4gICAgfVxuICB9XG5cbiAgLyoqIEZvcm1hdHMgZWFjaCBpdGVtIHRoYXQgaXMgZGlzcGxheWVkIGFzIGFuIG9wdGlvbi4gT25seSBhcHBsaWVzIGZvcm1hdCBpZiB0aGUgb3B0aW9uIGlmIGl0IGltcGxlbWVudCBPcHRpb24gaW50ZXJmYWNlLiAqL1xuICBASW5wdXQoKSByZXN1bHRGb3JtYXR0ZXI/OiAob3B0aW9uOiBPcHRpb25CYXNlPGFueT4pID0+IHN0cmluZ1xuXG4gIC8qKiBGb3JtYXRzIHRoZSBzZWxlY3RlZCBpdGVtIGluIHRoZSBpbnB1dCB3aGVuIGRyb3Bkb3duIGlzIG9wZW5lZC4gSWYgbm8gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IHdpbGwgZGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIG9iamVjdHMgbGFiZWwgcHJvcGVydHkgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWRGb3JtYXR0ZXI/OiAoc2VsZWN0ZWQ6IE9wdGlvbkJhc2U8YW55PikgPT4gc3RyaW5nXG5cbiAgLyoqIEFsbG93IG9wdGlvbiB0byBiZSB1bnNlbGVjdGVkIGluIHRoZSBkcm9wZG93biBldmVuIGlmIGl0IGlzIHJlcXVpcmVkLiBEZWZhdWx0cyB0byB0cnVlICovXG4gIEBJbnB1dCgpIGFsbG93VW5zZWxlY3QgPSB0cnVlXG5cbiAgLyoqIEN1c3RvbSBsYWJlbCBmb3IgdGhlIHVuc2VsZWN0IG9wdGlvbiAqL1xuICBASW5wdXQoKSB1bnNlbGVjdExhYmVsPzogc3RyaW5nXG5cbiAgLyoqIEVtaXRzIHRoZSBlbnRlcmVkIHN0cmluZyB0aGUgdXNlciBoYXMgd3JpdHRlbiBpbiB0aGUgaW5wdXQgKi9cbiAgQE91dHB1dCgpIGZpbHRlclBocmFzZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpXG5cbiAgLyoqIEZvcndhcmQgdGV4dCBpbnB1dHMgdG8gYXBwbHkgdGhlIGZpbHRlciBmdW5jdGlvbiovXG4gIEBIb3N0TGlzdGVuZXIoJ25nZ3ZJbnB1dCcsIFsnJGV2ZW50J10pIG9uTmd2SW5wdXQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaW5wdXRWYWx1ZSQubmV4dChldmVudClcbiAgfVxuXG4gIC8qKiBIZWxwZXIgdG8gdGhlIGRldGVybWluZSBpZiB0aGUgaG9zdCBpcyBuZ2d2LWRyb2Rwb3duIG9yIG5nZ3YtaW5wdXQqL1xuICBnZXQgaG9zdElzRHJvcGRvd24oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3N0RHJvcGRvd25cbiAgfVxuXG4gIC8qKiBQcmVkZWZpbmVkIG9wdGlvbnMgKi9cbiAgZ2V0IGRlZmF1bHROdWxsaXNoT3B0aW9uKCk6IE9wdGlvbkJhc2U8YW55PiB7XG4gICAgcmV0dXJuIHsga2V5OiBudWxsLCBsYWJlbDogdGhpcy51bnNlbGVjdExhYmVsIHx8ICdcXHUwMEEwJyB9XG4gIH1cblxuICBnZXQgZW1wdHlPcHRpb24oKTogT3B0aW9uQmFzZTxhbnk+IHtcbiAgICByZXR1cm4geyBrZXk6IG51bGwsIGxhYmVsOiAnbGFiZWwubm9tYXRjaGluZ29wdGlvbnMnLCBkaXNhYmxlZDogdHJ1ZSB9XG4gIH1cblxuICAvKiogTmFtZSBvZiB0aGUgY29tcG9uZW50LiBuZ2d2LWRyb3Bkb3duIGlmIE5ndkRyb3Bkb3duQ29tcG9uZW50IG9yIG5nZ3YtaW5wdXQgaWYgTmd2SW5wdXRDb21wb25lbnQgKi9cbiAgZ2V0IGxvY2FsTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQubG9jYWxOYW1lXG4gIH1cblxuICBkcm9wZG93bkxpc3RDb21wb25lbnQhOiBDb21wb25lbnRSZWY8Tmd2VHlwZWFoZWFkRHJvcGRvd25MaXN0Q29tcG9uZW50PlxuICBpbnB1dENvbXBvbmVudCE6IENvbXBvbmVudFJlZjxOZ3ZUeXBlYWhlYWRJbnB1dENvbXBvbmVudD5cblxuICBwcml2YXRlIHR5cGVhaGVhZEZ1bmN0aW9uPzogT3BlcmF0b3JGdW5jdGlvbjxzdHJpbmcsIFRbXT5cbiAgcHJpdmF0ZSBpbnB1dFZhbHVlJCA9IG5ldyBTdWJqZWN0PGFueT4oKVxuICBwcml2YXRlIGlucHV0U3Vic2NyaXB0aW9uJD86IFN1YnNjcmlwdGlvblxuICBwcml2YXRlIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIHByaXZhdGUgaG9zdERyb3Bkb3duOiBOZ3ZEcm9wZG93bkNvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIHByaXZhdGUgaG9zdElucHV0OiBOZ3ZJbnB1dENvbXBvbmVudCxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2VzKClcbiAgICB0aGlzLmlucHV0VmFsdWUkLm5leHQoJycpXG5cbiAgICBpZiAodGhpcy5ob3N0SXNEcm9wZG93bikgdGhpcy5jcmVhdGVJbnB1dCgpXG4gICAgZWxzZSB0aGlzLmNyZWF0ZURyb3Bkb3duTGlzdCgpXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveSQubmV4dCh0cnVlKVxuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIENvcmUgZnVuY3Rpb25hbGl0eSBvZiB0eXBlYWhlYWQuIEVtaXRzIGlucHV0LCB0aGVuIGZpbHRlcnMgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgZnVuY3Rpb25cbiAgICogSWYgZGlyZWN0aXZlIGlzIGFwcGxpZWQgb24gbmdndi1pbnB1dCwgbWFudWFsbHkgc2hvdyBvciBoaWRlIG9wdGlvbnMgaW4gdGhlIGxpc3QuXG4gICAqIElmIGRpcmVjdGl2ZSBpcyBhcHBsaWVkIG9uIG5nZ3YtZHJvcGRvd24sIGxldCB0aGUgZHJvcGRvd24gaXRzZWxmIGNob29zZSB3aGVuIHRvIG9wZW4gb3IgY2xvc2VcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlSW5wdXRDaGFuZ2VzKCkge1xuICAgIHRoaXMuaW5wdXRTdWJzY3JpcHRpb24kID0gdGhpcy5pbnB1dFZhbHVlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YXAoKGlucHV0VmFsdWUpID0+IHRoaXMuZmlsdGVyUGhyYXNlQ2hhbmdlLmVtaXQoaW5wdXRWYWx1ZSkpLFxuICAgICAgICB0aGlzLnR5cGVhaGVhZEZ1bmN0aW9uID8gdGhpcy50eXBlYWhlYWRGdW5jdGlvbiA6ICgpID0+IGZyb20oW10pLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmlucHV0VmFsdWUkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtmaWx0ZXJlZFZhbHVlcywgaW5wdXRdKSA9PlxuICAgICAgICB0aGlzLnNldE9wdGlvbnMoZmlsdGVyZWRWYWx1ZXMsIGlucHV0KSxcbiAgICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQ3JlYXRlcyBhIG5nZ3YtaW5wdXQgaWYgdGhlIGhvc3QgaXRzZWxmIGlzIG5vdCBhIHRleHQtaW5wdXRcbiAgICogU2V0IHN0eWxlcyB0byBub3QgZGlzcGxheSB0aGUgaW5wdXQgd2hlbiBjbG9zZWRcbiAgICogVHJpZ2dlciBmaWx0ZXJpbmcgd2hlbiBjaGFuZ2VzIG9jY3VyIGluIHRoZSBmaWVsZFxuICAgKiAqL1xuICBwcml2YXRlIGNyZWF0ZUlucHV0KCkge1xuICAgIC8vIENyZWF0ZSB0aGUgaW5wdXQgY29tcG9uZW50XG4gICAgdGhpcy5pbnB1dENvbXBvbmVudCA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoXG4gICAgICBOZ3ZUeXBlYWhlYWRJbnB1dENvbXBvbmVudCxcbiAgICApXG4gICAgLy8gRm9yd2FyZCBuZWNlc3NhcnkgaW5mbyB0byBjb21wb25lbnRcbiAgICB0aGlzLmlucHV0Q29tcG9uZW50LnNldElucHV0KCdob3N0Q29tcG9uZW50JywgdGhpcy5ob3N0RHJvcGRvd24pXG4gICAgdGhpcy5pbnB1dENvbXBvbmVudC5zZXRJbnB1dCgnc2VsZWN0ZWRGb3JtYXR0ZXInLCB0aGlzLnNlbGVjdGVkRm9ybWF0dGVyKVxuICAgIHRoaXMuaW5wdXRDb21wb25lbnQuc2V0SW5wdXQoJ3Jlc3VsdEZvcm1hdHRlcicsIHRoaXMucmVzdWx0Rm9ybWF0dGVyKVxuICAgIC8vIExpc3RlbiB0byB2YWx1ZSBjaGFuZ2VzXG4gICAgdGhpcy5pbnB1dENvbXBvbmVudC5pbnN0YW5jZS5uZ2d2SW5wdXRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoaW5wdXRWYWx1ZSkgPT4gdGhpcy5pbnB1dFZhbHVlJC5uZXh0KGlucHV0VmFsdWUpKVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCBDcmVhdGVzIGEgbmdndi1kcm9wZG93bi1saXN0IGlmIHRoZSBob3N0IGl0c2VsZiBpcyBhIG5nZ3YtaW5wdXQgKi9cbiAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bkxpc3QoKSB7XG4gICAgdGhpcy5kcm9wZG93bkxpc3RDb21wb25lbnQgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgTmd2VHlwZWFoZWFkRHJvcGRvd25MaXN0Q29tcG9uZW50LFxuICAgIClcbiAgICB0aGlzLmRyb3Bkb3duTGlzdENvbXBvbmVudC5zZXRJbnB1dCgnaG9zdENvbXBvbmVudCcsIHRoaXMuaG9zdElucHV0KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBTZXRzIHRoZSBvcHRpb25zIHRoZSB1c2VyIGNhbiBzZWxlY3QuXG4gICAqIElmIHRoZSBob3N0IGlzIGEgbmdndi1kcm9wZG93biwgdXRpbGl6ZSB0aGUgZHJvcGRvd24gaXRzZWxmIHRvIGRpc3BsYXkgdGhlIG9wdGlvbnNcbiAgICogSWYgdGhlIGhvc3QgaXMgYSBuZ2d2LWlucHV0LCB1c2UgdGhlIGNyZWF0ZWQgbmdndi1kcm9wZG93bi1saXN0IHRvIGRpc3BsYXllIHRoZSBvcHRpb25zXG4gICAqIEBwYXJhbSBmaWx0ZXJlZFZhbHVlcyBUaGUgb3B0aW9ucyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93blxuICAgKiBAcGFyYW0gZW1wdHlJbnB1dCBJZiB0aGUgaW5wdXQgaXMgZW1wdHlcbiAgICovXG4gIHByaXZhdGUgc2V0T3B0aW9ucyhmaWx0ZXJlZFZhbHVlczogVFtdLCBpbnB1dDogc3RyaW5nKSB7XG4gICAgaWYgKCFmaWx0ZXJlZFZhbHVlcykgcmV0dXJuXG4gICAgLy8gQ29uZGl0aW9uYWxseSBhZGQgZW1wdHkgb3IgbnVsbGlzaCBvcHRpb24gaWYgaXQncyBhbGxvd2VkLCB0aGUgaW5wdXQgaXMgZW1wdHkgYW5kIGRvZXMgbm90IGFscmVhZHkgY29udGFpbiBudWxsaXNoXG4gICAgY29uc3QgYWxsb3dOdWxsaXNoID1cbiAgICAgIHRoaXMuYWxsb3dVbnNlbGVjdCAmJlxuICAgICAgIWlucHV0ICYmXG4gICAgICAhKFxuICAgICAgICBPYmplY3Qua2V5cyhmaWx0ZXJlZFZhbHVlc1swXSkuaW5jbHVkZXMoJ2tleScpICYmXG4gICAgICAgIGZpbHRlcmVkVmFsdWVzWzBdLmtleSA9PSBudWxsXG4gICAgICApXG4gICAgaWYgKGZpbHRlcmVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZmlsdGVyZWRWYWx1ZXMgPSBbdGhpcy5lbXB0eU9wdGlvbl1cbiAgICB9IGVsc2UgaWYgKGFsbG93TnVsbGlzaCkge1xuICAgICAgZmlsdGVyZWRWYWx1ZXMgPSBbdGhpcy5kZWZhdWx0TnVsbGlzaE9wdGlvbl0uY29uY2F0KGZpbHRlcmVkVmFsdWVzKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RJc0Ryb3Bkb3duKSB7XG4gICAgICAvLyBBZGQgbnVsbGlzaCBvcHRpb24gd2hlbiBubyBpbnB1dCBpcyB3cml0dGVuIChvciB3aGVuIGRyb3Bkb3duIGlzIGVwYW5kZWQgYW5kIGhhcyBhIHNlbGVjdGlvbilcbiAgICAgIHRoaXMuaG9zdERyb3Bkb3duLmFsbG93Q29udHJvbE51bGxpc2hPcHRpb24gPSBmYWxzZVxuICAgICAgdGhpcy5ob3N0RHJvcGRvd24ub3B0aW9ucyA9IHRoaXMuZm9ybWF0T3B0aW9ucyhmaWx0ZXJlZFZhbHVlcylcbiAgICAgIHRoaXMuaG9zdERyb3Bkb3duLnRleHRUb0hpZ2hsaWdodCA9IGAke2lucHV0IHx8ICcnfWBcbiAgICAgIHRoaXMuaG9zdERyb3Bkb3duLmRldGVjdENoYW5nZXMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhvc3RJc0Ryb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duTGlzdENvbXBvbmVudC5zZXRJbnB1dChcbiAgICAgICAgJ29wdGlvbnMnLFxuICAgICAgICB0aGlzLmZvcm1hdE9wdGlvbnMoZmlsdGVyZWRWYWx1ZXMpLFxuICAgICAgKVxuICAgICAgdGhpcy5kcm9wZG93bkxpc3RDb21wb25lbnQuc2V0SW5wdXQoJ3RleHRUb0hpZ2hsaWdodCcsIGAke2lucHV0IHx8ICcnfWApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBGb3JtYXRzIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93biBsaXN0XG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBzZWxlY3RlZCB2YWx1ZVxuICAgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdE9wdGlvbnMob3B0aW9uczogVFtdKTogT3B0aW9uQmFzZTxhbnk+W10ge1xuICAgIGlmICghb3B0aW9ucykgcmV0dXJuIFtdXG4gICAgaWYgKCF0aGlzLnJlc3VsdEZvcm1hdHRlcikgcmV0dXJuIG9wdGlvbnNcbiAgICByZXR1cm4gb3B0aW9ucy5tYXAoKHZhbHVlKSA9PlxuICAgICAgdmFsdWU/LmxhYmVsID8gdGhpcy5yZXN1bHRGb3JtYXR0ZXI/Lih2YWx1ZSkgOiB2YWx1ZSxcbiAgICApXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { NgvTypeaheadHighlightComponent } from './typeahead-highlight/typeahead-highlight.component';
|
|
4
|
+
import { NgvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component';
|
|
5
|
+
import { NgvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip';
|
|
6
|
+
import { NgvTypeaheadDropdownListComponent } from './typeahead-dropdown-list/typeahead-dropdown-list.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class NgvTypeaheadModule {
|
|
9
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
10
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadModule, declarations: [NgvTypeaheadHighlightComponent,
|
|
11
|
+
NgvTypeaheadInputComponent,
|
|
12
|
+
NgvTypeaheadDropdownListComponent], imports: [CommonModule, NgvTooltipModule], exports: [NgvTypeaheadHighlightComponent,
|
|
13
|
+
NgvTypeaheadInputComponent,
|
|
14
|
+
NgvTypeaheadDropdownListComponent] }); }
|
|
15
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadModule, imports: [CommonModule, NgvTooltipModule] }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTypeaheadModule, decorators: [{
|
|
18
|
+
type: NgModule,
|
|
19
|
+
args: [{
|
|
20
|
+
declarations: [
|
|
21
|
+
NgvTypeaheadHighlightComponent,
|
|
22
|
+
NgvTypeaheadInputComponent,
|
|
23
|
+
NgvTypeaheadDropdownListComponent,
|
|
24
|
+
],
|
|
25
|
+
imports: [CommonModule, NgvTooltipModule],
|
|
26
|
+
exports: [
|
|
27
|
+
NgvTypeaheadHighlightComponent,
|
|
28
|
+
NgvTypeaheadInputComponent,
|
|
29
|
+
NgvTypeaheadDropdownListComponent,
|
|
30
|
+
],
|
|
31
|
+
}]
|
|
32
|
+
}] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2Ryb3Bkb3duL3R5cGVhaGVhZC90eXBlYWhlYWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFBO0FBQ3BHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFBO0FBQ3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFBO0FBQ2hGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDZEQUE2RCxDQUFBOztBQWUvRyxNQUFNLE9BQU8sa0JBQWtCOytHQUFsQixrQkFBa0I7Z0hBQWxCLGtCQUFrQixpQkFYM0IsOEJBQThCO1lBQzlCLDBCQUEwQjtZQUMxQixpQ0FBaUMsYUFFekIsWUFBWSxFQUFFLGdCQUFnQixhQUV0Qyw4QkFBOEI7WUFDOUIsMEJBQTBCO1lBQzFCLGlDQUFpQztnSEFHeEIsa0JBQWtCLFlBUG5CLFlBQVksRUFBRSxnQkFBZ0I7OzRGQU83QixrQkFBa0I7a0JBYjlCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLDhCQUE4Qjt3QkFDOUIsMEJBQTBCO3dCQUMxQixpQ0FBaUM7cUJBQ2xDO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztvQkFDekMsT0FBTyxFQUFFO3dCQUNQLDhCQUE4Qjt3QkFDOUIsMEJBQTBCO3dCQUMxQixpQ0FBaUM7cUJBQ2xDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTmd2VHlwZWFoZWFkSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi90eXBlYWhlYWQtaGlnaGxpZ2h0L3R5cGVhaGVhZC1oaWdobGlnaHQuY29tcG9uZW50J1xuaW1wb3J0IHsgTmd2VHlwZWFoZWFkSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL3R5cGVhaGVhZC1pbnB1dC90eXBlYWhlYWQtaW5wdXQuY29tcG9uZW50J1xuaW1wb3J0IHsgTmd2VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvdG9vbHRpcCdcbmltcG9ydCB7IE5ndlR5cGVhaGVhZERyb3Bkb3duTGlzdENvbXBvbmVudCB9IGZyb20gJy4vdHlwZWFoZWFkLWRyb3Bkb3duLWxpc3QvdHlwZWFoZWFkLWRyb3Bkb3duLWxpc3QuY29tcG9uZW50J1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBOZ3ZUeXBlYWhlYWRIaWdobGlnaHRDb21wb25lbnQsXG4gICAgTmd2VHlwZWFoZWFkSW5wdXRDb21wb25lbnQsXG4gICAgTmd2VHlwZWFoZWFkRHJvcGRvd25MaXN0Q29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ3ZUb29sdGlwTW9kdWxlXSxcbiAgZXhwb3J0czogW1xuICAgIE5ndlR5cGVhaGVhZEhpZ2hsaWdodENvbXBvbmVudCxcbiAgICBOZ3ZUeXBlYWhlYWRJbnB1dENvbXBvbmVudCxcbiAgICBOZ3ZUeXBlYWhlYWREcm9wZG93bkxpc3RDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndlR5cGVhaGVhZE1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"error.fieldinputmask": "Invalid value pattern",
|
|
3
|
+
"error.fieldrequired": "Field must have content",
|
|
4
|
+
"error.fieldmaxlength": "Field content should not be longer than {{requiredLength}} characters",
|
|
5
|
+
"label.defaultlabel": "Label",
|
|
6
|
+
"label.maxlength": "characters left",
|
|
7
|
+
"label.optional": "Optional",
|
|
8
|
+
"button_cancel": "Cancel",
|
|
9
|
+
"button_apply": "Apply",
|
|
10
|
+
"button_save": "Save",
|
|
11
|
+
"text_dialogue": "You can supply the content seen here either through the <code>[content]=\"string\"</code> property or</br>by passing children between the opening and closing tags <code><c-dialog> ...children </c-dialog></code>"
|
|
12
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Inject, Injectable, isDevMode, NgModule } from '@angular/core';
|
|
2
|
+
import { delay, lastValueFrom, of } from 'rxjs';
|
|
3
|
+
import { provideTransloco, provideTranslocoMissingHandler, TRANSLOCO_TRANSPILER, TranslocoModule, } from '@ngneat/transloco';
|
|
4
|
+
import defaultLang from './i18n.json';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class NgvMissingHandler {
|
|
7
|
+
constructor(transpiler) {
|
|
8
|
+
this.transpiler = transpiler;
|
|
9
|
+
}
|
|
10
|
+
handle(key, _, params) {
|
|
11
|
+
const keyWithoutLocale = key.charAt(2) === '.' ? key.substring(3) : key;
|
|
12
|
+
const withoutScope = keyWithoutLocale.replace(/^((?:\w+)(?<!label|heading|button|alt|link|title|href|fieldhelp|error|text|image|list)(?:\.))/, '');
|
|
13
|
+
const transpiledKey = this.transpiler.transpile(defaultLang[keyWithoutLocale], params, {}, keyWithoutLocale);
|
|
14
|
+
return transpiledKey || withoutScope;
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvMissingHandler, deps: [{ token: TRANSLOCO_TRANSPILER }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
17
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvMissingHandler }); }
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvMissingHandler, decorators: [{
|
|
20
|
+
type: Injectable
|
|
21
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
22
|
+
type: Inject,
|
|
23
|
+
args: [TRANSLOCO_TRANSPILER]
|
|
24
|
+
}] }]; } });
|
|
25
|
+
const en = {
|
|
26
|
+
'error.fieldinputmask': 'Invalid value pattern',
|
|
27
|
+
'error.fieldrequired': 'Field must have content',
|
|
28
|
+
'error.fieldmaxlength': 'Field content should not be longer than {{requiredLength}} characters',
|
|
29
|
+
'label.defaultlabel': 'Label',
|
|
30
|
+
'label.maxlength': 'characters left',
|
|
31
|
+
'label.optional': 'Optional',
|
|
32
|
+
};
|
|
33
|
+
const sv = {
|
|
34
|
+
'error.fieldinputmask': 'Icke giltigt tecken mönster',
|
|
35
|
+
'error.fieldrequired': 'Fältet får inte lämnas tomt',
|
|
36
|
+
'error.fieldmaxlength': 'Fältinnehållet måste vara längre än {{requiredLength}} tecken',
|
|
37
|
+
'label.maxlength': 'tecken kvar',
|
|
38
|
+
};
|
|
39
|
+
class TranslocoInlineLoader {
|
|
40
|
+
getTranslation(lang) {
|
|
41
|
+
if (lang === 'sv') {
|
|
42
|
+
return lastValueFrom(of(sv).pipe(delay(1500)));
|
|
43
|
+
}
|
|
44
|
+
return lastValueFrom(of(en).pipe(delay(500)));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class NgvI18nModule {
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvI18nModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
49
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgvI18nModule, exports: [TranslocoModule] }); }
|
|
50
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvI18nModule, providers: [
|
|
51
|
+
provideTransloco({
|
|
52
|
+
config: {
|
|
53
|
+
availableLangs: ['en', 'sv'],
|
|
54
|
+
defaultLang: 'en',
|
|
55
|
+
// Remove this option if your application doesn't support changing language in runtime.
|
|
56
|
+
reRenderOnLangChange: true,
|
|
57
|
+
prodMode: !isDevMode(),
|
|
58
|
+
},
|
|
59
|
+
loader: TranslocoInlineLoader,
|
|
60
|
+
}),
|
|
61
|
+
provideTranslocoMissingHandler(NgvMissingHandler),
|
|
62
|
+
], imports: [TranslocoModule] }); }
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvI18nModule, decorators: [{
|
|
65
|
+
type: NgModule,
|
|
66
|
+
args: [{
|
|
67
|
+
providers: [
|
|
68
|
+
provideTransloco({
|
|
69
|
+
config: {
|
|
70
|
+
availableLangs: ['en', 'sv'],
|
|
71
|
+
defaultLang: 'en',
|
|
72
|
+
// Remove this option if your application doesn't support changing language in runtime.
|
|
73
|
+
reRenderOnLangChange: true,
|
|
74
|
+
prodMode: !isDevMode(),
|
|
75
|
+
},
|
|
76
|
+
loader: TranslocoInlineLoader,
|
|
77
|
+
}),
|
|
78
|
+
provideTranslocoMissingHandler(NgvMissingHandler),
|
|
79
|
+
],
|
|
80
|
+
exports: [TranslocoModule],
|
|
81
|
+
}]
|
|
82
|
+
}] });
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9pMThuL2kxOG4ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEUsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsOEJBQThCLEVBQzlCLG9CQUFvQixFQUlwQixlQUFlLEdBRWhCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDOztBQUd0QyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQWtELFVBQStCO1FBQS9CLGVBQVUsR0FBVixVQUFVLENBQXFCO0lBQUcsQ0FBQztJQUNyRixNQUFNLENBQUMsR0FBVyxFQUFFLENBQThCLEVBQUUsTUFBZTtRQUNqRSxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDeEUsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUMzQywrRkFBK0YsRUFDL0YsRUFBRSxDQUNILENBQUM7UUFDRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FDN0MsV0FBVyxDQUFDLGdCQUE0QyxDQUFDLEVBQ3pELE1BQU0sRUFDTixFQUFFLEVBQ0YsZ0JBQWdCLENBQ2pCLENBQUM7UUFDRixPQUFPLGFBQWEsSUFBSSxZQUFZLENBQUM7SUFDdkMsQ0FBQzsrR0FmVSxpQkFBaUIsa0JBQ1Isb0JBQW9CO21IQUQ3QixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7OzBCQUVJLE1BQU07MkJBQUMsb0JBQW9COztBQWlCMUMsTUFBTSxFQUFFLEdBQUc7SUFDVCxzQkFBc0IsRUFBRSx1QkFBdUI7SUFDL0MscUJBQXFCLEVBQUUseUJBQXlCO0lBQ2hELHNCQUFzQixFQUFFLHVFQUF1RTtJQUMvRixvQkFBb0IsRUFBRSxPQUFPO0lBQzdCLGlCQUFpQixFQUFFLGlCQUFpQjtJQUNwQyxnQkFBZ0IsRUFBRSxVQUFVO0NBQzdCLENBQUM7QUFFRixNQUFNLEVBQUUsR0FBRztJQUNULHNCQUFzQixFQUFFLDZCQUE2QjtJQUNyRCxxQkFBcUIsRUFBRSw2QkFBNkI7SUFDcEQsc0JBQXNCLEVBQUUsK0RBQStEO0lBQ3ZGLGlCQUFpQixFQUFFLGFBQWE7Q0FDakMsQ0FBQztBQUNGLE1BQU0scUJBQXFCO0lBQ3pCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixPQUFPLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7UUFDRCxPQUFPLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUNGO0FBa0JELE1BQU0sT0FBTyxhQUFhOytHQUFiLGFBQWE7Z0hBQWIsYUFBYSxZQUZkLGVBQWU7Z0hBRWQsYUFBYSxhQWZiO1lBQ1QsZ0JBQWdCLENBQUM7Z0JBQ2YsTUFBTSxFQUFFO29CQUNOLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7b0JBQzVCLFdBQVcsRUFBRSxJQUFJO29CQUNqQix1RkFBdUY7b0JBQ3ZGLG9CQUFvQixFQUFFLElBQUk7b0JBQzFCLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRTtpQkFDdkI7Z0JBQ0QsTUFBTSxFQUFFLHFCQUFxQjthQUM5QixDQUFDO1lBQ0YsOEJBQThCLENBQUMsaUJBQWlCLENBQUM7U0FDbEQsWUFDUyxlQUFlOzs0RkFFZCxhQUFhO2tCQWhCekIsUUFBUTttQkFBQztvQkFDUixTQUFTLEVBQUU7d0JBQ1QsZ0JBQWdCLENBQUM7NEJBQ2YsTUFBTSxFQUFFO2dDQUNOLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7Z0NBQzVCLFdBQVcsRUFBRSxJQUFJO2dDQUNqQix1RkFBdUY7Z0NBQ3ZGLG9CQUFvQixFQUFFLElBQUk7Z0NBQzFCLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRTs2QkFDdkI7NEJBQ0QsTUFBTSxFQUFFLHFCQUFxQjt5QkFDOUIsQ0FBQzt3QkFDRiw4QkFBOEIsQ0FBQyxpQkFBaUIsQ0FBQztxQkFDbEQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgaXNEZXZNb2RlLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBkZWxheSwgbGFzdFZhbHVlRnJvbSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgSGFzaE1hcCxcbiAgcHJvdmlkZVRyYW5zbG9jbyxcbiAgcHJvdmlkZVRyYW5zbG9jb01pc3NpbmdIYW5kbGVyLFxuICBUUkFOU0xPQ09fVFJBTlNQSUxFUixcbiAgVHJhbnNsb2NvTG9hZGVyLFxuICBUcmFuc2xvY29NaXNzaW5nSGFuZGxlcixcbiAgVHJhbnNsb2NvTWlzc2luZ0hhbmRsZXJEYXRhLFxuICBUcmFuc2xvY29Nb2R1bGUsXG4gIFRyYW5zbG9jb1RyYW5zcGlsZXIsXG59IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcblxuaW1wb3J0IGRlZmF1bHRMYW5nIGZyb20gJy4vaTE4bi5qc29uJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndk1pc3NpbmdIYW5kbGVyIGltcGxlbWVudHMgVHJhbnNsb2NvTWlzc2luZ0hhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KFRSQU5TTE9DT19UUkFOU1BJTEVSKSBwcml2YXRlIHRyYW5zcGlsZXI6IFRyYW5zbG9jb1RyYW5zcGlsZXIpIHt9XG4gIGhhbmRsZShrZXk6IHN0cmluZywgXzogVHJhbnNsb2NvTWlzc2luZ0hhbmRsZXJEYXRhLCBwYXJhbXM6IEhhc2hNYXApIHtcbiAgICBjb25zdCBrZXlXaXRob3V0TG9jYWxlID0ga2V5LmNoYXJBdCgyKSA9PT0gJy4nID8ga2V5LnN1YnN0cmluZygzKSA6IGtleTtcbiAgICBjb25zdCB3aXRob3V0U2NvcGUgPSBrZXlXaXRob3V0TG9jYWxlLnJlcGxhY2UoXG4gICAgICAvXigoPzpcXHcrKSg/PCFsYWJlbHxoZWFkaW5nfGJ1dHRvbnxhbHR8bGlua3x0aXRsZXxocmVmfGZpZWxkaGVscHxlcnJvcnx0ZXh0fGltYWdlfGxpc3QpKD86XFwuKSkvLFxuICAgICAgJycsXG4gICAgKTtcbiAgICBjb25zdCB0cmFuc3BpbGVkS2V5ID0gdGhpcy50cmFuc3BpbGVyLnRyYW5zcGlsZShcbiAgICAgIGRlZmF1bHRMYW5nW2tleVdpdGhvdXRMb2NhbGUgYXMga2V5b2YgdHlwZW9mIGRlZmF1bHRMYW5nXSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHt9LFxuICAgICAga2V5V2l0aG91dExvY2FsZSxcbiAgICApO1xuICAgIHJldHVybiB0cmFuc3BpbGVkS2V5IHx8IHdpdGhvdXRTY29wZTtcbiAgfVxufVxuXG5jb25zdCBlbiA9IHtcbiAgJ2Vycm9yLmZpZWxkaW5wdXRtYXNrJzogJ0ludmFsaWQgdmFsdWUgcGF0dGVybicsXG4gICdlcnJvci5maWVsZHJlcXVpcmVkJzogJ0ZpZWxkIG11c3QgaGF2ZSBjb250ZW50JyxcbiAgJ2Vycm9yLmZpZWxkbWF4bGVuZ3RoJzogJ0ZpZWxkIGNvbnRlbnQgc2hvdWxkIG5vdCBiZSBsb25nZXIgdGhhbiB7e3JlcXVpcmVkTGVuZ3RofX0gY2hhcmFjdGVycycsXG4gICdsYWJlbC5kZWZhdWx0bGFiZWwnOiAnTGFiZWwnLFxuICAnbGFiZWwubWF4bGVuZ3RoJzogJ2NoYXJhY3RlcnMgbGVmdCcsXG4gICdsYWJlbC5vcHRpb25hbCc6ICdPcHRpb25hbCcsXG59O1xuXG5jb25zdCBzdiA9IHtcbiAgJ2Vycm9yLmZpZWxkaW5wdXRtYXNrJzogJ0lja2UgZ2lsdGlndCB0ZWNrZW4gbcO2bnN0ZXInLFxuICAnZXJyb3IuZmllbGRyZXF1aXJlZCc6ICdGw6RsdGV0IGbDpXIgaW50ZSBsw6RtbmFzIHRvbXQnLFxuICAnZXJyb3IuZmllbGRtYXhsZW5ndGgnOiAnRsOkbHRpbm5laMOlbGxldCBtw6VzdGUgdmFyYSBsw6RuZ3JlIMOkbiB7e3JlcXVpcmVkTGVuZ3RofX0gdGVja2VuJyxcbiAgJ2xhYmVsLm1heGxlbmd0aCc6ICd0ZWNrZW4ga3ZhcicsXG59O1xuY2xhc3MgVHJhbnNsb2NvSW5saW5lTG9hZGVyIGltcGxlbWVudHMgVHJhbnNsb2NvTG9hZGVyIHtcbiAgZ2V0VHJhbnNsYXRpb24obGFuZzogc3RyaW5nKSB7XG4gICAgaWYgKGxhbmcgPT09ICdzdicpIHtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKG9mKHN2KS5waXBlKGRlbGF5KDE1MDApKSk7XG4gICAgfVxuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKG9mKGVuKS5waXBlKGRlbGF5KDUwMCkpKTtcbiAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlVHJhbnNsb2NvKHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBhdmFpbGFibGVMYW5nczogWydlbicsICdzdiddLFxuICAgICAgICBkZWZhdWx0TGFuZzogJ2VuJyxcbiAgICAgICAgLy8gUmVtb3ZlIHRoaXMgb3B0aW9uIGlmIHlvdXIgYXBwbGljYXRpb24gZG9lc24ndCBzdXBwb3J0IGNoYW5naW5nIGxhbmd1YWdlIGluIHJ1bnRpbWUuXG4gICAgICAgIHJlUmVuZGVyT25MYW5nQ2hhbmdlOiB0cnVlLFxuICAgICAgICBwcm9kTW9kZTogIWlzRGV2TW9kZSgpLFxuICAgICAgfSxcbiAgICAgIGxvYWRlcjogVHJhbnNsb2NvSW5saW5lTG9hZGVyLFxuICAgIH0pLFxuICAgIHByb3ZpZGVUcmFuc2xvY29NaXNzaW5nSGFuZGxlcihOZ3ZNaXNzaW5nSGFuZGxlciksXG4gIF0sXG4gIGV4cG9ydHM6IFtUcmFuc2xvY29Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3ZJMThuTW9kdWxlIHt9XG4iXX0=
|