@muraai/mnl-form 0.0.1-alpha-db495b1 → 0.0.1-alpha-6116399

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/fesm2022/muraai-mnl-form.mjs +150 -143
  2. package/fesm2022/muraai-mnl-form.mjs.map +1 -1
  3. package/lib/types/upload-file.d.ts +1 -1
  4. package/lib/workflow-status/ workflow-status.module.d.ts +8 -8
  5. package/lib/workflow-status/workflow-status.component.d.ts +1 -1
  6. package/package.json +4 -5
  7. package/esm2022/lib/confirmation-dialog/confirmation-dialog.component.mjs +0 -34
  8. package/esm2022/lib/mnl-form/mnl-form-standalone.module.mjs +0 -155
  9. package/esm2022/lib/mnl-form/mnl-form.component.mjs +0 -199
  10. package/esm2022/lib/models/custom-form-field.model.mjs +0 -2
  11. package/esm2022/lib/models/workflow-status.model.mjs +0 -2
  12. package/esm2022/lib/services/graphql.service.mjs +0 -30
  13. package/esm2022/lib/services/scoring.service.mjs +0 -103
  14. package/esm2022/lib/types/action-button-renderer.component.mjs +0 -59
  15. package/esm2022/lib/types/autocomplete-type.component.mjs +0 -68
  16. package/esm2022/lib/types/button.type.mjs +0 -72
  17. package/esm2022/lib/types/comments.type.mjs +0 -102
  18. package/esm2022/lib/types/country-code-input.type.mjs +0 -181
  19. package/esm2022/lib/types/custom-date.type.mjs +0 -20
  20. package/esm2022/lib/types/custom-input.component.mjs +0 -62
  21. package/esm2022/lib/types/date-format.type.mjs +0 -196
  22. package/esm2022/lib/types/expansion-panel.types.mjs +0 -85
  23. package/esm2022/lib/types/formly-field-panel.type.mjs +0 -70
  24. package/esm2022/lib/types/grid-actionable.type.mjs +0 -197
  25. package/esm2022/lib/types/grid-formly-cell.component.mjs +0 -42
  26. package/esm2022/lib/types/grid.type.mjs +0 -125
  27. package/esm2022/lib/types/input.type.mjs +0 -43
  28. package/esm2022/lib/types/mu-helper-text.type.mjs +0 -331
  29. package/esm2022/lib/types/multi-select-autocomplete.mjs +0 -139
  30. package/esm2022/lib/types/multi-select-checkbox.component.mjs +0 -247
  31. package/esm2022/lib/types/radio.type.mjs +0 -71
  32. package/esm2022/lib/types/scrollable-tabs.types.mjs +0 -220
  33. package/esm2022/lib/types/select-api-auto-complete.component.mjs +0 -111
  34. package/esm2022/lib/types/select-autocomplete-redefined.component.mjs +0 -142
  35. package/esm2022/lib/types/select-autocomplete.type.mjs +0 -254
  36. package/esm2022/lib/types/stepper.type.mjs +0 -268
  37. package/esm2022/lib/types/table.types.mjs +0 -79
  38. package/esm2022/lib/types/tabs.types.mjs +0 -293
  39. package/esm2022/lib/types/tabular-form-dialog.component.mjs +0 -331
  40. package/esm2022/lib/types/tabular-form.type.mjs +0 -641
  41. package/esm2022/lib/types/upload-file.mjs +0 -524
  42. package/esm2022/lib/types/view-file-dialog.component.mjs +0 -90
  43. package/esm2022/lib/utils/formly.utils.mjs +0 -105
  44. package/esm2022/lib/validators/custom-email-validator.mjs +0 -18
  45. package/esm2022/lib/validators/ein-validators.mjs +0 -11
  46. package/esm2022/lib/validators/gst-validator.mjs +0 -11
  47. package/esm2022/lib/validators/normal-email-validator.mjs +0 -17
  48. package/esm2022/lib/validators/npi-validator.mjs +0 -11
  49. package/esm2022/lib/validators/pan-validator.mjs +0 -11
  50. package/esm2022/lib/validators/phone-number-validator.mjs +0 -22
  51. package/esm2022/lib/validators/select-validator.mjs +0 -7
  52. package/esm2022/lib/validators/tinSsn-validator.mjs +0 -12
  53. package/esm2022/lib/workflow-status/ workflow-status.module.mjs +0 -52
  54. package/esm2022/lib/workflow-status/workflow-status.component.mjs +0 -70
  55. package/esm2022/lib/wrappers/form-field-description-wrapper.component.mjs +0 -44
  56. package/esm2022/lib/wrappers/form-field-wrapper.component.mjs +0 -34
  57. package/esm2022/lib/wrappers/formly-wrapper-with-old-value.component.mjs +0 -140
  58. package/esm2022/lib/wrappers/prefix-suffix-wrapper.component.mjs +0 -95
  59. package/esm2022/lib/wrappers/prefix-sufix-extension.component.mjs +0 -9
  60. package/esm2022/muraai-mnl-form.mjs +0 -5
  61. package/esm2022/public-api.mjs +0 -12
