@one-paragon/angular-utilities 0.1.19 → 0.1.21

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 (380) hide show
  1. package/karma.conf.js +44 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +16 -36
  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 +3 -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 +22 -0
  8. package/src/action-state/action-state-ui/action-state-ui.module.ts +19 -0
  9. package/{action-state/index.d.ts → src/action-state/index.ts} +4 -0
  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 +26 -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 +31 -0
  19. package/{http-request-state/directives/index.d.ts → src/http-request-state/directives/index.ts} +5 -5
  20. package/src/http-request-state/directives/request-state-directive.spec.ts +72 -0
  21. package/src/http-request-state/directives/request-state-directive.ts +70 -0
  22. package/src/http-request-state/helpers.ts +30 -0
  23. package/src/http-request-state/http-request-state.ts +69 -0
  24. package/src/http-request-state/http-state-module.ts +26 -0
  25. package/{http-request-state/index.d.ts → src/http-request-state/index.ts} +6 -6
  26. package/src/http-request-state/observable.spec.ts +43 -0
  27. package/src/http-request-state/rxjs/getRequestorBody.ts +10 -0
  28. package/src/http-request-state/rxjs/getRequestorState.ts +8 -0
  29. package/{http-request-state/rxjs/index.d.ts → src/http-request-state/rxjs/index.ts} +4 -4
  30. package/src/http-request-state/rxjs/tapError.ts +16 -0
  31. package/src/http-request-state/rxjs/tapSuccess.ts +16 -0
  32. package/src/http-request-state/strategies.spec.ts +42 -0
  33. package/src/http-request-state/types.ts +50 -0
  34. package/src/ngrx/actionable-selector.ts +95 -0
  35. package/src/ngrx/index.ts +1 -0
  36. package/{public-api.d.ts → src/public-api.ts} +21 -3
  37. package/src/rxjs/defaultShareReplay.ts +8 -0
  38. package/{rxjs/index.d.ts → src/rxjs/index.ts} +1 -1
  39. package/src/rxjs/mapError.ts +8 -0
  40. package/src/rxjs/rxjs-operators.ts +130 -0
  41. package/src/rxjs/subjectifier.ts +15 -0
  42. package/src/specs/clickSubject.spec.ts +95 -0
  43. package/src/specs/dialog.spec.ts +101 -0
  44. package/src/specs/toggleGroupDirective.spec.ts +231 -0
  45. package/src/table-builder/classes/DefaultSettings.ts +10 -0
  46. package/src/table-builder/classes/GenericTableDataSource.ts +22 -0
  47. package/src/table-builder/classes/MatTableObservableDataSource.ts +23 -0
  48. package/src/table-builder/classes/TableBuilderConfig.ts +19 -0
  49. package/src/table-builder/classes/TableState.ts +63 -0
  50. package/src/table-builder/classes/data-filter.spec.ts +72 -0
  51. package/src/table-builder/classes/data-filter.ts +32 -0
  52. package/{table-builder/classes/display-col.d.ts → src/table-builder/classes/display-col.ts} +5 -5
  53. package/src/table-builder/classes/filter-info.ts +132 -0
  54. package/src/table-builder/classes/table-builder-general-settings.ts +73 -0
  55. package/src/table-builder/classes/table-builder.ts +71 -0
  56. package/src/table-builder/classes/table-store.ts +360 -0
  57. package/src/table-builder/components/array-column.component.ts +39 -0
  58. package/src/table-builder/components/column-builder/column-builder.component.html +66 -0
  59. package/src/table-builder/components/column-builder/column-builder.component.scss +43 -0
  60. package/src/table-builder/components/column-builder/column-builder.component.spec.ts +51 -0
  61. package/src/table-builder/components/column-builder/column-builder.component.ts +126 -0
  62. package/src/table-builder/components/date-filter/date-filter.component.html +24 -0
  63. package/src/table-builder/components/date-filter/date-filter.component.ts +17 -0
  64. package/src/table-builder/components/filter/filter.component.html +78 -0
  65. package/src/table-builder/components/filter/filter.component.scss +64 -0
  66. package/src/table-builder/components/filter/filter.component.spec.ts +89 -0
  67. package/src/table-builder/components/filter/filter.component.ts +35 -0
  68. package/src/table-builder/components/filter/in-list/in-list-filter.component.ts +82 -0
  69. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.html +52 -0
  70. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.scss +57 -0
  71. package/src/table-builder/components/gen-col-displayer/gen-col-displayer.component.ts +44 -0
  72. package/src/table-builder/components/generic-table/generic-table.component.html +77 -0
  73. package/src/table-builder/components/generic-table/generic-table.component.scss +45 -0
  74. package/src/table-builder/components/generic-table/generic-table.component.ts +221 -0
  75. package/src/table-builder/components/generic-table/paginator.component.ts +89 -0
  76. package/src/table-builder/components/group-by-list/group-by-list.component.css +8 -0
  77. package/src/table-builder/components/group-by-list/group-by-list.component.html +10 -0
  78. package/src/table-builder/components/group-by-list/group-by-list.component.spec.ts +23 -0
  79. package/src/table-builder/components/group-by-list/group-by-list.component.ts +16 -0
  80. package/src/table-builder/components/header-menu/header-menu.component.html +117 -0
  81. package/src/table-builder/components/header-menu/header-menu.component.scss +92 -0
  82. package/src/table-builder/components/header-menu/header-menu.component.ts +81 -0
  83. package/src/table-builder/components/in-filter/in-filter.component.css +3 -0
  84. package/src/table-builder/components/in-filter/in-filter.component.html +13 -0
  85. package/src/table-builder/components/in-filter/in-filter.component.ts +60 -0
  86. package/{table-builder/components/index.d.ts → src/table-builder/components/index.ts} +0 -0
  87. package/src/table-builder/components/initialization-component/initialization-component.html +21 -0
  88. package/src/table-builder/components/initialization-component/initialization-component.ts +15 -0
  89. package/src/table-builder/components/link-column.component.ts +33 -0
  90. package/src/table-builder/components/number-filter/number-filter.component.css +10 -0
  91. package/src/table-builder/components/number-filter/number-filter.component.html +21 -0
  92. package/src/table-builder/components/number-filter/number-filter.component.spec.ts +30 -0
  93. package/src/table-builder/components/number-filter/number-filter.component.ts +19 -0
  94. package/src/table-builder/components/sort-menu/sort-menu.component-store.ts +59 -0
  95. package/src/table-builder/components/sort-menu/sort-menu.component.html +101 -0
  96. package/src/table-builder/components/sort-menu/sort-menu.component.scss +119 -0
  97. package/src/table-builder/components/sort-menu/sort-menu.component.ts +82 -0
  98. package/src/table-builder/components/table-container/table-container.css +26 -0
  99. package/src/table-builder/components/table-container/table-container.html +113 -0
  100. package/src/table-builder/components/table-container/table-container.spec.ts +157 -0
  101. package/src/table-builder/components/table-container/table-container.ts +344 -0
  102. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.html +26 -0
  103. package/src/table-builder/components/table-container-filter/filter-list/filter-list.component.ts +38 -0
  104. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.css +37 -0
  105. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.html +8 -0
  106. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.spec.ts +88 -0
  107. package/src/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.ts +27 -0
  108. package/src/table-builder/components/table-container-filter/table-wrapper-filter-store.ts +23 -0
  109. package/src/table-builder/directives/custom-cell-directive.ts +45 -0
  110. package/{table-builder/directives/index.d.ts → src/table-builder/directives/index.ts} +1 -0
  111. package/src/table-builder/directives/multi-sort.directive.spec.ts +124 -0
  112. package/src/table-builder/directives/multi-sort.directive.ts +41 -0
  113. package/src/table-builder/directives/resize-column.directive.ts +104 -0
  114. package/src/table-builder/directives/table-wrapper.directive.ts +16 -0
  115. package/src/table-builder/directives/tb-filter.directive.ts +363 -0
  116. package/src/table-builder/enums/filterTypes.ts +65 -0
  117. package/src/table-builder/functions/boolean-filter-function.ts +13 -0
  118. package/src/table-builder/functions/date-filter-function.ts +40 -0
  119. package/src/table-builder/functions/download-data.ts +11 -0
  120. package/src/table-builder/functions/null-filter-function.ts +9 -0
  121. package/src/table-builder/functions/number-filter-function.ts +42 -0
  122. package/src/table-builder/functions/sort-data-function.ts +8 -0
  123. package/src/table-builder/functions/string-filter-function.ts +52 -0
  124. package/{table-builder/interfaces/ColumnInfo.d.ts → src/table-builder/interfaces/ColumnInfo.ts} +7 -6
  125. package/src/table-builder/interfaces/column-template.ts +9 -0
  126. package/{table-builder/interfaces/dictionary.d.ts → src/table-builder/interfaces/dictionary.ts} +1 -1
  127. package/src/table-builder/interfaces/report-def.ts +131 -0
  128. package/src/table-builder/material.module.ts +95 -0
  129. package/src/table-builder/ngrx/actions.ts +7 -0
  130. package/src/table-builder/ngrx/effects.ts +54 -0
  131. package/src/table-builder/ngrx/reducer.ts +72 -0
  132. package/src/table-builder/ngrx/selectors.ts +37 -0
  133. package/src/table-builder/pipes/column-total.pipe.ts +15 -0
  134. package/src/table-builder/pipes/format-filter-type.pipe.ts +12 -0
  135. package/src/table-builder/pipes/format-filter-value.pipe.ts +40 -0
  136. package/src/table-builder/pipes/key-display.ts +16 -0
  137. package/src/table-builder/services/export-to-csv.service.ts +92 -0
  138. package/src/table-builder/services/link-creator.service.ts +48 -0
  139. package/src/table-builder/services/table-template-service.ts +44 -0
  140. package/src/table-builder/services/transform-creator.ts +61 -0
  141. package/src/table-builder/specs/table-custom-filters.spec.ts +262 -0
  142. package/src/table-builder/styles/collapser.styles.scss +21 -0
  143. package/src/table-builder/table-builder.module.ts +138 -0
  144. package/src/test.ts +17 -0
  145. package/src/utilities/directives/auto-focus.directive.ts +19 -0
  146. package/src/utilities/directives/clickEmitterDirective.ts +15 -0
  147. package/src/utilities/directives/clickSubject.ts +19 -0
  148. package/src/utilities/directives/conditional-classes.directive.ts +35 -0
  149. package/src/utilities/directives/dialog-service.ts +22 -0
  150. package/src/utilities/directives/dialog.ts +142 -0
  151. package/src/utilities/directives/mat-toggle-group-directive.ts +60 -0
  152. package/src/utilities/directives/prevent-enter.directive.ts +12 -0
  153. package/src/utilities/directives/stop-propagation.directive.ts +19 -0
  154. package/src/utilities/directives/styler.ts +16 -0
  155. package/src/utilities/directives/trim-whitespace.directive.ts +20 -0
  156. package/{utilities/index.d.ts → src/utilities/index.ts} +8 -1
  157. package/src/utilities/module.ts +58 -0
  158. package/src/utilities/pipes/function.pipe.ts +15 -0
  159. package/src/utilities/pipes/phone.pipe.ts +15 -0
  160. package/src/utilities/pipes/space-case.pipes.spec.ts +47 -0
  161. package/src/utilities/pipes/space-case.pipes.ts +23 -0
  162. package/tsconfig.lib.json +19 -0
  163. package/tsconfig.lib.prod.json +10 -0
  164. package/tsconfig.spec.json +17 -0
  165. package/action-state/action-state-spinner/action-state-spinner.component.d.ts +0 -12
  166. package/action-state/action-state-ui/action-state-ui.module.d.ts +0 -9
  167. package/action-state/ngrx-ext/ngrx-ext.module.d.ts +0 -8
  168. package/action-state/ngrx.d.ts +0 -31
  169. package/esm2020/action-state/action-state-spinner/action-state-spinner.component.mjs +0 -23
  170. package/esm2020/action-state/action-state-ui/action-state-ui.module.mjs +0 -28
  171. package/esm2020/action-state/index.mjs +0 -8
  172. package/esm2020/action-state/ngrx-ext/ngrx-ext.module.mjs +0 -23
  173. package/esm2020/action-state/ngrx.mjs +0 -42
  174. package/esm2020/http-request-state/HttpRequestStateFactory.mjs +0 -27
  175. package/esm2020/http-request-state/HttpRequestStateStore.mjs +0 -97
  176. package/esm2020/http-request-state/directives/HttpStateDirectiveBase.mjs +0 -34
  177. package/esm2020/http-request-state/directives/http-error-state-directive.mjs +0 -29
  178. package/esm2020/http-request-state/directives/http-inProgress-state-directive.mjs +0 -29
  179. package/esm2020/http-request-state/directives/http-notStarted-state-directive.mjs +0 -29
  180. package/esm2020/http-request-state/directives/http-success-state-directive.mjs +0 -29
  181. package/esm2020/http-request-state/directives/index.mjs +0 -6
  182. package/esm2020/http-request-state/directives/request-state-directive.mjs +0 -57
  183. package/esm2020/http-request-state/helpers.mjs +0 -22
  184. package/esm2020/http-request-state/http-request-state.mjs +0 -39
  185. package/esm2020/http-request-state/http-state-module.mjs +0 -41
  186. package/esm2020/http-request-state/index.mjs +0 -7
  187. package/esm2020/http-request-state/rxjs/getRequestorBody.mjs +0 -4
  188. package/esm2020/http-request-state/rxjs/getRequestorState.mjs +0 -3
  189. package/esm2020/http-request-state/rxjs/index.mjs +0 -5
  190. package/esm2020/http-request-state/rxjs/tapError.mjs +0 -12
  191. package/esm2020/http-request-state/rxjs/tapSuccess.mjs +0 -12
  192. package/esm2020/http-request-state/types.mjs +0 -16
  193. package/esm2020/ngrx/actionable-selector.mjs +0 -76
  194. package/esm2020/ngrx/index.mjs +0 -2
  195. package/esm2020/one-paragon-angular-utilities.mjs +0 -5
  196. package/esm2020/public-api.mjs +0 -19
  197. package/esm2020/rxjs/defaultShareReplay.mjs +0 -7
  198. package/esm2020/rxjs/index.mjs +0 -5
  199. package/esm2020/rxjs/mapError.mjs +0 -8
  200. package/esm2020/rxjs/rxjs-operators.mjs +0 -91
  201. package/esm2020/rxjs/subjectifier.mjs +0 -15
  202. package/esm2020/table-builder/classes/DefaultSettings.mjs +0 -6
  203. package/esm2020/table-builder/classes/GenericTableDataSource.mjs +0 -13
  204. package/esm2020/table-builder/classes/MatTableObservableDataSource.mjs +0 -21
  205. package/esm2020/table-builder/classes/TableBuilderConfig.mjs +0 -3
  206. package/esm2020/table-builder/classes/TableState.mjs +0 -32
  207. package/esm2020/table-builder/classes/data-filter.mjs +0 -26
  208. package/esm2020/table-builder/classes/display-col.mjs +0 -2
  209. package/esm2020/table-builder/classes/filter-info.mjs +0 -71
  210. package/esm2020/table-builder/classes/table-builder-general-settings.mjs +0 -68
  211. package/esm2020/table-builder/classes/table-builder.mjs +0 -61
  212. package/esm2020/table-builder/classes/table-store.mjs +0 -292
  213. package/esm2020/table-builder/components/array-column.component.mjs +0 -57
  214. package/esm2020/table-builder/components/column-builder/column-builder.component.mjs +0 -111
  215. package/esm2020/table-builder/components/date-filter/date-filter.component.mjs +0 -25
  216. package/esm2020/table-builder/components/filter/filter.component.mjs +0 -53
  217. package/esm2020/table-builder/components/filter/in-list/in-list-filter.component.mjs +0 -91
  218. package/esm2020/table-builder/components/gen-col-displayer/gen-col-displayer.component.mjs +0 -45
  219. package/esm2020/table-builder/components/generic-table/generic-table.component.mjs +0 -198
  220. package/esm2020/table-builder/components/generic-table/paginator.component.mjs +0 -74
  221. package/esm2020/table-builder/components/group-by-list/group-by-list.component.mjs +0 -21
  222. package/esm2020/table-builder/components/header-menu/header-menu.component.mjs +0 -90
  223. package/esm2020/table-builder/components/in-filter/in-filter.component.mjs +0 -66
  224. package/esm2020/table-builder/components/index.mjs +0 -10
  225. package/esm2020/table-builder/components/initialization-component/initialization-component.mjs +0 -33
  226. package/esm2020/table-builder/components/link-column.component.mjs +0 -66
  227. package/esm2020/table-builder/components/number-filter/number-filter.component.mjs +0 -27
  228. package/esm2020/table-builder/components/sort-menu/sort-menu.component-store.mjs +0 -42
  229. package/esm2020/table-builder/components/sort-menu/sort-menu.component.mjs +0 -75
  230. package/esm2020/table-builder/components/table-container/table-container.mjs +0 -312
  231. package/esm2020/table-builder/components/table-container-filter/filter-list/filter-list.component.mjs +0 -42
  232. package/esm2020/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.mjs +0 -30
  233. package/esm2020/table-builder/components/table-container-filter/table-wrapper-filter-store.mjs +0 -25
  234. package/esm2020/table-builder/directives/custom-cell-directive.mjs +0 -59
  235. package/esm2020/table-builder/directives/index.mjs +0 -6
  236. package/esm2020/table-builder/directives/multi-sort.directive.mjs +0 -42
  237. package/esm2020/table-builder/directives/resize-column.directive.mjs +0 -86
  238. package/esm2020/table-builder/directives/table-wrapper.directive.mjs +0 -26
  239. package/esm2020/table-builder/directives/tb-filter.directive.mjs +0 -403
  240. package/esm2020/table-builder/enums/filterTypes.mjs +0 -59
  241. package/esm2020/table-builder/functions/boolean-filter-function.mjs +0 -10
  242. package/esm2020/table-builder/functions/date-filter-function.mjs +0 -32
  243. package/esm2020/table-builder/functions/download-data.mjs +0 -12
  244. package/esm2020/table-builder/functions/null-filter-function.mjs +0 -8
  245. package/esm2020/table-builder/functions/number-filter-function.mjs +0 -32
  246. package/esm2020/table-builder/functions/sort-data-function.mjs +0 -5
  247. package/esm2020/table-builder/functions/string-filter-function.mjs +0 -41
  248. package/esm2020/table-builder/interfaces/ColumnInfo.mjs +0 -2
  249. package/esm2020/table-builder/interfaces/dictionary.mjs +0 -2
  250. package/esm2020/table-builder/interfaces/report-def.mjs +0 -34
  251. package/esm2020/table-builder/material.module.mjs +0 -221
  252. package/esm2020/table-builder/ngrx/actions.mjs +0 -5
  253. package/esm2020/table-builder/ngrx/effects.mjs +0 -48
  254. package/esm2020/table-builder/ngrx/reducer.mjs +0 -52
  255. package/esm2020/table-builder/ngrx/selectors.mjs +0 -24
  256. package/esm2020/table-builder/pipes/column-total.pipe.mjs +0 -20
  257. package/esm2020/table-builder/pipes/format-filter-type.pipe.mjs +0 -18
  258. package/esm2020/table-builder/pipes/format-filter-value.pipe.mjs +0 -46
  259. package/esm2020/table-builder/pipes/key-display.mjs +0 -20
  260. package/esm2020/table-builder/services/export-to-csv.service.mjs +0 -84
  261. package/esm2020/table-builder/services/link-creator.service.mjs +0 -42
  262. package/esm2020/table-builder/services/table-template-service.mjs +0 -43
  263. package/esm2020/table-builder/services/transform-creator.mjs +0 -70
  264. package/esm2020/table-builder/table-builder.module.mjs +0 -204
  265. package/esm2020/utilities/directives/auto-focus.directive.mjs +0 -26
  266. package/esm2020/utilities/directives/clickEmitterDirective.mjs +0 -21
  267. package/esm2020/utilities/directives/clickSubject.mjs +0 -27
  268. package/esm2020/utilities/directives/conditional-classes.directive.mjs +0 -35
  269. package/esm2020/utilities/directives/dialog-service.mjs +0 -25
  270. package/esm2020/utilities/directives/dialog.mjs +0 -131
  271. package/esm2020/utilities/directives/mat-toggle-group-directive.mjs +0 -58
  272. package/esm2020/utilities/directives/prevent-enter.directive.mjs +0 -19
  273. package/esm2020/utilities/directives/stop-propagation.directive.mjs +0 -25
  274. package/esm2020/utilities/directives/styler.mjs +0 -26
  275. package/esm2020/utilities/directives/trim-whitespace.directive.mjs +0 -29
  276. package/esm2020/utilities/index.mjs +0 -16
  277. package/esm2020/utilities/module.mjs +0 -91
  278. package/esm2020/utilities/pipes/function.pipe.mjs +0 -21
  279. package/esm2020/utilities/pipes/phone.pipe.mjs +0 -20
  280. package/esm2020/utilities/pipes/space-case.pipes.mjs +0 -28
  281. package/fesm2015/one-paragon-angular-utilities.mjs +0 -4696
  282. package/fesm2015/one-paragon-angular-utilities.mjs.map +0 -1
  283. package/fesm2020/one-paragon-angular-utilities.mjs +0 -4664
  284. package/fesm2020/one-paragon-angular-utilities.mjs.map +0 -1
  285. package/http-request-state/HttpRequestStateFactory.d.ts +0 -14
  286. package/http-request-state/HttpRequestStateStore.d.ts +0 -48
  287. package/http-request-state/directives/HttpStateDirectiveBase.d.ts +0 -16
  288. package/http-request-state/directives/http-error-state-directive.d.ts +0 -12
  289. package/http-request-state/directives/http-inProgress-state-directive.d.ts +0 -12
  290. package/http-request-state/directives/http-notStarted-state-directive.d.ts +0 -12
  291. package/http-request-state/directives/http-success-state-directive.d.ts +0 -14
  292. package/http-request-state/directives/request-state-directive.d.ts +0 -29
  293. package/http-request-state/helpers.d.ts +0 -9
  294. package/http-request-state/http-request-state.d.ts +0 -12
  295. package/http-request-state/http-state-module.d.ts +0 -11
  296. package/http-request-state/rxjs/getRequestorBody.d.ts +0 -3
  297. package/http-request-state/rxjs/getRequestorState.d.ts +0 -3
  298. package/http-request-state/rxjs/tapError.d.ts +0 -3
  299. package/http-request-state/rxjs/tapSuccess.d.ts +0 -3
  300. package/http-request-state/types.d.ts +0 -36
  301. package/index.d.ts +0 -5
  302. package/ngrx/actionable-selector.d.ts +0 -15
  303. package/ngrx/index.d.ts +0 -1
  304. package/rxjs/defaultShareReplay.d.ts +0 -2
  305. package/rxjs/mapError.d.ts +0 -2
  306. package/rxjs/rxjs-operators.d.ts +0 -12
  307. package/rxjs/subjectifier.d.ts +0 -9
  308. package/table-builder/classes/DefaultSettings.d.ts +0 -8
  309. package/table-builder/classes/GenericTableDataSource.d.ts +0 -8
  310. package/table-builder/classes/MatTableObservableDataSource.d.ts +0 -9
  311. package/table-builder/classes/TableBuilderConfig.d.ts +0 -19
  312. package/table-builder/classes/TableState.d.ts +0 -46
  313. package/table-builder/classes/data-filter.d.ts +0 -9
  314. package/table-builder/classes/filter-info.d.ts +0 -40
  315. package/table-builder/classes/table-builder-general-settings.d.ts +0 -43
  316. package/table-builder/classes/table-builder.d.ts +0 -14
  317. package/table-builder/classes/table-store.d.ts +0 -114
  318. package/table-builder/components/array-column.component.d.ts +0 -14
  319. package/table-builder/components/column-builder/column-builder.component.d.ts +0 -50
  320. package/table-builder/components/date-filter/date-filter.component.d.ts +0 -10
  321. package/table-builder/components/filter/filter.component.d.ts +0 -294
  322. package/table-builder/components/filter/in-list/in-list-filter.component.d.ts +0 -27
  323. package/table-builder/components/gen-col-displayer/gen-col-displayer.component.d.ts +0 -16
  324. package/table-builder/components/generic-table/generic-table.component.d.ts +0 -71
  325. package/table-builder/components/generic-table/paginator.component.d.ts +0 -28
  326. package/table-builder/components/group-by-list/group-by-list.component.d.ts +0 -10
  327. package/table-builder/components/header-menu/header-menu.component.d.ts +0 -25
  328. package/table-builder/components/in-filter/in-filter.component.d.ts +0 -22
  329. package/table-builder/components/initialization-component/initialization-component.d.ts +0 -12
  330. package/table-builder/components/link-column.component.d.ts +0 -17
  331. package/table-builder/components/number-filter/number-filter.component.d.ts +0 -12
  332. package/table-builder/components/sort-menu/sort-menu.component-store.d.ts +0 -24
  333. package/table-builder/components/sort-menu/sort-menu.component.d.ts +0 -25
  334. package/table-builder/components/table-container/table-container.d.ts +0 -65
  335. package/table-builder/components/table-container-filter/filter-list/filter-list.component.d.ts +0 -17
  336. package/table-builder/components/table-container-filter/gen-filter-displayer/gen-filter-displayer.component.d.ts +0 -14
  337. package/table-builder/components/table-container-filter/table-wrapper-filter-store.d.ts +0 -14
  338. package/table-builder/directives/custom-cell-directive.d.ts +0 -19
  339. package/table-builder/directives/multi-sort.directive.d.ts +0 -11
  340. package/table-builder/directives/resize-column.directive.d.ts +0 -43
  341. package/table-builder/directives/table-wrapper.directive.d.ts +0 -11
  342. package/table-builder/directives/tb-filter.directive.d.ts +0 -120
  343. package/table-builder/enums/filterTypes.d.ts +0 -31
  344. package/table-builder/functions/boolean-filter-function.d.ts +0 -3
  345. package/table-builder/functions/date-filter-function.d.ts +0 -3
  346. package/table-builder/functions/download-data.d.ts +0 -1
  347. package/table-builder/functions/null-filter-function.d.ts +0 -2
  348. package/table-builder/functions/number-filter-function.d.ts +0 -4
  349. package/table-builder/functions/sort-data-function.d.ts +0 -3
  350. package/table-builder/functions/string-filter-function.d.ts +0 -7
  351. package/table-builder/interfaces/report-def.d.ts +0 -135
  352. package/table-builder/material.module.d.ts +0 -34
  353. package/table-builder/ngrx/actions.d.ts +0 -23
  354. package/table-builder/ngrx/effects.d.ts +0 -19
  355. package/table-builder/ngrx/reducer.d.ts +0 -15
  356. package/table-builder/ngrx/selectors.d.ts +0 -22
  357. package/table-builder/pipes/column-total.pipe.d.ts +0 -8
  358. package/table-builder/pipes/format-filter-type.pipe.d.ts +0 -8
  359. package/table-builder/pipes/format-filter-value.pipe.d.ts +0 -14
  360. package/table-builder/pipes/key-display.d.ts +0 -11
  361. package/table-builder/services/export-to-csv.service.d.ts +0 -22
  362. package/table-builder/services/link-creator.service.d.ts +0 -12
  363. package/table-builder/services/table-template-service.d.ts +0 -14
  364. package/table-builder/services/transform-creator.d.ts +0 -19
  365. package/table-builder/table-builder.module.d.ts +0 -45
  366. package/utilities/directives/auto-focus.directive.d.ts +0 -10
  367. package/utilities/directives/clickEmitterDirective.d.ts +0 -7
  368. package/utilities/directives/clickSubject.d.ts +0 -9
  369. package/utilities/directives/conditional-classes.directive.d.ts +0 -14
  370. package/utilities/directives/dialog-service.d.ts +0 -10
  371. package/utilities/directives/dialog.d.ts +0 -45
  372. package/utilities/directives/mat-toggle-group-directive.d.ts +0 -21
  373. package/utilities/directives/prevent-enter.directive.d.ts +0 -6
  374. package/utilities/directives/stop-propagation.directive.d.ts +0 -7
  375. package/utilities/directives/styler.d.ts +0 -9
  376. package/utilities/directives/trim-whitespace.directive.d.ts +0 -9
  377. package/utilities/module.d.ts +0 -19
  378. package/utilities/pipes/function.pipe.d.ts +0 -7
  379. package/utilities/pipes/phone.pipe.d.ts +0 -7
  380. package/utilities/pipes/space-case.pipes.d.ts +0 -17
