@solidev/data 0.4.8 → 0.5.0

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 (91) hide show
  1. package/fesm2022/solidev-data.mjs +158 -157
  2. package/fesm2022/solidev-data.mjs.map +1 -1
  3. package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +2 -2
  4. package/package.json +5 -7
  5. package/esm2022/lib/auth/auth-interceptor.service.mjs +0 -113
  6. package/esm2022/lib/auth/auth.service.mjs +0 -216
  7. package/esm2022/lib/auth/jwt.mjs +0 -21
  8. package/esm2022/lib/data/data-backend.mjs +0 -162
  9. package/esm2022/lib/data/data-collection.mjs +0 -125
  10. package/esm2022/lib/data/data-collection.mock.mjs +0 -39
  11. package/esm2022/lib/data/data-model.mjs +0 -291
  12. package/esm2022/lib/data/data-parameters.mjs +0 -34
  13. package/esm2022/lib/data/data-query.mjs +0 -154
  14. package/esm2022/lib/data/data-query.mock.mjs +0 -46
  15. package/esm2022/lib/data/fields/base.mjs +0 -144
  16. package/esm2022/lib/data/fields/boolean.mjs +0 -38
  17. package/esm2022/lib/data/fields/computed.mjs +0 -10
  18. package/esm2022/lib/data/fields/datetime.mjs +0 -167
  19. package/esm2022/lib/data/fields/index.mjs +0 -8
  20. package/esm2022/lib/data/fields/numbers.mjs +0 -38
  21. package/esm2022/lib/data/fields/primaryfield.mjs +0 -9
  22. package/esm2022/lib/data/fields/relations.mjs +0 -53
  23. package/esm2022/lib/data/fields/stringfields.mjs +0 -71
  24. package/esm2022/lib/dispedit/choice.pipe.mjs +0 -79
  25. package/esm2022/lib/dispedit/dispedit/dispedit.component.mjs +0 -480
  26. package/esm2022/lib/dispedit/dispedit/dispedit.constants.mjs +0 -2
  27. package/esm2022/lib/dispedit/factor.pipe.mjs +0 -81
  28. package/esm2022/lib/dispedit/factorc.pipe.mjs +0 -99
  29. package/esm2022/lib/dispedit/fkselect/fkselect.component.mjs +0 -139
  30. package/esm2022/lib/dispedit/flags/flags.component.mjs +0 -137
  31. package/esm2022/lib/dispedit/m2mselect/m2mselect.component.mjs +0 -312
  32. package/esm2022/lib/dispedit/richedit/richedit.component.mjs +0 -126
  33. package/esm2022/lib/dispedit/sdelete/sdelete.component.mjs +0 -103
  34. package/esm2022/lib/messages/message-zone/message-zone.component.mjs +0 -53
  35. package/esm2022/lib/messages/message.service.mjs +0 -151
  36. package/esm2022/lib/modellist/model-list-fields/model-list-field-header/messages.mjs +0 -2
  37. package/esm2022/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +0 -61
  38. package/esm2022/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +0 -64
  39. package/esm2022/lib/modellist/model-list-fields/model-list-fields.mjs +0 -273
  40. package/esm2022/lib/modellist/model-list-filters/filters/filtertypes.mjs +0 -3
  41. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +0 -109
  42. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +0 -28
  43. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +0 -29
  44. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +0 -9
  45. package/esm2022/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +0 -40
  46. package/esm2022/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +0 -14
  47. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +0 -40
  48. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +0 -14
  49. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +0 -21
  50. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +0 -14
  51. package/esm2022/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +0 -49
  52. package/esm2022/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +0 -23
  53. package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +0 -24
  54. package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +0 -63
  55. package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +0 -16
  56. package/esm2022/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +0 -46
  57. package/esm2022/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +0 -49
  58. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +0 -56
  59. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +0 -40
  60. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +0 -51
  61. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +0 -21
  62. package/esm2022/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +0 -40
  63. package/esm2022/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +0 -17
  64. package/esm2022/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +0 -174
  65. package/esm2022/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +0 -18
  66. package/esm2022/lib/modellist/model-list-filters/model-list-filter-group.mjs +0 -19
  67. package/esm2022/lib/modellist/model-list-filters/model-list-filter.mjs +0 -157
  68. package/esm2022/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +0 -50
  69. package/esm2022/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +0 -51
  70. package/esm2022/lib/modellist/model-list-filters/model-list-filters.mjs +0 -134
  71. package/esm2022/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +0 -69
  72. package/esm2022/lib/modellist/model-list-paginator/model-list-paginator.mjs +0 -47
  73. package/esm2022/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +0 -49
  74. package/esm2022/lib/modellist/model-list-sorter/model-list-sorter.mjs +0 -116
  75. package/esm2022/lib/modellist/model-list.service.mjs +0 -168
  76. package/esm2022/lib/routing/breadcrumb/breadcrumb.component.mjs +0 -138
  77. package/esm2022/lib/routing/routing.mjs +0 -57
  78. package/esm2022/lib/updates/update/update.component.mjs +0 -17
  79. package/esm2022/lib/updates/update.service.mjs +0 -58
  80. package/esm2022/lib/uploader/index.mjs +0 -6
  81. package/esm2022/lib/uploader/interfaces.mjs +0 -8
  82. package/esm2022/lib/uploader/ng-file-drop.directive.mjs +0 -81
  83. package/esm2022/lib/uploader/ng-file-select.directive.mjs +0 -51
  84. package/esm2022/lib/uploader/ngx-uploader.class.mjs +0 -308
  85. package/esm2022/lib/uploader/ngx-uploader.module.mjs +0 -17
  86. package/esm2022/lib/utils/slugify.mjs +0 -16
  87. package/esm2022/lib/utils/tab-memory.service.mjs +0 -80
  88. package/esm2022/lib/utils/template.mjs +0 -72
  89. package/esm2022/public-api.mjs +0 -56
  90. package/esm2022/solidev-data.mjs +0 -5
  91. package/solidev-data-0.4.8.tgz +0 -0