@@ -1,111 +0,0 @@
1
- import { CommonModule } from "@angular/common";
2
- import { Component } from "@angular/core";
3
- import { FormsModule, ReactiveFormsModule } from "@angular/forms";
4
- import { MatAutocompleteModule } from "@angular/material/autocomplete";
5
- import { MatOptionModule } from "@angular/material/core";
6
- import { MatFormFieldModule } from "@angular/material/form-field";
7
- import { MatInputModule } from "@angular/material/input";
8
- import { MatTooltipModule } from "@angular/material/tooltip";
9
- import { FormlyModule } from "@ngx-formly/core";
10
- import { FieldType } from "@ngx-formly/material";
11
- import { debounceTime, map, of, startWith, switchMap } from "rxjs";
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "../services/graphql.service";
14
- import * as i2 from "@angular/common";
15
- import * as i3 from "@angular/material/tooltip";
16
- import * as i4 from "@angular/forms";
17
- import * as i5 from "@angular/material/core";
18
- import * as i6 from "@angular/material/autocomplete";
19
- import * as i7 from "@angular/material/input";
20
- import * as i8 from "@angular/material/form-field";
21
- export class SelectApiAutoCompleteComponent extends FieldType {
22
- get control() {
23
- return this.formControl;
24
- }
25
- constructor(graphqlService, changedetecref) {
26
- super();
27
- this.graphqlService = graphqlService;
28
- this.changedetecref = changedetecref;
29
- this.displayValue = '';
30
- }
31
- ngOnInit() {
32
- this.formControl.valueChanges.pipe(startWith(''), debounceTime(200), switchMap((fieldValue) => {
33
- if (this.field.model[this.field.gqlQuery?.variableKey || '']) {
34
- let gqqlVariables = { ...this.field?.gqlQuery?.variables };
35
- Object.keys(gqqlVariables).forEach((key) => {
36
- gqqlVariables[key] = this.field.model[this.field.gqlQuery?.variableKey || ''];
37
- if (key === this.field.gqlQuery?.searchKey) {
38
- gqqlVariables[key] = fieldValue;
39
- }
40
- });
41
- return this.graphqlService.executeQuery(this.field.gqlQuery?.query || '', gqqlVariables);
42
- }
43
- return of({});
44
- }), map((queryRes) => queryRes?.data?.[this.field.gqlQuery?.responseKey || '']?.rows?.map((rowResp) => {
45
- return {
46
- label: rowResp[this.field.gqlQuery?.optionsLabel || ''],
47
- value: rowResp[this.field.gqlQuery?.optionsValue || ''],
48
- };
49
- }) || [])).subscribe((updatedRes) => {
50
- this.filteredOptions = of(updatedRes);
51
- this.changedetecref.detectChanges();
52
- });
53
- }
54
- validateInput() {
55
- const currentValue = this.control.value;
56
- if (this.filteredOptions) {
57
- this.filteredOptions.subscribe(validOptions => {
58
- const isValid = validOptions.some(option => option.value === currentValue);
59
- if (!isValid) {
60
- this.control.setValue('');
61
- }
62
- });
63
- }
64
- }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectApiAutoCompleteComponent, deps: [{ token: i1.GraphQLService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
66
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SelectApiAutoCompleteComponent, isStandalone: true, selector: "mu-temp-auto-complete", usesInheritance: true, ngImport: i0, template: `
67
- <mat-form-field class="w-full" appearance="outline">
68
- <mat-label>{{ props.label }}</mat-label>
69
- <input matInput
70
- [matAutocomplete]="auto"
71
- [formControl]="control"
72
- [matTooltip]="props['tooltip'] || ''"
73
- [required]="props.required || false"
74
- [readonly]="props.readonly"
75
- [placeholder]="props.placeholder || ''"
76
- (blur)="validateInput()">
77
- <mat-autocomplete #auto="matAutocomplete">
78
- @for (option of filteredOptions | async; track option) {
79
- <mat-option [value]="option.value">{{option.label}}</mat-option>
80
- }
81
- </mat-autocomplete>
82
- </mat-form-field>
83
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: FormlyModule }] }); }
84
- }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectApiAutoCompleteComponent, decorators: [{
86
- type: Component,
87
- args: [{
88
- selector: 'mu-temp-auto-complete',
89
- standalone: true,
90
- imports: [CommonModule, MatTooltipModule, ReactiveFormsModule, MatOptionModule, FormsModule, MatAutocompleteModule, MatInputModule, MatFormFieldModule, FormlyModule],
91
- template: `
92
- <mat-form-field class="w-full" appearance="outline">
93
- <mat-label>{{ props.label }}</mat-label>
94
- <input matInput
95
- [matAutocomplete]="auto"
96
- [formControl]="control"
97
- [matTooltip]="props['tooltip'] || ''"
98
- [required]="props.required || false"
99
- [readonly]="props.readonly"
100
- [placeholder]="props.placeholder || ''"
101
- (blur)="validateInput()">
102
- <mat-autocomplete #auto="matAutocomplete">
103
- @for (option of filteredOptions | async; track option) {
104
- <mat-option [value]="option.value">{{option.label}}</mat-option>
105
- }
106
- </mat-autocomplete>
107
- </mat-form-field>
108
- `,
109
- }]
110
- }], ctorParameters: () => [{ type: i1.GraphQLService }, { type: i0.ChangeDetectorRef }] });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWFwaS1hdXRvLWNvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZm9ybS9zcmMvbGliL3R5cGVzL3NlbGVjdC1hcGktYXV0by1jb21wbGV0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBcUIsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBZSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUEyQi9FLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxTQUFrQztJQUdyRixJQUFJLE9BQU87UUFDVixPQUFPLElBQUksQ0FBQyxXQUEwQixDQUFDO0lBQ3hDLENBQUM7SUFDRCxZQUFvQixjQUE4QixFQUFVLGNBQWlDO1FBQzVGLEtBQUssRUFBRSxDQUFDO1FBRFcsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FB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QUE5Qiw4QkFBOEIsd0dBbkJoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQlQsMkRBbEJTLFlBQVksbUZBQUUsZ0JBQWdCLDRUQUFFLG1CQUFtQixzeUJBQUUsZUFBZSwrTEFBRSxXQUFXLDhCQUFFLHFCQUFxQix1ckJBQUUsY0FBYyxzbkJBQUUsa0JBQWtCLDhCQUFFLFlBQVk7OzRGQW9CeEosOEJBQThCO2tCQXZCMUMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQztvQkFDckssUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCVDtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGVcIjtcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZFwiO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXRcIjtcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xuaW1wb3J0IHsgRm9ybWx5TW9kdWxlIH0gZnJvbSBcIkBuZ3gtZm9ybWx5L2NvcmVcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gXCJAbmd4LWZvcm1seS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDdXN0b21Gb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvY3VzdG9tLWZvcm0tZmllbGQubW9kZWxcIjtcbmltcG9ydCB7IEdyYXBoUUxTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2dyYXBocWwuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdtdS10ZW1wLWF1dG8tY29tcGxldGUnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBNYXRPcHRpb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBNYXRBdXRvY29tcGxldGVNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRGb3JtRmllbGRNb2R1bGUsIEZvcm1seU1vZHVsZV0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy1mdWxsXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cblx0XHRcdDxtYXQtbGFiZWw+e3sgcHJvcHMubGFiZWwgfX08L21hdC1sYWJlbD5cblx0XHRcdDxpbnB1dCBtYXRJbnB1dFxuXHRcdFx0XHRbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuXHRcdFx0XHRbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG5cdFx0XHRcdFttYXRUb29sdGlwXT1cInByb3BzWyd0b29sdGlwJ10gfHwgJydcIlxuXHRcdFx0XHRbcmVxdWlyZWRdPVwicHJvcHMucmVxdWlyZWQgfHwgZmFsc2VcIlxuXHRcdFx0XHRbcmVhZG9ubHldPVwicHJvcHMucmVhZG9ubHlcIlxuXHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwicHJvcHMucGxhY2Vob2xkZXIgfHwgJydcIlxuXHRcdFx0XHQoYmx1cik9XCJ2YWxpZGF0ZUlucHV0KClcIj5cbiAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCI+XG5cdFx0XHRcdEBmb3IgKG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luYzsgdHJhY2sgb3B0aW9uKSB7XG5cdFx0XHRcdFx0PG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7b3B0aW9uLmxhYmVsfX08L21hdC1vcHRpb24+XG5cdFx0XHRcdH1cbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXHRgLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RBcGlBdXRvQ29tcGxldGVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8Q3VzdG9tRm9ybWx5RmllbGRDb25maWc+IGltcGxlbWVudHMgT25Jbml0IHtcblx0ZmlsdGVyZWRPcHRpb25zITogT2JzZXJ2YWJsZTxhbnlbXT47XG5cdGRpc3BsYXlWYWx1ZSA9ICcnO1xuXHRnZXQgY29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG5cdFx0cmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wgYXMgRm9ybUNvbnRyb2w7XG5cdH1cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBncmFwaHFsU2VydmljZTogR3JhcGhRTFNlcnZpY2UsIHByaXZhdGUgY2hhbmdlZGV0ZWNyZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG5cdFx0XHRzdGFydFdpdGgoJycpLFxuXHRcdFx0ZGVib3VuY2VUaW1lKDIwMCksXG5cdFx0XHRzd2l0Y2hNYXAoKGZpZWxkVmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmllbGQubW9kZWxbdGhpcy5maWVsZC5ncWxRdWVyeT8udmFyaWFibGVLZXkgfHwgJyddKSB7XG5cdFx0XHRcdFx0bGV0IGdxcWxWYXJpYWJsZXMgPSB7IC4uLnRoaXMuZmllbGQ/LmdxbFF1ZXJ5Py52YXJpYWJsZXMgfTtcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhncXFsVmFyaWFibGVzKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdFx0XHRcdGdxcWxWYXJpYWJsZXNba2V5XSA9IHRoaXMuZmllbGQubW9kZWxbdGhpcy5maWVsZC5ncWxRdWVyeT8udmFyaWFibGVLZXkgfHwgJyddO1xuXHRcdFx0XHRcdFx0aWYgKGtleSA9PT0gdGhpcy5maWVsZC5ncWxRdWVyeT8uc2VhcmNoS2V5KSB7XG5cdFx0XHRcdFx0XHRcdGdxcWxWYXJpYWJsZXNba2V5XSA9IGZpZWxkVmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ3JhcGhxbFNlcnZpY2UuZXhlY3V0ZVF1ZXJ5KFxuXHRcdFx0XHRcdFx0dGhpcy5maWVsZC5ncWxRdWVyeT8ucXVlcnkgfHwgJycsXG5cdFx0XHRcdFx0XHRncXFsVmFyaWFibGVzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb2Yoe30pO1xuXHRcdFx0fSksXG5cdFx0XHRtYXAoKHF1ZXJ5UmVzKSA9PiBxdWVyeVJlcz8uZGF0YT8uW3RoaXMuZmllbGQuZ3FsUXVlcnk/LnJlc3BvbnNlS2V5IHx8ICcnXT8ucm93cz8ubWFwKChyb3dSZXNwOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRsYWJlbDogcm93UmVzcFt0aGlzLmZpZWxkLmdxbFF1ZXJ5Py5vcHRpb25zTGFiZWwgfHwgJyddLFxuXHRcdFx0XHRcdHZhbHVlOiByb3dSZXNwW3RoaXMuZmllbGQuZ3FsUXVlcnk/Lm9wdGlvbnNWYWx1ZSB8fCAnJ10sXG5cdFx0XHRcdH07XG5cdFx0XHR9KSB8fCBbXSksXG5cdFx0KS5zdWJzY3JpYmUoKHVwZGF0ZWRSZXMpID0+IHtcblx0XHRcdHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb2YodXBkYXRlZFJlcyk7XG5cdFx0XHR0aGlzLmNoYW5nZWRldGVjcmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHR9KTtcblx0fVxuXG5cdHZhbGlkYXRlSW5wdXQoKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlO1xuXHRcdGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucykge1xuXHRcdCAgdGhpcy5maWx0ZXJlZE9wdGlvbnMuc3Vic2NyaWJlKHZhbGlkT3B0aW9ucyA9PiB7XG5cdFx0XHRjb25zdCBpc1ZhbGlkID0gdmFsaWRPcHRpb25zLnNvbWUob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gY3VycmVudFZhbHVlKTtcblx0XHRcdGlmICghaXNWYWxpZCkge1xuXHRcdFx0ICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoJycpO1xuXHRcdFx0fVxuXHRcdCAgfSk7XG5cdFx0fVxuXHQgIH1cbn1cbiJdfQ==
@@ -1,142 +0,0 @@
1
- import { Component, ChangeDetectionStrategy, ViewChild, } from '@angular/core';
2
- import { FieldType, FormlyModule } from '@ngx-formly/core';
3
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
- import { combineLatest, of } from 'rxjs';
5
- import { map, startWith } from 'rxjs/operators';
6
- import { CommonModule } from '@angular/common';
7
- import { CommonsModule } from '@muraai/mnl-commons';
8
- import { TranslateModule } from '@ngx-translate/core';
9
- import { MatCheckboxModule } from '@angular/material/checkbox';
10
- import { MatFormFieldModule } from '@angular/material/form-field';
11
- import { MatAutocompleteModule, MatAutocompleteTrigger, } from '@angular/material/autocomplete';
12
- import { MatInputModule } from '@angular/material/input';
13
- import { MatChipsModule } from '@angular/material/chips';
14
- import { MatIconModule } from '@angular/material/icon';
15
- import { MatButtonModule } from '@angular/material/button';
16
- import * as i0 from "@angular/core";
17
- import * as i1 from "@angular/common";
18
- import * as i2 from "@angular/material/input";
19
- import * as i3 from "@angular/material/form-field";
20
- import * as i4 from "@angular/material/autocomplete";
21
- import * as i5 from "@angular/material/core";
22
- import * as i6 from "@angular/forms";
23
- export class SelectAutocompleteComponent extends FieldType {
24
- constructor() {
25
- super(...arguments);
26
- this.displayValue = '';
27
- this.searchControl = new FormControl();
28
- }
29
- ngOnInit() {
30
- if (Array.isArray(this.to.options)) {
31
- this.filteredOptions = this.formControl.valueChanges.pipe(startWith(''), map((searchTerm) => this.filterOptions(searchTerm)));
32
- }
33
- else {
34
- const options$ = this.to.options;
35
- this.filteredOptions = combineLatest([
36
- this.formControl.valueChanges.pipe(startWith('')),
37
- options$,
38
- ]).pipe(map(([searchTerm, options]) => options.filter((option) => option.label.toLowerCase().includes(searchTerm.toLowerCase()))));
39
- }
40
- this.formControl.valueChanges.pipe(startWith('')).subscribe(value => {
41
- if (value) {
42
- this.updateDisplayValue(value);
43
- }
44
- else {
45
- this.displayValue = '';
46
- }
47
- });
48
- this.updateDisplayValue(this.formControl.value);
49
- }
50
- onKeydown(event) {
51
- if (event.key === 'Enter') {
52
- event.preventDefault();
53
- }
54
- }
55
- filterOptions(searchTerm) {
56
- if (Array.isArray(this.to.options)) {
57
- return this.to.options.filter((option) => option.label.toLowerCase().includes(searchTerm.toLowerCase()));
58
- }
59
- return [];
60
- }
61
- updateDisplayValue(value) {
62
- if (Array.isArray(this.to.options)) {
63
- const selectedOption = this.to.options.find(option => option.value === value);
64
- this.displayValue = selectedOption ? selectedOption.label : '';
65
- }
66
- else {
67
- (this.to.options || of([])).subscribe(options => {
68
- const selectedOption = options.find(option => option.value === value);
69
- this.displayValue = selectedOption ? selectedOption.label : '';
70
- });
71
- }
72
- }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
74
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SelectAutocompleteComponent, isStandalone: true, selector: "mu-formly-select", providers: [MatAutocompleteTrigger], viewQueries: [{ propertyName: "trigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: `
75
- <mat-form-field class="w-full" appearance="outline">
76
- <mat-label>{{ to.label }}</mat-label>
77
- <input
78
- matInput
79
- [formControl]="formControl"
80
- [matAutocomplete]="auto"
81
- [readonly]="to.readonly"
82
- [value]="displayValue"
83
- [required]="to.required || false"
84
- (keydown)="onKeydown($event)"
85
- (focus)="trigger.openPanel()"
86
- />
87
- <mat-autocomplete
88
- #auto="matAutocomplete">
89
- <mat-option
90
- *ngFor="let option of filteredOptions | async"
91
- [value]="option.value"
92
- >
93
- {{ option.label }}
94
- </mat-option>
95
- </mat-autocomplete>
96
- </mat-form-field>
97
- `, isInline: true, styles: [".selected-chips{margin-top:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
98
- }
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectAutocompleteComponent, decorators: [{
100
- type: Component,
101
- args: [{ selector: 'mu-formly-select', standalone: true, imports: [
102
- CommonModule,
103
- CommonsModule,
104
- MatChipsModule,
105
- MatButtonModule,
106
- MatIconModule,
107
- MatInputModule,
108
- MatAutocompleteModule,
109
- TranslateModule,
110
- MatCheckboxModule,
111
- FormlyModule,
112
- ReactiveFormsModule,
113
- MatFormFieldModule,
114
- ], providers: [MatAutocompleteTrigger], template: `
115
- <mat-form-field class="w-full" appearance="outline">
116
- <mat-label>{{ to.label }}</mat-label>
117
- <input
118
- matInput
119
- [formControl]="formControl"
120
- [matAutocomplete]="auto"
121
- [readonly]="to.readonly"
122
- [value]="displayValue"
123
- [required]="to.required || false"
124
- (keydown)="onKeydown($event)"
125
- (focus)="trigger.openPanel()"
126
- />
127
- <mat-autocomplete
128
- #auto="matAutocomplete">
129
- <mat-option
130
- *ngFor="let option of filteredOptions | async"
131
- [value]="option.value"
132
- >
133
- {{ option.label }}
134
- </mat-option>
135
- </mat-autocomplete>
136
- </mat-form-field>
137
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".selected-chips{margin-top:10px}\n"] }]
138
- }], propDecorators: { trigger: [{
139
- type: ViewChild,
140
- args: [MatAutocompleteTrigger]
141
- }] } });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWF1dG9jb21wbGV0ZS1yZWRlZmluZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mb3JtL3NyYy9saWIvdHlwZXMvc2VsZWN0LWF1dG9jb21wbGV0ZS1yZWRlZmluZWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsdUJBQXVCLEVBRXZCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFtQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUN2QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFB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Ozs7Ozs7OztLQXVCVCxtQkFNZ0IsdUJBQXVCLENBQUMsTUFBTTs4QkFVWixPQUFPO3NCQUF6QyxTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGQsXG4gIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gIGltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnLCBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbiAgaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG4gIGltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG4gIGltcG9ydCB7IG1hcCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuICBpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICBpbXBvcnQgeyBDb21tb25zTW9kdWxlIH0gZnJvbSAnQG11cmFhaS9tbmwtY29tbW9ucyc7XG4gIGltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuICBpbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbiAgaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG4gIGltcG9ydCB7XG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsXG4gIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbiAgaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG4gIGltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuICBpbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG4gIGltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG4gIFxuICBAQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ211LWZvcm1seS1zZWxlY3QnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgQ29tbW9uc01vZHVsZSxcbiAgICAgIE1hdENoaXBzTW9kdWxlLFxuICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICBGb3JtbHlNb2R1bGUsXG4gICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcl0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctZnVsbFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyB0by5sYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInRvLnJlYWRvbmx5XCJcbiAgICAgICAgICBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidG8ucmVxdWlyZWQgfHwgZmFsc2VcIlxuICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAoZm9jdXMpPVwidHJpZ2dlci5vcGVuUGFuZWwoKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICBgLFxuICAgIHN0eWxlczogYFxuICAgICAgLnNlbGVjdGVkLWNoaXBzIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgfVxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIH0pXG4gIGV4cG9ydCBjbGFzcyBTZWxlY3RBdXRvY29tcGxldGVDb21wb25lbnRcbiAgICBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+XG4gICAgaW1wbGVtZW50cyBPbkluaXRcbiAge1xuICAgIGRpc3BsYXlWYWx1ZSA9ICcnO1xuXG4gICAgc2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIGZpbHRlcmVkT3B0aW9ucyE6IE9ic2VydmFibGU8YW55W10+O1xuICAgIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcikgdHJpZ2dlciE6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG4gIFxuICAgIG5nT25Jbml0KCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy50by5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICBtYXAoKHNlYXJjaFRlcm0pID0+IHRoaXMuZmlsdGVyT3B0aW9ucyhzZWFyY2hUZXJtKSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMkID0gdGhpcy50by5vcHRpb25zIGFzIE9ic2VydmFibGU8YW55W10+O1xuICBcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCgnJykpLFxuICAgICAgICAgIG9wdGlvbnMkLFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIG1hcCgoW3NlYXJjaFRlcm0sIG9wdGlvbnNdOiBbc3RyaW5nLCBhbnlbXV0pID0+XG4gICAgICAgICAgICBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgICAgICBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBzdGFydFdpdGgoJycpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIFxuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VmFsdWUodGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgfVxuICBcbiAgICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIFxuICAgIGZpbHRlck9wdGlvbnMoc2VhcmNoVGVybTogc3RyaW5nKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnRvLm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvLm9wdGlvbnMuZmlsdGVyKChvcHRpb246IGFueSkgPT5cbiAgICAgICAgICBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHByaXZhdGUgdXBkYXRlRGlzcGxheVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy50by5vcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy50by5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xuICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gc2VsZWN0ZWRPcHRpb24gPyBzZWxlY3RlZE9wdGlvbi5sYWJlbCA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICh0aGlzLnRvLm9wdGlvbnMgfHwgb2YoW10pKS5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IG9wdGlvbnMuZmluZChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHNlbGVjdGVkT3B0aW9uID8gc2VsZWN0ZWRPcHRpb24ubGFiZWwgOiAnJztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG4gICJdfQ==
@@ -1,254 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component } from '@angular/core';
3
- import { ReactiveFormsModule } from '@angular/forms';
4
- import { MatAutocompleteModule } from '@angular/material/autocomplete';
5
- import { MatFormFieldModule } from '@angular/material/form-field';
6
- import { MatIconModule } from '@angular/material/icon';
7
- import { MatInputModule } from '@angular/material/input';
8
- import { FieldType, FormlyModule } from '@ngx-formly/core';
9
- import { combineLatest, Observable, of } from 'rxjs';
10
- import { catchError, debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap, take, } from 'rxjs/operators';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/common";
13
- import * as i2 from "@angular/forms";
14
- import * as i3 from "@ngx-formly/core";
15
- import * as i4 from "@angular/material/form-field";
16
- import * as i5 from "@angular/material/input";
17
- import * as i6 from "@angular/material/autocomplete";
18
- import * as i7 from "@angular/material/core";
19
- import * as i8 from "@angular/material/icon";
20
- export class FormlySelectAutocompleteComponent extends FieldType {
21
- constructor() {
22
- super(...arguments);
23
- this.optionsList = [];
24
- this.displayFn = (value) => {
25
- if (value == null) {
26
- return '';
27
- }
28
- const match = this.optionsList.find((opt) => {
29
- const optValue = opt.value != null ? opt.value : opt;
30
- return optValue === value;
31
- });
32
- if (!match) {
33
- return String(value);
34
- }
35
- return match.label != null ? match.label : String(match.value);
36
- };
37
- }
38
- ngOnInit() {
39
- const debounce = this.field?.props?.debounceTime || 300;
40
- const fetchOnce = this.field?.props?.fetchOnce === undefined ? true : this.field.props.fetchOnce;
41
- if (this.field?.props?.apiFunction &&
42
- typeof this.field?.props?.apiFunction === 'function') {
43
- if (fetchOnce) {
44
- this.field?.props
45
- ?.apiFunction('')
46
- .pipe(catchError((error) => {
47
- console.error('API Error:', error);
48
- return of([]);
49
- }))
50
- .subscribe((results) => {
51
- this.optionsList = results || [];
52
- this.filteredOptions$ = this.formControl.valueChanges.pipe(startWith(''), debounceTime(debounce), distinctUntilChanged(), map((searchTerm) => this.filterOptions(searchTerm, this.optionsList)));
53
- });
54
- }
55
- else {
56
- this.filteredOptions$ = this.formControl.valueChanges.pipe(startWith(''), debounceTime(debounce), distinctUntilChanged(), switchMap((searchTerm) => {
57
- return this.field?.props?.apiFunction(searchTerm).pipe(map((results) => {
58
- this.optionsList = results || [];
59
- return results || [];
60
- }), catchError((error) => {
61
- console.error('API Error:', error);
62
- return of([]);
63
- }));
64
- }));
65
- }
66
- }
67
- else {
68
- const options$ = this.field?.props?.options instanceof Observable
69
- ? this.field?.props?.options.pipe(shareReplay(1))
70
- : of(this.field?.props?.options || []);
71
- options$.pipe(take(1)).subscribe((opts) => {
72
- this.optionsList = opts || [];
73
- if (this.formControl.value != null) {
74
- this.formControl.setValue(this.formControl.value);
75
- }
76
- });
77
- options$.subscribe((opts) => (this.optionsList = opts || []));
78
- this.filteredOptions$ = combineLatest([
79
- options$,
80
- this.formControl.valueChanges.pipe(startWith(''), debounceTime(debounce)),
81
- ]).pipe(map(([options, value]) => this.filterOptions(value, options)));
82
- }
83
- }
84
- onBlur() {
85
- const value = this.formControl.value;
86
- if (!value) {
87
- this.formControl.setValue(null);
88
- this.formControl.markAsTouched();
89
- return;
90
- }
91
- if (typeof value === 'string') {
92
- const match = this.optionsList.find((opt) => {
93
- const label = opt.label?.toString().toLowerCase();
94
- const val = opt.value?.toString().toLowerCase();
95
- const input = value.toLowerCase();
96
- return label === input || val === input;
97
- });
98
- if (match) {
99
- this.formControl.setValue(match.value ?? match);
100
- }
101
- else {
102
- this.formControl.setValue(null);
103
- }
104
- }
105
- this.formControl.markAsTouched();
106
- }
107
- filterOptions(value, options) {
108
- if (!options) {
109
- return [];
110
- }
111
- if (!value) {
112
- return options.slice();
113
- }
114
- const filterValue = String(value).toLowerCase();
115
- return options.filter((opt) => {
116
- const label = opt.label != null ? String(opt.label) : '';
117
- const valStr = opt.value != null ? String(opt.value) : '';
118
- return (label.toLowerCase().includes(filterValue) ||
119
- valStr.toLowerCase().includes(filterValue));
120
- });
121
- }
122
- clearSearchedInput() {
123
- this.formControl.setValue('');
124
- }
125
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlySelectAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
126
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormlySelectAutocompleteComponent, isStandalone: true, selector: "mu-select-autocomplete", usesInheritance: true, ngImport: i0, template: `
127
- <mat-form-field
128
- class="w-full"
129
- [appearance]="field?.props?.appearance || 'outline'"
130
- >
131
- <mat-label *ngIf="!field?.props?.['dontShowLabel']">{{
132
- field?.props?.label
133
- }}</mat-label>
134
- <input
135
- class="inputField"
136
- matInput
137
- [formControl]="formControl"
138
- [formlyAttributes]="field"
139
- [placeholder]="field?.props?.placeholder || field?.props?.label"
140
- (blur)="onBlur()"
141
- [matAutocomplete]="auto"
142
- />
143
- <ng-container matSuffix>
144
- <span
145
- *ngIf="!field?.props?.readonly && !field?.props?.disabled"
146
- class="cursor-pointer relative right-[20px] span-class"
147
- (click)="clearSearchedInput()"
148
- >
149
- <mat-icon class="suffixClear">clear</mat-icon>
150
- </span>
151
-
152
- <div
153
- class="absolute inset-y-0 right-1 flex items-center pointer-events-none"
154
- >
155
- <svg
156
- class="w-4 h-4 text-gray-500"
157
- xmlns="http://www.w3.org/2000/svg"
158
- fill="none"
159
- viewBox="0 0 24 24"
160
- stroke="currentColor"
161
- >
162
- <path
163
- stroke-linecap="round"
164
- stroke-linejoin="round"
165
- stroke-width="2"
166
- d="M19 9l-7 7-7-7"
167
- />
168
- </svg>
169
- </div>
170
- </ng-container>
171
- <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn">
172
- <mat-option
173
- *ngFor="let option of filteredOptions$ | async"
174
- [value]="option.value"
175
- >
176
- {{ option.label }}
177
- </mat-option>
178
- </mat-autocomplete>
179
- <mat-error *ngIf="formControl.invalid && formControl.touched">
180
- {{ field.validation?.messages?.['required'] }}
181
- </mat-error>
182
- </mat-form-field>
183
- `, isInline: true, styles: [".suffixClear{height:17px;width:17px;font-size:17px}.span-class{border-radius:10px;height:16px;width:16px;display:flex}.inputField{width:calc(100% - 17px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i3.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
184
- }
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormlySelectAutocompleteComponent, decorators: [{
186
- type: Component,
187
- args: [{ selector: 'mu-select-autocomplete', standalone: true, template: `
188
- <mat-form-field
189
- class="w-full"
190
- [appearance]="field?.props?.appearance || 'outline'"
191
- >
192
- <mat-label *ngIf="!field?.props?.['dontShowLabel']">{{
193
- field?.props?.label
194
- }}</mat-label>
195
- <input
196
- class="inputField"
197
- matInput
198
- [formControl]="formControl"
199
- [formlyAttributes]="field"
200
- [placeholder]="field?.props?.placeholder || field?.props?.label"
201
- (blur)="onBlur()"
202
- [matAutocomplete]="auto"
203
- />
204
- <ng-container matSuffix>
205
- <span
206
- *ngIf="!field?.props?.readonly && !field?.props?.disabled"
207
- class="cursor-pointer relative right-[20px] span-class"
208
- (click)="clearSearchedInput()"
209
- >
210
- <mat-icon class="suffixClear">clear</mat-icon>
211
- </span>
212
-
213
- <div
214
- class="absolute inset-y-0 right-1 flex items-center pointer-events-none"
215
- >
216
- <svg
217
- class="w-4 h-4 text-gray-500"
218
- xmlns="http://www.w3.org/2000/svg"
219
- fill="none"
220
- viewBox="0 0 24 24"
221
- stroke="currentColor"
222
- >
223
- <path
224
- stroke-linecap="round"
225
- stroke-linejoin="round"
226
- stroke-width="2"
227
- d="M19 9l-7 7-7-7"
228
- />
229
- </svg>
230
- </div>
231
- </ng-container>
232
- <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn">
233
- <mat-option
234
- *ngFor="let option of filteredOptions$ | async"
235
- [value]="option.value"
236
- >
237
- {{ option.label }}
238
- </mat-option>
239
- </mat-autocomplete>
240
- <mat-error *ngIf="formControl.invalid && formControl.touched">
241
- {{ field.validation?.messages?.['required'] }}
242
- </mat-error>
243
- </mat-form-field>
244
- `, imports: [
245
- CommonModule,
246
- ReactiveFormsModule,
247
- FormlyModule,
248
- MatFormFieldModule,
249
- MatInputModule,
250
- MatAutocompleteModule,
251
- MatIconModule,
252
- ], styles: [".suffixClear{height:17px;width:17px;font-size:17px}.span-class{border-radius:10px;height:16px;width:16px;display:flex}.inputField{width:calc(100% - 17px)}\n"] }]
253
- }] });
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWF1dG9jb21wbGV0ZS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mb3JtL3NyYy9saWIvdHlwZXMvc2VsZWN0LWF1dG9jb21wbGV0ZS50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBcUIsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxHQUNMLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUF5RnhCLE1BQU0sT0FBTyxpQ0FDWCxTQUFRLFNBQTRCO0lBeEZ0Qzs7UUE0RlksZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUF5RWxDLGNBQVMsR0FBRyxDQUFDLEtBQVUsRUFBVSxFQUFFO1lBQ2pDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNsQixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxNQUFN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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RFQscU9Ba0JDLFlBQVksb1RBQ1osbUJBQW1CLHlrQkFDbkIsWUFBWSxxSkFDWixrQkFBa0Isd2dCQUNsQixjQUFjLDBXQUNkLHFCQUFxQix3MUJBQ3JCLGFBQWE7OzRGQUdKLGlDQUFpQztrQkF2RjdDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksWUFDTjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURULFdBaUJRO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLGFBQWE7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ211LXNlbGVjdC1hdXRvY29tcGxldGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgW2FwcGVhcmFuY2VdPVwiZmllbGQ/LnByb3BzPy5hcHBlYXJhbmNlIHx8ICdvdXRsaW5lJ1wiXG4gICAgPlxuICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cIiFmaWVsZD8ucHJvcHM/LlsnZG9udFNob3dMYWJlbCddXCI+e3tcbiAgICAgICAgZmllbGQ/LnByb3BzPy5sYWJlbFxuICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImlucHV0RmllbGRcIlxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcHM/LnBsYWNlaG9sZGVyIHx8IGZpZWxkPy5wcm9wcz8ubGFiZWxcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAvPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRTdWZmaXg+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCIhZmllbGQ/LnByb3BzPy5yZWFkb25seSAmJiAhZmllbGQ/LnByb3BzPy5kaXNhYmxlZFwiXG4gICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciByZWxhdGl2ZSByaWdodC1bMjBweF0gc3Bhbi1jbGFzc1wiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoZWRJbnB1dCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInN1ZmZpeENsZWFyXCI+Y2xlYXI8L21hdC1pY29uPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQteS0wIHJpZ2h0LTEgZmxleCBpdGVtcy1jZW50ZXIgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICBjbGFzcz1cInctNCBoLTQgdGV4dC1ncmF5LTUwMFwiXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgZD1cIk0xOSA5bC03IDctNy03XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIj5cbiAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmludmFsaWQgJiYgZm9ybUNvbnRyb2wudG91Y2hlZFwiPlxuICAgICAgICB7eyBmaWVsZC52YWxpZGF0aW9uPy5tZXNzYWdlcz8uWydyZXF1aXJlZCddIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICBgLFxuICBzdHlsZXM6IGBcbiAgICAuc3VmZml4Q2xlYXIge1xuICAgICAgaGVpZ2h0OiAxN3B4O1xuICAgICAgd2lkdGg6IDE3cHg7XG4gICAgICBmb250LXNpemU6IDE3cHg7XG4gICAgfVxuICAgIC5zcGFuLWNsYXNzIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICB3aWR0aDogMTZweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuICAgIC5pbnB1dEZpZWxke1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDE3cHgpO1xuICAgIH1cbiAgYCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1seVNlbGVjdEF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICBleHRlbmRzIEZpZWxkVHlwZTxGb3JtbHlGaWVsZENvbmZpZz5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgcHVibGljIGZpbHRlcmVkT3B0aW9ucyQ6IE9ic2VydmFibGU8YW55PjtcbiAgcHJvdGVjdGVkIG9wdGlvbnNMaXN0OiBhbnlbXSA9IFtdO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGRlYm91bmNlID0gdGhpcy5maWVsZD8ucHJvcHM/LmRlYm91bmNlVGltZSB8fCAzMDA7XG4gICAgY29uc3QgZmV0Y2hPbmNlID0gdGhpcy5maWVsZD8ucHJvcHM/LmZldGNoT25jZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMuZmllbGQucHJvcHMuZmV0Y2hPbmNlO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmllbGQ/LnByb3BzPy5hcGlGdW5jdGlvbiAmJlxuICAgICAgdHlwZW9mIHRoaXMuZmllbGQ/LnByb3BzPy5hcGlGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgaWYgKGZldGNoT25jZSkge1xuICAgICAgICB0aGlzLmZpZWxkPy5wcm9wc1xuICAgICAgICAgID8uYXBpRnVuY3Rpb24oJycpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBUEkgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0czogYW55W10pID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc0xpc3QgPSByZXN1bHRzIHx8IFtdO1xuXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyQgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoZGVib3VuY2UpLFxuICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICBtYXAoKHNlYXJjaFRlcm06IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoc2VhcmNoVGVybSwgdGhpcy5vcHRpb25zTGlzdClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zJCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoZGVib3VuY2UpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgc3dpdGNoTWFwKChzZWFyY2hUZXJtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5wcm9wcz8uYXBpRnVuY3Rpb24oc2VhcmNoVGVybSkucGlwZShcbiAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0xpc3QgPSByZXN1bHRzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzIHx8IFtdO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBUEkgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMkID1cbiAgICAgICAgdGhpcy5maWVsZD8ucHJvcHM/Lm9wdGlvbnMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlXG4gICAgICAgICAgPyB0aGlzLmZpZWxkPy5wcm9wcz8ub3B0aW9ucy5waXBlKHNoYXJlUmVwbGF5KDEpKVxuICAgICAgICAgIDogb2YodGhpcy5maWVsZD8ucHJvcHM/Lm9wdGlvbnMgfHwgW10pO1xuXG4gICAgICBvcHRpb25zJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgob3B0cykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnNMaXN0ID0gb3B0cyB8fCBbXTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb3B0aW9ucyQuc3Vic2NyaWJlKChvcHRzKSA9PiAodGhpcy5vcHRpb25zTGlzdCA9IG9wdHMgfHwgW10pKTtcblxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIG9wdGlvbnMkLFxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgICAgZGVib3VuY2VUaW1lKGRlYm91bmNlKVxuICAgICAgICApLFxuICAgICAgXSkucGlwZShtYXAoKFtvcHRpb25zLCB2YWx1ZV0pID0+IHRoaXMuZmlsdGVyT3B0aW9ucyh2YWx1ZSwgb3B0aW9ucykpKTtcbiAgICB9XG4gIH1cblxuICBkaXNwbGF5Rm4gPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLm9wdGlvbnNMaXN0LmZpbmQoKG9wdCkgPT4ge1xuICAgICAgY29uc3Qgb3B0VmFsdWUgPSBvcHQudmFsdWUgIT0gbnVsbCA/IG9wdC52YWx1ZSA6IG9wdDtcbiAgICAgIHJldHVybiBvcHRWYWx1ZSA9PT0gdmFsdWU7XG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaC5sYWJlbCAhPSBudWxsID8gbWF0Y2gubGFiZWwgOiBTdHJpbmcobWF0Y2gudmFsdWUpO1xuICB9O1xuXG4gIG9uQmx1cigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLm9wdGlvbnNMaXN0LmZpbmQoKG9wdCkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IG9wdC5sYWJlbD8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB2YWwgPSBvcHQudmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gbGFiZWwgPT09IGlucHV0IHx8IHZhbCA9PT0gaW5wdXQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG1hdGNoLnZhbHVlID8/IG1hdGNoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJPcHRpb25zKHZhbHVlOiBhbnksIG9wdGlvbnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zbGljZSgpO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSBvcHQubGFiZWwgIT0gbnVsbCA/IFN0cmluZyhvcHQubGFiZWwpIDogJyc7XG4gICAgICBjb25zdCB2YWxTdHIgPSBvcHQudmFsdWUgIT0gbnVsbCA/IFN0cmluZyhvcHQudmFsdWUpIDogJyc7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSB8fFxuICAgICAgICB2YWxTdHIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhclNlYXJjaGVkSW5wdXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gIH1cbn1cbiJdfQ==