design-angular-kit 1.3.2 → 1.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 (163) hide show
  1. package/fesm2022/design-angular-kit.mjs +621 -418
  2. package/fesm2022/design-angular-kit.mjs.map +1 -1
  3. package/lib/components/core/avatar/avatar-extra-text.directive.d.ts +6 -0
  4. package/lib/components/core/avatar/avatar-group/avatar-group.component.d.ts +5 -0
  5. package/lib/components/core/avatar/avatar-presence.directive.d.ts +17 -0
  6. package/lib/components/core/avatar/avatar-status.directive.d.ts +17 -0
  7. package/lib/components/core/avatar/avatar-wrapper.directive.d.ts +9 -0
  8. package/lib/components/core/avatar/avatar.module.d.ts +5 -1
  9. package/lib/components/core/list/list-item/list-item.component.d.ts +4 -1
  10. package/lib/components/core/video-player/video-player.config.d.ts +18 -18
  11. package/lib/components/form/transfer/store/transfer.reducers.d.ts +35 -35
  12. package/lib/components/navigation/footer/footer.component.d.ts +6 -0
  13. package/lib/design-angular-kit.module.d.ts +13 -12
  14. package/package.json +11 -10
  15. package/public_api.d.ts +7 -2
  16. package/schematics/ng-add/index.js +1 -1
  17. package/schematics/ng-add/index.js.map +1 -1
  18. package/schematics/ng-add/rules/setup-project/add-animations.js +1 -2
  19. package/schematics/ng-add/rules/setup-project/add-animations.js.map +1 -1
  20. package/schematics/ng-add/rules/setup-project/add-assets.js +1 -2
  21. package/schematics/ng-add/rules/setup-project/add-assets.js.map +1 -1
  22. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.js +1 -2
  23. package/schematics/ng-add/rules/setup-project/add-design-angular-kit.js.map +1 -1
  24. package/schematics/ng-add/rules/setup-project/add-http-client.js +1 -2
  25. package/schematics/ng-add/rules/setup-project/add-http-client.js.map +1 -1
  26. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.js +1 -2
  27. package/schematics/ng-add/rules/setup-project/add-import-to-style-file.js.map +1 -1
  28. package/schematics/ng-add/rules/setup-project/add-localisation.js +1 -2
  29. package/schematics/ng-add/rules/setup-project/add-localisation.js.map +1 -1
  30. package/schematics/ng-add/rules/setup-project/angular-json-helper.js +1 -2
  31. package/schematics/ng-add/rules/setup-project/angular-json-helper.js.map +1 -1
  32. package/schematics/ng-add/setup-project.js +2 -2
  33. package/schematics/ng-add/setup-project.js.map +1 -1
  34. package/schematics/ng-add/utils.js +13 -6
  35. package/schematics/ng-add/utils.js.map +1 -1
  36. package/schematics/ng-add/utils.spec.d.ts +1 -0
  37. package/schematics/ng-add/utils.spec.js +48 -0
  38. package/schematics/ng-add/utils.spec.js.map +1 -0
  39. package/schematics/ng-add/versions-helper.js +11 -19
  40. package/schematics/ng-add/versions-helper.js.map +1 -1
  41. package/schematics/ng-add/versions-helper.spec.d.ts +1 -0
  42. package/schematics/ng-add/versions-helper.spec.js +46 -0
  43. package/schematics/ng-add/versions-helper.spec.js.map +1 -0
  44. package/esm2022/design-angular-kit.mjs +0 -5
  45. package/esm2022/lib/abstracts/abstract-form.component.mjs +0 -199
  46. package/esm2022/lib/abstracts/abstract.component.mjs +0 -46
  47. package/esm2022/lib/components/core/accordion/accordion.component.mjs +0 -39
  48. package/esm2022/lib/components/core/alert/alert.component.mjs +0 -71
  49. package/esm2022/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.mjs +0 -43
  50. package/esm2022/lib/components/core/avatar/avatar-group/avatar-group.component.mjs +0 -40
  51. package/esm2022/lib/components/core/avatar/avatar.directive.mjs +0 -78
  52. package/esm2022/lib/components/core/avatar/avatar.module.mjs +0 -33
  53. package/esm2022/lib/components/core/badge/badge.directive.mjs +0 -39
  54. package/esm2022/lib/components/core/button/button.directive.mjs +0 -80
  55. package/esm2022/lib/components/core/callout/callout.component.mjs +0 -64
  56. package/esm2022/lib/components/core/card/card.component.mjs +0 -59
  57. package/esm2022/lib/components/core/carousel/carousel/carousel.component.mjs +0 -86
  58. package/esm2022/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +0 -19
  59. package/esm2022/lib/components/core/carousel/carousel.module.mjs +0 -18
  60. package/esm2022/lib/components/core/chip/chip.component.mjs +0 -136
  61. package/esm2022/lib/components/core/collapse/collapse.component.mjs +0 -116
  62. package/esm2022/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +0 -27
  63. package/esm2022/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +0 -11
  64. package/esm2022/lib/components/core/dimmer/dimmer.component.mjs +0 -55
  65. package/esm2022/lib/components/core/dimmer/dimmer.module.mjs +0 -19
  66. package/esm2022/lib/components/core/dropdown/dropdown/dropdown.component.mjs +0 -147
  67. package/esm2022/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +0 -70
  68. package/esm2022/lib/components/core/dropdown/dropdown.module.mjs +0 -18
  69. package/esm2022/lib/components/core/forward/forward.directive.mjs +0 -57
  70. package/esm2022/lib/components/core/link/link.component.mjs +0 -42
  71. package/esm2022/lib/components/core/list/list/list.component.mjs +0 -22
  72. package/esm2022/lib/components/core/list/list-item/list-item.component.mjs +0 -56
  73. package/esm2022/lib/components/core/list/list.module.mjs +0 -18
  74. package/esm2022/lib/components/core/modal/modal.component.mjs +0 -194
  75. package/esm2022/lib/components/core/notifications/notifications.component.mjs +0 -111
  76. package/esm2022/lib/components/core/pagination/pagination.component.mjs +0 -130
  77. package/esm2022/lib/components/core/popover/popover.directive.mjs +0 -176
  78. package/esm2022/lib/components/core/progress-bar/progress-bar.component.mjs +0 -34
  79. package/esm2022/lib/components/core/progress-button/progress-button.component.mjs +0 -25
  80. package/esm2022/lib/components/core/spinner/spinner.component.mjs +0 -30
  81. package/esm2022/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +0 -116
  82. package/esm2022/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +0 -22
  83. package/esm2022/lib/components/core/steppers/steppers.module.mjs +0 -18
  84. package/esm2022/lib/components/core/tab/tab-container/tab-container.component.mjs +0 -97
  85. package/esm2022/lib/components/core/tab/tab-item/tab-item.component.mjs +0 -39
  86. package/esm2022/lib/components/core/tab/tab.module.mjs +0 -18
  87. package/esm2022/lib/components/core/table/sort/sort-header/sort-header.component.mjs +0 -134
  88. package/esm2022/lib/components/core/table/sort/sort.directive.mjs +0 -123
  89. package/esm2022/lib/components/core/table/table.component.mjs +0 -45
  90. package/esm2022/lib/components/core/table/table.module.mjs +0 -19
  91. package/esm2022/lib/components/core/timeline/timeline-item/timeline-item.component.mjs +0 -90
  92. package/esm2022/lib/components/core/timeline/timeline.component.mjs +0 -36
  93. package/esm2022/lib/components/core/timeline/timeline.module.mjs +0 -18
  94. package/esm2022/lib/components/core/tooltip/tooltip.directive.mjs +0 -143
  95. package/esm2022/lib/components/core/video-player/video-player-i18n.model.mjs +0 -2
  96. package/esm2022/lib/components/core/video-player/video-player-i18n.service.mjs +0 -130
  97. package/esm2022/lib/components/core/video-player/video-player.component.mjs +0 -301
  98. package/esm2022/lib/components/core/video-player/video-player.config.mjs +0 -43
  99. package/esm2022/lib/components/core/video-player/video-player.cookie.mjs +0 -25
  100. package/esm2022/lib/components/core/video-player/video-player.model.mjs +0 -3
  101. package/esm2022/lib/components/core/video-player/video-player.module.mjs +0 -16
  102. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +0 -178
  103. package/esm2022/lib/components/form/checkbox/checkbox.component.mjs +0 -48
  104. package/esm2022/lib/components/form/form.module.mjs +0 -67
  105. package/esm2022/lib/components/form/input/input.component.mjs +0 -190
  106. package/esm2022/lib/components/form/password-input/password-input.component.mjs +0 -149
  107. package/esm2022/lib/components/form/radio-button/radio-button.component.mjs +0 -60
  108. package/esm2022/lib/components/form/range/range.component.mjs +0 -64
  109. package/esm2022/lib/components/form/rating/rating.component.mjs +0 -50
  110. package/esm2022/lib/components/form/search/search.component.mjs +0 -112
  111. package/esm2022/lib/components/form/select/select.component.mjs +0 -70
  112. package/esm2022/lib/components/form/textarea/textarea.component.mjs +0 -55
  113. package/esm2022/lib/components/form/transfer/store/transfer.reducers.mjs +0 -191
  114. package/esm2022/lib/components/form/transfer/store/transfer.state.mjs +0 -2
  115. package/esm2022/lib/components/form/transfer/store/transfer.store.mjs +0 -70
  116. package/esm2022/lib/components/form/transfer/transfer-list/transfer-list.component.mjs +0 -72
  117. package/esm2022/lib/components/form/transfer/transfer.component.mjs +0 -149
  118. package/esm2022/lib/components/form/transfer/transfer.model.mjs +0 -6
  119. package/esm2022/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +0 -142
  120. package/esm2022/lib/components/form/upload-file-list/upload-file-list.component.mjs +0 -107
  121. package/esm2022/lib/components/navigation/back-button/back-button.component.mjs +0 -67
  122. package/esm2022/lib/components/navigation/back-to-top/back-to-top.component.mjs +0 -68
  123. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +0 -51
  124. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +0 -21
  125. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumbs.module.mjs +0 -18
  126. package/esm2022/lib/components/navigation/header/header.component.mjs +0 -103
  127. package/esm2022/lib/components/navigation/megamenu/megamenu.component.mjs +0 -27
  128. package/esm2022/lib/components/navigation/navbar/navbar/navbar.component.mjs +0 -49
  129. package/esm2022/lib/components/navigation/navbar/navbar-item/navbar-item.component.mjs +0 -11
  130. package/esm2022/lib/components/navigation/navbar/navbar.module.mjs +0 -18
  131. package/esm2022/lib/components/navigation/navscroll/navscroll-list-item.component.mjs +0 -97
  132. package/esm2022/lib/components/navigation/navscroll/navscroll-list-items.component.mjs +0 -44
  133. package/esm2022/lib/components/navigation/navscroll/navscroll.component.mjs +0 -116
  134. package/esm2022/lib/components/navigation/navscroll/navscroll.model.mjs +0 -2
  135. package/esm2022/lib/components/navigation/navscroll/navscroll.store.mjs +0 -68
  136. package/esm2022/lib/components/navigation/navscroll/navscroll.utils.mjs +0 -23
  137. package/esm2022/lib/components/navigation/sidebar/sidebar.component.mjs +0 -50
  138. package/esm2022/lib/components/navigation/skiplink/skiplink/skiplink.component.mjs +0 -27
  139. package/esm2022/lib/components/navigation/skiplink/skiplink-item/skiplink-item.component.mjs +0 -26
  140. package/esm2022/lib/components/navigation/skiplink/skiplink.module.mjs +0 -18
  141. package/esm2022/lib/components/utils/error-page/error-page.component.mjs +0 -74
  142. package/esm2022/lib/components/utils/icon/icon.component.mjs +0 -63
  143. package/esm2022/lib/components/utils/language-switcher/language-switcher.component.mjs +0 -50
  144. package/esm2022/lib/design-angular-kit.module.mjs +0 -237
  145. package/esm2022/lib/enums/colors.enums.mjs +0 -12
  146. package/esm2022/lib/enums/sizes.enum.mjs +0 -9
  147. package/esm2022/lib/interfaces/core.mjs +0 -16
  148. package/esm2022/lib/interfaces/design-angular-kit-config.mjs +0 -7
  149. package/esm2022/lib/interfaces/form.mjs +0 -2
  150. package/esm2022/lib/interfaces/icon.mjs +0 -181
  151. package/esm2022/lib/interfaces/sortable-table.mjs +0 -6
  152. package/esm2022/lib/interfaces/utils.mjs +0 -2
  153. package/esm2022/lib/pipes/date-ago.pipe.mjs +0 -56
  154. package/esm2022/lib/pipes/duration.pipe.mjs +0 -115
  155. package/esm2022/lib/pipes/mark-matching-text.pipe.mjs +0 -48
  156. package/esm2022/lib/provide-design-angular-kit.mjs +0 -64
  157. package/esm2022/lib/services/notification/notification.service.mjs +0 -120
  158. package/esm2022/lib/utils/coercion.mjs +0 -18
  159. package/esm2022/lib/utils/date-utils.mjs +0 -162
  160. package/esm2022/lib/utils/file-utils.mjs +0 -73
  161. package/esm2022/lib/utils/regex.mjs +0 -35
  162. package/esm2022/lib/validators/it-validators.mjs +0 -161
  163. package/esm2022/public_api.mjs +0 -114