@@ -1,51 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
- import { combineLatest, debounceTime } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/forms";
8
- export class ModelListSelectMultiFilterComponent {
9
- constructor() {
10
- this.classes = '';
11
- this.fc = new FormControl(null);
12
- }
13
- ngOnInit() {
14
- combineLatest([
15
- this.filter.choices,
16
- this.fc.valueChanges.pipe(debounceTime(250)),
17
- ]).subscribe(([choices, val]) => {
18
- for (const ch of choices) {
19
- if (ch.value === val) {
20
- if (this.filter.set(ch.value, ch.desc)) {
21
- this.list.filters.update();
22
- break;
23
- }
24
- }
25
- }
26
- this.fc.setValue(null, { emitEvent: false });
27
- });
28
- }
29
- unset(value, desc) {
30
- this.fc.setValue(null);
31
- this.filter.unset(value, desc);
32
- this.list.filters.update();
33
- }
34
- disable() {
35
- this.filter.enabled = false;
36
- this.list.filters.update();
37
- }
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ModelListSelectMultiFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ModelListSelectMultiFilterComponent, isStandalone: true, selector: "data-model-list-select-multi-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
40
- }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ModelListSelectMultiFilterComponent, decorators: [{
42
- type: Component,
43
- args: [{ selector: 'data-model-list-select-multi-filter', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>" }]
44
- }], ctorParameters: () => [], propDecorators: { list: [{
45
- type: Input
46
- }], filter: [{
47
- type: Input
48
- }], classes: [{
49
- type: Input
50
- }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC1zZWxlY3QtbXVsdGktZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9tb2RlbGxpc3QvbW9kZWwtbGlzdC1maWx0ZXJzL2ZpbHRlcnMvbW9kZWwtbGlzdC1zZWxlY3QtbXVsdGktZmlsdGVyL21vZGVsLWxpc3Qtc2VsZWN0LW11bHRpLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmlsdGVycy9maWx0ZXJzL21vZGVsLWxpc3Qtc2VsZWN0LW11bHRpLWZpbHRlci9tb2RlbC1saXN0LXNlbGVjdC1tdWx0aS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQVNuRCxNQUFNLE9BQU8sbUNBQW1DO0lBUTlDO1FBSGdCLFlBQU8sR0FBc0IsRUFBRSxDQUFDO1FBQ3pDLE9BQUUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVuQixDQUFDO0lBRVQsUUFBUTtRQUNiLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztZQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQzlCLEtBQUssTUFBTSxFQUFFLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDM0IsTUFBTTtvQkFDUixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQVUsRUFBRSxJQUFZO1FBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDOzhHQXBDVSxtQ0FBbUM7a0dBQW5DLG1DQUFtQywrSkNmaEQsNG5CQVdNLHlEREVNLFlBQVksOFNBQUUsbUJBQW1COzsyRkFFaEMsbUNBQW1DO2tCQVAvQyxTQUFTOytCQUNFLHFDQUFxQyxjQUduQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUM7d0RBSzVCLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RlbExpc3QgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kZWxMaXN0U2VsZWN0TXVsdGlGaWx0ZXIgfSBmcm9tICcuL21vZGVsLWxpc3Qtc2VsZWN0LW11bHRpLWZpbHRlcic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhL2RhdGEtbW9kZWwnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGEtbW9kZWwtbGlzdC1zZWxlY3QtbXVsdGktZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLWxpc3Qtc2VsZWN0LW11bHRpLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGVsLWxpc3Qtc2VsZWN0LW11bHRpLWZpbHRlci5jb21wb25lbnQuc2FzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxMaXN0U2VsZWN0TXVsdGlGaWx0ZXJDb21wb25lbnQ8VCBleHRlbmRzIERhdGFNb2RlbD5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgQElucHV0KCkgcHVibGljIGxpc3QhOiBNb2RlbExpc3Q8VD47XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXIhOiBNb2RlbExpc3RTZWxlY3RNdWx0aUZpbHRlcjxUPjtcbiAgQElucHV0KCkgcHVibGljIGNsYXNzZXM6IHN0cmluZ1tdIHwgc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBmYyA9IG5ldyBGb3JtQ29udHJvbChudWxsKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5maWx0ZXIuY2hvaWNlcyxcbiAgICAgIHRoaXMuZmMudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpLFxuICAgIF0pLnN1YnNjcmliZSgoW2Nob2ljZXMsIHZhbF0pID0+IHtcbiAgICAgIGZvciAoY29uc3QgY2ggb2YgY2hvaWNlcykge1xuICAgICAgICBpZiAoY2gudmFsdWUgPT09IHZhbCkge1xuICAgICAgICAgIGlmICh0aGlzLmZpbHRlci5zZXQoY2gudmFsdWUsIGNoLmRlc2MpKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3QuZmlsdGVycy51cGRhdGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5mYy5zZXRWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdW5zZXQodmFsdWU6IGFueSwgZGVzYzogc3RyaW5nKSB7XG4gICAgdGhpcy5mYy5zZXRWYWx1ZShudWxsKTtcbiAgICB0aGlzLmZpbHRlci51bnNldCh2YWx1ZSwgZGVzYyk7XG4gICAgdGhpcy5saXN0LmZpbHRlcnMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZSgpIHtcbiAgICB0aGlzLmZpbHRlci5lbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5saXN0LmZpbHRlcnMudXBkYXRlKCk7XG4gIH1cbn1cbiIsIlxuPGRpdiBjbGFzcz1cImZpbHRlcml0ZW1cIiBbbmdDbGFzc109XCJmaWx0ZXIuZGlzcGxheUNsYXNzZXMgfHwgY2xhc3Nlc1wiPlxuICA8ZGl2IGNsYXNzPVwidHJhc2ggZmxvYXQtZW5kXCIgKGNsaWNrKT1cImRpc2FibGUoKVwiPjxpIGNsYXNzPVwiYmkgYmktdHJhc2hcIj48L2k+PC9kaXY+XG4gIDxsYWJlbD57e2ZpbHRlci5sYWJlbH19PC9sYWJlbD5cbiAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW2Zvcm1Db250cm9sXT1cImZjXCI+XG4gICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCI+LS0ge3tmaWx0ZXIuaGVscH19IC0tPC9vcHRpb24+XG4gICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgYyBvZiBmaWx0ZXIuY2hvaWNlc3xhc3luY1wiIFtuZ1ZhbHVlXT1cImMudmFsdWVcIj57e2MuZGVzY319PC9vcHRpb24+XG4gIDwvc2VsZWN0PlxuICA8ZGl2IGNsYXNzPVwiZW5hYmxlZCBtdC0xXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZSBvZiBmaWx0ZXIubWN1cnJlbnQkfGFzeW5jXCI+PGkgY2xhc3M9XCJiaSBiaS10cmFzaCBtZS0yXCIgKGNsaWNrKT1cInVuc2V0KGUudmFsdWUsIGUuZGVzYylcIiByb2xlPVwiYnV0dG9uXCI+PC9pPnt7ZS5kZXNjfX08L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -1,21 +0,0 @@
1
- import { ModelListSelectFilter, } from '../model-list-select-filter/model-list-select-filter';
2
- export class ModelListSelectMultiFilter extends ModelListSelectFilter {
3
- constructor(params) {
4
- super(params);
5
- this.multi = true;
6
- this.type = 'selectmulti';
7
- if (this.label == '') {
8
- this.label = 'Sélectionnez un élément';
9
- }
10
- if (this.help == '') {
11
- this.help = 'Choix par liste déroulante (multiple)';
12
- }
13
- // Set default only for cur type
14
- if (this.default && this.type == 'selectmulti') {
15
- for (const f of this.default) {
16
- this.set(f.value, f.desc, true);
17
- }
18
- }
19
- }
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC1zZWxlY3QtbXVsdGktZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL21vZGVsbGlzdC9tb2RlbC1saXN0LWZpbHRlcnMvZmlsdGVycy9tb2RlbC1saXN0LXNlbGVjdC1tdWx0aS1maWx0ZXIvbW9kZWwtbGlzdC1zZWxlY3QtbXVsdGktZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxxQkFBcUIsR0FFdEIsTUFBTSxzREFBc0QsQ0FBQztBQVM5RCxNQUFNLE9BQU8sMEJBRVgsU0FBUSxxQkFBd0I7SUFJaEMsWUFBWSxNQUEyQztRQUNyRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFKQSxVQUFLLEdBQUcsSUFBSSxDQUFDO1FBTTNCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLHlCQUF5QixDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyx1Q0FBdUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsZ0NBQWdDO1FBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQy9DLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1vZGVsTGlzdFNlbGVjdEZpbHRlcixcbiAgTW9kZWxMaXN0U2VsZWN0RmlsdGVyUGFyYW1zLFxufSBmcm9tICcuLi9tb2RlbC1saXN0LXNlbGVjdC1maWx0ZXIvbW9kZWwtbGlzdC1zZWxlY3QtZmlsdGVyJztcbmltcG9ydCB7IERhdGFNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2RhdGEvZGF0YS1tb2RlbCc7XG5pbXBvcnQgeyBJRGlzcEVkaXRDaG9pY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kaXNwZWRpdC9kaXNwZWRpdC9kaXNwZWRpdC5jb25zdGFudHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsTGlzdE11bHRpU2VsZWN0RmlsdGVyUGFyYW1zPFQgZXh0ZW5kcyBEYXRhTW9kZWw+XG4gIGV4dGVuZHMgTW9kZWxMaXN0U2VsZWN0RmlsdGVyUGFyYW1zPFQ+IHtcbiAgZGVmYXVsdD86IElEaXNwRWRpdENob2ljZVtdO1xufVxuXG5leHBvcnQgY2xhc3MgTW9kZWxMaXN0U2VsZWN0TXVsdGlGaWx0ZXI8XG4gIFQgZXh0ZW5kcyBEYXRhTW9kZWxcbj4gZXh0ZW5kcyBNb2RlbExpc3RTZWxlY3RGaWx0ZXI8VD4ge1xuICBwdWJsaWMgb3ZlcnJpZGUgbXVsdGkgPSB0cnVlO1xuICBwdWJsaWMgb3ZlcnJpZGUgZGVmYXVsdD86IElEaXNwRWRpdENob2ljZVtdO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogTW9kZWxMaXN0TXVsdGlTZWxlY3RGaWx0ZXJQYXJhbXM8VD4pIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuXG4gICAgdGhpcy50eXBlID0gJ3NlbGVjdG11bHRpJztcbiAgICBpZiAodGhpcy5sYWJlbCA9PSAnJykge1xuICAgICAgdGhpcy5sYWJlbCA9ICdTw6lsZWN0aW9ubmV6IHVuIMOpbMOpbWVudCc7XG4gICAgfVxuICAgIGlmICh0aGlzLmhlbHAgPT0gJycpIHtcbiAgICAgIHRoaXMuaGVscCA9ICdDaG9peCBwYXIgbGlzdGUgZMOpcm91bGFudGUgKG11bHRpcGxlKSc7XG4gICAgfVxuICAgIC8vIFNldCBkZWZhdWx0IG9ubHkgZm9yIGN1ciB0eXBlXG4gICAgaWYgKHRoaXMuZGVmYXVsdCAmJiB0aGlzLnR5cGUgPT0gJ3NlbGVjdG11bHRpJykge1xuICAgICAgZm9yIChjb25zdCBmIG9mIHRoaXMuZGVmYXVsdCkge1xuICAgICAgICB0aGlzLnNldChmLnZhbHVlLCBmLmRlc2MsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -1,40 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
3
- import { debounceTime } from 'rxjs';
4
- import { CommonModule } from '@angular/common';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/forms";
8
- export class ModelListTextFilterComponent {
9
- constructor() {
10
- this.classes = '';
11
- this.fc = new FormControl(null);
12
- }
13
- ngOnInit() {
14
- this.filter.valueChanges.subscribe((val) => {
15
- this.fc.setValue(val.value, { emitEvent: false });
16
- });
17
- this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {
18
- if (this.filter.set(val, val || '')) {
19
- this.list.filters.update();
20
- }
21
- });
22
- }
23
- disable() {
24
- this.filter.enabled = false;
25
- this.list.filters.update();
26
- }
27
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ModelListTextFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ModelListTextFilterComponent, isStandalone: true, selector: "data-model-list-text-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"text\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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"] }] }); }
29
- }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ModelListTextFilterComponent, decorators: [{
31
- type: Component,
32
- args: [{ selector: 'data-model-list-text-filter', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"text\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>" }]
33
- }], ctorParameters: () => [], propDecorators: { list: [{
34
- type: Input
35
- }], filter: [{
36
- type: Input
37
- }], classes: [{
38
- type: Input
39
- }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC10ZXh0LWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmlsdGVycy9maWx0ZXJzL21vZGVsLWxpc3QtdGV4dC1maWx0ZXIvbW9kZWwtbGlzdC10ZXh0LWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmlsdGVycy9maWx0ZXJzL21vZGVsLWxpc3QtdGV4dC1maWx0ZXIvbW9kZWwtbGlzdC10ZXh0LWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFVL0MsTUFBTSxPQUFPLDRCQUE0QjtJQU12QztRQUhnQixZQUFPLEdBQXNCLEVBQUUsQ0FBQztRQUN6QyxPQUFFLEdBQUcsSUFBSSxXQUFXLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBRWxDLENBQUM7SUFFVCxRQUFRO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUUsR0FBdUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs4R0F0QlUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsdUpDZnpDLHVUQUtNLHlERFFNLFlBQVksNEhBQUUsbUJBQW1COzsyRkFFaEMsNEJBQTRCO2tCQVB4QyxTQUFTOytCQUNFLDZCQUE2QixjQUczQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUM7d0RBRzVCLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RlbExpc3QgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1vZGVsTGlzdFRleHRGaWx0ZXIgfSBmcm9tICcuL21vZGVsLWxpc3QtdGV4dC1maWx0ZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElEaXNwRWRpdENob2ljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2Rpc3BlZGl0L2Rpc3BlZGl0L2Rpc3BlZGl0LmNvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGEtbW9kZWwtbGlzdC10ZXh0LWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC1saXN0LXRleHQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtbGlzdC10ZXh0LWZpbHRlci5jb21wb25lbnQuc2FzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxMaXN0VGV4dEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHB1YmxpYyBsaXN0ITogTW9kZWxMaXN0PGFueT47XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXIhOiBNb2RlbExpc3RUZXh0RmlsdGVyO1xuICBASW5wdXQoKSBwdWJsaWMgY2xhc3Nlczogc3RyaW5nW10gfCBzdHJpbmcgPSAnJztcbiAgcHVibGljIGZjID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXIudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICB0aGlzLmZjLnNldFZhbHVlKCh2YWwgYXMgSURpc3BFZGl0Q2hvaWNlKS52YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuZmMudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICBpZiAodGhpcy5maWx0ZXIuc2V0KHZhbCwgdmFsIHx8ICcnKSkge1xuICAgICAgICB0aGlzLmxpc3QuZmlsdGVycy51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlKCkge1xuICAgIHRoaXMuZmlsdGVyLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxpc3QuZmlsdGVycy51cGRhdGUoKTtcbiAgfVxufVxuIiwiXG48ZGl2IGNsYXNzPVwiZmlsdGVyaXRlbVwiIFtuZ0NsYXNzXT1cImZpbHRlci5kaXNwbGF5Q2xhc3NlcyB8fCBjbGFzc2VzXCI+XG4gIDxkaXYgY2xhc3M9XCJ0cmFzaCBmbG9hdC1lbmRcIiAoY2xpY2spPVwiZGlzYWJsZSgpXCI+PGkgY2xhc3M9XCJiaSBiaS10cmFzaFwiPjwvaT48L2Rpdj5cbiAgPGxhYmVsPnt7ZmlsdGVyLmxhYmVsfX08L2xhYmVsPlxuICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJmY1wiIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIuaGVscFwiPlxuPC9kaXY+Il19
@@ -1,17 +0,0 @@
1
- import { ModelListFilter, } from '../../model-list-filter';
2
- export class ModelListTextFilter extends ModelListFilter {
3
- constructor(params) {
4
- super(params);
5
- this.type = 'text';
6
- if (this.label == '') {
7
- this.label = 'Recherche par texte';
8
- }
9
- if (this.help == '') {
10
- this.help = 'Texte à rechercher';
11
- }
12
- if (this.default) {
13
- this.set(this.default, '', true);
14
- }
15
- }
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC10ZXh0LWZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9tb2RlbGxpc3QvbW9kZWwtbGlzdC1maWx0ZXJzL2ZpbHRlcnMvbW9kZWwtbGlzdC10ZXh0LWZpbHRlci9tb2RlbC1saXN0LXRleHQtZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEdBRWhCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGVBQWU7SUFDdEQsWUFBWSxNQUE2QjtRQUN2QyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1vZGVsTGlzdEZpbHRlcixcbiAgTW9kZWxMaXN0RmlsdGVyUGFyYW1zLFxufSBmcm9tICcuLi8uLi9tb2RlbC1saXN0LWZpbHRlcic7XG5cbmV4cG9ydCBjbGFzcyBNb2RlbExpc3RUZXh0RmlsdGVyIGV4dGVuZHMgTW9kZWxMaXN0RmlsdGVyIHtcbiAgY29uc3RydWN0b3IocGFyYW1zOiBNb2RlbExpc3RGaWx0ZXJQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMudHlwZSA9ICd0ZXh0JztcbiAgICBpZiAodGhpcy5sYWJlbCA9PSAnJykge1xuICAgICAgdGhpcy5sYWJlbCA9ICdSZWNoZXJjaGUgcGFyIHRleHRlJztcbiAgICB9XG4gICAgaWYgKHRoaXMuaGVscCA9PSAnJykge1xuICAgICAgdGhpcy5oZWxwID0gJ1RleHRlIMOgIHJlY2hlcmNoZXInO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWZhdWx0KSB7XG4gICAgICB0aGlzLnNldCh0aGlzLmRlZmF1bHQsICcnLCB0cnVlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,174 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
- import { debounceTime, firstValueFrom, Subject } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/forms";
8
- class Level {
9
- constructor(tree, level, choices) {
10
- this.tree = tree;
11
- this.level = level;
12
- this.fc = new FormControl('');
13
- this.choices = choices;
14
- this.subs = this.fc.valueChanges.subscribe((val) => {
15
- if (this.selected !== val) {
16
- this.selected = val;
17
- this.tree.updated(this);
18
- }
19
- });
20
- }
21
- close() {
22
- this.subs.unsubscribe();
23
- }
24
- }
25
- class Tree {
26
- constructor(qs, maxLevel, display, filter) {
27
- this.qs = qs;
28
- this.maxLevel = maxLevel;
29
- this.display = display;
30
- this.filter = filter;
31
- this.levels = [];
32
- this.changed = new Subject();
33
- }
34
- /**
35
- * Conditionnaly add level to current tree.
36
- *
37
- * - if previous level have non-empty selected value
38
- * - if current level choices are non empty
39
- */
40
- async addLevel(fparent) {
41
- let values = [];
42
- if (this.levels.length === 0) {
43
- values = await firstValueFrom(this.qs
44
- .filter({ level: this.levels.length, parent: 'null', ...this.filter })
45
- .get());
46
- }
47
- else {
48
- const parent = fparent
49
- ? fparent
50
- : this.levels[this.levels.length - 1].selected;
51
- if (parent) {
52
- values = await firstValueFrom(this.qs
53
- .filter({
54
- level: this.levels.length,
55
- parent: this.levels[this.levels.length - 1].selected || 'null',
56
- ...this.filter,
57
- })
58
- .get());
59
- }
60
- }
61
- if (values.length > 0) {
62
- const level = new Level(this, this.levels.length, []);
63
- for (const v of values) {
64
- level.choices.push({ value: v.id, desc: this.display(v) });
65
- }
66
- this.levels.push(level);
67
- return level;
68
- }
69
- return null;
70
- }
71
- updated(level) {
72
- const newLevels = [];
73
- for (const l of this.levels) {
74
- if (l.level <= level.level) {
75
- newLevels.push(l);
76
- }
77
- else if (l.level > level.level) {
78
- l.close();
79
- }
80
- }
81
- this.levels = newLevels;
82
- this.addLevel();
83
- if (level.selected) {
84
- this.changed.next(level.selected);
85
- }
86
- else {
87
- this.changed.next(this.levels[level.level - 1]?.selected || null);
88
- }
89
- }
90
- async prepare(value) {
91
- // console.log('prepare', value);
92
- const levels = [];
93
- let cur = (await firstValueFrom(this.qs.filter({ id: value, ...this.filter }).get()))[0];
94
- levels.push(cur);
95
- let nlev = 0;
96
- while (cur.parent !== null) {
97
- cur = (await firstValueFrom(this.qs
98
- .filter({
99
- id: cur.parent,
100
- ...this.filter,
101
- })
102
- .get()))[0];
103
- levels.push(cur);
104
- nlev++;
105
- if (nlev > this.maxLevel) {
106
- throw Error('Max level error, could not find root');
107
- }
108
- }
109
- for (let i = levels.length - 1; i >= 0; i--) {
110
- const lv = await this.addLevel();
111
- if (lv !== null) {
112
- lv.selected = levels[i].id;
113
- lv.fc.setValue(levels[i].id, { emitEvent: false });
114
- }
115
- }
116
- if (this.levels.length <= this.maxLevel) {
117
- await this.addLevel();
118
- }
119
- }
120
- reset() { }
121
- }
122
- export class ModelListTreeFilterComponent {
123
- constructor() {
124
- this.classes = '';
125
- }
126
- async ngOnInit() {
127
- this.tree = new Tree(this.filter.queryset, this.filter.maxLevel, this.filter.display, this.filter.filter);
128
- if (this.filter.get()) {
129
- await this.tree.prepare(this.filter.get()?.value);
130
- }
131
- else {
132
- await this.tree.addLevel();
133
- }
134
- this.tree.changed.pipe(debounceTime(250)).subscribe((val) => {
135
- // console.log('changed', val);
136
- if (val === null) {
137
- this.filter.clear();
138
- this.list.filters.update();
139
- }
140
- else {
141
- if (this.filter.set(val, '')) {
142
- this.list.filters.update();
143
- }
144
- }
145
- });
146
- // this.tree.changed.subscribe((selected) => {
147
- // console.log('tree changed', selected);
148
- // this.filter.set(selected, '');
149
- // });
150
- // if (this.filter.getValue()) {
151
- // console.log('filter value', this.filter.getValue());
152
- // await this.tree.prepare(this.filter.getValue() as number);
153
- // } else {
154
- // await this.tree.addLevel();
155
- // }
156
- }
157
- disable() {
158
- this.filter.enabled = false;
159
- this.list.filters.update();
160
- }
161
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ModelListTreeFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
162
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: ModelListTreeFilterComponent, isStandalone: true, selector: "data-model-list-tree-filter", inputs: { list: "list", filter: "filter", classes: "classes" }, ngImport: i0, template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <div class=\"levelselect\" *ngFor=\"let l of tree.levels\">\n <select class=\"form-select form-select-sm\" [formControl]=\"l.fc\">\n <option value=\"\">{{filter.help}}</option>\n <option *ngFor=\"let ch of l.choices\" [value]=\"ch.value\">{{ch.desc}}</option>\n </select>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
163
- }
164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ModelListTreeFilterComponent, decorators: [{
165
- type: Component,
166
- args: [{ selector: 'data-model-list-tree-filter', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <div class=\"levelselect\" *ngFor=\"let l of tree.levels\">\n <select class=\"form-select form-select-sm\" [formControl]=\"l.fc\">\n <option value=\"\">{{filter.help}}</option>\n <option *ngFor=\"let ch of l.choices\" [value]=\"ch.value\">{{ch.desc}}</option>\n </select>\n </div>\n</div>" }]
167
- }], ctorParameters: () => [], propDecorators: { list: [{
168
- type: Input
169
- }], filter: [{
170
- type: Input
171
- }], classes: [{
172
- type: Input
173
- }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC10cmVlLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmlsdGVycy9maWx0ZXJzL21vZGVsLWxpc3QtdHJlZS1maWx0ZXIvbW9kZWwtbGlzdC10cmVlLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmlsdGVycy9maWx0ZXJzL21vZGVsLWxpc3QtdHJlZS1maWx0ZXIvbW9kZWwtbGlzdC10cmVlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUd6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7QUFHM0UsTUFBTSxLQUFLO0lBUVQsWUFDRSxJQUFhLEVBQ2IsS0FBYSxFQUNiLE9BQTBDO1FBRTFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxH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QUM5QywyQ0FBMkM7UUFDM0MsbUNBQW1DO1FBQ25DLE1BQU07UUFDTixnQ0FBZ0M7UUFDaEMseURBQXlEO1FBQ3pELCtEQUErRDtRQUMvRCxXQUFXO1FBQ1gsZ0NBQWdDO1FBQ2hDLElBQUk7SUFDTixDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDOzhHQWxEVSw0QkFBNEI7a0dBQTVCLDRCQUE0Qix1SkM1SnpDLGlnQkFVTSx5RERnSk0sWUFBWSx5UEFBRSxtQkFBbUI7OzJGQUVoQyw0QkFBNEI7a0JBUHhDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBRzNCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQzt3REFLNUIsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGVsTGlzdCB9IGZyb20gJy4uLy4uLy4uL21vZGVsLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBNb2RlbExpc3RUcmVlRmlsdGVyIH0gZnJvbSAnLi9tb2RlbC1saXN0LXRyZWUtZmlsdGVyJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhL2RhdGEtbW9kZWwnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpcnN0VmFsdWVGcm9tLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbHRlckRhdGEsIFF1ZXJ5c2V0IH0gZnJvbSAnLi4vLi4vLi4vLi4vZGF0YS9kYXRhLXF1ZXJ5JztcblxuY2xhc3MgTGV2ZWw8VCBleHRlbmRzIERhdGFNb2RlbD4ge1xuICBwdWJsaWMgbGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIHRyZWU6IFRyZWU8VD47XG4gIHB1YmxpYyBjaG9pY2VzOiB7IHZhbHVlOiBudW1iZXI7IGRlc2M6IHN0cmluZyB9W107XG4gIHB1YmxpYyBmYzogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBzZWxlY3RlZCE6IG51bWJlcjtcbiAgcHVibGljIHN1YnM6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0cmVlOiBUcmVlPFQ+LFxuICAgIGxldmVsOiBudW1iZXIsXG4gICAgY2hvaWNlczogeyB2YWx1ZTogbnVtYmVyOyBkZXNjOiBzdHJpbmcgfVtdXG4gICkge1xuICAgIHRoaXMudHJlZSA9IHRyZWU7XG4gICAgdGhpcy5sZXZlbCA9IGxldmVsO1xuICAgIHRoaXMuZmMgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICAgIHRoaXMuY2hvaWNlcyA9IGNob2ljZXM7XG4gICAgdGhpcy5zdWJzID0gdGhpcy5mYy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkICE9PSB2YWwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHZhbDtcbiAgICAgICAgdGhpcy50cmVlLnVwZGF0ZWQodGhpcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cblxuY2xhc3MgVHJlZTxUIGV4dGVuZHMgRGF0YU1vZGVsPiB7XG4gIGxldmVsczogTGV2ZWw8VD5bXSA9IFtdO1xuICBjaGFuZ2VkOiBTdWJqZWN0PG51bWJlciB8IG51bGw+ID0gbmV3IFN1YmplY3Q8bnVtYmVyIHwgbnVsbD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHFzOiBRdWVyeXNldDxUPixcbiAgICBwcml2YXRlIG1heExldmVsOiBudW1iZXIsXG4gICAgcHJpdmF0ZSBkaXNwbGF5OiBhbnksXG4gICAgcHJpdmF0ZSBmaWx0ZXI6IEZpbHRlckRhdGFcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDb25kaXRpb25uYWx5IGFkZCBsZXZlbCB0byBjdXJyZW50IHRyZWUuXG4gICAqXG4gICAqIC0gaWYgcHJldmlvdXMgbGV2ZWwgaGF2ZSBub24tZW1wdHkgc2VsZWN0ZWQgdmFsdWVcbiAgICogLSBpZiBjdXJyZW50IGxldmVsIGNob2ljZXMgYXJlIG5vbiBlbXB0eVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFkZExldmVsKGZwYXJlbnQ/OiBudW1iZXIpOiBQcm9taXNlPExldmVsPFQ+IHwgbnVsbD4ge1xuICAgIGxldCB2YWx1ZXM6IFRbXSA9IFtdO1xuICAgIGlmICh0aGlzLmxldmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhbHVlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLnFzXG4gICAgICAgICAgLmZpbHRlcih7IGxldmVsOiB0aGlzLmxldmVscy5sZW5ndGgsIHBhcmVudDogJ251bGwnLCAuLi50aGlzLmZpbHRlciB9KVxuICAgICAgICAgIC5nZXQoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFyZW50ID0gZnBhcmVudFxuICAgICAgICA/IGZwYXJlbnRcbiAgICAgICAgOiB0aGlzLmxldmVsc1t0aGlzLmxldmVscy5sZW5ndGggLSAxXS5zZWxlY3RlZDtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgdmFsdWVzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgdGhpcy5xc1xuICAgICAgICAgICAgLmZpbHRlcih7XG4gICAgICAgICAgICAgIGxldmVsOiB0aGlzLmxldmVscy5sZW5ndGgsXG4gICAgICAgICAgICAgIHBhcmVudDogdGhpcy5sZXZlbHNbdGhpcy5sZXZlbHMubGVuZ3RoIC0gMV0uc2VsZWN0ZWQgfHwgJ251bGwnLFxuICAgICAgICAgICAgICAuLi50aGlzLmZpbHRlcixcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZ2V0KClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IG5ldyBMZXZlbCh0aGlzLCB0aGlzLmxldmVscy5sZW5ndGgsIFtdKTtcbiAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgbGV2ZWwuY2hvaWNlcy5wdXNoKHsgdmFsdWU6IHYuaWQgYXMgbnVtYmVyLCBkZXNjOiB0aGlzLmRpc3BsYXkodikgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgIHJldHVybiBsZXZlbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlZChsZXZlbDogTGV2ZWw8VD4pIHtcbiAgICBjb25zdCBuZXdMZXZlbHM6IExldmVsPFQ+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGwgb2YgdGhpcy5sZXZlbHMpIHtcbiAgICAgIGlmIChsLmxldmVsIDw9IGxldmVsLmxldmVsKSB7XG4gICAgICAgIG5ld0xldmVscy5wdXNoKGwpO1xuICAgICAgfSBlbHNlIGlmIChsLmxldmVsID4gbGV2ZWwubGV2ZWwpIHtcbiAgICAgICAgbC5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxldmVscyA9IG5ld0xldmVscztcbiAgICB0aGlzLmFkZExldmVsKCk7XG4gICAgaWYgKGxldmVsLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmNoYW5nZWQubmV4dChsZXZlbC5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhbmdlZC5uZXh0KHRoaXMubGV2ZWxzW2xldmVsLmxldmVsIC0gMV0/LnNlbGVjdGVkIHx8IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncHJlcGFyZScsIHZhbHVlKTtcbiAgICBjb25zdCBsZXZlbHM6IFRbXSA9IFtdO1xuICAgIGxldCBjdXIgPSAoXG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnFzLmZpbHRlcih7IGlkOiB2YWx1ZSwgLi4udGhpcy5maWx0ZXIgfSkuZ2V0KCkpXG4gICAgKVswXTtcbiAgICBsZXZlbHMucHVzaChjdXIpO1xuICAgIGxldCBubGV2ID0gMDtcbiAgICB3aGlsZSAoKGN1ciBhcyBhbnkpLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgY3VyID0gKFxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLnFzXG4gICAgICAgICAgICAuZmlsdGVyKHtcbiAgICAgICAgICAgICAgaWQ6IChjdXIgYXMgYW55KS5wYXJlbnQsXG4gICAgICAgICAgICAgIC4uLnRoaXMuZmlsdGVyLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5nZXQoKVxuICAgICAgICApXG4gICAgICApWzBdO1xuICAgICAgbGV2ZWxzLnB1c2goY3VyKTtcbiAgICAgIG5sZXYrKztcbiAgICAgIGlmIChubGV2ID4gdGhpcy5tYXhMZXZlbCkge1xuICAgICAgICB0aHJvdyBFcnJvcignTWF4IGxldmVsIGVycm9yLCBjb3VsZCBub3QgZmluZCByb290Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBsZXZlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGx2ID0gYXdhaXQgdGhpcy5hZGRMZXZlbCgpO1xuICAgICAgaWYgKGx2ICE9PSBudWxsKSB7XG4gICAgICAgIGx2LnNlbGVjdGVkID0gbGV2ZWxzW2ldLmlkIGFzIG51bWJlcjtcbiAgICAgICAgbHYuZmMuc2V0VmFsdWUobGV2ZWxzW2ldLmlkIGFzIG51bWJlciwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5sZXZlbHMubGVuZ3RoIDw9IHRoaXMubWF4TGV2ZWwpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkTGV2ZWwoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7fVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRhLW1vZGVsLWxpc3QtdHJlZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kZWwtbGlzdC10cmVlLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGVsLWxpc3QtdHJlZS1maWx0ZXIuY29tcG9uZW50LnNhc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsTGlzdFRyZWVGaWx0ZXJDb21wb25lbnQ8VCBleHRlbmRzIERhdGFNb2RlbD5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgQElucHV0KCkgcHVibGljIGxpc3QhOiBNb2RlbExpc3Q8YW55PjtcbiAgQElucHV0KCkgcHVibGljIGZpbHRlciE6IE1vZGVsTGlzdFRyZWVGaWx0ZXI8VD47XG4gIEBJbnB1dCgpIHB1YmxpYyBjbGFzc2VzOiBzdHJpbmdbXSB8IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgdHJlZSE6IFRyZWU8VD47XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRyZWUgPSBuZXcgVHJlZShcbiAgICAgIHRoaXMuZmlsdGVyLnF1ZXJ5c2V0LFxuICAgICAgdGhpcy5maWx0ZXIubWF4TGV2ZWwsXG4gICAgICB0aGlzLmZpbHRlci5kaXNwbGF5LFxuICAgICAgdGhpcy5maWx0ZXIuZmlsdGVyXG4gICAgKTtcbiAgICBpZiAodGhpcy5maWx0ZXIuZ2V0KCkpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJlZS5wcmVwYXJlKHRoaXMuZmlsdGVyLmdldCgpPy52YWx1ZSBhcyBudW1iZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnRyZWUuYWRkTGV2ZWwoKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyZWUuY2hhbmdlZC5waXBlKGRlYm91bmNlVGltZSgyNTApKS5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coJ2NoYW5nZWQnLCB2YWwpO1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmZpbHRlci5jbGVhcigpO1xuICAgICAgICB0aGlzLmxpc3QuZmlsdGVycy51cGRhdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlci5zZXQodmFsLCAnJykpIHtcbiAgICAgICAgICB0aGlzLmxpc3QuZmlsdGVycy51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gdGhpcy50cmVlLmNoYW5nZWQuc3Vic2NyaWJlKChzZWxlY3RlZCkgPT4ge1xuICAgIC8vICAgY29uc29sZS5sb2coJ3RyZWUgY2hhbmdlZCcsIHNlbGVjdGVkKTtcbiAgICAvLyAgIHRoaXMuZmlsdGVyLnNldChzZWxlY3RlZCwgJycpO1xuICAgIC8vIH0pO1xuICAgIC8vIGlmICh0aGlzLmZpbHRlci5nZXRWYWx1ZSgpKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZygnZmlsdGVyIHZhbHVlJywgdGhpcy5maWx0ZXIuZ2V0VmFsdWUoKSk7XG4gICAgLy8gICBhd2FpdCB0aGlzLnRyZWUucHJlcGFyZSh0aGlzLmZpbHRlci5nZXRWYWx1ZSgpIGFzIG51bWJlcik7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIGF3YWl0IHRoaXMudHJlZS5hZGRMZXZlbCgpO1xuICAgIC8vIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlKCkge1xuICAgIHRoaXMuZmlsdGVyLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxpc3QuZmlsdGVycy51cGRhdGUoKTtcbiAgfVxufVxuIiwiXG48ZGl2IGNsYXNzPVwiZmlsdGVyaXRlbVwiIFtuZ0NsYXNzXT1cImZpbHRlci5kaXNwbGF5Q2xhc3NlcyB8fCBjbGFzc2VzXCI+XG4gIDxkaXYgY2xhc3M9XCJ0cmFzaCBmbG9hdC1lbmRcIiAoY2xpY2spPVwiZGlzYWJsZSgpXCI+PGkgY2xhc3M9XCJiaSBiaS10cmFzaFwiPjwvaT48L2Rpdj5cbiAgPGxhYmVsPnt7ZmlsdGVyLmxhYmVsfX08L2xhYmVsPlxuICA8ZGl2IGNsYXNzPVwibGV2ZWxzZWxlY3RcIiAqbmdGb3I9XCJsZXQgbCBvZiB0cmVlLmxldmVsc1wiPlxuICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIFtmb3JtQ29udHJvbF09XCJsLmZjXCI+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3tmaWx0ZXIuaGVscH19PC9vcHRpb24+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjaCBvZiBsLmNob2ljZXNcIiBbdmFsdWVdPVwiY2gudmFsdWVcIj57e2NoLmRlc2N9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -1,18 +0,0 @@
1
- import { ModelListAutocompleteFilter, } from '../model-list-autocomplete-filter/model-list-autocomplete-filter';
2
- export class ModelListTreeFilter extends ModelListAutocompleteFilter {
3
- constructor(params) {
4
- super(params);
5
- this.maxLevel = 5;
6
- this.type = 'tree';
7
- if (this.label == '') {
8
- this.label = 'Sélectionnez dans la hiérarchie';
9
- }
10
- if (this.help == '') {
11
- this.help = 'Texte à rechercher';
12
- }
13
- if (params.maxLevel) {
14
- this.maxLevel = params.maxLevel;
15
- }
16
- }
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC10cmVlLWZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9tb2RlbGxpc3QvbW9kZWwtbGlzdC1maWx0ZXJzL2ZpbHRlcnMvbW9kZWwtbGlzdC10cmVlLWZpbHRlci9tb2RlbC1saXN0LXRyZWUtZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCwyQkFBMkIsR0FFNUIsTUFBTSxrRUFBa0UsQ0FBQztBQU8xRSxNQUFNLE9BQU8sbUJBQ1gsU0FBUSwyQkFBOEI7SUFLdEMsWUFBWSxNQUE4QjtRQUN4QyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFIVCxhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBSTFCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLGlDQUFpQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhL2RhdGEtbW9kZWwnO1xuaW1wb3J0IHtcbiAgTW9kZWxMaXN0QXV0b2NvbXBsZXRlRmlsdGVyLFxuICBNb2RlbExpc3RBdXRvY29tcGxldGVQYXJhbXMsXG59IGZyb20gJy4uL21vZGVsLWxpc3QtYXV0b2NvbXBsZXRlLWZpbHRlci9tb2RlbC1saXN0LWF1dG9jb21wbGV0ZS1maWx0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsTGlzdFRyZWVQYXJhbXM8VCBleHRlbmRzIERhdGFNb2RlbD5cbiAgZXh0ZW5kcyBNb2RlbExpc3RBdXRvY29tcGxldGVQYXJhbXM8VD4ge1xuICBtYXhMZXZlbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsTGlzdFRyZWVGaWx0ZXI8VCBleHRlbmRzIERhdGFNb2RlbD5cbiAgZXh0ZW5kcyBNb2RlbExpc3RBdXRvY29tcGxldGVGaWx0ZXI8VD5cbiAgaW1wbGVtZW50cyBNb2RlbExpc3RUcmVlUGFyYW1zPFQ+XG57XG4gIHB1YmxpYyBtYXhMZXZlbDogbnVtYmVyID0gNTtcblxuICBjb25zdHJ1Y3RvcihwYXJhbXM6IE1vZGVsTGlzdFRyZWVQYXJhbXM8VD4pIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMudHlwZSA9ICd0cmVlJztcbiAgICBpZiAodGhpcy5sYWJlbCA9PSAnJykge1xuICAgICAgdGhpcy5sYWJlbCA9ICdTw6lsZWN0aW9ubmV6IGRhbnMgbGEgaGnDqXJhcmNoaWUnO1xuICAgIH1cbiAgICBpZiAodGhpcy5oZWxwID09ICcnKSB7XG4gICAgICB0aGlzLmhlbHAgPSAnVGV4dGUgw6AgcmVjaGVyY2hlcic7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubWF4TGV2ZWwpIHtcbiAgICAgIHRoaXMubWF4TGV2ZWwgPSBwYXJhbXMubWF4TGV2ZWw7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,19 +0,0 @@
1
- export class ModelListFilterGroup {
2
- constructor(params) {
3
- this.name = '';
4
- this.label = '';
5
- this.desc = '';
6
- this.position = 0;
7
- this.allowed = true;
8
- this.enabled = true;
9
- this.filters = [];
10
- this.name = params.name || '';
11
- this.label = params.label || '';
12
- this.desc = params.desc || '';
13
- this.position = params.position || 0;
14
- this.allowed = params.allowed || true;
15
- this.enabled = params.enabled || true;
16
- this.filters = params.filters || [];
17
- }
18
- }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC1maWx0ZXItZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmlsdGVycy9tb2RlbC1saXN0LWZpbHRlci1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sb0JBQW9CO0lBUy9CLFlBQVksTUFBcUM7UUFSMUMsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixZQUFPLEdBQVksSUFBSSxDQUFDO1FBQ3hCLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsWUFBTyxHQUFzQixFQUFFLENBQUM7UUFHckMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbExpc3RGaWx0ZXIgfSBmcm9tICcuL21vZGVsLWxpc3QtZmlsdGVyJztcblxuZXhwb3J0IGNsYXNzIE1vZGVsTGlzdEZpbHRlckdyb3VwIHtcbiAgcHVibGljIG5hbWU6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgbGFiZWw6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgZGVzYzogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBwb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgcHVibGljIGFsbG93ZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBmaWx0ZXJzOiBNb2RlbExpc3RGaWx0ZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogUGFydGlhbDxNb2RlbExpc3RGaWx0ZXJHcm91cD4pIHtcbiAgICB0aGlzLm5hbWUgPSBwYXJhbXMubmFtZSB8fCAnJztcbiAgICB0aGlzLmxhYmVsID0gcGFyYW1zLmxhYmVsIHx8ICcnO1xuICAgIHRoaXMuZGVzYyA9IHBhcmFtcy5kZXNjIHx8ICcnO1xuICAgIHRoaXMucG9zaXRpb24gPSBwYXJhbXMucG9zaXRpb24gfHwgMDtcbiAgICB0aGlzLmFsbG93ZWQgPSBwYXJhbXMuYWxsb3dlZCB8fCB0cnVlO1xuICAgIHRoaXMuZW5hYmxlZCA9IHBhcmFtcy5lbmFibGVkIHx8IHRydWU7XG4gICAgdGhpcy5maWx0ZXJzID0gcGFyYW1zLmZpbHRlcnMgfHwgW107XG4gIH1cbn1cbiJdfQ==
@@ -1,157 +0,0 @@
1
- import { ReplaySubject } from 'rxjs';
2
- export class ModelListFilter {
3
- constructor(params) {
4
- this.pristine = true;
5
- this.multi = false;
6
- /** Single current value */
7
- this._value = null;
8
- /** Multiple current value */
9
- this._mvalue = new Map();
10
- /** Single current value observable */
11
- this._current = new ReplaySubject(1);
12
- /** Multiple current value observable */
13
- this._mcurrent = new ReplaySubject(1);
14
- this.name = params.name;
15
- this.field = params.field;
16
- this.label = params.label || '';
17
- this.help = params.help || '';
18
- this.desc = params.desc;
19
- this.displayClasses = params.displayClasses;
20
- this.allowed = false;
21
- this.enabled = false;
22
- this.type = 'text';
23
- this.default = params.default;
24
- // FIXME: add value init
25
- }
26
- get mcurrent$() {
27
- return this._mcurrent.asObservable();
28
- }
29
- get current$() {
30
- return this._current.asObservable();
31
- }
32
- get valueChanges() {
33
- if (this.multi) {
34
- return this._mcurrent.asObservable();
35
- }
36
- return this._current.asObservable();
37
- }
38
- get summary() {
39
- if (this.multi) {
40
- return Array.from(this._mvalue.values()).join(', ');
41
- }
42
- else {
43
- return this._value?.desc || '';
44
- }
45
- }
46
- updateFilter(filter) {
47
- if (this.multi && this._mvalue.size > 0) {
48
- filter[this.field] = this.getMultiValue();
49
- }
50
- else if (!this.multi &&
51
- this._value !== undefined &&
52
- this._value !== null) {
53
- filter[this.field] = this.getValue();
54
- }
55
- }
56
- clear(notify = true) {
57
- if (this.multi) {
58
- this._mvalue = new Map();
59
- }
60
- else {
61
- this._value = null;
62
- }
63
- this.notify(notify);
64
- }
65
- set(value, desc, notify = true) {
66
- if (this.multi) {
67
- return this.mset(value, desc, notify);
68
- }
69
- return this.sset(value, desc, notify);
70
- }
71
- unset(value, desc, notify = true) {
72
- if (this.multi) {
73
- return this.munset(value, desc, notify);
74
- }
75
- return this.sunset(value, desc, notify);
76
- }
77
- toggle(value, desc, notify = true) {
78
- if (this.multi) {
79
- return this.mtoggle(value, desc, notify);
80
- }
81
- return this.stoggle(value, desc, notify);
82
- }
83
- getValue() {
84
- return `${this._value?.value}`;
85
- }
86
- get() {
87
- return this._value;
88
- }
89
- mtoggle(value, desc, notify = true) {
90
- if (this._mvalue.has(`${value}`)) {
91
- this._mvalue.delete(`${value}`);
92
- }
93
- else {
94
- this._mvalue.set(`${value}`, desc);
95
- }
96
- this.notify(notify);
97
- return true;
98
- }
99
- mset(value, desc, notify = true) {
100
- if (!this._mvalue.has(`${value}`)) {
101
- this._mvalue.set(`${value}`, desc);
102
- this.notify(notify);
103
- return true;
104
- }
105
- return false;
106
- }
107
- munset(value, desc, notify = true) {
108
- if (this._mvalue.has(`${value}`)) {
109
- this._mvalue.delete(`${value}`);
110
- this.notify(notify);
111
- return true;
112
- }
113
- return false;
114
- }
115
- stoggle(value, desc, notify = true) {
116
- if (this._value !== null && this._value.value === value) {
117
- this._value = null;
118
- }
119
- else {
120
- this._value = { value, desc };
121
- }
122
- this.notify(notify);
123
- return true;
124
- }
125
- sset(value, desc, notify = true) {
126
- if (!(this._value !== null && this._value.value === value)) {
127
- this._value = { value, desc };
128
- this.notify(notify);
129
- return true;
130
- }
131
- return false;
132
- }
133
- sunset(value, desc, notify = true) {
134
- if (this._value !== null) {
135
- this._value = null;
136
- this.notify(notify);
137
- return true;
138
- }
139
- return false;
140
- }
141
- getMultiValue() {
142
- return Array.from(this._mvalue.keys()).join(',');
143
- }
144
- notify(notify = true) {
145
- if (notify) {
146
- if (this.multi) {
147
- this._mcurrent.next(Array.from(this._mvalue.entries()).map(([k, v]) => {
148
- return { desc: v, value: k };
149
- }));
150
- }
151
- else {
152
- this._current.next(this._value);
153
- }
154
- }
155
- }
156
- }
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC1maWx0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmlsdGVycy9tb2RlbC1saXN0LWZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBaUJqRCxNQUFNLE9BQU8sZUFBZTtJQXdCMUIsWUFBWSxNQUE2QjtRQWJsQyxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFHckIsMkJBQTJCO1FBQ2pCLFdBQU0sR0FBMkIsSUFBSSxDQUFDO1FBQ2hELDZCQUE2QjtRQUNuQixZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDOUMsc0NBQXNDO1FBQzVCLGFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBeUIsQ0FBQyxDQUFDLENBQUM7UUFDbEUsd0NBQXdDO1FBQzlCLGNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBb0IsQ0FBQyxDQUFDLENBQUM7UUFHNUQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNy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LENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQVUsRUFBRSxJQUFZLEVBQUUsU0FBa0IsSUFBSTtRQUM3RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxhQUFhO1FBQ25CLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyxNQUFNLENBQUMsU0FBa0IsSUFBSTtRQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJEYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXF1ZXJ5JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZJTFRFUl9UWVBFIH0gZnJvbSAnLi9maWx0ZXJzL2ZpbHRlcnR5cGVzJztcbmltcG9ydCB7IElEaXNwRWRpdENob2ljZSB9IGZyb20gJy4uLy4uL2Rpc3BlZGl0L2Rpc3BlZGl0L2Rpc3BlZGl0LmNvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2RlbExpc3RGaWx0ZXJHcm91cCB9IGZyb20gJy4vbW9kZWwtbGlzdC1maWx0ZXItZ3JvdXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsTGlzdEZpbHRlclBhcmFtcyB7XG4gIG5hbWU6IHN0cmluZztcbiAgZmllbGQ6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGhlbHA/OiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xuICBkZXNjPzogYW55O1xuICBkZWZhdWx0PzogYW55O1xuICBkaXNwbGF5Q2xhc3Nlcz86IHN0cmluZ1tdIHwgc3RyaW5nO1xuICBncm91cD86IE1vZGVsTGlzdEZpbHRlckdyb3VwO1xufVxuXG5leHBvcnQgY2xhc3MgTW9kZWxMaXN0RmlsdGVyIGltcGxlbWVudHMgTW9kZWxMaXN0RmlsdGVyUGFyYW1zIHtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgcHVibGljIGZpZWxkOiBzdHJpbmc7XG4gIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xuICBwdWJsaWMgaGVscDogc3RyaW5nO1xuICBwdWJsaWMgZGVzYz86IGFueTtcbiAgcHVibGljIGRlZmF1bHQ/OiBhbnk7XG4gIHB1YmxpYyB0eXBlOiBGSUxURVJfVFlQRTtcbiAgcHVibGljIGFsbG93ZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBlbmFibGVkOiBib29sZWFuO1xuICBwdWJsaWMgZGlzcGxheUNsYXNzZXM/OiBzdHJpbmdbXSB8IHN0cmluZztcbiAgcHVibGljIHByaXN0aW5lID0gdHJ1ZTtcbiAgcHVibGljIG11bHRpID0gZmFsc2U7XG4gIHB1YmxpYyBncm91cD86IE1vZGVsTGlzdEZpbHRlckdyb3VwO1xuXG4gIC8qKiBTaW5nbGUgY3VycmVudCB2YWx1ZSAqL1xuICBwcm90ZWN0ZWQgX3ZhbHVlOiBJRGlzcEVkaXRDaG9pY2UgfCBudWxsID0gbnVsbDtcbiAgLyoqIE11bHRpcGxlIGN1cnJlbnQgdmFsdWUgKi9cbiAgcHJvdGVjdGVkIF9tdmFsdWUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogU2luZ2xlIGN1cnJlbnQgdmFsdWUgb2JzZXJ2YWJsZSAqL1xuICBwcm90ZWN0ZWQgX2N1cnJlbnQgPSBuZXcgUmVwbGF5U3ViamVjdDxJRGlzcEVkaXRDaG9pY2UgfCBudWxsPigxKTtcbiAgLyoqIE11bHRpcGxlIGN1cnJlbnQgdmFsdWUgb2JzZXJ2YWJsZSAqL1xuICBwcm90ZWN0ZWQgX21jdXJyZW50ID0gbmV3IFJlcGxheVN1YmplY3Q8SURpc3BFZGl0Q2hvaWNlW10+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogTW9kZWxMaXN0RmlsdGVyUGFyYW1zKSB7XG4gICAgdGhpcy5uYW1lID0gcGFyYW1zLm5hbWU7XG4gICAgdGhpcy5maWVsZCA9IHBhcmFtcy5maWVsZDtcbiAgICB0aGlzLmxhYmVsID0gcGFyYW1zLmxhYmVsIHx8ICcnO1xuICAgIHRoaXMuaGVscCA9IHBhcmFtcy5oZWxwIHx8ICcnO1xuICAgIHRoaXMuZGVzYyA9IHBhcmFtcy5kZXNjO1xuICAgIHRoaXMuZGlzcGxheUNsYXNzZXMgPSBwYXJhbXMuZGlzcGxheUNsYXNzZXM7XG4gICAgdGhpcy5hbGxvd2VkID0gZmFsc2U7XG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy50eXBlID0gJ3RleHQnO1xuICAgIHRoaXMuZGVmYXVsdCA9IHBhcmFtcy5kZWZhdWx0O1xuICAgIC8vIEZJWE1FOiBhZGQgdmFsdWUgaW5pdFxuICB9XG5cbiAgcHVibGljIGdldCBtY3VycmVudCQoKTogT2JzZXJ2YWJsZTxJRGlzcEVkaXRDaG9pY2VbXT4ge1xuICAgIHJldHVybiB0aGlzLl9tY3VycmVudC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudCQoKTogT2JzZXJ2YWJsZTxJRGlzcEVkaXRDaG9pY2UgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlQ2hhbmdlcygpOiBPYnNlcnZhYmxlPFxuICAgIElEaXNwRWRpdENob2ljZSB8IElEaXNwRWRpdENob2ljZVtdIHwgbnVsbFxuICA+IHtcbiAgICBpZiAodGhpcy5tdWx0aSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21jdXJyZW50LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm11bHRpKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9tdmFsdWUudmFsdWVzKCkpLmpvaW4oJywgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZT8uZGVzYyB8fCAnJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmlsdGVyKGZpbHRlcjogRmlsdGVyRGF0YSkge1xuICAgIGlmICh0aGlzLm11bHRpICYmIHRoaXMuX212YWx1ZS5zaXplID4gMCkge1xuICAgICAgZmlsdGVyW3RoaXMuZmllbGRdID0gdGhpcy5nZXRNdWx0aVZhbHVlKCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICF0aGlzLm11bHRpICYmXG4gICAgICB0aGlzLl92YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLl92YWx1ZSAhPT0gbnVsbFxuICAgICkge1xuICAgICAgZmlsdGVyW3RoaXMuZmllbGRdID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhcihub3RpZnk6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMubXVsdGkpIHtcbiAgICAgIHRoaXMuX212YWx1ZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5ub3RpZnkobm90aWZ5KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQodmFsdWU6IGFueSwgZGVzYzogc3RyaW5nLCBub3RpZnk6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubXVsdGkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1zZXQodmFsdWUsIGRlc2MsIG5vdGlmeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNzZXQodmFsdWUsIGRlc2MsIG5vdGlmeSk7XG4gIH1cblxuICBwdWJsaWMgdW5zZXQodmFsdWU6IGFueSwgZGVzYzogc3RyaW5nLCBub3RpZnk6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubXVsdGkpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bnNldCh2YWx1ZSwgZGVzYywgbm90aWZ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3Vuc2V0KHZhbHVlLCBkZXNjLCBub3RpZnkpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZSh2YWx1ZTogYW55LCBkZXNjOiBzdHJpbmcsIG5vdGlmeTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5tdWx0aSkge1xuICAgICAgcmV0dXJuIHRoaXMubXRvZ2dsZSh2YWx1ZSwgZGVzYywgbm90aWZ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RvZ2dsZSh2YWx1ZSwgZGVzYywgbm90aWZ5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWx1ZSgpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiBgJHt0aGlzLl92YWx1ZT8udmFsdWV9YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoKTogSURpc3BFZGl0Q2hvaWNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBtdG9nZ2xlKHZhbHVlOiBhbnksIGRlc2M6IHN0cmluZywgbm90aWZ5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9tdmFsdWUuaGFzKGAke3ZhbHVlfWApKSB7XG4gICAgICB0aGlzLl9tdmFsdWUuZGVsZXRlKGAke3ZhbHVlfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tdmFsdWUuc2V0KGAke3ZhbHVlfWAsIGRlc2MpO1xuICAgIH1cbiAgICB0aGlzLm5vdGlmeShub3RpZnkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBtc2V0KHZhbHVlOiBhbnksIGRlc2M6IHN0cmluZywgbm90aWZ5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fbXZhbHVlLmhhcyhgJHt2YWx1ZX1gKSkge1xuICAgICAgdGhpcy5fbXZhbHVlLnNldChgJHt2YWx1ZX1gLCBkZXNjKTtcbiAgICAgIHRoaXMubm90aWZ5KG5vdGlmeSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtdW5zZXQodmFsdWU6IGFueSwgZGVzYzogc3RyaW5nLCBub3RpZnk6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX212YWx1ZS5oYXMoYCR7dmFsdWV9YCkpIHtcbiAgICAgIHRoaXMuX212YWx1ZS5kZWxldGUoYCR7dmFsdWV9YCk7XG4gICAgICB0aGlzLm5vdGlmeShub3RpZnkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvZ2dsZSh2YWx1ZTogYW55LCBkZXNjOiBzdHJpbmcsIG5vdGlmeTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IG51bGwgJiYgdGhpcy5fdmFsdWUudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0geyB2YWx1ZSwgZGVzYyB9O1xuICAgIH1cbiAgICB0aGlzLm5vdGlmeShub3RpZnkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzc2V0KHZhbHVlOiBhbnksIGRlc2M6IHN0cmluZywgbm90aWZ5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghKHRoaXMuX3ZhbHVlICE9PSBudWxsICYmIHRoaXMuX3ZhbHVlLnZhbHVlID09PSB2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0geyB2YWx1ZSwgZGVzYyB9O1xuICAgICAgdGhpcy5ub3RpZnkobm90aWZ5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHN1bnNldCh2YWx1ZTogYW55LCBkZXNjOiBzdHJpbmcsIG5vdGlmeTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMubm90aWZ5KG5vdGlmeSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNdWx0aVZhbHVlKCk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fbXZhbHVlLmtleXMoKSkuam9pbignLCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3RpZnkobm90aWZ5OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmIChub3RpZnkpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpKSB7XG4gICAgICAgIHRoaXMuX21jdXJyZW50Lm5leHQoXG4gICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLl9tdmFsdWUuZW50cmllcygpKS5tYXAoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgZGVzYzogdiwgdmFsdWU6IGsgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQubmV4dCh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=