@one-paragon/angular-utilities 0.3.10 → 0.3.11-beta.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 (395) hide show
  1. package/karma.conf.js +44 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +16 -30
  4. package/src/action-state/action-state-spinner/action-state-spinner.component.css +16 -0
  5. package/src/action-state/action-state-spinner/action-state-spinner.component.html +6 -0
  6. package/src/action-state/action-state-spinner/action-state-spinner.component.spec.ts +25 -0
  7. package/src/action-state/action-state-spinner/action-state-spinner.component.ts +26 -0
  8. package/src/action-state/action-state-ui/action-state-ui.module.ts +13 -0
  9. package/{action-state/index.d.ts → src/action-state/index.ts} +8 -4
  10. package/src/action-state/ngrx-ext/ngrx-ext.module.ts +15 -0
  11. package/src/action-state/ngrx.ts +69 -0
  12. package/src/http-request-state/HttpRequestStateFactory.ts +29 -0
  13. package/src/http-request-state/HttpRequestStateStore.ts +147 -0
  14. package/src/http-request-state/directives/HttpStateDirectiveBase.ts +38 -0
  15. package/src/http-request-state/directives/http-error-state-directive.ts +32 -0
  16. package/src/http-request-state/directives/http-inProgress-state-directive.ts +32 -0
  17. package/src/http-request-state/directives/http-notStarted-state-directive.ts +31 -0
  18. package/src/http-request-state/directives/http-success-state-directive.ts +40 -0
  19. package/src/http-request-state/directives/request-state-directive.spec.ts +72 -0
  20. package/src/http-request-state/directives/request-state-directive.ts +79 -0
  21. package/src/http-request-state/helpers.ts +30 -0
  22. package/src/http-request-state/http-request-state.ts +69 -0
  23. package/src/http-request-state/http-state-module.ts +23 -0
  24. package/{http-request-state/index.d.ts → src/http-request-state/index.ts} +1 -1
  25. package/src/http-request-state/observable.spec.ts +43 -0
  26. package/src/http-request-state/rxjs/getRequestorBody.ts +10 -0
  27. package/src/http-request-state/rxjs/getRequestorState.ts +8 -0
  28. package/src/http-request-state/rxjs/tapError.ts +16 -0
  29. package/src/http-request-state/rxjs/tapSuccess.ts +16 -0
  30. package/src/http-request-state/strategies.spec.ts +42 -0
  31. package/src/http-request-state/types.ts +50 -0
  32. package/src/ngrx/actionable-selector.ts +95 -0
  33. package/src/ngrx/index.ts +1 -0
  34. package/{public-api.d.ts → src/public-api.ts} +35 -16
  35. package/src/rxjs/defaultShareReplay.ts +8 -0
  36. package/{rxjs/index.d.ts → src/rxjs/index.ts} +4 -4
  37. package/src/rxjs/mapError.ts +8 -0
  38. package/src/rxjs/rxjs-operators.ts +132 -0
  39. package/src/rxjs/subjectifier.ts +15 -0
  40. package/src/specs/clickSubject.spec.ts +95 -0
  41. package/src/specs/dialog.spec.ts +101 -0
  42. package/src/specs/toggleGroupDirective.spec.ts +229 -0
  43. package/src/table-builder/classes/DefaultSettings.ts +11 -0
  44. package/src/table-builder/classes/MatTableObservableDataSource.ts +23 -0
  45. package/src/table-builder/classes/TableBuilderConfig.ts +35 -0
  46. package/src/table-builder/classes/TableBuilderDataSource.ts +57 -0
  47. package/src/table-builder/classes/TableState.ts +83 -0
  48. package/src/table-builder/classes/filter-info.ts +131 -0
  49. package/src/table-builder/classes/table-builder-general-settings.ts +90 -0
  50. package/src/table-builder/classes/table-builder.ts +52 -0
  51. package/src/table-builder/classes/table-store.ts +394 -0
  52. package/src/table-builder/components/array-column.component.ts +36 -0
  53. package/src/table-builder/components/column-builder/column-builder.component.html +58 -0
  54. package/src/table-builder/components/column-builder/column-builder.component.scss +43 -0
  55. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +49 -0
  56. package/src/table-builder/components/column-builder/column-builder.component.ts +117 -0
  57. package/src/table-builder/components/column-builder/column-helpers.ts +38 -0
  58. package/src/table-builder/components/date-filter/date-filter.component.html +23 -0
  59. package/src/table-builder/components/date-filter/date-filter.component.ts +24 -0
  60. package/src/table-builder/components/date-time-filter/date-time-filter.component.html +9 -0
  61. package/src/table-builder/components/date-time-filter/date-time-filter.component.ts +22 -0
  62. package/src/table-builder/components/filter/filter.component.html +88 -0
  63. package/src/table-builder/components/filter/filter.component.scss +64 -0
  64. package/src/table-builder/components/filter/filter.component.spec.ts +87 -0
  65. package/src/table-builder/components/filter/filter.component.ts +55 -0
  66. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +92 -0
  67. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +55 -0
  68. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +57 -0
  69. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +55 -0
  70. package/src/table-builder/components/generic-table/generic-table.component.html +71 -0
  71. package/src/table-builder/components/generic-table/generic-table.component.scss +51 -0
  72. package/src/table-builder/components/generic-table/generic-table.component.ts +220 -0
  73. package/src/table-builder/components/generic-table/paginator.component.ts +94 -0
  74. package/src/table-builder/components/group-by-list/group-by-list.component.css +8 -0
  75. package/src/table-builder/components/group-by-list/group-by-list.component.html +12 -0
  76. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +23 -0
  77. package/src/table-builder/components/group-by-list/group-by-list.component.ts +21 -0
  78. package/src/table-builder/components/header-menu/header-menu.component.html +98 -0
  79. package/src/table-builder/components/header-menu/header-menu.component.scss +96 -0
  80. package/src/table-builder/components/header-menu/header-menu.component.ts +98 -0
  81. package/src/table-builder/components/in-filter/in-filter.component.css +3 -0
  82. package/src/table-builder/components/in-filter/in-filter.component.html +20 -0
  83. package/src/table-builder/components/in-filter/in-filter.component.ts +64 -0
  84. package/{table-builder/components/index.d.ts → src/table-builder/components/index.ts} +9 -9
  85. package/src/table-builder/components/initialization-component/initialization-component.html +29 -0
  86. package/src/table-builder/components/initialization-component/initialization-component.ts +24 -0
  87. package/src/table-builder/components/link-column.component.ts +47 -0
  88. package/src/table-builder/components/number-filter/number-filter.component.css +10 -0
  89. package/src/table-builder/components/number-filter/number-filter.component.html +19 -0
  90. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +30 -0
  91. package/src/table-builder/components/number-filter/number-filter.component.ts +25 -0
  92. package/src/table-builder/components/scroll-strategy.ts +82 -0
  93. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +62 -0
  94. package/src/table-builder/components/sort-menu/sort-menu.component.html +111 -0
  95. package/src/table-builder/components/sort-menu/sort-menu.component.scss +119 -0
  96. package/src/table-builder/components/sort-menu/sort-menu.component.ts +95 -0
  97. package/{table-builder/components/table-container/table-container-imports.d.ts → src/table-builder/components/table-container/table-container-imports.ts} +30 -14
  98. package/src/table-builder/components/table-container/table-container.css +45 -0
  99. package/src/table-builder/components/table-container/table-container.helpers/data-state.helpers.ts +141 -0
  100. package/src/table-builder/components/table-container/table-container.helpers/filter-state.helpers.ts +106 -0
  101. package/src/table-builder/components/table-container/table-container.helpers/groupBy.helpers.ts +69 -0
  102. package/src/table-builder/components/table-container/table-container.helpers/sort-state.helpers.ts +45 -0
  103. package/src/table-builder/components/table-container/table-container.html +117 -0
  104. package/src/table-builder/components/table-container/table-container.spec.ts +154 -0
  105. package/src/table-builder/components/table-container/table-container.ts +325 -0
  106. package/src/table-builder/components/table-container/tableProps.ts +18 -0
  107. package/src/table-builder/components/table-container/virtual-scroll-container.ts +126 -0
  108. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +31 -0
  109. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +52 -0
  110. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +42 -0
  111. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +10 -0
  112. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +86 -0
  113. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +38 -0
  114. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +23 -0
  115. package/src/table-builder/directives/custom-cell-directive.ts +46 -0
  116. package/{table-builder/directives/index.d.ts → src/table-builder/directives/index.ts} +6 -5
  117. package/src/table-builder/directives/multi-sort.directive.spec.ts +124 -0
  118. package/src/table-builder/directives/multi-sort.directive.ts +49 -0
  119. package/src/table-builder/directives/resize-column.directive.ts +105 -0
  120. package/src/table-builder/directives/table-wrapper.directive.ts +14 -0
  121. package/src/table-builder/directives/tb-filter.directive.ts +370 -0
  122. package/src/table-builder/enums/filterTypes.ts +79 -0
  123. package/src/table-builder/functions/boolean-filter-function.ts +13 -0
  124. package/src/table-builder/functions/date-filter-function.ts +69 -0
  125. package/src/table-builder/functions/download-data.ts +11 -0
  126. package/src/table-builder/functions/null-filter-function.ts +9 -0
  127. package/src/table-builder/functions/number-filter-function.ts +42 -0
  128. package/src/table-builder/functions/sort-data-function.ts +23 -0
  129. package/src/table-builder/functions/string-filter-function.ts +52 -0
  130. package/{table-builder/interfaces/ColumnInfo.d.ts → src/table-builder/interfaces/ColumnInfo.ts} +3 -2
  131. package/src/table-builder/interfaces/column-template.ts +9 -0
  132. package/{table-builder/interfaces/dictionary.d.ts → src/table-builder/interfaces/dictionary.ts} +3 -3
  133. package/src/table-builder/interfaces/report-def.ts +153 -0
  134. package/src/table-builder/ngrx/tableBuilderStateStore.ts +143 -0
  135. package/src/table-builder/pipes/column-total.pipe.ts +17 -0
  136. package/src/table-builder/pipes/format-filter-type.pipe.ts +12 -0
  137. package/src/table-builder/pipes/format-filter-value.pipe.ts +41 -0
  138. package/src/table-builder/pipes/key-display.ts +16 -0
  139. package/src/table-builder/services/export-to-csv.service.ts +96 -0
  140. package/src/table-builder/services/link-creator.service.ts +68 -0
  141. package/src/table-builder/services/table-template-service.ts +55 -0
  142. package/src/table-builder/services/transform-creator.ts +92 -0
  143. package/src/table-builder/specs/table-custom-filters.spec.ts +262 -0
  144. package/src/table-builder/styles/collapser.styles.scss +15 -0
  145. package/src/table-builder/table-builder.module.ts +73 -0
  146. package/src/test.ts +17 -0
  147. package/src/utilities/array-helpers.ts +13 -0
  148. package/src/utilities/directives/auto-focus.directive.ts +20 -0
  149. package/src/utilities/directives/clickEmitterDirective.ts +16 -0
  150. package/src/utilities/directives/clickSubject.ts +20 -0
  151. package/src/utilities/directives/conditional-classes.directive.ts +36 -0
  152. package/src/utilities/directives/dialog-service.ts +19 -0
  153. package/src/utilities/directives/dialog.ts +142 -0
  154. package/src/utilities/directives/mat-toggle-group-directive.ts +61 -0
  155. package/src/utilities/directives/prevent-enter.directive.ts +13 -0
  156. package/src/utilities/directives/stop-propagation.directive.ts +20 -0
  157. package/src/utilities/directives/styler.ts +39 -0
  158. package/src/utilities/directives/trim-whitespace.directive.ts +21 -0
  159. package/{utilities/index.d.ts → src/utilities/index.ts} +22 -15
  160. package/src/utilities/module.ts +55 -0
  161. package/src/utilities/pipes/function.pipe.ts +16 -0
  162. package/src/utilities/pipes/phone.pipe.ts +15 -0
  163. package/src/utilities/pipes/space-case.pipes.spec.ts +47 -0
  164. package/src/utilities/pipes/space-case.pipes.ts +23 -0
  165. package/tsconfig.lib.json +19 -0
  166. package/tsconfig.lib.prod.json +10 -0
  167. package/tsconfig.spec.json +17 -0
  168. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +0 -12
  169. package/action-state/action-state-ui/action-state-ui.module.d.ts +0 -7
  170. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +0 -8
  171. package/action-state/ngrx.d.ts +0 -31
  172. package/esm2022/action-state/action-state-spinner/action-state-spinner.component.mjs +0 -24
  173. package/esm2022/action-state/action-state-ui/action-state-ui.module.mjs +0 -20
  174. package/esm2022/action-state/index.mjs +0 -8
  175. package/esm2022/action-state/ngrx-ext/ngrx-ext.module.mjs +0 -23
  176. package/esm2022/action-state/ngrx.mjs +0 -42
  177. package/esm2022/http-request-state/HttpRequestStateFactory.mjs +0 -27
  178. package/esm2022/http-request-state/HttpRequestStateStore.mjs +0 -98
  179. package/esm2022/http-request-state/directives/HttpStateDirectiveBase.mjs +0 -34
  180. package/esm2022/http-request-state/directives/http-error-state-directive.mjs +0 -29
  181. package/esm2022/http-request-state/directives/http-inProgress-state-directive.mjs +0 -29
  182. package/esm2022/http-request-state/directives/http-notStarted-state-directive.mjs +0 -29
  183. package/esm2022/http-request-state/directives/http-success-state-directive.mjs +0 -34
  184. package/esm2022/http-request-state/directives/index.mjs +0 -6
  185. package/esm2022/http-request-state/directives/request-state-directive.mjs +0 -60
  186. package/esm2022/http-request-state/helpers.mjs +0 -22
  187. package/esm2022/http-request-state/http-request-state.mjs +0 -39
  188. package/esm2022/http-request-state/http-state-module.mjs +0 -40
  189. package/esm2022/http-request-state/index.mjs +0 -7
  190. package/esm2022/http-request-state/rxjs/getRequestorBody.mjs +0 -4
  191. package/esm2022/http-request-state/rxjs/getRequestorState.mjs +0 -3
  192. package/esm2022/http-request-state/rxjs/index.mjs +0 -5
  193. package/esm2022/http-request-state/rxjs/tapError.mjs +0 -12
  194. package/esm2022/http-request-state/rxjs/tapSuccess.mjs +0 -12
  195. package/esm2022/http-request-state/types.mjs +0 -16
  196. package/esm2022/ngrx/actionable-selector.mjs +0 -73
  197. package/esm2022/ngrx/index.mjs +0 -2
  198. package/esm2022/one-paragon-angular-utilities.mjs +0 -5
  199. package/esm2022/public-api.mjs +0 -20
  200. package/esm2022/rxjs/defaultShareReplay.mjs +0 -7
  201. package/esm2022/rxjs/index.mjs +0 -5
  202. package/esm2022/rxjs/mapError.mjs +0 -8
  203. package/esm2022/rxjs/rxjs-operators.mjs +0 -92
  204. package/esm2022/rxjs/subjectifier.mjs +0 -15
  205. package/esm2022/table-builder/classes/DefaultSettings.mjs +0 -6
  206. package/esm2022/table-builder/classes/MatTableObservableDataSource.mjs +0 -21
  207. package/esm2022/table-builder/classes/TableBuilderConfig.mjs +0 -18
  208. package/esm2022/table-builder/classes/TableBuilderDataSource.mjs +0 -50
  209. package/esm2022/table-builder/classes/TableState.mjs +0 -42
  210. package/esm2022/table-builder/classes/display-col.mjs +0 -2
  211. package/esm2022/table-builder/classes/filter-info.mjs +0 -73
  212. package/esm2022/table-builder/classes/table-builder-general-settings.mjs +0 -68
  213. package/esm2022/table-builder/classes/table-builder.mjs +0 -82
  214. package/esm2022/table-builder/classes/table-store.mjs +0 -314
  215. package/esm2022/table-builder/components/array-column.component.mjs +0 -78
  216. package/esm2022/table-builder/components/column-builder/column-builder.component.mjs +0 -118
  217. package/esm2022/table-builder/components/date-filter/date-filter.component.mjs +0 -29
  218. package/esm2022/table-builder/components/date-time-filter/date-time-filter.component.mjs +0 -24
  219. package/esm2022/table-builder/components/filter/filter.component.mjs +0 -66
  220. package/esm2022/table-builder/components/filter/in-list/in-list-filter.component.mjs +0 -101
  221. package/esm2022/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +0 -52
  222. package/esm2022/table-builder/components/generic-table/generic-table.component.mjs +0 -205
  223. package/esm2022/table-builder/components/generic-table/paginator.component.mjs +0 -79
  224. package/esm2022/table-builder/components/group-by-list/group-by-list.component.mjs +0 -23
  225. package/esm2022/table-builder/components/header-menu/header-menu.component.mjs +0 -101
  226. package/esm2022/table-builder/components/in-filter/in-filter.component.mjs +0 -64
  227. package/esm2022/table-builder/components/index.mjs +0 -10
  228. package/esm2022/table-builder/components/initialization-component/initialization-component.mjs +0 -36
  229. package/esm2022/table-builder/components/link-column.component.mjs +0 -73
  230. package/esm2022/table-builder/components/number-filter/number-filter.component.mjs +0 -29
  231. package/esm2022/table-builder/components/scroll-strategy.mjs +0 -63
  232. package/esm2022/table-builder/components/sort-menu/sort-menu.component-store.mjs +0 -43
  233. package/esm2022/table-builder/components/sort-menu/sort-menu.component.mjs +0 -81
  234. package/esm2022/table-builder/components/table-container/table-container-imports.mjs +0 -26
  235. package/esm2022/table-builder/components/table-container/table-container.helpers/data-state.helpers.mjs +0 -2
  236. package/esm2022/table-builder/components/table-container/table-container.helpers/filter-state.helpers.mjs +0 -62
  237. package/esm2022/table-builder/components/table-container/table-container.helpers/groupBy.helpers.mjs +0 -56
  238. package/esm2022/table-builder/components/table-container/table-container.helpers/sort-state.helpers.mjs +0 -36
  239. package/esm2022/table-builder/components/table-container/table-container.mjs +0 -337
  240. package/esm2022/table-builder/components/table-container/tableProps.mjs +0 -9
  241. package/esm2022/table-builder/components/table-container/virtual-scroll-container.mjs +0 -101
  242. package/esm2022/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +0 -47
  243. package/esm2022/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +0 -36
  244. package/esm2022/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +0 -25
  245. package/esm2022/table-builder/components/table-context.mjs +0 -2
  246. package/esm2022/table-builder/directives/custom-cell-directive.mjs +0 -60
  247. package/esm2022/table-builder/directives/index.mjs +0 -6
  248. package/esm2022/table-builder/directives/multi-sort.directive.mjs +0 -50
  249. package/esm2022/table-builder/directives/resize-column.directive.mjs +0 -87
  250. package/esm2022/table-builder/directives/table-wrapper.directive.mjs +0 -20
  251. package/esm2022/table-builder/directives/tb-filter.directive.mjs +0 -410
  252. package/esm2022/table-builder/enums/filterTypes.mjs +0 -72
  253. package/esm2022/table-builder/functions/boolean-filter-function.mjs +0 -10
  254. package/esm2022/table-builder/functions/date-filter-function.mjs +0 -58
  255. package/esm2022/table-builder/functions/download-data.mjs +0 -12
  256. package/esm2022/table-builder/functions/null-filter-function.mjs +0 -8
  257. package/esm2022/table-builder/functions/number-filter-function.mjs +0 -32
  258. package/esm2022/table-builder/functions/sort-data-function.mjs +0 -17
  259. package/esm2022/table-builder/functions/string-filter-function.mjs +0 -41
  260. package/esm2022/table-builder/interfaces/ColumnInfo.mjs +0 -2
  261. package/esm2022/table-builder/interfaces/dictionary.mjs +0 -2
  262. package/esm2022/table-builder/interfaces/report-def.mjs +0 -35
  263. package/esm2022/table-builder/ngrx/tableBuilderStateStore.mjs +0 -115
  264. package/esm2022/table-builder/pipes/column-total.pipe.mjs +0 -22
  265. package/esm2022/table-builder/pipes/format-filter-type.pipe.mjs +0 -18
  266. package/esm2022/table-builder/pipes/format-filter-value.pipe.mjs +0 -45
  267. package/esm2022/table-builder/pipes/key-display.mjs +0 -20
  268. package/esm2022/table-builder/services/export-to-csv.service.mjs +0 -88
  269. package/esm2022/table-builder/services/link-creator.service.mjs +0 -42
  270. package/esm2022/table-builder/services/table-template-service.mjs +0 -44
  271. package/esm2022/table-builder/services/transform-creator.mjs +0 -78
  272. package/esm2022/table-builder/table-builder.module.mjs +0 -124
  273. package/esm2022/utilities/array-helpers.mjs +0 -14
  274. package/esm2022/utilities/directives/auto-focus.directive.mjs +0 -27
  275. package/esm2022/utilities/directives/clickEmitterDirective.mjs +0 -22
  276. package/esm2022/utilities/directives/clickSubject.mjs +0 -28
  277. package/esm2022/utilities/directives/conditional-classes.directive.mjs +0 -36
  278. package/esm2022/utilities/directives/dialog-service.mjs +0 -23
  279. package/esm2022/utilities/directives/dialog.mjs +0 -138
  280. package/esm2022/utilities/directives/mat-toggle-group-directive.mjs +0 -60
  281. package/esm2022/utilities/directives/prevent-enter.directive.mjs +0 -20
  282. package/esm2022/utilities/directives/stop-propagation.directive.mjs +0 -26
  283. package/esm2022/utilities/directives/styler.mjs +0 -42
  284. package/esm2022/utilities/directives/trim-whitespace.directive.mjs +0 -30
  285. package/esm2022/utilities/index.mjs +0 -16
  286. package/esm2022/utilities/module.mjs +0 -90
  287. package/esm2022/utilities/pipes/function.pipe.mjs +0 -22
  288. package/esm2022/utilities/pipes/phone.pipe.mjs +0 -20
  289. package/esm2022/utilities/pipes/space-case.pipes.mjs +0 -28
  290. package/fesm2022/one-paragon-angular-utilities.mjs +0 -5045
  291. package/fesm2022/one-paragon-angular-utilities.mjs.map +0 -1
  292. package/http-request-state/HttpRequestStateFactory.d.ts +0 -15
  293. package/http-request-state/HttpRequestStateStore.d.ts +0 -49
  294. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +0 -16
  295. package/http-request-state/directives/http-error-state-directive.d.ts +0 -12
  296. package/http-request-state/directives/http-inProgress-state-directive.d.ts +0 -12
  297. package/http-request-state/directives/http-notStarted-state-directive.d.ts +0 -12
  298. package/http-request-state/directives/http-success-state-directive.d.ts +0 -21
  299. package/http-request-state/directives/request-state-directive.d.ts +0 -35
  300. package/http-request-state/helpers.d.ts +0 -9
  301. package/http-request-state/http-request-state.d.ts +0 -12
  302. package/http-request-state/http-state-module.d.ts +0 -11
  303. package/http-request-state/rxjs/getRequestorBody.d.ts +0 -3
  304. package/http-request-state/rxjs/getRequestorState.d.ts +0 -3
  305. package/http-request-state/rxjs/tapError.d.ts +0 -3
  306. package/http-request-state/rxjs/tapSuccess.d.ts +0 -3
  307. package/http-request-state/types.d.ts +0 -36
  308. package/index.d.ts +0 -5
  309. package/ngrx/actionable-selector.d.ts +0 -17
  310. package/ngrx/index.d.ts +0 -1
  311. package/rxjs/defaultShareReplay.d.ts +0 -2
  312. package/rxjs/mapError.d.ts +0 -2
  313. package/rxjs/rxjs-operators.d.ts +0 -13
  314. package/rxjs/subjectifier.d.ts +0 -9
  315. package/table-builder/classes/DefaultSettings.d.ts +0 -9
  316. package/table-builder/classes/MatTableObservableDataSource.d.ts +0 -9
  317. package/table-builder/classes/TableBuilderConfig.d.ts +0 -21
  318. package/table-builder/classes/TableBuilderDataSource.d.ts +0 -13
  319. package/table-builder/classes/TableState.d.ts +0 -55
  320. package/table-builder/classes/filter-info.d.ts +0 -127
  321. package/table-builder/classes/table-builder-general-settings.d.ts +0 -43
  322. package/table-builder/classes/table-builder.d.ts +0 -14
  323. package/table-builder/classes/table-store.d.ts +0 -124
  324. package/table-builder/components/array-column.component.d.ts +0 -14
  325. package/table-builder/components/column-builder/column-builder.component.d.ts +0 -54
  326. package/table-builder/components/date-filter/date-filter.component.d.ts +0 -10
  327. package/table-builder/components/date-time-filter/date-time-filter.component.d.ts +0 -10
  328. package/table-builder/components/filter/filter.component.d.ts +0 -112
  329. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +0 -27
  330. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +0 -16
  331. package/table-builder/components/generic-table/generic-table.component.d.ts +0 -69
  332. package/table-builder/components/generic-table/paginator.component.d.ts +0 -27
  333. package/table-builder/components/group-by-list/group-by-list.component.d.ts +0 -7
  334. package/table-builder/components/header-menu/header-menu.component.d.ts +0 -25
  335. package/table-builder/components/in-filter/in-filter.component.d.ts +0 -21
  336. package/table-builder/components/initialization-component/initialization-component.d.ts +0 -12
  337. package/table-builder/components/link-column.component.d.ts +0 -17
  338. package/table-builder/components/number-filter/number-filter.component.d.ts +0 -12
  339. package/table-builder/components/scroll-strategy.d.ts +0 -23
  340. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +0 -24
  341. package/table-builder/components/sort-menu/sort-menu.component.d.ts +0 -25
  342. package/table-builder/components/table-container/table-container.d.ts +0 -75
  343. package/table-builder/components/table-container/table-container.helpers/data-state.helpers.d.ts +0 -5
  344. package/table-builder/components/table-container/table-container.helpers/filter-state.helpers.d.ts +0 -15
  345. package/table-builder/components/table-container/table-container.helpers/groupBy.helpers.d.ts +0 -15
  346. package/table-builder/components/table-container/table-container.helpers/sort-state.helpers.d.ts +0 -9
  347. package/table-builder/components/table-container/tableProps.d.ts +0 -11
  348. package/table-builder/components/table-container/virtual-scroll-container.d.ts +0 -17
  349. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +0 -16
  350. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +0 -14
  351. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +0 -14
  352. package/table-builder/components/table-context.d.ts +0 -10
  353. package/table-builder/directives/custom-cell-directive.d.ts +0 -19
  354. package/table-builder/directives/multi-sort.directive.d.ts +0 -11
  355. package/table-builder/directives/resize-column.directive.d.ts +0 -43
  356. package/table-builder/directives/table-wrapper.directive.d.ts +0 -8
  357. package/table-builder/directives/tb-filter.directive.d.ts +0 -120
  358. package/table-builder/enums/filterTypes.d.ts +0 -77
  359. package/table-builder/functions/boolean-filter-function.d.ts +0 -3
  360. package/table-builder/functions/date-filter-function.d.ts +0 -4
  361. package/table-builder/functions/download-data.d.ts +0 -1
  362. package/table-builder/functions/null-filter-function.d.ts +0 -2
  363. package/table-builder/functions/number-filter-function.d.ts +0 -4
  364. package/table-builder/functions/sort-data-function.d.ts +0 -6
  365. package/table-builder/functions/string-filter-function.d.ts +0 -7
  366. package/table-builder/interfaces/report-def.d.ts +0 -147
  367. package/table-builder/ngrx/tableBuilderStateStore.d.ts +0 -62
  368. package/table-builder/pipes/column-total.pipe.d.ts +0 -8
  369. package/table-builder/pipes/format-filter-type.pipe.d.ts +0 -8
  370. package/table-builder/pipes/format-filter-value.pipe.d.ts +0 -14
  371. package/table-builder/pipes/key-display.d.ts +0 -11
  372. package/table-builder/services/export-to-csv.service.d.ts +0 -22
  373. package/table-builder/services/link-creator.service.d.ts +0 -12
  374. package/table-builder/services/table-template-service.d.ts +0 -14
  375. package/table-builder/services/transform-creator.d.ts +0 -19
  376. package/table-builder/table-builder.module.d.ts +0 -21
  377. package/utilities/array-helpers.d.ts +0 -1
  378. package/utilities/directives/auto-focus.directive.d.ts +0 -10
  379. package/utilities/directives/clickEmitterDirective.d.ts +0 -7
  380. package/utilities/directives/clickSubject.d.ts +0 -9
  381. package/utilities/directives/conditional-classes.directive.d.ts +0 -14
  382. package/utilities/directives/dialog-service.d.ts +0 -10
  383. package/utilities/directives/dialog.d.ts +0 -46
  384. package/utilities/directives/mat-toggle-group-directive.d.ts +0 -21
  385. package/utilities/directives/prevent-enter.directive.d.ts +0 -6
  386. package/utilities/directives/stop-propagation.directive.d.ts +0 -7
  387. package/utilities/directives/styler.d.ts +0 -16
  388. package/utilities/directives/trim-whitespace.directive.d.ts +0 -9
  389. package/utilities/module.d.ts +0 -19
  390. package/utilities/pipes/function.pipe.d.ts +0 -7
  391. package/utilities/pipes/phone.pipe.d.ts +0 -7
  392. package/utilities/pipes/space-case.pipes.d.ts +0 -17
  393. /package/{http-request-state/directives/index.d.ts → src/http-request-state/directives/index.ts} +0 -0
  394. /package/{http-request-state/rxjs/index.d.ts → src/http-request-state/rxjs/index.ts} +0 -0
  395. /package/{table-builder/classes/display-col.d.ts → src/table-builder/classes/display-col.ts} +0 -0