@@ -1,70 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
3
- import { AsyncPipe } from '@angular/common';
4
- import { ReactiveFormsModule } from '@angular/forms';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/forms";
7
- export class ItSelectComponent extends ItAbstractFormComponent {
8
- ngOnInit() {
9
- super.ngOnInit();
10
- if (this.control.value) {
11
- return;
12
- }
13
- const selectedOption = this.options?.find(this.optionIsSelected);
14
- if (selectedOption) {
15
- this.writeValue(selectedOption.value);
16
- if (this._ngControl?.control && selectedOption.value !== this._ngControl.control.value) {
17
- this.onChange(selectedOption.value);
18
- }
19
- return;
20
- }
21
- const selectedGroupOption = this.groups?.flatMap(g => g.options).find(this.optionIsSelected);
22
- if (selectedGroupOption) {
23
- this.writeValue(selectedGroupOption.value);
24
- if (this._ngControl?.control && selectedGroupOption.value !== this._ngControl.control.value) {
25
- this.onChange(selectedGroupOption.value);
26
- }
27
- }
28
- }
29
- /**
30
- * Check if the option is selected
31
- * @param option the option
32
- */
33
- optionIsSelected(option) {
34
- if (option.selected === true) {
35
- return true;
36
- }
37
- if (typeof option.selected === 'function') {
38
- return option.selected(this.control.value);
39
- }
40
- return false;
41
- }
42
- /**
43
- * Check if the option is disabled
44
- * @param option the option
45
- */
46
- optionIsDisabled(option) {
47
- if (option.disabled === true) {
48
- return true;
49
- }
50
- if (typeof option.disabled === 'function') {
51
- return option.disabled(this.control.value);
52
- }
53
- return false;
54
- }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItSelectComponent, isStandalone: true, selector: "it-select", inputs: { options: "options", groups: "groups", description: "description", defaultOption: "defaultOption" }, usesInheritance: true, ngImport: i0, template: "<div class=\"select-wrapper\">\n @if (label) {\n <label [for]=\"id\">{{ label }}</label>\n }\n <select\n [id]=\"id\"\n [formControl]=\"control\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n (blur)=\"markAsTouched()\"\n [attr.aria-describedby]=\"id + '-description'\">\n @if (defaultOption) {\n <option [ngValue]=\"null\" disabled selected>\n {{ defaultOption }}\n </option>\n }\n\n <ng-content></ng-content>\n\n @if (options) {\n @for (option of options; track option.value) {\n <option [disabled]=\"optionIsDisabled(option)\" [ngValue]=\"option.value\">\n {{ option.text ?? option.value }}\n </option>\n }\n }\n\n @if (groups) {\n @for (group of groups; track group) {\n <optgroup [label]=\"group.label\">\n @for (option of group.options; track option.value) {\n <option [disabled]=\"optionIsDisabled(option)\" [ngValue]=\"option.value\">\n {{ option.text ?? option.value }}\n </option>\n }\n </optgroup>\n }\n }\n </select>\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", styles: [".select-wrapper{margin-bottom:1.7rem}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
57
- }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSelectComponent, decorators: [{
59
- type: Component,
60
- args: [{ standalone: true, selector: 'it-select', imports: [ReactiveFormsModule, AsyncPipe], template: "<div class=\"select-wrapper\">\n @if (label) {\n <label [for]=\"id\">{{ label }}</label>\n }\n <select\n [id]=\"id\"\n [formControl]=\"control\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n (blur)=\"markAsTouched()\"\n [attr.aria-describedby]=\"id + '-description'\">\n @if (defaultOption) {\n <option [ngValue]=\"null\" disabled selected>\n {{ defaultOption }}\n </option>\n }\n\n <ng-content></ng-content>\n\n @if (options) {\n @for (option of options; track option.value) {\n <option [disabled]=\"optionIsDisabled(option)\" [ngValue]=\"option.value\">\n {{ option.text ?? option.value }}\n </option>\n }\n }\n\n @if (groups) {\n @for (group of groups; track group) {\n <optgroup [label]=\"group.label\">\n @for (option of group.options; track option.value) {\n <option [disabled]=\"optionIsDisabled(option)\" [ngValue]=\"option.value\">\n {{ option.text ?? option.value }}\n </option>\n }\n </optgroup>\n }\n }\n </select>\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", styles: [".select-wrapper{margin-bottom:1.7rem}\n"] }]
61
- }], propDecorators: { options: [{
62
- type: Input
63
- }], groups: [{
64
- type: Input
65
- }], description: [{
66
- type: Input
67
- }], defaultOption: [{
68
- type: Input
69
- }] } });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBU3JELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSx1QkFBdUI7SUFzQm5ELFFBQVE7UUFDZixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZGLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdGLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLElBQUksbUJBQW1CLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1RixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLE1BQTJCO1FBQzFDLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMxQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsTUFBMkI7UUFDMUMsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OEdBNUVVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDBNQ2I5QixxaERBc0RBLGdHRDNDWSxtQkFBbUIsZ3RCQUFFLFNBQVM7OzJGQUU3QixpQkFBaUI7a0JBUDdCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFdBQVcsV0FHWixDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQzs4QkFNaEMsT0FBTztzQkFBZixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEl0QWJzdHJhY3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdENvbnRyb2xHcm91cCwgU2VsZWN0Q29udHJvbE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvZm9ybSc7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaXQtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgQXN5bmNQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgSXRTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBJdEFic3RyYWN0Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgc2VsZWN0IG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbnM6IEFycmF5PFNlbGVjdENvbnRyb2xPcHRpb24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VsZWN0IGdyb3VwIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwczogQXJyYXk8U2VsZWN0Q29udHJvbEdyb3VwPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlbGVjdCBkZXNjcmlwdGlvblxuICAgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgYWRkIGEgYGRpc2FibGVkIHNlbGVjdGVkYCBvcHRpb24gd2l0aCB2YWx1ZSBgbnVsbGAgYW5kIGFzIHRleHQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGVcbiAgICogQGV4YW1wbGUgJ1NlbGVjdCBhbiBvcHRpb24nXG4gICAqL1xuICBASW5wdXQoKSBkZWZhdWx0T3B0aW9uPzogc3RyaW5nO1xuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zPy5maW5kKHRoaXMub3B0aW9uSXNTZWxlY3RlZCk7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoc2VsZWN0ZWRPcHRpb24udmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX25nQ29udHJvbD8uY29udHJvbCAmJiBzZWxlY3RlZE9wdGlvbi52YWx1ZSAhPT0gdGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShzZWxlY3RlZE9wdGlvbi52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cE9wdGlvbiA9IHRoaXMuZ3JvdXBzPy5mbGF0TWFwKGcgPT4gZy5vcHRpb25zKS5maW5kKHRoaXMub3B0aW9uSXNTZWxlY3RlZCk7XG4gICAgaWYgKHNlbGVjdGVkR3JvdXBPcHRpb24pIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShzZWxlY3RlZEdyb3VwT3B0aW9uLnZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2w/LmNvbnRyb2wgJiYgc2VsZWN0ZWRHcm91cE9wdGlvbi52YWx1ZSAhPT0gdGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShzZWxlY3RlZEdyb3VwT3B0aW9uLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZFxuICAgKiBAcGFyYW0gb3B0aW9uIHRoZSBvcHRpb25cbiAgICovXG4gIG9wdGlvbklzU2VsZWN0ZWQob3B0aW9uOiBTZWxlY3RDb250cm9sT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKG9wdGlvbi5zZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc2VsZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBvcHRpb24uc2VsZWN0ZWQodGhpcy5jb250cm9sLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgKiBAcGFyYW0gb3B0aW9uIHRoZSBvcHRpb25cbiAgICovXG4gIG9wdGlvbklzRGlzYWJsZWQob3B0aW9uOiBTZWxlY3RDb250cm9sT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKG9wdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uZGlzYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBvcHRpb24uZGlzYWJsZWQodGhpcy5jb250cm9sLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxuICBAaWYgKGxhYmVsKSB7XG4gICAgPGxhYmVsIFtmb3JdPVwiaWRcIj57eyBsYWJlbCB9fTwvbGFiZWw+XG4gIH1cbiAgPHNlbGVjdFxuICAgIFtpZF09XCJpZFwiXG4gICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgW2NsYXNzLmlzLXZhbGlkXT1cImlzVmFsaWRcIlxuICAgIChibHVyKT1cIm1hcmtBc1RvdWNoZWQoKVwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZCArICctZGVzY3JpcHRpb24nXCI+XG4gICAgQGlmIChkZWZhdWx0T3B0aW9uKSB7XG4gICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIiBkaXNhYmxlZCBzZWxlY3RlZD5cbiAgICAgICAge3sgZGVmYXVsdE9wdGlvbiB9fVxuICAgICAgPC9vcHRpb24+XG4gICAgfVxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgQGlmIChvcHRpb25zKSB7XG4gICAgICBAZm9yIChvcHRpb24gb2Ygb3B0aW9uczsgdHJhY2sgb3B0aW9uLnZhbHVlKSB7XG4gICAgICAgIDxvcHRpb24gW2Rpc2FibGVkXT1cIm9wdGlvbklzRGlzYWJsZWQob3B0aW9uKVwiIFtuZ1ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgIHt7IG9wdGlvbi50ZXh0ID8/IG9wdGlvbi52YWx1ZSB9fVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKGdyb3Vwcykge1xuICAgICAgQGZvciAoZ3JvdXAgb2YgZ3JvdXBzOyB0cmFjayBncm91cCkge1xuICAgICAgICA8b3B0Z3JvdXAgW2xhYmVsXT1cImdyb3VwLmxhYmVsXCI+XG4gICAgICAgICAgQGZvciAob3B0aW9uIG9mIGdyb3VwLm9wdGlvbnM7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgPG9wdGlvbiBbZGlzYWJsZWRdPVwib3B0aW9uSXNEaXNhYmxlZChvcHRpb24pXCIgW25nVmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi50ZXh0ID8/IG9wdGlvbi52YWx1ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L29wdGdyb3VwPlxuICAgICAgfVxuICAgIH1cbiAgPC9zZWxlY3Q+XG4gIEBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICA8c21hbGwgW2lkXT1cImlkICsgJy1kZXNjcmlwdGlvbidcIiBjbGFzcz1cImZvcm0tdGV4dFwiPnt7IGRlc2NyaXB0aW9uIH19PC9zbWFsbD5cbiAgfVxuXG4gIEBpZiAoaXNJbnZhbGlkKSB7XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZmVlZGJhY2sganVzdC12YWxpZGF0ZS1lcnJvci1sYWJlbFwiIFtpZF09XCJpZCArICctZXJyb3InXCI+XG4gICAgICA8ZGl2ICNjdXN0b21FcnJvcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Vycm9yXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmICghY3VzdG9tRXJyb3IuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIHt7IGludmFsaWRNZXNzYWdlIHwgYXN5bmMgfX1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
@@ -1,55 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
- import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
3
- import { AsyncPipe } from '@angular/common';
4
- import { ReactiveFormsModule } from '@angular/forms';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/forms";
7
- export class ItTextareaComponent extends ItAbstractFormComponent {
8
- constructor() {
9
- super(...arguments);
10
- /**
11
- * Textarea Rows
12
- * @default 3
13
- */
14
- this.rows = 3;
15
- /**
16
- * The textarea placeholder
17
- */
18
- this.placeholder = '';
19
- }
20
- /**
21
- * Return the invalid message string from TranslateService
22
- */
23
- get invalidMessage() {
24
- if (this.hasError('maxlength')) {
25
- const error = this.getError('maxlength');
26
- return this._translateService.get('it.errors.max-length-invalid', { max: error.requiredLength });
27
- }
28
- if (this.hasError('pattern')) {
29
- const error = this.getError('pattern');
30
- return this._translateService.get('it.errors.pattern-invalid', { pattern: error.requiredPattern });
31
- }
32
- return super.invalidMessage;
33
- }
34
- /**
35
- * Check is readonly field
36
- */
37
- get isReadonly() {
38
- return this.readonly === 'plaintext' || !!this.readonly;
39
- }
40
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItTextareaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
41
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItTextareaComponent, isStandalone: true, selector: "it-textarea", inputs: { rows: "rows", placeholder: "placeholder", description: "description", readonly: "readonly" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value || !!placeholder\">{{ label }}</label>\n }\n <textarea\n [id]=\"id\"\n [rows]=\"rows\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [readonly]=\"isReadonly\"\n (blur)=\"markAsTouched()\"></textarea>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", styles: ["textarea.is-invalid{border-color:#cc334d}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
42
- }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItTextareaComponent, decorators: [{
44
- type: Component,
45
- args: [{ standalone: true, selector: 'it-textarea', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, AsyncPipe], template: "<div class=\"form-group\">\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value || !!placeholder\">{{ label }}</label>\n }\n <textarea\n [id]=\"id\"\n [rows]=\"rows\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [readonly]=\"isReadonly\"\n (blur)=\"markAsTouched()\"></textarea>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", styles: ["textarea.is-invalid{border-color:#cc334d}\n"] }]
46
- }], propDecorators: { rows: [{
47
- type: Input
48
- }], placeholder: [{
49
- type: Input
50
- }], description: [{
51
- type: Input
52
- }], readonly: [{
53
- type: Input
54
- }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RleHRhcmVhL3RleHRhcmVhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS90ZXh0YXJlYS90ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVVyRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQWtEO0lBUjNGOztRQVNFOzs7V0FHRztRQUNNLFNBQUksR0FBWSxDQUFDLENBQUM7UUFFM0I7O1dBRUc7UUFDTSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztLQW9DbkM7SUF0QkM7O09BRUc7SUFDSCxJQUFhLGNBQWM7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsOEJBQThCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBYyxVQUFVO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDMUQsQ0FBQzs4R0E3Q1UsbUJBQW1CO2tHQUFuQixtQkFBbUIsc01DZGhDLG03QkE0QkEsb0dEaEJZLG1CQUFtQixxa0JBQUUsU0FBUzs7MkZBRTdCLG1CQUFtQjtrQkFSL0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04sYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDOzhCQU9oQyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSXRBYnN0cmFjdEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9hYnN0cmFjdHMvYWJzdHJhY3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2l0LXRleHRhcmVhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHRhcmVhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dGFyZWEuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBBc3luY1BpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBJdFRleHRhcmVhQ29tcG9uZW50IGV4dGVuZHMgSXRBYnN0cmFjdEZvcm1Db21wb25lbnQ8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogVGV4dGFyZWEgUm93c1xuICAgKiBAZGVmYXVsdCAzXG4gICAqL1xuICBASW5wdXQoKSByb3dzPzogbnVtYmVyID0gMztcblxuICAvKipcbiAgICogVGhlIHRleHRhcmVhIHBsYWNlaG9sZGVyXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBkZXNjcmlwdGlvblxuICAgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRhaW5lZCB2YWx1ZS5cbiAgICogLSA8Yj5wbGFpbnRleHQ8L2I+OiBSZWFkb25seSBmaWVsZCBpbiB0aGUgZm9ybSBzdHlsaXplZCBhcyBwbGFpbiB0ZXh0XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gfCAncGxhaW50ZXh0JyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBpbnZhbGlkIG1lc3NhZ2Ugc3RyaW5nIGZyb20gVHJhbnNsYXRlU2VydmljZVxuICAgKi9cbiAgb3ZlcnJpZGUgZ2V0IGludmFsaWRNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ21heGxlbmd0aCcpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0RXJyb3IoJ21heGxlbmd0aCcpO1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMubWF4LWxlbmd0aC1pbnZhbGlkJywgeyBtYXg6IGVycm9yLnJlcXVpcmVkTGVuZ3RoIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0RXJyb3IoJ3BhdHRlcm4nKTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhdHRlcm4taW52YWxpZCcsIHsgcGF0dGVybjogZXJyb3IucmVxdWlyZWRQYXR0ZXJuIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5pbnZhbGlkTWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpcyByZWFkb25seSBmaWVsZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc1JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5ID09PSAncGxhaW50ZXh0JyB8fCAhIXRoaXMucmVhZG9ubHk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gIEBpZiAobGFiZWwpIHtcbiAgICA8bGFiZWwgW2Zvcl09XCJpZFwiIFtjbGFzcy5hY3RpdmVdPVwiISFjb250cm9sLnZhbHVlIHx8ICEhcGxhY2Vob2xkZXJcIj57eyBsYWJlbCB9fTwvbGFiZWw+XG4gIH1cbiAgPHRleHRhcmVhXG4gICAgW2lkXT1cImlkXCJcbiAgICBbcm93c109XCJyb3dzXCJcbiAgICBbY2xhc3MuZm9ybS1jb250cm9sXT1cInJlYWRvbmx5ICE9PSAncGxhaW50ZXh0J1wiXG4gICAgW2NsYXNzLmZvcm0tY29udHJvbC1wbGFpbnRleHRdPVwicmVhZG9ubHkgPT09ICdwbGFpbnRleHQnXCJcbiAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpc0ludmFsaWRcIlxuICAgIFtjbGFzcy5pcy12YWxpZF09XCJpc1ZhbGlkXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICBbcmVhZG9ubHldPVwiaXNSZWFkb25seVwiXG4gICAgKGJsdXIpPVwibWFya0FzVG91Y2hlZCgpXCI+PC90ZXh0YXJlYT5cblxuICBAaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgPHNtYWxsIFtpZF09XCJpZCArICctZGVzY3JpcHRpb24nXCIgY2xhc3M9XCJmb3JtLXRleHRcIj57eyBkZXNjcmlwdGlvbiB9fTwvc21hbGw+XG4gIH1cbiAgQGlmIChpc0ludmFsaWQpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1mZWVkYmFjayBqdXN0LXZhbGlkYXRlLWVycm9yLWxhYmVsXCIgW2lkXT1cImlkICsgJy1lcnJvcidcIj5cbiAgICAgIDxkaXYgI2N1c3RvbUVycm9yPjxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG4gICAgICBAaWYgKCFjdXN0b21FcnJvci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAge3sgaW52YWxpZE1lc3NhZ2UgfCBhc3luYyB9fVxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -1,191 +0,0 @@
1
- //#region private utility functions
2
- const generateSelectAll = (checked, items) => {
3
- const selected = new Set();
4
- if (checked) {
5
- items.forEach(item => selected.add(item));
6
- }
7
- return selected;
8
- };
9
- const updateSelected = (set, item) => {
10
- if (set.has(item)) {
11
- set.delete(item);
12
- }
13
- else {
14
- set.add(item);
15
- }
16
- return set;
17
- };
18
- //#endregion
19
- //#region reducers
20
- const init = (state, { source, target }) => ({
21
- ...state,
22
- initialItems: {
23
- source: [...source],
24
- target: [...target],
25
- },
26
- current: {
27
- source: [...source],
28
- target: [...target],
29
- },
30
- });
31
- const transfer = (state) => {
32
- return {
33
- ...state,
34
- current: {
35
- ...state.current,
36
- source: state.current.source.filter(i => !state.selections.source.has(i)),
37
- target: Array.from(new Set([...state.current.target, ...Array.from(state.selections.source)])),
38
- },
39
- selections: {
40
- ...state.selections,
41
- source: new Set(),
42
- },
43
- operationsEnabled: {
44
- ...state.operationsEnabled,
45
- transfer: false,
46
- reset: true,
47
- },
48
- };
49
- };
50
- const backtransfer = (state) => {
51
- return {
52
- ...state,
53
- current: {
54
- ...state.current,
55
- target: state.current.target.filter(i => !state.selections.target.has(i)),
56
- source: Array.from(new Set([...state.current.source, ...Array.from(state.selections.target)])),
57
- },
58
- selections: {
59
- ...state.selections,
60
- target: new Set(),
61
- },
62
- operationsEnabled: {
63
- ...state.operationsEnabled,
64
- backtransfer: false,
65
- reset: true,
66
- },
67
- };
68
- };
69
- const reset = (state) => {
70
- return {
71
- ...state,
72
- current: {
73
- source: [...state.initialItems.source],
74
- target: [...state.initialItems.target],
75
- },
76
- operationsEnabled: {
77
- ...state.operationsEnabled,
78
- reset: false,
79
- },
80
- };
81
- };
82
- const selectAllSource = (state, { checked }) => {
83
- const items = state.current.source;
84
- const selected = generateSelectAll(checked, items);
85
- const transfer = Boolean(selected.size);
86
- return {
87
- ...state,
88
- selections: {
89
- ...state.selections,
90
- source: selected,
91
- },
92
- operationsEnabled: {
93
- ...state.operationsEnabled,
94
- transfer,
95
- },
96
- };
97
- };
98
- const selectAllTarget = (state, { checked }) => {
99
- const items = state.current.target;
100
- const selected = generateSelectAll(checked, items);
101
- const backtransfer = Boolean(selected.size);
102
- return {
103
- ...state,
104
- selections: {
105
- ...state.selections,
106
- target: selected,
107
- },
108
- operationsEnabled: {
109
- ...state.operationsEnabled,
110
- backtransfer,
111
- },
112
- };
113
- };
114
- const selectionItemSource = (previousState, { item }) => {
115
- const selected = updateSelected(previousState.selections.source, item);
116
- const selectedItems = Array.from(selected);
117
- const transfer = Boolean(selectedItems.length);
118
- const source = new Set([...selectedItems]);
119
- const state = {
120
- ...previousState,
121
- selections: {
122
- ...previousState.selections,
123
- source,
124
- },
125
- operationsEnabled: {
126
- ...previousState.operationsEnabled,
127
- transfer,
128
- },
129
- };
130
- return state;
131
- };
132
- const selectionItemTarget = (previousState, { item }) => {
133
- const selected = updateSelected(previousState.selections.target, item);
134
- const selectedItems = Array.from(selected);
135
- const backtransfer = Boolean(selectedItems.length);
136
- const target = new Set([...selectedItems]);
137
- const state = {
138
- ...previousState,
139
- selections: {
140
- ...previousState.selections,
141
- target,
142
- },
143
- operationsEnabled: {
144
- ...previousState.operationsEnabled,
145
- backtransfer,
146
- },
147
- };
148
- return state;
149
- };
150
- //#endregion reducers
151
- //#region public reducers
152
- const initialStateFn = () => ({
153
- initialItems: {
154
- source: [],
155
- target: [],
156
- },
157
- current: {
158
- source: [],
159
- target: [],
160
- },
161
- selections: {
162
- source: new Set(),
163
- target: new Set(),
164
- },
165
- operationsEnabled: {
166
- transfer: false,
167
- backtransfer: false,
168
- reset: false,
169
- },
170
- });
171
- const initFn = (payload) => (state) => init(state, payload);
172
- const transferFn = () => (state) => transfer(state);
173
- const backtransferFn = () => (state) => backtransfer(state);
174
- const resetFn = () => (state) => reset(state);
175
- const selectAllSourceFn = ({ checked }) => (state) => selectAllSource(state, { checked });
176
- const selectAllTargetFn = ({ checked }) => (state) => selectAllTarget(state, { checked });
177
- const selectionItemSourceFn = ({ item }) => (state) => selectionItemSource(state, { item });
178
- const selectionItemTargetFn = ({ item }) => (state) => selectionItemTarget(state, { item });
179
- //#endregion
180
- export default {
181
- initialStateFn,
182
- initFn,
183
- transferFn,
184
- backtransferFn,
185
- resetFn,
186
- selectAllSourceFn,
187
- selectAllTargetFn,
188
- selectionItemSourceFn,
189
- selectionItemTargetFn,
190
- };
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIucmVkdWNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJhbnNmZXIvc3RvcmUvdHJhbnNmZXIucmVkdWNlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsbUNBQW1DO0FBQ25DLE1BQU0saUJBQWlCLEdBQUcsQ0FBSSxPQUFnQixFQUFFLEtBQXdCLEVBQUUsRUFBRTtJQUMxRSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUM1QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsQ0FBSSxHQUF5QixFQUFFLElBQXFCLEVBQUUsRUFBRTtJQUM3RSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUM7U0FBTSxDQUFDO1FBQ04sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUM7QUFDRixZQUFZO0FBRVosa0JBQWtCO0FBQ2xCLE1BQU0sSUFBSSxHQUFHLENBQUksS0FBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRSxHQUFHLEtBQUs7SUFDUixZQUFZLEVBQUU7UUFDWixNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNu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Q0FBYSxDQUFDO0FBRXBELE1BQU0scUJBQXFCLEdBQ3pCLENBQUksRUFBRSxJQUFJLEVBQTZCLEVBQUUsRUFBRSxDQUMzQyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQ2xCLG1CQUFtQixDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFhLENBQUM7QUFFckQsTUFBTSxxQkFBcUIsR0FDekIsQ0FBSSxFQUFFLElBQUksRUFBNkIsRUFBRSxFQUFFLENBQzNDLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FDbEIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQWEsQ0FBQztBQUNyRCxZQUFZO0FBRVosZUFBZTtJQUNiLGNBQWM7SUFDZCxNQUFNO0lBQ04sVUFBVTtJQUNWLGNBQWM7SUFDZCxPQUFPO0lBQ1AsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIscUJBQXFCO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2Zlckl0ZW0sIFRyYW5zZmVySXRlbVNlbGVjdGlvbiB9IGZyb20gJy4uL3RyYW5zZmVyLm1vZGVsJztcbmltcG9ydCB7IFNlbGVjdGlvblN0YXRlLCBTdGF0ZSB9IGZyb20gJy4vdHJhbnNmZXIuc3RhdGUnO1xuXG4vLyNyZWdpb24gcHJpdmF0ZSB1dGlsaXR5IGZ1bmN0aW9uc1xuY29uc3QgZ2VuZXJhdGVTZWxlY3RBbGwgPSA8VD4oY2hlY2tlZDogYm9vbGVhbiwgaXRlbXM6IFRyYW5zZmVySXRlbTxUPltdKSA9PiB7XG4gIGNvbnN0IHNlbGVjdGVkID0gbmV3IFNldDxUcmFuc2Zlckl0ZW08VD4+KCk7XG4gIGlmIChjaGVja2VkKSB7XG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHNlbGVjdGVkLmFkZChpdGVtKSk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWQ7XG59O1xuXG5jb25zdCB1cGRhdGVTZWxlY3RlZCA9IDxUPihzZXQ6IFNldDxUcmFuc2Zlckl0ZW08VD4+LCBpdGVtOiBUcmFuc2Zlckl0ZW08VD4pID0+IHtcbiAgaWYgKHNldC5oYXMoaXRlbSkpIHtcbiAgICBzZXQuZGVsZXRlKGl0ZW0pO1xuICB9IGVsc2Uge1xuICAgIHNldC5hZGQoaXRlbSk7XG4gIH1cblxuICByZXR1cm4gc2V0O1xufTtcbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gcmVkdWNlcnNcbmNvbnN0IGluaXQgPSA8VD4oc3RhdGU6IFN0YXRlPFQ+LCB7IHNvdXJjZSwgdGFyZ2V0IH06IFNlbGVjdGlvblN0YXRlPFQ+KSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaW5pdGlhbEl0ZW1zOiB7XG4gICAgc291cmNlOiBbLi4uc291cmNlXSxcbiAgICB0YXJnZXQ6IFsuLi50YXJnZXRdLFxuICB9LFxuICBjdXJyZW50OiB7XG4gICAgc291cmNlOiBbLi4uc291cmNlXSxcbiAgICB0YXJnZXQ6IFsuLi50YXJnZXRdLFxuICB9LFxufSk7XG5cbmNvbnN0IHRyYW5zZmVyID0gPFQ+KHN0YXRlOiBTdGF0ZTxUPikgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGN1cnJlbnQ6IHtcbiAgICAgIC4uLnN0YXRlLmN1cnJlbnQsXG4gICAgICBzb3VyY2U6IHN0YXRlLmN1cnJlbnQuc291cmNlLmZpbHRlcihpID0+ICFzdGF0ZS5zZWxlY3Rpb25zLnNvdXJjZS5oYXMoaSkpLFxuICAgICAgdGFyZ2V0OiBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLnN0YXRlLmN1cnJlbnQudGFyZ2V0LCAuLi5BcnJheS5mcm9tKHN0YXRlLnNlbGVjdGlvbnMuc291cmNlKV0gYXMgVHJhbnNmZXJJdGVtU2VsZWN0aW9uPFQ+KSksXG4gICAgfSxcbiAgICBzZWxlY3Rpb25zOiB7XG4gICAgICAuLi5zdGF0ZS5zZWxlY3Rpb25zLFxuICAgICAgc291cmNlOiBuZXcgU2V0PFRyYW5zZmVySXRlbTxUPj4oKSxcbiAgICB9LFxuICAgIG9wZXJhdGlvbnNFbmFibGVkOiB7XG4gICAgICAuLi5zdGF0ZS5vcGVyYXRpb25zRW5hYmxlZCxcbiAgICAgIHRyYW5zZmVyOiBmYWxzZSxcbiAgICAgIHJlc2V0OiB0cnVlLFxuICAgIH0sXG4gIH0gc2F0aXNmaWVzIFN0YXRlPFQ+O1xufTtcblxuY29uc3QgYmFja3RyYW5zZmVyID0gPFQ+KHN0YXRlOiBTdGF0ZTxUPikgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGN1cnJlbnQ6IHtcbiAgICAgIC4uLnN0YXRlLmN1cnJlbnQsXG4gICAgICB0YXJnZXQ6IHN0YXRlLmN1cnJlbnQudGFyZ2V0LmZpbHRlcihpID0+ICFzdGF0ZS5zZWxlY3Rpb25zLnRhcmdldC5oYXMoaSkpLFxuICAgICAgc291cmNlOiBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLnN0YXRlLmN1cnJlbnQuc291cmNlLCAuLi5BcnJheS5mcm9tKHN0YXRlLnNlbGVjdGlvbnMudGFyZ2V0KV0gYXMgVHJhbnNmZXJJdGVtU2VsZWN0aW9uPFQ+KSksXG4gICAgfSxcbiAgICBzZWxlY3Rpb25zOiB7XG4gICAgICAuLi5zdGF0ZS5zZWxlY3Rpb25zLFxuICAgICAgdGFyZ2V0OiBuZXcgU2V0PFRyYW5zZmVySXRlbTxUPj4oKSxcbiAgICB9LFxuICAgIG9wZXJhdGlvbnNFbmFibGVkOiB7XG4gICAgICAuLi5zdGF0ZS5vcGVyYXRpb25zRW5hYmxlZCxcbiAgICAgIGJhY2t0cmFuc2ZlcjogZmFsc2UsXG4gICAgICByZXNldDogdHJ1ZSxcbiAgICB9LFxuICB9IHNhdGlzZmllcyBTdGF0ZTxUPjtcbn07XG5cbmNvbnN0IHJlc2V0ID0gPFQ+KHN0YXRlOiBTdGF0ZTxUPikgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGN1cnJlbnQ6IHtcbiAgICAgIHNvdXJjZTogWy4uLnN0YXRlLmluaXRpYWxJdGVtcy5zb3VyY2VdLFxuICAgICAgdGFyZ2V0OiBbLi4uc3RhdGUuaW5pdGlhbEl0ZW1zLnRhcmdldF0sXG4gICAgfSxcbiAgICBvcGVyYXRpb25zRW5hYmxlZDoge1xuICAgICAgLi4uc3RhdGUub3BlcmF0aW9uc0VuYWJsZWQsXG4gICAgICByZXNldDogZmFsc2UsXG4gICAgfSxcbiAgfSBzYXRpc2ZpZXMgU3RhdGU8VD47XG59O1xuXG5jb25zdCBzZWxlY3RBbGxTb3VyY2UgPSA8VD4oc3RhdGU6IFN0YXRlPFQ+LCB7IGNoZWNrZWQgfTogeyBjaGVja2VkOiBib29sZWFuIH0pID0+IHtcbiAgY29uc3QgaXRlbXMgPSBzdGF0ZS5jdXJyZW50LnNvdXJjZTtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBnZW5lcmF0ZVNlbGVjdEFsbChjaGVja2VkLCBpdGVtcyk7XG4gIGNvbnN0IHRyYW5zZmVyID0gQm9vbGVhbihzZWxlY3RlZC5zaXplKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGlvbnM6IHtcbiAgICAgIC4uLnN0YXRlLnNlbGVjdGlvbnMsXG4gICAgICBzb3VyY2U6IHNlbGVjdGVkLFxuICAgIH0sXG4gICAgb3BlcmF0aW9uc0VuYWJsZWQ6IHtcbiAgICAgIC4uLnN0YXRlLm9wZXJhdGlvbnNFbmFibGVkLFxuICAgICAgdHJhbnNmZXIsXG4gICAgfSxcbiAgfSBzYXRpc2ZpZXMgU3RhdGU8VD47XG59O1xuXG5jb25zdCBzZWxlY3RBbGxUYXJnZXQgPSA8VD4oc3RhdGU6IFN0YXRlPFQ+LCB7IGNoZWNrZWQgfTogeyBjaGVja2VkOiBib29sZWFuIH0pID0+IHtcbiAgY29uc3QgaXRlbXMgPSBzdGF0ZS5jdXJyZW50LnRhcmdldDtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBnZW5lcmF0ZVNlbGVjdEFsbChjaGVja2VkLCBpdGVtcyk7XG4gIGNvbnN0IGJhY2t0cmFuc2ZlciA9IEJvb2xlYW4oc2VsZWN0ZWQuc2l6ZSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3Rpb25zOiB7XG4gICAgICAuLi5zdGF0ZS5zZWxlY3Rpb25zLFxuICAgICAgdGFyZ2V0OiBzZWxlY3RlZCxcbiAgICB9LFxuICAgIG9wZXJhdGlvbnNFbmFibGVkOiB7XG4gICAgICAuLi5zdGF0ZS5vcGVyYXRpb25zRW5hYmxlZCxcbiAgICAgIGJhY2t0cmFuc2ZlcixcbiAgICB9LFxuICB9IHNhdGlzZmllcyBTdGF0ZTxUPjtcbn07XG5cbmNvbnN0IHNlbGVjdGlvbkl0ZW1Tb3VyY2UgPSA8VD4ocHJldmlvdXNTdGF0ZTogU3RhdGU8VD4sIHsgaXRlbSB9OiB7IGl0ZW06IFRyYW5zZmVySXRlbTxUPiB9KSA9PiB7XG4gIGNvbnN0IHNlbGVjdGVkID0gdXBkYXRlU2VsZWN0ZWQocHJldmlvdXNTdGF0ZS5zZWxlY3Rpb25zLnNvdXJjZSwgaXRlbSk7XG4gIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHNlbGVjdGVkKTtcbiAgY29uc3QgdHJhbnNmZXIgPSBCb29sZWFuKHNlbGVjdGVkSXRlbXMubGVuZ3RoKTtcbiAgY29uc3Qgc291cmNlID0gbmV3IFNldChbLi4uc2VsZWN0ZWRJdGVtc10pO1xuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIC4uLnByZXZpb3VzU3RhdGUsXG4gICAgc2VsZWN0aW9uczoge1xuICAgICAgLi4ucHJldmlvdXNTdGF0ZS5zZWxlY3Rpb25zLFxuICAgICAgc291cmNlLFxuICAgIH0sXG4gICAgb3BlcmF0aW9uc0VuYWJsZWQ6IHtcbiAgICAgIC4uLnByZXZpb3VzU3RhdGUub3BlcmF0aW9uc0VuYWJsZWQsXG4gICAgICB0cmFuc2ZlcixcbiAgICB9LFxuICB9IHNhdGlzZmllcyBTdGF0ZTxUPjtcblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG5jb25zdCBzZWxlY3Rpb25JdGVtVGFyZ2V0ID0gPFQ+KHByZXZpb3VzU3RhdGU6IFN0YXRlPFQ+LCB7IGl0ZW0gfTogeyBpdGVtOiBUcmFuc2Zlckl0ZW08VD4gfSkgPT4ge1xuICBjb25zdCBzZWxlY3RlZCA9IHVwZGF0ZVNlbGVjdGVkKHByZXZpb3VzU3RhdGUuc2VsZWN0aW9ucy50YXJnZXQsIGl0ZW0pO1xuICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gQXJyYXkuZnJvbShzZWxlY3RlZCk7XG4gIGNvbnN0IGJhY2t0cmFuc2ZlciA9IEJvb2xlYW4oc2VsZWN0ZWRJdGVtcy5sZW5ndGgpO1xuICBjb25zdCB0YXJnZXQgPSBuZXcgU2V0KFsuLi5zZWxlY3RlZEl0ZW1zXSk7XG5cbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgLi4ucHJldmlvdXNTdGF0ZSxcbiAgICBzZWxlY3Rpb25zOiB7XG4gICAgICAuLi5wcmV2aW91c1N0YXRlLnNlbGVjdGlvbnMsXG4gICAgICB0YXJnZXQsXG4gICAgfSxcbiAgICBvcGVyYXRpb25zRW5hYmxlZDoge1xuICAgICAgLi4ucHJldmlvdXNTdGF0ZS5vcGVyYXRpb25zRW5hYmxlZCxcbiAgICAgIGJhY2t0cmFuc2ZlcixcbiAgICB9LFxuICB9IHNhdGlzZmllcyBTdGF0ZTxUPjtcblxuICByZXR1cm4gc3RhdGU7XG59O1xuLy8jZW5kcmVnaW9uIHJlZHVjZXJzXG5cbi8vI3JlZ2lvbiBwdWJsaWMgcmVkdWNlcnNcbmNvbnN0IGluaXRpYWxTdGF0ZUZuID0gPFQ+KCkgPT4gKHtcbiAgaW5pdGlhbEl0ZW1zOiB7XG4gICAgc291cmNlOiBbXSxcbiAgICB0YXJnZXQ6IFtdLFxuICB9LFxuICBjdXJyZW50OiB7XG4gICAgc291cmNlOiBbXSxcbiAgICB0YXJnZXQ6IFtdLFxuICB9LFxuICBzZWxlY3Rpb25zOiB7XG4gICAgc291cmNlOiBuZXcgU2V0PFRyYW5zZmVySXRlbTxUPj4oKSxcbiAgICB0YXJnZXQ6IG5ldyBTZXQ8VHJhbnNmZXJJdGVtPFQ+PigpLFxuICB9LFxuICBvcGVyYXRpb25zRW5hYmxlZDoge1xuICAgIHRyYW5zZmVyOiBmYWxzZSxcbiAgICBiYWNrdHJhbnNmZXI6IGZhbHNlLFxuICAgIHJlc2V0OiBmYWxzZSxcbiAgfSxcbn0pO1xuY29uc3QgaW5pdEZuID1cbiAgPFQ+KHBheWxvYWQ6IFNlbGVjdGlvblN0YXRlPFQ+KSA9PlxuICAoc3RhdGU6IFN0YXRlPFQ+KSA9PlxuICAgIGluaXQoc3RhdGUsIHBheWxvYWQpO1xuXG5jb25zdCB0cmFuc2ZlckZuID1cbiAgPFQ+KCkgPT5cbiAgKHN0YXRlOiBTdGF0ZTxUPikgPT5cbiAgICB0cmFuc2ZlcihzdGF0ZSk7XG5cbmNvbnN0IGJhY2t0cmFuc2ZlckZuID1cbiAgPFQ+KCkgPT5cbiAgKHN0YXRlOiBTdGF0ZTxUPikgPT5cbiAgICBiYWNrdHJhbnNmZXIoc3RhdGUpO1xuXG5jb25zdCByZXNldEZuID1cbiAgPFQ+KCkgPT5cbiAgKHN0YXRlOiBTdGF0ZTxUPikgPT5cbiAgICByZXNldChzdGF0ZSk7XG5cbmNvbnN0IHNlbGVjdEFsbFNvdXJjZUZuID1cbiAgPFQ+KHsgY2hlY2tlZCB9OiB7IGNoZWNrZWQ6IGJvb2xlYW4gfSkgPT5cbiAgKHN0YXRlOiBTdGF0ZTxUPikgPT5cbiAgICBzZWxlY3RBbGxTb3VyY2Uoc3RhdGUsIHsgY2hlY2tlZCB9KSBhcyBTdGF0ZTxUPjtcblxuY29uc3Qgc2VsZWN0QWxsVGFyZ2V0Rm4gPVxuICA8VD4oeyBjaGVja2VkIH06IHsgY2hlY2tlZDogYm9vbGVhbiB9KSA9PlxuICAoc3RhdGU6IFN0YXRlPFQ+KSA9PlxuICAgIHNlbGVjdEFsbFRhcmdldChzdGF0ZSwgeyBjaGVja2VkIH0pIGFzIFN0YXRlPFQ+O1xuXG5jb25zdCBzZWxlY3Rpb25JdGVtU291cmNlRm4gPVxuICA8VD4oeyBpdGVtIH06IHsgaXRlbTogVHJhbnNmZXJJdGVtPFQ+IH0pID0+XG4gIChzdGF0ZTogU3RhdGU8VD4pID0+XG4gICAgc2VsZWN0aW9uSXRlbVNvdXJjZShzdGF0ZSwgeyBpdGVtIH0pIGFzIFN0YXRlPFQ+O1xuXG5jb25zdCBzZWxlY3Rpb25JdGVtVGFyZ2V0Rm4gPVxuICA8VD4oeyBpdGVtIH06IHsgaXRlbTogVHJhbnNmZXJJdGVtPFQ+IH0pID0+XG4gIChzdGF0ZTogU3RhdGU8VD4pID0+XG4gICAgc2VsZWN0aW9uSXRlbVRhcmdldChzdGF0ZSwgeyBpdGVtIH0pIGFzIFN0YXRlPFQ+O1xuLy8jZW5kcmVnaW9uXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdGlhbFN0YXRlRm4sXG4gIGluaXRGbixcbiAgdHJhbnNmZXJGbixcbiAgYmFja3RyYW5zZmVyRm4sXG4gIHJlc2V0Rm4sXG4gIHNlbGVjdEFsbFNvdXJjZUZuLFxuICBzZWxlY3RBbGxUYXJnZXRGbixcbiAgc2VsZWN0aW9uSXRlbVNvdXJjZUZuLFxuICBzZWxlY3Rpb25JdGVtVGFyZ2V0Rm4sXG59O1xuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJhbnNmZXIvc3RvcmUvdHJhbnNmZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zZmVySXRlbSB9IGZyb20gJy4uL3RyYW5zZmVyLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25TdGF0ZTxUPiB7XG4gIHNvdXJjZTogQXJyYXk8VHJhbnNmZXJJdGVtPFQ+PjtcbiAgdGFyZ2V0OiBBcnJheTxUcmFuc2Zlckl0ZW08VD4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlPFQ+IHtcbiAgaW5pdGlhbEl0ZW1zOiBTZWxlY3Rpb25TdGF0ZTxUPjtcbiAgY3VycmVudDogU2VsZWN0aW9uU3RhdGU8VD47XG4gIHNlbGVjdGlvbnM6IHtcbiAgICBzb3VyY2U6IFNldDxUcmFuc2Zlckl0ZW08VD4+O1xuICAgIHRhcmdldDogU2V0PFRyYW5zZmVySXRlbTxUPj47XG4gIH07XG4gIG9wZXJhdGlvbnNFbmFibGVkOiB7XG4gICAgdHJhbnNmZXI6IGJvb2xlYW47XG4gICAgYmFja3RyYW5zZmVyOiBib29sZWFuO1xuICAgIHJlc2V0OiBib29sZWFuO1xuICB9O1xufVxuIl19
@@ -1,70 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject, distinctUntilChanged, map, of } from 'rxjs';
3
- import reducers from './transfer.reducers';
4
- import * as i0 from "@angular/core";
5
- export class TransferStore {
6
- constructor() {
7
- this._state = new BehaviorSubject(reducers.initialStateFn());
8
- this.sourceItems = this._state.pipe(map(state => state.current.source));
9
- this.targetItems = this._state.pipe(map(state => state.current.target));
10
- this.valueChanged = this._state.pipe(map(state => state.current.target), distinctUntilChanged());
11
- this.selectItems = (sourceType) => {
12
- if (sourceType === 'source') {
13
- return this.sourceItems;
14
- }
15
- if (sourceType === 'target') {
16
- return this.targetItems;
17
- }
18
- return of([]);
19
- };
20
- this.selectSelectedItems = (sourceType) => {
21
- if (sourceType === 'source') {
22
- return this._state.pipe(map(state => state.selections.source));
23
- }
24
- if (sourceType === 'target') {
25
- return this._state.pipe(map(state => state.selections.target));
26
- }
27
- return of(new Set());
28
- };
29
- this.transferEnabled = this._state.pipe(map(state => state.operationsEnabled.transfer));
30
- this.backtransferEnabled = this._state.pipe(map(state => state.operationsEnabled.backtransfer));
31
- this.resetEnabled = this._state.pipe(map(state => state.operationsEnabled.reset));
32
- }
33
- init({ source, target }) {
34
- this.updateState(reducers.initFn({ source, target }));
35
- }
36
- transfer() {
37
- this.updateState(reducers.transferFn());
38
- }
39
- backtransfer() {
40
- this.updateState(reducers.backtransferFn());
41
- }
42
- reset() {
43
- this.updateState(reducers.resetFn());
44
- }
45
- checkboxSelection(item, sourceType) {
46
- if (sourceType === 'source') {
47
- this.updateState(reducers.selectionItemSourceFn({ item }));
48
- }
49
- if (sourceType === 'target') {
50
- this.updateState(reducers.selectionItemTargetFn({ item }));
51
- }
52
- }
53
- selectAllSelection(checked, sourceType) {
54
- if (sourceType === 'source') {
55
- this.updateState(reducers.selectAllSourceFn({ checked }));
56
- }
57
- if (sourceType === 'target') {
58
- this.updateState(reducers.selectAllTargetFn({ checked }));
59
- }
60
- }
61
- updateState(reducerFn) {
62
- this._state.next(reducerFn(this._state.value));
63
- }
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TransferStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
65
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TransferStore }); }
66
- }
67
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TransferStore, decorators: [{
68
- type: Injectable
69
- }] });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJhbnNmZXIvc3RvcmUvdHJhbnNmZXIuc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEUsT0FBTyxRQUFRLE1BQU0scUJBQXFCLENBQUM7O0FBSTNDLE1BQU0sT0FBTyxhQUFhO0lBRDFCO1FBRW1CLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBVyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUVsRSxnQkFBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVuRSxnQkFBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUUzRSxpQkFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUNsQyxvQkFBb0IsRUFBRSxDQUN2QixDQUFDO1FBRU8sZ0JBQVcsR0FBRyxDQUFDLFVBQXNCLEVBQUUsRUFBRTtZQUNoRCxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENB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Q0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLFNBQXdDO1FBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQzs4R0EvRVUsYUFBYTtrSEFBYixhQUFhOzsyRkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU291cmNlVHlwZSwgVHJhbnNmZXJJdGVtIH0gZnJvbSAnLi4vdHJhbnNmZXIubW9kZWwnO1xuaW1wb3J0IHJlZHVjZXJzIGZyb20gJy4vdHJhbnNmZXIucmVkdWNlcnMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUsIFN0YXRlIH0gZnJvbSAnLi90cmFuc2Zlci5zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUcmFuc2ZlclN0b3JlPFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0YXRlPFQ+PihyZWR1Y2Vycy5pbml0aWFsU3RhdGVGbigpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNvdXJjZUl0ZW1zID0gdGhpcy5fc3RhdGUucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUuY3VycmVudC5zb3VyY2UpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldEl0ZW1zID0gdGhpcy5fc3RhdGUucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUuY3VycmVudC50YXJnZXQpKTtcblxuICByZWFkb25seSB2YWx1ZUNoYW5nZWQgPSB0aGlzLl9zdGF0ZS5waXBlKFxuICAgIG1hcChzdGF0ZSA9PiBzdGF0ZS5jdXJyZW50LnRhcmdldCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdEl0ZW1zID0gKHNvdXJjZVR5cGU6IFNvdXJjZVR5cGUpID0+IHtcbiAgICBpZiAoc291cmNlVHlwZSA9PT0gJ3NvdXJjZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZUl0ZW1zO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VUeXBlID09PSAndGFyZ2V0Jykge1xuICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0SXRlbXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mPFRyYW5zZmVySXRlbTxUPltdPihbXSk7XG4gIH07XG5cbiAgcmVhZG9ubHkgc2VsZWN0U2VsZWN0ZWRJdGVtcyA9IChzb3VyY2VUeXBlOiBTb3VyY2VUeXBlKSA9PiB7XG4gICAgaWYgKHNvdXJjZVR5cGUgPT09ICdzb3VyY2UnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdGUucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUuc2VsZWN0aW9ucy5zb3VyY2UpKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlVHlwZSA9PT0gJ3RhcmdldCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5zZWxlY3Rpb25zLnRhcmdldCkpO1xuICAgIH1cblxuICAgIHJldHVybiBvZihuZXcgU2V0PFRyYW5zZmVySXRlbTxUPj4oKSk7XG4gIH07XG5cbiAgcmVhZG9ubHkgdHJhbnNmZXJFbmFibGVkID0gdGhpcy5fc3RhdGUucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUub3BlcmF0aW9uc0VuYWJsZWQudHJhbnNmZXIpKTtcblxuICByZWFkb25seSBiYWNrdHJhbnNmZXJFbmFibGVkID0gdGhpcy5fc3RhdGUucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUub3BlcmF0aW9uc0VuYWJsZWQuYmFja3RyYW5zZmVyKSk7XG5cbiAgcmVhZG9ubHkgcmVzZXRFbmFibGVkID0gdGhpcy5fc3RhdGUucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUub3BlcmF0aW9uc0VuYWJsZWQucmVzZXQpKTtcblxuICBpbml0KHsgc291cmNlLCB0YXJnZXQgfTogU2VsZWN0aW9uU3RhdGU8VD4pIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHJlZHVjZXJzLmluaXRGbih7IHNvdXJjZSwgdGFyZ2V0IH0pKTtcbiAgfVxuXG4gIHRyYW5zZmVyKCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUocmVkdWNlcnMudHJhbnNmZXJGbigpKTtcbiAgfVxuICBiYWNrdHJhbnNmZXIoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZShyZWR1Y2Vycy5iYWNrdHJhbnNmZXJGbigpKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUocmVkdWNlcnMucmVzZXRGbigpKTtcbiAgfVxuXG4gIGNoZWNrYm94U2VsZWN0aW9uKGl0ZW06IFRyYW5zZmVySXRlbTxUPiwgc291cmNlVHlwZTogU291cmNlVHlwZSkge1xuICAgIGlmIChzb3VyY2VUeXBlID09PSAnc291cmNlJykge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZShyZWR1Y2Vycy5zZWxlY3Rpb25JdGVtU291cmNlRm4oeyBpdGVtIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlVHlwZSA9PT0gJ3RhcmdldCcpIHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUocmVkdWNlcnMuc2VsZWN0aW9uSXRlbVRhcmdldEZuKHsgaXRlbSB9KSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWxsU2VsZWN0aW9uKGNoZWNrZWQ6IGJvb2xlYW4sIHNvdXJjZVR5cGU6IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoc291cmNlVHlwZSA9PT0gJ3NvdXJjZScpIHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUocmVkdWNlcnMuc2VsZWN0QWxsU291cmNlRm4oeyBjaGVja2VkIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlVHlwZSA9PT0gJ3RhcmdldCcpIHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUocmVkdWNlcnMuc2VsZWN0QWxsVGFyZ2V0Rm4oeyBjaGVja2VkIH0pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlKHJlZHVjZXJGbjogKHN0YXRlOiBTdGF0ZTxUPikgPT4gU3RhdGU8VD4pIHtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KHJlZHVjZXJGbih0aGlzLl9zdGF0ZS52YWx1ZSkpO1xuICB9XG59XG4iXX0=
@@ -1,72 +0,0 @@
1
- import { AsyncPipe, TitleCasePipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, HostAttributeToken, inject, ViewChild } from '@angular/core';
3
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
- import { combineLatest, distinctUntilChanged, map, shareReplay, skip, startWith, tap } from 'rxjs';
5
- import { ItAbstractComponent } from '../../../../abstracts/abstract.component';
6
- import { TranslateModule } from '@ngx-translate/core';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../store/transfer.store";
9
- import * as i2 from "@ngx-translate/core";
10
- export class ItTransferListComponent extends ItAbstractComponent {
11
- constructor(store) {
12
- super();
13
- this.store = store;
14
- /**
15
- * Widget title
16
- */
17
- this.title = inject(new HostAttributeToken('title'), { optional: true });
18
- this.sourceType = inject(new HostAttributeToken('sourceType'), { optional: true });
19
- this.items = this.store.selectItems(this.sourceType).pipe(distinctUntilChanged(), shareReplay());
20
- this.selected = this.store.selectSelectedItems(this.sourceType).pipe(distinctUntilChanged(), shareReplay());
21
- this.numberOfItems$ = this.items.pipe(map(items => ({ length: items.length })), startWith({ length: 0 }));
22
- this.selectAllDisabled = this.items.pipe(map(items => items.length === 0));
23
- /**
24
- * Items of the list
25
- * @default []
26
- */
27
- this.items$ = combineLatest([this.items, this.selected]).pipe(map(([items, selected]) => items.map(item => {
28
- item.selected = selected.has(item);
29
- return item;
30
- })));
31
- this.instanceId = this.getInstanceId();
32
- this.onItemsUpdate();
33
- }
34
- /**
35
- * Checkbox selection click handler
36
- */
37
- checkboxSelectionHandler(item) {
38
- this.store.checkboxSelection(item, this.sourceType);
39
- }
40
- /**
41
- * Checkbox select all selection handler
42
- */
43
- checkboxSelectAllHandler(event) {
44
- const checked = event.target.checked;
45
- this.store.selectAllSelection(checked, this.sourceType);
46
- }
47
- /**
48
- * Items update subscription
49
- */
50
- onItemsUpdate() {
51
- this.items
52
- .pipe(takeUntilDestroyed(), skip(1), tap(() => {
53
- if (this.selectAllCheckboxRef) {
54
- this.selectAllCheckboxRef.nativeElement.checked = false;
55
- }
56
- }))
57
- .subscribe();
58
- }
59
- getInstanceId() {
60
- return Math.floor(Math.random() * 100000000).toString();
61
- }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItTransferListComponent, deps: [{ token: i1.TransferStore }], target: i0.ɵɵFactoryTarget.Component }); }
63
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItTransferListComponent, isStandalone: true, selector: "it-transfer-list", viewQueries: [{ propertyName: "selectAllCheckboxRef", first: true, predicate: ["selectAllCheckbox"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"it-transfer-wrapper source\">\n <div class=\"transfer-header\">\n <div class=\"form-check\">\n <input\n #selectAllCheckbox\n type=\"checkbox\"\n id=\"{{ instanceId }}checkbox{{ title }}\"\n [disabled]=\"selectAllDisabled | async\"\n (click)=\"checkboxSelectAllHandler($event)\" />\n <label for=\"{{ instanceId }}checkbox{{ title }}\">\n <span>\n @if (numberOfItems$ | async; as numberOfItems) {\n <span class=\"num\"> {{ numberOfItems.length }}</span>\n <span> {{ (numberOfItems.length === 1 ? 'it.transfer.item' : 'it.transfer.items') | translate }}</span>\n }\n </span>\n <span class=\"descr\">{{ title | titlecase }}</span>\n </label>\n </div>\n <!-- form check -->\n </div>\n <!-- transfer-header -->\n <div class=\"transfer-scroll\">\n <div class=\"transfer-group\">\n @for (item of items$ | async; track item.value) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n id=\"{{ instanceId }}-{{ item.value }}\"\n [checked]=\"item.selected\"\n (click)=\"checkboxSelectionHandler(item)\" />\n <label for=\"{{ instanceId }}-{{ item.value }}\">\n <span>\n <span>{{ item.text }}</span>\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n</div>\n<!-- it-transfer-wrapper -->\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItTransferListComponent, decorators: [{
66
- type: Component,
67
- args: [{ selector: 'it-transfer-list', standalone: true, imports: [TranslateModule, AsyncPipe, TitleCasePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"it-transfer-wrapper source\">\n <div class=\"transfer-header\">\n <div class=\"form-check\">\n <input\n #selectAllCheckbox\n type=\"checkbox\"\n id=\"{{ instanceId }}checkbox{{ title }}\"\n [disabled]=\"selectAllDisabled | async\"\n (click)=\"checkboxSelectAllHandler($event)\" />\n <label for=\"{{ instanceId }}checkbox{{ title }}\">\n <span>\n @if (numberOfItems$ | async; as numberOfItems) {\n <span class=\"num\"> {{ numberOfItems.length }}</span>\n <span> {{ (numberOfItems.length === 1 ? 'it.transfer.item' : 'it.transfer.items') | translate }}</span>\n }\n </span>\n <span class=\"descr\">{{ title | titlecase }}</span>\n </label>\n </div>\n <!-- form check -->\n </div>\n <!-- transfer-header -->\n <div class=\"transfer-scroll\">\n <div class=\"transfer-group\">\n @for (item of items$ | async; track item.value) {\n <div class=\"form-check\">\n <input\n type=\"checkbox\"\n id=\"{{ instanceId }}-{{ item.value }}\"\n [checked]=\"item.selected\"\n (click)=\"checkboxSelectionHandler(item)\" />\n <label for=\"{{ instanceId }}-{{ item.value }}\">\n <span>\n <span>{{ item.text }}</span>\n </span>\n </label>\n </div>\n }\n </div>\n </div>\n</div>\n<!-- it-transfer-wrapper -->\n" }]
68
- }], ctorParameters: () => [{ type: i1.TransferStore }], propDecorators: { selectAllCheckboxRef: [{
69
- type: ViewChild,
70
- args: ['selectAllCheckbox']
71
- }] } });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJhbnNmZXIvdHJhbnNmZXItbGlzdC90cmFuc2Zlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS90cmFuc2Zlci90cmFuc2Zlci1saXN0L3RyYW5zZmVyLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQWN0RCxNQUFNLE9BQU8sdUJBQTJCLFNBQVEsbUJBQW1CO0lBa0NqRSxZQUE2QixLQUF1QjtRQUNsRCxLQUFLLEVBQUUsQ0FBQztRQURtQixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQWpDcEQ7O1dBRUc7UUFDTSxVQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFD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U0FBUyx5Q0FBRSxhQUFhOzsyRkFJeEMsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxtQkFFbkMsdUJBQXVCLENBQUMsTUFBTTtrRkFnQy9DLG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEF0dHJpYnV0ZVRva2VuLCBpbmplY3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHNraXAsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJdEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2ZlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmUvdHJhbnNmZXIuc3RvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTb3VyY2VUeXBlLCBUcmFuc2Zlckl0ZW0gfSBmcm9tICcuLi90cmFuc2Zlci5tb2RlbCc7XG5cbmludGVyZmFjZSBTZWxlY3RhYmxlVHJhbnNmZXJJdGVtPFQ+IGV4dGVuZHMgVHJhbnNmZXJJdGVtPFQ+IHtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LXRyYW5zZmVyLWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBBc3luY1BpcGUsIFRpdGxlQ2FzZVBpcGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJhbnNmZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBJdFRyYW5zZmVyTGlzdENvbXBvbmVudDxUPiBleHRlbmRzIEl0QWJzdHJhY3RDb21wb25lbnQge1xuICAvKipcbiAgICogV2lkZ2V0IHRpdGxlXG4gICAqL1xuICByZWFkb25seSB0aXRsZSA9IGluamVjdChuZXcgSG9zdEF0dHJpYnV0ZVRva2VuKCd0aXRsZScpLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IHNvdXJjZVR5cGUgPSBpbmplY3QobmV3IEhvc3RBdHRyaWJ1dGVUb2tlbignc291cmNlVHlwZScpLCB7IG9wdGlvbmFsOiB0cnVlIH0pIGFzIFNvdXJjZVR5cGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpdGVtcyA9IHRoaXMuc3RvcmUuc2VsZWN0SXRlbXModGhpcy5zb3VyY2VUeXBlKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkID0gdGhpcy5zdG9yZS5zZWxlY3RTZWxlY3RlZEl0ZW1zKHRoaXMuc291cmNlVHlwZSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSgpKTtcblxuICByZWFkb25seSBudW1iZXJPZkl0ZW1zJCA9IHRoaXMuaXRlbXMucGlwZShcbiAgICBtYXAoaXRlbXMgPT4gKHsgbGVuZ3RoOiBpdGVtcy5sZW5ndGggfSkpLFxuICAgIHN0YXJ0V2l0aCh7IGxlbmd0aDogMCB9KVxuICApO1xuICByZWFkb25seSBzZWxlY3RBbGxEaXNhYmxlZCA9IHRoaXMuaXRlbXMucGlwZShtYXAoaXRlbXMgPT4gaXRlbXMubGVuZ3RoID09PSAwKSk7XG4gIC8qKlxuICAgKiBJdGVtcyBvZiB0aGUgbGlzdFxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgaXRlbXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5pdGVtcywgdGhpcy5zZWxlY3RlZF0pLnBpcGUoXG4gICAgbWFwKChbaXRlbXMsIHNlbGVjdGVkXSkgPT5cbiAgICAgIGl0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgKGl0ZW0gYXMgU2VsZWN0YWJsZVRyYW5zZmVySXRlbTxUPikuc2VsZWN0ZWQgPSBzZWxlY3RlZC5oYXMoaXRlbSk7XG4gICAgICAgIHJldHVybiBpdGVtIGFzIFNlbGVjdGFibGVUcmFuc2Zlckl0ZW08VD47XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBAVmlld0NoaWxkKCdzZWxlY3RBbGxDaGVja2JveCcpXG4gIHNlbGVjdEFsbENoZWNrYm94UmVmITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICByZWFkb25seSBpbnN0YW5jZUlkID0gdGhpcy5nZXRJbnN0YW5jZUlkKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdG9yZTogVHJhbnNmZXJTdG9yZTxUPikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5vbkl0ZW1zVXBkYXRlKCk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrYm94IHNlbGVjdGlvbiBjbGljayBoYW5kbGVyXG4gICAqL1xuICBjaGVja2JveFNlbGVjdGlvbkhhbmRsZXIoaXRlbTogVHJhbnNmZXJJdGVtPFQ+KSB7XG4gICAgdGhpcy5zdG9yZS5jaGVja2JveFNlbGVjdGlvbihpdGVtLCB0aGlzLnNvdXJjZVR5cGUpO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja2JveCBzZWxlY3QgYWxsIHNlbGVjdGlvbiBoYW5kbGVyXG4gICAqL1xuICBjaGVja2JveFNlbGVjdEFsbEhhbmRsZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgY2hlY2tlZCA9ICgoZXZlbnQgYXMgUG9pbnRlckV2ZW50KS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICB0aGlzLnN0b3JlLnNlbGVjdEFsbFNlbGVjdGlvbihjaGVja2VkLCB0aGlzLnNvdXJjZVR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZW1zIHVwZGF0ZSBzdWJzY3JpcHRpb25cbiAgICovXG4gIHByaXZhdGUgb25JdGVtc1VwZGF0ZSgpIHtcbiAgICB0aGlzLml0ZW1zXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hSZWYubmF0aXZlRWxlbWVudC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnN0YW5jZUlkKCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApLnRvU3RyaW5nKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpdC10cmFuc2Zlci13cmFwcGVyIHNvdXJjZVwiPlxuICA8ZGl2IGNsYXNzPVwidHJhbnNmZXItaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjc2VsZWN0QWxsQ2hlY2tib3hcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJ7eyBpbnN0YW5jZUlkIH19Y2hlY2tib3h7eyB0aXRsZSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RBbGxEaXNhYmxlZCB8IGFzeW5jXCJcbiAgICAgICAgKGNsaWNrKT1cImNoZWNrYm94U2VsZWN0QWxsSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgIDxsYWJlbCBmb3I9XCJ7eyBpbnN0YW5jZUlkIH19Y2hlY2tib3h7eyB0aXRsZSB9fVwiPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICBAaWYgKG51bWJlck9mSXRlbXMkIHwgYXN5bmM7IGFzIG51bWJlck9mSXRlbXMpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnVtXCI+IHt7IG51bWJlck9mSXRlbXMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+IHt7IChudW1iZXJPZkl0ZW1zLmxlbmd0aCA9PT0gMSA/ICdpdC50cmFuc2Zlci5pdGVtJyA6ICdpdC50cmFuc2Zlci5pdGVtcycpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRlc2NyXCI+e3sgdGl0bGUgfCB0aXRsZWNhc2UgfX08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gZm9ybSBjaGVjayAtLT5cbiAgPC9kaXY+XG4gIDwhLS0gdHJhbnNmZXItaGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwidHJhbnNmZXItc2Nyb2xsXCI+XG4gICAgPGRpdiBjbGFzcz1cInRyYW5zZmVyLWdyb3VwXCI+XG4gICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zJCB8IGFzeW5jOyB0cmFjayBpdGVtLnZhbHVlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgaWQ9XCJ7eyBpbnN0YW5jZUlkIH19LXt7IGl0ZW0udmFsdWUgfX1cIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hlY2tib3hTZWxlY3Rpb25IYW5kbGVyKGl0ZW0pXCIgLz5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwie3sgaW5zdGFuY2VJZCB9fS17eyBpdGVtLnZhbHVlIH19XCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBpdC10cmFuc2Zlci13cmFwcGVyIC0tPlxuIl19