@skyux/list-builder 5.0.0-beta.0 → 5.0.1

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 (232) hide show
  1. package/LICENSE +21 -0
  2. package/bundles/skyux-list-builder.umd.js +1308 -1130
  3. package/bundles/skyux-list-builder.umd.js.map +1 -1
  4. package/documentation.json +6679 -0
  5. package/esm2015/modules/list/list-data-request.model.js +1 -1
  6. package/esm2015/modules/list/list-data-response.model.js +1 -1
  7. package/esm2015/modules/list/list-data.provider.js +1 -1
  8. package/esm2015/modules/list/list-paging.component.js +1 -1
  9. package/esm2015/modules/list/list-view.component.js +9 -8
  10. package/esm2015/modules/list/list.component.js +81 -87
  11. package/esm2015/modules/list/list.module.js +15 -18
  12. package/esm2015/modules/list/state/filters/filters.orchestrator.js +2 -3
  13. package/esm2015/modules/list/state/filters/update.action.js +1 -1
  14. package/esm2015/modules/list/state/items/items.orchestrator.js +12 -9
  15. package/esm2015/modules/list/state/items/load.action.js +1 -1
  16. package/esm2015/modules/list/state/items/set-items-selected.action.js +4 -2
  17. package/esm2015/modules/list/state/items/set-loading.action.js +1 -1
  18. package/esm2015/modules/list/state/list-state-action.type.js +2 -1
  19. package/esm2015/modules/list/state/list-state.model.js +1 -1
  20. package/esm2015/modules/list/state/list-state.rxstate.js +10 -8
  21. package/esm2015/modules/list/state/list-state.state-node.js +11 -14
  22. package/esm2015/modules/list/state/paging/paging.model.js +1 -1
  23. package/esm2015/modules/list/state/paging/paging.orchestrator.js +2 -3
  24. package/esm2015/modules/list/state/paging/set-items-per-page.action.js +1 -1
  25. package/esm2015/modules/list/state/paging/set-max-pages.action.js +1 -1
  26. package/esm2015/modules/list/state/paging/set-page-number.action.js +1 -1
  27. package/esm2015/modules/list/state/search/search.model.js +1 -1
  28. package/esm2015/modules/list/state/search/search.orchestrator.js +5 -4
  29. package/esm2015/modules/list/state/search/set-field-selectors.action.js +1 -1
  30. package/esm2015/modules/list/state/search/set-functions.action.js +1 -1
  31. package/esm2015/modules/list/state/search/set-options.action.js +1 -1
  32. package/esm2015/modules/list/state/search/set-search-text.action.js +1 -1
  33. package/esm2015/modules/list/state/selected/load.action.js +1 -1
  34. package/esm2015/modules/list/state/selected/selected.model.js +1 -1
  35. package/esm2015/modules/list/state/selected/selected.orchestrator.js +9 -10
  36. package/esm2015/modules/list/state/selected/set-item-selected.action.js +1 -1
  37. package/esm2015/modules/list/state/selected/set-items-selected.action.js +1 -1
  38. package/esm2015/modules/list/state/selected/set-loading.action.js +1 -1
  39. package/esm2015/modules/list/state/sort/label.model.js +1 -1
  40. package/esm2015/modules/list/state/sort/set-available.action.js +1 -1
  41. package/esm2015/modules/list/state/sort/set-field-selectors.action.js +1 -1
  42. package/esm2015/modules/list/state/sort/set-global.action.js +1 -1
  43. package/esm2015/modules/list/state/sort/sort.model.js +1 -1
  44. package/esm2015/modules/list/state/sort/sort.orchestrator.js +4 -5
  45. package/esm2015/modules/list/state/toolbar/disable.action.js +1 -1
  46. package/esm2015/modules/list/state/toolbar/load.action.js +1 -1
  47. package/esm2015/modules/list/state/toolbar/remove.action.js +1 -1
  48. package/esm2015/modules/list/state/toolbar/set-exists.action.js +1 -1
  49. package/esm2015/modules/list/state/toolbar/set-type.action.js +1 -1
  50. package/esm2015/modules/list/state/toolbar/show-multiselect-toolbar.action.js +1 -1
  51. package/esm2015/modules/list/state/toolbar/toolbar-item.model.js +1 -1
  52. package/esm2015/modules/list/state/toolbar/toolbar.model.js +1 -1
  53. package/esm2015/modules/list/state/toolbar/toolbar.orchestrator.js +3 -4
  54. package/esm2015/modules/list/state/views/load.action.js +1 -1
  55. package/esm2015/modules/list/state/views/set-active.action.js +1 -1
  56. package/esm2015/modules/list/state/views/view.model.js +1 -1
  57. package/esm2015/modules/list/state/views/views.model.js +1 -1
  58. package/esm2015/modules/list/state/views/views.orchestrator.js +2 -4
  59. package/esm2015/modules/list-data-provider-in-memory/list-data-in-memory.provider.js +25 -14
  60. package/esm2015/modules/list-filters/filter.model.js +1 -1
  61. package/esm2015/modules/list-filters/list-filter-button.component.js +23 -24
  62. package/esm2015/modules/list-filters/list-filter-inline-item-renderer.component.js +24 -24
  63. package/esm2015/modules/list-filters/list-filter-inline-item.component.js +32 -32
  64. package/esm2015/modules/list-filters/list-filter-inline.component.js +28 -26
  65. package/esm2015/modules/list-filters/list-filter-inline.model.js +1 -1
  66. package/esm2015/modules/list-filters/list-filter-summary.component.js +22 -23
  67. package/esm2015/modules/list-filters/list-filters.module.js +33 -27
  68. package/esm2015/modules/list-paging/list-paging.component.js +37 -40
  69. package/esm2015/modules/list-paging/list-paging.module.js +15 -19
  70. package/esm2015/modules/list-toolbar/list-multiselect-toolbar.component.js +45 -41
  71. package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.js +22 -23
  72. package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-action.js +2 -1
  73. package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.js +22 -20
  74. package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.js +26 -30
  75. package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.js +34 -23
  76. package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.js +10 -9
  77. package/esm2015/modules/list-toolbar/list-toolbar-item-renderer.component.js +22 -21
  78. package/esm2015/modules/list-toolbar/list-toolbar-item.component.js +23 -24
  79. package/esm2015/modules/list-toolbar/list-toolbar-search-actions.component.js +15 -13
  80. package/esm2015/modules/list-toolbar/list-toolbar-sort.component.js +21 -23
  81. package/esm2015/modules/list-toolbar/list-toolbar-view-actions.component.js +14 -12
  82. package/esm2015/modules/list-toolbar/list-toolbar.component.js +142 -139
  83. package/esm2015/modules/list-toolbar/list-toolbar.module.js +62 -31
  84. package/esm2015/modules/list-toolbar/state/config/config.model.js +1 -1
  85. package/esm2015/modules/list-toolbar/state/config/config.orchestrator.js +2 -4
  86. package/esm2015/modules/list-toolbar/state/config/set-search-enabled.action.js +1 -1
  87. package/esm2015/modules/list-toolbar/state/config/set-sort-selector-enabled.action.js +1 -1
  88. package/esm2015/modules/list-toolbar/state/toolbar-state-action.type.js +2 -1
  89. package/esm2015/modules/list-toolbar/state/toolbar-state.model.js +1 -1
  90. package/esm2015/modules/list-toolbar/state/toolbar-state.rxstate.js +9 -8
  91. package/esm2015/modules/list-toolbar/state/toolbar-state.state-node.js +12 -17
  92. package/esm2015/modules/shared/sky-list-builder-resources.module.js +53 -0
  93. package/esm2015/public-api.js +78 -0
  94. package/esm2015/skyux-list-builder.js +2 -23
  95. package/fesm2015/skyux-list-builder.js +992 -915
  96. package/fesm2015/skyux-list-builder.js.map +1 -1
  97. package/modules/list/list.component.d.ts +3 -0
  98. package/modules/list/list.module.d.ts +6 -0
  99. package/modules/list/state/list-state.rxstate.d.ts +3 -0
  100. package/modules/list/state/list-state.state-node.d.ts +3 -0
  101. package/modules/list-filters/list-filter-button.component.d.ts +3 -0
  102. package/modules/list-filters/list-filter-inline-item-renderer.component.d.ts +3 -0
  103. package/modules/list-filters/list-filter-inline-item.component.d.ts +3 -0
  104. package/modules/list-filters/list-filter-inline.component.d.ts +3 -0
  105. package/modules/list-filters/list-filter-summary.component.d.ts +3 -0
  106. package/modules/list-filters/list-filters.module.d.ts +11 -0
  107. package/modules/list-paging/list-paging.component.d.ts +3 -0
  108. package/modules/list-paging/list-paging.module.d.ts +7 -0
  109. package/modules/list-toolbar/list-multiselect-toolbar.component.d.ts +3 -0
  110. package/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.d.ts +3 -0
  111. package/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.d.ts +3 -0
  112. package/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.d.ts +3 -0
  113. package/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.d.ts +12 -0
  114. package/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.d.ts +3 -0
  115. package/modules/list-toolbar/list-toolbar-item-renderer.component.d.ts +3 -0
  116. package/modules/list-toolbar/list-toolbar-item.component.d.ts +3 -0
  117. package/modules/list-toolbar/list-toolbar-search-actions.component.d.ts +3 -0
  118. package/modules/list-toolbar/list-toolbar-sort.component.d.ts +3 -0
  119. package/modules/list-toolbar/list-toolbar-view-actions.component.d.ts +3 -0
  120. package/modules/list-toolbar/list-toolbar.component.d.ts +3 -0
  121. package/modules/list-toolbar/list-toolbar.module.d.ts +20 -0
  122. package/modules/list-toolbar/state/toolbar-state.rxstate.d.ts +3 -0
  123. package/modules/list-toolbar/state/toolbar-state.state-node.d.ts +3 -0
  124. package/modules/shared/sky-list-builder-resources.module.d.ts +14 -0
  125. package/package.json +16 -31
  126. package/{public_api.d.ts → public-api.d.ts} +11 -0
  127. package/skyux-list-builder.d.ts +2 -22
  128. package/CHANGELOG.md +0 -161
  129. package/bundles/skyux-list-builder.umd.min.js +0 -16
  130. package/bundles/skyux-list-builder.umd.min.js.map +0 -1
  131. package/esm2015/modules/shared/list-builder-resources.module.js +0 -17
  132. package/esm2015/plugin-resources/list-builder-resources-provider.js +0 -16
  133. package/esm2015/public_api.js +0 -63
  134. package/esm5/modules/list/list-data-request.model.js +0 -20
  135. package/esm5/modules/list/list-data-response.model.js +0 -11
  136. package/esm5/modules/list/list-data.provider.js +0 -10
  137. package/esm5/modules/list/list-paging.component.js +0 -15
  138. package/esm5/modules/list/list-view.component.js +0 -38
  139. package/esm5/modules/list/list.component.js +0 -337
  140. package/esm5/modules/list/list.module.js +0 -24
  141. package/esm5/modules/list/state/filters/filters.orchestrator.js +0 -22
  142. package/esm5/modules/list/state/filters/update.action.js +0 -11
  143. package/esm5/modules/list/state/items/items.orchestrator.js +0 -55
  144. package/esm5/modules/list/state/items/load.action.js +0 -16
  145. package/esm5/modules/list/state/items/set-items-selected.action.js +0 -15
  146. package/esm5/modules/list/state/items/set-loading.action.js +0 -12
  147. package/esm5/modules/list/state/list-state-action.type.js +0 -1
  148. package/esm5/modules/list/state/list-state.model.js +0 -26
  149. package/esm5/modules/list/state/list-state.rxstate.js +0 -91
  150. package/esm5/modules/list/state/list-state.state-node.js +0 -42
  151. package/esm5/modules/list/state/paging/paging.model.js +0 -16
  152. package/esm5/modules/list/state/paging/paging.orchestrator.js +0 -33
  153. package/esm5/modules/list/state/paging/set-items-per-page.action.js +0 -11
  154. package/esm5/modules/list/state/paging/set-max-pages.action.js +0 -11
  155. package/esm5/modules/list/state/paging/set-page-number.action.js +0 -11
  156. package/esm5/modules/list/state/search/search.model.js +0 -34
  157. package/esm5/modules/list/state/search/search.orchestrator.js +0 -51
  158. package/esm5/modules/list/state/search/set-field-selectors.action.js +0 -12
  159. package/esm5/modules/list/state/search/set-functions.action.js +0 -12
  160. package/esm5/modules/list/state/search/set-options.action.js +0 -13
  161. package/esm5/modules/list/state/search/set-search-text.action.js +0 -11
  162. package/esm5/modules/list/state/selected/load.action.js +0 -11
  163. package/esm5/modules/list/state/selected/selected.model.js +0 -11
  164. package/esm5/modules/list/state/selected/selected.orchestrator.js +0 -62
  165. package/esm5/modules/list/state/selected/set-item-selected.action.js +0 -12
  166. package/esm5/modules/list/state/selected/set-items-selected.action.js +0 -15
  167. package/esm5/modules/list/state/selected/set-loading.action.js +0 -12
  168. package/esm5/modules/list/state/sort/label.model.js +0 -27
  169. package/esm5/modules/list/state/sort/set-available.action.js +0 -11
  170. package/esm5/modules/list/state/sort/set-field-selectors.action.js +0 -11
  171. package/esm5/modules/list/state/sort/set-global.action.js +0 -11
  172. package/esm5/modules/list/state/sort/sort.model.js +0 -29
  173. package/esm5/modules/list/state/sort/sort.orchestrator.js +0 -36
  174. package/esm5/modules/list/state/toolbar/disable.action.js +0 -11
  175. package/esm5/modules/list/state/toolbar/load.action.js +0 -13
  176. package/esm5/modules/list/state/toolbar/remove.action.js +0 -11
  177. package/esm5/modules/list/state/toolbar/set-exists.action.js +0 -11
  178. package/esm5/modules/list/state/toolbar/set-type.action.js +0 -11
  179. package/esm5/modules/list/state/toolbar/show-multiselect-toolbar.action.js +0 -11
  180. package/esm5/modules/list/state/toolbar/toolbar-item.model.js +0 -18
  181. package/esm5/modules/list/state/toolbar/toolbar.model.js +0 -19
  182. package/esm5/modules/list/state/toolbar/toolbar.orchestrator.js +0 -86
  183. package/esm5/modules/list/state/views/load.action.js +0 -11
  184. package/esm5/modules/list/state/views/set-active.action.js +0 -11
  185. package/esm5/modules/list/state/views/view.model.js +0 -12
  186. package/esm5/modules/list/state/views/views.model.js +0 -15
  187. package/esm5/modules/list/state/views/views.orchestrator.js +0 -28
  188. package/esm5/modules/list-data-provider-in-memory/list-data-in-memory.provider.js +0 -157
  189. package/esm5/modules/list-filters/filter.model.js +0 -20
  190. package/esm5/modules/list-filters/list-filter-button.component.js +0 -45
  191. package/esm5/modules/list-filters/list-filter-inline-item-renderer.component.js +0 -37
  192. package/esm5/modules/list-filters/list-filter-inline-item.component.js +0 -50
  193. package/esm5/modules/list-filters/list-filter-inline.component.js +0 -73
  194. package/esm5/modules/list-filters/list-filter-inline.model.js +0 -23
  195. package/esm5/modules/list-filters/list-filter-summary.component.js +0 -62
  196. package/esm5/modules/list-filters/list-filters.module.js +0 -38
  197. package/esm5/modules/list-paging/list-paging.component.js +0 -102
  198. package/esm5/modules/list-paging/list-paging.module.js +0 -26
  199. package/esm5/modules/list-toolbar/list-multiselect-toolbar.component.js +0 -153
  200. package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.js +0 -34
  201. package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-action.js +0 -1
  202. package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.js +0 -49
  203. package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.js +0 -49
  204. package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.js +0 -38
  205. package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.js +0 -36
  206. package/esm5/modules/list-toolbar/list-toolbar-item-renderer.component.js +0 -32
  207. package/esm5/modules/list-toolbar/list-toolbar-item.component.js +0 -53
  208. package/esm5/modules/list-toolbar/list-toolbar-search-actions.component.js +0 -20
  209. package/esm5/modules/list-toolbar/list-toolbar-sort.component.js +0 -30
  210. package/esm5/modules/list-toolbar/list-toolbar-view-actions.component.js +0 -22
  211. package/esm5/modules/list-toolbar/list-toolbar.component.js +0 -375
  212. package/esm5/modules/list-toolbar/list-toolbar.module.js +0 -59
  213. package/esm5/modules/list-toolbar/state/config/config.model.js +0 -16
  214. package/esm5/modules/list-toolbar/state/config/config.orchestrator.js +0 -28
  215. package/esm5/modules/list-toolbar/state/config/set-search-enabled.action.js +0 -11
  216. package/esm5/modules/list-toolbar/state/config/set-sort-selector-enabled.action.js +0 -13
  217. package/esm5/modules/list-toolbar/state/toolbar-state-action.type.js +0 -1
  218. package/esm5/modules/list-toolbar/state/toolbar-state.model.js +0 -12
  219. package/esm5/modules/list-toolbar/state/toolbar-state.rxstate.js +0 -29
  220. package/esm5/modules/list-toolbar/state/toolbar-state.state-node.js +0 -29
  221. package/esm5/modules/shared/list-builder-resources.module.js +0 -20
  222. package/esm5/plugin-resources/list-builder-resources-provider.js +0 -17
  223. package/esm5/public_api.js +0 -63
  224. package/esm5/skyux-list-builder.js +0 -26
  225. package/fesm5/skyux-list-builder.js +0 -2884
  226. package/fesm5/skyux-list-builder.js.map +0 -1
  227. package/modules/shared/list-builder-resources.module.d.ts +0 -2
  228. package/plugin-resources/list-builder-resources-provider.d.ts +0 -5
  229. package/skyux-list-builder.metadata.json +0 -1
  230. package/src/assets/img/list-toolbar-context.png +0 -0
  231. package/src/assets/img/toolbar-anatomy.png +0 -0
  232. package/src/assets/locales/resources_en_US.json +0 -22