@@ -1,198 +0,0 @@
1
- import { Component, ViewChild, Input, ChangeDetectionStrategy, Output, ElementRef, Injector, } from '@angular/core';
2
- import { MatTable } from '@angular/material/table';
3
- import { SelectionModel } from '@angular/cdk/collections';
4
- import { tap, map } from 'rxjs/operators';
5
- import { ColumnBuilderComponent } from '../column-builder/column-builder.component';
6
- import { GenericTableDataSource } from '../../classes/GenericTableDataSource';
7
- import { FieldType } from '../../interfaces/report-def';
8
- import { previousAndCurrent } from '../../../rxjs/rxjs-operators';
9
- import { CdkDropList } from '@angular/cdk/drag-drop';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@angular/material/sort";
12
- import * as i2 from "../../classes/table-store";
13
- import * as i3 from "@angular/common";
14
- import * as i4 from "@angular/material/table";
15
- import * as i5 from "@angular/material/button";
16
- import * as i6 from "@angular/material/tooltip";
17
- import * as i7 from "@angular/material/checkbox";
18
- import * as i8 from "@angular/material/icon";
19
- import * as i9 from "@angular/cdk/drag-drop";
20
- import * as i10 from "../../../utilities/directives/styler";
21
- import * as i11 from "./paginator.component";
22
- export class GenericTableComponent {
23
- constructor(sort, state, viewContainer, injector) {
24
- this.sort = sort;
25
- this.state = state;
26
- this.viewContainer = viewContainer;
27
- this.IndexColumn = false;
28
- this.SelectionColumn = false;
29
- this.isSticky = false;
30
- this.keys = [];
31
- this.rowDefArr = [];
32
- this.columns = [];
33
- this.myColumns = {};
34
- this.trackByFunction = (index, item) => {
35
- if (!item) {
36
- return null;
37
- }
38
- if (this.trackBy) {
39
- return item[this.trackBy];
40
- }
41
- return item;
42
- };
43
- this.initializeRowDefs = (defs) => {
44
- this.rowDefArr.forEach(r => this.table.removeRowDef(r));
45
- this.rowDefArr = defs;
46
- defs.forEach(r => {
47
- r.columns = this.columns.concat(Object.values(this.myColumns).filter(c => c.metaData.fieldType !== FieldType.Hidden).map(c => c.metaData.key));
48
- if (this.table) {
49
- this.table.addRowDef(r);
50
- }
51
- });
52
- };
53
- this.selection = new SelectionModel(true, []);
54
- this.selection$ = this.selection.changed;
55
- this.masterToggleChecked$ = this.selection$.pipe(map(() => this.selection.hasValue() && this.isAllSelected()));
56
- this.masterToggleIndeterminate$ = this.selection$.pipe(map(() => this.selection.hasValue() && !this.isAllSelected()));
57
- this.tableWidth = this.state.getUserDefinedTableSize$.pipe(previousAndCurrent(0), map(([previousUserDefinedWidth, currentUserDefinedWidth]) => {
58
- if (currentUserDefinedWidth) {
59
- return ({ width: `${currentUserDefinedWidth}px` });
60
- }
61
- if (wasReset()) {
62
- return ({ width: 'initial' });
63
- }
64
- return ({});
65
- function wasReset() {
66
- return (previousUserDefinedWidth ?? 0) >= 0 && currentUserDefinedWidth == null;
67
- }
68
- }));
69
- this.collapseFooter$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseFooter));
70
- this.injector = Injector.create({ providers: [
71
- { provide: MatTable, useFactory: () => { return this.table; } },
72
- { provide: CdkDropList, useFactory: () => { return this.dropList; } },
73
- ], parent: injector });
74
- }
75
- drop(event) {
76
- this.state.setUserDefinedOrder({ newOrder: event.currentIndex, oldOrder: event.previousIndex });
77
- }
78
- set disableSort(val) {
79
- this._disableSort = val;
80
- if (val) {
81
- if (this.dataSource?.sort) {
82
- this.dataSource.sort = null;
83
- }
84
- }
85
- else {
86
- if (this.dataSource && !this.dataSource.sort) {
87
- this.dataSource.sort = this.sort;
88
- }
89
- }
90
- }
91
- get disableSort() { return this._disableSort; }
92
- ngOnChanges(changes) {
93
- if (changes.rows && this.rows && this.myColumns.length) {
94
- this.initializeRowDefs([...this.rows]);
95
- }
96
- }
97
- ngOnInit() {
98
- if (this.SelectionColumn) {
99
- this.columns.push('select');
100
- }
101
- if (this.IndexColumn) {
102
- this.columns.push('index');
103
- }
104
- this.createDataSource();
105
- this.state.on(this.columnInfos, columns => {
106
- columns.forEach(ci => this.addMetaData(ci));
107
- });
108
- this.initializeRowDefs([...this.rows]);
109
- this.state.on(this.state.displayedColumns$, keys => {
110
- this.keys = [...this.columns, ...keys];
111
- this.rowDefArr?.forEach(row => row.columns = this.keys);
112
- });
113
- this.showHeader$ = this.state.tableSettings$.pipe(map(settings => !(settings.hideColumnHeader)));
114
- }
115
- createDataSource() {
116
- this.dataSource = new GenericTableDataSource(this.data$.pipe(tap((d) => this.selection.clear())));
117
- if (!this.disableSort) {
118
- this.dataSource.sort = this.sort;
119
- }
120
- }
121
- isGroupHeader(_, row) {
122
- return row.isGroupHeader;
123
- }
124
- isGroupFooter(_, row) {
125
- return row.isGroupFooter;
126
- }
127
- updateGroup(group) {
128
- this.state.updateGroup({
129
- ...group,
130
- isExpanded: !group.isExpanded
131
- });
132
- }
133
- addMetaData(column) {
134
- let columnBuilder = this.myColumns[column.metaData.key];
135
- if (columnBuilder) {
136
- columnBuilder.metaData = column.metaData;
137
- }
138
- else {
139
- const component = this.viewContainer.createComponent(ColumnBuilderComponent, {
140
- index: 0,
141
- injector: this.injector
142
- });
143
- component.instance.customCell = column.customCell;
144
- component.instance.metaData = column.metaData;
145
- component.instance.data$ = this.data$;
146
- this.myColumns[column.metaData.key] = component.instance;
147
- }
148
- }
149
- isAllSelected() {
150
- const numSelected = this.selection.selected.length;
151
- const numRows = this.dataSource.data.length;
152
- return numSelected === numRows;
153
- }
154
- /** Selects all rows if they are not all selected; otherwise clear selection. */
155
- masterToggle() {
156
- this.isAllSelected() ?
157
- this.selection.clear() :
158
- this.selection.select(...this.dataSource.data);
159
- }
160
- }
161
- GenericTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: GenericTableComponent, deps: [{ token: i1.MatSort }, { token: i2.TableStore }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
162
- GenericTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: GenericTableComponent, selector: "tb-generic-table", inputs: { data$: "data$", IndexColumn: "IndexColumn", SelectionColumn: "SelectionColumn", trackBy: "trackBy", rows: "rows", isSticky: "isSticky", columnBuilders: "columnBuilders", columnInfos: "columnInfos", groupHeaderTemplate: "groupHeaderTemplate", disableSort: "disableSort" }, outputs: { selection$: "selection$" }, viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "dropList", first: true, predicate: CdkDropList, descendants: true, static: true }, { propertyName: "tableElRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n [trackBy]='trackByFunction'\r\n [styler]=\"tableWidth | async\"\r\n>\r\n\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" style=\"flex: 0 0 30px;\" >\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\" style=\"flex: 0 0 30px;\">\r\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef style=\"flex: 0 0 30px;\">\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\r\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\r\n\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\r\n <button mat-icon-button (click)=\"updateGroup(row);\">\r\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\r\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\r\n </button>\r\n {{row.groupHeaderName}}\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showHeader$ | async\">\r\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\r\n </ng-container>\r\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\r\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\r\n\r\n</mat-table>\r\n\r\n<div class=\"flx-row-end sticky\">\r\n <tb-paginator #tbPaginator\r\n [dataSource]=\"dataSource\"\r\n [tableElRef]=\"tableElRef\"\r\n [data$]=\"data$\">\r\n </tb-paginator>\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n</div>\r\n", styles: [".mat-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0px;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-paginator-container{min-height:initial!important}:host::ng-deep .mat-paginator-container .mat-form-field-infix{padding:0!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i4.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i4.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.StylerDirective, selector: "[styler]", inputs: ["styler"] }, { kind: "component", type: i11.PaginatorComponent, selector: "tb-paginator", inputs: ["dataSource", "tableElRef", "data$"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: GenericTableComponent, decorators: [{
164
- type: Component,
165
- args: [{ selector: 'tb-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-table\r\n cdkDropList\r\n cdkDropListLockAxis='x'\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n class=\"table-drag-list\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n [trackBy]='trackByFunction'\r\n [styler]=\"tableWidth | async\"\r\n>\r\n\r\n <ng-container matColumnDef=\"select\">\r\n\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" style=\"flex: 0 0 30px;\" >\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"!!(masterToggleChecked$ | async)\"\r\n [indeterminate]=\"masterToggleIndeterminate$ | async\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n\r\n <mat-cell *matCellDef=\"let row\" style=\"flex: 0 0 30px;\">\r\n <mat-checkbox *ngIf=\"!row.isGroupFooter\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </mat-cell>\r\n\r\n <mat-footer-cell *matFooterCellDef style=\"flex: 0 0 30px;\">\r\n {{ selection.selected.length }}\r\n </mat-footer-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"index\">\r\n <mat-header-cell *matHeaderCellDef class=\"f-mat-header-cell\" >#</mat-header-cell>\r\n <mat-cell *matCellDef=\"let i = index;\"> {{ (tbPaginator.paginator.pageIndex * tbPaginator.paginator.pageSize) + i + 1 }} </mat-cell>\r\n <mat-footer-cell *matFooterCellDef></mat-footer-cell>\r\n\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"groupHeader\">\r\n <mat-cell *matCellDef=\"let row\">\r\n <div [style.paddingLeft]=\"row.padding + 'px !important'\" >\r\n <button mat-icon-button (click)=\"updateGroup(row);\">\r\n <mat-icon *ngIf=\"!row.isExpanded\">chevron_right</mat-icon>\r\n <mat-icon *ngIf=\"row.isExpanded\">expand_more</mat-icon>\r\n </button>\r\n {{row.groupHeaderName}}\r\n </div>\r\n <div style=\"flex-grow: 1\">\r\n <ng-container *ngTemplateOutlet=\"groupHeaderTemplate; context: { element: row }\"></ng-container>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showHeader$ | async\">\r\n <mat-header-row *matHeaderRowDef=\"keys; sticky: isSticky\"></mat-header-row>\r\n </ng-container>\r\n <mat-row *matRowDef=\"let row; columns: keys; let i = index\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroupHeader\" style=\"background-color: white;\"></mat-row>\r\n <mat-row *matRowDef=\"let row; columns: keys; when: isGroupFooter\" style=\"background-color: whitesmoke;\"></mat-row>\r\n <mat-footer-row *matFooterRowDef=\"keys\"></mat-footer-row>\r\n\r\n</mat-table>\r\n\r\n<div class=\"flx-row-end sticky\">\r\n <tb-paginator #tbPaginator\r\n [dataSource]=\"dataSource\"\r\n [tableElRef]=\"tableElRef\"\r\n [data$]=\"data$\">\r\n </tb-paginator>\r\n\r\n <mat-icon [matTooltip]=\"(collapseFooter$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon footer\" (click)=\"state.toggleCollapseFooter()\">\r\n {{(collapseFooter$ | async) ? 'expand_more' : 'expand_less'}}\r\n </mat-icon>\r\n</div>\r\n", styles: [".mat-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0px;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-paginator-container{min-height:initial!important}:host::ng-deep .mat-paginator-container .mat-form-field-infix{padding:0!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
166
- }], ctorParameters: function () { return [{ type: i1.MatSort }, { type: i2.TableStore }, { type: i0.ViewContainerRef }, { type: i0.Injector }]; }, propDecorators: { data$: [{
167
- type: Input
168
- }], IndexColumn: [{
169
- type: Input
170
- }], SelectionColumn: [{
171
- type: Input
172
- }], trackBy: [{
173
- type: Input
174
- }], rows: [{
175
- type: Input
176
- }], isSticky: [{
177
- type: Input
178
- }], columnBuilders: [{
179
- type: Input
180
- }], columnInfos: [{
181
- type: Input
182
- }], groupHeaderTemplate: [{
183
- type: Input
184
- }], disableSort: [{
185
- type: Input
186
- }], table: [{
187
- type: ViewChild,
188
- args: [MatTable, { static: true }]
189
- }], dropList: [{
190
- type: ViewChild,
191
- args: [CdkDropList, { static: true }]
192
- }], tableElRef: [{
193
- type: ViewChild,
194
- args: ['table', { read: ElementRef }]
195
- }], selection$: [{
196
- type: Output
197
- }] } });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFLTixVQUFVLEVBQ1YsUUFBUSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEUsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7O0FBU2xFLE1BQU0sT0FBTyxxQkFBcUI7SUE0Q2hDLFlBQ1UsSUFBYSxFQUNkLEtBQWlCLEVBQ2hCLGFBQStCLEVBQ3ZDLFFBQWtCO1FBSFYsU0FBSSxHQUFK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SUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7O2tIQXRLVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixnYUFnQ3JCLFFBQVEseUZBQ1IsV0FBVywrSEFDSyxVQUFVLGtEQ3JFdkMsNjJHQTZFQTsyRkQxQ2EscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNOzZLQVN0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBY2lDLEtBQUs7c0JBQTNDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSyxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0EsVUFBVTtzQkFBakQsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO2dCQXFINUIsVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdDaGlsZCxcclxuICBJbnB1dCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbmplY3RvcixcclxuICBUZW1wbGF0ZVJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRSb3dEZWYsIE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xyXG5pbXBvcnQgeyB0YXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29sdW1uQnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbi1idWlsZGVyL2NvbHVtbi1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnknO1xyXG5pbXBvcnQgeyBHZW5lcmljVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9HZW5lcmljVGFibGVEYXRhU291cmNlJztcclxuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmJztcclxuaW1wb3J0IHsgcHJldmlvdXNBbmRDdXJyZW50IH0gZnJvbSAnLi4vLi4vLi4vcnhqcy9yeGpzLW9wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0NvbHVtbkluZm8nO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgQ2RrRHJvcExpc3QgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RhYmxlU3RhdGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0Yi1nZW5lcmljLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuc2NzcycsJy4uLy4uL3N0eWxlcy9jb2xsYXBzZXIuc3R5bGVzLnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlbmVyaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcclxuICAgIHRoaXMuc3RhdGUuc2V0VXNlckRlZmluZWRPcmRlcih7bmV3T3JkZXI6ZXZlbnQuY3VycmVudEluZGV4LG9sZE9yZGVyOmV2ZW50LnByZXZpb3VzSW5kZXh9KVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZGF0YSQhOiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICBASW5wdXQoKSBJbmRleENvbHVtbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIFNlbGVjdGlvbkNvbHVtbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRyYWNrQnkhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcm93cyE6IFF1ZXJ5TGlzdDxNYXRSb3dEZWY8YW55Pj47XHJcbiAgQElucHV0KCkgaXNTdGlja3kgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjb2x1bW5CdWlsZGVycyE6IENvbHVtbkJ1aWxkZXJDb21wb25lbnRbXTtcclxuICBASW5wdXQoKSBjb2x1bW5JbmZvcyE6IE9ic2VydmFibGU8Q29sdW1uSW5mb1tdPjtcclxuICBASW5wdXQoKSBncm91cEhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgcHJpdmF0ZSBfZGlzYWJsZVNvcnQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlU29ydCh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVTb3J0ID0gdmFsO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlPy5zb3J0KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlICYmICF0aGlzLmRhdGFTb3VyY2Uuc29ydCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBkaXNhYmxlU29ydCgpIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVTb3J0OyB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlITogTWF0VGFibGU8YW55PjtcclxuICBAVmlld0NoaWxkKENka0Ryb3BMaXN0LCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wTGlzdCE6IENka0Ryb3BMaXN0O1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywge3JlYWQ6IEVsZW1lbnRSZWZ9KSB0YWJsZUVsUmVmITogRWxlbWVudFJlZjtcclxuICBjdXJyZW50Q29sdW1ucyE6IHN0cmluZ1tdO1xyXG4gIGRhdGFTb3VyY2UhOiBHZW5lcmljVGFibGVEYXRhU291cmNlPGFueT47XHJcbiAga2V5czogc3RyaW5nIFtdID0gW107XHJcbiAgaW5qZWN0b3I6IEluamVjdG9yO1xyXG4gIHJvd0RlZkFyciA6TWF0Um93RGVmPGFueT5bXT0gW107XHJcbiAgY29sdW1uczpzdHJpbmcgW10gPSBbXTtcclxuICBteUNvbHVtbnM6IERpY3Rpb25hcnk8Q29sdW1uQnVpbGRlckNvbXBvbmVudD4gPSB7fTtcclxuICBzaG93SGVhZGVyJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzb3J0OiBNYXRTb3J0LFxyXG4gICAgcHVibGljIHN0YXRlOiBUYWJsZVN0b3JlLFxyXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgKSB7XHJcblxyXG4gICAgdGhpcy5pbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7IHByb3ZpZGVyczogW1xyXG4gICAgICB7cHJvdmlkZTogTWF0VGFibGUsIHVzZUZhY3Rvcnk6ICgpPT4ge3JldHVybiB0aGlzLnRhYmxlfSB9LFxyXG4gICAgICB7cHJvdmlkZTogQ2RrRHJvcExpc3QsIHVzZUZhY3Rvcnk6ICgpPT4ge3JldHVybiB0aGlzLmRyb3BMaXN0fSB9LFxyXG4gICAgXSwgcGFyZW50OiBpbmplY3Rvcn0pO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUZ1bmN0aW9uID0gKGluZGV4Om51bWJlciwgaXRlbTogYW55KSA9PiB7XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50cmFja0J5KSB7XHJcbiAgICAgIHJldHVybiBpdGVtW3RoaXMudHJhY2tCeV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLnJvd3MgJiYgdGhpcy5yb3dzICYmIHRoaXMubXlDb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVSb3dEZWZzKFsuLi50aGlzLnJvd3NdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMuU2VsZWN0aW9uQ29sdW1uKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5wdXNoKCdzZWxlY3QnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5JbmRleENvbHVtbikge1xyXG4gICAgIHRoaXMuY29sdW1ucy5wdXNoKCdpbmRleCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3JlYXRlRGF0YVNvdXJjZSgpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUub24odGhpcy5jb2x1bW5JbmZvcywgY29sdW1ucyA9PiB7XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjaSA9PiB0aGlzLmFkZE1ldGFEYXRhKGNpKSlcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZVJvd0RlZnMoWy4uLnRoaXMucm93c10pO1xyXG5cclxuICAgIHRoaXMuc3RhdGUub24odGhpcy5zdGF0ZS5kaXNwbGF5ZWRDb2x1bW5zJCwga2V5cyA9PiB7XHJcbiAgICAgIHRoaXMua2V5cyA9IFsuLi50aGlzLmNvbHVtbnMsIC4uLmtleXNdO1xyXG4gICAgICB0aGlzLnJvd0RlZkFycj8uZm9yRWFjaChyb3cgPT4gcm93LmNvbHVtbnMgPSB0aGlzLmtleXMpXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNob3dIZWFkZXIkID0gdGhpcy5zdGF0ZS50YWJsZVNldHRpbmdzJC5waXBlKG1hcChzZXR0aW5ncyA9PiAhKHNldHRpbmdzLmhpZGVDb2x1bW5IZWFkZXIpKSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVEYXRhU291cmNlKCkge1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IEdlbmVyaWNUYWJsZURhdGFTb3VyY2UoXHJcbiAgICAgIHRoaXMuZGF0YSQucGlwZSh0YXAoKGQpID0+IHRoaXMuc2VsZWN0aW9uLmNsZWFyKCkgKSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVTb3J0KSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNHcm91cEhlYWRlcihfOiBudW1iZXIsIHJvdzogeyBpc0dyb3VwSGVhZGVyOiBib29sZWFuIH0pIHtcclxuICAgIHJldHVybiByb3cuaXNHcm91cEhlYWRlcjtcclxuICB9XHJcblxyXG4gIGlzR3JvdXBGb290ZXIoXzogbnVtYmVyLCByb3c6IHsgaXNHcm91cEZvb3RlcjogYm9vbGVhbiB9KSB7XHJcbiAgICByZXR1cm4gcm93LmlzR3JvdXBGb290ZXI7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVHcm91cChncm91cDogR3JvdXApOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGUudXBkYXRlR3JvdXAoe1xyXG4gICAgICAuLi5ncm91cCxcclxuICAgICAgaXNFeHBhbmRlZDogIWdyb3VwLmlzRXhwYW5kZWRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkTWV0YURhdGEoY29sdW1uOiBDb2x1bW5JbmZvKSB7XHJcbiAgICBsZXQgY29sdW1uQnVpbGRlciA9IHRoaXMubXlDb2x1bW5zW2NvbHVtbi5tZXRhRGF0YS5rZXldO1xyXG4gICAgaWYoY29sdW1uQnVpbGRlcikge1xyXG4gICAgICBjb2x1bW5CdWlsZGVyLm1ldGFEYXRhID0gY29sdW1uLm1ldGFEYXRhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChDb2x1bW5CdWlsZGVyQ29tcG9uZW50LCB7XHJcbiAgICAgICAgaW5kZXg6IDAsXHJcbiAgICAgICAgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3JcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5jdXN0b21DZWxsID0gY29sdW1uLmN1c3RvbUNlbGw7XHJcbiAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5tZXRhRGF0YSA9IGNvbHVtbi5tZXRhRGF0YTtcclxuICAgICAgY29tcG9uZW50Lmluc3RhbmNlLmRhdGEkID0gdGhpcy5kYXRhJDtcclxuICAgICAgdGhpcy5teUNvbHVtbnNbY29sdW1uLm1ldGFEYXRhLmtleV0gPSBjb21wb25lbnQuaW5zdGFuY2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplUm93RGVmcyA9IChkZWZzOk1hdFJvd0RlZjxhbnk+W10pPT57XHJcbiAgICB0aGlzLnJvd0RlZkFyci5mb3JFYWNoKHI9PnRoaXMudGFibGUucmVtb3ZlUm93RGVmKHIpKTtcclxuICAgIHRoaXMucm93RGVmQXJyID0gZGVmcztcclxuICAgIGRlZnMuZm9yRWFjaChyID0+IHtcclxuICAgICAgci5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLmNvbmNhdChPYmplY3QudmFsdWVzKHRoaXMubXlDb2x1bW5zKS5maWx0ZXIoYyA9PiBjLm1ldGFEYXRhLmZpZWxkVHlwZSAhPT0gRmllbGRUeXBlLkhpZGRlbikubWFwKGMgPT4gYy5tZXRhRGF0YS5rZXkpKTtcclxuICAgICAgaWYgKHRoaXMudGFibGUpIHtcclxuICAgICAgICB0aGlzLnRhYmxlLmFkZFJvd0RlZihyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3Rpb24gOiBTZWxlY3Rpb25Nb2RlbDxhbnk+ID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb24kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkO1xyXG4gIG1hc3RlclRvZ2dsZUNoZWNrZWQkID0gdGhpcy5zZWxlY3Rpb24kLnBpcGUobWFwKCgpPT50aGlzLnNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIHRoaXMuaXNBbGxTZWxlY3RlZCgpKSk7XHJcbiAgbWFzdGVyVG9nZ2xlSW5kZXRlcm1pbmF0ZSQgPSB0aGlzLnNlbGVjdGlvbiQucGlwZShtYXAoKCk9PnRoaXMuc2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIXRoaXMuaXNBbGxTZWxlY3RlZCgpKSk7XHJcblxyXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcclxuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XHJcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgfVxyXG5cclxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xyXG4gIG1hc3RlclRvZ2dsZSgpIHtcclxuICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpID9cclxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKSA6XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCguLi50aGlzLmRhdGFTb3VyY2UuZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0YWJsZVdpZHRoID0gdGhpcy5zdGF0ZS5nZXRVc2VyRGVmaW5lZFRhYmxlU2l6ZSQucGlwZShcclxuICAgIHByZXZpb3VzQW5kQ3VycmVudDxudW1iZXIgfCB1bmRlZmluZWQ+KDApLFxyXG4gICAgbWFwKChbcHJldmlvdXNVc2VyRGVmaW5lZFdpZHRoLCBjdXJyZW50VXNlckRlZmluZWRXaWR0aF0pID0+IHtcclxuICAgICAgaWYoIGN1cnJlbnRVc2VyRGVmaW5lZFdpZHRoKXtcclxuICAgICAgICByZXR1cm4gKHt3aWR0aDpgJHtjdXJyZW50VXNlckRlZmluZWRXaWR0aH1weGB9KTtcclxuICAgICAgfSBpZiggd2FzUmVzZXQoKSApe1xyXG4gICAgICAgIHJldHVybiAoe3dpZHRoOidpbml0aWFsJ30pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoe30pO1xyXG5cclxuICAgICAgZnVuY3Rpb24gd2FzUmVzZXQoKXtcclxuICAgICAgICByZXR1cm4gKHByZXZpb3VzVXNlckRlZmluZWRXaWR0aCA/PyAwKSA+PTAgJiYgY3VycmVudFVzZXJEZWZpbmVkV2lkdGggPT0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBjb2xsYXBzZUZvb3RlciQgPSB0aGlzLnN0YXRlLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5wZXJzaXN0ZWRUYWJsZVNldHRpbmdzLmNvbGxhcHNlRm9vdGVyKSk7XHJcbn1cclxuIiwiPG1hdC10YWJsZVxyXG4gIGNka0Ryb3BMaXN0XHJcbiAgY2RrRHJvcExpc3RMb2NrQXhpcz0neCdcclxuICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXHJcbiAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIlxyXG4gIGNsYXNzPVwidGFibGUtZHJhZy1saXN0XCJcclxuICAjdGFibGVcclxuICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICBbdHJhY2tCeV09J3RyYWNrQnlGdW5jdGlvbidcclxuICBbc3R5bGVyXT1cInRhYmxlV2lkdGggfCBhc3luY1wiXHJcbj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdFwiPlxyXG5cclxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZi1tYXQtaGVhZGVyLWNlbGxcIiBzdHlsZT1cImZsZXg6IDAgMCAzMHB4O1wiID5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhIShtYXN0ZXJUb2dnbGVDaGVja2VkJCB8IGFzeW5jKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm1hc3RlclRvZ2dsZUluZGV0ZXJtaW5hdGUkIHwgYXN5bmNcIj5cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxyXG5cclxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgc3R5bGU9XCJmbGV4OiAwIDAgMzBweDtcIj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nSWY9XCIhcm93LmlzR3JvdXBGb290ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKHJvdykgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KVwiPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC9tYXQtY2VsbD5cclxuXHJcbiAgICAgICAgPG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZiBzdHlsZT1cImZsZXg6IDAgMCAzMHB4O1wiPlxyXG4gICAgICAgICAge3sgc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCB9fVxyXG4gICAgICAgIDwvbWF0LWZvb3Rlci1jZWxsPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiaW5kZXhcIj5cclxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJmLW1hdC1oZWFkZXItY2VsbFwiID4jPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaSA9IGluZGV4O1wiPiB7eyAodGJQYWdpbmF0b3IucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRiUGFnaW5hdG9yLnBhZ2luYXRvci5wYWdlU2l6ZSkgKyAgaSArIDEgfX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgIDxtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC9tYXQtZm9vdGVyLWNlbGw+XHJcblxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZ3JvdXBIZWFkZXJcIj5cclxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XHJcbiAgICAgICAgICA8ZGl2IFtzdHlsZS5wYWRkaW5nTGVmdF09XCJyb3cucGFkZGluZyArICdweCAhaW1wb3J0YW50J1wiID5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInVwZGF0ZUdyb3VwKHJvdyk7XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIXJvdy5pc0V4cGFuZGVkXCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwicm93LmlzRXhwYW5kZWRcIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICB7e3Jvdy5ncm91cEhlYWRlck5hbWV9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cEhlYWRlclRlbXBsYXRlOyBjb250ZXh0OiB7IGVsZW1lbnQ6IHJvdyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1jZWxsPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dIZWFkZXIkIHwgYXN5bmNcIj5cclxuICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwia2V5czsgc3RpY2t5OiBpc1N0aWNreVwiPjwvbWF0LWhlYWRlci1yb3c+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGtleXM7IGxldCBpID0gaW5kZXhcIj48L21hdC1yb3c+XHJcbiAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZ3JvdXBIZWFkZXInXTsgd2hlbjogaXNHcm91cEhlYWRlclwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCI+PC9tYXQtcm93PlxyXG4gIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBrZXlzOyB3aGVuOiBpc0dyb3VwRm9vdGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZXNtb2tlO1wiPjwvbWF0LXJvdz5cclxuICA8bWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cImtleXNcIj48L21hdC1mb290ZXItcm93PlxyXG5cclxuPC9tYXQtdGFibGU+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmx4LXJvdy1lbmQgc3RpY2t5XCI+XHJcbiAgPHRiLXBhZ2luYXRvciAjdGJQYWdpbmF0b3JcclxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgW3RhYmxlRWxSZWZdPVwidGFibGVFbFJlZlwiXHJcbiAgICBbZGF0YSRdPVwiZGF0YSRcIj5cclxuICA8L3RiLXBhZ2luYXRvcj5cclxuXHJcbiAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cIihjb2xsYXBzZUZvb3RlciQgfCBhc3luYykgPyAnZXhwYW5kJyA6ICdjb2xsYXBzZSdcIiBjbGFzcz1cImNvbGxhcHNlLWljb24gZm9vdGVyXCIgKGNsaWNrKT1cInN0YXRlLnRvZ2dsZUNvbGxhcHNlRm9vdGVyKClcIj5cclxuICAgIHt7KGNvbGxhcHNlRm9vdGVyJCB8IGFzeW5jKSA/ICdleHBhbmRfbW9yZScgOiAnZXhwYW5kX2xlc3MnfX1cclxuICA8L21hdC1pY29uPlxyXG48L2Rpdj5cclxuIl19
@@ -1,74 +0,0 @@
1
- import { Component, ChangeDetectionStrategy, ViewChild, Input, } from '@angular/core';
2
- import { MatPaginator } from '@angular/material/paginator';
3
- import { asyncScheduler, merge } from 'rxjs';
4
- import { delay, distinct, distinctUntilKeyChanged, map } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../classes/table-store";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "@angular/material/paginator";
9
- export class PaginatorComponent {
10
- constructor(state) {
11
- this.state = state;
12
- this.ourPageEvent = false;
13
- }
14
- ngOnInit() {
15
- this.dataSource.paginator = this.paginator;
16
- this.ourPageEvent = true;
17
- this.state.on(metaDataPageSizeChange(this.state), setPaginatorPageSize(this.paginator));
18
- this.state.setPageSize(onPagiantorPageSizeChange(this.paginator));
19
- this.collapseFooter$ = this.state.state$.pipe(map(state => state.persistedTableSettings.collapseFooter));
20
- }
21
- ngAfterViewInit() {
22
- this.currentPageData$ = merge(this.paginator.page.pipe(map(mapPaginationEventToCurrentPageDetails)), this.data$.pipe(distinctUntilKeyChanged("length"), delayToAllowForProperUpdate, map(updateCurrentPageDetailsOnDataLengthChange(this.paginator))));
23
- }
24
- paginatorChange() {
25
- if (!this.ourPageEvent) {
26
- setTimeout(() => this.tableElRef?.nativeElement?.scrollIntoView(), 0);
27
- }
28
- else {
29
- this.ourPageEvent = false;
30
- }
31
- }
32
- }
33
- PaginatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: PaginatorComponent, deps: [{ token: i1.TableStore }], target: i0.ɵɵFactoryTarget.Component });
34
- PaginatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: PaginatorComponent, selector: "tb-paginator", inputs: { dataSource: "dataSource", tableElRef: "tableElRef", data$: "data$" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], ngImport: i0, template: `
35
- <div [ngClass]="{'hide' : !(collapseFooter$ | async), 'page-amounts':true}" *ngIf="currentPageData$ | async as pageData">
36
- {{pageData.currentStart}} - {{pageData.currentEnd}} of {{pageData.total}}
37
- </div>
38
- <mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
39
- [ngClass]="{'hide' : (collapseFooter$ | async)}">
40
- </mat-paginator>
41
- `, isInline: true, styles: [".mat-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0px;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-paginator-container{min-height:initial!important}:host::ng-deep .mat-paginator-container .mat-form-field-infix{padding:0!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: PaginatorComponent, decorators: [{
43
- type: Component,
44
- args: [{ selector: 'tb-paginator', template: `
45
- <div [ngClass]="{'hide' : !(collapseFooter$ | async), 'page-amounts':true}" *ngIf="currentPageData$ | async as pageData">
46
- {{pageData.currentStart}} - {{pageData.currentEnd}} of {{pageData.total}}
47
- </div>
48
- <mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100, 500]" showFirstLastButtons (page)="paginatorChange()"
49
- [ngClass]="{'hide' : (collapseFooter$ | async)}">
50
- </mat-paginator>
51
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".mat-row:nth-child(odd){background-color:#cdeefe}.sticky{bottom:0px;position:sticky;border-top:.5px solid rgba(0,0,0,.12)}.page-amounts{color:#0000008a;font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;margin-right:.2rem}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;background-color:#fff}:host::ng-deep .mat-paginator-container{min-height:initial!important}:host::ng-deep .mat-paginator-container .mat-form-field-infix{padding:0!important}.group-header{display:flex}:host::ng-deep .table-drag-list.cdk-drop-list-dragging .drag-header:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n", ".collapse-icon{font-size:16px;height:16px;padding-bottom:.2rem;color:#3f51b5}.collapse-icon.header{align-self:flex-end}.collapse-icon.footer{align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
52
- }], ctorParameters: function () { return [{ type: i1.TableStore }]; }, propDecorators: { dataSource: [{
53
- type: Input
54
- }], tableElRef: [{
55
- type: Input
56
- }], paginator: [{
57
- type: ViewChild,
58
- args: [MatPaginator, { static: true }]
59
- }], data$: [{
60
- type: Input
61
- }] } });
62
- const mapPaginationEventToCurrentPageDetails = (pageData) => ({
63
- currentStart: (pageData.pageIndex * pageData.pageSize) + 1,
64
- currentEnd: Math.min(pageData.length, ((pageData.pageIndex + 1) * pageData.pageSize)),
65
- total: pageData.length
66
- });
67
- const updateCurrentPageDetailsOnDataLengthChange = (paginator) => () => ({ currentStart: (paginator.pageIndex * paginator.pageSize) + 1,
68
- currentEnd: Math.min(paginator.length, ((paginator.pageIndex + 1) * paginator.pageSize)),
69
- total: paginator.length });
70
- const delayToAllowForProperUpdate = delay(0, asyncScheduler);
71
- const metaDataPageSizeChange = (state) => state.state$.pipe(map(state => state.pageSize), distinct());
72
- const setPaginatorPageSize = (paginator) => (pageSize) => paginator._changePageSize(pageSize);
73
- const onPagiantorPageSizeChange = (paginator) => paginator.page.pipe(map(e => e.pageSize), distinct());
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2NvbXBvbmVudHMvZ2VuZXJpYy10YWJsZS9wYWdpbmF0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLEdBSU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBYSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQWdCL0UsTUFBTSxPQUFPLGtCQUFrQjtJQVE3QixZQUFvQixLQUFrQjtRQUFsQixVQUFLLEdBQUwsS0FBSyxDQUFhO1FBMEJ0QyxpQkFBWSxHQUFHLEtBQUssQ0FBQztJQTFCbUIsQ0FBQztJQUN6QyxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxD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U0FBdUIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3Q2hpbGQsXG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIsIG1lcmdlLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgZGlzdGluY3QsIGRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHZW5lcmljVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9HZW5lcmljVGFibGVEYXRhU291cmNlJztcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RiLXBhZ2luYXRvcicsXG4gIHRlbXBsYXRlOiBgXG4gIDxkaXYgW25nQ2xhc3NdPVwieydoaWRlJyA6ICEoY29sbGFwc2VGb290ZXIkIHwgYXN5bmMpLCAncGFnZS1hbW91bnRzJzp0cnVlfVwiICpuZ0lmPVwiY3VycmVudFBhZ2VEYXRhJCB8IGFzeW5jIGFzIHBhZ2VEYXRhXCI+XG4gICAge3twYWdlRGF0YS5jdXJyZW50U3RhcnR9fSAtIHt7cGFnZURhdGEuY3VycmVudEVuZH19IG9mIHt7cGFnZURhdGEudG90YWx9fVxuICA8L2Rpdj5cbiAgPG1hdC1wYWdpbmF0b3IgW3BhZ2VTaXplT3B0aW9uc109XCJbNSwgMTAsIDIwLCA1MCwgMTAwLCA1MDBdXCIgc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgKHBhZ2UpPVwicGFnaW5hdG9yQ2hhbmdlKClcIlxuICAgIFtuZ0NsYXNzXT1cInsnaGlkZScgOiAoY29sbGFwc2VGb290ZXIkIHwgYXN5bmMpfVwiPlxuICA8L21hdC1wYWdpbmF0b3I+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2dlbmVyaWMtdGFibGUuY29tcG9uZW50LnNjc3MnLCcuLi8uLi9zdHlsZXMvY29sbGFwc2VyLnN0eWxlcy5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXR7XG4gIEBJbnB1dCgpIGRhdGFTb3VyY2UhIDogR2VuZXJpY1RhYmxlRGF0YVNvdXJjZTxhbnk+O1xuICBASW5wdXQoKSB0YWJsZUVsUmVmISA6IEVsZW1lbnRSZWZcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcbiAgY3VycmVudFBhZ2VEYXRhJCE6IE9ic2VydmFibGU8Q3VycmVudFBhZ2VEZXRhaWxzPjtcbiAgY29sbGFwc2VGb290ZXIkITpPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBASW5wdXQoKSBkYXRhJCE6IE9ic2VydmFibGU8YW55W10+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RhdGUgOiBUYWJsZVN0b3JlKXt9XG4gIG5nT25Jbml0KCl7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIHRoaXMub3VyUGFnZUV2ZW50ID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXRlLm9uKG1ldGFEYXRhUGFnZVNpemVDaGFuZ2UodGhpcy5zdGF0ZSksIHNldFBhZ2luYXRvclBhZ2VTaXplKHRoaXMucGFnaW5hdG9yKSk7XG4gICAgdGhpcy5zdGF0ZS5zZXRQYWdlU2l6ZShvblBhZ2lhbnRvclBhZ2VTaXplQ2hhbmdlKHRoaXMucGFnaW5hdG9yKSk7XG4gICAgdGhpcy5jb2xsYXBzZUZvb3RlciQgPSB0aGlzLnN0YXRlLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5wZXJzaXN0ZWRUYWJsZVNldHRpbmdzLmNvbGxhcHNlRm9vdGVyKSk7XG5cbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICB0aGlzLmN1cnJlbnRQYWdlRGF0YSQgPSBtZXJnZShcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UucGlwZShtYXAobWFwUGFnaW5hdGlvbkV2ZW50VG9DdXJyZW50UGFnZURldGFpbHMpKSxcbiAgICAgIHRoaXMuZGF0YSQucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoXCJsZW5ndGhcIiksXG4gICAgICAgIGRlbGF5VG9BbGxvd0ZvclByb3BlclVwZGF0ZSxcbiAgICAgICAgbWFwKHVwZGF0ZUN1cnJlbnRQYWdlRGV0YWlsc09uRGF0YUxlbmd0aENoYW5nZSh0aGlzLnBhZ2luYXRvcikpKVxuICAgICk7XG4gIH1cblxuICBwYWdpbmF0b3JDaGFuZ2UoKSA6IHZvaWQge1xuICAgIGlmKCF0aGlzLm91clBhZ2VFdmVudCl7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudGFibGVFbFJlZj8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsSW50b1ZpZXcoKSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3VyUGFnZUV2ZW50ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIG91clBhZ2VFdmVudCA9IGZhbHNlO1xuXG59XG5cbmNvbnN0IG1hcFBhZ2luYXRpb25FdmVudFRvQ3VycmVudFBhZ2VEZXRhaWxzID0gKHBhZ2VEYXRhOiBQYWdlRXZlbnQpOkN1cnJlbnRQYWdlRGV0YWlscyA9PiAoe1xuICBjdXJyZW50U3RhcnQgOiAocGFnZURhdGEucGFnZUluZGV4ICogcGFnZURhdGEucGFnZVNpemUpICsgMSxcbiAgY3VycmVudEVuZCA6IE1hdGgubWluKHBhZ2VEYXRhLmxlbmd0aCAsICgocGFnZURhdGEucGFnZUluZGV4ICsgMSkgKiBwYWdlRGF0YS5wYWdlU2l6ZSkpLFxuICB0b3RhbCA6IHBhZ2VEYXRhLmxlbmd0aFxufSk7XG5cbmNvbnN0IHVwZGF0ZUN1cnJlbnRQYWdlRGV0YWlsc09uRGF0YUxlbmd0aENoYW5nZSA9IChwYWdpbmF0b3I6TWF0UGFnaW5hdG9yKSA9PiAoKSA9PiAoe2N1cnJlbnRTdGFydDoocGFnaW5hdG9yLnBhZ2VJbmRleCAqIHBhZ2luYXRvci5wYWdlU2l6ZSkgKyAxLFxuICBjdXJyZW50RW5kOiBNYXRoLm1pbihwYWdpbmF0b3IubGVuZ3RoICwgKChwYWdpbmF0b3IucGFnZUluZGV4ICsgMSkgKiBwYWdpbmF0b3IucGFnZVNpemUpKSxcbiAgdG90YWw6cGFnaW5hdG9yLmxlbmd0aH0pXG5cbmNvbnN0IGRlbGF5VG9BbGxvd0ZvclByb3BlclVwZGF0ZSA9IGRlbGF5PGFueVtdPigwLGFzeW5jU2NoZWR1bGVyKTtcblxuaW50ZXJmYWNlIEN1cnJlbnRQYWdlRGV0YWlscyB7XG4gIGN1cnJlbnRTdGFydDpudW1iZXIsXG4gIGN1cnJlbnRFbmQ6bnVtYmVyLFxuICB0b3RhbDpudW1iZXJcbn1cblxuY29uc3QgbWV0YURhdGFQYWdlU2l6ZUNoYW5nZSA9IChzdGF0ZTpUYWJsZVN0b3JlKSA9PiBzdGF0ZS5zdGF0ZSQucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUucGFnZVNpemUpLGRpc3RpbmN0KCkpO1xuXG5jb25zdCBzZXRQYWdpbmF0b3JQYWdlU2l6ZSA9IChwYWdpbmF0b3I6TWF0UGFnaW5hdG9yKSA9PiAocGFnZVNpemU6IG51bWJlcikgPT5cbiAgcGFnaW5hdG9yLl9jaGFuZ2VQYWdlU2l6ZShwYWdlU2l6ZSk7XG5cbmNvbnN0IG9uUGFnaWFudG9yUGFnZVNpemVDaGFuZ2UgPSAocGFnaW5hdG9yOiBNYXRQYWdpbmF0b3IpID0+IHBhZ2luYXRvci5wYWdlLnBpcGUobWFwKCBlID0+IGUucGFnZVNpemUgKSwgZGlzdGluY3QoKSk7XG4iXX0=
@@ -1,21 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../classes/table-store";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "@angular/material/icon";
6
- import * as i4 from "@angular/material/chips";
7
- import * as i5 from "@ngrx/component";
8
- export class GroupByListComponent {
9
- constructor(tableStore) {
10
- this.tableStore = tableStore;
11
- }
12
- ngOnInit() {
13
- }
14
- }
15
- GroupByListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: GroupByListComponent, deps: [{ token: i1.TableStore }], target: i0.ɵɵFactoryTarget.Component });
16
- GroupByListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: GroupByListComponent, selector: "group-by-list", ngImport: i0, template: "<mat-chip-list *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\r\n <span *ngIf=\"groupByKeys?.length\" class=\"tb-group-label\">Group By:</span>\r\n <ng-container *ngFor=\"let groupByKey of groupByKeys; let i = index;\">\r\n <mat-icon *ngIf=\"i > 0\" class=\"nested-arrow\">arrow_right</mat-icon>\r\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\r\n {{groupByKey}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </ng-container>\r\n</mat-chip-list>\r\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i5.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }] });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: GroupByListComponent, decorators: [{
18
- type: Component,
19
- args: [{ selector: 'group-by-list', template: "<mat-chip-list *ngrxLet=\"tableStore.groupByKeys$ as groupByKeys\">\r\n <span *ngIf=\"groupByKeys?.length\" class=\"tb-group-label\">Group By:</span>\r\n <ng-container *ngFor=\"let groupByKey of groupByKeys; let i = index;\">\r\n <mat-icon *ngIf=\"i > 0\" class=\"nested-arrow\">arrow_right</mat-icon>\r\n <mat-chip (removed)=\"tableStore.removeGroupByKey(groupByKey)\">\r\n {{groupByKey}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </ng-container>\r\n</mat-chip-list>\r\n", styles: [".tb-group-label{padding-right:5px}.nested-arrow{margin-right:-8px;margin-left:-8px}\n"] }]
20
- }], ctorParameters: function () { return [{ type: i1.TableStore }]; } });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnktbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dyb3VwLWJ5LWxpc3QvZ3JvdXAtYnktbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2dyb3VwLWJ5LWxpc3QvZ3JvdXAtYnktbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBUWxELE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFBbUIsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFJLENBQUM7SUFFOUMsUUFBUTtJQUNSLENBQUM7O2lIQUxVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHFEQ1JqQyx1Z0JBVUE7MkZERmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2dyb3VwLWJ5LWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1ieS1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ncm91cC1ieS1saXN0LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBCeUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGVTdG9yZTogVGFibGVTdG9yZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPG1hdC1jaGlwLWxpc3QgKm5ncnhMZXQ9XCJ0YWJsZVN0b3JlLmdyb3VwQnlLZXlzJCBhcyBncm91cEJ5S2V5c1wiPlxyXG4gIDxzcGFuICpuZ0lmPVwiZ3JvdXBCeUtleXM/Lmxlbmd0aFwiIGNsYXNzPVwidGItZ3JvdXAtbGFiZWxcIj5Hcm91cCBCeTo8L3NwYW4+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXBCeUtleSBvZiBncm91cEJ5S2V5czsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImkgPiAwXCIgY2xhc3M9XCJuZXN0ZWQtYXJyb3dcIj5hcnJvd19yaWdodDwvbWF0LWljb24+XHJcbiAgICA8bWF0LWNoaXAgKHJlbW92ZWQpPVwidGFibGVTdG9yZS5yZW1vdmVHcm91cEJ5S2V5KGdyb3VwQnlLZXkpXCI+XHJcbiAgICAgIHt7Z3JvdXBCeUtleX19XHJcbiAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICA8L21hdC1jaGlwPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L21hdC1jaGlwLWxpc3Q+XHJcbiJdfQ==
@@ -1,90 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
2
- import { FieldType } from '../../interfaces/report-def';
3
- import { FilterType } from '../../enums/filterTypes';
4
- import { MatMenuTrigger } from '@angular/material/menu';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../classes/table-store";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "@angular/material/form-field";
9
- import * as i4 from "@angular/material/datepicker";
10
- import * as i5 from "@angular/material/radio";
11
- import * as i6 from "@angular/material/button";
12
- import * as i7 from "@angular/material/tooltip";
13
- import * as i8 from "@angular/material/input";
14
- import * as i9 from "@angular/material/menu";
15
- import * as i10 from "@angular/material/icon";
16
- import * as i11 from "@angular/forms";
17
- import * as i12 from "../../../utilities/directives/stop-propagation.directive";
18
- import * as i13 from "../filter/in-list/in-list-filter.component";
19
- export class HeaderMenuComponent {
20
- constructor(tableState) {
21
- this.tableState = tableState;
22
- this.FieldType = FieldType;
23
- this.FilterType = FilterType;
24
- }
25
- hideField(key) {
26
- this.tableState.hideColumn(key);
27
- }
28
- ngOnInit() {
29
- this.resetFilterType();
30
- }
31
- resetFilterType() {
32
- if (this.metaData.additional?.filterOptions?.filterableValues) {
33
- this.myFilterType = FilterType.In;
34
- return;
35
- }
36
- switch (this.metaData.fieldType) {
37
- case FieldType.String:
38
- case FieldType.Link:
39
- case FieldType.PhoneNumber:
40
- case FieldType.Array:
41
- case FieldType.Unknown:
42
- this.myFilterType = FilterType.StringContains;
43
- break;
44
- case FieldType.Currency:
45
- case FieldType.Number:
46
- this.myFilterType = FilterType.NumberEquals;
47
- break;
48
- case FieldType.Boolean:
49
- this.myFilterType = FilterType.BooleanEquals;
50
- break;
51
- case FieldType.Date:
52
- this.myFilterType = FilterType.DateIsOn;
53
- break;
54
- case FieldType.Enum:
55
- this.myFilterType = FilterType.In;
56
- break;
57
- }
58
- }
59
- setStringFilterType() {
60
- this.myFilterType = this.myFilterType === FilterType.StringContains ? FilterType.StringDoesNotContain : FilterType.StringContains;
61
- }
62
- setFilterType(filterType) {
63
- if (filterType === this.myFilterType) {
64
- this.resetFilterType();
65
- }
66
- else {
67
- this.myFilterType = filterType;
68
- }
69
- }
70
- onEnter(filter) {
71
- if (filter.filterValue != undefined && filter.filterType) {
72
- this.tableState.addFilter(filter);
73
- this.trigger.closeMenu();
74
- }
75
- }
76
- }
77
- HeaderMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: HeaderMenuComponent, deps: [{ token: i1.TableStore }], target: i0.ɵɵFactoryTarget.Component });
78
- HeaderMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: HeaderMenuComponent, selector: "tb-header-menu", inputs: { filter: "filter", metaData: "metaData" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"tableState.addGroupByKey(metaData.key)\">\r\n <mat-icon color=\"primary\">group</mat-icon>\r\n <span>Group By</span>\r\n </button>\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter style=\"display:block;padding: 0 16px\" name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font\" style=\"padding: 0 16px\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation style=\"padding: 0 16px\">\r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberLessThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberGreaterThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.NumberEquals)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div style=\"padding: 0 16px\">\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date\">\r\n <mat-form-field style=\"padding: 0 16px\" class=\"font auto-width\" stop-propagation >\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrAfter)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrBefore)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.DateIsOn)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}::ng-deep .form-field .mat-form-field-wrapper{padding-bottom:4px!important;padding-top:4px!important;margin-bottom:5px!important}.menu-icon{font-size:16px;line-height:16px!important;vertical-align:top!important}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}::ng-deep .form-field.mat-form-field-appearance-outline .mat-form-field-infix{padding:5px 0;width:auto}::ng-deep .auto-width .mat-form-field-infix{width:auto}.suffix-icons{font-size:14px;margin-left:6px}mat-icon.chosen-icon.mat-icon.suffix-icons,.chosen-icon{font-size:20px;color:green}mat-icon.mat-icon.suffix-icons.underline{-webkit-text-decoration:underline .1px solid;text-decoration:underline .1px solid;transform:scaleX(.7)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i4.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i5.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i8.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: i9.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i12.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "component", type: i13.InListFilterComponent, selector: "tb-in-list-filter , [tb-in-list-filter]", inputs: ["key"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: HeaderMenuComponent, decorators: [{
80
- type: Component,
81
- args: [{ selector: 'tb-header-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button mat-icon-button disableRipple [matMenuTriggerFor]=\"menu\" style=\"height:16px;\" [matMenuTriggerRestoreFocus]=\"false\">\r\n <mat-icon class=\"menu-icon\">more_vert</mat-icon>\r\n</button>\r\n<mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"tableState.addGroupByKey(metaData.key)\">\r\n <mat-icon color=\"primary\">group</mat-icon>\r\n <span>Group By</span>\r\n </button>\r\n <button mat-menu-item (click)=hideField(metaData.key)>\r\n <mat-icon color=\"primary\">visibility_off</mat-icon>\r\n <span>Hide Column</span>\r\n </button>\r\n <ng-form #myForm=\"ngForm\" [ngSwitch]=\"true\" (keydown.enter)=\"onEnter(myForm.value)\">\r\n <input type=\"hidden\" name=\"filterId\" [ngModel]=\"'header-column-' + metaData.key\" />\r\n <input type=\"hidden\" name=\"filterType\" [ngModel]=\"myFilterType\" />\r\n <input type=\"hidden\" name=\"key\" [ngModel]=\"metaData.key\" />\r\n <input type=\"hidden\" name=\"fieldType\" [ngModel]=\"metaData.fieldType\" />\r\n\r\n <ng-container *ngIf=\"(myFilterType === FilterType.Or || myFilterType === FilterType.In); else defaultFilter\">\r\n <tb-in-list-filter style=\"display:block;padding: 0 16px\" name='filterValue' [key]='metaData.key' [(ngModel)]='myFilterValue' >\r\n </tb-in-list-filter>\r\n </ng-container>\r\n\r\n\r\n <ng-template #defaultFilter>\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Link || metaData.fieldType === FieldType.String || metaData.fieldType === FieldType.Array || metaData.fieldType === FieldType.Unknown || metaData.fieldType === FieldType.PhoneNumber\">\r\n <mat-form-field stop-propagation class=\"font\" style=\"padding: 0 16px\">\r\n <mat-icon matPrefix class=\"search-icon\">search</mat-icon>\r\n <mat-label>{{myFilterType === FilterType.StringDoesNotContain ? 'Does Not Contain...' : 'Contains...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matSuffix [matTooltip]=\"myFilterType === FilterType.StringDoesNotContain ? 'Contains' : 'Does Not Contain'\">\r\n <button mat-icon-button color=\"primary\" (click)=\"setStringFilterType()\">\r\n <mat-icon [ngClass]=\"{'chosen-icon': myFilterType === FilterType.StringDoesNotContain }\">\r\n block\r\n </mat-icon>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Number || metaData.fieldType === FieldType.Currency\">\r\n <mat-form-field class=\"auto-width\" stop-propagation style=\"padding: 0 16px\">\r\n <mat-label>{{myFilterType === FilterType.NumberEquals ? 'Equals...' : myFilterType === FilterType.NumberLessThan ? 'Less Than...' : 'More Than...'}}</mat-label>\r\n <input matInput type='number' name=\"filterValue\" [ngModel]=\"filter.filterValue\" />\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberLessThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberLessThan }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.NumberGreaterThan)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberGreaterThan }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.NumberEquals)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.NumberEquals }\">\r\n =</span>\r\n </button>\r\n </span>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Boolean\">\r\n <div style=\"padding: 0 16px\">\r\n <label>\r\n <mat-icon class=\"search-icon\">filter_list</mat-icon>\r\n </label>\r\n <mat-radio-group stop-propagation #ctrl=\"matRadioGroup\" #boolField='ngModel' class=\"font\" name=\"filterValue\" [ngModel]=\"myFilterValue\" >\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = true;\" [value]=\"true\">True</mat-radio-button><br/>\r\n <mat-radio-button class=\"filter-radio-button\" (click)=\"myFilterValue = false\" [value]=\"false\">False</mat-radio-button><br/>\r\n </mat-radio-group>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"metaData.fieldType === FieldType.Date\">\r\n <mat-form-field style=\"padding: 0 16px\" class=\"font auto-width\" stop-propagation >\r\n <span matPrefix>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrAfter)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrAfter }\">\r\n arrow_forward_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <mat-icon (click)=\"setFilterType(FilterType.DateOnOrBefore)\" class=\"suffix-icons underline\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateOnOrBefore }\">\r\n arrow_back_ios</mat-icon>\r\n </button>\r\n <button mat-icon-button disableRipple>\r\n <span (click)=\"setFilterType(FilterType.DateIsOn)\" class=\"suffix-icons\"\r\n [ngClass]=\"{'chosen-icon': myFilterType === FilterType.DateIsOn }\">\r\n =</span>\r\n </button>\r\n </span>\r\n <mat-label>{{myFilterType === FilterType.DateIsOn ? 'On...' :\r\n myFilterType === FilterType.DateOnOrBefore ? 'On or Before...' : 'On or After...'}}</mat-label>\r\n <input matInput name=\"filterValue\" [ngModel]=\"filter.filterValue\" [matDatepicker]=\"calendar\"\r\n (click)=\"calendar.open()\"/>\r\n <mat-datepicker-toggle matSuffix [for]=\"calendar\" preventEnter></mat-datepicker-toggle>\r\n <mat-datepicker #calendar></mat-datepicker>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <button mat-button (click)=\"onEnter(myForm.value)\" [disabled]=\"myForm.value.filterValue == undefined\" disableRipple>\r\n Apply\r\n </button>\r\n </ng-form>\r\n</mat-menu>\r\n", styles: ["input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}::ng-deep .form-field .mat-form-field-wrapper{padding-bottom:4px!important;padding-top:4px!important;margin-bottom:5px!important}.menu-icon{font-size:16px;line-height:16px!important;vertical-align:top!important}.search-icon{margin-right:16px;vertical-align:middle;height:24px;color:#0000008a;font-size:21px;line-height:1.125}.font{font-size:14px}.filter-radio-button:first-of-type{padding-left:0}.filter-radio-button{padding:10px 40px;min-width:110px}::ng-deep .form-field.mat-form-field-appearance-outline .mat-form-field-infix{padding:5px 0;width:auto}::ng-deep .auto-width .mat-form-field-infix{width:auto}.suffix-icons{font-size:14px;margin-left:6px}mat-icon.chosen-icon.mat-icon.suffix-icons,.chosen-icon{font-size:20px;color:green}mat-icon.mat-icon.suffix-icons.underline{-webkit-text-decoration:underline .1px solid;text-decoration:underline .1px solid;transform:scaleX(.7)}\n"] }]
82
- }], ctorParameters: function () { return [{ type: i1.TableStore }]; }, propDecorators: { filter: [{
83
- type: Input
84
- }], metaData: [{
85
- type: Input
86
- }], trigger: [{
87
- type: ViewChild,
88
- args: [MatMenuTrigger]
89
- }] } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy9oZWFkZXItbWVudS9oZWFkZXItbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdGFibGUtYnVpbGRlci9jb21wb25lbnRzL2hlYWRlci1tZW51L2hlYWRlci1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXhELE1BQU0sT0FBTyxtQkFBbUI7SUFVOUIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVQxQyxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLGVBQVUsR0FBRyxVQUFVLENBQUM7SUFRcUIsQ0FBQztJQUU5QyxTQUFTLENBQUMsR0FBVztRQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFO1lBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1NBQ1I7UUFDRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQy9CLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUN0QixLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDcEIsS0FBSyxTQUFTLENBQUMsV0FBVyxDQUFDO1lBQzNCLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNyQixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUM7Z0JBQzlDLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDeEIsS0FBSyxTQUFTLENBQUMsTUFBTTtnQkFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO2dCQUM1QyxNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsT0FBTztnQkFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO2dCQUM3QyxNQUFNO1lBQ1YsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFDZixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLE1BQU07WUFDVixLQUFLLFNBQVMsQ0FBQyxJQUFJO2dCQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztJQUNwSSxDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQXNCO1FBQ2xDLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsTUFBa0I7UUFDeEIsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOztnSEFsRVUsbUJBQW1CO29HQUFuQixtQkFBbUIsbUpBU25CLGNBQWMsZ0RDdEIzQixzeE5BOEdBOzJGRGpHYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07aUdBUXRDLE1BQU07c0JBQWQsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNxQixPQUFPO3NCQUFqQyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgTWV0YURhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xyXG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvZmlsdGVyVHlwZXMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJJbmZvIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XHJcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLXN0b3JlJztcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGItaGVhZGVyLW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXItbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhlYWRlck1lbnVDb21wb25lbnQge1xyXG4gIEZpZWxkVHlwZSA9IEZpZWxkVHlwZTtcclxuICBGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZTtcclxuICBteUZpbHRlclR5cGUhOiBGaWx0ZXJUeXBlO1xyXG4gIG15RmlsdGVyVmFsdWU6IGFueTtcclxuXHJcbiAgQElucHV0KCkgZmlsdGVyITogUGFydGlhbDxGaWx0ZXJJbmZvPjtcclxuXHJcbiAgQElucHV0KCkgbWV0YURhdGEhOiBNZXRhRGF0YTtcclxuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKSB0cmlnZ2VyITogTWF0TWVudVRyaWdnZXI7XHJcbiAgY29uc3RydWN0b3IoIHB1YmxpYyB0YWJsZVN0YXRlOiBUYWJsZVN0b3JlKSB7fVxyXG5cclxuICBoaWRlRmllbGQoa2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGFibGVTdGF0ZS5oaWRlQ29sdW1uKGtleSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucmVzZXRGaWx0ZXJUeXBlKCk7XHJcbiAgfVxyXG5cclxuICByZXNldEZpbHRlclR5cGUoKSB7XHJcbiAgICBpZih0aGlzLm1ldGFEYXRhLmFkZGl0aW9uYWw/LmZpbHRlck9wdGlvbnM/LmZpbHRlcmFibGVWYWx1ZXMpIHtcclxuICAgICAgdGhpcy5teUZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkluO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0YURhdGEuZmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLlN0cmluZzpcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuTGluazpcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuUGhvbmVOdW1iZXI6XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLkFycmF5OlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZS5Vbmtub3duOlxyXG4gICAgICAgIHRoaXMubXlGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5TdHJpbmdDb250YWlucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuQ3VycmVuY3k6XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlLk51bWJlcjpcclxuICAgICAgICB0aGlzLm15RmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuTnVtYmVyRXF1YWxzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZS5Cb29sZWFuOlxyXG4gICAgICAgICAgdGhpcy5teUZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkJvb2xlYW5FcXVhbHM7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZTpcclxuICAgICAgICAgIHRoaXMubXlGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5EYXRlSXNPbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZS5FbnVtOlxyXG4gICAgICAgIHRoaXMubXlGaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5JbjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFN0cmluZ0ZpbHRlclR5cGUoKSB7XHJcbiAgICB0aGlzLm15RmlsdGVyVHlwZSA9IHRoaXMubXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLlN0cmluZ0NvbnRhaW5zID8gRmlsdGVyVHlwZS5TdHJpbmdEb2VzTm90Q29udGFpbiA6IEZpbHRlclR5cGUuU3RyaW5nQ29udGFpbnM7XHJcbiAgfVxyXG5cclxuICBzZXRGaWx0ZXJUeXBlKGZpbHRlclR5cGU6IEZpbHRlclR5cGUpIHtcclxuICAgIGlmIChmaWx0ZXJUeXBlID09PSB0aGlzLm15RmlsdGVyVHlwZSkge1xyXG4gICAgICB0aGlzLnJlc2V0RmlsdGVyVHlwZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5teUZpbHRlclR5cGUgPSBmaWx0ZXJUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FbnRlcihmaWx0ZXI6IEZpbHRlckluZm8pIHtcclxuICAgIGlmIChmaWx0ZXIuZmlsdGVyVmFsdWUgIT0gdW5kZWZpbmVkICYmIGZpbHRlci5maWx0ZXJUeXBlKSB7XHJcbiAgICAgIHRoaXMudGFibGVTdGF0ZS5hZGRGaWx0ZXIoZmlsdGVyKTtcclxuICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgc3R5bGU9XCJoZWlnaHQ6MTZweDtcIiBbbWF0TWVudVRyaWdnZXJSZXN0b3JlRm9jdXNdPVwiZmFsc2VcIj5cclxuICA8bWF0LWljb24gY2xhc3M9XCJtZW51LWljb25cIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidGFibGVTdGF0ZS5hZGRHcm91cEJ5S2V5KG1ldGFEYXRhLmtleSlcIj5cclxuICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5ncm91cDwvbWF0LWljb24+XHJcbiAgICA8c3Bhbj5Hcm91cCBCeTwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1oaWRlRmllbGQobWV0YURhdGEua2V5KT5cclxuICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj52aXNpYmlsaXR5X29mZjwvbWF0LWljb24+XHJcbiAgICA8c3Bhbj5IaWRlIENvbHVtbjwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICA8bmctZm9ybSAjbXlGb3JtPVwibmdGb3JtXCIgW25nU3dpdGNoXT1cInRydWVcIiAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyKG15Rm9ybS52YWx1ZSlcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsdGVySWRcIiAgW25nTW9kZWxdPVwiJ2hlYWRlci1jb2x1bW4tJyArIG1ldGFEYXRhLmtleVwiIC8+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImZpbHRlclR5cGVcIiAgW25nTW9kZWxdPVwibXlGaWx0ZXJUeXBlXCIgLz5cclxuICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwia2V5XCIgIFtuZ01vZGVsXT1cIm1ldGFEYXRhLmtleVwiIC8+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImZpZWxkVHlwZVwiICBbbmdNb2RlbF09XCJtZXRhRGF0YS5maWVsZFR5cGVcIiAvPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuT3IgfHwgbXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLkluKTsgZWxzZSBkZWZhdWx0RmlsdGVyXCI+XHJcbiAgICAgICAgICA8dGItaW4tbGlzdC1maWx0ZXIgIHN0eWxlPVwiZGlzcGxheTpibG9jaztwYWRkaW5nOiAwIDE2cHhcIiAgbmFtZT0nZmlsdGVyVmFsdWUnIFtrZXldPSdtZXRhRGF0YS5rZXknIFsobmdNb2RlbCldPSdteUZpbHRlclZhbHVlJyA+XHJcbiAgICAgICAgICA8L3RiLWluLWxpc3QtZmlsdGVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwibWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuTGluayB8fCBtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5TdHJpbmcgfHwgbWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkgfHwgbWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVW5rbm93biB8fCBtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5QaG9uZU51bWJlclwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0b3AtcHJvcGFnYXRpb24gY2xhc3M9XCJmb250XCIgc3R5bGU9XCJwYWRkaW5nOiAwIDE2cHhcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeCBjbGFzcz1cInNlYXJjaC1pY29uXCI+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e215RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5TdHJpbmdEb2VzTm90Q29udGFpbiA/ICdEb2VzIE5vdCBDb250YWluLi4uJyA6ICdDb250YWlucy4uLid9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT1cImZpbHRlclZhbHVlXCIgW25nTW9kZWxdPVwiZmlsdGVyLmZpbHRlclZhbHVlXCIgLz5cclxuICAgICAgICAgICAgPHNwYW4gbWF0U3VmZml4IFttYXRUb29sdGlwXT1cIm15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5TdHJpbmdEb2VzTm90Q29udGFpbiA/ICdDb250YWlucycgOiAnRG9lcyBOb3QgQ29udGFpbidcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2V0U3RyaW5nRmlsdGVyVHlwZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5TdHJpbmdEb2VzTm90Q29udGFpbiB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIGJsb2NrXHJcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5OdW1iZXIgfHwgbWV0YURhdGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQ3VycmVuY3lcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImF1dG8td2lkdGhcIiAgc3RvcC1wcm9wYWdhdGlvbiBzdHlsZT1cInBhZGRpbmc6IDAgMTZweFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7bXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLk51bWJlckVxdWFscyA/ICdFcXVhbHMuLi4nIDogbXlGaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLk51bWJlckxlc3NUaGFuID8gJ0xlc3MgVGhhbi4uLicgOiAnTW9yZSBUaGFuLi4uJ319PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSdudW1iZXInICBuYW1lPVwiZmlsdGVyVmFsdWVcIiBbbmdNb2RlbF09XCJmaWx0ZXIuZmlsdGVyVmFsdWVcIiAvPlxyXG4gICAgICAgICAgICA8c3BhbiBtYXRQcmVmaXg+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZVJpcHBsZT5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwic2V0RmlsdGVyVHlwZShGaWx0ZXJUeXBlLk51bWJlckxlc3NUaGFuKVwiIGNsYXNzPVwic3VmZml4LWljb25zXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5OdW1iZXJMZXNzVGhhbiB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIGFycm93X2JhY2tfaW9zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJzZXRGaWx0ZXJUeXBlKEZpbHRlclR5cGUuTnVtYmVyR3JlYXRlclRoYW4pXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5OdW1iZXJHcmVhdGVyVGhhbiB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIGFycm93X2ZvcndhcmRfaW9zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInNldEZpbHRlclR5cGUoRmlsdGVyVHlwZS5OdW1iZXJFcXVhbHMpXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaG9zZW4taWNvbic6IG15RmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5OdW1iZXJFcXVhbHMgfVwiPlxyXG4gICAgICAgICAgICAgICAgICA9PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5Cb29sZWFuXCI+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMCAxNnB4XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZWFyY2gtaWNvblwiPmZpbHRlcl9saXN0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBzdG9wLXByb3BhZ2F0aW9uICNjdHJsPVwibWF0UmFkaW9Hcm91cFwiICNib29sRmllbGQ9J25nTW9kZWwnIGNsYXNzPVwiZm9udFwiIG5hbWU9XCJmaWx0ZXJWYWx1ZVwiIFtuZ01vZGVsXT1cIm15RmlsdGVyVmFsdWVcIiA+XHJcbiAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJmaWx0ZXItcmFkaW8tYnV0dG9uXCIgKGNsaWNrKT1cIm15RmlsdGVyVmFsdWUgPSB0cnVlO1wiIFt2YWx1ZV09XCJ0cnVlXCI+VHJ1ZTwvbWF0LXJhZGlvLWJ1dHRvbj48YnIvPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwiZmlsdGVyLXJhZGlvLWJ1dHRvblwiIChjbGljayk9XCJteUZpbHRlclZhbHVlID0gZmFsc2VcIiBbdmFsdWVdPVwiZmFsc2VcIj5GYWxzZTwvbWF0LXJhZGlvLWJ1dHRvbj48YnIvPlxyXG4gICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJtZXRhRGF0YS5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5EYXRlXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJwYWRkaW5nOiAwIDE2cHhcIiBjbGFzcz1cImZvbnQgYXV0by13aWR0aFwiIHN0b3AtcHJvcGFnYXRpb24gPlxyXG4gICAgICAgICAgICA8c3BhbiBtYXRQcmVmaXg+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZVJpcHBsZT5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwic2V0RmlsdGVyVHlwZShGaWx0ZXJUeXBlLkRhdGVPbk9yQWZ0ZXIpXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnMgdW5kZXJsaW5lXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2hvc2VuLWljb24nOiBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZU9uT3JBZnRlciB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIGFycm93X2ZvcndhcmRfaW9zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlUmlwcGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJzZXRGaWx0ZXJUeXBlKEZpbHRlclR5cGUuRGF0ZU9uT3JCZWZvcmUpXCIgY2xhc3M9XCJzdWZmaXgtaWNvbnMgdW5kZXJsaW5lXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2hvc2VuLWljb24nOiBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZU9uT3JCZWZvcmUgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgYXJyb3dfYmFja19pb3M8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVSaXBwbGU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic2V0RmlsdGVyVHlwZShGaWx0ZXJUeXBlLkRhdGVJc09uKVwiIGNsYXNzPVwic3VmZml4LWljb25zXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2hvc2VuLWljb24nOiBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZUlzT24gfVwiPlxyXG4gICAgICAgICAgICAgICAgICA9PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZUlzT24gPyAnT24uLi4nIDpcclxuICAgICAgICAgICAgICBteUZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuRGF0ZU9uT3JCZWZvcmUgPyAnT24gb3IgQmVmb3JlLi4uJyA6ICdPbiBvciBBZnRlci4uLid9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT1cImZpbHRlclZhbHVlXCIgW25nTW9kZWxdPVwiZmlsdGVyLmZpbHRlclZhbHVlXCIgW21hdERhdGVwaWNrZXJdPVwiY2FsZW5kYXJcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYWxlbmRhci5vcGVuKClcIi8+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiY2FsZW5kYXJcIiBwcmV2ZW50RW50ZXI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjY2FsZW5kYXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvbkVudGVyKG15Rm9ybS52YWx1ZSlcIiBbZGlzYWJsZWRdPVwibXlGb3JtLnZhbHVlLmZpbHRlclZhbHVlID09IHVuZGVmaW5lZFwiIGRpc2FibGVSaXBwbGU+XHJcbiAgICAgIEFwcGx5XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L25nLWZvcm0+XHJcbjwvbWF0LW1lbnU+XHJcbiJdfQ==