@firestitch/list 15.0.0 → 16.0.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 (149) hide show
  1. package/app/components/body/body.component.d.ts +1 -1
  2. package/app/components/body/row/actions/actions.component.d.ts +1 -1
  3. package/app/components/body/row/cell/cell.component.d.ts +1 -1
  4. package/app/components/body/row/inline-action/inline-action.component.d.ts +1 -1
  5. package/app/components/body/row/menu-action/menu-action.component.d.ts +1 -1
  6. package/app/components/body/row/row.component.d.ts +1 -1
  7. package/app/components/footer/footer-row/footer-row.component.d.ts +1 -7
  8. package/app/components/footer/footer.component.d.ts +1 -1
  9. package/app/components/head/head.component.d.ts +1 -1
  10. package/app/components/list/list.component.d.ts +1 -1
  11. package/app/components/loader/loader.component.d.ts +1 -1
  12. package/app/components/pagination/pagination.component.d.ts +1 -1
  13. package/app/components/status/status.component.d.ts +1 -1
  14. package/app/directives/cell/cell.directive.d.ts +1 -1
  15. package/app/directives/column/column.directive.d.ts +1 -1
  16. package/app/directives/content-init/content-init.directive.d.ts +1 -1
  17. package/app/directives/draggable-list/draggable-list.directive.d.ts +1 -1
  18. package/app/directives/draggable-row/draggable-row.directive.d.ts +1 -1
  19. package/app/directives/footer/footer.directive.d.ts +1 -1
  20. package/app/directives/group-expand-trigger/group-expand-trigger.directive.d.ts +1 -1
  21. package/app/directives/header/header.directive.d.ts +1 -1
  22. package/app/models/column.model.d.ts +1 -1
  23. package/esm2022/app/classes/actions-controller.mjs +57 -0
  24. package/esm2022/app/classes/columns-controller.mjs +211 -0
  25. package/esm2022/app/classes/data-controller.mjs +348 -0
  26. package/esm2022/app/classes/external-params-controller.mjs +153 -0
  27. package/esm2022/app/classes/list-controller.mjs +712 -0
  28. package/esm2022/app/classes/pagination-controller.mjs +491 -0
  29. package/esm2022/app/classes/persistance-controller.mjs +19 -0
  30. package/esm2022/app/classes/reorder-controller.mjs +191 -0
  31. package/esm2022/app/classes/selection-controller.mjs +473 -0
  32. package/esm2022/app/classes/sorting-controller.mjs +207 -0
  33. package/esm2022/app/components/body/body.component.mjs +73 -0
  34. package/esm2022/app/components/body/row/actions/actions.component.mjs +102 -0
  35. package/esm2022/app/components/body/row/cell/cell.component.mjs +109 -0
  36. package/esm2022/app/components/body/row/inline-action/inline-action.component.mjs +32 -0
  37. package/esm2022/app/components/body/row/menu-action/menu-action.component.mjs +51 -0
  38. package/esm2022/app/components/body/row/row.component.mjs +341 -0
  39. package/esm2022/app/components/customize-cols/customize-cols.component.mjs +70 -0
  40. package/{esm2020 → esm2022}/app/components/footer/footer-row/footer-cell/footer-cell.component.mjs +4 -4
  41. package/esm2022/app/components/footer/footer-row/footer-row.component.mjs +17 -0
  42. package/esm2022/app/components/footer/footer.component.mjs +35 -0
  43. package/esm2022/app/components/head/head-cell/head-cell.component.mjs +32 -0
  44. package/esm2022/app/components/head/head.component.mjs +113 -0
  45. package/esm2022/app/components/list/list.component.mjs +406 -0
  46. package/esm2022/app/components/loader/loader.component.mjs +40 -0
  47. package/esm2022/app/components/manage-saved-filters/manage-saved-filters.component.mjs +78 -0
  48. package/esm2022/app/components/pagination/pagination.component.mjs +40 -0
  49. package/esm2022/app/components/saved-filters/saved-filters.component.mjs +32 -0
  50. package/esm2022/app/components/status/status.component.mjs +69 -0
  51. package/esm2022/app/directives/cell/cell.directive.mjs +21 -0
  52. package/esm2022/app/directives/column/column.directive.mjs +137 -0
  53. package/{esm2020 → esm2022}/app/directives/content/content.directive.mjs +4 -4
  54. package/esm2022/app/directives/content-init/content-init.directive.mjs +23 -0
  55. package/esm2022/app/directives/draggable-list/draggable-list.directive.mjs +344 -0
  56. package/esm2022/app/directives/draggable-row/draggable-row.directive.mjs +83 -0
  57. package/{esm2020 → esm2022}/app/directives/empty-state/empty-state.directive.mjs +4 -4
  58. package/esm2022/app/directives/footer/footer.directive.mjs +21 -0
  59. package/esm2022/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs +28 -0
  60. package/{esm2020 → esm2022}/app/directives/group-footer/group-footer.directive.mjs +4 -4
  61. package/{esm2020 → esm2022}/app/directives/group-header/group-header.directive.mjs +4 -4
  62. package/esm2022/app/directives/header/header.directive.mjs +21 -0
  63. package/{esm2020 → esm2022}/app/directives/heading/heading.directive.mjs +4 -4
  64. package/{esm2020 → esm2022}/app/directives/heading-container/heading-container.directive.mjs +4 -4
  65. package/{esm2020 → esm2022}/app/directives/subheading/subheading.directive.mjs +4 -4
  66. package/{esm2020 → esm2022}/app/fs-list.module.mjs +89 -89
  67. package/esm2022/app/models/column-attributes.mjs +139 -0
  68. package/esm2022/app/models/column.model.mjs +173 -0
  69. package/esm2022/app/models/row/base-row.mjs +25 -0
  70. package/esm2022/app/models/row/child-row.mjs +29 -0
  71. package/esm2022/app/models/row/group-footer-row.mjs +22 -0
  72. package/{esm2020 → esm2022}/app/models/row/group-row.mjs +3 -3
  73. package/esm2022/app/models/row-action.model.mjs +102 -0
  74. package/esm2022/app/models/row.mjs +90 -0
  75. package/esm2022/app/models/styleConfig.model.mjs +78 -0
  76. package/{esm2020 → esm2022}/app/pipes/action-label.mjs +4 -4
  77. package/esm2022/app/services/group-expand-notifier.service.mjs +24 -0
  78. package/{fesm2020 → fesm2022}/firestitch-list.mjs +675 -442
  79. package/fesm2022/firestitch-list.mjs.map +1 -0
  80. package/package.json +5 -11
  81. package/esm2020/app/classes/actions-controller.mjs +0 -55
  82. package/esm2020/app/classes/columns-controller.mjs +0 -206
  83. package/esm2020/app/classes/data-controller.mjs +0 -345
  84. package/esm2020/app/classes/external-params-controller.mjs +0 -147
  85. package/esm2020/app/classes/list-controller.mjs +0 -674
  86. package/esm2020/app/classes/pagination-controller.mjs +0 -491
  87. package/esm2020/app/classes/persistance-controller.mjs +0 -19
  88. package/esm2020/app/classes/reorder-controller.mjs +0 -182
  89. package/esm2020/app/classes/selection-controller.mjs +0 -466
  90. package/esm2020/app/classes/sorting-controller.mjs +0 -206
  91. package/esm2020/app/components/body/body.component.mjs +0 -64
  92. package/esm2020/app/components/body/row/actions/actions.component.mjs +0 -97
  93. package/esm2020/app/components/body/row/cell/cell.component.mjs +0 -107
  94. package/esm2020/app/components/body/row/inline-action/inline-action.component.mjs +0 -33
  95. package/esm2020/app/components/body/row/menu-action/menu-action.component.mjs +0 -46
  96. package/esm2020/app/components/body/row/row.component.mjs +0 -322
  97. package/esm2020/app/components/customize-cols/customize-cols.component.mjs +0 -68
  98. package/esm2020/app/components/footer/footer-row/footer-row.component.mjs +0 -28
  99. package/esm2020/app/components/footer/footer.component.mjs +0 -31
  100. package/esm2020/app/components/head/head-cell/head-cell.component.mjs +0 -29
  101. package/esm2020/app/components/head/head.component.mjs +0 -103
  102. package/esm2020/app/components/list/list.component.mjs +0 -385
  103. package/esm2020/app/components/loader/loader.component.mjs +0 -40
  104. package/esm2020/app/components/manage-saved-filters/manage-saved-filters.component.mjs +0 -76
  105. package/esm2020/app/components/pagination/pagination.component.mjs +0 -37
  106. package/esm2020/app/components/saved-filters/saved-filters.component.mjs +0 -29
  107. package/esm2020/app/components/status/status.component.mjs +0 -64
  108. package/esm2020/app/directives/cell/cell.directive.mjs +0 -18
  109. package/esm2020/app/directives/column/column.directive.mjs +0 -121
  110. package/esm2020/app/directives/content-init/content-init.directive.mjs +0 -22
  111. package/esm2020/app/directives/draggable-list/draggable-list.directive.mjs +0 -330
  112. package/esm2020/app/directives/draggable-row/draggable-row.directive.mjs +0 -78
  113. package/esm2020/app/directives/footer/footer.directive.mjs +0 -18
  114. package/esm2020/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs +0 -26
  115. package/esm2020/app/directives/header/header.directive.mjs +0 -18
  116. package/esm2020/app/models/column-attributes.mjs +0 -132
  117. package/esm2020/app/models/column.model.mjs +0 -164
  118. package/esm2020/app/models/row/base-row.mjs +0 -23
  119. package/esm2020/app/models/row/child-row.mjs +0 -28
  120. package/esm2020/app/models/row/group-footer-row.mjs +0 -21
  121. package/esm2020/app/models/row-action.model.mjs +0 -90
  122. package/esm2020/app/models/row.mjs +0 -89
  123. package/esm2020/app/models/styleConfig.model.mjs +0 -76
  124. package/esm2020/app/services/group-expand-notifier.service.mjs +0 -26
  125. package/fesm2015/firestitch-list.mjs +0 -5802
  126. package/fesm2015/firestitch-list.mjs.map +0 -1
  127. package/fesm2020/firestitch-list.mjs.map +0 -1
  128. /package/{esm2020 → esm2022}/app/classes/index.mjs +0 -0
  129. /package/{esm2020 → esm2022}/app/directives/index.mjs +0 -0
  130. /package/{esm2020 → esm2022}/app/enums/action-type.enum.mjs +0 -0
  131. /package/{esm2020 → esm2022}/app/enums/page-change-type.enum.mjs +0 -0
  132. /package/{esm2020 → esm2022}/app/enums/pagination-strategy.enum.mjs +0 -0
  133. /package/{esm2020 → esm2022}/app/enums/row-type.enum.mjs +0 -0
  134. /package/{esm2020 → esm2022}/app/enums/state.enum.mjs +0 -0
  135. /package/{esm2020 → esm2022}/app/fs-list.providers.mjs +0 -0
  136. /package/{esm2020 → esm2022}/app/interfaces/cellconfig.interface.mjs +0 -0
  137. /package/{esm2020 → esm2022}/app/interfaces/column-config.interface.mjs +0 -0
  138. /package/{esm2020 → esm2022}/app/interfaces/draggable-list.interface.mjs +0 -0
  139. /package/{esm2020 → esm2022}/app/interfaces/external-params.interface.mjs +0 -0
  140. /package/{esm2020 → esm2022}/app/interfaces/index.mjs +0 -0
  141. /package/{esm2020 → esm2022}/app/interfaces/listconfig.interface.mjs +0 -0
  142. /package/{esm2020 → esm2022}/app/interfaces/pagination-state.interface.mjs +0 -0
  143. /package/{esm2020 → esm2022}/app/interfaces/pagination.interface.mjs +0 -0
  144. /package/{esm2020 → esm2022}/app/interfaces/sorting-change-event.interface.mjs +0 -0
  145. /package/{esm2020 → esm2022}/app/models/column-async-attribute.mjs +0 -0
  146. /package/{esm2020 → esm2022}/app/models/row/simple-row.mjs +0 -0
  147. /package/{esm2020 → esm2022}/app/pipes/index.mjs +0 -0
  148. /package/{esm2020 → esm2022}/firestitch-list.mjs +0 -0
  149. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -24,5 +24,5 @@ export declare class FsBodyComponent {
24
24
  rowsContainer: any;
25
25
  headerTemplate: TemplateRef<any>;
26
26
  static ɵfac: i0.ɵɵFactoryDeclaration<FsBodyComponent, never>;
27
- static ɵcmp: i0.ɵɵComponentDeclaration<FsBodyComponent, "[fs-list-body]", never, { "rows": "rows"; "columns": "columns"; "hasFooter": "hasFooter"; "rowActionsRaw": "rowActionsRaw"; "groupActionsRaw": "groupActionsRaw"; "rowEvents": "rowEvents"; "rowClass": "rowClass"; "hasRowActions": "hasRowActions"; "selection": "selection"; "restoreMode": "restoreMode"; "rowRemoved": "rowRemoved"; "activeFiltersCount": "activeFiltersCount"; "reorderEnabled": "reorderEnabled"; "reorderPosition": "reorderPosition"; "reorderStrategy": "reorderStrategy"; "reorderMultiple": "reorderMultiple"; }, {}, ["headerTemplate"], never, false, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsBodyComponent, "[fs-list-body]", never, { "rows": { "alias": "rows"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "hasFooter": { "alias": "hasFooter"; "required": false; }; "rowActionsRaw": { "alias": "rowActionsRaw"; "required": false; }; "groupActionsRaw": { "alias": "groupActionsRaw"; "required": false; }; "rowEvents": { "alias": "rowEvents"; "required": false; }; "rowClass": { "alias": "rowClass"; "required": false; }; "hasRowActions": { "alias": "hasRowActions"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "restoreMode": { "alias": "restoreMode"; "required": false; }; "rowRemoved": { "alias": "rowRemoved"; "required": false; }; "activeFiltersCount": { "alias": "activeFiltersCount"; "required": false; }; "reorderEnabled": { "alias": "reorderEnabled"; "required": false; }; "reorderPosition": { "alias": "reorderPosition"; "required": false; }; "reorderStrategy": { "alias": "reorderStrategy"; "required": false; }; "reorderMultiple": { "alias": "reorderMultiple"; "required": false; }; }, {}, ["headerTemplate"], never, false, never>;
28
28
  }
@@ -32,5 +32,5 @@ export declare class FsRowActionsComponent {
32
32
  */
33
33
  private _removeAction;
34
34
  static ɵfac: i0.ɵɵFactoryDeclaration<FsRowActionsComponent, never>;
35
- static ɵcmp: i0.ɵɵComponentDeclaration<FsRowActionsComponent, "fs-list-row-actions", never, { "row": "row"; "index": "index"; "restoreMode": "restoreMode"; "rowActions": "rowActions"; "rowRemoved": "rowRemoved"; "menuRowActions": "menuRowActions"; "inlineRowActions": "inlineRowActions"; "restoreAction": "restoreAction"; }, {}, never, never, false, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsRowActionsComponent, "fs-list-row-actions", never, { "row": { "alias": "row"; "required": false; }; "index": { "alias": "index"; "required": false; }; "restoreMode": { "alias": "restoreMode"; "required": false; }; "rowActions": { "alias": "rowActions"; "required": false; }; "rowRemoved": { "alias": "rowRemoved"; "required": false; }; "menuRowActions": { "alias": "menuRowActions"; "required": false; }; "inlineRowActions": { "alias": "inlineRowActions"; "required": false; }; "restoreAction": { "alias": "restoreAction"; "required": false; }; }, {}, never, never, false, never>;
36
36
  }
@@ -18,5 +18,5 @@ export declare class FsCellComponent implements OnInit, OnChanges, DoCheck, OnDe
18
18
  private _initCellTemplate;
19
19
  private _listenGroupOpen;
20
20
  static ɵfac: i0.ɵɵFactoryDeclaration<FsCellComponent, never>;
21
- static ɵcmp: i0.ɵɵComponentDeclaration<FsCellComponent, "[fs-cell]", never, { "column": "column"; "row": "row"; "rowIndex": "rowIndex"; }, {}, never, never, false, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsCellComponent, "[fs-cell]", never, { "column": { "alias": "column"; "required": false; }; "row": { "alias": "row"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; }, {}, never, never, false, never>;
22
22
  }
@@ -9,5 +9,5 @@ export declare class FsRowInlineActionComponent {
9
9
  actionClick(event: any): void;
10
10
  fileSelected(event: any): void;
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<FsRowInlineActionComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<FsRowInlineActionComponent, "fs-list-row-inline-action", never, { "action": "action"; }, { "clicked": "clicked"; "fileSelect": "fileSelect"; }, never, never, false, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsRowInlineActionComponent, "fs-list-row-inline-action", never, { "action": { "alias": "action"; "required": false; }; }, { "clicked": "clicked"; "fileSelect": "fileSelect"; }, never, never, false, never>;
13
13
  }
@@ -16,5 +16,5 @@ export declare class FsRowMenuActionComponent {
16
16
  errorFile(event: any): void;
17
17
  closeMenu(): void;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<FsRowMenuActionComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<FsRowMenuActionComponent, "fs-list-row-menu-action", never, { "row": "row"; "icon": "icon"; "label": "label"; "file": "file"; }, { "fileSelect": "fileSelect"; "fileError": "fileError"; }, never, never, false, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsRowMenuActionComponent, "fs-list-row-menu-action", never, { "row": { "alias": "row"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "label": { "alias": "label"; "required": false; }; "file": { "alias": "file"; "required": false; }; }, { "fileSelect": "fileSelect"; "fileError": "fileError"; }, never, never, false, never>;
20
20
  }
@@ -81,5 +81,5 @@ export declare class FsRowComponent implements OnInit, DoCheck, OnDestroy {
81
81
  private _initSelection;
82
82
  private _filterActionsByCategories;
83
83
  static ɵfac: i0.ɵɵFactoryDeclaration<FsRowComponent, never>;
84
- static ɵcmp: i0.ɵɵComponentDeclaration<FsRowComponent, "[fs-list-row]", never, { "row": "row"; "rowActionsRaw": "rowActionsRaw"; "groupActionsRaw": "groupActionsRaw"; "hasRowActions": "hasRowActions"; "rowEvents": "rowEvents"; "rowClass": "rowClass"; "restoreMode": "restoreMode"; "rowIndex": "rowIndex"; "columns": "columns"; "selection": "selection"; "rowRemoved": "rowRemoved"; "activeFiltersCount": "activeFiltersCount"; "reorderEnabled": "reorderEnabled"; "reorderPosition": "reorderPosition"; "reorderStrategy": "reorderStrategy"; "reorderMultiple": "reorderMultiple"; }, {}, never, never, false, never>;
84
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsRowComponent, "[fs-list-row]", never, { "row": { "alias": "row"; "required": false; }; "rowActionsRaw": { "alias": "rowActionsRaw"; "required": false; }; "groupActionsRaw": { "alias": "groupActionsRaw"; "required": false; }; "hasRowActions": { "alias": "hasRowActions"; "required": false; }; "rowEvents": { "alias": "rowEvents"; "required": false; }; "rowClass": { "alias": "rowClass"; "required": false; }; "restoreMode": { "alias": "restoreMode"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "rowRemoved": { "alias": "rowRemoved"; "required": false; }; "activeFiltersCount": { "alias": "activeFiltersCount"; "required": false; }; "reorderEnabled": { "alias": "reorderEnabled"; "required": false; }; "reorderPosition": { "alias": "reorderPosition"; "required": false; }; "reorderStrategy": { "alias": "reorderStrategy"; "required": false; }; "reorderMultiple": { "alias": "reorderMultiple"; "required": false; }; }, {}, never, never, false, never>;
85
85
  }
@@ -1,14 +1,8 @@
1
1
  import { ChangeDetectorRef, ElementRef, KeyValueDiffers, Renderer2 } from '@angular/core';
2
- import { ReorderPosition, ReorderStrategy } from '../../../classes/reorder-controller';
3
2
  import { FsRowComponent } from '../../body/row/row.component';
4
3
  import * as i0 from "@angular/core";
5
4
  export declare class FsFooterRowComponent extends FsRowComponent {
6
- hasRowActions: boolean;
7
- activeFiltersCount: number;
8
- reorderEnabled: boolean;
9
- reorderPosition: ReorderPosition | null;
10
- reorderStrategy: ReorderStrategy | null;
11
5
  constructor(el: ElementRef, cdRef: ChangeDetectorRef, differs: KeyValueDiffers, renderer: Renderer2);
12
6
  static ɵfac: i0.ɵɵFactoryDeclaration<FsFooterRowComponent, never>;
13
- static ɵcmp: i0.ɵɵComponentDeclaration<FsFooterRowComponent, "[fs-list-footer-row]", never, { "hasRowActions": "hasRowActions"; "activeFiltersCount": "activeFiltersCount"; "reorderEnabled": "reorderEnabled"; "reorderPosition": "reorderPosition"; "reorderStrategy": "reorderStrategy"; }, {}, never, never, false, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsFooterRowComponent, "[fs-list-footer-row]", never, {}, {}, never, never, false, never>;
14
8
  }
@@ -11,5 +11,5 @@ export declare class FsFooterComponent {
11
11
  reorderPosition: ReorderPosition | null;
12
12
  reorderStrategy: ReorderStrategy | null;
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<FsFooterComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<FsFooterComponent, "[fs-list-footer]", never, { "hasRowActions": "hasRowActions"; "columns": "columns"; "selection": "selection"; "activeFiltersCount": "activeFiltersCount"; "reorderEnabled": "reorderEnabled"; "reorderPosition": "reorderPosition"; "reorderStrategy": "reorderStrategy"; }, {}, never, never, false, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsFooterComponent, "[fs-list-footer]", never, { "hasRowActions": { "alias": "hasRowActions"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "activeFiltersCount": { "alias": "activeFiltersCount"; "required": false; }; "reorderEnabled": { "alias": "reorderEnabled"; "required": false; }; "reorderPosition": { "alias": "reorderPosition"; "required": false; }; "reorderStrategy": { "alias": "reorderStrategy"; "required": false; }; }, {}, never, never, false, never>;
15
15
  }
@@ -45,5 +45,5 @@ export declare class FsHeadComponent implements OnInit, OnDestroy {
45
45
  */
46
46
  private _initSelection;
47
47
  static ɵfac: i0.ɵɵFactoryDeclaration<FsHeadComponent, never>;
48
- static ɵcmp: i0.ɵɵComponentDeclaration<FsHeadComponent, "[fs-list-head]", never, { "sorting": "sorting"; "columns": "columns"; "hasRowActions": "hasRowActions"; "selection": "selection"; "activeFiltersCount": "activeFiltersCount"; "reorderEnabled": "reorderEnabled"; "reorderPosition": "reorderPosition"; "reorderStrategy": "reorderStrategy"; }, {}, never, never, false, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsHeadComponent, "[fs-list-head]", never, { "sorting": { "alias": "sorting"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "hasRowActions": { "alias": "hasRowActions"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "activeFiltersCount": { "alias": "activeFiltersCount"; "required": false; }; "reorderEnabled": { "alias": "reorderEnabled"; "required": false; }; "reorderPosition": { "alias": "reorderPosition"; "required": false; }; "reorderStrategy": { "alias": "reorderStrategy"; "required": false; }; }, {}, never, never, false, never>;
49
49
  }
@@ -123,5 +123,5 @@ export declare class FsListComponent implements OnInit, OnDestroy, AfterContentI
123
123
  private _configMergeCustomizer;
124
124
  private _restorePersistance;
125
125
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListComponent, [null, { optional: true; }, { optional: true; }, { optional: true; }, null, null, null, null, null, null, null, null, null]>;
126
- static ɵcmp: i0.ɵɵComponentDeclaration<FsListComponent, "fs-list", never, { "config": "config"; "loaderLines": "loaderLines"; }, { "filtersReady": "filtersReady"; }, ["headingTemplate", "headingContainerTemplate", "subheadingTemplate", "_emptyStateTemplate", "columnTemplates"], ["[fs-list-content]"], false, never>;
126
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsListComponent, "fs-list", never, { "config": { "alias": "config"; "required": false; }; "loaderLines": { "alias": "loaderLines"; "required": false; }; }, { "filtersReady": "filtersReady"; }, ["headingTemplate", "headingContainerTemplate", "subheadingTemplate", "_emptyStateTemplate", "columnTemplates"], ["[fs-list-content]"], false, never>;
127
127
  }
@@ -10,5 +10,5 @@ export declare class FsListLoaderComponent implements OnInit, OnChanges {
10
10
  ngOnInit(): void;
11
11
  ngOnChanges(changes: SimpleChanges): void;
12
12
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListLoaderComponent, never>;
13
- static ɵcmp: i0.ɵɵComponentDeclaration<FsListLoaderComponent, "fs-list-loader", never, { "columns": "columns"; "loaderLines": "loaderLines"; }, {}, never, never, false, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsListLoaderComponent, "fs-list-loader", never, { "columns": { "alias": "columns"; "required": false; }; "loaderLines": { "alias": "loaderLines"; "required": false; }; }, {}, never, never, false, never>;
14
14
  }
@@ -10,5 +10,5 @@ export declare class FsPaginationComponent implements OnInit, OnDestroy {
10
10
  ngOnInit(): void;
11
11
  ngOnDestroy(): void;
12
12
  static ɵfac: i0.ɵɵFactoryDeclaration<FsPaginationComponent, never>;
13
- static ɵcmp: i0.ɵɵComponentDeclaration<FsPaginationComponent, "fs-list-pagination", never, { "pagination": "pagination"; "rows": "rows"; }, {}, never, never, false, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsPaginationComponent, "fs-list-pagination", never, { "pagination": { "alias": "pagination"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; }, {}, never, never, false, never>;
14
14
  }
@@ -16,5 +16,5 @@ export declare class FsStatusComponent implements OnInit, OnDestroy {
16
16
  setSortableColumn(column: any): void;
17
17
  setLimit(limit: any): void;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<FsStatusComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<FsStatusComponent, "fs-list-status", never, { "paging": "paging"; "sorting": "sorting"; "rows": "rows"; "firstLoad": "firstLoad"; }, {}, never, never, false, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<FsStatusComponent, "fs-list-status", never, { "paging": { "alias": "paging"; "required": false; }; "sorting": { "alias": "sorting"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "firstLoad": { "alias": "firstLoad"; "required": false; }; }, {}, never, never, false, never>;
20
20
  }
@@ -4,5 +4,5 @@ export declare class FsListCellDirective {
4
4
  align: string;
5
5
  className: string | string[];
6
6
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListCellDirective, never>;
7
- static ɵdir: i0.ɵɵDirectiveDeclaration<FsListCellDirective, "[fs-list-cell]", never, { "colspan": "colspan"; "align": "align"; "className": "class"; }, {}, never, never, false, never>;
7
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FsListCellDirective, "[fs-list-cell]", never, { "colspan": { "alias": "colspan"; "required": false; }; "align": { "alias": "align"; "required": false; }; "className": { "alias": "class"; "required": false; }; }, {}, never, never, false, never>;
8
8
  }
@@ -33,5 +33,5 @@ export declare class FsListColumnDirective {
33
33
  set width(value: string);
34
34
  set className(value: string | string[]);
35
35
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListColumnDirective, never>;
36
- static ɵdir: i0.ɵɵDirectiveDeclaration<FsListColumnDirective, "fs-list-column", never, { "visible": "show"; "title": "title"; "name": "name"; "customize": "customize"; "sortable": "sortable"; "sortableDefault": "sortableDefault"; "sortableDirection": "sortableDirection"; "direction": "direction"; "align": "align"; "width": "width"; "className": "class"; }, {}, ["headerTemplate", "headerConfigs", "groupHeaderTemplate", "groupHeaderConfigs", "groupFooterTemplate", "groupFooterConfigs", "cellTemplate", "cellConfigs", "footerTemplate", "footerConfigs", "expandTrigger"], never, false, never>;
36
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FsListColumnDirective, "fs-list-column", never, { "visible": { "alias": "show"; "required": false; }; "title": { "alias": "title"; "required": false; }; "name": { "alias": "name"; "required": false; }; "customize": { "alias": "customize"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "sortableDefault": { "alias": "sortableDefault"; "required": false; }; "sortableDirection": { "alias": "sortableDirection"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; "align": { "alias": "align"; "required": false; }; "width": { "alias": "width"; "required": false; }; "className": { "alias": "class"; "required": false; }; }, {}, ["headerTemplate", "headerConfigs", "groupHeaderTemplate", "groupHeaderConfigs", "groupFooterTemplate", "groupFooterConfigs", "cellTemplate", "cellConfigs", "footerTemplate", "footerConfigs", "expandTrigger"], never, false, never>;
37
37
  }
@@ -5,5 +5,5 @@ export declare class FsListContentInitDirective implements AfterViewInit {
5
5
  constructor();
6
6
  ngAfterViewInit(): void;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListContentInitDirective, never>;
8
- static ɵdir: i0.ɵɵDirectiveDeclaration<FsListContentInitDirective, "[fsListContentInit]", never, { "contentInitCallback": "fsListContentInit"; }, {}, never, never, false, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FsListContentInitDirective, "[fsListContentInit]", never, { "contentInitCallback": { "alias": "fsListContentInit"; "required": false; }; }, {}, never, never, false, never>;
9
9
  }
@@ -91,5 +91,5 @@ export declare class FsListDraggableListDirective {
91
91
  */
92
92
  private touchFix;
93
93
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListDraggableListDirective, never>;
94
- static ɵdir: i0.ɵɵDirectiveDeclaration<FsListDraggableListDirective, "[fsListDraggableList]", never, { "_rows": "rows"; }, {}, never, never, false, never>;
94
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FsListDraggableListDirective, "[fsListDraggableList]", never, { "_rows": { "alias": "rows"; "required": false; }; }, {}, never, never, false, never>;
95
95
  }
@@ -19,5 +19,5 @@ export declare class FsListDraggableRowDirective implements OnInit, OnDestroy {
19
19
  private _markReadyToSwapRows;
20
20
  private _unmarkRows;
21
21
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListDraggableRowDirective, never>;
22
- static ɵdir: i0.ɵɵDirectiveDeclaration<FsListDraggableRowDirective, "[fsListDraggableRow]", never, { "row": "row"; }, {}, never, never, false, never>;
22
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FsListDraggableRowDirective, "[fsListDraggableRow]", never, { "row": { "alias": "row"; "required": false; }; }, {}, never, never, false, never>;
23
23
  }
@@ -4,5 +4,5 @@ export declare class FsListFooterDirective {
4
4
  align: string;
5
5
  className: string | string[];
6
6
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListFooterDirective, never>;
7
- static ɵdir: i0.ɵɵDirectiveDeclaration<FsListFooterDirective, "[fs-list-footer]", never, { "colspan": "colspan"; "align": "align"; "className": "class"; }, {}, never, never, false, never>;
7
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FsListFooterDirective, "[fs-list-footer]", never, { "colspan": { "alias": "colspan"; "required": false; }; "align": { "alias": "align"; "required": false; }; "className": { "alias": "class"; "required": false; }; }, {}, never, never, false, never>;
8
8
  }
@@ -6,5 +6,5 @@ export declare class FsListGroupExpandTriggerDirective {
6
6
  row: any;
7
7
  constructor(_expandNotifier: GroupExpandNotifierService);
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListGroupExpandTriggerDirective, never>;
9
- static ɵdir: i0.ɵɵDirectiveDeclaration<FsListGroupExpandTriggerDirective, "[fsListGroupExpandTrigger]", never, { "row": "row"; }, {}, never, never, false, never>;
9
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FsListGroupExpandTriggerDirective, "[fsListGroupExpandTrigger]", never, { "row": { "alias": "row"; "required": false; }; }, {}, never, never, false, never>;
10
10
  }
@@ -4,5 +4,5 @@ export declare class FsListHeaderDirective {
4
4
  align: string;
5
5
  className: string | string[];
6
6
  static ɵfac: i0.ɵɵFactoryDeclaration<FsListHeaderDirective, never>;
7
- static ɵdir: i0.ɵɵDirectiveDeclaration<FsListHeaderDirective, "[fs-list-header]", never, { "colspan": "colspan"; "align": "align"; "className": "class"; }, {}, never, never, false, never>;
7
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FsListHeaderDirective, "[fs-list-header]", never, { "colspan": { "alias": "colspan"; "required": false; }; "align": { "alias": "align"; "required": false; }; "className": { "alias": "class"; "required": false; }; }, {}, never, never, false, never>;
8
8
  }
@@ -42,7 +42,7 @@ export declare class Column {
42
42
  get sortingDirection$(): Observable<'asc' | 'desc'>;
43
43
  get visible(): boolean;
44
44
  get visible$(): Observable<boolean>;
45
- get direction(): "desc" | "asc";
45
+ get direction(): "asc" | "desc";
46
46
  get fullNameDirection(): "Ascending" | "Descending";
47
47
  get ordered(): boolean;
48
48
  set ordered(value: boolean);
@@ -0,0 +1,57 @@
1
+ import { Subject } from 'rxjs';
2
+ export class ActionsController {
3
+ _filterRef;
4
+ _actions = [];
5
+ _reorderAction;
6
+ _doneAction;
7
+ _destroy$ = new Subject();
8
+ constructor() { }
9
+ get destroy$() {
10
+ return this._destroy$.asObservable();
11
+ }
12
+ get actions() {
13
+ return this._actions;
14
+ }
15
+ get hasActions() {
16
+ return this._actions.length > 0;
17
+ }
18
+ setFilterRef(ref) {
19
+ this._filterRef = ref;
20
+ }
21
+ setActions(actions) {
22
+ this.clearActions();
23
+ this._actions = actions;
24
+ if (this._reorderAction) {
25
+ this._actions.unshift(this._reorderAction);
26
+ }
27
+ }
28
+ addReorderAction(action) {
29
+ const actionClickFn = action.click;
30
+ this._actions.unshift(action);
31
+ action.click = () => {
32
+ this._filterRef.updateActions([this._doneAction]);
33
+ this._filterRef.hideKeywordField();
34
+ this._filterRef.hideFiltersBtn();
35
+ actionClickFn(null);
36
+ };
37
+ this._reorderAction = action;
38
+ }
39
+ addReorderDoneAction(action) {
40
+ this._doneAction = action;
41
+ const actionClickFn = action.click;
42
+ this._doneAction.click = () => {
43
+ this._filterRef.updateActions(this._actions);
44
+ this._filterRef.showKeywordField();
45
+ this._filterRef.showFiltersBtn();
46
+ actionClickFn(null);
47
+ };
48
+ }
49
+ clearActions() {
50
+ this._actions = [];
51
+ this._destroy$.next();
52
+ }
53
+ updateDisabledState() {
54
+ this._filterRef.updateDisabledState();
55
+ }
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL2FjdGlvbnMtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTNDLE1BQU0sT0FBTyxpQkFBaUI7SUFFcEIsVUFBVSxDQUFrQjtJQUU1QixRQUFRLEdBQW1CLEVBQUUsQ0FBQztJQUM5QixjQUFjLENBQWU7SUFDN0IsV0FBVyxDQUFlO0lBRTFCLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXhDLGdCQUFlLENBQUM7SUFFaEIsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxZQUFZLENBQUMsR0FBb0I7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDeEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUF1QjtRQUN2QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFvQjtRQUMxQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQTtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxNQUFvQjtRQUM5QyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUMxQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRW5DLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGaWx0ZXJDb21wb25lbnQgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNMaXN0QWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9saXN0Y29uZmlnLmludGVyZmFjZSc7XG5cblxuZXhwb3J0IGNsYXNzIEFjdGlvbnNDb250cm9sbGVyIHtcblxuICBwcml2YXRlIF9maWx0ZXJSZWY6IEZpbHRlckNvbXBvbmVudDtcblxuICBwcml2YXRlIF9hY3Rpb25zOiBGc0xpc3RBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF9yZW9yZGVyQWN0aW9uOiBGc0xpc3RBY3Rpb247XG4gIHByaXZhdGUgX2RvbmVBY3Rpb246IEZzTGlzdEFjdGlvbjtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBnZXQgZGVzdHJveSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3kkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3Rpb25zKCk6IEZzTGlzdEFjdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzQWN0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHVibGljIHNldEZpbHRlclJlZihyZWY6IEZpbHRlckNvbXBvbmVudCkge1xuICAgIHRoaXMuX2ZpbHRlclJlZiA9IHJlZjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3Rpb25zKGFjdGlvbnM6IEZzTGlzdEFjdGlvbltdKSB7XG4gICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICB0aGlzLl9hY3Rpb25zID0gYWN0aW9ucztcblxuICAgIGlmICh0aGlzLl9yZW9yZGVyQWN0aW9uKSB7XG4gICAgICB0aGlzLl9hY3Rpb25zLnVuc2hpZnQodGhpcy5fcmVvcmRlckFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZFJlb3JkZXJBY3Rpb24oYWN0aW9uOiBGc0xpc3RBY3Rpb24pIHtcbiAgICBjb25zdCBhY3Rpb25DbGlja0ZuID0gYWN0aW9uLmNsaWNrO1xuICAgIHRoaXMuX2FjdGlvbnMudW5zaGlmdChhY3Rpb24pO1xuXG4gICAgYWN0aW9uLmNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZmlsdGVyUmVmLnVwZGF0ZUFjdGlvbnMoW3RoaXMuX2RvbmVBY3Rpb25dKTtcbiAgICAgIHRoaXMuX2ZpbHRlclJlZi5oaWRlS2V5d29yZEZpZWxkKCk7XG4gICAgICB0aGlzLl9maWx0ZXJSZWYuaGlkZUZpbHRlcnNCdG4oKTtcbiAgICAgIGFjdGlvbkNsaWNrRm4obnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVvcmRlckFjdGlvbiA9IGFjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBhZGRSZW9yZGVyRG9uZUFjdGlvbihhY3Rpb246IEZzTGlzdEFjdGlvbikge1xuICAgIHRoaXMuX2RvbmVBY3Rpb24gPSBhY3Rpb247XG4gICAgY29uc3QgYWN0aW9uQ2xpY2tGbiA9IGFjdGlvbi5jbGljaztcblxuICAgIHRoaXMuX2RvbmVBY3Rpb24uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9maWx0ZXJSZWYudXBkYXRlQWN0aW9ucyh0aGlzLl9hY3Rpb25zKTtcbiAgICAgIHRoaXMuX2ZpbHRlclJlZi5zaG93S2V5d29yZEZpZWxkKCk7XG4gICAgICB0aGlzLl9maWx0ZXJSZWYuc2hvd0ZpbHRlcnNCdG4oKTtcbiAgICAgIGFjdGlvbkNsaWNrRm4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsZWFyQWN0aW9ucygpIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gW107XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZURpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyUmVmLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,211 @@
1
+ import { isNumber } from 'lodash-es';
2
+ import { BehaviorSubject, merge, Subject } from 'rxjs';
3
+ import { skip, takeUntil, tap } from 'rxjs/operators';
4
+ import { Column } from '../models/column.model';
5
+ export class ColumnsController {
6
+ _visibleColumns$ = new BehaviorSubject([]);
7
+ _visibleColumnsShared$ = this._visibleColumns$.pipe();
8
+ _theadClass = '';
9
+ _loadFn;
10
+ _changeFn;
11
+ _customizeFieldTitleFn;
12
+ _customizeFieldDisabledFn;
13
+ _columnTooltipFn;
14
+ _isConfigured = false;
15
+ _loadFnConfigured = false;
16
+ _changeFnConfigured = false;
17
+ _columnsFetched = false;
18
+ _hasHeader = false;
19
+ _hasFooter = false;
20
+ _columns = [];
21
+ _defaultConfigs;
22
+ _columnsUpdated$ = new Subject();
23
+ _destroy$ = new Subject();
24
+ constructor() { }
25
+ get columns() {
26
+ return this._columns.slice();
27
+ }
28
+ get visibleColumns() {
29
+ return this._visibleColumns$.getValue();
30
+ }
31
+ get visibleColumns$() {
32
+ return this._visibleColumnsShared$;
33
+ }
34
+ get columnsForDialog() {
35
+ const hasCustomTitle = !!this._customizeFieldTitleFn;
36
+ const hasCustomDisabledStatus = !!this._customizeFieldDisabledFn;
37
+ const hasCustomTooltip = !!this._columnTooltipFn;
38
+ return this._columns
39
+ .filter((column) => column.customize && !!column.name)
40
+ .map((column) => {
41
+ const title = hasCustomTitle
42
+ ? this._customizeFieldTitleFn(column.name, column.title)
43
+ : column.name;
44
+ const disabled = hasCustomDisabledStatus
45
+ ? this._customizeFieldDisabledFn(column.name)
46
+ : false;
47
+ const tooltip = hasCustomTooltip
48
+ ? this._columnTooltipFn(column.name, column.visible, disabled)
49
+ : void 0;
50
+ return {
51
+ template: column.headerTemplate,
52
+ name: column.name,
53
+ show: column.visible,
54
+ title: title,
55
+ disabled: disabled,
56
+ tooltip: tooltip,
57
+ };
58
+ });
59
+ }
60
+ get columnsFetched() {
61
+ return this._columnsFetched;
62
+ }
63
+ get hasHeader() {
64
+ return this._hasHeader;
65
+ }
66
+ get hasFooter() {
67
+ return this._hasFooter;
68
+ }
69
+ get theadClass() {
70
+ return this._theadClass;
71
+ }
72
+ get configured() {
73
+ return this._isConfigured;
74
+ }
75
+ get loadFnConfigured() {
76
+ return this._loadFnConfigured;
77
+ }
78
+ get changeFnConfigured() {
79
+ return this._changeFnConfigured;
80
+ }
81
+ get changeFn() {
82
+ return this._changeFn;
83
+ }
84
+ get visibleColumnsNames() {
85
+ return this.visibleColumns
86
+ .map((column) => column.name)
87
+ .filter((name) => !!name);
88
+ }
89
+ setDefaults(defaults) {
90
+ this._defaultConfigs = defaults;
91
+ }
92
+ /**
93
+ * Set data from list config
94
+ * @param config
95
+ */
96
+ initConfig(config) {
97
+ if (config) {
98
+ if (config.load) {
99
+ this._loadFn = config.load;
100
+ this._loadFnConfigured = true;
101
+ }
102
+ if (config.change) {
103
+ this._changeFn = config.change;
104
+ this._changeFnConfigured = true;
105
+ }
106
+ if (config.title) {
107
+ this._customizeFieldTitleFn = config.title;
108
+ }
109
+ if (config.disabled) {
110
+ this._customizeFieldDisabledFn = config.disabled;
111
+ }
112
+ if (config.tooltip) {
113
+ this._columnTooltipFn = config.tooltip;
114
+ }
115
+ this._isConfigured = true;
116
+ }
117
+ }
118
+ /**
119
+ * Base initialization for columns
120
+ * @param templates
121
+ */
122
+ initializeColumns(templates) {
123
+ this._columns = [];
124
+ templates.forEach((column) => {
125
+ const col = new Column(column, this._defaultConfigs);
126
+ if (col.headerTemplate || col.title) {
127
+ this._hasHeader = true;
128
+ }
129
+ if (col.footerTemplate) {
130
+ this._hasFooter = true;
131
+ }
132
+ this._columns.push(col);
133
+ });
134
+ this._theadClass = this.hasHeader ? 'has-header' : '';
135
+ this._updateColspans('headerConfigs', 'headerColspanned');
136
+ this._updateColspans('groupHeaderConfigs', 'groupHeaderColspanned');
137
+ this._updateColspans('groupFooterConfigs', 'groupFooterColspanned');
138
+ this._updateColspans('cellConfigs', 'cellColspanned');
139
+ this._updateColspans('footerConfigs', 'footerColspanned');
140
+ this.updateVisibleColumns();
141
+ this._listenColumnVisibilityUpdates();
142
+ }
143
+ /**
144
+ * Load visiblity config for columns from remote
145
+ */
146
+ loadRemoteColumnConfigs() {
147
+ return this._loadFn()
148
+ .pipe(takeUntil(this._destroy$), tap((columnConfigs) => {
149
+ this._columnsFetched = true;
150
+ this.updateVisibilityForCols(columnConfigs);
151
+ }));
152
+ }
153
+ /**
154
+ * Set visible columns based on current columns show status
155
+ */
156
+ updateVisibleColumns() {
157
+ this._visibleColumns$.next(this._columns.filter((column) => column.visible) || []);
158
+ }
159
+ /**
160
+ * Update visibility based on passed config
161
+ * @param columnsConfig
162
+ */
163
+ updateVisibilityForCols(columnsConfig) {
164
+ columnsConfig.forEach((columnConfig) => {
165
+ const col = this._columns
166
+ .find((column) => column.name === columnConfig.name);
167
+ if (col) {
168
+ col.updateVisibility(columnConfig.show);
169
+ }
170
+ });
171
+ this.updateVisibleColumns();
172
+ }
173
+ destroy() {
174
+ this._destroy$.next();
175
+ this._destroy$.complete();
176
+ this._columnsUpdated$.complete();
177
+ this._columns = void 0;
178
+ this._visibleColumns$ = void 0;
179
+ this._defaultConfigs = void 0;
180
+ this._loadFn = void 0;
181
+ this._changeFn = void 0;
182
+ }
183
+ _listenColumnVisibilityUpdates() {
184
+ this._columnsUpdated$.next();
185
+ const columnsVisibility = this._columns.map((column) => {
186
+ return column.visible$.pipe(skip(1));
187
+ });
188
+ merge(...columnsVisibility)
189
+ .pipe(takeUntil(this._columnsUpdated$), takeUntil(this._destroy$))
190
+ .subscribe(() => {
191
+ this.updateVisibleColumns();
192
+ });
193
+ }
194
+ _updateColspans(config, updateFlag) {
195
+ this._columns.forEach((col, index) => {
196
+ if (col[config].colspan !== void 0) {
197
+ const spanTo = index + +col[config].colspan;
198
+ if (!isNumber(spanTo)) {
199
+ return;
200
+ }
201
+ this._columns[index][updateFlag] = false;
202
+ for (let i = index + 1; i < spanTo; i++) {
203
+ if (this._columns[i]) {
204
+ this._columns[i][updateFlag] = true;
205
+ }
206
+ }
207
+ }
208
+ });
209
+ }
210
+ }
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9jbGFzc2VzL2NvbHVtbnMtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFXaEQsTUFBTSxPQUFPLGlCQUFpQjtJQUVwQixnQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxzQkFBc0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEQsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLENBQXFCO0lBQzVCLFNBQVMsQ0FBdUI7SUFDaEMsc0JBQXNCLENBQXNCO0lBQzVDLHlCQUF5QixDQUF5QjtJQUNsRCxnQkFBZ0IsQ0FBd0I7SUFFeEMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQzVCLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDeEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDeEIsZUFBZSxDQUFDO0lBRWhCLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDdkMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFeEMsZ0JBQWUsQ0FBQztJQUVoQixJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUNyRCxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7UUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBRWpELE9BQU8sSUFBSSxDQUFDLFFBQVE7YUFDakIsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ3JELEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2QsTUFBTSxLQUFLLEdBQUcsY0FBYztnQkFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3hELENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBRWhCLE1BQU0sUUFBUSxHQUFHLHVCQUF1QjtnQkFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUM3QyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBRVYsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCO2dCQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7Z0JBQzlELENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVYLE9BQU87Z0JBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxjQUFjO2dCQUMvQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTztnQkFDcEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE9BQU8sRUFBRSxPQUFPO2FBQ2pCLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQzVCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBUTtRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFDLE1BQTBCO1FBQzFDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQzthQUMvQjtZQUVELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUMvQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2FBQ2pDO1lBRUQsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNoQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUM1QztZQUVELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDbEQ7WUFFRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ3hDO1lBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUJBQWlCLENBQUMsU0FBUztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVuQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUdyRCxJQUFJLEdBQUcsQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDeEI7WUFDRCxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQ3hCO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXRELElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUJBQXVCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRTthQUNsQixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFDekIsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0I7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQ3ZELENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksdUJBQXVCLENBQUMsYUFBYTtRQUMxQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVE7aUJBQ3RCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdkQsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTyw4QkFBOEI7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNyRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7YUFDeEIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBRW5DLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFFNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDckIsT0FBTztpQkFDUjtnQkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFFekMsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQ3JDO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNraXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcbmltcG9ydCB7XG4gIEZzTGlzdENvbHVtbkNoYW5nZUZuLFxuICBGc0xpc3RDb2x1bW5Db25maWcsXG4gIEZzTGlzdENvbHVtbkRpc2FibGVkRm4sXG4gIEZzTGlzdENvbHVtbkxvYWRGbixcbiAgRnNMaXN0Q29sdW1uVGl0bGVGbixcbiAgRnNMaXN0Q29sdW1uVG9vbHRpcEZuLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2xpc3Rjb25maWcuaW50ZXJmYWNlJztcblxuXG5leHBvcnQgY2xhc3MgQ29sdW1uc0NvbnRyb2xsZXIge1xuXG4gIHByaXZhdGUgX3Zpc2libGVDb2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sdW1uW10+KFtdKTtcbiAgcHJpdmF0ZSBfdmlzaWJsZUNvbHVtbnNTaGFyZWQkID0gdGhpcy5fdmlzaWJsZUNvbHVtbnMkLnBpcGUoKTtcbiAgcHJpdmF0ZSBfdGhlYWRDbGFzcyA9ICcnO1xuICBwcml2YXRlIF9sb2FkRm46IEZzTGlzdENvbHVtbkxvYWRGbjtcbiAgcHJpdmF0ZSBfY2hhbmdlRm46IEZzTGlzdENvbHVtbkNoYW5nZUZuO1xuICBwcml2YXRlIF9jdXN0b21pemVGaWVsZFRpdGxlRm46IEZzTGlzdENvbHVtblRpdGxlRm47XG4gIHByaXZhdGUgX2N1c3RvbWl6ZUZpZWxkRGlzYWJsZWRGbjogRnNMaXN0Q29sdW1uRGlzYWJsZWRGbjtcbiAgcHJpdmF0ZSBfY29sdW1uVG9vbHRpcEZuOiBGc0xpc3RDb2x1bW5Ub29sdGlwRm47XG5cbiAgcHJpdmF0ZSBfaXNDb25maWd1cmVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2xvYWRGbkNvbmZpZ3VyZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2hhbmdlRm5Db25maWd1cmVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2NvbHVtbnNGZXRjaGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2hhc0hlYWRlciA9IGZhbHNlO1xuICBwcml2YXRlIF9oYXNGb290ZXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY29sdW1uczogQ29sdW1uW10gPSBbXTtcbiAgcHJpdmF0ZSBfZGVmYXVsdENvbmZpZ3M7XG5cbiAgcHJpdmF0ZSBfY29sdW1uc1VwZGF0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMuc2xpY2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUNvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sdW1ucyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUNvbHVtbnMkKCk6IE9ic2VydmFibGU8Q29sdW1uW10+IHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtbnNTaGFyZWQkO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2x1bW5zRm9yRGlhbG9nKCkge1xuICAgIGNvbnN0IGhhc0N1c3RvbVRpdGxlID0gISF0aGlzLl9jdXN0b21pemVGaWVsZFRpdGxlRm47XG4gICAgY29uc3QgaGFzQ3VzdG9tRGlzYWJsZWRTdGF0dXMgPSAhIXRoaXMuX2N1c3RvbWl6ZUZpZWxkRGlzYWJsZWRGbjtcbiAgICBjb25zdCBoYXNDdXN0b21Ub29sdGlwID0gISF0aGlzLl9jb2x1bW5Ub29sdGlwRm47XG5cbiAgICByZXR1cm4gdGhpcy5fY29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uY3VzdG9taXplICYmICEhY29sdW1uLm5hbWUpXG4gICAgICAubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgdGl0bGUgPSBoYXNDdXN0b21UaXRsZVxuICAgICAgICAgID8gdGhpcy5fY3VzdG9taXplRmllbGRUaXRsZUZuKGNvbHVtbi5uYW1lLCBjb2x1bW4udGl0bGUpXG4gICAgICAgICAgOiBjb2x1bW4ubmFtZTtcblxuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IGhhc0N1c3RvbURpc2FibGVkU3RhdHVzXG4gICAgICAgICAgPyB0aGlzLl9jdXN0b21pemVGaWVsZERpc2FibGVkRm4oY29sdW1uLm5hbWUpXG4gICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICBjb25zdCB0b29sdGlwID0gaGFzQ3VzdG9tVG9vbHRpcFxuICAgICAgICAgID8gdGhpcy5fY29sdW1uVG9vbHRpcEZuKGNvbHVtbi5uYW1lLCBjb2x1bW4udmlzaWJsZSwgZGlzYWJsZWQpXG4gICAgICAgICAgOiB2b2lkIDA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0ZW1wbGF0ZTogY29sdW1uLmhlYWRlclRlbXBsYXRlLFxuICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIHNob3c6IGNvbHVtbi52aXNpYmxlLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgdG9vbHRpcDogdG9vbHRpcCxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbHVtbnNGZXRjaGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zRmV0Y2hlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzSGVhZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNIZWFkZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0Zvb3RlcigpIHtcbiAgICByZXR1cm4gdGhpcy5faGFzRm9vdGVyO1xuICB9XG5cbiAgcHVibGljIGdldCB0aGVhZENsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLl90aGVhZENsYXNzO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25maWd1cmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0NvbmZpZ3VyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvYWRGbkNvbmZpZ3VyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRGbkNvbmZpZ3VyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoYW5nZUZuQ29uZmlndXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlRm5Db25maWd1cmVkO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGFuZ2VGbigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlRm47XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpc2libGVDb2x1bW5zTmFtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnNcbiAgICAgIC5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiAhIW5hbWUpO1xuICB9XG5cbiAgcHVibGljIHNldERlZmF1bHRzKGRlZmF1bHRzKSB7XG4gICAgdGhpcy5fZGVmYXVsdENvbmZpZ3MgPSBkZWZhdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGF0YSBmcm9tIGxpc3QgY29uZmlnXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIHB1YmxpYyBpbml0Q29uZmlnKGNvbmZpZzogRnNMaXN0Q29sdW1uQ29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgaWYgKGNvbmZpZy5sb2FkKSB7XG4gICAgICAgIHRoaXMuX2xvYWRGbiA9IGNvbmZpZy5sb2FkO1xuICAgICAgICB0aGlzLl9sb2FkRm5Db25maWd1cmVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5jaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRm4gPSBjb25maWcuY2hhbmdlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VGbkNvbmZpZ3VyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnRpdGxlKSB7XG4gICAgICAgIHRoaXMuX2N1c3RvbWl6ZUZpZWxkVGl0bGVGbiA9IGNvbmZpZy50aXRsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLl9jdXN0b21pemVGaWVsZERpc2FibGVkRm4gPSBjb25maWcuZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcudG9vbHRpcCkge1xuICAgICAgICB0aGlzLl9jb2x1bW5Ub29sdGlwRm4gPSBjb25maWcudG9vbHRpcDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNDb25maWd1cmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQmFzZSBpbml0aWFsaXphdGlvbiBmb3IgY29sdW1uc1xuICAgKiBAcGFyYW0gdGVtcGxhdGVzXG4gICAqL1xuICBwdWJsaWMgaW5pdGlhbGl6ZUNvbHVtbnModGVtcGxhdGVzKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IFtdO1xuXG4gICAgdGVtcGxhdGVzLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgY29sID0gbmV3IENvbHVtbihjb2x1bW4sIHRoaXMuX2RlZmF1bHRDb25maWdzKTtcblxuXG4gICAgICBpZiAoY29sLmhlYWRlclRlbXBsYXRlIHx8IGNvbC50aXRsZSkge1xuICAgICAgICB0aGlzLl9oYXNIZWFkZXIgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNvbC5mb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLl9oYXNGb290ZXIgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3RoZWFkQ2xhc3MgPSB0aGlzLmhhc0hlYWRlciA/ICdoYXMtaGVhZGVyJyA6ICcnO1xuXG4gICAgdGhpcy5fdXBkYXRlQ29sc3BhbnMoJ2hlYWRlckNvbmZpZ3MnLCAnaGVhZGVyQ29sc3Bhbm5lZCcpO1xuICAgIHRoaXMuX3VwZGF0ZUNvbHNwYW5zKCdncm91cEhlYWRlckNvbmZpZ3MnLCAnZ3JvdXBIZWFkZXJDb2xzcGFubmVkJyk7XG4gICAgdGhpcy5fdXBkYXRlQ29sc3BhbnMoJ2dyb3VwRm9vdGVyQ29uZmlncycsICdncm91cEZvb3RlckNvbHNwYW5uZWQnKTtcbiAgICB0aGlzLl91cGRhdGVDb2xzcGFucygnY2VsbENvbmZpZ3MnLCAnY2VsbENvbHNwYW5uZWQnKTtcbiAgICB0aGlzLl91cGRhdGVDb2xzcGFucygnZm9vdGVyQ29uZmlncycsICdmb290ZXJDb2xzcGFubmVkJyk7XG5cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gICAgdGhpcy5fbGlzdGVuQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHZpc2libGl0eSBjb25maWcgZm9yIGNvbHVtbnMgZnJvbSByZW1vdGVcbiAgICovXG4gIHB1YmxpYyBsb2FkUmVtb3RlQ29sdW1uQ29uZmlncygpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZEZuKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YXAoKGNvbHVtbkNvbmZpZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLl9jb2x1bW5zRmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5Rm9yQ29scyhjb2x1bW5Db25maWdzKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdmlzaWJsZSBjb2x1bW5zIGJhc2VkIG9uIGN1cnJlbnQgY29sdW1ucyBzaG93IHN0YXR1c1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZVZpc2libGVDb2x1bW5zKCkge1xuICAgIHRoaXMuX3Zpc2libGVDb2x1bW5zJC5uZXh0KFxuICAgICAgdGhpcy5fY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnZpc2libGUpIHx8IFtdXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdmlzaWJpbGl0eSBiYXNlZCBvbiBwYXNzZWQgY29uZmlnXG4gICAqIEBwYXJhbSBjb2x1bW5zQ29uZmlnXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlVmlzaWJpbGl0eUZvckNvbHMoY29sdW1uc0NvbmZpZykge1xuICAgIGNvbHVtbnNDb25maWcuZm9yRWFjaCgoY29sdW1uQ29uZmlnKSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSB0aGlzLl9jb2x1bW5zXG4gICAgICAgIC5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBjb2x1bW5Db25maWcubmFtZSk7XG5cbiAgICAgIGlmIChjb2wpIHtcbiAgICAgICAgY29sLnVwZGF0ZVZpc2liaWxpdHkoY29sdW1uQ29uZmlnLnNob3cpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlQ29sdW1ucygpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY29sdW1uc1VwZGF0ZWQkLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9jb2x1bW5zID0gdm9pZCAwO1xuICAgIHRoaXMuX3Zpc2libGVDb2x1bW5zJCA9IHZvaWQgMDtcbiAgICB0aGlzLl9kZWZhdWx0Q29uZmlncyA9IHZvaWQgMDtcblxuICAgIHRoaXMuX2xvYWRGbiA9IHZvaWQgMDtcbiAgICB0aGlzLl9jaGFuZ2VGbiA9IHZvaWQgMDtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlbkNvbHVtblZpc2liaWxpdHlVcGRhdGVzKCkge1xuICAgIHRoaXMuX2NvbHVtbnNVcGRhdGVkJC5uZXh0KCk7XG5cbiAgICBjb25zdCBjb2x1bW5zVmlzaWJpbGl0eSA9IHRoaXMuX2NvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICAgIHJldHVybiBjb2x1bW4udmlzaWJsZSQucGlwZShza2lwKDEpKVxuICAgIH0pO1xuXG4gICAgbWVyZ2UoLi4uY29sdW1uc1Zpc2liaWxpdHkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2NvbHVtbnNVcGRhdGVkJCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUNvbHNwYW5zKGNvbmZpZywgdXBkYXRlRmxhZykge1xuICAgIHRoaXMuX2NvbHVtbnMuZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xuXG4gICAgICBpZiAoY29sW2NvbmZpZ10uY29sc3BhbiAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbnN0IHNwYW5UbyA9IGluZGV4ICsgK2NvbFtjb25maWddLmNvbHNwYW47XG5cbiAgICAgICAgaWYgKCFpc051bWJlcihzcGFuVG8pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbHVtbnNbaW5kZXhdW3VwZGF0ZUZsYWddID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHNwYW5UbzsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbHVtbnNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNbaV1bdXBkYXRlRmxhZ10gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxufVxuIl19