@leanix/components 0.4.531 → 0.4.533
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/fesm2022/leanix-components.mjs +365 -365
- package/fesm2022/leanix-components.mjs.map +1 -1
- package/lib/core-ui/tooltip/tooltip.directive.d.ts +1 -1
- package/lib/forms-ui/components/keyboard-select.directive.d.ts +1 -1
- package/lib/forms-ui/models/base-select.directive.d.ts +1 -1
- package/lib/tab-ui/components/tab-group/tab-group.component.d.ts +1 -1
- package/package.json +10 -14
- package/esm2022/index.mjs +0 -145
- package/esm2022/leanix-components.mjs +0 -5
- package/esm2022/lib/core-ui/components/avatar/avatar.component.mjs +0 -40
- package/esm2022/lib/core-ui/components/avatar/avatar.helpers.mjs +0 -49
- package/esm2022/lib/core-ui/components/avatar/avatar.model.mjs +0 -33
- package/esm2022/lib/core-ui/components/avatar-group/avatar-group.component.mjs +0 -75
- package/esm2022/lib/core-ui/components/badge/badge.component.mjs +0 -58
- package/esm2022/lib/core-ui/components/banner/banner.component.mjs +0 -68
- package/esm2022/lib/core-ui/components/banner/banner.models.mjs +0 -12
- package/esm2022/lib/core-ui/components/button/button.component.mjs +0 -179
- package/esm2022/lib/core-ui/components/button-group/button-group.component.mjs +0 -28
- package/esm2022/lib/core-ui/components/card/card.component.mjs +0 -26
- package/esm2022/lib/core-ui/components/collapsible/collapsible.component.mjs +0 -52
- package/esm2022/lib/core-ui/components/counter/counter.component.mjs +0 -30
- package/esm2022/lib/core-ui/components/ellipsis/ellipsis.component.mjs +0 -143
- package/esm2022/lib/core-ui/components/empty-state/empty-state.component.mjs +0 -41
- package/esm2022/lib/core-ui/components/icon-scale/icon-scale.component.mjs +0 -36
- package/esm2022/lib/core-ui/components/skeleton/skeleton.component.mjs +0 -44
- package/esm2022/lib/core-ui/components/spinner/spinner.component.mjs +0 -26
- package/esm2022/lib/core-ui/components/stepper/stepper.component.mjs +0 -70
- package/esm2022/lib/core-ui/components/table/table-header/table-header.component.mjs +0 -128
- package/esm2022/lib/core-ui/components/table/table.component.mjs +0 -77
- package/esm2022/lib/core-ui/components/tiny-spinner/tiny-spinner.component.mjs +0 -14
- package/esm2022/lib/core-ui/components/tokenizer/token/token.component.mjs +0 -20
- package/esm2022/lib/core-ui/components/tokenizer/tokenizer-overflow-popover/tokenizer-overflow-popover.component.mjs +0 -44
- package/esm2022/lib/core-ui/components/tokenizer/tokenizer.component.mjs +0 -149
- package/esm2022/lib/core-ui/core-ui.constants.mjs +0 -240
- package/esm2022/lib/core-ui/core-ui.module.mjs +0 -206
- package/esm2022/lib/core-ui/directives/after-view-init.directive.mjs +0 -33
- package/esm2022/lib/core-ui/directives/autoclose-group.service.mjs +0 -39
- package/esm2022/lib/core-ui/directives/autoclose.directive.mjs +0 -43
- package/esm2022/lib/core-ui/directives/autofocus.directive.mjs +0 -36
- package/esm2022/lib/core-ui/functions/core-css.helpers.mjs +0 -52
- package/esm2022/lib/core-ui/functions/highlight-text.function.mjs +0 -80
- package/esm2022/lib/core-ui/linkify/linkify.pipe.mjs +0 -146
- package/esm2022/lib/core-ui/linkify/unlinkify.pipe.mjs +0 -51
- package/esm2022/lib/core-ui/pipes/br.pipe.mjs +0 -24
- package/esm2022/lib/core-ui/pipes/contrast-color.pipe.mjs +0 -21
- package/esm2022/lib/core-ui/pipes/custom-date.pipe.mjs +0 -28
- package/esm2022/lib/core-ui/pipes/display-avatars.pipe.mjs +0 -37
- package/esm2022/lib/core-ui/pipes/highlight-range.pipe.mjs +0 -29
- package/esm2022/lib/core-ui/pipes/highlight-term.pipe.mjs +0 -57
- package/esm2022/lib/core-ui/pipes/lx-is-uuid.pipe.mjs +0 -22
- package/esm2022/lib/core-ui/pipes/lx-time-ago.pipe.mjs +0 -29
- package/esm2022/lib/core-ui/pipes/lx-translate.pipe.mjs +0 -50
- package/esm2022/lib/core-ui/pipes/markdown.pipe.mjs +0 -32
- package/esm2022/lib/core-ui/pipes/nbsp.pipe.mjs +0 -17
- package/esm2022/lib/core-ui/pipes/sort.pipe.mjs +0 -55
- package/esm2022/lib/core-ui/pipes/translation-after.pipe.mjs +0 -29
- package/esm2022/lib/core-ui/pipes/translation-before.pipe.mjs +0 -54
- package/esm2022/lib/core-ui/pipes/translation-between.pipe.mjs +0 -68
- package/esm2022/lib/core-ui/pipes/unescape-curly-braces.pipe.mjs +0 -17
- package/esm2022/lib/core-ui/services/resize-observer.service.mjs +0 -112
- package/esm2022/lib/core-ui/tooltip/to-cdk-position.function.mjs +0 -74
- package/esm2022/lib/core-ui/tooltip/tooltip-position.interface.mjs +0 -7
- package/esm2022/lib/core-ui/tooltip/tooltip.component.mjs +0 -26
- package/esm2022/lib/core-ui/tooltip/tooltip.directive.mjs +0 -117
- package/esm2022/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +0 -139
- package/esm2022/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.mjs +0 -38
- package/esm2022/lib/forms-ui/components/breadcrumb/breadcrumb.component.mjs +0 -55
- package/esm2022/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +0 -215
- package/esm2022/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.mjs +0 -135
- package/esm2022/lib/forms-ui/components/currency/currency-input.component.mjs +0 -159
- package/esm2022/lib/forms-ui/components/currency/currency-symbol-map.constant.mjs +0 -105
- package/esm2022/lib/forms-ui/components/currency/currency-symbol.component.mjs +0 -24
- package/esm2022/lib/forms-ui/components/date-input/date-input.component.mjs +0 -347
- package/esm2022/lib/forms-ui/components/date-picker-ui/date-formatter.mjs +0 -8
- package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.mjs +0 -312
- package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +0 -20
- package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +0 -206
- package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker.config.mjs +0 -29
- package/esm2022/lib/forms-ui/components/date-picker-ui/daypicker.component.mjs +0 -319
- package/esm2022/lib/forms-ui/components/date-picker-ui/isBs3.mjs +0 -2
- package/esm2022/lib/forms-ui/components/date-picker-ui/monthpicker.component.mjs +0 -149
- package/esm2022/lib/forms-ui/components/date-picker-ui/yearpicker.component.mjs +0 -151
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/constants.mjs +0 -5
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +0 -49
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.mjs +0 -120
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.mjs +0 -39
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +0 -137
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.mjs +0 -38
- package/esm2022/lib/forms-ui/components/error-message/error-message.component.mjs +0 -16
- package/esm2022/lib/forms-ui/components/expanded-dropdown/expanded-dropdown.component.mjs +0 -26
- package/esm2022/lib/forms-ui/components/form-error/form-error.component.mjs +0 -44
- package/esm2022/lib/forms-ui/components/icon/icon.component.mjs +0 -45
- package/esm2022/lib/forms-ui/components/input/input.component.mjs +0 -48
- package/esm2022/lib/forms-ui/components/keyboard-select.directive.mjs +0 -126
- package/esm2022/lib/forms-ui/components/multi-select/multi-select-selection/multi-select-selection.component.mjs +0 -28
- package/esm2022/lib/forms-ui/components/multi-select/multi-select.component.mjs +0 -318
- package/esm2022/lib/forms-ui/components/option/option.component.mjs +0 -99
- package/esm2022/lib/forms-ui/components/option-group/option-group.component.mjs +0 -29
- package/esm2022/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.mjs +0 -123
- package/esm2022/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +0 -297
- package/esm2022/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.mjs +0 -94
- package/esm2022/lib/forms-ui/components/picker/picker-trigger.directive.mjs +0 -47
- package/esm2022/lib/forms-ui/components/picker/picker.component.mjs +0 -218
- package/esm2022/lib/forms-ui/components/picker-option/picker-option.component.mjs +0 -118
- package/esm2022/lib/forms-ui/components/pill-item/pill-item.component.mjs +0 -33
- package/esm2022/lib/forms-ui/components/pill-list/pill-list.component.mjs +0 -58
- package/esm2022/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +0 -101
- package/esm2022/lib/forms-ui/components/select-list/select-list.component.mjs +0 -178
- package/esm2022/lib/forms-ui/components/single-select/single-select.component.mjs +0 -290
- package/esm2022/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.mjs +0 -71
- package/esm2022/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.mjs +0 -21
- package/esm2022/lib/forms-ui/components/switch/switch.component.mjs +0 -51
- package/esm2022/lib/forms-ui/directives/contenteditable.directive.mjs +0 -130
- package/esm2022/lib/forms-ui/directives/form-error.directive.mjs +0 -121
- package/esm2022/lib/forms-ui/directives/form-submit.directive.mjs +0 -29
- package/esm2022/lib/forms-ui/directives/keyboard-action-source.directive.mjs +0 -63
- package/esm2022/lib/forms-ui/directives/mark-invalid.directive.mjs +0 -39
- package/esm2022/lib/forms-ui/directives/max-length-counter.directive.mjs +0 -131
- package/esm2022/lib/forms-ui/directives/select-dropdown.directive.mjs +0 -32
- package/esm2022/lib/forms-ui/directives/selectable-item.directive.mjs +0 -34
- package/esm2022/lib/forms-ui/directives/selected-option.directive.mjs +0 -27
- package/esm2022/lib/forms-ui/forms-ui.module.mjs +0 -270
- package/esm2022/lib/forms-ui/helpers/key-codes.constants.mjs +0 -13
- package/esm2022/lib/forms-ui/helpers/keyboard-navigation.helpers.mjs +0 -38
- package/esm2022/lib/forms-ui/models/base-select.directive.mjs +0 -183
- package/esm2022/lib/forms-ui/models/dropdown-item.interface.mjs +0 -2
- package/esm2022/lib/forms-ui/models/single-select-padding.interface.mjs +0 -2
- package/esm2022/lib/forms-ui/models/sorting.interface.mjs +0 -7
- package/esm2022/lib/forms-ui/pipes/filter-selection.pipe.mjs +0 -33
- package/esm2022/lib/forms-ui/pipes/filter-term.pipe.mjs +0 -29
- package/esm2022/lib/forms-ui/pipes/format-number.pipe.mjs +0 -66
- package/esm2022/lib/forms-ui/validators/date-in-foreseeable-future.validator.mjs +0 -26
- package/esm2022/lib/forms-ui/validators/string-not-in-array.validator.mjs +0 -30
- package/esm2022/lib/modal-ui/components/modal/modal.component.mjs +0 -264
- package/esm2022/lib/modal-ui/components/modal-footer/modal-footer.component.mjs +0 -16
- package/esm2022/lib/modal-ui/components/modal-header/modal-header.component.mjs +0 -19
- package/esm2022/lib/modal-ui/directives/modal-content.directive.mjs +0 -14
- package/esm2022/lib/modal-ui/modal.constants.mjs +0 -18
- package/esm2022/lib/modal-ui/modal.module.mjs +0 -47
- package/esm2022/lib/popover-ui/components/popover/popover.component.mjs +0 -228
- package/esm2022/lib/popover-ui/directives/popover-click.directive.mjs +0 -52
- package/esm2022/lib/popover-ui/directives/popover-content.directive.mjs +0 -17
- package/esm2022/lib/popover-ui/directives/popover-hover.directive.mjs +0 -88
- package/esm2022/lib/popover-ui/popover-ui.module.mjs +0 -21
- package/esm2022/lib/shared/date-helpers.mjs +0 -35
- package/esm2022/lib/shared/html-helpers.function.mjs +0 -34
- package/esm2022/lib/shared/misc-helpers.mjs +0 -24
- package/esm2022/lib/shared/observe.mjs +0 -40
- package/esm2022/lib/tab-ui/components/tab/tab.component.mjs +0 -118
- package/esm2022/lib/tab-ui/components/tab-group/tab-group-key-codes.enum.mjs +0 -12
- package/esm2022/lib/tab-ui/components/tab-group/tab-group.component.mjs +0 -150
- package/esm2022/lib/tab-ui/tab-ui.module.mjs +0 -20
- package/esm2022/ui5/icons/lx-icons.json +0 -177
- package/esm2022/ui5/icons/register-icons.mjs +0 -14
- package/esm2022/ui5/index.mjs +0 -8
- package/esm2022/ui5/leanix-components-ui5.mjs +0 -5
- package/esm2022/ui5/ui5.provider.mjs +0 -29
@@ -1,130 +0,0 @@
|
|
1
|
-
import { Directive, EventEmitter, HostListener, Input, Output, SecurityContext } from '@angular/core';
|
2
|
-
import { intersection, isNil } from 'lodash-es';
|
3
|
-
import { NbspPipe } from '../../core-ui/pipes/nbsp.pipe';
|
4
|
-
import { trimHtml } from '../../shared/html-helpers.function';
|
5
|
-
import * as i0 from "@angular/core";
|
6
|
-
import * as i1 from "@angular/platform-browser";
|
7
|
-
// First version based on https://stackoverflow.com/a/41253897/6813271
|
8
|
-
export class ContenteditableDirective {
|
9
|
-
constructor(elRef, sanitizer) {
|
10
|
-
this.elRef = elRef;
|
11
|
-
this.sanitizer = sanitizer;
|
12
|
-
this.lxContenteditableModelChange = new EventEmitter();
|
13
|
-
/** Allow (sanitized) html */
|
14
|
-
this.lxContenteditableHtml = false;
|
15
|
-
this.lxContenteditableHtmlPaste = true;
|
16
|
-
this.emittedValue = null;
|
17
|
-
}
|
18
|
-
ngOnChanges(changes) {
|
19
|
-
if (changes['lxContenteditableModel']) {
|
20
|
-
// On init: if lxContenteditableModel is empty, read from DOM in case the element has content
|
21
|
-
if (changes['lxContenteditableModel'].isFirstChange() && !this.lxContenteditableModel) {
|
22
|
-
// Prevent Exp.HasChanged: Don't read and emit value from DOM during change detection
|
23
|
-
setTimeout(() => {
|
24
|
-
this.onInput(true);
|
25
|
-
});
|
26
|
-
}
|
27
|
-
this.refreshView();
|
28
|
-
}
|
29
|
-
}
|
30
|
-
onInput(initialInlineData = false) {
|
31
|
-
let value = this.elRef.nativeElement[this.getProperty()];
|
32
|
-
value = this.cleanContent(value, initialInlineData);
|
33
|
-
this.emittedValue = value;
|
34
|
-
this.lxContenteditableModelChange.emit(value);
|
35
|
-
}
|
36
|
-
/**
|
37
|
-
* @param event {ClipboardEvent}
|
38
|
-
*/
|
39
|
-
onPaste(event) {
|
40
|
-
const clipboardEvent = event;
|
41
|
-
this.onInput();
|
42
|
-
// For text-only contenteditable, remove pasted HTML.
|
43
|
-
if (!this.lxContenteditableHtml || !this.lxContenteditableHtmlPaste) {
|
44
|
-
let isHtml = true;
|
45
|
-
// TODO: Use beforepaste event. See https://www.lucidchart.com/techblog/2014/12/02/definitive-guide-copying-pasting-javascript/.
|
46
|
-
if (clipboardEvent.clipboardData && clipboardEvent.clipboardData.types) {
|
47
|
-
const types = [].slice.apply(clipboardEvent.clipboardData.types);
|
48
|
-
isHtml = intersection(types, ['text/html', 'com.apple.webarchive']).length > 0;
|
49
|
-
}
|
50
|
-
if (isHtml) {
|
51
|
-
// 1 tick wait is required for DOM update
|
52
|
-
setTimeout(() => {
|
53
|
-
// Cursor will be lost
|
54
|
-
// The lint disabling here should be clearified. See if and how this directive is needed.
|
55
|
-
this.elRef.nativeElement.innerHTML = this.sanitizer.sanitize(SecurityContext.HTML, this.elRef.nativeElement.innerText.replace(/\n/g, '<br />'));
|
56
|
-
});
|
57
|
-
}
|
58
|
-
}
|
59
|
-
}
|
60
|
-
onDrop(event) {
|
61
|
-
this.onInput();
|
62
|
-
// For text-only contenteditable, don't allow drop content.
|
63
|
-
if (!this.lxContenteditableHtml || !this.lxContenteditableHtmlPaste) {
|
64
|
-
event.preventDefault();
|
65
|
-
event.stopPropagation();
|
66
|
-
return false;
|
67
|
-
}
|
68
|
-
return false;
|
69
|
-
}
|
70
|
-
cleanContent(value, initialInlineData = false) {
|
71
|
-
if (this.lxContenteditableHtml === 'trim' || (this.lxContenteditableHtml && initialInlineData)) {
|
72
|
-
value = trimHtml(value);
|
73
|
-
}
|
74
|
-
else if (initialInlineData && !this.lxContenteditableHtml && value) {
|
75
|
-
value = value.replace(/^[\n\s]+/, '');
|
76
|
-
value = value.replace(/[\n\s]+$/, '');
|
77
|
-
}
|
78
|
-
// Some browsers like Chrome insert nbsp; when using contentEditable attribute
|
79
|
-
return new NbspPipe().transform(value);
|
80
|
-
}
|
81
|
-
refreshView() {
|
82
|
-
if (!isNil(this.lxContenteditableModel)) {
|
83
|
-
const newContent = this.cleanContent(this.lxContenteditableModel);
|
84
|
-
// Only refresh if content changed to avoid cursor loss
|
85
|
-
// (as ngOnChanges can be triggered an additional time by onInput())
|
86
|
-
if (this.emittedValue === null || this.emittedValue !== newContent) {
|
87
|
-
this.elRef.nativeElement[this.getProperty()] = this.sanitize(newContent);
|
88
|
-
}
|
89
|
-
}
|
90
|
-
}
|
91
|
-
getProperty() {
|
92
|
-
return this.lxContenteditableHtml ? 'innerHTML' : 'innerText';
|
93
|
-
}
|
94
|
-
sanitize(content) {
|
95
|
-
return this.lxContenteditableHtml ? this.sanitizer.sanitize(SecurityContext.HTML, content) : content;
|
96
|
-
}
|
97
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ContenteditableDirective, deps: [{ token: i0.ElementRef }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Directive }); }
|
98
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: ContenteditableDirective, isStandalone: true, selector: "[lxContenteditableModel]", inputs: { lxContenteditableModel: "lxContenteditableModel", lxContenteditableHtml: "lxContenteditableHtml", lxContenteditableHtmlPaste: "lxContenteditableHtmlPaste" }, outputs: { lxContenteditableModelChange: "lxContenteditableModelChange" }, host: { listeners: { "input": "onInput()", "blur": "onInput()", "keyup": "onInput()", "paste": "onPaste($event)", "drop": "onDrop($event)" } }, usesOnChanges: true, ngImport: i0 }); }
|
99
|
-
}
|
100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ContenteditableDirective, decorators: [{
|
101
|
-
type: Directive,
|
102
|
-
args: [{
|
103
|
-
selector: '[lxContenteditableModel]',
|
104
|
-
standalone: true
|
105
|
-
}]
|
106
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DomSanitizer }], propDecorators: { lxContenteditableModel: [{
|
107
|
-
type: Input
|
108
|
-
}], lxContenteditableModelChange: [{
|
109
|
-
type: Output
|
110
|
-
}], lxContenteditableHtml: [{
|
111
|
-
type: Input
|
112
|
-
}], lxContenteditableHtmlPaste: [{
|
113
|
-
type: Input
|
114
|
-
}], onInput: [{
|
115
|
-
type: HostListener,
|
116
|
-
args: ['input']
|
117
|
-
}, {
|
118
|
-
type: HostListener,
|
119
|
-
args: ['blur']
|
120
|
-
}, {
|
121
|
-
type: HostListener,
|
122
|
-
args: ['keyup']
|
123
|
-
}], onPaste: [{
|
124
|
-
type: HostListener,
|
125
|
-
args: ['paste', ['$event']]
|
126
|
-
}], onDrop: [{
|
127
|
-
type: HostListener,
|
128
|
-
args: ['drop', ['$event']]
|
129
|
-
}] } });
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGVkaXRhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2RpcmVjdGl2ZXMvY29udGVudGVkaXRhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxlQUFlLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRTVJLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQUU5RCxzRUFBc0U7QUFLdEUsTUFBTSxPQUFPLHdCQUF3QjtJQVVuQyxZQUNVLEtBQThCLEVBQzlCLFNBQXVCO1FBRHZCLFVBQUssR0FBTCxLQUFLLENBQXlCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFUdkIsaUNBQTRCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNwRSw2QkFBNkI7UUFDcEIsMEJBQXFCLEdBQXFCLEtBQUssQ0FBQztRQUNoRCwrQkFBMEIsR0FBWSxJQUFJLENBQUM7UUFFNUMsaUJBQVksR0FBa0IsSUFBSSxDQUFDO0lBS3hDLENBQUM7SUFFSixXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO1lBQ3RDLDZGQUE2RjtZQUM3RixJQUFJLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3RGLHFGQUFxRjtnQkFDckYsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFD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TUFBTTtnQkFFRSxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQXlCTixPQUFPO3NCQUhOLFlBQVk7dUJBQUMsT0FBTzs7c0JBQ3BCLFlBQVk7dUJBQUMsTUFBTTs7c0JBQ25CLFlBQVk7dUJBQUMsT0FBTztnQkFXYyxPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF5QkMsTUFBTTtzQkFBdkMsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNlY3VyaXR5Q29udGV4dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBpbnRlcnNlY3Rpb24sIGlzTmlsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE5ic3BQaXBlIH0gZnJvbSAnLi4vLi4vY29yZS11aS9waXBlcy9uYnNwLnBpcGUnO1xuaW1wb3J0IHsgdHJpbUh0bWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvaHRtbC1oZWxwZXJzLmZ1bmN0aW9uJztcblxuLy8gRmlyc3QgdmVyc2lvbiBiYXNlZCBvbiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDEyNTM4OTcvNjgxMzI3MVxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2x4Q29udGVudGVkaXRhYmxlTW9kZWxdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50ZWRpdGFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKiogTW9kZWwgKi9cbiAgQElucHV0KCkgbHhDb250ZW50ZWRpdGFibGVNb2RlbCE6IHN0cmluZztcbiAgQE91dHB1dCgpIGx4Q29udGVudGVkaXRhYmxlTW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEFsbG93IChzYW5pdGl6ZWQpIGh0bWwgKi9cbiAgQElucHV0KCkgbHhDb250ZW50ZWRpdGFibGVIdG1sOiBib29sZWFuIHwgJ3RyaW0nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGx4Q29udGVudGVkaXRhYmxlSHRtbFBhc3RlOiBib29sZWFuID0gdHJ1ZTtcblxuICBwcml2YXRlIGVtaXR0ZWRWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydseENvbnRlbnRlZGl0YWJsZU1vZGVsJ10pIHtcbiAgICAgIC8vIE9uIGluaXQ6IGlmIGx4Q29udGVudGVkaXRhYmxlTW9kZWwgaXMgZW1wdHksIHJlYWQgZnJvbSBET00gaW4gY2FzZSB0aGUgZWxlbWVudCBoYXMgY29udGVudFxuICAgICAgaWYgKGNoYW5nZXNbJ2x4Q29udGVudGVkaXRhYmxlTW9kZWwnXS5pc0ZpcnN0Q2hhbmdlKCkgJiYgIXRoaXMubHhDb250ZW50ZWRpdGFibGVNb2RlbCkge1xuICAgICAgICAvLyBQcmV2ZW50IEV4cC5IYXNDaGFuZ2VkOiBEb24ndCByZWFkIGFuZCBlbWl0IHZhbHVlIGZyb20gRE9NIGR1cmluZyBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25JbnB1dCh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnKVxuICBvbklucHV0KGluaXRpYWxJbmxpbmVEYXRhID0gZmFsc2UpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnRbdGhpcy5nZXRQcm9wZXJ0eSgpXSBhcyBzdHJpbmc7XG4gICAgdmFsdWUgPSB0aGlzLmNsZWFuQ29udGVudCh2YWx1ZSwgaW5pdGlhbElubGluZURhdGEpO1xuICAgIHRoaXMuZW1pdHRlZFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5seENvbnRlbnRlZGl0YWJsZU1vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBldmVudCB7Q2xpcGJvYXJkRXZlbnR9XG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pIG9uUGFzdGUoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNsaXBib2FyZEV2ZW50ID0gZXZlbnQgYXMgQ2xpcGJvYXJkRXZlbnQ7XG4gICAgdGhpcy5vbklucHV0KCk7XG4gICAgLy8gRm9yIHRleHQtb25seSBjb250ZW50ZWRpdGFibGUsIHJlbW92ZSBwYXN0ZWQgSFRNTC5cbiAgICBpZiAoIXRoaXMubHhDb250ZW50ZWRpdGFibGVIdG1sIHx8ICF0aGlzLmx4Q29udGVudGVkaXRhYmxlSHRtbFBhc3RlKSB7XG4gICAgICBsZXQgaXNIdG1sOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIC8vIFRPRE86IFVzZSBiZWZvcmVwYXN0ZSBldmVudC4gU2VlIGh0dHBzOi8vd3d3Lmx1Y2lkY2hhcnQuY29tL3RlY2hibG9nLzIwMTQvMTIvMDIvZGVmaW5pdGl2ZS1ndWlkZS1jb3B5aW5nLXBhc3RpbmctamF2YXNjcmlwdC8uXG4gICAgICBpZiAoY2xpcGJvYXJkRXZlbnQuY2xpcGJvYXJkRGF0YSAmJiBjbGlwYm9hcmRFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzKSB7XG4gICAgICAgIGNvbnN0IHR5cGVzID0gW10uc2xpY2UuYXBwbHkoY2xpcGJvYXJkRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcyk7XG4gICAgICAgIGlzSHRtbCA9IGludGVyc2VjdGlvbih0eXBlcywgWyd0ZXh0L2h0bWwnLCAnY29tLmFwcGxlLndlYmFyY2hpdmUnXSkubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0h0bWwpIHtcbiAgICAgICAgLy8gMSB0aWNrIHdhaXQgaXMgcmVxdWlyZWQgZm9yIERPTSB1cGRhdGVcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gQ3Vyc29yIHdpbGwgYmUgbG9zdFxuICAgICAgICAgIC8vIFRoZSBsaW50IGRpc2FibGluZyBoZXJlIHNob3VsZCBiZSBjbGVhcmlmaWVkLiBTZWUgaWYgYW5kIGhvdyB0aGlzIGRpcmVjdGl2ZSBpcyBuZWVkZWQuXG4gICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuc2FuaXRpemVyLnNhbml0aXplKFxuICAgICAgICAgICAgU2VjdXJpdHlDb250ZXh0LkhUTUwsXG4gICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0LnJlcGxhY2UoL1xcbi9nLCAnPGJyIC8+JylcbiAgICAgICAgICApITtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pIG9uRHJvcChldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMub25JbnB1dCgpO1xuICAgIC8vIEZvciB0ZXh0LW9ubHkgY29udGVudGVkaXRhYmxlLCBkb24ndCBhbGxvdyBkcm9wIGNvbnRlbnQuXG4gICAgaWYgKCF0aGlzLmx4Q29udGVudGVkaXRhYmxlSHRtbCB8fCAhdGhpcy5seENvbnRlbnRlZGl0YWJsZUh0bWxQYXN0ZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5Db250ZW50KHZhbHVlOiBzdHJpbmcsIGluaXRpYWxJbmxpbmVEYXRhID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmx4Q29udGVudGVkaXRhYmxlSHRtbCA9PT0gJ3RyaW0nIHx8ICh0aGlzLmx4Q29udGVudGVkaXRhYmxlSHRtbCAmJiBpbml0aWFsSW5saW5lRGF0YSkpIHtcbiAgICAgIHZhbHVlID0gdHJpbUh0bWwodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaW5pdGlhbElubGluZURhdGEgJiYgIXRoaXMubHhDb250ZW50ZWRpdGFibGVIdG1sICYmIHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15bXFxuXFxzXSsvLCAnJyk7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1tcXG5cXHNdKyQvLCAnJyk7XG4gICAgfVxuICAgIC8vIFNvbWUgYnJvd3NlcnMgbGlrZSBDaHJvbWUgaW5zZXJ0IG5ic3A7IHdoZW4gdXNpbmcgY29udGVudEVkaXRhYmxlIGF0dHJpYnV0ZVxuICAgIHJldHVybiBuZXcgTmJzcFBpcGUoKS50cmFuc2Zvcm0odmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoVmlldygpIHtcbiAgICBpZiAoIWlzTmlsKHRoaXMubHhDb250ZW50ZWRpdGFibGVNb2RlbCkpIHtcbiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSB0aGlzLmNsZWFuQ29udGVudCh0aGlzLmx4Q29udGVudGVkaXRhYmxlTW9kZWwpO1xuICAgICAgLy8gT25seSByZWZyZXNoIGlmIGNvbnRlbnQgY2hhbmdlZCB0byBhdm9pZCBjdXJzb3IgbG9zc1xuICAgICAgLy8gKGFzIG5nT25DaGFuZ2VzIGNhbiBiZSB0cmlnZ2VyZWQgYW4gYWRkaXRpb25hbCB0aW1lIGJ5IG9uSW5wdXQoKSlcbiAgICAgIGlmICh0aGlzLmVtaXR0ZWRWYWx1ZSA9PT0gbnVsbCB8fCB0aGlzLmVtaXR0ZWRWYWx1ZSAhPT0gbmV3Q29udGVudCkge1xuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnRbdGhpcy5nZXRQcm9wZXJ0eSgpXSA9IHRoaXMuc2FuaXRpemUobmV3Q29udGVudCkhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvcGVydHkoKTogJ2lubmVySFRNTCcgfCAnaW5uZXJUZXh0JyB7XG4gICAgcmV0dXJuIHRoaXMubHhDb250ZW50ZWRpdGFibGVIdG1sID8gJ2lubmVySFRNTCcgOiAnaW5uZXJUZXh0JztcbiAgfVxuXG4gIHByaXZhdGUgc2FuaXRpemUoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubHhDb250ZW50ZWRpdGFibGVIdG1sID8gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGNvbnRlbnQpIDogY29udGVudDtcbiAgfVxufVxuIl19
|
@@ -1,121 +0,0 @@
|
|
1
|
-
import { Directive, Host, Inject, InjectionToken, Input, Optional, Self } from '@angular/core';
|
2
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
3
|
-
import { curry } from 'lodash-es';
|
4
|
-
import { combineLatest, of } from 'rxjs';
|
5
|
-
import { map, startWith } from 'rxjs/operators';
|
6
|
-
import { ErrorMessageComponent } from '../components/error-message/error-message.component';
|
7
|
-
import * as i0 from "@angular/core";
|
8
|
-
import * as i1 from "@ngx-translate/core";
|
9
|
-
import * as i2 from "@angular/forms";
|
10
|
-
import * as i3 from "./form-submit.directive";
|
11
|
-
export const FORM_CONTROL_ERROR_NAMESPACE = new InjectionToken('FORM_CONTROL_ERROR_NAMESPACE');
|
12
|
-
export const FORM_CONTROL_ERROR_DISPLAY_STRATEGY = new InjectionToken('FORM_CONTROL_ERROR_DISPLAY_STRATEGY');
|
13
|
-
export const provideFormControlErrorNamespace = (namespace) => ({
|
14
|
-
provide: FORM_CONTROL_ERROR_NAMESPACE,
|
15
|
-
useValue: namespace
|
16
|
-
});
|
17
|
-
export const provideFormControlErrorDisplayStrategy = (fn) => ({
|
18
|
-
provide: FORM_CONTROL_ERROR_DISPLAY_STRATEGY,
|
19
|
-
useValue: fn
|
20
|
-
});
|
21
|
-
export class FormErrorDirective {
|
22
|
-
get control() {
|
23
|
-
return this.ngControl?.control || this.ctrl || null;
|
24
|
-
}
|
25
|
-
get name() {
|
26
|
-
return this.ngControl?.name || this.controlName;
|
27
|
-
}
|
28
|
-
get formSubmitted() {
|
29
|
-
return this.formSubmitDirective ? this.formSubmitDirective.submitted$ : of(undefined);
|
30
|
-
}
|
31
|
-
constructor(viewContainer, componentFactoryResolver, translateService, destroyRef, ngControl, formSubmitDirective, namespace, strategy) {
|
32
|
-
this.viewContainer = viewContainer;
|
33
|
-
this.componentFactoryResolver = componentFactoryResolver;
|
34
|
-
this.translateService = translateService;
|
35
|
-
this.destroyRef = destroyRef;
|
36
|
-
this.ngControl = ngControl;
|
37
|
-
this.formSubmitDirective = formSubmitDirective;
|
38
|
-
this.namespace = namespace;
|
39
|
-
this.strategy = strategy;
|
40
|
-
}
|
41
|
-
ngOnInit() {
|
42
|
-
const control = this.control;
|
43
|
-
if (isAbstractControl(control)) {
|
44
|
-
combineLatest([control.valueChanges.pipe(startWith(control.value)), this.formSubmitted])
|
45
|
-
.pipe(map(([, submitted]) => submitted), map(resolveStrategy(this.strategy, control)), takeUntilDestroyed(this.destroyRef))
|
46
|
-
.subscribe((display) => {
|
47
|
-
const { errors } = control;
|
48
|
-
if (errors && display) {
|
49
|
-
const firstErrorKey = Object.keys(errors)[0];
|
50
|
-
const translationKey = this.buildTranslationKey(firstErrorKey);
|
51
|
-
this.setError(translationKey);
|
52
|
-
}
|
53
|
-
else if (this.ref) {
|
54
|
-
this.setError();
|
55
|
-
}
|
56
|
-
});
|
57
|
-
}
|
58
|
-
}
|
59
|
-
buildTranslationKey(errorKey) {
|
60
|
-
if (this.control) {
|
61
|
-
return `${this.namespace || 'form'}.errors.${this.name ? `${this.name}.` : ''}${errorKey}`;
|
62
|
-
}
|
63
|
-
else {
|
64
|
-
return '';
|
65
|
-
}
|
66
|
-
}
|
67
|
-
setError(key) {
|
68
|
-
if (!this.ref) {
|
69
|
-
const factory = this.componentFactoryResolver.resolveComponentFactory(ErrorMessageComponent);
|
70
|
-
this.ref = this.viewContainer.createComponent(factory);
|
71
|
-
}
|
72
|
-
if (key) {
|
73
|
-
this.translateService
|
74
|
-
.get(key)
|
75
|
-
.pipe(takeUntilDestroyed(this.destroyRef))
|
76
|
-
.subscribe((message) => {
|
77
|
-
if (this.ref) {
|
78
|
-
this.ref.instance.dynamicErrorMessage.set(message);
|
79
|
-
}
|
80
|
-
});
|
81
|
-
}
|
82
|
-
else {
|
83
|
-
this.ref.instance.dynamicErrorMessage.set('');
|
84
|
-
}
|
85
|
-
}
|
86
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FormErrorDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }, { token: i1.TranslateService }, { token: i0.DestroyRef }, { token: i2.NgControl, optional: true, self: true }, { token: i3.FormSubmitDirective, host: true, optional: true }, { token: FORM_CONTROL_ERROR_NAMESPACE, optional: true }, { token: FORM_CONTROL_ERROR_DISPLAY_STRATEGY, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
87
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: FormErrorDirective, isStandalone: true, selector: "[lxFormError]", inputs: { ctrl: ["lxFormError", "ctrl"], controlName: "controlName" }, ngImport: i0 }); }
|
88
|
-
}
|
89
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FormErrorDirective, decorators: [{
|
90
|
-
type: Directive,
|
91
|
-
args: [{
|
92
|
-
selector: '[lxFormError]',
|
93
|
-
standalone: true
|
94
|
-
}]
|
95
|
-
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }, { type: i1.TranslateService }, { type: i0.DestroyRef }, { type: i2.NgControl, decorators: [{
|
96
|
-
type: Optional
|
97
|
-
}, {
|
98
|
-
type: Self
|
99
|
-
}] }, { type: i3.FormSubmitDirective, decorators: [{
|
100
|
-
type: Optional
|
101
|
-
}, {
|
102
|
-
type: Host
|
103
|
-
}] }, { type: undefined, decorators: [{
|
104
|
-
type: Optional
|
105
|
-
}, {
|
106
|
-
type: Inject,
|
107
|
-
args: [FORM_CONTROL_ERROR_NAMESPACE]
|
108
|
-
}] }, { type: undefined, decorators: [{
|
109
|
-
type: Optional
|
110
|
-
}, {
|
111
|
-
type: Inject,
|
112
|
-
args: [FORM_CONTROL_ERROR_DISPLAY_STRATEGY]
|
113
|
-
}] }], propDecorators: { ctrl: [{
|
114
|
-
type: Input,
|
115
|
-
args: ['lxFormError']
|
116
|
-
}], controlName: [{
|
117
|
-
type: Input
|
118
|
-
}] } });
|
119
|
-
const isAbstractControl = (ctrl) => !!ctrl;
|
120
|
-
const resolveStrategy = curry((strategy, control, submitted) => strategy ? strategy({ control, submitted }) : true);
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9kaXJlY3RpdmVzL2Zvcm0tZXJyb3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxTQUFTLEVBQ1QsSUFBSSxFQUNKLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUVMLFFBQVEsRUFDUixJQUFJLEVBRUwsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHaEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQWMsYUFBYSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7OztBQUs1RixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBUyw4QkFBOEIsQ0FBQyxDQUFDO0FBQ3ZHLE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHLElBQUksY0FBYyxDQUNuRSxxQ0FBcUMsQ0FDdEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RSxPQUFPLEVBQUUsNEJBQTRCO0lBQ3JDLFFBQVEsRUFBRSxTQUFTO0NBQ3BCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLENBQUMsRUFBbUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RixPQUFPLEVBQUUsbUNBQW1DO0lBQzVDLFFBQVEsRUFBRSxFQUFFO0NBQ2IsQ0FBQyxD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O3NCQUFuQixLQUFLOztBQTRFUixNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBd0MsRUFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDeEcsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUMzQixDQUFDLFFBQXFELEVBQUUsT0FBd0IsRUFBRSxTQUE4QixFQUFFLEVBQUUsQ0FDbEgsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb21wb25lbnRSZWYsXG4gIERlc3Ryb3lSZWYsXG4gIERpcmVjdGl2ZSxcbiAgSG9zdCxcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNlbGYsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGN1cnJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZXJyb3ItbWVzc2FnZS9lcnJvci1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtU3VibWl0RGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLXN1Ym1pdC5kaXJlY3RpdmUnO1xuXG5leHBvcnQgdHlwZSBGb3JtQ29udHJvbEVycm9yRGlzcGxheVN0cmF0ZWd5ID0gKG9iajogeyBjb250cm9sOiBBYnN0cmFjdENvbnRyb2w7IHN1Ym1pdHRlZD86IGJvb2xlYW4gfSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGNvbnN0IEZPUk1fQ09OVFJPTF9FUlJPUl9OQU1FU1BBQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignRk9STV9DT05UUk9MX0VSUk9SX05BTUVTUEFDRScpO1xuZXhwb3J0IGNvbnN0IEZPUk1fQ09OVFJPTF9FUlJPUl9ESVNQTEFZX1NUUkFURUdZID0gbmV3IEluamVjdGlvblRva2VuPEZvcm1Db250cm9sRXJyb3JEaXNwbGF5U3RyYXRlZ3k+KFxuICAnRk9STV9DT05UUk9MX0VSUk9SX0RJU1BMQVlfU1RSQVRFR1knXG4pO1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZUZvcm1Db250cm9sRXJyb3JOYW1lc3BhY2UgPSAobmFtZXNwYWNlOiBzdHJpbmcpID0+ICh7XG4gIHByb3ZpZGU6IEZPUk1fQ09OVFJPTF9FUlJPUl9OQU1FU1BBQ0UsXG4gIHVzZVZhbHVlOiBuYW1lc3BhY2Vcbn0pO1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZUZvcm1Db250cm9sRXJyb3JEaXNwbGF5U3RyYXRlZ3kgPSAoZm46IEZvcm1Db250cm9sRXJyb3JEaXNwbGF5U3RyYXRlZ3kpID0+ICh7XG4gIHByb3ZpZGU6IEZPUk1fQ09OVFJPTF9FUlJPUl9ESVNQTEFZX1NUUkFURUdZLFxuICB1c2VWYWx1ZTogZm5cbn0pO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbHhGb3JtRXJyb3JdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRXJyb3JEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ2x4Rm9ybUVycm9yJykgY3RybD86IEFic3RyYWN0Q29udHJvbCB8ICcnO1xuICBASW5wdXQoKSBjb250cm9sTmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSByZWY/OiBDb21wb25lbnRSZWY8RXJyb3JNZXNzYWdlQ29tcG9uZW50PjtcblxuICBwcml2YXRlIGdldCBjb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm5nQ29udHJvbD8uY29udHJvbCB8fCB0aGlzLmN0cmwgfHwgbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IG5hbWUoKTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubmdDb250cm9sPy5uYW1lIHx8IHRoaXMuY29udHJvbE5hbWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBmb3JtU3VibWl0dGVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdWJtaXREaXJlY3RpdmUgPyB0aGlzLmZvcm1TdWJtaXREaXJlY3RpdmUuc3VibWl0dGVkJCA6IG9mKHVuZGVmaW5lZCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJpdmF0ZSBuZ0NvbnRyb2w/OiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBwcml2YXRlIGZvcm1TdWJtaXREaXJlY3RpdmU/OiBGb3JtU3VibWl0RGlyZWN0aXZlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRk9STV9DT05UUk9MX0VSUk9SX05BTUVTUEFDRSkgcHJpdmF0ZSBuYW1lc3BhY2U/OiBzdHJpbmcsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGT1JNX0NPTlRST0xfRVJST1JfRElTUExBWV9TVFJBVEVHWSkgcHJpdmF0ZSBzdHJhdGVneT86IEZvcm1Db250cm9sRXJyb3JEaXNwbGF5U3RyYXRlZ3lcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2w7XG4gICAgaWYgKGlzQWJzdHJhY3RDb250cm9sKGNvbnRyb2wpKSB7XG4gICAgICBjb21iaW5lTGF0ZXN0KFtjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSksIHRoaXMuZm9ybVN1Ym1pdHRlZF0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoWywgc3VibWl0dGVkXSkgPT4gc3VibWl0dGVkKSxcbiAgICAgICAgICBtYXAocmVzb2x2ZVN0cmF0ZWd5KHRoaXMuc3RyYXRlZ3ksIGNvbnRyb2wpKSxcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGRpc3BsYXkpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVycm9ycyB9ID0gY29udHJvbDtcbiAgICAgICAgICBpZiAoZXJyb3JzICYmIGRpc3BsYXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RXJyb3JLZXkgPSBPYmplY3Qua2V5cyhlcnJvcnMpWzBdO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25LZXkgPSB0aGlzLmJ1aWxkVHJhbnNsYXRpb25LZXkoZmlyc3RFcnJvcktleSEpO1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcih0cmFuc2xhdGlvbktleSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlZikge1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRyYW5zbGF0aW9uS2V5KGVycm9yS2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5uYW1lc3BhY2UgfHwgJ2Zvcm0nfS5lcnJvcnMuJHt0aGlzLm5hbWUgPyBgJHt0aGlzLm5hbWV9LmAgOiAnJ30ke2Vycm9yS2V5fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEVycm9yKGtleT86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5yZWYpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShFcnJvck1lc3NhZ2VDb21wb25lbnQpO1xuICAgICAgdGhpcy5yZWYgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xuICAgIH1cbiAgICBpZiAoa2V5KSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgLmdldChrZXkpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAuc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMucmVmKSB7XG4gICAgICAgICAgICB0aGlzLnJlZi5pbnN0YW5jZS5keW5hbWljRXJyb3JNZXNzYWdlLnNldChtZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZi5pbnN0YW5jZS5keW5hbWljRXJyb3JNZXNzYWdlLnNldCgnJyk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGlzQWJzdHJhY3RDb250cm9sID0gKGN0cmw6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpOiBjdHJsIGlzIEFic3RyYWN0Q29udHJvbCA9PiAhIWN0cmw7XG5jb25zdCByZXNvbHZlU3RyYXRlZ3kgPSBjdXJyeShcbiAgKHN0cmF0ZWd5OiBGb3JtQ29udHJvbEVycm9yRGlzcGxheVN0cmF0ZWd5IHwgdW5kZWZpbmVkLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHN1Ym1pdHRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT5cbiAgICBzdHJhdGVneSA/IHN0cmF0ZWd5KHsgY29udHJvbCwgc3VibWl0dGVkIH0pIDogdHJ1ZVxuKTtcbiJdfQ==
|
@@ -1,29 +0,0 @@
|
|
1
|
-
import { Directive } from '@angular/core';
|
2
|
-
import { BehaviorSubject, fromEvent } from 'rxjs';
|
3
|
-
import { take } from 'rxjs/operators';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
export class FormSubmitDirective {
|
6
|
-
constructor(elementRef) {
|
7
|
-
this.elementRef = elementRef;
|
8
|
-
this.submitted$ = new BehaviorSubject(false);
|
9
|
-
this.subscription = fromEvent(this.elementRef.nativeElement, 'submit')
|
10
|
-
.pipe(take(1))
|
11
|
-
.subscribe(() => this.submitted$.next(true));
|
12
|
-
}
|
13
|
-
ngOnDestroy() {
|
14
|
-
if (this.subscription) {
|
15
|
-
this.subscription.unsubscribe();
|
16
|
-
}
|
17
|
-
}
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FormSubmitDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
19
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: FormSubmitDirective, isStandalone: true, selector: "form", ngImport: i0 }); }
|
20
|
-
}
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FormSubmitDirective, decorators: [{
|
22
|
-
type: Directive,
|
23
|
-
args: [{
|
24
|
-
// eslint-disable-next-line @angular-eslint/directive-selector
|
25
|
-
selector: 'form',
|
26
|
-
standalone: true
|
27
|
-
}]
|
28
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zdWJtaXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvZGlyZWN0aXZlcy9mb3JtLXN1Ym1pdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFPdEMsTUFBTSxPQUFPLG1CQUFtQjtJQUk5QixZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBSDFDLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUl0QyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7YUFDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQzs4R0FkVSxtQkFBbUI7a0dBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFML0IsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxNQUFNO29CQUNoQixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRm9ybVN1Ym1pdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHN1Ym1pdHRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3N1Ym1pdCcpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN1Ym1pdHRlZCQubmV4dCh0cnVlKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
@@ -1,63 +0,0 @@
|
|
1
|
-
import { Directive } from '@angular/core';
|
2
|
-
import { Subject, fromEvent } from 'rxjs';
|
3
|
-
import { filter, map, takeUntil } from 'rxjs/operators';
|
4
|
-
import { KeyboardSelectAction } from '../components/keyboard-select.directive';
|
5
|
-
import { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, END, ENTER, ESCAPE, HOME, TAB } from '../helpers/key-codes.constants';
|
6
|
-
import * as i0 from "@angular/core";
|
7
|
-
export class KeyboardActionSourceDirective {
|
8
|
-
constructor(element) {
|
9
|
-
this.element = element;
|
10
|
-
this.dontEmit = false;
|
11
|
-
this.destroyed$ = new Subject();
|
12
|
-
this.keyboardActions$ = fromEvent(this.element.nativeElement, 'keydown').pipe(filter((_event) => !this.dontEmit), map((event) => {
|
13
|
-
switch (event.keyCode) {
|
14
|
-
case ARROW_UP:
|
15
|
-
event.preventDefault();
|
16
|
-
return KeyboardSelectAction.PREV;
|
17
|
-
case ARROW_DOWN:
|
18
|
-
event.preventDefault();
|
19
|
-
return KeyboardSelectAction.NEXT;
|
20
|
-
case ARROW_LEFT:
|
21
|
-
event.preventDefault();
|
22
|
-
return KeyboardSelectAction.LEFT;
|
23
|
-
case ARROW_RIGHT:
|
24
|
-
event.preventDefault();
|
25
|
-
return KeyboardSelectAction.RIGHT;
|
26
|
-
case HOME:
|
27
|
-
event.preventDefault();
|
28
|
-
return KeyboardSelectAction.FIRST;
|
29
|
-
case END:
|
30
|
-
event.preventDefault();
|
31
|
-
return KeyboardSelectAction.LAST;
|
32
|
-
case ENTER:
|
33
|
-
event.preventDefault();
|
34
|
-
return KeyboardSelectAction.EXECUTE;
|
35
|
-
case ESCAPE:
|
36
|
-
case TAB:
|
37
|
-
return KeyboardSelectAction.CLOSE;
|
38
|
-
default:
|
39
|
-
return null;
|
40
|
-
}
|
41
|
-
}), takeUntil(this.destroyed$));
|
42
|
-
}
|
43
|
-
blur() {
|
44
|
-
this.element.nativeElement.blur();
|
45
|
-
}
|
46
|
-
ngOnDestroy() {
|
47
|
-
this.destroyed$.next();
|
48
|
-
}
|
49
|
-
nativeElement() {
|
50
|
-
return this.element?.nativeElement;
|
51
|
-
}
|
52
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KeyboardActionSourceDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
53
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: KeyboardActionSourceDirective, isStandalone: true, selector: "[lxKeyboardActionSource]", exportAs: ["keyboardActionSource"], ngImport: i0 }); }
|
54
|
-
}
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: KeyboardActionSourceDirective, decorators: [{
|
56
|
-
type: Directive,
|
57
|
-
args: [{
|
58
|
-
exportAs: 'keyboardActionSource',
|
59
|
-
selector: '[lxKeyboardActionSource]',
|
60
|
-
standalone: true
|
61
|
-
}]
|
62
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtYWN0aW9uLXNvdXJjZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9kaXJlY3RpdmVzL2tleWJvYXJkLWFjdGlvbi1zb3VyY2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQU85SCxNQUFNLE9BQU8sNkJBQTZCO0lBd0N4QyxZQUFvQixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQXZDN0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVmLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRW5DLHFCQUFnQixHQUFHLFNBQVMsQ0FBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUM1RixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUNsQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLFFBQVEsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN0QixLQUFLLFFBQVE7b0JBQ1gsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixPQUFPLG9CQUFvQixDQUFDLElBQUksQ0FBQztnQkFDbkMsS0FBSyxVQUFVO29CQUNiLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLEtBQUssVUFBVTtvQkFDYixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUNuQyxLQUFLLFdBQVc7b0JBQ2QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixPQUFPLG9CQUFvQixDQUFDLEtBQUssQ0FBQztnQkFDcEMsS0FBSyxJQUFJO29CQUNQLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BDLEtBQUssR0FBRztvQkFDTixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUNuQyxLQUFLLEtBQUs7b0JBQ1IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixPQUFPLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztnQkFDdEMsS0FBSyxNQUFNLENBQUM7Z0JBQ1osS0FBSyxHQUFHO29CQUNOLE9BQU8sb0JBQW9CLENBQUMsS0FBSyxDQUFDO2dCQUNwQztvQkFDRSxPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0IsQ0FBQztJQUVxRCxDQUFDO0lBRXhELElBQUk7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDO0lBQ3JDLENBQUM7OEdBcERVLDZCQUE2QjtrR0FBN0IsNkJBQTZCOzsyRkFBN0IsNkJBQTZCO2tCQUx6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBLZXlib2FyZFNlbGVjdEFjdGlvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMva2V5Ym9hcmQtc2VsZWN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgQVJST1dfVVAsIEVORCwgRU5URVIsIEVTQ0FQRSwgSE9NRSwgVEFCIH0gZnJvbSAnLi4vaGVscGVycy9rZXktY29kZXMuY29uc3RhbnRzJztcblxuQERpcmVjdGl2ZSh7XG4gIGV4cG9ydEFzOiAna2V5Ym9hcmRBY3Rpb25Tb3VyY2UnLFxuICBzZWxlY3RvcjogJ1tseEtleWJvYXJkQWN0aW9uU291cmNlXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgS2V5Ym9hcmRBY3Rpb25Tb3VyY2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgZG9udEVtaXQgPSBmYWxzZTtcblxuICByZWFkb25seSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwdWJsaWMga2V5Ym9hcmRBY3Rpb25zJCA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nKS5waXBlKFxuICAgIGZpbHRlcigoX2V2ZW50KSA9PiAhdGhpcy5kb250RW1pdCksXG4gICAgbWFwKChldmVudCkgPT4ge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm4gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uUFJFVjtcbiAgICAgICAgY2FzZSBBUlJPV19ET1dOOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuIEtleWJvYXJkU2VsZWN0QWN0aW9uLk5FWFQ7XG4gICAgICAgIGNhc2UgQVJST1dfTEVGVDpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVybiBLZXlib2FyZFNlbGVjdEFjdGlvbi5MRUZUO1xuICAgICAgICBjYXNlIEFSUk9XX1JJR0hUOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuIEtleWJvYXJkU2VsZWN0QWN0aW9uLlJJR0hUO1xuICAgICAgICBjYXNlIEhPTUU6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm4gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uRklSU1Q7XG4gICAgICAgIGNhc2UgRU5EOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuIEtleWJvYXJkU2VsZWN0QWN0aW9uLkxBU1Q7XG4gICAgICAgIGNhc2UgRU5URVI6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm4gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uRVhFQ1VURTtcbiAgICAgICAgY2FzZSBFU0NBUEU6XG4gICAgICAgIGNhc2UgVEFCOlxuICAgICAgICAgIHJldHVybiBLZXlib2FyZFNlbGVjdEFjdGlvbi5DTE9TRTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgYmx1cigpIHtcbiAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG5cbiAgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudDtcbiAgfVxufVxuIl19
|
@@ -1,39 +0,0 @@
|
|
1
|
-
import { __decorate } from "tslib";
|
2
|
-
import { Directive, Input } from '@angular/core';
|
3
|
-
import { Subject } from 'rxjs';
|
4
|
-
import { takeUntil } from 'rxjs/operators';
|
5
|
-
import { getCssVariable } from '../../shared/misc-helpers';
|
6
|
-
import { Observe } from '../../shared/observe';
|
7
|
-
import * as i0 from "@angular/core";
|
8
|
-
export class MarkInvalidDirective {
|
9
|
-
constructor(element, renderer) {
|
10
|
-
this.element = element;
|
11
|
-
this.renderer = renderer;
|
12
|
-
this.lxMarkInvalid = false;
|
13
|
-
this.destroyed$ = new Subject();
|
14
|
-
}
|
15
|
-
ngOnInit() {
|
16
|
-
this.lxMarkInvalid$.pipe(takeUntil(this.destroyed$)).subscribe((invalid) => {
|
17
|
-
const border = invalid ? `1px solid ${getCssVariable('--lx-color-danger')}` : '';
|
18
|
-
this.renderer.setStyle(this.element.nativeElement, 'border', border);
|
19
|
-
});
|
20
|
-
}
|
21
|
-
ngOnDestroy() {
|
22
|
-
this.destroyed$.next();
|
23
|
-
}
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MarkInvalidDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
25
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: MarkInvalidDirective, isStandalone: true, selector: "[lxMarkInvalid]", inputs: { lxMarkInvalid: "lxMarkInvalid" }, ngImport: i0 }); }
|
26
|
-
}
|
27
|
-
__decorate([
|
28
|
-
Observe('lxMarkInvalid')
|
29
|
-
], MarkInvalidDirective.prototype, "lxMarkInvalid$", void 0);
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MarkInvalidDirective, decorators: [{
|
31
|
-
type: Directive,
|
32
|
-
args: [{
|
33
|
-
selector: '[lxMarkInvalid]',
|
34
|
-
standalone: true
|
35
|
-
}]
|
36
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { lxMarkInvalid: [{
|
37
|
-
type: Input
|
38
|
-
}], lxMarkInvalid$: [] } });
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay1pbnZhbGlkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2RpcmVjdGl2ZXMvbWFyay1pbnZhbGlkLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQWdDLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBTS9DLE1BQU0sT0FBTyxvQkFBb0I7SUFNL0IsWUFDVSxPQUFnQyxFQUNoQyxRQUFtQjtRQURuQixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBUHBCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBRy9CLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBS3ZDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3pFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxjQUFjLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBcEJVLG9CQUFvQjtrR0FBcEIsb0JBQW9COztBQUVMO0lBQXpCLE9BQU8sQ0FBQyxlQUFlLENBQUM7NERBQXNDOzJGQUZwRCxvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3VHQUVVLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ29CLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBnZXRDc3NWYXJpYWJsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9taXNjLWhlbHBlcnMnO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2x4TWFya0ludmFsaWRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBNYXJrSW52YWxpZERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgbHhNYXJrSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBAT2JzZXJ2ZSgnbHhNYXJrSW52YWxpZCcpIGx4TWFya0ludmFsaWQkITogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICByZWFkb25seSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5seE1hcmtJbnZhbGlkJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKGludmFsaWQpID0+IHtcbiAgICAgIGNvbnN0IGJvcmRlciA9IGludmFsaWQgPyBgMXB4IHNvbGlkICR7Z2V0Q3NzVmFyaWFibGUoJy0tbHgtY29sb3ItZGFuZ2VyJyl9YCA6ICcnO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2JvcmRlcicsIGJvcmRlcik7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG59XG4iXX0=
|
@@ -1,131 +0,0 @@
|
|
1
|
-
import { Directive, Input, Self } from '@angular/core';
|
2
|
-
import { FormControl, Validators } from '@angular/forms';
|
3
|
-
import { Subject } from 'rxjs';
|
4
|
-
import { takeUntil } from 'rxjs/operators';
|
5
|
-
import * as i0 from "@angular/core";
|
6
|
-
import * as i1 from "@angular/forms";
|
7
|
-
export class MaxLengthCounterDirective {
|
8
|
-
constructor(el, renderer, ngControl) {
|
9
|
-
this.el = el;
|
10
|
-
this.renderer = renderer;
|
11
|
-
this.ngControl = ngControl;
|
12
|
-
this.lxMaxLengthCounter = null;
|
13
|
-
this.counterElement = null;
|
14
|
-
this.destroy$ = new Subject();
|
15
|
-
}
|
16
|
-
ngOnInit() {
|
17
|
-
this.setupMaxLengthValidation();
|
18
|
-
this.connectCounter();
|
19
|
-
this.updateCounter();
|
20
|
-
this.subscribeToValueChanges();
|
21
|
-
this.setupInputRestriction();
|
22
|
-
this.checkForInitialOversize();
|
23
|
-
}
|
24
|
-
ngOnDestroy() {
|
25
|
-
this.destroy$.next();
|
26
|
-
this.destroy$.complete();
|
27
|
-
}
|
28
|
-
setupMaxLengthValidation() {
|
29
|
-
const maxLength = this.getMaxLength();
|
30
|
-
const control = this.ngControl.control;
|
31
|
-
if (maxLength !== null && control) {
|
32
|
-
const validators = control.validator ? [control.validator, Validators.maxLength(maxLength)] : Validators.maxLength(maxLength);
|
33
|
-
control.setValidators(validators);
|
34
|
-
control.updateValueAndValidity();
|
35
|
-
}
|
36
|
-
}
|
37
|
-
getMaxLength() {
|
38
|
-
if (this.lxMaxLengthCounter) {
|
39
|
-
return this.lxMaxLengthCounter;
|
40
|
-
}
|
41
|
-
const control = this.ngControl.control;
|
42
|
-
const validatorFn = control?.validator;
|
43
|
-
const errors = validatorFn?.(new FormControl({ length: Infinity }));
|
44
|
-
const requiredLength = errors?.['maxlength']['requiredLength'];
|
45
|
-
this.lxMaxLengthCounter = requiredLength ? requiredLength.toString() : null;
|
46
|
-
if (this.lxMaxLengthCounter === null) {
|
47
|
-
console.warn('lxMaxLength directive is used without a value or a control with a maxLength validator');
|
48
|
-
}
|
49
|
-
return requiredLength;
|
50
|
-
}
|
51
|
-
connectCounter() {
|
52
|
-
this.el.nativeElement.classList.add('lx-max-length-counter-input');
|
53
|
-
if (this.lxMaxLengthCounterRef) {
|
54
|
-
this.counterElement = this.lxMaxLengthCounterRef;
|
55
|
-
}
|
56
|
-
else {
|
57
|
-
this.createCounter();
|
58
|
-
}
|
59
|
-
}
|
60
|
-
createCounter() {
|
61
|
-
this.counterElement = this.renderer.createElement('span');
|
62
|
-
this.renderer.addClass(this.counterElement, 'lx-max-length-counter');
|
63
|
-
const nextSibling = this.el.nativeElement.nextSibling;
|
64
|
-
if (nextSibling) {
|
65
|
-
this.renderer.insertBefore(this.el.nativeElement.parentNode, this.counterElement, nextSibling);
|
66
|
-
}
|
67
|
-
else {
|
68
|
-
this.renderer.appendChild(this.el.nativeElement.parentNode, this.counterElement);
|
69
|
-
}
|
70
|
-
this.destroy$.subscribe(() => {
|
71
|
-
this.renderer.removeChild(this.el.nativeElement.parentNode, this.counterElement);
|
72
|
-
});
|
73
|
-
}
|
74
|
-
updateCounter() {
|
75
|
-
if (this.counterElement) {
|
76
|
-
const currentLength = this.ngControl.value ? this.ngControl.value.length : 0;
|
77
|
-
const maxLength = this.getMaxLength();
|
78
|
-
this.renderer.setProperty(this.counterElement, 'textContent', `${currentLength} / ${maxLength}`);
|
79
|
-
}
|
80
|
-
}
|
81
|
-
subscribeToValueChanges() {
|
82
|
-
const control = this.ngControl.control;
|
83
|
-
if (control) {
|
84
|
-
control.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {
|
85
|
-
this.updateCounter();
|
86
|
-
});
|
87
|
-
}
|
88
|
-
}
|
89
|
-
setupInputRestriction() {
|
90
|
-
const maxLength = this.getMaxLength();
|
91
|
-
if (maxLength !== null) {
|
92
|
-
this.renderer.listen(this.el.nativeElement, 'beforeinput', (event) => {
|
93
|
-
const input = event.target;
|
94
|
-
const selectionStart = input.selectionStart || 0;
|
95
|
-
const selectionEnd = input.selectionEnd || 0;
|
96
|
-
const newValue = input.value.slice(0, selectionStart) + (event.data || '') + input.value.slice(selectionEnd);
|
97
|
-
// Prevent input if the new value exceeds the max length and grows
|
98
|
-
if (newValue.length > maxLength && newValue.length > input.value.length) {
|
99
|
-
event.preventDefault();
|
100
|
-
}
|
101
|
-
});
|
102
|
-
this.renderer.listen(this.el.nativeElement, 'input', () => {
|
103
|
-
this.updateCounter();
|
104
|
-
});
|
105
|
-
}
|
106
|
-
}
|
107
|
-
checkForInitialOversize() {
|
108
|
-
const maxLength = this.getMaxLength();
|
109
|
-
const value = this.ngControl.value;
|
110
|
-
if (maxLength !== null && value && value.length > maxLength) {
|
111
|
-
this.ngControl.control?.markAsDirty({ onlySelf: true });
|
112
|
-
this.ngControl.control?.updateValueAndValidity({ onlySelf: true });
|
113
|
-
}
|
114
|
-
}
|
115
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MaxLengthCounterDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.NgControl, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
116
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: MaxLengthCounterDirective, isStandalone: true, selector: "[lxMaxLengthCounter]", inputs: { lxMaxLengthCounter: "lxMaxLengthCounter", lxMaxLengthCounterRef: "lxMaxLengthCounterRef" }, ngImport: i0 }); }
|
117
|
-
}
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MaxLengthCounterDirective, decorators: [{
|
119
|
-
type: Directive,
|
120
|
-
args: [{
|
121
|
-
selector: '[lxMaxLengthCounter]',
|
122
|
-
standalone: true
|
123
|
-
}]
|
124
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.NgControl, decorators: [{
|
125
|
-
type: Self
|
126
|
-
}] }], propDecorators: { lxMaxLengthCounter: [{
|
127
|
-
type: Input
|
128
|
-
}], lxMaxLengthCounterRef: [{
|
129
|
-
type: Input
|
130
|
-
}] } });
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4LWxlbmd0aC1jb3VudGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2RpcmVjdGl2ZXMvbWF4LWxlbmd0aC1jb3VudGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBZ0MsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU0zQyxNQUFNLE9BQU8seUJBQXlCO0lBT3BDLFlBQ1UsRUFBYyxFQUNkLFFBQW1CLEVBQ1gsU0FBb0I7UUFGNUIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDWCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBVDdCLHVCQUFrQixHQUFrQixJQUFJLENBQUM7UUFFMUMsbUJBQWMsR0FBdUIsSUFBSSxDQUFDO1FBRTFDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBTXBDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUV2QyxJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7WUFDbEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5SCxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ2pDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLFdBQVcsR0FBRyxPQUFPLEVBQUUsU0FBUyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLGNBQWMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVFLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUZBQXVGLENBQUMsQ0FBQztRQUN4RyxDQUFDO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDbkQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUN0RCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pHLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLEdBQUcsYUFBYSxNQUFNLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkcsQ0FBQztJQUNILENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNqRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLENBQUMsS0FBaUIsRUFBRSxFQUFFO2dCQUMvRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztnQkFDL0MsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUU3RyxrRUFBa0U7Z0JBQ2xFLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFTLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN4RSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBQ08sdUJBQXVCO1FBQzdCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQzs4R0F4SFUseUJBQXlCO2tHQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBSnJDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFXSSxJQUFJO3lDQVRFLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTmdDb250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbHhNYXhMZW5ndGhDb3VudGVyXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTWF4TGVuZ3RoQ291bnRlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgbHhNYXhMZW5ndGhDb3VudGVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbHhNYXhMZW5ndGhDb3VudGVyUmVmPzogSFRNTFNwYW5FbGVtZW50O1xuICBwcml2YXRlIGNvdW50ZXJFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBTZWxmKCkgcHJpdmF0ZSBuZ0NvbnRyb2w6IE5nQ29udHJvbFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXR1cE1heExlbmd0aFZhbGlkYXRpb24oKTtcbiAgICB0aGlzLmNvbm5lY3RDb3VudGVyKCk7XG4gICAgdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1ZhbHVlQ2hhbmdlcygpO1xuICAgIHRoaXMuc2V0dXBJbnB1dFJlc3RyaWN0aW9uKCk7XG4gICAgdGhpcy5jaGVja0ZvckluaXRpYWxPdmVyc2l6ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE1heExlbmd0aFZhbGlkYXRpb24oKSB7XG4gICAgY29uc3QgbWF4TGVuZ3RoID0gdGhpcy5nZXRNYXhMZW5ndGgoKTtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbDtcblxuICAgIGlmIChtYXhMZW5ndGggIT09IG51bGwgJiYgY29udHJvbCkge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IGNvbnRyb2wudmFsaWRhdG9yID8gW2NvbnRyb2wudmFsaWRhdG9yLCBWYWxpZGF0b3JzLm1heExlbmd0aChtYXhMZW5ndGgpXSA6IFZhbGlkYXRvcnMubWF4TGVuZ3RoKG1heExlbmd0aCk7XG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1heExlbmd0aCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAodGhpcy5seE1heExlbmd0aENvdW50ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmx4TWF4TGVuZ3RoQ291bnRlcjtcbiAgICB9XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w7XG4gICAgY29uc3QgdmFsaWRhdG9yRm4gPSBjb250cm9sPy52YWxpZGF0b3I7XG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdG9yRm4/LihuZXcgRm9ybUNvbnRyb2woeyBsZW5ndGg6IEluZmluaXR5IH0pKTtcbiAgICBjb25zdCByZXF1aXJlZExlbmd0aCA9IGVycm9ycz8uWydtYXhsZW5ndGgnXVsncmVxdWlyZWRMZW5ndGgnXTtcbiAgICB0aGlzLmx4TWF4TGVuZ3RoQ291bnRlciA9IHJlcXVpcmVkTGVuZ3RoID8gcmVxdWlyZWRMZW5ndGgudG9TdHJpbmcoKSA6IG51bGw7XG4gICAgaWYgKHRoaXMubHhNYXhMZW5ndGhDb3VudGVyID09PSBudWxsKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2x4TWF4TGVuZ3RoIGRpcmVjdGl2ZSBpcyB1c2VkIHdpdGhvdXQgYSB2YWx1ZSBvciBhIGNvbnRyb2wgd2l0aCBhIG1heExlbmd0aCB2YWxpZGF0b3InKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcXVpcmVkTGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25uZWN0Q291bnRlcigpIHtcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbHgtbWF4LWxlbmd0aC1jb3VudGVyLWlucHV0Jyk7XG4gICAgaWYgKHRoaXMubHhNYXhMZW5ndGhDb3VudGVyUmVmKSB7XG4gICAgICB0aGlzLmNvdW50ZXJFbGVtZW50ID0gdGhpcy5seE1heExlbmd0aENvdW50ZXJSZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlQ291bnRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ291bnRlcigpIHtcbiAgICB0aGlzLmNvdW50ZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmNvdW50ZXJFbGVtZW50LCAnbHgtbWF4LWxlbmd0aC1jb3VudGVyJyk7XG4gICAgY29uc3QgbmV4dFNpYmxpbmcgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQubmV4dFNpYmxpbmc7XG4gICAgaWYgKG5leHRTaWJsaW5nKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZSwgdGhpcy5jb3VudGVyRWxlbWVudCwgbmV4dFNpYmxpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLCB0aGlzLmNvdW50ZXJFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5kZXN0cm95JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZSwgdGhpcy5jb3VudGVyRWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvdW50ZXIoKSB7XG4gICAgaWYgKHRoaXMuY291bnRlckVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMZW5ndGggPSB0aGlzLm5nQ29udHJvbC52YWx1ZSA/IHRoaXMubmdDb250cm9sLnZhbHVlLmxlbmd0aCA6IDA7XG4gICAgICBjb25zdCBtYXhMZW5ndGggPSB0aGlzLmdldE1heExlbmd0aCgpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmNvdW50ZXJFbGVtZW50LCAndGV4dENvbnRlbnQnLCBgJHtjdXJyZW50TGVuZ3RofSAvICR7bWF4TGVuZ3RofWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9WYWx1ZUNoYW5nZXMoKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvdW50ZXIoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBJbnB1dFJlc3RyaWN0aW9uKCkge1xuICAgIGNvbnN0IG1heExlbmd0aCA9IHRoaXMuZ2V0TWF4TGVuZ3RoKCk7XG4gICAgaWYgKG1heExlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnYmVmb3JlaW5wdXQnLCAoZXZlbnQ6IElucHV0RXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25TdGFydCB8fCAwO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25FbmQgPSBpbnB1dC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBpbnB1dC52YWx1ZS5zbGljZSgwLCBzZWxlY3Rpb25TdGFydCkgKyAoZXZlbnQuZGF0YSB8fCAnJykgKyBpbnB1dC52YWx1ZS5zbGljZShzZWxlY3Rpb25FbmQpO1xuXG4gICAgICAgIC8vIFByZXZlbnQgaW5wdXQgaWYgdGhlIG5ldyB2YWx1ZSBleGNlZWRzIHRoZSBtYXggbGVuZ3RoIGFuZCBncm93c1xuICAgICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoICYmIG5ld1ZhbHVlLmxlbmd0aCA+IGlucHV0LnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdpbnB1dCcsICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjaGVja0ZvckluaXRpYWxPdmVyc2l6ZSgpIHtcbiAgICBjb25zdCBtYXhMZW5ndGggPSB0aGlzLmdldE1heExlbmd0aCgpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5uZ0NvbnRyb2wudmFsdWU7XG4gICAgaWYgKG1heExlbmd0aCAhPT0gbnVsbCAmJiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2w/Lm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|