@@ -1,53 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, Input, ContentChildren, TemplateRef } from '@angular/core';
3
- var idIndex = 0;
4
- /**
5
- * Defines a toolbar item for the list toolbar.
6
- */
7
- var SkyListToolbarItemComponent = /** @class */ (function () {
8
- function SkyListToolbarItemComponent() {
9
- /**
10
- * Specifies the ID of the item.
11
- */
12
- this.id = "sky-list-toolbar-item-" + ++idIndex;
13
- /**
14
- * Specifies the index of the item at the given item location.
15
- * @default -1
16
- */
17
- this.index = -1;
18
- /**
19
- * Specifies the toolbar location of the item. The valid options are `left`,
20
- * `center`, and `right`.
21
- * @default 'left'
22
- */
23
- this.location = 'left';
24
- }
25
- Object.defineProperty(SkyListToolbarItemComponent.prototype, "template", {
26
- get: function () {
27
- return this.templates.length > 0 ? this.templates.first : undefined;
28
- },
29
- enumerable: true,
30
- configurable: true
31
- });
32
- __decorate([
33
- Input()
34
- ], SkyListToolbarItemComponent.prototype, "id", void 0);
35
- __decorate([
36
- Input()
37
- ], SkyListToolbarItemComponent.prototype, "index", void 0);
38
- __decorate([
39
- Input()
40
- ], SkyListToolbarItemComponent.prototype, "location", void 0);
41
- __decorate([
42
- ContentChildren(TemplateRef)
43
- ], SkyListToolbarItemComponent.prototype, "templates", void 0);
44
- SkyListToolbarItemComponent = __decorate([
45
- Component({
46
- selector: 'sky-list-toolbar-item',
47
- template: '<ng-content></ng-content>'
48
- })
49
- ], SkyListToolbarItemComponent);
50
- return SkyListToolbarItemComponent;
51
- }());
52
- export { SkyListToolbarItemComponent };
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2xpc3QtYnVpbGRlci8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvbGlzdC10b29sYmFyL2xpc3QtdG9vbGJhci1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUUxRixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFFaEI7O0dBRUc7QUFLSDtJQUFBO1FBQ0U7O1dBRUc7UUFDYSxPQUFFLEdBQVcsMkJBQXlCLEVBQUUsT0FBUyxDQUFDO1FBQ2xFOzs7V0FHRztRQUNhLFVBQUssR0FBVyxDQUFDLENBQUMsQ0FBQztRQUNuQzs7OztXQUlHO1FBQ2EsYUFBUSxHQUFXLE1BQU0sQ0FBQztJQUs1QyxDQUFDO0lBSEMsc0JBQVcsaURBQVE7YUFBbkI7WUFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0RSxDQUFDOzs7T0FBQTtJQWZRO1FBQVIsS0FBSyxFQUFFOzJEQUEwRDtJQUt6RDtRQUFSLEtBQUssRUFBRTs4REFBMkI7SUFNMUI7UUFBUixLQUFLLEVBQUU7aUVBQWtDO0lBQ1o7UUFBN0IsZUFBZSxDQUFDLFdBQVcsQ0FBQztrRUFBZ0Q7SUFoQmxFLDJCQUEyQjtRQUp2QyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLFFBQVEsRUFBRSwyQkFBMkI7U0FDdEMsQ0FBQztPQUNXLDJCQUEyQixDQW9CdkM7SUFBRCxrQ0FBQztDQUFBLEFBcEJELElBb0JDO1NBcEJZLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENvbnRlbnRDaGlsZHJlbiwgVGVtcGxhdGVSZWYsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5sZXQgaWRJbmRleCA9IDA7XG5cbi8qKlxuICogRGVmaW5lcyBhIHRvb2xiYXIgaXRlbSBmb3IgdGhlIGxpc3QgdG9vbGJhci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWxpc3QtdG9vbGJhci1pdGVtJyxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+J1xufSlcbmV4cG9ydCBjbGFzcyBTa3lMaXN0VG9vbGJhckl0ZW1Db21wb25lbnQge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBJRCBvZiB0aGUgaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBpZDogc3RyaW5nID0gYHNreS1saXN0LXRvb2xiYXItaXRlbS0keysraWRJbmRleH1gO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gaXRlbSBsb2NhdGlvbi5cbiAgICogQGRlZmF1bHQgLTFcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBpbmRleDogbnVtYmVyID0gLTE7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHRvb2xiYXIgbG9jYXRpb24gb2YgdGhlIGl0ZW0uIFRoZSB2YWxpZCBvcHRpb25zIGFyZSBgbGVmdGAsXG4gICAqIGBjZW50ZXJgLCBhbmQgYHJpZ2h0YC5cbiAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbG9jYXRpb246IHN0cmluZyA9ICdsZWZ0JztcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgcHJpdmF0ZSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgcHVibGljIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMubGVuZ3RoID4gMCA/IHRoaXMudGVtcGxhdGVzLmZpcnN0IDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -1,20 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { ChangeDetectionStrategy, Component } from '@angular/core';
3
- /**
4
- * Displays custom actions in the toolbar beside to the search bar.
5
- */
6
- var SkyListToolbarSearchActionsComponent = /** @class */ (function () {
7
- function SkyListToolbarSearchActionsComponent() {
8
- }
9
- SkyListToolbarSearchActionsComponent = __decorate([
10
- Component({
11
- selector: 'sky-list-toolbar-search-actions',
12
- template: "<div\n class=\"sky-list-toolbar-search-actions\"\n>\n <ng-content></ng-content>\n</div>\n",
13
- changeDetection: ChangeDetectionStrategy.OnPush,
14
- styles: [".sky-list-toolbar-search-actions{margin-left:10px}"]
15
- })
16
- ], SkyListToolbarSearchActionsComponent);
17
- return SkyListToolbarSearchActionsComponent;
18
- }());
19
- export { SkyListToolbarSearchActionsComponent };
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9saXN0LWJ1aWxkZXIvIiwic291cmNlcyI6WyJtb2R1bGVzL2xpc3QtdG9vbGJhci9saXN0LXRvb2xiYXItc2VhcmNoLWFjdGlvbnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2Qjs7R0FFRztBQU9IO0lBQUE7SUFBb0QsQ0FBQztJQUF4QyxvQ0FBb0M7UUFOaEQsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGlDQUFpQztZQUMzQyx1R0FBMkQ7WUFFM0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBQ2hELENBQUM7T0FDVyxvQ0FBb0MsQ0FBSTtJQUFELDJDQUFDO0NBQUEsQUFBckQsSUFBcUQ7U0FBeEMsb0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBEaXNwbGF5cyBjdXN0b20gYWN0aW9ucyBpbiB0aGUgdG9vbGJhciBiZXNpZGUgdG8gdGhlIHNlYXJjaCBiYXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXItc2VhcmNoLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyU2VhcmNoQWN0aW9uc0NvbXBvbmVudCB7IH1cbiJdfQ==
@@ -1,30 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, Input } from '@angular/core';
3
- /**
4
- * Adds a sort dropdown to the list toolbar.
5
- */
6
- var SkyListToolbarSortComponent = /** @class */ (function () {
7
- function SkyListToolbarSortComponent() {
8
- }
9
- __decorate([
10
- Input()
11
- ], SkyListToolbarSortComponent.prototype, "label", void 0);
12
- __decorate([
13
- Input()
14
- ], SkyListToolbarSortComponent.prototype, "field", void 0);
15
- __decorate([
16
- Input()
17
- ], SkyListToolbarSortComponent.prototype, "type", void 0);
18
- __decorate([
19
- Input()
20
- ], SkyListToolbarSortComponent.prototype, "descending", void 0);
21
- SkyListToolbarSortComponent = __decorate([
22
- Component({
23
- selector: 'sky-list-toolbar-sort',
24
- template: ''
25
- })
26
- ], SkyListToolbarSortComponent);
27
- return SkyListToolbarSortComponent;
28
- }());
29
- export { SkyListToolbarSortComponent };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLXNvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2xpc3QtYnVpbGRlci8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvbGlzdC10b29sYmFyL2xpc3QtdG9vbGJhci1zb3J0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7O0dBRUc7QUFLSDtJQUFBO0lBMEJELENBQUM7SUFwQkU7UUFEQyxLQUFLLEVBQUU7OERBQ2E7SUFNckI7UUFEQyxLQUFLLEVBQUU7OERBQ2E7SUFNckI7UUFEQyxLQUFLLEVBQUU7NkRBQ1k7SUFNcEI7UUFEQyxLQUFLLEVBQUU7bUVBQ21CO0lBeEJoQiwyQkFBMkI7UUFKdkMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLHVCQUF1QjtZQUMvQixRQUFRLEVBQUUsRUFBRTtTQUNmLENBQUM7T0FDVywyQkFBMkIsQ0EwQnhDO0lBQUQsa0NBQUM7Q0FBQSxBQTFCQSxJQTBCQTtTQTFCYSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzb3J0IGRyb3Bkb3duIHRvIHRoZSBsaXN0IHRvb2xiYXIuXG4gICAqL1xuICBAQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXItc29ydCcsXG4gICAgICB0ZW1wbGF0ZTogJydcbiAgfSlcbiAgZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyU29ydENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGEgbGFiZWwgZm9yIGEgc29ydCBvcHRpb24uXG4gICAgICogQHJlcXVpcmVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGFiZWw6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGRhdGEgZmllbGQgdG8gc29ydCB0aGUgbGlzdCBvbi5cbiAgICAgKiBAcmVxdWlyZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWVsZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSBkYXRhIGZpZWxkIHRvIHNvcnQgdGhlIGxpc3Qgb24uXG4gICAgICogQHJlcXVpcmVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHNvcnQgZGF0YSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVzY2VuZGluZzogYm9vbGVhbjtcblxuIH1cbiJdfQ==
@@ -1,22 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component } from '@angular/core';
3
- /**
4
- * Adds a section on the right side of the toolbar for items that substantially change
5
- * or affect the view of the list. This includes simple filters and view switchers.
6
- * If the view section includes more than one item, simple filters appear on the left
7
- * and view switchers appear on the right.
8
- */
9
- var SkyListToolbarViewActionsComponent = /** @class */ (function () {
10
- function SkyListToolbarViewActionsComponent() {
11
- }
12
- SkyListToolbarViewActionsComponent = __decorate([
13
- Component({
14
- selector: 'sky-list-toolbar-view-actions',
15
- template: "<ng-content></ng-content>\n",
16
- styles: [":host{display:flex;align-items:center}:host::ng-deep>:not(:last-child){margin-right:5px}.sky-list-toolbar-view-actions ::ng-deep>:not(:last-child){margin-right:5px}"]
17
- })
18
- ], SkyListToolbarViewActionsComponent);
19
- return SkyListToolbarViewActionsComponent;
20
- }());
21
- export { SkyListToolbarViewActionsComponent };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2t5dXgvbGlzdC1idWlsZGVyLyIsInNvdXJjZXMiOlsibW9kdWxlcy9saXN0LXRvb2xiYXIvbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkI7Ozs7O0dBS0c7QUFNSDtJQUFBO0lBQWtELENBQUM7SUFBdEMsa0NBQWtDO1FBTDlDLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSwrQkFBK0I7WUFDekMsdUNBQXlEOztTQUUxRCxDQUFDO09BQ1csa0NBQWtDLENBQUk7SUFBRCx5Q0FBQztDQUFBLEFBQW5ELElBQW1EO1NBQXRDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBZGRzIGEgc2VjdGlvbiBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgdG9vbGJhciBmb3IgaXRlbXMgdGhhdCBzdWJzdGFudGlhbGx5IGNoYW5nZVxuICogb3IgYWZmZWN0IHRoZSB2aWV3IG9mIHRoZSBsaXN0LiBUaGlzIGluY2x1ZGVzIHNpbXBsZSBmaWx0ZXJzIGFuZCB2aWV3IHN3aXRjaGVycy5cbiAqIElmIHRoZSB2aWV3IHNlY3Rpb24gaW5jbHVkZXMgbW9yZSB0aGFuIG9uZSBpdGVtLCBzaW1wbGUgZmlsdGVycyBhcHBlYXIgb24gdGhlIGxlZnRcbiAqIGFuZCB2aWV3IHN3aXRjaGVycyBhcHBlYXIgb24gdGhlIHJpZ2h0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXRvb2xiYXItdmlldy1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyVmlld0FjdGlvbnNDb21wb25lbnQgeyB9XG4iXX0=
@@ -1,375 +0,0 @@
1
- import { __decorate, __read, __spread } from "tslib";
2
- import { combineLatest as observableCombineLatest, Subject } from 'rxjs';
3
- import { map as observableMap, takeUntil, take, distinctUntilChanged } from 'rxjs/operators';
4
- import { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, Input, OnDestroy, OnInit, QueryList, TemplateRef, ViewChild } from '@angular/core';
5
- import { getValue } from '@skyux/list-builder-common';
6
- import { SkySearchComponent } from '@skyux/lookup';
7
- import { ListToolbarItemModel } from '../list/state/toolbar/toolbar-item.model';
8
- import { ListToolbarSetTypeAction } from '../list/state/toolbar/set-type.action';
9
- import { ListState } from '../list/state/list-state.state-node';
10
- import { ListStateDispatcher } from '../list/state/list-state.rxstate';
11
- import { ListSortLabelModel } from '../list/state/sort/label.model';
12
- import { ListPagingSetPageNumberAction } from '../list/state/paging/set-page-number.action';
13
- import { SkyListFilterInlineComponent } from '../list-filters/list-filter-inline.component';
14
- import { SkyListFilterSummaryComponent } from '../list-filters/list-filter-summary.component';
15
- import { SkyListToolbarItemComponent } from './list-toolbar-item.component';
16
- import { SkyListToolbarSortComponent } from './list-toolbar-sort.component';
17
- import { SkyListToolbarViewActionsComponent } from './list-toolbar-view-actions.component';
18
- import { ListToolbarConfigSetSearchEnabledAction } from './state/config/set-search-enabled.action';
19
- import { ListToolbarConfigSetSortSelectorEnabledAction } from './state/config/set-sort-selector-enabled.action';
20
- import { ListToolbarState } from './state/toolbar-state.state-node';
21
- import { ListToolbarStateDispatcher } from './state/toolbar-state.rxstate';
22
- import { ListToolbarStateModel } from './state/toolbar-state.model';
23
- var nextId = 0;
24
- /**
25
- * Displays a toolbar for a SKY UX-themed list of data.
26
- */
27
- var SkyListToolbarComponent = /** @class */ (function () {
28
- function SkyListToolbarComponent(changeDetector, state, dispatcher, toolbarState, toolbarDispatcher) {
29
- this.changeDetector = changeDetector;
30
- this.state = state;
31
- this.dispatcher = dispatcher;
32
- this.toolbarState = toolbarState;
33
- this.toolbarDispatcher = toolbarDispatcher;
34
- /**
35
- * Display the search bar in the standard position or in a separate section.
36
- * To highlight the search bar in a section above all other toolbar items,
37
- * set this property to `search`.
38
- * @default 'standard'
39
- */
40
- this.toolbarType = 'standard';
41
- this.isToolbarDisabled = false;
42
- this.inlineFilterBarExpanded = false;
43
- this.hasAdditionalToolbarSection = false;
44
- this.hasViewActions = false;
45
- this.filterButtonId = "sky-list-toolbar-filter-button-" + ++nextId;
46
- this.listFilterInlineId = "sky-list-toolbar-filter-inline-" + ++nextId;
47
- /**
48
- * Fires when users submit a search.
49
- * @internal
50
- */
51
- this.searchApplied = new Subject();
52
- this.customItemIds = [];
53
- this.hasSortSelectors = false;
54
- this.inlineFiltersItemToolbarIndex = 5000;
55
- this.sortSelectorItemToolbarIndex = 6000;
56
- this.ngUnsubscribe = new Subject();
57
- }
58
- Object.defineProperty(SkyListToolbarComponent.prototype, "inMemorySearchEnabled", {
59
- get: function () {
60
- if (this._inMemorySearchEnabled === undefined) {
61
- return true;
62
- }
63
- return this._inMemorySearchEnabled;
64
- },
65
- /**
66
- * Indicates whether to use the in-memory search.
67
- * Setting this to `false` will allow consumers to run their own searches remotely,
68
- * and push new values to the list component by updating the `data` property.
69
- * @default true
70
- * @internal
71
- */
72
- set: function (value) {
73
- this._inMemorySearchEnabled = value;
74
- },
75
- enumerable: true,
76
- configurable: true
77
- });
78
- Object.defineProperty(SkyListToolbarComponent.prototype, "isFilterBarDisplayed", {
79
- get: function () {
80
- return !this.isToolbarDisabled && this.hasInlineFilters && this.inlineFilterBarExpanded;
81
- },
82
- enumerable: true,
83
- configurable: true
84
- });
85
- Object.defineProperty(SkyListToolbarComponent.prototype, "filterButtonAriaControls", {
86
- get: function () {
87
- return this.isFilterBarDisplayed ? this.listFilterInlineId : undefined;
88
- },
89
- enumerable: true,
90
- configurable: true
91
- });
92
- SkyListToolbarComponent.prototype.ngOnInit = function () {
93
- var _this = this;
94
- this.dispatcher.toolbarExists(true);
95
- getValue(this.searchText, function (searchText) {
96
- _this.updateSearchText(searchText);
97
- });
98
- getValue(this.searchEnabled, function (searchEnabled) {
99
- _this.toolbarDispatcher.next(new ListToolbarConfigSetSearchEnabledAction(searchEnabled === undefined ? true : searchEnabled));
100
- });
101
- getValue(this.toolbarType, function (type) {
102
- _this.dispatcher.next(new ListToolbarSetTypeAction(_this.toolbarType));
103
- });
104
- getValue(this.sortSelectorEnabled, function (sortSelectorEnabled) {
105
- _this.toolbarDispatcher.next(new ListToolbarConfigSetSortSelectorEnabledAction(sortSelectorEnabled === undefined ? true : sortSelectorEnabled));
106
- });
107
- this.sortSelectors = this.getSortSelectors();
108
- // Initialize the sort toolbar item if necessary
109
- this.sortSelectors
110
- .pipe(takeUntil(this.ngUnsubscribe), distinctUntilChanged())
111
- .subscribe(function (currentSort) {
112
- if (currentSort.length > 0 && !_this.hasSortSelectors) {
113
- _this.hasSortSelectors = true;
114
- _this.dispatcher.toolbarAddItems([
115
- new ListToolbarItemModel({
116
- id: 'sort-selector',
117
- template: _this.sortSelectorTemplate,
118
- location: 'left',
119
- index: _this.sortSelectorItemToolbarIndex
120
- })
121
- ]);
122
- }
123
- else if (currentSort.length < 1 && _this.hasSortSelectors) {
124
- _this.hasSortSelectors = false;
125
- _this.dispatcher.toolbarRemoveItems([
126
- 'sort-selector'
127
- ]);
128
- }
129
- });
130
- this.searchTextInput = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.search.searchText; }), distinctUntilChanged());
131
- this.view = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.views.active; }), distinctUntilChanged());
132
- this.watchTemplates();
133
- this.type = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (state) { return state.toolbar.type; }), distinctUntilChanged());
134
- this.type.pipe(takeUntil(this.ngUnsubscribe))
135
- .subscribe(function (toolbarType) {
136
- if (toolbarType === 'search') {
137
- _this.dispatcher.toolbarRemoveItems(['search']);
138
- }
139
- else {
140
- _this.dispatcher.toolbarAddItems([
141
- new ListToolbarItemModel({
142
- id: 'search',
143
- template: _this.searchTemplate,
144
- location: 'right'
145
- })
146
- ]);
147
- }
148
- });
149
- this.isSearchEnabled = this.toolbarState.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.config; }), distinctUntilChanged(), observableMap(function (c) { return c.searchEnabled; }));
150
- this.state.pipe(observableMap(function (s) { return s.toolbar; }), takeUntil(this.ngUnsubscribe), distinctUntilChanged(), observableMap(function (c) { return c.disabled; }))
151
- .subscribe(function (isDisabled) { return _this.isToolbarDisabled = isDisabled; });
152
- this.isSortSelectorEnabled = this.toolbarState.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.config; }), distinctUntilChanged(), observableMap(function (c) { return c.sortSelectorEnabled; }));
153
- this.isMultiselectEnabled = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.toolbar; }), distinctUntilChanged(), observableMap(function (t) { return t.showMultiselectToolbar; }));
154
- this.hasAppliedFilters = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.filters; }), distinctUntilChanged(), observableMap(function (filters) {
155
- var activeFilters = filters.filter(function (f) {
156
- return f.value !== '' &&
157
- f.value !== undefined &&
158
- f.value !== false &&
159
- f.value !== f.defaultValue;
160
- });
161
- return activeFilters.length > 0;
162
- }));
163
- this.state.pipe(takeUntil(this.ngUnsubscribe))
164
- .subscribe(function (current) {
165
- _this.hasAdditionalToolbarSection = (current.toolbar.items.length > 0);
166
- _this.changeDetector.detectChanges();
167
- });
168
- };
169
- SkyListToolbarComponent.prototype.ngAfterContentInit = function () {
170
- var _this = this;
171
- // Inject custom toolbar items.
172
- this.toolbarItems.forEach(function (toolbarItem) {
173
- _this.dispatcher.toolbarAddItems([
174
- new ListToolbarItemModel(toolbarItem)
175
- ]);
176
- _this.customItemIds.push(toolbarItem.id);
177
- });
178
- this.toolbarItems.changes.pipe(takeUntil(this.ngUnsubscribe))
179
- .subscribe(function (newItems) {
180
- newItems.forEach(function (item) {
181
- if (_this.customItemIds.indexOf(item.id) < 0) {
182
- _this.dispatcher.toolbarAddItems([
183
- new ListToolbarItemModel(item)
184
- ]);
185
- _this.customItemIds.push(item.id);
186
- }
187
- });
188
- var itemsToRemove = [];
189
- _this.customItemIds.forEach(function (itemId, index) {
190
- if (!newItems.find(function (item) { return item.id === itemId; })) {
191
- itemsToRemove.push(itemId);
192
- _this.customItemIds.splice(index, 1);
193
- }
194
- });
195
- _this.dispatcher.toolbarRemoveItems(itemsToRemove);
196
- });
197
- var sortModels = this.toolbarSorts.map(function (sort) {
198
- return new ListSortLabelModel({
199
- text: sort.label,
200
- fieldSelector: sort.field,
201
- fieldType: sort.type,
202
- global: true,
203
- descending: sort.descending
204
- });
205
- });
206
- this.dispatcher.sortSetGlobal(sortModels);
207
- // Add inline filters.
208
- this.showFilterSummary = (this.filterSummary.length > 0);
209
- this.hasInlineFilters = (this.inlineFilter.length > 0);
210
- if (this.hasInlineFilters) {
211
- this.dispatcher.toolbarAddItems([
212
- new ListToolbarItemModel({
213
- template: this.inlineFilterButtonTemplate,
214
- location: 'left',
215
- index: this.inlineFiltersItemToolbarIndex
216
- })
217
- ]);
218
- }
219
- // Check for view actions
220
- this.hasViewActions = (this.viewActions.length > 0);
221
- };
222
- SkyListToolbarComponent.prototype.ngOnDestroy = function () {
223
- this.searchApplied.complete();
224
- this.ngUnsubscribe.next();
225
- this.ngUnsubscribe.complete();
226
- };
227
- SkyListToolbarComponent.prototype.setSort = function (sort) {
228
- var _this = this;
229
- this.state.pipe(take(1)).subscribe(function (currentState) {
230
- if (currentState.paging.pageNumber && currentState.paging.pageNumber !== 1) {
231
- _this.dispatcher.next(new ListPagingSetPageNumberAction(Number(1)));
232
- }
233
- _this.dispatcher.sortSetFieldSelectors([{ fieldSelector: sort.fieldSelector, descending: sort.descending }]);
234
- });
235
- };
236
- SkyListToolbarComponent.prototype.inlineFilterButtonClick = function () {
237
- this.inlineFilterBarExpanded = !this.inlineFilterBarExpanded;
238
- };
239
- SkyListToolbarComponent.prototype.updateSearchText = function (searchText) {
240
- var _this = this;
241
- this.searchApplied.next(searchText);
242
- if (this.inMemorySearchEnabled) {
243
- this.state.pipe(take(1)).subscribe(function (currentState) {
244
- if (currentState.paging.pageNumber && currentState.paging.pageNumber !== 1) {
245
- _this.dispatcher.next(new ListPagingSetPageNumberAction(Number(1)));
246
- }
247
- _this.dispatcher.searchSetText(searchText);
248
- });
249
- }
250
- };
251
- SkyListToolbarComponent.prototype.itemIsInView = function (itemView, activeView) {
252
- return (itemView === undefined || itemView === activeView);
253
- };
254
- SkyListToolbarComponent.prototype.getSortSelectors = function () {
255
- return observableCombineLatest(this.state.pipe(observableMap(function (s) { return s.sort.available; }), distinctUntilChanged()), this.state.pipe(observableMap(function (s) { return s.sort.global; }), distinctUntilChanged()), this.state.pipe(observableMap(function (s) { return s.sort.fieldSelectors; }), distinctUntilChanged()), function (available, global, fieldSelectors) {
256
- // Get sorts that are in the global that are not in the available
257
- var sorts = global.filter(function (g) { return available.filter(function (a) { return a.fieldSelector === g.fieldSelector; }).length === 0; });
258
- var resultSortSelectors = __spread(sorts, available).map(function (sortLabels) {
259
- var fs = fieldSelectors.filter(function (f) {
260
- return f.fieldSelector === sortLabels.fieldSelector
261
- && f.descending === sortLabels.descending;
262
- });
263
- var selected = false;
264
- if (fs.length > 0) {
265
- selected = true;
266
- }
267
- return {
268
- sort: sortLabels,
269
- selected: selected
270
- };
271
- });
272
- return resultSortSelectors;
273
- }).pipe(takeUntil(this.ngUnsubscribe));
274
- };
275
- SkyListToolbarComponent.prototype.watchTemplates = function () {
276
- var _this = this;
277
- observableCombineLatest(this.state.pipe(observableMap(function (s) { return s.toolbar; }), distinctUntilChanged()), this.view.pipe(distinctUntilChanged()), function (toolbar, view) {
278
- var items = toolbar.items.filter(function (i) {
279
- return _this.itemIsInView(i.view, view);
280
- });
281
- var templates = {};
282
- items.forEach(function (item) {
283
- templates[item.location] = templates[item.location] || [];
284
- templates[item.location].push(item);
285
- });
286
- return templates;
287
- }).pipe(takeUntil(this.ngUnsubscribe))
288
- .subscribe(function (value) {
289
- _this.leftTemplates = value.left;
290
- _this.centerTemplates = value.center;
291
- _this.rightTemplates = value.right;
292
- _this.changeDetector.markForCheck();
293
- });
294
- };
295
- SkyListToolbarComponent.ctorParameters = function () { return [
296
- { type: ChangeDetectorRef },
297
- { type: ListState },
298
- { type: ListStateDispatcher },
299
- { type: ListToolbarState },
300
- { type: ListToolbarStateDispatcher }
301
- ]; };
302
- __decorate([
303
- Input()
304
- ], SkyListToolbarComponent.prototype, "inMemorySearchEnabled", null);
305
- __decorate([
306
- Input()
307
- ], SkyListToolbarComponent.prototype, "placeholder", void 0);
308
- __decorate([
309
- Input()
310
- ], SkyListToolbarComponent.prototype, "searchEnabled", void 0);
311
- __decorate([
312
- ViewChild(SkySearchComponent, {
313
- read: SkySearchComponent,
314
- static: false
315
- })
316
- ], SkyListToolbarComponent.prototype, "searchComponent", void 0);
317
- __decorate([
318
- Input()
319
- ], SkyListToolbarComponent.prototype, "sortSelectorEnabled", void 0);
320
- __decorate([
321
- Input()
322
- ], SkyListToolbarComponent.prototype, "toolbarType", void 0);
323
- __decorate([
324
- Input()
325
- ], SkyListToolbarComponent.prototype, "searchText", void 0);
326
- __decorate([
327
- ContentChildren(SkyListToolbarItemComponent)
328
- ], SkyListToolbarComponent.prototype, "toolbarItems", void 0);
329
- __decorate([
330
- ContentChildren(SkyListToolbarSortComponent)
331
- ], SkyListToolbarComponent.prototype, "toolbarSorts", void 0);
332
- __decorate([
333
- ContentChildren(SkyListFilterSummaryComponent)
334
- ], SkyListToolbarComponent.prototype, "filterSummary", void 0);
335
- __decorate([
336
- ContentChildren(SkyListFilterInlineComponent)
337
- ], SkyListToolbarComponent.prototype, "inlineFilter", void 0);
338
- __decorate([
339
- ContentChildren(SkyListToolbarViewActionsComponent)
340
- ], SkyListToolbarComponent.prototype, "viewActions", void 0);
341
- __decorate([
342
- ViewChild('search', {
343
- read: TemplateRef,
344
- static: true
345
- })
346
- ], SkyListToolbarComponent.prototype, "searchTemplate", void 0);
347
- __decorate([
348
- ViewChild('sortSelector', {
349
- read: TemplateRef,
350
- static: true
351
- })
352
- ], SkyListToolbarComponent.prototype, "sortSelectorTemplate", void 0);
353
- __decorate([
354
- ViewChild('inlineFilterButton', {
355
- read: TemplateRef,
356
- static: true
357
- })
358
- ], SkyListToolbarComponent.prototype, "inlineFilterButtonTemplate", void 0);
359
- SkyListToolbarComponent = __decorate([
360
- Component({
361
- selector: 'sky-list-toolbar',
362
- template: "<div class=\"sky-list-toolbar-container\">\n <sky-toolbar *ngIf=\"(type | async) !== 'search'\">\n\n <sky-toolbar-section>\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content\n select=\"sky-list-toolbar-view-actions\"\n >\n </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n\n <sky-toolbar-section *ngIf=\"showFilterSummary && (hasAppliedFilters | async)\">\n <ng-content select=\"sky-list-filter-summary\">\n </ng-content>\n </sky-toolbar-section>\n </sky-toolbar>\n\n <div *ngIf=\"(type | async) === 'search' &&\n ((isSearchEnabled | async) || hasAdditionalToolbarSection)\"\n class=\"sky-list-toolbar-search\"\n >\n <sky-toolbar>\n <sky-toolbar-section *ngIf=\"(isSearchEnabled | async)\">\n <sky-toolbar-item>\n <sky-list-toolbar-item-renderer\n sky-cmp-id=\"search\"\n [template]=\"search\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n </sky-toolbar-section>\n <sky-toolbar-section [hidden]=\"!hasAdditionalToolbarSection\">\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer *ngIf=\"item.id !== 'search'\"\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content\n select=\"sky-list-toolbar-view-actions\"\n >\n </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n </div>\n <div\n *ngIf=\"isFilterBarDisplayed\"\n [attr.aria-labelledby]=\"filterButtonId\"\n [id]=\"listFilterInlineId\"\n >\n <ng-content select=\"sky-list-filter-inline\">\n </ng-content>\n </div>\n <sky-list-multiselect-toolbar *ngIf=\"isMultiselectEnabled | async\">\n </sky-list-multiselect-toolbar>\n</div>\n\n<ng-template #search>\n <div *ngIf=\"isSearchEnabled | async\"\n class=\"sky-list-toolbar-search-wrapper\"\n >\n <sky-search\n [disabled]=\"isToolbarDisabled\"\n [expandMode]=\"(type | async) === 'search' ? 'fit' : 'responsive'\"\n [placeholderText]=\"placeholder\"\n [searchText]=\"searchTextInput | async\"\n (searchApply)=\"updateSearchText($event)\"\n >\n </sky-search>\n <ng-content\n select=\"sky-list-toolbar-search-actions\"\n ></ng-content>\n </div>\n</ng-template>\n\n<ng-template #sortSelector>\n <div *ngIf=\"(isSortSelectorEnabled | async) && (sortSelectors | async).length > 0\"\n class=\"sky-toolbar-item-sort-container\"\n >\n <sky-sort [showButtonText]=\"true\">\n <sky-sort-item *ngFor=\"let item of sortSelectors | async\"\n [active]=\"item.selected\"\n (itemSelect)=\"setSort(item.sort)\"\n >\n {{ item.sort.text }}\n </sky-sort-item>\n </sky-sort>\n </div>\n</ng-template>\n\n<ng-template #inlineFilterButton>\n <sky-filter-button\n [active]=\"hasAppliedFilters | async\"\n [ariaControls]=\"filterButtonAriaControls\"\n [ariaExpanded]=\"inlineFilterBarExpanded\"\n [disabled]=\"isToolbarDisabled\"\n [filterButtonId]=\"filterButtonId\"\n [showButtonText]=\"true\"\n (filterButtonClick)=\"inlineFilterButtonClick()\"\n >\n </sky-filter-button>\n</ng-template>\n",
363
- providers: [
364
- ListToolbarState,
365
- ListToolbarStateDispatcher,
366
- ListToolbarStateModel
367
- ],
368
- changeDetection: ChangeDetectionStrategy.OnPush,
369
- styles: [".sky-list-toolbar-search-wrapper{display:flex}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-dismiss-absolute{padding:0;position:static}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-container{position:relative;height:100%}.sky-list-toolbar-search-wrapper ::ng-deep sky-search{flex:1 1 auto}.sky-list-toolbar-search-wrapper ::ng-deep sky-list-toolbar-search-actions{flex:0 0 auto;z-index:1}.sky-list-toolbar-container ::ng-deep .sky-toolbar-section-items sky-toolbar-item{flex:0 1 auto;align-self:flex-start}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section{padding-top:0}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section-items{display:block;width:100%}.sky-list-toolbar-search ::ng-deep .sky-toolbar-item{margin:0}.sky-list-toolbar-search ::ng-deep .sky-search-dismiss-absolute,.sky-list-toolbar-search ::ng-deep .sky-toolbar-container{background-color:#eeeeef}.sky-list-toolbar-search ::ng-deep .sky-search-btn:disabled,.sky-list-toolbar-search ::ng-deep input[type=text]:disabled{background-color:#cdcfd2;opacity:1}.sky-list-toolbar-container ::ng-deep sky-toolbar-item[sky-toolbar-id=sort-selector] .sky-toolbar-item{margin-right:0}.sky-list-toolbar-container ::ng-deep sky-checkbox{position:relative;top:-2px}"]
370
- })
371
- ], SkyListToolbarComponent);
372
- return SkyListToolbarComponent;
373
- }());
374
- export { SkyListToolbarComponent };
375
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9saXN0LWJ1aWxkZXIvIiwic291cmNlcyI6WyJtb2R1bGVzL2xpc3QtdG9vbGJhci9saXN0LXRvb2xiYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsYUFBYSxJQUFJLHVCQUF1QixFQUV4QyxPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUMsR0FBRyxJQUFJLGFBQWEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0YsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLFFBQVEsRUFDVCxNQUFNLDRCQUE0QixDQUFDO0FBTXBDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUNMLG9CQUFvQixFQUNyQixNQUFNLDBDQUEwQyxDQUFDO0FBRWxELE9BQU8sRUFDTCx3QkFBd0IsRUFDekIsTUFBTSx1Q0FBdUMsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsU0FBUyxFQUNWLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLG1CQUFtQixFQUNwQixNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQU14QyxPQUFPLEVBQ0wsNkJBQTZCLEVBQzlCLE1BQU0sNkNBQTZDLENBQUM7QUFFckQsT0FBTyxFQUNMLDRCQUE0QixFQUM3QixNQUFNLDhDQUE4QyxDQUFDO0FBRXRELE9BQU8sRUFDTCw2QkFBNkIs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U0FBUyxDQUFDLGNBQWMsRUFBRTtZQUN6QixJQUFJLEVBQUUsV0FBVztZQUNqQixNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUM7eUVBQzZDO0lBTS9DO1FBSkMsU0FBUyxDQUFDLG9CQUFvQixFQUFFO1lBQy9CLElBQUksRUFBRSxXQUFXO1lBQ2pCLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQzsrRUFDbUQ7SUFuSTFDLHVCQUF1QjtRQVhuQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLG01SkFBNEM7WUFFNUMsU0FBUyxFQUFFO2dCQUNULGdCQUFnQjtnQkFDaEIsMEJBQTBCO2dCQUMxQixxQkFBcUI7YUFDdEI7WUFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7U0FDaEQsQ0FBQztPQUNXLHVCQUF1QixDQXFkbkM7SUFBRCw4QkFBQztDQUFBLEFBcmRELElBcWRDO1NBcmRZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QgYXMgb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7bWFwIGFzIG9ic2VydmFibGVNYXAsIHRha2VVbnRpbCwgdGFrZSwgZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIGdldFZhbHVlXG59IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXItY29tbW9uJztcblxuaW1wb3J0IHtcbiAgTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWxcbn0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuXG5pbXBvcnQge1xuICBTa3lTZWFyY2hDb21wb25lbnRcbn0gZnJvbSAnQHNreXV4L2xvb2t1cCc7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyTW9kZWxcbn0gZnJvbSAnLi4vbGlzdC9zdGF0ZS90b29sYmFyL3Rvb2xiYXIubW9kZWwnO1xuXG5pbXBvcnQge1xuICBMaXN0VG9vbGJhckl0ZW1Nb2RlbFxufSBmcm9tICcuLi9saXN0L3N0YXRlL3Rvb2xiYXIvdG9vbGJhci1pdGVtLm1vZGVsJztcblxuaW1wb3J0IHtcbiAgTGlzdFRvb2xiYXJTZXRUeXBlQWN0aW9uXG59IGZyb20gJy4uL2xpc3Qvc3RhdGUvdG9vbGJhci9zZXQtdHlwZS5hY3Rpb24nO1xuXG5pbXBvcnQge1xuICBMaXN0U3RhdGVcbn0gZnJvbSAnLi4vbGlzdC9zdGF0ZS9saXN0LXN0YXRlLnN0YXRlLW5vZGUnO1xuXG5pbXBvcnQge1xuICBMaXN0U3RhdGVEaXNwYXRjaGVyXG59IGZyb20gJy4uL2xpc3Qvc3RhdGUvbGlzdC1zdGF0ZS5yeHN0YXRlJztcblxuaW1wb3J0IHtcbiAgTGlzdFNvcnRMYWJlbE1vZGVsXG59IGZyb20gJy4uL2xpc3Qvc3RhdGUvc29ydC9sYWJlbC5tb2RlbCc7XG5cbmltcG9ydCB7XG4gIExpc3RGaWx0ZXJNb2RlbFxufSBmcm9tICcuLi9saXN0LWZpbHRlcnMvZmlsdGVyLm1vZGVsJztcblxuaW1wb3J0IHtcbiAgTGlzdFBhZ2luZ1NldFBhZ2VOdW1iZXJBY3Rpb25cbn0gZnJvbSAnLi4vbGlzdC9zdGF0ZS9wYWdpbmcvc2V0LXBhZ2UtbnVtYmVyLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIFNreUxpc3RGaWx0ZXJJbmxpbmVDb21wb25lbnRcbn0gZnJvbSAnLi4vbGlzdC1maWx0ZXJzL2xpc3QtZmlsdGVyLWlubGluZS5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0RmlsdGVyU3VtbWFyeUNvbXBvbmVudFxufSBmcm9tICcuLi9saXN0LWZpbHRlcnMvbGlzdC1maWx0ZXItc3VtbWFyeS5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0VG9vbGJhckl0ZW1Db21wb25lbnRcbn0gZnJvbSAnLi9saXN0LXRvb2xiYXItaXRlbS5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0VG9vbGJhclNvcnRDb21wb25lbnRcbn0gZnJvbSAnLi9saXN0LXRvb2xiYXItc29ydC5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0VG9vbGJhclZpZXdBY3Rpb25zQ29tcG9uZW50XG59IGZyb20gJy4vbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBMaXN0VG9vbGJhckNvbmZpZ1NldFNlYXJjaEVuYWJsZWRBY3Rpb25cbn0gZnJvbSAnLi9zdGF0ZS9jb25maWcvc2V0LXNlYXJjaC1lbmFibGVkLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyQ29uZmlnU2V0U29ydFNlbGVjdG9yRW5hYmxlZEFjdGlvblxufSBmcm9tICcuL3N0YXRlL2NvbmZpZy9zZXQtc29ydC1zZWxlY3Rvci1lbmFibGVkLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyU3RhdGVcbn0gZnJvbSAnLi9zdGF0ZS90b29sYmFyLXN0YXRlLnN0YXRlLW5vZGUnO1xuXG5pbXBvcnQge1xuICBMaXN0VG9vbGJhclN0YXRlRGlzcGF0Y2hlclxufSBmcm9tICcuL3N0YXRlL3Rvb2xiYXItc3RhdGUucnhzdGF0ZSc7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyU3RhdGVNb2RlbFxufSBmcm9tICcuL3N0YXRlL3Rvb2xiYXItc3RhdGUubW9kZWwnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBEaXNwbGF5cyBhIHRvb2xiYXIgZm9yIGEgU0tZIFVYLXRoZW1lZCBsaXN0IG9mIGRhdGEuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC10b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIExpc3RUb29sYmFyU3RhdGUsXG4gICAgTGlzdFRvb2xiYXJTdGF0ZURpc3BhdGNoZXIsXG4gICAgTGlzdFRvb2xiYXJTdGF0ZU1vZGVsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgdGhlIGluLW1lbW9yeSBzZWFyY2guXG4gICAqIFNldHRpbmcgdGhpcyB0byBgZmFsc2VgIHdpbGwgYWxsb3cgY29uc3VtZXJzIHRvIHJ1biB0aGVpciBvd24gc2VhcmNoZXMgcmVtb3RlbHksXG4gICAqIGFuZCBwdXNoIG5ldyB2YWx1ZXMgdG8gdGhlIGxpc3QgY29tcG9uZW50IGJ5IHVwZGF0aW5nIHRoZSBgZGF0YWAgcHJvcGVydHkuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluTWVtb3J5U2VhcmNoRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2luTWVtb3J5U2VhcmNoRW5hYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBpbk1lbW9yeVNlYXJjaEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2luTWVtb3J5U2VhcmNoRW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2luTWVtb3J5U2VhcmNoRW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIHNlYXJjaCBiYXIgdGhhdCB0aGUgbGlzdCB0b29sYmFyIGNyZWF0ZXMgd2l0aFxuICAgKiBhIFtzZWFyY2ggY29tcG9uZW50XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvc2VhcmNoKS5cbiAgICogQGRlZmF1bHQgJ0ZpbmQgaW4gdGhpcyBsaXN0J1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgc2VhcmNoIGJhci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaEVuYWJsZWQ6IGJvb2xlYW4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIEBWaWV3Q2hpbGQoU2t5U2VhcmNoQ29tcG9uZW50LCB7XG4gICAgcmVhZDogU2t5U2VhcmNoQ29tcG9uZW50LFxuICAgIHN0YXRpYzogZmFsc2VcbiAgfSlcbiAgcHVibGljIHNlYXJjaENvbXBvbmVudDogU2t5U2VhcmNoQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgdGhlIHNvcnQgc2VsZWN0b3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc29ydFNlbGVjdG9yRW5hYmxlZDogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIHNlYXJjaCBiYXIgaW4gdGhlIHN0YW5kYXJkIHBvc2l0aW9uIG9yIGluIGEgc2VwYXJhdGUgc2VjdGlvbi5cbiAgICogVG8gaGlnaGxpZ2h0IHRoZSBzZWFyY2ggYmFyIGluIGEgc2VjdGlvbiBhYm92ZSBhbGwgb3RoZXIgdG9vbGJhciBpdGVtcyxcbiAgICogc2V0IHRoaXMgcHJvcGVydHkgdG8gYHNlYXJjaGAuXG4gICAqIEBkZWZhdWx0ICdzdGFuZGFyZCdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyVHlwZTogc3RyaW5nID0gJ3N0YW5kYXJkJztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgdGV4dCBzdHJpbmcgdG8gc2VhcmNoIHdpdGguXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoVGV4dDogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHB1YmxpYyBnZXQgaXNGaWx0ZXJCYXJEaXNwbGF5ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzVG9vbGJhckRpc2FibGVkICYmIHRoaXMuaGFzSW5saW5lRmlsdGVycyAmJiB0aGlzLmlubGluZUZpbHRlckJhckV4cGFuZGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJCdXR0b25BcmlhQ29udHJvbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckJhckRpc3BsYXllZCA/IHRoaXMubGlzdEZpbHRlcklubGluZUlkIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNvcnRTZWxlY3RvcnM6IE9ic2VydmFibGU8QXJyYXk8YW55Pj47XG4gIHB1YmxpYyBzZWFyY2hUZXh0SW5wdXQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIHZpZXc6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIGxlZnRUZW1wbGF0ZXM6IExpc3RUb29sYmFySXRlbU1vZGVsW107XG4gIHB1YmxpYyBjZW50ZXJUZW1wbGF0ZXM6IExpc3RUb29sYmFySXRlbU1vZGVsW107XG4gIHB1YmxpYyByaWdodFRlbXBsYXRlczogTGlzdFRvb2xiYXJJdGVtTW9kZWxbXTtcbiAgcHVibGljIHR5cGU6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIGlzU2VhcmNoRW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzVG9vbGJhckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc011bHRpc2VsZWN0RW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzU29ydFNlbGVjdG9yRW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGFwcGxpZWRGaWx0ZXJzOiBPYnNlcnZhYmxlPEFycmF5PExpc3RGaWx0ZXJNb2RlbD4+O1xuICBwdWJsaWMgaGFzQXBwbGllZEZpbHRlcnM6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBzaG93RmlsdGVyU3VtbWFyeTogYm9vbGVhbjtcbiAgcHVibGljIGhhc0lubGluZUZpbHRlcnM6IGJvb2xlYW47XG4gIHB1YmxpYyBpbmxpbmVGaWx0ZXJCYXJFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaGFzQWRkaXRpb25hbFRvb2xiYXJTZWN0aW9uID0gZmFsc2U7XG4gIHB1YmxpYyBoYXNWaWV3QWN0aW9ucyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBmaWx0ZXJCdXR0b25JZDogc3RyaW5nID0gYHNreS1saXN0LXRvb2xiYXItZmlsdGVyLWJ1dHRvbi0keysrbmV4dElkfWA7XG4gIHB1YmxpYyBsaXN0RmlsdGVySW5saW5lSWQ6IHN0cmluZyA9IGBza3ktbGlzdC10b29sYmFyLWZpbHRlci1pbmxpbmUtJHsrK25leHRJZH1gO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHN1Ym1pdCBhIHNlYXJjaC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoQXBwbGllZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJJdGVtQ29tcG9uZW50KVxuICBwcml2YXRlIHRvb2xiYXJJdGVtczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFySXRlbUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0VG9vbGJhclNvcnRDb21wb25lbnQpXG4gIHByaXZhdGUgdG9vbGJhclNvcnRzOiBRdWVyeUxpc3Q8U2t5TGlzdFRvb2xiYXJTb3J0Q29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFNreUxpc3RGaWx0ZXJTdW1tYXJ5Q29tcG9uZW50KVxuICBwcml2YXRlIGZpbHRlclN1bW1hcnk6IFF1ZXJ5TGlzdDxTa3lMaXN0RmlsdGVyU3VtbWFyeUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0RmlsdGVySW5saW5lQ29tcG9uZW50KVxuICBwcml2YXRlIGlubGluZUZpbHRlcjogUXVlcnlMaXN0PFNreUxpc3RGaWx0ZXJJbmxpbmVDb21wb25lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJWaWV3QWN0aW9uc0NvbXBvbmVudClcbiAgcHJpdmF0ZSB2aWV3QWN0aW9uczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFyVmlld0FjdGlvbnNDb21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaCcsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWVcbiAgfSlcbiAgcHJpdmF0ZSBzZWFyY2hUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKCdzb3J0U2VsZWN0b3InLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlXG4gIH0pXG4gIHByaXZhdGUgc29ydFNlbGVjdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgnaW5saW5lRmlsdGVyQnV0dG9uJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZVxuICB9KVxuICBwcml2YXRlIGlubGluZUZpbHRlckJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgY3VzdG9tSXRlbUlkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBoYXNTb3J0U2VsZWN0b3JzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5saW5lRmlsdGVyc0l0ZW1Ub29sYmFySW5kZXg6IG51bWJlciA9IDUwMDA7XG4gIHByaXZhdGUgc29ydFNlbGVjdG9ySXRlbVRvb2xiYXJJbmRleDogbnVtYmVyID0gNjAwMDtcbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIF9pbk1lbW9yeVNlYXJjaEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdGF0ZTogTGlzdFN0YXRlLFxuICAgIHByaXZhdGUgZGlzcGF0Y2hlcjogTGlzdFN0YXRlRGlzcGF0Y2hlcixcbiAgICBwcml2YXRlIHRvb2xiYXJTdGF0ZTogTGlzdFRvb2xiYXJTdGF0ZSxcbiAgICBwdWJsaWMgdG9vbGJhckRpc3BhdGNoZXI6IExpc3RUb29sYmFyU3RhdGVEaXNwYXRjaGVyXG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyRXhpc3RzKHRydWUpO1xuXG4gICAgZ2V0VmFsdWUodGhpcy5zZWFyY2hUZXh0LCAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaFRleHQoc2VhcmNoVGV4dCk7XG4gICAgfSk7XG5cbiAgICBnZXRWYWx1ZSh0aGlzLnNlYXJjaEVuYWJsZWQsIChzZWFyY2hFbmFibGVkOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnRvb2xiYXJEaXNwYXRjaGVyLm5leHQoXG4gICAgICAgIG5ldyBMaXN0VG9vbGJhckNvbmZpZ1NldFNlYXJjaEVuYWJsZWRBY3Rpb24oXG4gICAgICAgICAgc2VhcmNoRW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNlYXJjaEVuYWJsZWRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGdldFZhbHVlKHRoaXMudG9vbGJhclR5cGUsICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5uZXh0KG5ldyBMaXN0VG9vbGJhclNldFR5cGVBY3Rpb24odGhpcy50b29sYmFyVHlwZSkpO1xuICAgIH0pO1xuXG4gICAgZ2V0VmFsdWUodGhpcy5zb3J0U2VsZWN0b3JFbmFibGVkLCAoc29ydFNlbGVjdG9yRW5hYmxlZDogYW55KSA9PiB7XG4gICAgICB0aGlzLnRvb2xiYXJEaXNwYXRjaGVyLm5leHQoXG4gICAgICAgIG5ldyBMaXN0VG9vbGJhckNvbmZpZ1NldFNvcnRTZWxlY3RvckVuYWJsZWRBY3Rpb24oXG4gICAgICAgICAgc29ydFNlbGVjdG9yRW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNvcnRTZWxlY3RvckVuYWJsZWRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc29ydFNlbGVjdG9ycyA9IHRoaXMuZ2V0U29ydFNlbGVjdG9ycygpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgc29ydCB0b29sYmFyIGl0ZW0gaWYgbmVjZXNzYXJ5XG4gICAgdGhpcy5zb3J0U2VsZWN0b3JzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbnRTb3J0KSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50U29ydC5sZW5ndGggPiAwICYmICF0aGlzLmhhc1NvcnRTZWxlY3RvcnMpIHtcbiAgICAgICAgICB0aGlzLmhhc1NvcnRTZWxlY3RvcnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyQWRkSXRlbXMoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIG5ldyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCh7XG4gICAgICAgICAgICAgICAgaWQ6ICdzb3J0LXNlbGVjdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5zb3J0U2VsZWN0b3JUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLnNvcnRTZWxlY3Rvckl0ZW1Ub29sYmFySW5kZXhcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTb3J0Lmxlbmd0aCA8IDEgJiYgdGhpcy5oYXNTb3J0U2VsZWN0b3JzKSB7XG4gICAgICAgICAgdGhpcy5oYXNTb3J0U2VsZWN0b3JzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJSZW1vdmVJdGVtcyhbXG4gICAgICAgICAgICAnc29ydC1zZWxlY3RvcidcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnNlYXJjaFRleHRJbnB1dCA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMuc2VhcmNoLnNlYXJjaFRleHQpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICB0aGlzLnZpZXcgPSB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLnZpZXdzLmFjdGl2ZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgIHRoaXMud2F0Y2hUZW1wbGF0ZXMoKTtcblxuICAgIHRoaXMudHlwZSA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgoc3RhdGUpID0+IHN0YXRlLnRvb2xiYXIudHlwZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgIHRoaXMudHlwZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh0b29sYmFyVHlwZSkgPT4ge1xuICAgICAgICBpZiAodG9vbGJhclR5cGUgPT09ICdzZWFyY2gnKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJSZW1vdmVJdGVtcyhbJ3NlYXJjaCddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBuZXcgTGlzdFRvb2xiYXJJdGVtTW9kZWwoe1xuICAgICAgICAgICAgICAgIGlkOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5zZWFyY2hUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ3JpZ2h0J1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5pc1NlYXJjaEVuYWJsZWQgPSB0aGlzLnRvb2xiYXJTdGF0ZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICBvYnNlcnZhYmxlTWFwKHMgPT4gcy5jb25maWcpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG9ic2VydmFibGVNYXAoYyA9PiBjLnNlYXJjaEVuYWJsZWQpKTtcblxuICAgIHRoaXMuc3RhdGUucGlwZShvYnNlcnZhYmxlTWFwKHMgPT4gcy50b29sYmFyKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG9ic2VydmFibGVNYXAoYyA9PiBjLmRpc2FibGVkKSlcbiAgICAgIC5zdWJzY3JpYmUoaXNEaXNhYmxlZCA9PiB0aGlzLmlzVG9vbGJhckRpc2FibGVkID0gaXNEaXNhYmxlZCk7XG5cbiAgICB0aGlzLmlzU29ydFNlbGVjdG9yRW5hYmxlZCA9IHRoaXMudG9vbGJhclN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLmNvbmZpZyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChjID0+IGMuc29ydFNlbGVjdG9yRW5hYmxlZCkpO1xuXG4gICAgdGhpcy5pc011bHRpc2VsZWN0RW5hYmxlZCA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMudG9vbGJhciksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCh0ID0+IHQuc2hvd011bHRpc2VsZWN0VG9vbGJhcikpO1xuXG4gICAgdGhpcy5oYXNBcHBsaWVkRmlsdGVycyA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMuZmlsdGVycyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgoZmlsdGVycykgPT4ge1xuICAgICAgICBsZXQgYWN0aXZlRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGYudmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICBmLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGYudmFsdWUgIT09IGZhbHNlICYmXG4gICAgICAgICAgICBmLnZhbHVlICE9PSBmLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhY3RpdmVGaWx0ZXJzLmxlbmd0aCA+IDA7XG4gICAgICB9KSk7XG5cbiAgICB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmhhc0FkZGl0aW9uYWxUb29sYmFyU2VjdGlvbiA9IChjdXJyZW50LnRvb2xiYXIuaXRlbXMubGVuZ3RoID4gMCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIEluamVjdCBjdXN0b20gdG9vbGJhciBpdGVtcy5cbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5mb3JFYWNoKCh0b29sYmFySXRlbSkgPT4ge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJBZGRJdGVtcyhcbiAgICAgICAgW1xuICAgICAgICAgIG5ldyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCh0b29sYmFySXRlbSlcbiAgICAgICAgXVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jdXN0b21JdGVtSWRzLnB1c2godG9vbGJhckl0ZW0uaWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy50b29sYmFySXRlbXMuY2hhbmdlcy5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChuZXdJdGVtczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFySXRlbUNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgbmV3SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jdXN0b21JdGVtSWRzLmluZGV4T2YoaXRlbS5pZCkgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgbmV3IExpc3RUb29sYmFySXRlbU1vZGVsKGl0ZW0pXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tSXRlbUlkcy5wdXNoKGl0ZW0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaXRlbXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICB0aGlzLmN1c3RvbUl0ZW1JZHMuZm9yRWFjaCgoaXRlbUlkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICghbmV3SXRlbXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGl0ZW1JZCkpIHtcbiAgICAgICAgICAgIGl0ZW1zVG9SZW1vdmUucHVzaChpdGVtSWQpO1xuICAgICAgICAgICAgdGhpcy5jdXN0b21JdGVtSWRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhclJlbW92ZUl0ZW1zKGl0ZW1zVG9SZW1vdmUpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBzb3J0TW9kZWxzID0gdGhpcy50b29sYmFyU29ydHMubWFwKHNvcnQgPT5cbiAgICAgIG5ldyBMaXN0U29ydExhYmVsTW9kZWwoXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBzb3J0LmxhYmVsLFxuICAgICAgICAgIGZpZWxkU2VsZWN0b3I6IHNvcnQuZmllbGQsXG4gICAgICAgICAgZmllbGRUeXBlOiBzb3J0LnR5cGUsXG4gICAgICAgICAgZ2xvYmFsOiB0cnVlLFxuICAgICAgICAgIGRlc2NlbmRpbmc6IHNvcnQuZGVzY2VuZGluZ1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hlci5zb3J0U2V0R2xvYmFsKHNvcnRNb2RlbHMpO1xuXG4gICAgLy8gQWRkIGlubGluZSBmaWx0ZXJzLlxuICAgIHRoaXMuc2hvd0ZpbHRlclN1bW1hcnkgPSAodGhpcy5maWx0ZXJTdW1tYXJ5Lmxlbmd0aCA+IDApO1xuICAgIHRoaXMuaGFzSW5saW5lRmlsdGVycyA9ICh0aGlzLmlubGluZUZpbHRlci5sZW5ndGggPiAwKTtcblxuICAgIGlmICh0aGlzLmhhc0lubGluZUZpbHRlcnMpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyQWRkSXRlbXMoXG4gICAgICAgIFtcbiAgICAgICAgICBuZXcgTGlzdFRvb2xiYXJJdGVtTW9kZWwoe1xuICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuaW5saW5lRmlsdGVyQnV0dG9uVGVtcGxhdGUsXG4gICAgICAgICAgICBsb2NhdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5saW5lRmlsdGVyc0l0ZW1Ub29sYmFySW5kZXhcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB2aWV3IGFjdGlvbnNcbiAgICB0aGlzLmhhc1ZpZXdBY3Rpb25zID0gKHRoaXMudmlld0FjdGlvbnMubGVuZ3RoID4gMCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWFyY2hBcHBsaWVkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTb3J0KHNvcnQ6IExpc3RTb3J0TGFiZWxNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGN1cnJlbnRTdGF0ZSkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5wYWdpbmcucGFnZU51bWJlciAmJiBjdXJyZW50U3RhdGUucGFnaW5nLnBhZ2VOdW1iZXIgIT09IDEpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLm5leHQoXG4gICAgICAgICAgbmV3IExpc3RQYWdpbmdTZXRQYWdlTnVtYmVyQWN0aW9uKE51bWJlcigxKSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaXNwYXRjaGVyLnNvcnRTZXRGaWVsZFNlbGVjdG9ycyhcbiAgICAgICAgW3sgZmllbGRTZWxlY3Rvcjogc29ydC5maWVsZFNlbGVjdG9yLCBkZXNjZW5kaW5nOiBzb3J0LmRlc2NlbmRpbmcgfV1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5saW5lRmlsdGVyQnV0dG9uQ2xpY2soKSB7XG4gICAgdGhpcy5pbmxpbmVGaWx0ZXJCYXJFeHBhbmRlZCA9ICF0aGlzLmlubGluZUZpbHRlckJhckV4cGFuZGVkO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNlYXJjaFRleHQoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWFyY2hBcHBsaWVkLm5leHQoc2VhcmNoVGV4dCk7XG4gICAgaWYgKHRoaXMuaW5NZW1vcnlTZWFyY2hFbmFibGVkKSB7XG4gICAgICB0aGlzLnN0YXRlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjdXJyZW50U3RhdGUpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5wYWdpbmcucGFnZU51bWJlciAmJiBjdXJyZW50U3RhdGUucGFnaW5nLnBhZ2VOdW1iZXIgIT09IDEpIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIubmV4dChcbiAgICAgICAgICAgIG5ldyBMaXN0UGFnaW5nU2V0UGFnZU51bWJlckFjdGlvbihOdW1iZXIoMSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5zZWFyY2hTZXRUZXh0KHNlYXJjaFRleHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpdGVtSXNJblZpZXcoaXRlbVZpZXc6IHN0cmluZywgYWN0aXZlVmlldzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpdGVtVmlldyA9PT0gdW5kZWZpbmVkIHx8IGl0ZW1WaWV3ID09PSBhY3RpdmVWaWV3KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydFNlbGVjdG9ycygpIHtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QoXG4gICAgICB0aGlzLnN0YXRlLnBpcGUob2JzZXJ2YWJsZU1hcChzID0+IHMuc29ydC5hdmFpbGFibGUpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgIHRoaXMuc3RhdGUucGlwZShvYnNlcnZhYmxlTWFwKHMgPT4gcy5zb3J0Lmdsb2JhbCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgdGhpcy5zdGF0ZS5waXBlKG9ic2VydmFibGVNYXAocyA9PiBzLnNvcnQuZmllbGRTZWxlY3RvcnMpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgIChcbiAgICAgICAgYXZhaWxhYmxlOiBBcnJheTxMaXN0U29ydExhYmVsTW9kZWw+LFxuICAgICAgICBnbG9iYWw6IEFycmF5PExpc3RTb3J0TGFiZWxNb2RlbD4sXG4gICAgICAgIGZpZWxkU2VsZWN0b3JzOiBBcnJheTxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD5cbiAgICAgICkgPT4ge1xuXG4gICAgICAgIC8vIEdldCBzb3J0cyB0aGF0IGFyZSBpbiB0aGUgZ2xvYmFsIHRoYXQgYXJlIG5vdCBpbiB0aGUgYXZhaWxhYmxlXG4gICAgICAgIGxldCBzb3J0cyA9IGdsb2JhbC5maWx0ZXIoXG4gICAgICAgICAgZyA9PiBhdmFpbGFibGUuZmlsdGVyKGEgPT4gYS5maWVsZFNlbGVjdG9yID09PSBnLmZpZWxkU2VsZWN0b3IpLmxlbmd0aCA9PT0gMFxuICAgICAgICApO1xuXG4gICAgICAgIGxldCByZXN1bHRTb3J0U2VsZWN0b3JzID0gWy4uLnNvcnRzLCAuLi5hdmFpbGFibGVdLm1hcChzb3J0TGFiZWxzID0+IHtcbiAgICAgICAgICBsZXQgZnMgPSBmaWVsZFNlbGVjdG9ycy5maWx0ZXIoZiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZi5maWVsZFNlbGVjdG9yID09PSBzb3J0TGFiZWxzLmZpZWxkU2VsZWN0b3JcbiAgICAgICAgICAgICAgJiYgZi5kZXNjZW5kaW5nID09PSBzb3J0TGFiZWxzLmRlc2NlbmRpbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGZzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc29ydDogc29ydExhYmVscyxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRTb3J0U2VsZWN0b3JzO1xuICAgICAgfVxuICAgICkucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hUZW1wbGF0ZXMoKSB7XG4gICAgb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QoXG4gICAgICB0aGlzLnN0YXRlLnBpcGUob2JzZXJ2YWJsZU1hcChzID0+IHMudG9vbGJhciksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgdGhpcy52aWV3LnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgICAodG9vbGJhcjogTGlzdFRvb2xiYXJNb2RlbCwgdmlldzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdG9vbGJhci5pdGVtcy5maWx0ZXIoKGk6IExpc3RUb29sYmFySXRlbU1vZGVsKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUlzSW5WaWV3KGkudmlldywgdmlldyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlczogYW55ID0ge307XG5cbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogTGlzdFRvb2xiYXJJdGVtTW9kZWwpID0+IHtcbiAgICAgICAgICB0ZW1wbGF0ZXNbaXRlbS5sb2NhdGlvbl0gPSB0ZW1wbGF0ZXNbaXRlbS5sb2NhdGlvbl0gfHwgW107XG4gICAgICAgICAgdGVtcGxhdGVzW2l0ZW0ubG9jYXRpb25dLnB1c2goaXRlbSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXM7XG4gICAgICB9XG4gICAgKS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSlcbiAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLmxlZnRUZW1wbGF0ZXMgPSB2YWx1ZS5sZWZ0O1xuICAgICAgICB0aGlzLmNlbnRlclRlbXBsYXRlcyA9IHZhbHVlLmNlbnRlcjtcbiAgICAgICAgdGhpcy5yaWdodFRlbXBsYXRlcyA9IHZhbHVlLnJpZ2h0O1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==