@@ -1,337 +0,0 @@
1
- import { Component, Input, EventEmitter, Output, ContentChildren, ChangeDetectionStrategy, ViewChild, inject, forwardRef, } from '@angular/core';
2
- import { BehaviorSubject, from, ReplaySubject, combineLatest, of } from 'rxjs';
3
- import { FieldType } from '../../interfaces/report-def';
4
- import { first, last, map, tap, withLatestFrom, mergeAll, scan, switchAll, startWith, timestamp } from 'rxjs/operators';
5
- import { MatRowDef } from '@angular/material/table';
6
- import { CustomCellDirective, TableCustomFilterDirective, TableFilterDirective } from '../../directives';
7
- import { stateIs, TableStore } from '../../classes/table-store';
8
- import { mapArray, notNull } from '../../../rxjs/rxjs-operators';
9
- import { ExportToCsvService } from '../../services/export-to-csv.service';
10
- import { ArrayDefaults } from '../../classes/DefaultSettings';
11
- import { TableBuilderConfigToken } from '../../classes/TableBuilderConfig';
12
- import { InitializationState } from '../../classes/TableState';
13
- import { filterData, sortData, tbNoShowSymbol } from '../../functions/sort-data-function';
14
- import { WrapperFilterStore } from '../table-container-filter/table-wrapper-filter-store';
15
- import { cloneDeep } from 'lodash';
16
- import { defaultShareReplay } from '../../../rxjs';
17
- import { createFilterFunc, isCustomFilter, isFilterInfo } from '../../classes/filter-info';
18
- import { TableWrapperDirective } from '../../directives/table-wrapper.directive';
19
- import { createLinkCreator } from '../../services/link-creator.service';
20
- import { TableBuilderStateStore } from '../../ngrx/tableBuilderStateStore';
21
- import { containerImports } from './table-container-imports';
22
- import { initialFilterState, predicateAndFilterInfos, updateFilterState } from './table-container.helpers/filter-state.helpers';
23
- import { initialSortState, updateSortState } from './table-container.helpers/sort-state.helpers';
24
- import { initialGroupByState, updateGroupByState } from './table-container.helpers/groupBy.helpers';
25
- import { initialDataState } from './table-container.helpers/data-state.helpers';
26
- import { defaultProps } from './tableProps';
27
- import { TableVirtualScrollStrategy } from '../scroll-strategy';
28
- import { PaginatorComponent } from '../generic-table/paginator.component';
29
- import { TableBuilderDataSource } from '../../classes/TableBuilderDataSource';
30
- import * as i0 from "@angular/core";
31
- import * as i1 from "@angular/common";
32
- import * as i2 from "../generic-table/paginator.component";
33
- import * as i3 from "@ngrx/component";
34
- import * as i4 from "../../directives/multi-sort.directive";
35
- import * as i5 from "../group-by-list/group-by-list.component";
36
- import * as i6 from "../table-container-filter/filter-list/filter-list.component";
37
- import * as i7 from "../table-container-filter/gen-filter-displayer/gen-filter-displayer.component";
38
- import * as i8 from "../gen-col-displayer/gen-col-displayer.component";
39
- import * as i9 from "../sort-menu/sort-menu.component";
40
- import * as i10 from "../generic-table/generic-table.component";
41
- import * as i11 from "../../../utilities/directives/stop-propagation.directive";
42
- import * as i12 from "../../../utilities/directives/clickEmitterDirective";
43
- import * as i13 from "../../../utilities/directives/dialog";
44
- import * as i14 from "@angular/material/button";
45
- import * as i15 from "@angular/material/menu";
46
- import * as i16 from "@angular/material/icon";
47
- import * as i17 from "@angular/material/tooltip";
48
- import * as i18 from "@angular/material/input";
49
- import * as i19 from "@angular/material/form-field";
50
- import * as i20 from "./virtual-scroll-container";
51
- export class TableContainerComponent {
52
- constructor() {
53
- this.props = defaultProps;
54
- this.context = {
55
- tableProps: this.props,
56
- scrollStrategy: new TableVirtualScrollStrategy(48, 56),
57
- };
58
- this.selection$ = new EventEmitter();
59
- this.displayDataSubject = new ReplaySubject(1);
60
- this.displayData = this.displayDataSubject.pipe(switchAll(), defaultShareReplay());
61
- this.dataSubject = new ReplaySubject(1);
62
- this.data = this.dataSubject.pipe(switchAll(), defaultShareReplay());
63
- this.onStateReset = new EventEmitter();
64
- this.onSaveState = new EventEmitter();
65
- this.state = inject(TableStore);
66
- this.state$ = this.state.getSavableState().pipe(map(state => cloneDeep(state)), defaultShareReplay());
67
- this.collapseFooter$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseFooter));
68
- this.config = inject(TableBuilderConfigToken);
69
- this.exportToCsvService = inject((ExportToCsvService));
70
- this.wrapper = inject(TableWrapperDirective, { optional: true });
71
- this.store = inject(TableBuilderStateStore);
72
- this._ = this.state.on(this.state.getSavableState().pipe(last()), finalState => {
73
- if (this.tableId) {
74
- this.store.setLocalProfile({ key: this.tableId, value: finalState });
75
- }
76
- });
77
- this.customFilters$ = new BehaviorSubject([]);
78
- this.mapMetaDatas = (meta) => {
79
- if (meta.fieldType === FieldType.Array) {
80
- const additional = { ...meta.additional };
81
- additional.arrayStyle = additional?.arrayStyle ?? ArrayDefaults.arrayStyle;
82
- additional.limit = additional.limit ?? this.config.arrayInfo?.limit ?? ArrayDefaults.limit;
83
- return { ...meta, additional };
84
- }
85
- return meta;
86
- };
87
- this.collapseHeader$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseHeader));
88
- this.addFilterDirectives = (state) => {
89
- let allFilterDirectives = [...this.filterDirectives, ...this.customFilterDirectives];
90
- if (this.wrapper) {
91
- allFilterDirectives = [...allFilterDirectives, ...this.wrapper.registrations];
92
- }
93
- const customFilters = [];
94
- allFilterDirectives.filter(f => !f.used).forEach(f => {
95
- f.used = true;
96
- if (f.savable) {
97
- var filter = state.filters[f.filterId];
98
- if (isFilterInfo(filter)) {
99
- const filterDirective = f;
100
- filterDirective.fieldType = filter.fieldType;
101
- filterDirective.filterType = filter.filterType;
102
- filterDirective.setFilterValue(filter.filterValue);
103
- filterDirective.key = filter.key;
104
- filterDirective.update();
105
- }
106
- if (isCustomFilter(filter)) {
107
- f.active = filter.active ?? false;
108
- }
109
- this.state.addFilter(f.filter$);
110
- }
111
- else {
112
- customFilters.push(f);
113
- }
114
- });
115
- const customFilters$ = from(customFilters.map(cf => cf.filter$)).pipe(mergeAll(), scan((a, b) => {
116
- if (b.active) {
117
- a[b.filterId] = isCustomFilter(b) ? b.predicate : createFilterFunc(b);
118
- }
119
- else {
120
- delete a[b.filterId];
121
- }
122
- return a;
123
- }, {}), map(f => Object.values(f)));
124
- this.state.on(customFilters$, (f) => {
125
- this.customFilters$.next(f);
126
- });
127
- };
128
- }
129
- set indexColumn(val) {
130
- this.props.indexColumn = val;
131
- }
132
- set selectionColumn(val) {
133
- this.props.selectionColumn = val;
134
- }
135
- set isSticky(val) {
136
- this.props.isSticky = val;
137
- }
138
- set stickyFooter(val) {
139
- this.props.stickyFooter = val;
140
- }
141
- set pageSize(value) {
142
- this.state.setPageSize(value);
143
- }
144
- set groupHeaderTemplate(template) {
145
- this.props.groupHeaderTemplate = template;
146
- }
147
- set usePaginator(val) {
148
- this.props.usePaginator = val;
149
- }
150
- set itemHeight(val) {
151
- this.context.scrollStrategy.setItemHeight(val);
152
- }
153
- set headerOffset(val) {
154
- this.context.scrollStrategy.setHeaderOffset(val);
155
- }
156
- set useVirtualScroll(val) {
157
- this.props.useVirtualScroll = val;
158
- }
159
- firstPage() {
160
- this.paginatorComponent?.paginator?.firstPage();
161
- }
162
- lastPage() {
163
- this.paginatorComponent?.paginator?.lastPage();
164
- }
165
- resetState() {
166
- this.customFilterDirectives.forEach(cf => cf.reset());
167
- this.filterDirectives.forEach(cf => cf.reset());
168
- this.state.resetState();
169
- this.onStateReset.next(null);
170
- }
171
- initializeState() {
172
- this.state.setTableSettings(this.tableBuilder.settings);
173
- this.state.runOnceWhen(stateIs(InitializationState.MetaDataLoaded), () => {
174
- if (this.tableId) {
175
- const persistedState$ = this.store.selectLocalProfileState(this.tableId).pipe(tap(persistedState => {
176
- if (!persistedState) {
177
- this.state.setInitializationState(InitializationState.LoadedFromStore);
178
- }
179
- }), notNull());
180
- this.state.updateStateFromPersistedState(persistedState$);
181
- }
182
- else {
183
- this.state.setInitializationState(InitializationState.LoadedFromStore);
184
- }
185
- });
186
- }
187
- initializeData() {
188
- const predicateFilters$ = combineLatest([this.inputFilters?.pipe(startWith([])) ?? of([]), this.customFilters$])
189
- .pipe(map(([a, b]) => [...a, ...b]));
190
- const filterState$ = predicateAndFilterInfos(this.state.filters$, predicateFilters$).pipe(scan(updateFilterState, initialFilterState));
191
- const sortsState$ = this.state.sort$.pipe(scan(updateSortState, initialSortState));
192
- const sortedAndFilteredData$ = combineLatest([
193
- this.tableBuilder.getData$().pipe(timestamp()),
194
- sortsState$.pipe(timestamp()),
195
- filterState$.pipe(timestamp())
196
- ]).pipe(scan(({ mappedData: resultData }, [data, sort, f], index) => {
197
- if (index === 0 || (data.timestamp > sort.timestamp && data.timestamp > f.timestamp)) {
198
- return ({ mappedData: filterData(sortData(data.value, sort.value.sortsToRun), f.value.allFilters) });
199
- }
200
- if (sort.timestamp > f.timestamp) {
201
- return ({ mappedData: sortData(resultData, sort.value.sortsToRun) });
202
- }
203
- return ({ mappedData: filterData(resultData, f.value.onlyAddedFilters || f.value.allFilters, !f.value.onlyAddedFilters) });
204
- }, initialDataState)).pipe(map(({ mappedData: resultData }) => resultData.filter(item => !item[tbNoShowSymbol])), defaultShareReplay());
205
- const flatGrouped$ = combineLatest([sortedAndFilteredData$.pipe(timestamp()), this.state.groupByKeys$.pipe(timestamp()), this.state.expandedGroups$.pipe(timestamp())]).pipe(scan(updateGroupByState, initialGroupByState), map(({ displayData }) => displayData), defaultShareReplay());
206
- this.displayDataSubject.next(flatGrouped$);
207
- this.dataSubject.next(sortedAndFilteredData$);
208
- this.state.on(this.displayData, (data) => {
209
- this.state.updateState({ dataLen: data.length });
210
- });
211
- }
212
- ngOnInit() {
213
- const ds = new TableBuilderDataSource(this.displayData, this.state, this.context);
214
- this.context.dataSource = ds;
215
- this.initializeState();
216
- this.initializeData();
217
- if (this.tableId) {
218
- this.stateKeys$ = this.store.selectLocalProfileKeys(this.tableId);
219
- this.currentStateKey$ = this.store.selectLocalProfileCurrentKey(this.tableId);
220
- }
221
- }
222
- exportToCsv() {
223
- const sorted = this.data.pipe(withLatestFrom(this.state.sort$), map(([data, sorted]) => sortData(data, sorted)));
224
- this.exportToCsvService.exportToCsv(sorted);
225
- }
226
- saveState() {
227
- this.state.getSavableState().pipe(first()).subscribe(tableState => {
228
- this.onSaveState.next(null);
229
- this.store.saveLocalProfile({ key: this.tableId, value: tableState, persist: true });
230
- this.store.setLocalProfile({ key: this.tableId, value: tableState });
231
- });
232
- }
233
- setProfileState(val) {
234
- this.store.setLocalProfilesState({ key: this.tableId, current: val });
235
- }
236
- deleteProfileState(stateKey) {
237
- this.store.deleteLocalProfile({ key: this.tableId, stateKey });
238
- }
239
- ngAfterContentInit() {
240
- this.initializeColumns();
241
- this.state.runOnceWhen(stateIs(InitializationState.LoadedFromStore), state => {
242
- this.addFilterDirectives(state);
243
- this.state.updateState({ initializationState: InitializationState.Ready });
244
- });
245
- }
246
- initializeColumns() {
247
- const customCellMap = new Map(this.customCells.map(cc => [cc.customCell, cc]));
248
- this.state.setMetaData(this.tableBuilder.metaData$.pipe(map((mds) => {
249
- mds = mds.map(this.mapMetaDatas);
250
- return [
251
- ...mds,
252
- ...this.customCells.map(cc => cc.getMetaData(mds.find(item => item.key === cc.customCell)))
253
- ];
254
- })));
255
- this.state.setLinkMaps(this.tableBuilder.metaData$.pipe(map((mds) => {
256
- return mds.reduce((acc, md) => {
257
- if (md.fieldType === FieldType.Link) {
258
- acc[md.key] = createLinkCreator(md);
259
- }
260
- return acc;
261
- }, {});
262
- })));
263
- this.myColumns$ = this.state.metaDataArray$.pipe(mapArray(metaData => ({ metaData, customCell: customCellMap.get(metaData.key) })));
264
- }
265
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: TableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
266
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.3", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { indexColumn: "indexColumn", selectionColumn: "selectionColumn", isSticky: "isSticky", stickyFooter: "stickyFooter", pageSize: "pageSize", groupHeaderTemplate: "groupHeaderTemplate", usePaginator: "usePaginator", itemHeight: "itemHeight", headerOffset: "headerOffset", useVirtualScroll: "useVirtualScroll", tableId: "tableId", tableBuilder: "tableBuilder", trackBy: "trackBy", inputFilters: "inputFilters" }, outputs: { selection$: "selection$", data: "data", onStateReset: "onStateReset", onSaveState: "onSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "customFilterDirectives", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filterDirectives", predicate: TableFilterDirective, descendants: true }, { propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!(collapseHeader$ | async)) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div>\r\n @if(props.useVirtualScroll) {\r\n <tb-virtual-scroll-container>\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [displayData$]=\"displayData\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='myColumns$' [trackBy]=\"trackBy\"></tb-generic-table>\r\n </tb-virtual-scroll-container>\r\n }\r\n @else {\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [displayData$]=\"displayData\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='myColumns$' [trackBy]=\"trackBy\"></tb-generic-table>\r\n }\r\n @if(props.usePaginator) {\r\n <div class=\"paginator\">\r\n <tb-paginator #tbPaginator [data$]=\"data\" />\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\"\r\n (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n }\r\n </div>\r\n\r\n\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (currentStateKey$ | async; as currentKey) {\r\n @if (tableId) {\r\n <button mat-menu-item (click)=\"saveState()\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>Save to {{currentKey}}</span>\r\n </button>\r\n <button mat-menu-item [matMenuTriggerFor]=\"savedNames\">\r\n <span>Choose Profile</span>\r\n </button>\r\n }\r\n }\r\n\r\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\r\n <button mat-menu-item clickEmitter #add='clickEmitter'>\r\n <mat-icon>add</mat-icon>\r\n <span>New</span>\r\n </button>\r\n @for (key of stateKeys$ | async; track key) {\r\n <button mat-menu-item (click)='setProfileState(key)'>\r\n <span>{{key}}</span>\r\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\r\n </button>\r\n }\r\n </mat-menu>\r\n <ng-container *opDialog='add'>\r\n <mat-form-field>\r\n <input class=\"add-key\" matInput #addedKey />\r\n </mat-form-field>\r\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);' [disabled]=\"!addedKey.value\">\r\n Add\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}.paginator{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff;bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.PaginatorComponent, selector: "tb-paginator", inputs: ["data$"] }, { kind: "directive", type: i3.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i4.MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: i5.GroupByListComponent, selector: "group-by-list" }, { kind: "component", type: i6.FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: i7.GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "component", type: i8.GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: i9.SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: i10.GenericTableComponent, selector: "tb-generic-table", inputs: ["trackBy", "displayData$", "data$", "rows", "columnBuilders", "columnInfos"], outputs: ["selection$"] }, { kind: "directive", type: i11.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: i12.ClickEmitterDirective, selector: "[clickEmitter]", exportAs: ["clickEmitter"] }, { kind: "directive", type: i13.DialogDirective, selector: "[opDialog]", inputs: ["opDialogAddDialogClass", "opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { kind: "ngmodule", type: i14.MatButtonModule }, { kind: "component", type: i14.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i14.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: i15.MatMenuModule }, { kind: "component", type: i15.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i15.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i15.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: i16.MatIconModule }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i17.MatTooltipModule }, { kind: "directive", type: i17.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: i18.MatInputModule }, { kind: "directive", type: i18.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i19.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i20.VirtualScrollContainer, selector: "tb-virtual-scroll-container" }], viewProviders: [
267
- {
268
- provide: "TABLE_CONTEXT",
269
- useFactory: (c) => c.context,
270
- deps: [forwardRef(() => TableContainerComponent)],
271
- },
272
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
273
- }
274
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: TableContainerComponent, decorators: [{
275
- type: Component,
276
- args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], standalone: true, imports: containerImports, viewProviders: [
277
- {
278
- provide: "TABLE_CONTEXT",
279
- useFactory: (c) => c.context,
280
- deps: [forwardRef(() => TableContainerComponent)],
281
- },
282
- ], template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!(collapseHeader$ | async)) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div>\r\n @if(props.useVirtualScroll) {\r\n <tb-virtual-scroll-container>\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [displayData$]=\"displayData\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='myColumns$' [trackBy]=\"trackBy\"></tb-generic-table>\r\n </tb-virtual-scroll-container>\r\n }\r\n @else {\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [displayData$]=\"displayData\"\r\n (selection$)='selection$.emit($event)' [columnInfos]='myColumns$' [trackBy]=\"trackBy\"></tb-generic-table>\r\n }\r\n @if(props.usePaginator) {\r\n <div class=\"paginator\">\r\n <tb-paginator #tbPaginator [data$]=\"data\" />\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\"\r\n (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n </div>\r\n }\r\n </div>\r\n\r\n\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (currentStateKey$ | async; as currentKey) {\r\n @if (tableId) {\r\n <button mat-menu-item (click)=\"saveState()\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>Save to {{currentKey}}</span>\r\n </button>\r\n <button mat-menu-item [matMenuTriggerFor]=\"savedNames\">\r\n <span>Choose Profile</span>\r\n </button>\r\n }\r\n }\r\n\r\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\r\n <button mat-menu-item clickEmitter #add='clickEmitter'>\r\n <mat-icon>add</mat-icon>\r\n <span>New</span>\r\n </button>\r\n @for (key of stateKeys$ | async; track key) {\r\n <button mat-menu-item (click)='setProfileState(key)'>\r\n <span>{{key}}</span>\r\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\r\n </button>\r\n }\r\n </mat-menu>\r\n <ng-container *opDialog='add'>\r\n <mat-form-field>\r\n <input class=\"add-key\" matInput #addedKey />\r\n </mat-form-field>\r\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);' [disabled]=\"!addedKey.value\">\r\n Add\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}.paginator{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff;bottom:0;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
283
- }], propDecorators: { indexColumn: [{
284
- type: Input
285
- }], selectionColumn: [{
286
- type: Input
287
- }], isSticky: [{
288
- type: Input
289
- }], stickyFooter: [{
290
- type: Input
291
- }], pageSize: [{
292
- type: Input
293
- }], groupHeaderTemplate: [{
294
- type: Input
295
- }], usePaginator: [{
296
- type: Input
297
- }], itemHeight: [{
298
- type: Input
299
- }], headerOffset: [{
300
- type: Input
301
- }], useVirtualScroll: [{
302
- type: Input
303
- }], paginatorComponent: [{
304
- type: ViewChild,
305
- args: [PaginatorComponent]
306
- }], customFilterDirectives: [{
307
- type: ContentChildren,
308
- args: [TableCustomFilterDirective, { descendants: true }]
309
- }], filterDirectives: [{
310
- type: ContentChildren,
311
- args: [TableFilterDirective, { descendants: true }]
312
- }], customRows: [{
313
- type: ContentChildren,
314
- args: [MatRowDef]
315
- }], customCells: [{
316
- type: ContentChildren,
317
- args: [CustomCellDirective]
318
- }], tableId: [{
319
- type: Input
320
- }], tableBuilder: [{
321
- type: Input
322
- }], trackBy: [{
323
- type: Input
324
- }], inputFilters: [{
325
- type: Input
326
- }], selection$: [{
327
- type: Output
328
- }], data: [{
329
- type: Output
330
- }], onStateReset: [{
331
- type: Output
332
- }], onSaveState: [{
333
- type: Output
334
- }], state$: [{
335
- type: Output
336
- }] } });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsSUFBSSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNGLE9BQU8sRUFBbUIsU0FBUyxFQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDbkYsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5SSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekcsT0FBTyxFQUFHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQWMsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNwRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXhELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0IzRSxNQUFNLE9BQU8sdUJBQXVCO0lBZnZDO1FBZ0JFLFVBQUssR0FBZSxZQUFZLENBQUM7UUFFakMsWUFBTyxHQUFvQjtZQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDdEIsY0FBYyxFQUFFLElBQUksMEJBQTBCLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQztTQUN0RCxDQUFDO1FBOENRLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLHVCQUFrQixHQUFHLElBQUksYUFBYSxDQUFrQixDQUFDLENBQUMsQ0FBQztRQUMzRCxnQkFBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3hDLFNBQVMsRUFBRSxFQUNYLGtCQUFrQixFQUFFLENBQ3JCLENBQUM7UUFFRixnQkFBVyxHQUFHLElBQUksYUFBYSxDQUFrQixDQUFDLENBQUMsQ0FBQztRQUMxQyxTQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3BDLFNBQVMsRUFBRSxFQUNYLGtCQUFrQixFQUFFLENBQ3JCLENBQUM7UUFDUSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLFVBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakIsV0FBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUNsRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDOUIsa0JBQWtCLEVBQUUsQ0FDckIsQ0FBQztRQUVGLG9CQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBTXBHLFdBQU0sR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUN6Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsQ0FBQSxrQkFBcUIsQ0FBQSxDQUFDLENBQUM7UUFDbkQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVELFVBQUssR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2QyxNQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN6RSxJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBQyxHQUFHLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQzthQUNsRTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBc0NILG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBMkh6RCxpQkFBWSxHQUFHLENBQUMsSUFBa0IsRUFBRSxFQUFFO1lBQ3BDLElBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFDO2dCQUNwQyxNQUFNLFVBQVUsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBb0IsQ0FBQztnQkFDM0QsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLEVBQUUsVUFBVSxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQzNFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQztnQkFDM0YsT0FBTyxFQUFDLEdBQUcsSUFBSSxFQUFDLFVBQVUsRUFBQyxDQUFBO2FBQzVCO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUE7UUFFRCxvQkFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUVwRyx3QkFBbUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUMxQyxJQUFJLG1CQUFtQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNyRixJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUMvRTtZQUVELE1BQU0sYUFBYSxHQUEyRCxFQUFFLENBQUM7WUFFakYsbUJBQW1CLENBQUMsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyxFQUFFO2dCQUNyRCxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDZCxJQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUU7b0JBQ1osSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZDLElBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN2QixNQUFNLGVBQWUsR0FBeUIsQ0FBeUIsQ0FBQzt3QkFDeEUsZUFBZSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO3dCQUM3QyxlQUFlLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7d0JBQy9DLGVBQWUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUNuRCxlQUFlLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7d0JBQ2pDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDMUI7b0JBQ0QsSUFBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQ3pCLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7cUJBQ25DO29CQUNELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFFLENBQUMsQ0FBQyxPQUFlLENBQUMsQ0FBQztpQkFDMUM7cUJBQU07b0JBQ0wsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sY0FBYyxHQUFJLElBQUksQ0FBRSxhQUFhLENBQUMsR0FBRyxDQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBRyxDQUFDLENBQUMsSUFBSSxDQUN4RSxRQUFRLEVBQUUsRUFDVixJQUFJLENBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUU7Z0JBQ1QsSUFBRyxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkU7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFFO2lCQUN2QjtnQkFDTCxPQUFPLENBQUMsQ0FBQztZQUNULENBQUMsRUFBRSxFQUFnQyxDQUFDLEVBQ3BDLEdBQUcsQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDNUIsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQTtLQUNGO0lBeFNDLElBQWEsV0FBVyxDQUFDLEdBQVk7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFhLGVBQWUsQ0FBQyxHQUFZO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBYSxRQUFRLENBQUMsR0FBWTtRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQWEsWUFBWSxDQUFDLEdBQVk7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFhLFFBQVEsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFhLG1CQUFtQixDQUFFLFFBQTBCO1FBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFhLFlBQVksQ0FBQyxHQUFZO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBYSxVQUFVLENBQUMsR0FBVztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELElBQWEsWUFBWSxDQUFDLEdBQVc7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxJQUFhLGdCQUFnQixDQUFDLEdBQVk7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7SUFDcEMsQ0FBQztJQW1ERCxTQUFTO1FBQ1IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsUUFBUTtRQUNQLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQ3BCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsRUFDM0MsR0FBRyxFQUFFO1lBQ0gsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNmLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDM0UsR0FBRyxDQUFFLGNBQWMsQ0FBQyxFQUFFO29CQUNwQixJQUFHLENBQUMsY0FBYyxFQUFFO3dCQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO3FCQUN4RTtnQkFDSCxDQUFDLENBQUMsRUFDRixPQUFPLEVBQUUsQ0FDVixDQUFDO2dCQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDM0Q7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUN4RTtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFFWixNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFvQixDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQy9ILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FDdkYsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQzVDLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFFbkYsTUFBTSxzQkFBc0IsR0FBRyxhQUFhLENBQUM7WUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxFQUFFO1lBRWpFLElBQUcsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQztnQkFDbEYsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUMsQ0FBQyxDQUFDO2FBQ3ZHO1lBRUQsSUFBRyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUMsQ0FBQyxDQUFDO2FBQ3JFO1lBRUQsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDNUgsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3hCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUNyRixrQkFBa0IsRUFBRSxDQUNuQixDQUFBO1FBRUgsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUssSUFBSSxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLEVBQzdDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUNuQyxrQkFBa0IsRUFBRSxDQUNyQixDQUFDO1FBRUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTlDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxFQUFFLEdBQUcsSUFBSSxzQkFBc0IsQ0FDbkMsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMvRTtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQzNCLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUNoRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUMvQixLQUFLLEVBQUUsQ0FDUixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQUUsQ0FBQztZQUNwRixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxVQUFVLEVBQUUsQ0FBRSxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFXO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsRUFBQyxHQUFHLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsUUFBZ0I7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFDLEdBQUcsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FDcEIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUM1QyxLQUFLLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBVSxDQUFDLElBQUksQ0FDdEQsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDVixHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDakMsT0FBTztnQkFDTCxHQUFHLEdBQUc7Z0JBQ04sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBRSxDQUFDLENBQUU7YUFDaEcsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBVSxDQUFDLElBQUksQ0FDdEQsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDVixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQzVCLElBQUcsRUFBRSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFDO29CQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUUsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUE7aUJBQUM7Z0JBQ3hFLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ1AsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzlDLFFBQVEsQ0FBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBRSxFQUFDLENBQUMsQ0FBQyxDQUNsRixDQUFDO0lBQ0osQ0FBQzs4R0FyUGEsdUJBQXVCO2tHQUF2Qix1QkFBdUIsb21CQVYxQixDQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxpRUFvRDlDLDBCQUEwQixzRUFDMUIsb0JBQW9CLGdFQUNwQixTQUFTLDhDQUNULG1CQUFtQixpRkFMekIsa0JBQWtCLGdEQ3ZHL0IsZ25KQXFIQSxzK0lEN0RpQjtZQUNiO2dCQUNFLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTztnQkFDdEQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDakQ7U0FDRjs7MkZBQ2EsdUJBQXVCO2tCQWZ0QyxTQUFTOytCQUNFLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLGNBQ25ELElBQUksV0FDUCxnQkFBZ0IsaUJBQ1Y7d0JBQ2I7NEJBQ0UsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPOzRCQUN0RCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDLENBQUM7eUJBQ2pEO3FCQUNGOzhCQVNZLFdBQVc7c0JBQXZCLEtBQUs7Z0JBR08sZUFBZTtzQkFBM0IsS0FBSztnQkFHTyxRQUFRO3NCQUFwQixLQUFLO2dCQUdPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBR08sUUFBUTtzQkFBcEIsS0FBSztnQkFHTyxtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBR08sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUdPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBR08sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQUkwQixrQkFBa0I7c0JBQWpELFNBQVM7dUJBQUMsa0JBQWtCO2dCQUVxQyxzQkFBc0I7c0JBQXZGLGVBQWU7dUJBQUMsMEJBQTBCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUNKLGdCQUFnQjtzQkFBM0UsZUFBZTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0JBQzlCLFVBQVU7c0JBQXJDLGVBQWU7dUJBQUMsU0FBUztnQkFDWSxXQUFXO3NCQUFoRCxlQUFlO3VCQUFDLG1CQUFtQjtnQkFFM0IsT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFRRyxJQUFJO3NCQUFiLE1BQU07Z0JBSUcsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPdXRwdXQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBQcmVkaWNhdGUsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGluamVjdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBmb3J3YXJkUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGZyb20sIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFycmF5QWRkaXRpb25hbCwgRmllbGRUeXBlLCBNZXRhRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LWRlZic7XHJcbmltcG9ydCB7IGZpcnN0LCBsYXN0LCBtYXAsIHRhcCwgd2l0aExhdGVzdEZyb20sIG1lcmdlQWxsLCBzY2FuLCBzd2l0Y2hBbGwsIHN0YXJ0V2l0aCwgdGltZXN0YW1wLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGFibGVCdWlsZGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1idWlsZGVyJztcclxuaW1wb3J0IHsgTWF0Um93RGVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBDdXN0b21DZWxsRGlyZWN0aXZlLCBUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwgVGFibGVGaWx0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcclxuaW1wb3J0IHsgIHN0YXRlSXMsIFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuaW1wb3J0IHsgbWFwQXJyYXksIG5vdE51bGwgfSBmcm9tICcuLi8uLi8uLi9yeGpzL3J4anMtb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRXhwb3J0VG9Dc3ZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LXRvLWNzdi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXJyYXlEZWZhdWx0cyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRGVmYXVsdFNldHRpbmdzJztcclxuaW1wb3J0IHsgVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4gfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlQnVpbGRlckNvbmZpZyc7XHJcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU3RhdGUsIFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlU3RhdGUnO1xyXG5pbXBvcnQgeyBmaWx0ZXJEYXRhLCBzb3J0RGF0YSwgdGJOb1Nob3dTeW1ib2wgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvc29ydC1kYXRhLWZ1bmN0aW9uJztcclxuaW1wb3J0IHsgV3JhcHBlckZpbHRlclN0b3JlIH0gZnJvbSAnLi4vdGFibGUtY29udGFpbmVyLWZpbHRlci90YWJsZS13cmFwcGVyLWZpbHRlci1zdG9yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0NvbHVtbkluZm8nO1xyXG5pbXBvcnQgeyBkZWZhdWx0U2hhcmVSZXBsYXkgfSBmcm9tICcuLi8uLi8uLi9yeGpzJztcclxuaW1wb3J0IHsgY3JlYXRlRmlsdGVyRnVuYywgaXNDdXN0b21GaWx0ZXIsIGlzRmlsdGVySW5mbyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZmlsdGVyLWluZm8nO1xyXG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kaWN0aW9uYXJ5JztcclxuaW1wb3J0IHsgVGFibGVXcmFwcGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90YWJsZS13cmFwcGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IGNyZWF0ZUxpbmtDcmVhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGluay1jcmVhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXJTdGF0ZVN0b3JlIH0gZnJvbSAnLi4vLi4vbmdyeC90YWJsZUJ1aWxkZXJTdGF0ZVN0b3JlJztcclxuaW1wb3J0IHsgY29udGFpbmVySW1wb3J0cyB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLWltcG9ydHMnO1xyXG5pbXBvcnQgeyBpbml0aWFsRmlsdGVyU3RhdGUsIHByZWRpY2F0ZUFuZEZpbHRlckluZm9zLCB1cGRhdGVGaWx0ZXJTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZmlsdGVyLXN0YXRlLmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBpbml0aWFsU29ydFN0YXRlLCB1cGRhdGVTb3J0U3RhdGUgfSBmcm9tICcuL3RhYmxlLWNvbnRhaW5lci5oZWxwZXJzL3NvcnQtc3RhdGUuaGVscGVycyc7XHJcbmltcG9ydCB7IGluaXRpYWxHcm91cEJ5U3RhdGUsIHVwZGF0ZUdyb3VwQnlTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZ3JvdXBCeS5oZWxwZXJzJztcclxuaW1wb3J0IHsgaW5pdGlhbERhdGFTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZGF0YS1zdGF0ZS5oZWxwZXJzJztcclxuaW1wb3J0IHsgdGFibGVQcm9wcywgZGVmYXVsdFByb3BzIH0gZnJvbSAnLi90YWJsZVByb3BzJztcclxuaW1wb3J0IHsgVGFibGVDb250ZXh0IH0gZnJvbSAnLi4vdGFibGUtY29udGV4dCc7XHJcbmltcG9ydCB7IFRhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnLi4vc2Nyb2xsLXN0cmF0ZWd5JztcclxuaW1wb3J0IHsgUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VuZXJpYy10YWJsZS9wYWdpbmF0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVCdWlsZGVyRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVCdWlsZGVyRGF0YVNvdXJjZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0Yi10YWJsZS1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb250YWluZXIuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtY29udGFpbmVyLmNzcycsJy4uLy4uL3N0eWxlcy9jb2xsYXBzZXIuc3R5bGVzLnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtUYWJsZVN0b3JlLCBFeHBvcnRUb0NzdlNlcnZpY2UsIFdyYXBwZXJGaWx0ZXJTdG9yZV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBjb250YWluZXJJbXBvcnRzLFxyXG4gIHZpZXdQcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogXCJUQUJMRV9DT05URVhUXCIsXHJcbiAgICAgIHVzZUZhY3Rvcnk6IChjOiBUYWJsZUNvbnRhaW5lckNvbXBvbmVudCkgPT4gYy5jb250ZXh0LFxyXG4gICAgIGRlcHM6IFtmb3J3YXJkUmVmKCgpID0+IFRhYmxlQ29udGFpbmVyQ29tcG9uZW50KV0sXHJcbiAgICB9LFxyXG4gIF1cclxufSkgZXhwb3J0IGNsYXNzIFRhYmxlQ29udGFpbmVyQ29tcG9uZW50PFQgPSBhbnk+IHtcclxuICBwcm9wczogdGFibGVQcm9wcyA9IGRlZmF1bHRQcm9wcztcclxuXHJcbiAgY29udGV4dDogVGFibGVDb250ZXh0PFQ+ID0ge1xyXG4gICAgdGFibGVQcm9wczogdGhpcy5wcm9wcyxcclxuICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3koNDgsNTYpLFxyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIHNldCBpbmRleENvbHVtbih2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvcHMuaW5kZXhDb2x1bW4gPSB2YWw7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBzZWxlY3Rpb25Db2x1bW4odmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnByb3BzLnNlbGVjdGlvbkNvbHVtbiA9IHZhbDtcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IGlzU3RpY2t5KHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wcm9wcy5pc1N0aWNreSA9IHZhbDtcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IHN0aWNreUZvb3Rlcih2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvcHMuc3RpY2t5Rm9vdGVyID0gdmFsO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdGF0ZS5zZXRQYWdlU2l6ZSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBncm91cEhlYWRlclRlbXBsYXRlKCB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgdGhpcy5wcm9wcy5ncm91cEhlYWRlclRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCB1c2VQYWdpbmF0b3IodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnByb3BzLnVzZVBhZ2luYXRvciA9IHZhbDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBpdGVtSGVpZ2h0KHZhbDogbnVtYmVyKSB7XHJcbiAgICAgdGhpcy5jb250ZXh0LnNjcm9sbFN0cmF0ZWd5LnNldEl0ZW1IZWlnaHQodmFsKTtcclxuICB9XHJcbiAgQElucHV0KCkgc2V0IGhlYWRlck9mZnNldCh2YWw6IG51bWJlcikge1xyXG4gICAgdGhpcy5jb250ZXh0LnNjcm9sbFN0cmF0ZWd5LnNldEhlYWRlck9mZnNldCh2YWwpO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgdXNlVmlydHVhbFNjcm9sbCh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucHJvcHMudXNlVmlydHVhbFNjcm9sbCA9IHZhbDtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoUGFnaW5hdG9yQ29tcG9uZW50KSAgcGFnaW5hdG9yQ29tcG9uZW50PzogUGFnaW5hdG9yQ29tcG9uZW50O1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBjdXN0b21GaWx0ZXJEaXJlY3RpdmVzITogUXVlcnlMaXN0PFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlPjtcclxuICBAQ29udGVudENoaWxkcmVuKFRhYmxlRmlsdGVyRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBmaWx0ZXJEaXJlY3RpdmVzITogUXVlcnlMaXN0PFRhYmxlRmlsdGVyRGlyZWN0aXZlPjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdFJvd0RlZikgY3VzdG9tUm93cyE6IFF1ZXJ5TGlzdDxNYXRSb3dEZWY8YW55Pj47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihDdXN0b21DZWxsRGlyZWN0aXZlKSBjdXN0b21DZWxscyE6IFF1ZXJ5TGlzdDxDdXN0b21DZWxsRGlyZWN0aXZlPjtcclxuXHJcbiAgQElucHV0KCkgdGFibGVJZCE6IHN0cmluZztcclxuICBASW5wdXQoKSB0YWJsZUJ1aWxkZXIhOiBUYWJsZUJ1aWxkZXI7XHJcbiAgQElucHV0KCkgdHJhY2tCeSE6IHN0cmluZztcclxuICBASW5wdXQoKSBpbnB1dEZpbHRlcnM/OiBPYnNlcnZhYmxlPEFycmF5PFByZWRpY2F0ZTxUPj4+O1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uJCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBkaXNwbGF5RGF0YVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPFRbXT4+KDEpO1xyXG4gIGRpc3BsYXlEYXRhID0gdGhpcy5kaXNwbGF5RGF0YVN1YmplY3QucGlwZShcclxuICAgIHN3aXRjaEFsbCgpLFxyXG4gICAgZGVmYXVsdFNoYXJlUmVwbGF5KCksXHJcbiAgKTtcclxuXHJcbiAgZGF0YVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPFRbXT4+KDEpO1xyXG4gIEBPdXRwdXQoKSBkYXRhID0gdGhpcy5kYXRhU3ViamVjdC5waXBlKFxyXG4gICAgc3dpdGNoQWxsKCksXHJcbiAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcclxuICApO1xyXG4gIEBPdXRwdXQoKSBvblN0YXRlUmVzZXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2F2ZVN0YXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHN0YXRlID0gaW5qZWN0KFRhYmxlU3RvcmUpO1xyXG4gIEBPdXRwdXQoKSBzdGF0ZSQgPSB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUoXHJcbiAgICBtYXAoc3RhdGUgPT4gY2xvbmVEZWVwKHN0YXRlKSksXHJcbiAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcclxuICApO1xyXG5cclxuICBjb2xsYXBzZUZvb3RlciQgPSB0aGlzLnN0YXRlLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5wZXJzaXN0ZWRUYWJsZVNldHRpbmdzLmNvbGxhcHNlRm9vdGVyKSk7XHJcblxyXG4gIG15Q29sdW1ucyQhOiBPYnNlcnZhYmxlPENvbHVtbkluZm9bXT47XHJcbiAgc3RhdGVLZXlzJD86IE9ic2VydmFibGU8c3RyaW5nW10gfCBudWxsPjtcclxuICBjdXJyZW50U3RhdGVLZXkkPzogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG5cclxuICBjb25maWcgPSBpbmplY3QoVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4pO1xyXG4gIGV4cG9ydFRvQ3N2U2VydmljZSA9IGluamVjdChFeHBvcnRUb0NzdlNlcnZpY2U8VD4pO1xyXG4gIHdyYXBwZXIgPSBpbmplY3QoVGFibGVXcmFwcGVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG4gIHN0b3JlID0gaW5qZWN0KFRhYmxlQnVpbGRlclN0YXRlU3RvcmUpO1xyXG4gIF8gPSB0aGlzLnN0YXRlLm9uKCB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUobGFzdCgpKSwgZmluYWxTdGF0ZSA9PiB7XHJcbiAgICBpZih0aGlzLnRhYmxlSWQpIHtcclxuICAgICAgdGhpcy5zdG9yZS5zZXRMb2NhbFByb2ZpbGUoe2tleTp0aGlzLnRhYmxlSWQsdmFsdWU6IGZpbmFsU3RhdGV9KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGZpcnN0UGFnZSgpOiB2b2lkIHtcclxuICAgdGhpcy5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XHJcbiAgfVxyXG5cclxuICBsYXN0UGFnZSgpOiB2b2lkIHtcclxuICAgdGhpcy5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8ubGFzdFBhZ2UoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0U3RhdGUoKSB7XHJcbiAgICB0aGlzLmN1c3RvbUZpbHRlckRpcmVjdGl2ZXMuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSk7XHJcbiAgICB0aGlzLmZpbHRlckRpcmVjdGl2ZXMuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSApO1xyXG4gICAgdGhpcy5zdGF0ZS5yZXNldFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uU3RhdGVSZXNldC5uZXh0KG51bGwpXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplU3RhdGUoKSB7XHJcbiAgICB0aGlzLnN0YXRlLnNldFRhYmxlU2V0dGluZ3ModGhpcy50YWJsZUJ1aWxkZXIuc2V0dGluZ3MpO1xyXG4gICAgdGhpcy5zdGF0ZS5ydW5PbmNlV2hlbihcclxuICAgICAgc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLk1ldGFEYXRhTG9hZGVkKSxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXMudGFibGVJZCkge1xyXG4gICAgICAgICAgY29uc3QgcGVyc2lzdGVkU3RhdGUkID0gdGhpcy5zdG9yZS5zZWxlY3RMb2NhbFByb2ZpbGVTdGF0ZSh0aGlzLnRhYmxlSWQpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCggcGVyc2lzdGVkU3RhdGUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKCFwZXJzaXN0ZWRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zZXRJbml0aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBub3ROdWxsKCksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZS51cGRhdGVTdGF0ZUZyb21QZXJzaXN0ZWRTdGF0ZShwZXJzaXN0ZWRTdGF0ZSQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXRlLnNldEluaXRpYWxpemF0aW9uU3RhdGUoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBjdXN0b21GaWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJlZGljYXRlPFQ+W10+KFtdKTtcclxuICBpbml0aWFsaXplRGF0YSgpIHtcclxuXHJcbiAgICBjb25zdCBwcmVkaWNhdGVGaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5wdXRGaWx0ZXJzPy5waXBlKHN0YXJ0V2l0aChbXSkpID8/IG9mKFtdIGFzIFByZWRpY2F0ZTxUPltdKSwgdGhpcy5jdXN0b21GaWx0ZXJzJF0pXHJcbiAgICAgIC5waXBlKG1hcCgoW2EsIGJdKSA9PiBbLi4uYSwgLi4uYl0pKTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJTdGF0ZSQgPSBwcmVkaWNhdGVBbmRGaWx0ZXJJbmZvcyh0aGlzLnN0YXRlLmZpbHRlcnMkLCBwcmVkaWNhdGVGaWx0ZXJzJCkucGlwZShcclxuICAgICAgc2Nhbih1cGRhdGVGaWx0ZXJTdGF0ZSwgaW5pdGlhbEZpbHRlclN0YXRlKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzb3J0c1N0YXRlJCA9IHRoaXMuc3RhdGUuc29ydCQucGlwZShzY2FuKHVwZGF0ZVNvcnRTdGF0ZSwgaW5pdGlhbFNvcnRTdGF0ZSkpO1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZEFuZEZpbHRlcmVkRGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy50YWJsZUJ1aWxkZXIuZ2V0RGF0YSQoKS5waXBlKHRpbWVzdGFtcCgpKSxcclxuICAgICAgc29ydHNTdGF0ZSQucGlwZSh0aW1lc3RhbXAoKSksXHJcbiAgICAgIGZpbHRlclN0YXRlJC5waXBlKHRpbWVzdGFtcCgpKVxyXG4gICAgXSkucGlwZShzY2FuKCh7IG1hcHBlZERhdGE6IHJlc3VsdERhdGEgfSwgW2RhdGEsIHNvcnQsIGZdLCBpbmRleCk9PiB7XHJcblxyXG4gICAgICBpZihpbmRleCA9PT0gMCB8fCAoZGF0YS50aW1lc3RhbXAgPiBzb3J0LnRpbWVzdGFtcCAmJiBkYXRhLnRpbWVzdGFtcCA+IGYudGltZXN0YW1wKSl7XHJcbiAgICAgICAgcmV0dXJuICh7IG1hcHBlZERhdGE6IGZpbHRlckRhdGEoc29ydERhdGEoZGF0YS52YWx1ZSAsIHNvcnQudmFsdWUuc29ydHNUb1J1biApLCBmLnZhbHVlLmFsbEZpbHRlcnMpfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKHNvcnQudGltZXN0YW1wID4gZi50aW1lc3RhbXApe1xyXG4gICAgICAgIHJldHVybiAoeyBtYXBwZWREYXRhOiBzb3J0RGF0YShyZXN1bHREYXRhLCBzb3J0LnZhbHVlLnNvcnRzVG9SdW4pfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAoeyBtYXBwZWREYXRhOiBmaWx0ZXJEYXRhKHJlc3VsdERhdGEsIGYudmFsdWUub25seUFkZGVkRmlsdGVycyB8fCBmLnZhbHVlLmFsbEZpbHRlcnMsICFmLnZhbHVlLm9ubHlBZGRlZEZpbHRlcnMpfSk7XHJcbiAgICB9LCBpbml0aWFsRGF0YVN0YXRlKSkucGlwZShcclxuICAgICAgbWFwKCh7IG1hcHBlZERhdGE6IHJlc3VsdERhdGEgfSkgPT4gcmVzdWx0RGF0YS5maWx0ZXIoaXRlbSA9PiAhaXRlbVt0Yk5vU2hvd1N5bWJvbF0pKSxcclxuICAgICAgZGVmYXVsdFNoYXJlUmVwbGF5KClcclxuICAgICAgKVxyXG5cclxuICAgIGNvbnN0IGZsYXRHcm91cGVkJCA9IGNvbWJpbmVMYXRlc3QoW3NvcnRlZEFuZEZpbHRlcmVkRGF0YSQucGlwZSh0aW1lc3RhbXAoKSksIHRoaXMuc3RhdGUuZ3JvdXBCeUtleXMkLnBpcGUodGltZXN0YW1wKCkpLCB0aGlzLnN0YXRlLmV4cGFuZGVkR3JvdXBzJC5waXBlKHRpbWVzdGFtcCgpKV0pLnBpcGUoXHJcbiAgICAgIHNjYW4odXBkYXRlR3JvdXBCeVN0YXRlLCBpbml0aWFsR3JvdXBCeVN0YXRlKSxcclxuICAgICAgbWFwKCh7ZGlzcGxheURhdGF9KSA9PiBkaXNwbGF5RGF0YSksXHJcbiAgICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheURhdGFTdWJqZWN0Lm5leHQoZmxhdEdyb3VwZWQkKTtcclxuICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dChzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlLm9uKHRoaXMuZGlzcGxheURhdGEsIChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGUoe2RhdGFMZW46IGRhdGEubGVuZ3RofSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBkcyA9IG5ldyBUYWJsZUJ1aWxkZXJEYXRhU291cmNlPFQ+KFxyXG4gICAgICB0aGlzLmRpc3BsYXlEYXRhLFxyXG4gICAgICB0aGlzLnN0YXRlLFxyXG4gICAgICB0aGlzLmNvbnRleHQsXHJcbiAgICApO1xyXG4gICAgdGhpcy5jb250ZXh0LmRhdGFTb3VyY2UgPSBkcztcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVN0YXRlKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVEYXRhKCk7XHJcblxyXG4gICAgaWYodGhpcy50YWJsZUlkKSB7XHJcbiAgICAgIHRoaXMuc3RhdGVLZXlzJCA9IHRoaXMuc3RvcmUuc2VsZWN0TG9jYWxQcm9maWxlS2V5cyh0aGlzLnRhYmxlSWQpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTdGF0ZUtleSQgPSB0aGlzLnN0b3JlLnNlbGVjdExvY2FsUHJvZmlsZUN1cnJlbnRLZXkodGhpcy50YWJsZUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydFRvQ3N2KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc29ydGVkID0gdGhpcy5kYXRhLnBpcGUoXHJcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RhdGUuc29ydCQpLFxyXG4gICAgICBtYXAoKFtkYXRhLCBzb3J0ZWRdKSA9PiBzb3J0RGF0YShkYXRhLCBzb3J0ZWQpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZXhwb3J0VG9Dc3ZTZXJ2aWNlLmV4cG9ydFRvQ3N2KHNvcnRlZCk7XHJcbiAgfVxyXG5cclxuICBzYXZlU3RhdGUoKSB7XHJcbiAgICB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUoXHJcbiAgICAgIGZpcnN0KClcclxuICAgICkuc3Vic2NyaWJlKHRhYmxlU3RhdGUgPT4ge1xyXG4gICAgICB0aGlzLm9uU2F2ZVN0YXRlLm5leHQobnVsbCk7XHJcbiAgICAgIHRoaXMuc3RvcmUuc2F2ZUxvY2FsUHJvZmlsZSh7IGtleTogdGhpcy50YWJsZUlkLCB2YWx1ZTp0YWJsZVN0YXRlLCBwZXJzaXN0OiB0cnVlfSApO1xyXG4gICAgICB0aGlzLnN0b3JlLnNldExvY2FsUHJvZmlsZSh7IGtleTogdGhpcy50YWJsZUlkLCB2YWx1ZTp0YWJsZVN0YXRlIH0gKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJvZmlsZVN0YXRlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0b3JlLnNldExvY2FsUHJvZmlsZXNTdGF0ZSh7a2V5OnRoaXMudGFibGVJZCwgY3VycmVudDogdmFsfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQcm9maWxlU3RhdGUoc3RhdGVLZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdG9yZS5kZWxldGVMb2NhbFByb2ZpbGUoe2tleTp0aGlzLnRhYmxlSWQsIHN0YXRlS2V5fSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLnN0YXRlLnJ1bk9uY2VXaGVuKFxyXG4gICAgICBzdGF0ZUlzKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKSxcclxuICAgICAgc3RhdGUgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsdGVyRGlyZWN0aXZlcyhzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS51cGRhdGVTdGF0ZSh7aW5pdGlhbGl6YXRpb25TdGF0ZTogSW5pdGlhbGl6YXRpb25TdGF0ZS5SZWFkeX0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVDb2x1bW5zKCkge1xyXG4gICAgY29uc3QgY3VzdG9tQ2VsbE1hcCA9IG5ldyBNYXAodGhpcy5jdXN0b21DZWxscy5tYXAoY2MgPT4gW2NjLmN1c3RvbUNlbGwsY2NdKSk7XHJcbiAgICB0aGlzLnN0YXRlLnNldE1ldGFEYXRhKHRoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCEucGlwZShcclxuICAgICAgbWFwKChtZHMpID0+IHtcclxuICAgICAgICBtZHMgPSBtZHMubWFwKHRoaXMubWFwTWV0YURhdGFzKTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgLi4ubWRzLFxyXG4gICAgICAgICAgLi4udGhpcy5jdXN0b21DZWxscy5tYXAoIGNjID0+IGNjLmdldE1ldGFEYXRhKG1kcy5maW5kKCBpdGVtID0+IGl0ZW0ua2V5ID09PSBjYy5jdXN0b21DZWxsICkpIClcclxuICAgICAgICBdXHJcbiAgICAgIH0pXHJcbiAgICApKTtcclxuICAgIHRoaXMuc3RhdGUuc2V0TGlua01hcHModGhpcy50YWJsZUJ1aWxkZXIubWV0YURhdGEkIS5waXBlKFxyXG4gICAgICBtYXAoKG1kcykgPT4ge1xyXG4gICAgICAgIHJldHVybiBtZHMucmVkdWNlKChhY2MsIG1kKSA9PiB7XHJcbiAgICAgICAgICBpZihtZC5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5MaW5rKXsgYWNjW21kLmtleV09IGNyZWF0ZUxpbmtDcmVhdG9yKG1kKX1cclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSx7fSlcclxuICAgICAgfSlcclxuICAgICkpXHJcblxyXG4gICAgdGhpcy5teUNvbHVtbnMkID0gdGhpcy5zdGF0ZS5tZXRhRGF0YUFycmF5JC5waXBlKFxyXG4gICAgICBtYXBBcnJheSggbWV0YURhdGEgPT4gKHttZXRhRGF0YSwgY3VzdG9tQ2VsbDogY3VzdG9tQ2VsbE1hcC5nZXQobWV0YURhdGEua2V5KSF9KSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBNZXRhRGF0YXMgPSAobWV0YSA6IE1ldGFEYXRhPFQ+KSA9PiB7XHJcbiAgICBpZihtZXRhLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkFycmF5KXtcclxuICAgICAgY29uc3QgYWRkaXRpb25hbCA9IHsuLi5tZXRhLmFkZGl0aW9uYWx9IGFzIEFycmF5QWRkaXRpb25hbDtcclxuICAgICAgYWRkaXRpb25hbC5hcnJheVN0eWxlID0gYWRkaXRpb25hbD8uYXJyYXlTdHlsZSA/PyBBcnJheURlZmF1bHRzLmFycmF5U3R5bGU7XHJcbiAgICAgIGFkZGl0aW9uYWwubGltaXQgPSBhZGRpdGlvbmFsLmxpbWl0ID8/IHRoaXMuY29uZmlnLmFycmF5SW5mbz8ubGltaXQgPz8gQXJyYXlEZWZhdWx0cy5saW1pdDtcclxuICAgICAgcmV0dXJuIHsuLi5tZXRhLGFkZGl0aW9uYWx9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWV0YTtcclxuICB9XHJcblxyXG4gIGNvbGxhcHNlSGVhZGVyJCA9IHRoaXMuc3RhdGUuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IHN0YXRlLnBlcnNpc3RlZFRhYmxlU2V0dGluZ3MuY29sbGFwc2VIZWFkZXIpKTtcclxuXHJcbiAgYWRkRmlsdGVyRGlyZWN0aXZlcyA9IChzdGF0ZTogVGFibGVTdGF0ZSkgPT4ge1xyXG4gICAgbGV0IGFsbEZpbHRlckRpcmVjdGl2ZXMgPSBbLi4udGhpcy5maWx0ZXJEaXJlY3RpdmVzLCAuLi50aGlzLmN1c3RvbUZpbHRlckRpcmVjdGl2ZXNdO1xyXG4gICAgaWYodGhpcy53cmFwcGVyKSB7XHJcbiAgICAgIGFsbEZpbHRlckRpcmVjdGl2ZXMgPSBbLi4uYWxsRmlsdGVyRGlyZWN0aXZlcywgLi4udGhpcy53cmFwcGVyLnJlZ2lzdHJhdGlvbnNdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1c3RvbUZpbHRlcnM6IChUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSB8IFRhYmxlRmlsdGVyRGlyZWN0aXZlIClbXSA9IFtdO1xyXG5cclxuICAgIGFsbEZpbHRlckRpcmVjdGl2ZXMuZmlsdGVyKCBmID0+ICFmLnVzZWQpLmZvckVhY2goIGYgPT4ge1xyXG4gICAgICBmLnVzZWQgPSB0cnVlO1xyXG4gICAgICBpZihmLnNhdmFibGUpIHtcclxuICAgICAgICB2YXIgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmLmZpbHRlcklkXTtcclxuICAgICAgICBpZihpc0ZpbHRlckluZm8oZmlsdGVyKSkge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyRGlyZWN0aXZlOiBUYWJsZUZpbHRlckRpcmVjdGl2ZSA9IGYgYXMgVGFibGVGaWx0ZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUuZmllbGRUeXBlID0gZmlsdGVyLmZpZWxkVHlwZTtcclxuICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5maWx0ZXJUeXBlID0gZmlsdGVyLmZpbHRlclR5cGU7XHJcbiAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUuc2V0RmlsdGVyVmFsdWUoZmlsdGVyLmZpbHRlclZhbHVlKTtcclxuICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5rZXkgPSBmaWx0ZXIua2V5O1xyXG4gICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpc0N1c3RvbUZpbHRlcihmaWx0ZXIpKSB7XHJcbiAgICAgICAgICBmLmFjdGl2ZSA9IGZpbHRlci5hY3RpdmUgPz8gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhdGUuYWRkRmlsdGVyKChmLmZpbHRlciQgYXMgYW55KSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3VzdG9tRmlsdGVycy5wdXNoKGYpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjdXN0b21GaWx0ZXJzJCA9ICBmcm9tKCBjdXN0b21GaWx0ZXJzLm1hcCggY2YgPT4gY2YuZmlsdGVyJCAgKSkucGlwZShcclxuICAgICAgbWVyZ2VBbGwoKSxcclxuICAgICAgc2NhbiggKGEsYik9PiB7XHJcbiAgICAgICAgICBpZihiLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICBhW2IuZmlsdGVySWRdID0gaXNDdXN0b21GaWx0ZXIoYikgPyBiLnByZWRpY2F0ZSA6IGNyZWF0ZUZpbHRlckZ1bmMoYik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtiLmZpbHRlcklkXSA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIHJldHVybiBhO1xyXG4gICAgICB9LCB7fSBhcyBEaWN0aW9uYXJ5PFByZWRpY2F0ZTxhbnk+PiksXHJcbiAgICAgIG1hcCggZiA9PiBPYmplY3QudmFsdWVzKGYpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3RhdGUub24oY3VzdG9tRmlsdGVycyQsIChmKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VzdG9tRmlsdGVycyQubmV4dChmKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJbYmVmb3JlXVwiIC8+XHJcblxyXG48bmctY29udGFpbmVyIG11bHRpU29ydCAqbmdyeExldD1cInN0YXRlLnRhYmxlU2V0dGluZ3MkIGFzIHRhYmxlU2V0dGluZ3NcIj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXdyYXBwZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICBAaWYgKCghKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSkgfHwgdGFibGVTZXR0aW5ncy5zaG93VGl0bGVXaGVuSGVhZGVyQ29sbGFwc2VkKSB7XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRiLWhlYWRlci10aXRsZVwiLz5cclxuICAgICAgfVxyXG4gICAgICBAaWYoKHN0YXRlLmdyb3VwQnlLZXlzJCB8IGFzeW5jKT8ubGVuZ3RoKXtcclxuICAgICAgICA8Z3JvdXAtYnktbGlzdCAvPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbHgtcm93LWVuZFwiPlxyXG4gICAgICA8bGliLWZpbHRlci1saXN0IC8+XHJcbiAgICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUhlYWRlcikge1xyXG4gICAgICAgIEBpZiAoIShjb2xsYXBzZUhlYWRlciQgfCBhc3luYykpIHtcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51XCIvPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9J3ByaW1hcnknIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWluTWVudVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtYWluTWVudT0nbWF0TWVudSc+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51RXh0cmFcIi8+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCIgY2xhc3M9XCJmbGF0LW1lbnUtYnV0dG9uIHBvaW50ZXJcIj5tb3JlX2hvcml6PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnU9J21hdE1lbnUnPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudVwiLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51RXh0cmFcIi8+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIH1cclxuICAgICAgICA8bWF0LWljb24gW21hdFRvb2x0aXBdPVwiKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdleHBhbmQnIDogJ2NvbGxhcHNlJ1wiIGNsYXNzPVwiY29sbGFwc2UtaWNvbiBoZWFkZXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInN0YXRlLnRvZ2dsZUNvbGxhcHNlSGVhZGVyKClcIj5cclxuICAgICAgICAgIHt7KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnfX1cclxuICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICB9XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdj5cclxuICAgIEBpZihwcm9wcy51c2VWaXJ0dWFsU2Nyb2xsKSB7XHJcbiAgICA8dGItdmlydHVhbC1zY3JvbGwtY29udGFpbmVyPlxyXG4gICAgICA8dGItZ2VuZXJpYy10YWJsZSBbcm93c109J2N1c3RvbVJvd3MnIFtkYXRhJF09XCJkYXRhXCIgW2Rpc3BsYXlEYXRhJF09XCJkaXNwbGF5RGF0YVwiXHJcbiAgICAgICAgKHNlbGVjdGlvbiQpPSdzZWxlY3Rpb24kLmVtaXQoJGV2ZW50KScgW2NvbHVtbkluZm9zXT0nbXlDb2x1bW5zJCcgW3RyYWNrQnldPVwidHJhY2tCeVwiPjwvdGItZ2VuZXJpYy10YWJsZT5cclxuICAgIDwvdGItdmlydHVhbC1zY3JvbGwtY29udGFpbmVyPlxyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgPHRiLWdlbmVyaWMtdGFibGUgW3Jvd3NdPSdjdXN0b21Sb3dzJyBbZGF0YSRdPVwiZGF0YVwiIFtkaXNwbGF5RGF0YSRdPVwiZGlzcGxheURhdGFcIlxyXG4gICAgICAoc2VsZWN0aW9uJCk9J3NlbGVjdGlvbiQuZW1pdCgkZXZlbnQpJyBbY29sdW1uSW5mb3NdPSdteUNvbHVtbnMkJyBbdHJhY2tCeV09XCJ0cmFja0J5XCI+PC90Yi1nZW5lcmljLXRhYmxlPlxyXG4gICAgfVxyXG4gICAgQGlmKHByb3BzLnVzZVBhZ2luYXRvcikge1xyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2luYXRvclwiPlxyXG4gICAgICA8dGItcGFnaW5hdG9yICN0YlBhZ2luYXRvciBbZGF0YSRdPVwiZGF0YVwiIC8+XHJcblxyXG4gICAgICA8bWF0LWljb24gW21hdFRvb2x0aXBdPVwiKGNvbGxhcHNlRm9vdGVyJCB8IGFzeW5jKSA/ICdleHBhbmQnIDogJ2NvbGxhcHNlJ1wiIGNsYXNzPVwiY29sbGFwc2UtaWNvbiBmb290ZXJcIlxyXG4gICAgICAgIChjbGljayk9XCJzdGF0ZS50b2dnbGVDb2xsYXBzZUZvb3RlcigpXCI+XHJcbiAgICAgICAge3soY29sbGFwc2VGb290ZXIkIHwgYXN5bmMpID8gJ2V4cGFuZF9tb3JlJyA6ICdleHBhbmRfbGVzcyd9fVxyXG4gICAgICA8L21hdC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51PlxyXG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlRmlsdGVyKSB7PHRiLWZpbHRlci1kaXNwbGF5ZXIvPn1cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUNvbHVtblNldHRpbmdzKSB7PHRiLWNvbC1kaXNwbGF5ZXIvPn1cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZVNvcnQpIHs8dGItc29ydC1tZW51Lz59XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51RXh0cmE+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInJlc2V0U3RhdGUoKVwiPlxyXG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+YXV0b3JlbmV3PC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4+UmVzZXQgdGFibGU8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUV4cG9ydCkge1xyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4cG9ydFRvQ3N2KClcIj5cclxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+RXhwb3J0IFRhYmxlPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIEBpZiAoY3VycmVudFN0YXRlS2V5JCB8IGFzeW5jOyBhcyBjdXJyZW50S2V5KSB7XHJcbiAgICAgIEBpZiAodGFibGVJZCkge1xyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2F2ZVN0YXRlKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5zYXZlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuPlNhdmUgdG8ge3tjdXJyZW50S2V5fX08L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJzYXZlZE5hbWVzXCI+XHJcbiAgICAgICAgICA8c3Bhbj5DaG9vc2UgUHJvZmlsZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIDxtYXQtbWVudSAjc2F2ZWROYW1lcz0nbWF0TWVudScgcGFuZWxDbGFzcz0nd2lkZS1tZW51Jz5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsaWNrRW1pdHRlciAgI2FkZD0nY2xpY2tFbWl0dGVyJz5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5OZXc8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICBAZm9yIChrZXkgb2Ygc3RhdGVLZXlzJCB8IGFzeW5jOyB0cmFjayBrZXkpIHtcclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT0nc2V0UHJvZmlsZVN0YXRlKGtleSknPlxyXG4gICAgICAgICAgPHNwYW4+e3trZXl9fTwvc3Bhbj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj0nd2FybicgKGNsaWNrKT0nZGVsZXRlUHJvZmlsZVN0YXRlKGtleSknIHN0b3AtcHJvcGFnYXRpb24+ZGVsZXRlX2ZvcmV2ZXI8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1tZW51PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqb3BEaWFsb2c9J2FkZCc+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJhZGQta2V5XCIgbWF0SW5wdXQgI2FkZGVkS2V5IC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPSdzZXRQcm9maWxlU3RhdGUoYWRkZWRLZXkudmFsdWUpOyBhZGQubmV4dChmYWxzZSk7JyBbZGlzYWJsZWRdPVwiIWFkZGVkS2V5LnZhbHVlXCI+XHJcbiAgICAgICAgQWRkXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
@@ -1,9 +0,0 @@
1
- export const defaultProps = {
2
- usePaginator: true,
3
- useVirtualScroll: false,
4
- indexColumn: false,
5
- selectionColumn: false,
6
- isSticky: false,
7
- stickyFooter: false,
8
- };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVQcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NvbXBvbmVudHMvdGFibGUtY29udGFpbmVyL3RhYmxlUHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFlO0lBQ3RDLFlBQVksRUFBRSxJQUFJO0lBQ2xCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsUUFBUSxFQUFFLEtBQUs7SUFDZixZQUFZLEVBQUUsS0FBSztDQUNwQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgdGFibGVQcm9wcyB7XHJcbiAgdXNlUGFnaW5hdG9yOiBib29sZWFuO1xyXG4gIHVzZVZpcnR1YWxTY3JvbGw6IGJvb2xlYW47XHJcbiAgaW5kZXhDb2x1bW46IGJvb2xlYW47XHJcbiAgc2VsZWN0aW9uQ29sdW1uOiBib29sZWFuO1xyXG4gIGlzU3RpY2t5OiBib29sZWFuO1xyXG4gIHN0aWNreUZvb3Rlcjpib29sZWFuO1xyXG4gIGdyb3VwSGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdFByb3BzOiB0YWJsZVByb3BzID0ge1xyXG4gIHVzZVBhZ2luYXRvcjogdHJ1ZSxcclxuICB1c2VWaXJ0dWFsU2Nyb2xsOiBmYWxzZSxcclxuICBpbmRleENvbHVtbjogZmFsc2UsXHJcbiAgc2VsZWN0aW9uQ29sdW1uOiBmYWxzZSxcclxuICBpc1N0aWNreTogZmFsc2UsXHJcbiAgc3RpY2t5Rm9vdGVyOiBmYWxzZSxcclxufVxyXG4iXX0=
@@ -1,101 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Inject, ViewChild, forwardRef, } from '@angular/core';
2
- import { CdkVirtualScrollViewport, ScrollingModule, VIRTUAL_SCROLL_STRATEGY, } from '@angular/cdk/scrolling';
3
- import { distinctUntilChanged, map } from 'rxjs';
4
- import { defaultShareReplay } from '../../../rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../classes/table-store";
7
- import * as i2 from "@angular/cdk/scrolling";
8
- export class VirtualScrollContainer {
9
- constructor(context, state) {
10
- this.context = context;
11
- this.state = state;
12
- this.resizeHandler = () => {
13
- if (this.viewport) {
14
- this.setSize(this.viewport.elementRef);
15
- }
16
- };
17
- }
18
- ngOnInit() {
19
- addEventListener('resize', this.resizeHandler);
20
- setTimeout(() => {
21
- this.setSize(this.viewport.elementRef);
22
- }, 0);
23
- if (this.context.tableProps.usePaginator) {
24
- this.state.on(this.state.select((s) => s.pageSize), (len) => this.context.scrollStrategy.setDataLength(len));
25
- }
26
- else {
27
- this.state.on(this.state.select((s) => s.dataLen), (len) => this.context.scrollStrategy.setDataLength(len));
28
- }
29
- this.state.on(this.viewport.renderedRangeStream, (range) => {
30
- this.state.updateState({
31
- virtualStart: range.start,
32
- virtualEnd: range.end,
33
- });
34
- });
35
- var offset$ = this.viewport.scrolledIndexChange.pipe(map(() => this.viewport.getOffsetToRenderedContentStart() ?? 0), distinctUntilChanged(), defaultShareReplay());
36
- this.state.on(offset$, (offset) => {
37
- this.state.updateState({ virtualScrollOffset: offset });
38
- });
39
- }
40
- ngOnDestroy() {
41
- removeEventListener('resize', this.resizeHandler);
42
- }
43
- setSize(el) {
44
- const vsViewport = el.nativeElement;
45
- const vsContentWrapper = vsViewport?.children[0];
46
- const hasHorizontalScrollBar = vsViewport?.scrollWidth > vsViewport?.clientWidth;
47
- const rect = vsContentWrapper.getBoundingClientRect();
48
- let wrapperHeight = 0;
49
- if (rect.top >= 0) {
50
- wrapperHeight = rect.bottom;
51
- }
52
- else {
53
- wrapperHeight = rect.bottom + rect.top;
54
- }
55
- if (wrapperHeight < window.innerHeight) {
56
- vsViewport.setAttribute('style', `height: ${vsContentWrapper.clientHeight + (hasHorizontalScrollBar ? 17 : 0)}px !important;`);
57
- }
58
- else {
59
- vsViewport.setAttribute('style', `height: ${window.innerHeight - el.nativeElement.offsetTop - (0 || 167)}px !important;`);
60
- }
61
- this.viewport?.checkViewportSize();
62
- const virtualScrollOffset = this.viewport.getOffsetToRenderedContentStart() ?? 0;
63
- this.state.updateState({ virtualScrollOffset });
64
- }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: VirtualScrollContainer, deps: [{ token: 'TABLE_CONTEXT' }, { token: i1.TableStore }], target: i0.ɵɵFactoryTarget.Component }); }
66
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: VirtualScrollContainer, isStandalone: true, selector: "tb-virtual-scroll-container", viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, static: true }], ngImport: i0, template: `<cdk-virtual-scroll-viewport>
67
- <ng-content></ng-content>
68
- </cdk-virtual-scroll-viewport> `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], viewProviders: [
69
- {
70
- provide: VIRTUAL_SCROLL_STRATEGY,
71
- useFactory: (c) => c.context.scrollStrategy,
72
- deps: [forwardRef(() => VirtualScrollContainer)],
73
- },
74
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
75
- }
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: VirtualScrollContainer, decorators: [{
77
- type: Component,
78
- args: [{
79
- selector: 'tb-virtual-scroll-container',
80
- template: `<cdk-virtual-scroll-viewport>
81
- <ng-content></ng-content>
82
- </cdk-virtual-scroll-viewport> `,
83
- changeDetection: ChangeDetectionStrategy.OnPush,
84
- standalone: true,
85
- imports: [ScrollingModule],
86
- viewProviders: [
87
- {
88
- provide: VIRTUAL_SCROLL_STRATEGY,
89
- useFactory: (c) => c.context.scrollStrategy,
90
- deps: [forwardRef(() => VirtualScrollContainer)],
91
- },
92
- ],
93
- }]
94
- }], ctorParameters: () => [{ type: undefined, decorators: [{
95
- type: Inject,
96
- args: ['TABLE_CONTEXT']
97
- }] }, { type: i1.TableStore }], propDecorators: { viewport: [{
98
- type: ViewChild,
99
- args: [CdkVirtualScrollViewport, { static: true }]
100
- }] } });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1zY3JvbGwtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdmlydHVhbC1zY3JvbGwtY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULE1BQU0sRUFHTixTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLHVCQUF1QixHQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBbUJuRCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ2tDLE9BQXFCLEVBQzdDLEtBQWlCO1FBRE8sWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUM3QyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBNEUzQixrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN4QztRQUNILENBQUMsQ0FBQztJQS9FQyxDQUFDO0lBS0osUUFBUTtRQUNOLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxDQUFDLEVBQUUsQ0FBQyxD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QUk4QixRQUFRO3NCQUE5RCxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGZvcndhcmRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRhYmxlQ29udGV4dCB9IGZyb20gJy4uL3RhYmxlLWNvbnRleHQnO1xyXG5pbXBvcnQge1xyXG4gIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcclxuICBTY3JvbGxpbmdNb2R1bGUsXHJcbiAgVklSVFVBTF9TQ1JPTExfU1RSQVRFR1ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVmYXVsdFNoYXJlUmVwbGF5IH0gZnJvbSAnLi4vLi4vLi4vcnhqcyc7XHJcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGItdmlydHVhbC1zY3JvbGwtY29udGFpbmVyJyxcclxuICB0ZW1wbGF0ZTogYDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+IGAsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbU2Nyb2xsaW5nTW9kdWxlXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IFZJUlRVQUxfU0NST0xMX1NUUkFURUdZLFxyXG4gICAgICB1c2VGYWN0b3J5OiAoYzogVmlydHVhbFNjcm9sbENvbnRhaW5lcikgPT4gYy5jb250ZXh0LnNjcm9sbFN0cmF0ZWd5LFxyXG4gICAgICBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBWaXJ0dWFsU2Nyb2xsQ29udGFpbmVyKV0sXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaXJ0dWFsU2Nyb2xsQ29udGFpbmVyPFQgPSBhbnk+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnVEFCTEVfQ09OVEVYVCcpIHB1YmxpYyBjb250ZXh0OiBUYWJsZUNvbnRleHQsXHJcbiAgICBwcml2YXRlIHN0YXRlOiBUYWJsZVN0b3JlXHJcbiAgKSB7fVxyXG5cclxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgeyBzdGF0aWM6IHRydWUgfSkgdmlld3BvcnQhOkNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcclxuXHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVIYW5kbGVyKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldFNpemUodGhpcy52aWV3cG9ydC5lbGVtZW50UmVmKTtcclxuICAgIH0sIDApO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbnRleHQudGFibGVQcm9wcy51c2VQYWdpbmF0b3IpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5vbihcclxuICAgICAgICB0aGlzLnN0YXRlLnNlbGVjdCgocykgPT4gcy5wYWdlU2l6ZSksXHJcbiAgICAgICAgKGxlbikgPT4gdGhpcy5jb250ZXh0LnNjcm9sbFN0cmF0ZWd5LnNldERhdGFMZW5ndGgobGVuKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdGF0ZS5vbihcclxuICAgICAgICB0aGlzLnN0YXRlLnNlbGVjdCgocykgPT4gcy5kYXRhTGVuKSxcclxuICAgICAgICAobGVuKSA9PiB0aGlzLmNvbnRleHQuc2Nyb2xsU3RyYXRlZ3kuc2V0RGF0YUxlbmd0aChsZW4pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlLm9uKHRoaXMudmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbSwgKHJhbmdlKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGUoe1xyXG4gICAgICAgIHZpcnR1YWxTdGFydDogcmFuZ2Uuc3RhcnQsXHJcbiAgICAgICAgdmlydHVhbEVuZDogcmFuZ2UuZW5kLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdmFyIG9mZnNldCQgPSB0aGlzLnZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShcclxuICAgICAgbWFwKCgpID0+IHRoaXMudmlld3BvcnQuZ2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpID8/IDApLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlLm9uKG9mZnNldCQsIChvZmZzZXQpID0+IHtcclxuICAgICAgdGhpcy5zdGF0ZS51cGRhdGVTdGF0ZSh7IHZpcnR1YWxTY3JvbGxPZmZzZXQ6IG9mZnNldCB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICByZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2l6ZShlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcclxuICAgIGNvbnN0IHZzVmlld3BvcnQ6IEVsZW1lbnQgPSBlbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgdnNDb250ZW50V3JhcHBlcjogRWxlbWVudCA9IHZzVmlld3BvcnQ/LmNoaWxkcmVuWzBdO1xyXG4gICAgY29uc3QgaGFzSG9yaXpvbnRhbFNjcm9sbEJhciA9XHJcbiAgICAgIHZzVmlld3BvcnQ/LnNjcm9sbFdpZHRoID4gdnNWaWV3cG9ydD8uY2xpZW50V2lkdGg7XHJcbiAgICBjb25zdCByZWN0ID0gdnNDb250ZW50V3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGxldCB3cmFwcGVySGVpZ2h0ID0gMDtcclxuICAgIGlmIChyZWN0LnRvcCA+PSAwKSB7XHJcbiAgICAgIHdyYXBwZXJIZWlnaHQgPSByZWN0LmJvdHRvbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdyYXBwZXJIZWlnaHQgPSByZWN0LmJvdHRvbSArIHJlY3QudG9wO1xyXG4gICAgfVxyXG4gICAgaWYgKHdyYXBwZXJIZWlnaHQgPCB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcclxuICAgICAgdnNWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICAgJ3N0eWxlJyxcclxuICAgICAgICBgaGVpZ2h0OiAke1xyXG4gICAgICAgICAgdnNDb250ZW50V3JhcHBlci5jbGllbnRIZWlnaHQgKyAoaGFzSG9yaXpvbnRhbFNjcm9sbEJhciA/IDE3IDogMClcclxuICAgICAgICB9cHggIWltcG9ydGFudDtgXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2c1ZpZXdwb3J0LnNldEF0dHJpYnV0ZShcclxuICAgICAgICAnc3R5bGUnLFxyXG4gICAgICAgIGBoZWlnaHQ6ICR7XHJcbiAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgLSBlbC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCAtICgwIHx8IDE2NylcclxuICAgICAgICB9cHggIWltcG9ydGFudDtgXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdwb3J0Py5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xyXG4gICAgY29uc3QgdmlydHVhbFNjcm9sbE9mZnNldCA9IHRoaXMudmlld3BvcnQuZ2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpID8/IDBcclxuICAgIHRoaXMuc3RhdGUudXBkYXRlU3RhdGUoeyB2aXJ0dWFsU2Nyb2xsT2Zmc2V0IH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplSGFuZGxlciA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLnZpZXdwb3J0KSB7XHJcbiAgICAgIHRoaXMuc2V0U2l6ZSh0aGlzLnZpZXdwb3J0LmVsZW1lbnRSZWYpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG59XHJcbiJdfQ==