@gipisistemas/ng-core 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (782) hide show
  1. package/assets/styles/colors.scss +261 -0
  2. package/assets/styles/layout-grid.scss +146 -0
  3. package/assets/styles/styles.scss +149 -0
  4. package/assets/styles/theme.scss +22 -0
  5. package/assets/styles/typography.scss +54 -0
  6. package/assets/styles/variable.scss +41 -0
  7. package/bundles/gipisistemas-ng-core.umd.js +28311 -0
  8. package/bundles/gipisistemas-ng-core.umd.js.map +1 -0
  9. package/bundles/gipisistemas-ng-core.umd.min.js +66 -0
  10. package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -0
  11. package/core/app-messages.d.ts +9 -0
  12. package/core/app.messages.d.ts +4 -0
  13. package/core/components/abstract-crud.component.d.ts +27 -0
  14. package/core/components/abstract-find.component.d.ts +43 -0
  15. package/core/components/abstract.component.d.ts +23 -0
  16. package/core/components/alert/alert.component.d.ts +7 -0
  17. package/core/core.module.d.ts +17 -0
  18. package/core/custom-breakpoints.d.ts +7 -0
  19. package/core/enums/local-time.enum.d.ts +5 -0
  20. package/core/extensions/string.extension.d.ts +3 -0
  21. package/core/gipi-components/components/abstract-crud.component.d.ts +25 -0
  22. package/core/gipi-components/components/abstract-find.component.d.ts +73 -0
  23. package/core/gipi-components/components/abstract.component.d.ts +38 -0
  24. package/core/gipi-components/decorators/autowired.decorator.d.ts +7 -0
  25. package/core/gipi-components/enums/sort-direction.enum.d.ts +5 -0
  26. package/core/gipi-components/interface/abstract-crud.interface.d.ts +5 -0
  27. package/core/gipi-components/interface/abstract-find.interface.d.ts +12 -0
  28. package/core/gipi-components/interface/abstract.interface.d.ts +11 -0
  29. package/core/gipi-components/interface/base-permission.interface.d.ts +9 -0
  30. package/core/gipi-components/models/abstract-filter.model.d.ts +9 -0
  31. package/core/gipi-components/models/abstract.model.d.ts +7 -0
  32. package/core/gipi-components/models/applied-filter.model.d.ts +9 -0
  33. package/core/gipi-components/models/dto/abstract.dto.d.ts +7 -0
  34. package/core/gipi-components/models/page-event.model.d.ts +18 -0
  35. package/core/gipi-components/models/page.model.d.ts +7 -0
  36. package/core/gipi-components/models/sort.model.d.ts +6 -0
  37. package/core/gipi-components/services/abstract-crud.service.d.ts +83 -0
  38. package/core/gipi-components/services/abstract.service.d.ts +19 -0
  39. package/core/gipi-components/services/base.service.d.ts +35 -0
  40. package/core/gipi-components/services/file.service.d.ts +6 -0
  41. package/core/gipi-components/services/session-storage.service.d.ts +8 -0
  42. package/core/gipi-components/types/generic.type.d.ts +1 -0
  43. package/core/gipi-components/types/uuid.type.d.ts +1 -0
  44. package/core/guards/auth.guard.d.ts +11 -0
  45. package/core/guards/permission.guard.d.ts +14 -0
  46. package/core/guards/public.guard.d.ts +11 -0
  47. package/core/interceptors/auth.interceptor.d.ts +9 -0
  48. package/core/interceptors/error.interceptor.d.ts +11 -0
  49. package/core/models/abstract.model.d.ts +3 -0
  50. package/core/models/archive.model.d.ts +4 -0
  51. package/core/models/authority.model.d.ts +3 -0
  52. package/core/models/base-user.model.d.ts +12 -0
  53. package/core/models/dto/abstract.dto.d.ts +2 -0
  54. package/core/models/dto/api-error.dto.d.ts +9 -0
  55. package/core/models/dto/api-sub-error.dto.d.ts +7 -0
  56. package/core/models/dto/chart.dto.d.ts +5 -0
  57. package/core/models/dto/confirmation.dto.d.ts +10 -0
  58. package/core/models/dto/dialog.dto.d.ts +36 -0
  59. package/core/models/dto/filter.dto.d.ts +8 -0
  60. package/core/models/dto/input-listbox.dto.d.ts +6 -0
  61. package/core/models/dto/menu.dto.d.ts +15 -0
  62. package/core/models/dto/message.dto.d.ts +7 -0
  63. package/core/models/dto/page.dto.d.ts +8 -0
  64. package/core/models/dto/sort.dto.d.ts +7 -0
  65. package/core/models/dto/tab.dto.d.ts +12 -0
  66. package/core/models/dto/table-column.dto.d.ts +21 -0
  67. package/core/models/dto/table-group-header.dto.d.ts +7 -0
  68. package/core/models/dto/table-page-event.dto.d.ts +6 -0
  69. package/core/models/dto/token.dto.d.ts +8 -0
  70. package/core/models/enums/criteria-operation.enum.d.ts +13 -0
  71. package/core/models/enums/criteria-sort-direction.enum.d.ts +4 -0
  72. package/core/models/enums/menu-type.enum.d.ts +6 -0
  73. package/core/models/enums/radio-button.enum.d.ts +6 -0
  74. package/core/models/enums/sort-direction.enum.d.ts +4 -0
  75. package/core/models/multitenant.model.d.ts +4 -0
  76. package/core/models/permission.model.d.ts +8 -0
  77. package/core/models/role.model.d.ts +7 -0
  78. package/core/pipes/local-time.pipe.d.ts +6 -0
  79. package/core/services/abstract-crud.service.d.ts +15 -0
  80. package/core/services/abstract-find.service.d.ts +30 -0
  81. package/core/services/abstract.service.d.ts +13 -0
  82. package/core/services/authentication.service.d.ts +23 -0
  83. package/core/services/breakpoint-observer.service.d.ts +9 -0
  84. package/core/services/confirmation.service.d.ts +8 -0
  85. package/core/services/dialog.service.d.ts +8 -0
  86. package/core/services/message.service.d.ts +8 -0
  87. package/core/services/nav.service.d.ts +16 -0
  88. package/core/services/svg-register.service.d.ts +22 -0
  89. package/core/types/local-time.type.d.ts +5 -0
  90. package/core/types/ng-class.type.d.ts +10 -0
  91. package/core/utils/array.util.d.ts +14 -0
  92. package/core/utils/browser.util.d.ts +4 -0
  93. package/core/utils/currency.util.d.ts +6 -0
  94. package/core/utils/date.util.d.ts +39 -0
  95. package/core/utils/document.util.d.ts +11 -0
  96. package/core/utils/email.util.d.ts +4 -0
  97. package/core/utils/number.util.d.ts +8 -0
  98. package/core/utils/object.util.d.ts +20 -0
  99. package/core/utils/password.util.d.ts +11 -0
  100. package/core/utils/phone.util.d.ts +13 -0
  101. package/core/utils/string.util.d.ts +9 -0
  102. package/core/utils/table-column-builder.d.ts +40 -0
  103. package/core/utils/time.util.d.ts +9 -0
  104. package/core/utils/url-params.util.d.ts +7 -0
  105. package/core/utils/uuid.util.d.ts +5 -0
  106. package/core/utils/zindex.util.d.ts +7 -0
  107. package/core.d.ts +88 -0
  108. package/esm2015/core/app-messages.js +1 -0
  109. package/esm2015/core/app.messages.js +12 -0
  110. package/esm2015/core/components/abstract-crud.component.js +97 -0
  111. package/esm2015/core/components/abstract-find.component.js +189 -0
  112. package/esm2015/core/components/abstract.component.js +110 -0
  113. package/esm2015/core/components/alert/alert.component.js +24 -0
  114. package/esm2015/core/core.module.js +103 -0
  115. package/esm2015/core/custom-breakpoints.js +87 -0
  116. package/esm2015/core/enums/local-time.enum.js +6 -0
  117. package/esm2015/core/extensions/string.extension.js +37 -0
  118. package/esm2015/core/gipi-components/components/abstract-crud.component.js +110 -0
  119. package/esm2015/core/gipi-components/components/abstract-find.component.js +471 -0
  120. package/esm2015/core/gipi-components/components/abstract.component.js +140 -0
  121. package/esm2015/core/gipi-components/decorators/autowired.decorator.js +47 -0
  122. package/esm2015/core/gipi-components/enums/sort-direction.enum.js +6 -0
  123. package/esm2015/core/gipi-components/interface/abstract-crud.interface.js +1 -0
  124. package/esm2015/core/gipi-components/interface/abstract-find.interface.js +1 -0
  125. package/esm2015/core/gipi-components/interface/abstract.interface.js +1 -0
  126. package/esm2015/core/gipi-components/interface/base-permission.interface.js +1 -0
  127. package/esm2015/core/gipi-components/models/abstract-filter.model.js +3 -0
  128. package/esm2015/core/gipi-components/models/abstract.model.js +3 -0
  129. package/esm2015/core/gipi-components/models/applied-filter.model.js +19 -0
  130. package/esm2015/core/gipi-components/models/dto/abstract.dto.js +3 -0
  131. package/esm2015/core/gipi-components/models/page-event.model.js +35 -0
  132. package/esm2015/core/gipi-components/models/page.model.js +7 -0
  133. package/esm2015/core/gipi-components/models/sort.model.js +7 -0
  134. package/esm2015/core/gipi-components/services/abstract-crud.service.js +109 -0
  135. package/esm2015/core/gipi-components/services/abstract.service.js +47 -0
  136. package/esm2015/core/gipi-components/services/base.service.js +102 -0
  137. package/esm2015/core/gipi-components/services/file.service.js +51 -0
  138. package/esm2015/core/gipi-components/services/session-storage.service.js +44 -0
  139. package/esm2015/core/gipi-components/types/generic.type.js +1 -0
  140. package/esm2015/core/gipi-components/types/uuid.type.js +1 -0
  141. package/esm2015/core/guards/auth.guard.js +48 -0
  142. package/esm2015/core/guards/permission.guard.js +61 -0
  143. package/esm2015/core/guards/public.guard.js +45 -0
  144. package/esm2015/core/interceptors/auth.interceptor.js +28 -0
  145. package/esm2015/core/interceptors/error.interceptor.js +110 -0
  146. package/esm2015/core/models/abstract.model.js +3 -0
  147. package/esm2015/core/models/archive.model.js +3 -0
  148. package/esm2015/core/models/authority.model.js +3 -0
  149. package/esm2015/core/models/base-user.model.js +8 -0
  150. package/esm2015/core/models/dto/abstract.dto.js +3 -0
  151. package/esm2015/core/models/dto/api-error.dto.js +8 -0
  152. package/esm2015/core/models/dto/api-sub-error.dto.js +4 -0
  153. package/esm2015/core/models/dto/chart.dto.js +4 -0
  154. package/esm2015/core/models/dto/confirmation.dto.js +8 -0
  155. package/esm2015/core/models/dto/dialog.dto.js +4 -0
  156. package/esm2015/core/models/dto/filter.dto.js +4 -0
  157. package/esm2015/core/models/dto/input-listbox.dto.js +7 -0
  158. package/esm2015/core/models/dto/menu.dto.js +9 -0
  159. package/esm2015/core/models/dto/message.dto.js +4 -0
  160. package/esm2015/core/models/dto/page.dto.js +9 -0
  161. package/esm2015/core/models/dto/sort.dto.js +9 -0
  162. package/esm2015/core/models/dto/tab.dto.js +10 -0
  163. package/esm2015/core/models/dto/table-column.dto.js +24 -0
  164. package/esm2015/core/models/dto/table-group-header.dto.js +10 -0
  165. package/esm2015/core/models/dto/table-page-event.dto.js +7 -0
  166. package/esm2015/core/models/dto/token.dto.js +4 -0
  167. package/esm2015/core/models/enums/criteria-operation.enum.js +15 -0
  168. package/esm2015/core/models/enums/criteria-sort-direction.enum.js +6 -0
  169. package/esm2015/core/models/enums/menu-type.enum.js +7 -0
  170. package/esm2015/core/models/enums/radio-button.enum.js +8 -0
  171. package/esm2015/core/models/enums/sort-direction.enum.js +6 -0
  172. package/esm2015/core/models/multitenant.model.js +4 -0
  173. package/esm2015/core/models/permission.model.js +11 -0
  174. package/esm2015/core/models/role.model.js +8 -0
  175. package/esm2015/core/pipes/local-time.pipe.js +21 -0
  176. package/esm2015/core/services/abstract-crud.service.js +24 -0
  177. package/esm2015/core/services/abstract-find.service.js +65 -0
  178. package/esm2015/core/services/abstract.service.js +30 -0
  179. package/esm2015/core/services/authentication.service.js +100 -0
  180. package/esm2015/core/services/breakpoint-observer.service.js +42 -0
  181. package/esm2015/core/services/confirmation.service.js +55 -0
  182. package/esm2015/core/services/dialog.service.js +41 -0
  183. package/esm2015/core/services/message.service.js +33 -0
  184. package/esm2015/core/services/nav.service.js +48 -0
  185. package/esm2015/core/services/svg-register.service.js +55 -0
  186. package/esm2015/core/types/local-time.type.js +1 -0
  187. package/esm2015/core/types/ng-class.type.js +1 -0
  188. package/esm2015/core/utils/array.util.js +110 -0
  189. package/esm2015/core/utils/browser.util.js +13 -0
  190. package/esm2015/core/utils/currency.util.js +21 -0
  191. package/esm2015/core/utils/date.util.js +257 -0
  192. package/esm2015/core/utils/document.util.js +153 -0
  193. package/esm2015/core/utils/email.util.js +25 -0
  194. package/esm2015/core/utils/number.util.js +28 -0
  195. package/esm2015/core/utils/object.util.js +199 -0
  196. package/esm2015/core/utils/password.util.js +38 -0
  197. package/esm2015/core/utils/phone.util.js +125 -0
  198. package/esm2015/core/utils/string.util.js +40 -0
  199. package/esm2015/core/utils/table-column-builder.js +85 -0
  200. package/esm2015/core/utils/time.util.js +59 -0
  201. package/esm2015/core/utils/url-params.util.js +12 -0
  202. package/esm2015/core/utils/uuid.util.js +17 -0
  203. package/esm2015/core/utils/zindex.util.js +35 -0
  204. package/esm2015/core.js +89 -0
  205. package/esm2015/gipi-components.js +105 -0
  206. package/esm2015/gipisistemas-ng-core.js +21 -0
  207. package/esm2015/public_api.js +4 -0
  208. package/esm2015/shared/api/generate-id-component.js +12 -0
  209. package/esm2015/shared/api/gipi-ng-config.js +76 -0
  210. package/esm2015/shared/api/overlay-message.js +1 -0
  211. package/esm2015/shared/api/throttle.js +60 -0
  212. package/esm2015/shared/api/translation.js +1 -0
  213. package/esm2015/shared/components/button/button.component.js +110 -0
  214. package/esm2015/shared/components/card/card.component.js +44 -0
  215. package/esm2015/shared/components/checkbox/checkbox.component.js +79 -0
  216. package/esm2015/shared/components/dom/connected-overlay-scroll-handler.js +27 -0
  217. package/esm2015/shared/components/dom/dom-handler.js +538 -0
  218. package/esm2015/shared/components/icon/icon.component.js +35 -0
  219. package/esm2015/shared/components/input/input.component.js +235 -0
  220. package/esm2015/shared/components/input-currency/input-currency.component.js +115 -0
  221. package/esm2015/shared/components/input-file/input-file.component.js +161 -0
  222. package/esm2015/shared/components/loading/loading.component.js +15 -0
  223. package/esm2015/shared/components/loading-overlay/loading-overlay.component.js +21 -0
  224. package/esm2015/shared/components/overlay-panel/overlay-panel.component.js +361 -0
  225. package/esm2015/shared/components/popover/popover-ref.js +25 -0
  226. package/esm2015/shared/components/popover/popover.component.js +34 -0
  227. package/esm2015/shared/components/popover/popover.service.js +85 -0
  228. package/esm2015/shared/components/radio-group-entity/radio-group-entity.component.js +74 -0
  229. package/esm2015/shared/components/radio-group-enum/radio-group-enum.component.js +126 -0
  230. package/esm2015/shared/components/select-button/select-button.component.js +181 -0
  231. package/esm2015/shared/components/select-entity/select-entity.component.js +262 -0
  232. package/esm2015/shared/components/select-entity-paged/select-entity-paged.component.js +419 -0
  233. package/esm2015/shared/components/select-entity-paged/shared/default-options.js +35 -0
  234. package/esm2015/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.js +69 -0
  235. package/esm2015/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.js +59 -0
  236. package/esm2015/shared/components/select-entity-paged/shared/select-no-entries-found.directive.js +20 -0
  237. package/esm2015/shared/components/select-entity-paged/shared/select-search/select-search.component.js +547 -0
  238. package/esm2015/shared/components/select-entity-paged/shared/select-search-clear.directive.js +18 -0
  239. package/esm2015/shared/components/select-enum/select-enum.component.js +117 -0
  240. package/esm2015/shared/components/select-month-period/select-month-period.component.js +87 -0
  241. package/esm2015/shared/components/slide-toggle/slide-toggle.component.js +75 -0
  242. package/esm2015/shared/components/stepper/stepper.component.js +32 -0
  243. package/esm2015/shared/components/tab/tab.component.js +57 -0
  244. package/esm2015/shared/components/tab-group/tab-group.component.js +117 -0
  245. package/esm2015/shared/components/table/table.component.js +523 -0
  246. package/esm2015/shared/components/table-scrolled/table-scrolled.component.js +105 -0
  247. package/esm2015/shared/components/textarea/textarea.component.js +156 -0
  248. package/esm2015/shared/directives/dynamic-tab.directive.js +18 -0
  249. package/esm2015/shared/directives/generic-template.directive.js +30 -0
  250. package/esm2015/shared/directives/input-select-infinite-scroll.directive.js +109 -0
  251. package/esm2015/shared/directives/lower-case.directive.js +47 -0
  252. package/esm2015/shared/directives/phone-mask.directive.js +60 -0
  253. package/esm2015/shared/directives/space-drop.directive.js +47 -0
  254. package/esm2015/shared/directives/upper-case.directive.js +47 -0
  255. package/esm2015/shared/gipi-components/abstract-form/abstract-form.component.js +119 -0
  256. package/esm2015/shared/gipi-components/action-row/action-row.component.js +30 -0
  257. package/esm2015/shared/gipi-components/badge/badge.component.js +44 -0
  258. package/esm2015/shared/gipi-components/button/button.component.js +251 -0
  259. package/esm2015/shared/gipi-components/chips/chips.component.js +149 -0
  260. package/esm2015/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.js +44 -0
  261. package/esm2015/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +324 -0
  262. package/esm2015/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.js +41 -0
  263. package/esm2015/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.js +35 -0
  264. package/esm2015/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.js +259 -0
  265. package/esm2015/shared/gipi-components/datepicker/datepicker/datepicker.component.js +218 -0
  266. package/esm2015/shared/gipi-components/datepicker/datepicker.module.js +130 -0
  267. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +341 -0
  268. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/calendar.js +397 -0
  269. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.js +325 -0
  270. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +329 -0
  271. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.js +41 -0
  272. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.js +61 -0
  273. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.js +159 -0
  274. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.js +35 -0
  275. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.js +555 -0
  276. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.js +14 -0
  277. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.js +303 -0
  278. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.js +179 -0
  279. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.js +51 -0
  280. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.js +124 -0
  281. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker.js +29 -0
  282. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/month-view.js +365 -0
  283. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.js +305 -0
  284. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.js +116 -0
  285. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.js +10 -0
  286. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.js +294 -0
  287. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.js +19 -0
  288. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.js +81 -0
  289. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/year-view.js +294 -0
  290. package/esm2015/shared/gipi-components/dom/connected-overlay-scroll-handler.js +27 -0
  291. package/esm2015/shared/gipi-components/dom/dom-handler.js +645 -0
  292. package/esm2015/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +185 -0
  293. package/esm2015/shared/gipi-components/expansion-panel/expansion-panel.component.js +81 -0
  294. package/esm2015/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.js +240 -0
  295. package/esm2015/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.js +92 -0
  296. package/esm2015/shared/gipi-components/footer/footer.component.js +29 -0
  297. package/esm2015/shared/gipi-components/form-field/form-field.component.js +262 -0
  298. package/esm2015/shared/gipi-components/helpful-tip/helpful-tip.component.js +62 -0
  299. package/esm2015/shared/gipi-components/infinite-scroll/infinite-scroll.directive.js +103 -0
  300. package/esm2015/shared/gipi-components/input-checkbox/input-checkbox.component.js +112 -0
  301. package/esm2015/shared/gipi-components/input-currency/input-currency.component.js +197 -0
  302. package/esm2015/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +408 -0
  303. package/esm2015/shared/gipi-components/input-select/input-select.component.js +655 -0
  304. package/esm2015/shared/gipi-components/input-select-enum/input-select-enum.component.js +311 -0
  305. package/esm2015/shared/gipi-components/input-select-listbox/input-select-listbox.component.js +422 -0
  306. package/esm2015/shared/gipi-components/input-select-paged/input-search/input-search.component.js +374 -0
  307. package/esm2015/shared/gipi-components/input-select-paged/input-select-paged.component.js +350 -0
  308. package/esm2015/shared/gipi-components/input-select-radio/input-select-radio.component.js +269 -0
  309. package/esm2015/shared/gipi-components/layout-grid/col.directive.js +161 -0
  310. package/esm2015/shared/gipi-components/layout-grid/row.directive.js +124 -0
  311. package/esm2015/shared/gipi-components/layout-grid/services/breakpoint.service.js +87 -0
  312. package/esm2015/shared/gipi-components/layout-grid/services/resize.service.js +64 -0
  313. package/esm2015/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.js +193 -0
  314. package/esm2015/shared/gipi-components/month-year-picker/mont-year-picker.module.js +47 -0
  315. package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +460 -0
  316. package/esm2015/shared/gipi-components/notification/notification.component.js +104 -0
  317. package/esm2015/shared/gipi-components/novelties/novelties.component.js +109 -0
  318. package/esm2015/shared/gipi-components/overlay/overlay.component.js +565 -0
  319. package/esm2015/shared/gipi-components/overlay/shared/overlay-service.js +21 -0
  320. package/esm2015/shared/gipi-components/overlay/shared/overlay_options.js +1 -0
  321. package/esm2015/shared/gipi-components/password-requeriments/password-requeriments.component.js +127 -0
  322. package/esm2015/shared/gipi-components/popover/popover.component.js +397 -0
  323. package/esm2015/shared/gipi-components/popover/shared/popover-animations.js +29 -0
  324. package/esm2015/shared/gipi-components/popover/shared/popover-errors.js +27 -0
  325. package/esm2015/shared/gipi-components/popover/shared/popover-interfaces.js +1 -0
  326. package/esm2015/shared/gipi-components/popover/shared/popover-target.js +19 -0
  327. package/esm2015/shared/gipi-components/popover/shared/popover-trigger.js +514 -0
  328. package/esm2015/shared/gipi-components/popover/shared/popover-types.js +1 -0
  329. package/esm2015/shared/gipi-components/radio-group/radio-group.component.js +143 -0
  330. package/esm2015/shared/gipi-components/range-page/range-page.component.js +254 -0
  331. package/esm2015/shared/gipi-components/range-slider/range-slider.component.js +345 -0
  332. package/esm2015/shared/gipi-components/select/select.component.js +211 -0
  333. package/esm2015/shared/gipi-components/select-button/select-button.component.js +187 -0
  334. package/esm2015/shared/gipi-components/sidebar/container/container.component.js +83 -0
  335. package/esm2015/shared/gipi-components/sidebar/sidenav/sidenav.component.js +240 -0
  336. package/esm2015/shared/gipi-components/stepper/stepper.component.js +37 -0
  337. package/esm2015/shared/gipi-components/table/components/table-body/table-body.component.js +203 -0
  338. package/esm2015/shared/gipi-components/table/components/table-footer/table-footer.component.js +30 -0
  339. package/esm2015/shared/gipi-components/table/components/table-header/table-header.component.js +152 -0
  340. package/esm2015/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.js +122 -0
  341. package/esm2015/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.js +225 -0
  342. package/esm2015/shared/gipi-components/table/components/table-pagination/shared/pagination-instance.js +1 -0
  343. package/esm2015/shared/gipi-components/table/components/table-pagination/shared/pagination.service.js +105 -0
  344. package/esm2015/shared/gipi-components/table/components/table-pagination/table-pagination.component.js +102 -0
  345. package/esm2015/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.js +30 -0
  346. package/esm2015/shared/gipi-components/table/models/pipe-transform.model.js +1 -0
  347. package/esm2015/shared/gipi-components/table/models/sort.model.js +19 -0
  348. package/esm2015/shared/gipi-components/table/models/sorted-column.model.js +2 -0
  349. package/esm2015/shared/gipi-components/table/models/table-column-builder.model.js +104 -0
  350. package/esm2015/shared/gipi-components/table/models/table-column.model.js +162 -0
  351. package/esm2015/shared/gipi-components/table/table.component.js +159 -0
  352. package/esm2015/shared/gipi-components/table/types/sort-direction.type.js +1 -0
  353. package/esm2015/shared/gipi-components/table/types/sort.type.js +1 -0
  354. package/esm2015/shared/gipi-components/template/template.directive.js +33 -0
  355. package/esm2015/shared/gipi-components/toolbar/toolbar.component.js +53 -0
  356. package/esm2015/shared/gipi-components/top-nav/top-nav.component.js +38 -0
  357. package/esm2015/shared/gipi-components/user-profile/user-profile.component.js +109 -0
  358. package/esm2015/shared/material.module.js +102 -0
  359. package/esm2015/shared/shared.module.js +339 -0
  360. package/esm2015/shared.js +36 -0
  361. package/esm5/core/app-messages.js +1 -0
  362. package/esm5/core/app.messages.js +12 -0
  363. package/esm5/core/components/abstract-crud.component.js +108 -0
  364. package/esm5/core/components/abstract-find.component.js +201 -0
  365. package/esm5/core/components/abstract.component.js +112 -0
  366. package/esm5/core/components/alert/alert.component.js +25 -0
  367. package/esm5/core/core.module.js +107 -0
  368. package/esm5/core/custom-breakpoints.js +87 -0
  369. package/esm5/core/enums/local-time.enum.js +6 -0
  370. package/esm5/core/extensions/string.extension.js +37 -0
  371. package/esm5/core/gipi-components/components/abstract-crud.component.js +122 -0
  372. package/esm5/core/gipi-components/components/abstract-find.component.js +507 -0
  373. package/esm5/core/gipi-components/components/abstract.component.js +152 -0
  374. package/esm5/core/gipi-components/decorators/autowired.decorator.js +52 -0
  375. package/esm5/core/gipi-components/enums/sort-direction.enum.js +6 -0
  376. package/esm5/core/gipi-components/interface/abstract-crud.interface.js +1 -0
  377. package/esm5/core/gipi-components/interface/abstract-find.interface.js +1 -0
  378. package/esm5/core/gipi-components/interface/abstract.interface.js +1 -0
  379. package/esm5/core/gipi-components/interface/base-permission.interface.js +1 -0
  380. package/esm5/core/gipi-components/models/abstract-filter.model.js +7 -0
  381. package/esm5/core/gipi-components/models/abstract.model.js +7 -0
  382. package/esm5/core/gipi-components/models/applied-filter.model.js +29 -0
  383. package/esm5/core/gipi-components/models/dto/abstract.dto.js +7 -0
  384. package/esm5/core/gipi-components/models/page-event.model.js +49 -0
  385. package/esm5/core/gipi-components/models/page.model.js +9 -0
  386. package/esm5/core/gipi-components/models/sort.model.js +9 -0
  387. package/esm5/core/gipi-components/services/abstract-crud.service.js +114 -0
  388. package/esm5/core/gipi-components/services/abstract.service.js +49 -0
  389. package/esm5/core/gipi-components/services/base.service.js +143 -0
  390. package/esm5/core/gipi-components/services/file.service.js +53 -0
  391. package/esm5/core/gipi-components/services/session-storage.service.js +45 -0
  392. package/esm5/core/gipi-components/types/generic.type.js +1 -0
  393. package/esm5/core/gipi-components/types/uuid.type.js +1 -0
  394. package/esm5/core/guards/auth.guard.js +50 -0
  395. package/esm5/core/guards/permission.guard.js +74 -0
  396. package/esm5/core/guards/public.guard.js +47 -0
  397. package/esm5/core/interceptors/auth.interceptor.js +29 -0
  398. package/esm5/core/interceptors/error.interceptor.js +129 -0
  399. package/esm5/core/models/abstract.model.js +7 -0
  400. package/esm5/core/models/archive.model.js +7 -0
  401. package/esm5/core/models/authority.model.js +7 -0
  402. package/esm5/core/models/base-user.model.js +13 -0
  403. package/esm5/core/models/dto/abstract.dto.js +7 -0
  404. package/esm5/core/models/dto/api-error.dto.js +13 -0
  405. package/esm5/core/models/dto/api-sub-error.dto.js +11 -0
  406. package/esm5/core/models/dto/chart.dto.js +11 -0
  407. package/esm5/core/models/dto/confirmation.dto.js +13 -0
  408. package/esm5/core/models/dto/dialog.dto.js +11 -0
  409. package/esm5/core/models/dto/filter.dto.js +11 -0
  410. package/esm5/core/models/dto/input-listbox.dto.js +11 -0
  411. package/esm5/core/models/dto/menu.dto.js +14 -0
  412. package/esm5/core/models/dto/message.dto.js +11 -0
  413. package/esm5/core/models/dto/page.dto.js +14 -0
  414. package/esm5/core/models/dto/sort.dto.js +14 -0
  415. package/esm5/core/models/dto/tab.dto.js +15 -0
  416. package/esm5/core/models/dto/table-column.dto.js +29 -0
  417. package/esm5/core/models/dto/table-group-header.dto.js +15 -0
  418. package/esm5/core/models/dto/table-page-event.dto.js +11 -0
  419. package/esm5/core/models/dto/token.dto.js +11 -0
  420. package/esm5/core/models/enums/criteria-operation.enum.js +15 -0
  421. package/esm5/core/models/enums/criteria-sort-direction.enum.js +6 -0
  422. package/esm5/core/models/enums/menu-type.enum.js +7 -0
  423. package/esm5/core/models/enums/radio-button.enum.js +8 -0
  424. package/esm5/core/models/enums/sort-direction.enum.js +6 -0
  425. package/esm5/core/models/multitenant.model.js +11 -0
  426. package/esm5/core/models/permission.model.js +16 -0
  427. package/esm5/core/models/role.model.js +13 -0
  428. package/esm5/core/pipes/local-time.pipe.js +26 -0
  429. package/esm5/core/services/abstract-crud.service.js +30 -0
  430. package/esm5/core/services/abstract-find.service.js +71 -0
  431. package/esm5/core/services/abstract.service.js +32 -0
  432. package/esm5/core/services/authentication.service.js +121 -0
  433. package/esm5/core/services/breakpoint-observer.service.js +52 -0
  434. package/esm5/core/services/confirmation.service.js +66 -0
  435. package/esm5/core/services/dialog.service.js +44 -0
  436. package/esm5/core/services/message.service.js +36 -0
  437. package/esm5/core/services/nav.service.js +51 -0
  438. package/esm5/core/services/svg-register.service.js +67 -0
  439. package/esm5/core/types/local-time.type.js +1 -0
  440. package/esm5/core/types/ng-class.type.js +1 -0
  441. package/esm5/core/utils/array.util.js +120 -0
  442. package/esm5/core/utils/browser.util.js +17 -0
  443. package/esm5/core/utils/currency.util.js +26 -0
  444. package/esm5/core/utils/date.util.js +269 -0
  445. package/esm5/core/utils/document.util.js +157 -0
  446. package/esm5/core/utils/email.util.js +29 -0
  447. package/esm5/core/utils/number.util.js +32 -0
  448. package/esm5/core/utils/object.util.js +204 -0
  449. package/esm5/core/utils/password.util.js +42 -0
  450. package/esm5/core/utils/phone.util.js +135 -0
  451. package/esm5/core/utils/string.util.js +44 -0
  452. package/esm5/core/utils/table-column-builder.js +87 -0
  453. package/esm5/core/utils/time.util.js +65 -0
  454. package/esm5/core/utils/url-params.util.js +16 -0
  455. package/esm5/core/utils/uuid.util.js +21 -0
  456. package/esm5/core/utils/zindex.util.js +35 -0
  457. package/esm5/core.js +89 -0
  458. package/esm5/gipi-components.js +105 -0
  459. package/esm5/gipisistemas-ng-core.js +21 -0
  460. package/esm5/public_api.js +4 -0
  461. package/esm5/shared/api/generate-id-component.js +16 -0
  462. package/esm5/shared/api/gipi-ng-config.js +77 -0
  463. package/esm5/shared/api/overlay-message.js +1 -0
  464. package/esm5/shared/api/throttle.js +60 -0
  465. package/esm5/shared/api/translation.js +1 -0
  466. package/esm5/shared/components/button/button.component.js +111 -0
  467. package/esm5/shared/components/card/card.component.js +45 -0
  468. package/esm5/shared/components/checkbox/checkbox.component.js +85 -0
  469. package/esm5/shared/components/dom/connected-overlay-scroll-handler.js +30 -0
  470. package/esm5/shared/components/dom/dom-handler.js +573 -0
  471. package/esm5/shared/components/icon/icon.component.js +38 -0
  472. package/esm5/shared/components/input/input.component.js +242 -0
  473. package/esm5/shared/components/input-currency/input-currency.component.js +121 -0
  474. package/esm5/shared/components/input-file/input-file.component.js +165 -0
  475. package/esm5/shared/components/loading/loading.component.js +18 -0
  476. package/esm5/shared/components/loading-overlay/loading-overlay.component.js +23 -0
  477. package/esm5/shared/components/overlay-panel/overlay-panel.component.js +366 -0
  478. package/esm5/shared/components/popover/popover-ref.js +28 -0
  479. package/esm5/shared/components/popover/popover.component.js +35 -0
  480. package/esm5/shared/components/popover/popover.service.js +88 -0
  481. package/esm5/shared/components/radio-group-entity/radio-group-entity.component.js +80 -0
  482. package/esm5/shared/components/radio-group-enum/radio-group-enum.component.js +138 -0
  483. package/esm5/shared/components/select-button/select-button.component.js +195 -0
  484. package/esm5/shared/components/select-entity/select-entity.component.js +269 -0
  485. package/esm5/shared/components/select-entity-paged/select-entity-paged.component.js +453 -0
  486. package/esm5/shared/components/select-entity-paged/shared/default-options.js +35 -0
  487. package/esm5/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.js +72 -0
  488. package/esm5/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.js +62 -0
  489. package/esm5/shared/components/select-entity-paged/shared/select-no-entries-found.directive.js +23 -0
  490. package/esm5/shared/components/select-entity-paged/shared/select-search/select-search.component.js +590 -0
  491. package/esm5/shared/components/select-entity-paged/shared/select-search-clear.directive.js +21 -0
  492. package/esm5/shared/components/select-enum/select-enum.component.js +124 -0
  493. package/esm5/shared/components/select-month-period/select-month-period.component.js +91 -0
  494. package/esm5/shared/components/slide-toggle/slide-toggle.component.js +81 -0
  495. package/esm5/shared/components/stepper/stepper.component.js +36 -0
  496. package/esm5/shared/components/tab/tab.component.js +58 -0
  497. package/esm5/shared/components/tab-group/tab-group.component.js +125 -0
  498. package/esm5/shared/components/table/table.component.js +538 -0
  499. package/esm5/shared/components/table-scrolled/table-scrolled.component.js +107 -0
  500. package/esm5/shared/components/textarea/textarea.component.js +174 -0
  501. package/esm5/shared/directives/dynamic-tab.directive.js +19 -0
  502. package/esm5/shared/directives/generic-template.directive.js +31 -0
  503. package/esm5/shared/directives/input-select-infinite-scroll.directive.js +113 -0
  504. package/esm5/shared/directives/lower-case.directive.js +48 -0
  505. package/esm5/shared/directives/phone-mask.directive.js +61 -0
  506. package/esm5/shared/directives/space-drop.directive.js +48 -0
  507. package/esm5/shared/directives/upper-case.directive.js +48 -0
  508. package/esm5/shared/gipi-components/abstract-form/abstract-form.component.js +141 -0
  509. package/esm5/shared/gipi-components/action-row/action-row.component.js +33 -0
  510. package/esm5/shared/gipi-components/badge/badge.component.js +46 -0
  511. package/esm5/shared/gipi-components/button/button.component.js +257 -0
  512. package/esm5/shared/gipi-components/chips/chips.component.js +159 -0
  513. package/esm5/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.js +46 -0
  514. package/esm5/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +378 -0
  515. package/esm5/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.js +42 -0
  516. package/esm5/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.js +40 -0
  517. package/esm5/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.js +291 -0
  518. package/esm5/shared/gipi-components/datepicker/datepicker/datepicker.component.js +252 -0
  519. package/esm5/shared/gipi-components/datepicker/datepicker.module.js +133 -0
  520. package/esm5/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +349 -0
  521. package/esm5/shared/gipi-components/datepicker/mat-datepicker/calendar.js +441 -0
  522. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.js +339 -0
  523. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +376 -0
  524. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.js +46 -0
  525. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.js +62 -0
  526. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.js +167 -0
  527. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.js +35 -0
  528. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.js +586 -0
  529. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.js +14 -0
  530. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.js +327 -0
  531. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.js +199 -0
  532. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.js +52 -0
  533. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.js +133 -0
  534. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker.js +34 -0
  535. package/esm5/shared/gipi-components/datepicker/mat-datepicker/month-view.js +384 -0
  536. package/esm5/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.js +324 -0
  537. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.js +118 -0
  538. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.js +10 -0
  539. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.js +300 -0
  540. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.js +19 -0
  541. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.js +82 -0
  542. package/esm5/shared/gipi-components/datepicker/mat-datepicker/year-view.js +313 -0
  543. package/esm5/shared/gipi-components/dom/connected-overlay-scroll-handler.js +30 -0
  544. package/esm5/shared/gipi-components/dom/dom-handler.js +681 -0
  545. package/esm5/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +191 -0
  546. package/esm5/shared/gipi-components/expansion-panel/expansion-panel.component.js +83 -0
  547. package/esm5/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.js +255 -0
  548. package/esm5/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.js +93 -0
  549. package/esm5/shared/gipi-components/footer/footer.component.js +32 -0
  550. package/esm5/shared/gipi-components/form-field/form-field.component.js +276 -0
  551. package/esm5/shared/gipi-components/helpful-tip/helpful-tip.component.js +68 -0
  552. package/esm5/shared/gipi-components/infinite-scroll/infinite-scroll.directive.js +106 -0
  553. package/esm5/shared/gipi-components/input-checkbox/input-checkbox.component.js +118 -0
  554. package/esm5/shared/gipi-components/input-currency/input-currency.component.js +207 -0
  555. package/esm5/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +426 -0
  556. package/esm5/shared/gipi-components/input-select/input-select.component.js +698 -0
  557. package/esm5/shared/gipi-components/input-select-enum/input-select-enum.component.js +351 -0
  558. package/esm5/shared/gipi-components/input-select-listbox/input-select-listbox.component.js +437 -0
  559. package/esm5/shared/gipi-components/input-select-paged/input-search/input-search.component.js +397 -0
  560. package/esm5/shared/gipi-components/input-select-paged/input-select-paged.component.js +384 -0
  561. package/esm5/shared/gipi-components/input-select-radio/input-select-radio.component.js +286 -0
  562. package/esm5/shared/gipi-components/layout-grid/col.directive.js +164 -0
  563. package/esm5/shared/gipi-components/layout-grid/row.directive.js +127 -0
  564. package/esm5/shared/gipi-components/layout-grid/services/breakpoint.service.js +90 -0
  565. package/esm5/shared/gipi-components/layout-grid/services/resize.service.js +68 -0
  566. package/esm5/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.js +200 -0
  567. package/esm5/shared/gipi-components/month-year-picker/mont-year-picker.module.js +50 -0
  568. package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +505 -0
  569. package/esm5/shared/gipi-components/notification/notification.component.js +106 -0
  570. package/esm5/shared/gipi-components/novelties/novelties.component.js +111 -0
  571. package/esm5/shared/gipi-components/overlay/overlay.component.js +670 -0
  572. package/esm5/shared/gipi-components/overlay/shared/overlay-service.js +22 -0
  573. package/esm5/shared/gipi-components/overlay/shared/overlay_options.js +1 -0
  574. package/esm5/shared/gipi-components/password-requeriments/password-requeriments.component.js +157 -0
  575. package/esm5/shared/gipi-components/popover/popover.component.js +473 -0
  576. package/esm5/shared/gipi-components/popover/shared/popover-animations.js +29 -0
  577. package/esm5/shared/gipi-components/popover/shared/popover-errors.js +21 -0
  578. package/esm5/shared/gipi-components/popover/shared/popover-interfaces.js +1 -0
  579. package/esm5/shared/gipi-components/popover/shared/popover-target.js +20 -0
  580. package/esm5/shared/gipi-components/popover/shared/popover-trigger.js +529 -0
  581. package/esm5/shared/gipi-components/popover/shared/popover-types.js +1 -0
  582. package/esm5/shared/gipi-components/radio-group/radio-group.component.js +155 -0
  583. package/esm5/shared/gipi-components/range-page/range-page.component.js +283 -0
  584. package/esm5/shared/gipi-components/range-slider/range-slider.component.js +364 -0
  585. package/esm5/shared/gipi-components/select/select.component.js +222 -0
  586. package/esm5/shared/gipi-components/select-button/select-button.component.js +206 -0
  587. package/esm5/shared/gipi-components/sidebar/container/container.component.js +96 -0
  588. package/esm5/shared/gipi-components/sidebar/sidenav/sidenav.component.js +267 -0
  589. package/esm5/shared/gipi-components/stepper/stepper.component.js +43 -0
  590. package/esm5/shared/gipi-components/table/components/table-body/table-body.component.js +209 -0
  591. package/esm5/shared/gipi-components/table/components/table-footer/table-footer.component.js +33 -0
  592. package/esm5/shared/gipi-components/table/components/table-header/table-header.component.js +155 -0
  593. package/esm5/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.js +123 -0
  594. package/esm5/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.js +228 -0
  595. package/esm5/shared/gipi-components/table/components/table-pagination/shared/pagination-instance.js +1 -0
  596. package/esm5/shared/gipi-components/table/components/table-pagination/shared/pagination.service.js +108 -0
  597. package/esm5/shared/gipi-components/table/components/table-pagination/table-pagination.component.js +116 -0
  598. package/esm5/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.js +33 -0
  599. package/esm5/shared/gipi-components/table/models/pipe-transform.model.js +1 -0
  600. package/esm5/shared/gipi-components/table/models/sort.model.js +29 -0
  601. package/esm5/shared/gipi-components/table/models/sorted-column.model.js +2 -0
  602. package/esm5/shared/gipi-components/table/models/table-column-builder.model.js +106 -0
  603. package/esm5/shared/gipi-components/table/models/table-column.model.js +252 -0
  604. package/esm5/shared/gipi-components/table/table.component.js +161 -0
  605. package/esm5/shared/gipi-components/table/types/sort-direction.type.js +1 -0
  606. package/esm5/shared/gipi-components/table/types/sort.type.js +1 -0
  607. package/esm5/shared/gipi-components/template/template.directive.js +34 -0
  608. package/esm5/shared/gipi-components/toolbar/toolbar.component.js +56 -0
  609. package/esm5/shared/gipi-components/top-nav/top-nav.component.js +40 -0
  610. package/esm5/shared/gipi-components/user-profile/user-profile.component.js +115 -0
  611. package/esm5/shared/material.module.js +101 -0
  612. package/esm5/shared/shared.module.js +340 -0
  613. package/esm5/shared.js +36 -0
  614. package/fesm2015/gipisistemas-ng-core.js +25879 -0
  615. package/fesm2015/gipisistemas-ng-core.js.map +1 -0
  616. package/fesm5/gipisistemas-ng-core.js +27905 -0
  617. package/fesm5/gipisistemas-ng-core.js.map +1 -0
  618. package/gipi-components.d.ts +97 -0
  619. package/gipisistemas-ng-core.d.ts +20 -0
  620. package/gipisistemas-ng-core.metadata.json +1 -0
  621. package/package.json +31 -83
  622. package/public_api.d.ts +3 -0
  623. package/shared/api/generate-id-component.d.ts +3 -0
  624. package/shared/api/gipi-ng-config.d.ts +18 -0
  625. package/shared/api/overlay-message.d.ts +14 -0
  626. package/shared/api/throttle.d.ts +17 -0
  627. package/shared/api/translation.d.ts +45 -0
  628. package/shared/components/button/button.component.d.ts +26 -0
  629. package/shared/components/card/card.component.d.ts +10 -0
  630. package/shared/components/checkbox/checkbox.component.d.ts +20 -0
  631. package/shared/components/dom/connected-overlay-scroll-handler.d.ts +9 -0
  632. package/shared/components/dom/dom-handler.d.ts +74 -0
  633. package/shared/components/icon/icon.component.d.ts +9 -0
  634. package/shared/components/input/input.component.d.ts +52 -0
  635. package/shared/components/input-currency/input-currency.component.d.ts +29 -0
  636. package/shared/components/input-file/input-file.component.d.ts +28 -0
  637. package/shared/components/loading/loading.component.d.ts +4 -0
  638. package/shared/components/loading-overlay/loading-overlay.component.d.ts +6 -0
  639. package/shared/components/overlay-panel/overlay-panel.component.d.ts +67 -0
  640. package/shared/components/popover/popover-ref.d.ts +17 -0
  641. package/shared/components/popover/popover.component.d.ts +10 -0
  642. package/shared/components/popover/popover.service.d.ts +23 -0
  643. package/shared/components/radio-group-entity/radio-group-entity.component.d.ts +19 -0
  644. package/shared/components/radio-group-enum/radio-group-enum.component.d.ts +30 -0
  645. package/shared/components/select-button/select-button.component.d.ts +35 -0
  646. package/shared/components/select-entity/select-entity.component.d.ts +52 -0
  647. package/shared/components/select-entity-paged/select-entity-paged.component.d.ts +78 -0
  648. package/shared/components/select-entity-paged/shared/default-options.d.ts +25 -0
  649. package/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.d.ts +18 -0
  650. package/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.d.ts +16 -0
  651. package/shared/components/select-entity-paged/shared/select-no-entries-found.directive.d.ts +11 -0
  652. package/shared/components/select-entity-paged/shared/select-search/select-search.component.d.ts +119 -0
  653. package/shared/components/select-entity-paged/shared/select-search-clear.directive.d.ts +9 -0
  654. package/shared/components/select-enum/select-enum.component.d.ts +29 -0
  655. package/shared/components/select-month-period/select-month-period.component.d.ts +20 -0
  656. package/shared/components/slide-toggle/slide-toggle.component.d.ts +19 -0
  657. package/shared/components/stepper/stepper.component.d.ts +7 -0
  658. package/shared/components/tab/tab.component.d.ts +14 -0
  659. package/shared/components/tab-group/tab-group.component.d.ts +22 -0
  660. package/shared/components/table/table.component.d.ts +86 -0
  661. package/shared/components/table-scrolled/table-scrolled.component.d.ts +31 -0
  662. package/shared/components/textarea/textarea.component.d.ts +35 -0
  663. package/shared/directives/dynamic-tab.directive.d.ts +5 -0
  664. package/shared/directives/generic-template.directive.d.ts +8 -0
  665. package/shared/directives/input-select-infinite-scroll.directive.d.ts +35 -0
  666. package/shared/directives/lower-case.directive.d.ts +9 -0
  667. package/shared/directives/phone-mask.directive.d.ts +8 -0
  668. package/shared/directives/space-drop.directive.d.ts +9 -0
  669. package/shared/directives/upper-case.directive.d.ts +9 -0
  670. package/shared/gipi-components/abstract-form/abstract-form.component.d.ts +21 -0
  671. package/shared/gipi-components/action-row/action-row.component.d.ts +5 -0
  672. package/shared/gipi-components/badge/badge.component.d.ts +8 -0
  673. package/shared/gipi-components/button/button.component.d.ts +56 -0
  674. package/shared/gipi-components/chips/chips.component.d.ts +37 -0
  675. package/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.d.ts +11 -0
  676. package/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.d.ts +71 -0
  677. package/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.d.ts +11 -0
  678. package/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.d.ts +6 -0
  679. package/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.d.ts +40 -0
  680. package/shared/gipi-components/datepicker/datepicker/datepicker.component.d.ts +49 -0
  681. package/shared/gipi-components/datepicker/datepicker.module.d.ts +2 -0
  682. package/shared/gipi-components/datepicker/mat-datepicker/calendar-body.d.ts +143 -0
  683. package/shared/gipi-components/datepicker/mat-datepicker/calendar.d.ts +152 -0
  684. package/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.d.ts +102 -0
  685. package/shared/gipi-components/datepicker/mat-datepicker/date-range-input.d.ts +124 -0
  686. package/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.d.ts +21 -0
  687. package/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.d.ts +45 -0
  688. package/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.d.ts +106 -0
  689. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.d.ts +16 -0
  690. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.d.ts +209 -0
  691. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.d.ts +9 -0
  692. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.d.ts +136 -0
  693. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.d.ts +68 -0
  694. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.d.ts +38 -0
  695. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.d.ts +39 -0
  696. package/shared/gipi-components/datepicker/mat-datepicker/datepicker.d.ts +11 -0
  697. package/shared/gipi-components/datepicker/mat-datepicker/month-view.d.ts +120 -0
  698. package/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.d.ts +85 -0
  699. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.d.ts +225 -0
  700. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.d.ts +20 -0
  701. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.d.ts +76 -0
  702. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.d.ts +9 -0
  703. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.d.ts +33 -0
  704. package/shared/gipi-components/datepicker/mat-datepicker/year-view.d.ts +97 -0
  705. package/shared/gipi-components/dom/connected-overlay-scroll-handler.d.ts +9 -0
  706. package/shared/gipi-components/dom/dom-handler.d.ts +85 -0
  707. package/shared/gipi-components/dropdown-menu/dropdown-menu.component.d.ts +36 -0
  708. package/shared/gipi-components/expansion-panel/expansion-panel.component.d.ts +16 -0
  709. package/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.d.ts +43 -0
  710. package/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.d.ts +13 -0
  711. package/shared/gipi-components/footer/footer.component.d.ts +5 -0
  712. package/shared/gipi-components/form-field/form-field.component.d.ts +61 -0
  713. package/shared/gipi-components/helpful-tip/helpful-tip.component.d.ts +13 -0
  714. package/shared/gipi-components/infinite-scroll/infinite-scroll.directive.d.ts +27 -0
  715. package/shared/gipi-components/input-checkbox/input-checkbox.component.d.ts +28 -0
  716. package/shared/gipi-components/input-currency/input-currency.component.d.ts +48 -0
  717. package/shared/gipi-components/input-monthpicker/input-monthpicker.component.d.ts +89 -0
  718. package/shared/gipi-components/input-select/input-select.component.d.ts +120 -0
  719. package/shared/gipi-components/input-select-enum/input-select-enum.component.d.ts +65 -0
  720. package/shared/gipi-components/input-select-listbox/input-select-listbox.component.d.ts +85 -0
  721. package/shared/gipi-components/input-select-paged/input-search/input-search.component.d.ts +77 -0
  722. package/shared/gipi-components/input-select-paged/input-select-paged.component.d.ts +66 -0
  723. package/shared/gipi-components/input-select-radio/input-select-radio.component.d.ts +53 -0
  724. package/shared/gipi-components/layout-grid/col.directive.d.ts +38 -0
  725. package/shared/gipi-components/layout-grid/row.directive.d.ts +28 -0
  726. package/shared/gipi-components/layout-grid/services/breakpoint.service.d.ts +30 -0
  727. package/shared/gipi-components/layout-grid/services/resize.service.d.ts +17 -0
  728. package/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.d.ts +37 -0
  729. package/shared/gipi-components/month-year-picker/mont-year-picker.module.d.ts +2 -0
  730. package/shared/gipi-components/month-year-picker/month-year-picker.component.d.ts +104 -0
  731. package/shared/gipi-components/notification/notification.component.d.ts +21 -0
  732. package/shared/gipi-components/novelties/novelties.component.d.ts +22 -0
  733. package/shared/gipi-components/overlay/overlay.component.d.ts +113 -0
  734. package/shared/gipi-components/overlay/shared/overlay-service.d.ts +6 -0
  735. package/shared/gipi-components/overlay/shared/overlay_options.d.ts +50 -0
  736. package/shared/gipi-components/password-requeriments/password-requeriments.component.d.ts +27 -0
  737. package/shared/gipi-components/popover/popover.component.d.ts +133 -0
  738. package/shared/gipi-components/popover/shared/popover-animations.d.ts +13 -0
  739. package/shared/gipi-components/popover/shared/popover-errors.d.ts +14 -0
  740. package/shared/gipi-components/popover/shared/popover-interfaces.d.ts +43 -0
  741. package/shared/gipi-components/popover/shared/popover-target.d.ts +5 -0
  742. package/shared/gipi-components/popover/shared/popover-trigger.d.ts +140 -0
  743. package/shared/gipi-components/popover/shared/popover-types.d.ts +4 -0
  744. package/shared/gipi-components/radio-group/radio-group.component.d.ts +33 -0
  745. package/shared/gipi-components/range-page/range-page.component.d.ts +55 -0
  746. package/shared/gipi-components/range-slider/range-slider.component.d.ts +57 -0
  747. package/shared/gipi-components/select/select.component.d.ts +45 -0
  748. package/shared/gipi-components/select-button/select-button.component.d.ts +39 -0
  749. package/shared/gipi-components/sidebar/container/container.component.d.ts +15 -0
  750. package/shared/gipi-components/sidebar/sidenav/sidenav.component.d.ts +40 -0
  751. package/shared/gipi-components/stepper/stepper.component.d.ts +8 -0
  752. package/shared/gipi-components/table/components/table-body/table-body.component.d.ts +36 -0
  753. package/shared/gipi-components/table/components/table-footer/table-footer.component.d.ts +5 -0
  754. package/shared/gipi-components/table/components/table-header/table-header.component.d.ts +28 -0
  755. package/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.d.ts +40 -0
  756. package/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.d.ts +81 -0
  757. package/shared/gipi-components/table/components/table-pagination/shared/pagination-instance.d.ts +24 -0
  758. package/shared/gipi-components/table/components/table-pagination/shared/pagination.service.d.ts +45 -0
  759. package/shared/gipi-components/table/components/table-pagination/table-pagination.component.d.ts +21 -0
  760. package/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.d.ts +5 -0
  761. package/shared/gipi-components/table/models/pipe-transform.model.d.ts +3 -0
  762. package/shared/gipi-components/table/models/sort.model.d.ts +10 -0
  763. package/shared/gipi-components/table/models/sorted-column.model.d.ts +6 -0
  764. package/shared/gipi-components/table/models/table-column-builder.model.d.ts +52 -0
  765. package/shared/gipi-components/table/models/table-column.model.d.ts +74 -0
  766. package/shared/gipi-components/table/table.component.d.ts +37 -0
  767. package/shared/gipi-components/table/types/sort-direction.type.d.ts +1 -0
  768. package/shared/gipi-components/table/types/sort.type.d.ts +1 -0
  769. package/shared/gipi-components/template/template.directive.d.ts +8 -0
  770. package/shared/gipi-components/toolbar/toolbar.component.d.ts +11 -0
  771. package/shared/gipi-components/top-nav/top-nav.component.d.ts +8 -0
  772. package/shared/gipi-components/user-profile/user-profile.component.d.ts +24 -0
  773. package/shared/material.module.d.ts +2 -0
  774. package/shared/shared.module.d.ts +6 -0
  775. package/shared.d.ts +35 -0
  776. package/README.md +0 -38
  777. package/_ITSS-NG-CI-CD.yml +0 -53
  778. package/_ITSS-NG-CI-PR.yml +0 -53
  779. package/angular-cli.json +0 -42
  780. package/azure-pipelines.yml +0 -35
  781. package/projects/itss-ng/ng-package.json +0 -7
  782. package/projects/itss-ng/package.json +0 -25
@@ -0,0 +1,523 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { animate, state, style, transition, trigger } from '@angular/animations';
3
+ import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';
4
+ import { MatPaginator, MatSort, MatTableDataSource } from '@angular/material';
5
+ import { of } from 'rxjs';
6
+ import { delay } from 'rxjs/operators';
7
+ import { ArrayUtil, ObjectUtil, StringUtil } from '../../../core';
8
+ import { TableGroupHeaderDTO } from '../../../core/models/dto/table-group-header.dto';
9
+ let TableComponent = class TableComponent {
10
+ constructor() {
11
+ this._expandedElements = [];
12
+ this._scrollHeightCalc = 410;
13
+ this._isPopoverHover = null;
14
+ this._displayedColumns = [];
15
+ this.shadow = false;
16
+ this.columns = [];
17
+ this.paginator = false;
18
+ this.backendPagination = true;
19
+ this.paginatorPageIndex = 0;
20
+ this.paginatorLength = 0;
21
+ this.paginatorPageSize = 10;
22
+ this.paginatorPageSizeOptions = [10, 20, 30];
23
+ this.showPageSizeOptions = false;
24
+ this.loading = false;
25
+ this.expandable = false;
26
+ this.showHeader = true;
27
+ this.headerSticky = false;
28
+ this.groupHeaderSticky = false;
29
+ this.groupStartExpanded = false;
30
+ this.infiniteScroll = false;
31
+ this.scrollDelay = 1000;
32
+ this.scrollOffset = 1000;
33
+ this.isFiltering = false;
34
+ this.showColumnExpandableFixed = false;
35
+ this.expandableOneRow = false;
36
+ this.ignoreChildrenExpandRow = false;
37
+ this.clearSort = false;
38
+ this.sortActive = '';
39
+ this.sortDirection = 'asc';
40
+ this.rowExpandedChange = new EventEmitter(true);
41
+ this.dataChange = new EventEmitter(true);
42
+ this.page = new EventEmitter();
43
+ this.rowHover = new EventEmitter();
44
+ }
45
+ get data() {
46
+ return this._dataValue;
47
+ }
48
+ set data(data) {
49
+ this._dataValue = data;
50
+ this.dataChange.emit(this._dataValue);
51
+ }
52
+ get matTableHeigth() {
53
+ let headerRowHeight;
54
+ if (!ObjectUtil.isNull(this._matHeaderRowRef)) {
55
+ headerRowHeight = this._matHeaderRowRef.elementRef.nativeElement.clientHeight;
56
+ }
57
+ let paginatorRowHeight;
58
+ const paginatorRef = this.backendPagination ? this._matBackendPaginatorRowRef : this._matFrontendPaginatorRowRef;
59
+ if (!ObjectUtil.isNull(paginatorRef)) {
60
+ paginatorRowHeight = paginatorRef.elementRef.nativeElement.clientHeight;
61
+ }
62
+ const matHeaderwHeight = headerRowHeight || 60;
63
+ const matPaginatorHeight = paginatorRowHeight || 57;
64
+ const pageSize = this.paginatorPageSize && (this.paginatorPageSize <= 10) ? this.paginatorPageSize : 10;
65
+ const setHeigth = this.headerSticky && (this.data.length > pageSize);
66
+ return of(setHeigth ? `${((57 * pageSize) + matHeaderwHeight + matPaginatorHeight)}px` : 'auto');
67
+ }
68
+ ngOnInit() { }
69
+ ngAfterViewInit() {
70
+ setTimeout(() => {
71
+ if (!ObjectUtil.isNull(this._dataSource)) {
72
+ this._dataSource.sort = this.matSort;
73
+ if (this.paginator && !this.backendPagination && !this.infiniteScroll) {
74
+ this._dataSource.paginator = this.matFrontendPaginator;
75
+ }
76
+ }
77
+ if (this.paginator && (this.backendPagination || this.infiniteScroll)) {
78
+ this.onPage({
79
+ pageSize: this.paginatorPageSize,
80
+ paginatorPageSizeOptions: this.paginatorPageSizeOptions,
81
+ pageIndex: 0,
82
+ length: 0,
83
+ previousPageIndex: 0
84
+ });
85
+ }
86
+ if (!ObjectUtil.isNull(this.actionsPopoverRef)) {
87
+ this._contextPopover = null;
88
+ this._isPopoverHover = false;
89
+ this.closePopover(0);
90
+ const popover = document.getElementById('table-popover');
91
+ if (!ObjectUtil.isNull(popover)) {
92
+ popover.style.visibility = 'hidden';
93
+ }
94
+ }
95
+ });
96
+ }
97
+ ngOnChanges(changes) {
98
+ setTimeout(() => {
99
+ if (changes.data) {
100
+ this._createDataSource();
101
+ }
102
+ });
103
+ }
104
+ _createDataSource() {
105
+ let columns = this.columns.filter(c => c.visible).map(c => c.property);
106
+ if (!ObjectUtil.isNull(this.expandedRef)) {
107
+ columns = ['expandedColumn', ...columns];
108
+ }
109
+ if (!ObjectUtil.isNull(this.actionsRef)) {
110
+ columns = [...columns, 'actionsColumn'];
111
+ }
112
+ this._displayedColumns = columns;
113
+ if (this.infiniteScroll) {
114
+ let dataAll = [];
115
+ if (!this.isFiltering) {
116
+ if (!ObjectUtil.isNull(this._dataSource)) {
117
+ dataAll = ArrayUtil.clone(this._dataSource.data);
118
+ }
119
+ }
120
+ if (!ArrayUtil.isEmpty(this.data)) {
121
+ dataAll.push(...this.data);
122
+ }
123
+ this._dataSource = new MatTableDataSource([]);
124
+ if (!StringUtil.isEmpty(this.groupByColumn) && !ObjectUtil.isNull(this.groupHeaderRef)) {
125
+ this._dataSource.data = this.genereteGroupsByColumn(dataAll);
126
+ }
127
+ else {
128
+ this._dataSource.data = dataAll;
129
+ }
130
+ this.data = dataAll;
131
+ this.dataChange.emit(this.data);
132
+ this.calcScrollHeight();
133
+ }
134
+ else {
135
+ this._dataSource = new MatTableDataSource([]);
136
+ if (!StringUtil.isEmpty(this.groupByColumn) && !ObjectUtil.isNull(this.groupHeaderRef)) {
137
+ this._dataSource.data = this.genereteGroupsByColumn(this.data);
138
+ }
139
+ else {
140
+ this._dataSource.data = this.data;
141
+ }
142
+ }
143
+ if (!ArrayUtil.isEmpty(this._dataSource.data)) {
144
+ this._dataSource.sort = this.matSort;
145
+ this.setSortingDataAccessor();
146
+ }
147
+ if (this.paginator && !this.backendPagination) {
148
+ this._dataSource.paginator = this.matFrontendPaginator;
149
+ }
150
+ if (!this.groupStartExpanded && (this.groupHeaderRef || (this.expandable && this.expandedRef)) && !ArrayUtil.isEmpty(this._dataSource.data)) {
151
+ this._dataSource.data.forEach(row => this.addCollapse(row));
152
+ }
153
+ }
154
+ calcScrollHeight() {
155
+ if ((this._dataSource && (this._dataSource.data.length > 0)) && (Math.floor(this._scrollHeightCalc) <= 700)) {
156
+ this._scrollHeightCalc = 130 + (this._dataSource.data.length * 48);
157
+ }
158
+ }
159
+ onPage(pageEvent) {
160
+ this.paginatorPageSize = pageEvent.pageSize;
161
+ pageEvent.paginatorPageSizeOptions = ArrayUtil.isEmpty(pageEvent.paginatorPageSizeOptions) ? this.paginatorPageSizeOptions : pageEvent.paginatorPageSizeOptions;
162
+ this.page.emit(pageEvent);
163
+ }
164
+ isExpansed(element) {
165
+ return this._expandedElements.filter(e => ObjectUtil.equals(e, element)).length > 0;
166
+ }
167
+ removeCollapse(element) {
168
+ if (this.expandableOneRow) {
169
+ this._dataSource.data.forEach(row => this.addCollapse(row));
170
+ }
171
+ const expandedElementsAux = ArrayUtil.clone(this._expandedElements);
172
+ expandedElementsAux.splice(this._expandedElements.indexOf(element), 1);
173
+ this._expandedElements = ArrayUtil.clone(expandedElementsAux);
174
+ }
175
+ addCollapse(element) {
176
+ const collapsedElement = this._expandedElements.filter(e => ObjectUtil.equals(e, element)).length > 0;
177
+ if (!collapsedElement) {
178
+ this._expandedElements.push(element);
179
+ }
180
+ }
181
+ rowExpandedChangeEmit(element) {
182
+ this.rowExpandedChange.emit(element);
183
+ }
184
+ sortData(sort) {
185
+ if (this.infiniteScroll) {
186
+ this.data = [];
187
+ this.dataChange.emit([]);
188
+ this._dataSource = new MatTableDataSource([]);
189
+ this.calcScrollHeight();
190
+ }
191
+ this.onPage({
192
+ pageSize: this.paginatorPageSize,
193
+ pageIndex: 0,
194
+ length: 0,
195
+ previousPageIndex: 0,
196
+ paginatorPageSizeOptions: this.paginatorPageSizeOptions,
197
+ sort: sort
198
+ });
199
+ }
200
+ showPopover(event, data) {
201
+ const popover = document.getElementById('table-popover');
202
+ if (!ObjectUtil.isNull(popover)) {
203
+ popover.style.visibility = 'hidden';
204
+ if (!this.loading) {
205
+ const domRectPopover = popover.getBoundingClientRect();
206
+ const domRectRow = event.currentTarget.getBoundingClientRect();
207
+ const cells = event.currentTarget.children;
208
+ if (domRectPopover && domRectRow) {
209
+ popover.style.visibility = 'visible';
210
+ popover.style.top = `${(domRectRow.top + domRectRow.height) - 1}px`;
211
+ let startPosition = 0;
212
+ let endPosition = 0;
213
+ if (this.columnInitial && (this.columnInitial >= 0)) {
214
+ if (!cells[this.columnInitial]) {
215
+ throw new Error('Initial column undefined or null');
216
+ }
217
+ startPosition = cells[this.columnInitial].getBoundingClientRect().left;
218
+ }
219
+ else {
220
+ startPosition = domRectRow.left;
221
+ }
222
+ if (this.columnFinal && (this.columnFinal >= 0)) {
223
+ if (!cells[this.columnFinal]) {
224
+ throw new Error('Final column undefined or null');
225
+ }
226
+ endPosition = cells[this.columnFinal].getBoundingClientRect().left - domRectPopover.width;
227
+ }
228
+ else {
229
+ endPosition = domRectRow.right - domRectPopover.width;
230
+ }
231
+ setTimeout(() => {
232
+ if (event.clientX > startPosition + 15 && event.clientX < endPosition) {
233
+ popover.style.left = `${event.clientX - 15}px`;
234
+ }
235
+ else if (event.clientX <= startPosition) {
236
+ popover.style.left = `${startPosition}px`;
237
+ }
238
+ else if (event.clientX >= endPosition) {
239
+ popover.style.left = `${endPosition}px`;
240
+ }
241
+ });
242
+ }
243
+ }
244
+ }
245
+ this.rowHover.emit(data);
246
+ this._contextPopover = data;
247
+ }
248
+ closePopover(time) {
249
+ of(null).pipe(delay(time)).subscribe(() => {
250
+ if (!ObjectUtil.isNull(this._isPopoverHover) && !this._isPopoverHover) {
251
+ if (!ObjectUtil.isNull(this._isPopoverHover) && !ObjectUtil.isNull(this.actionsPopoverRef)) {
252
+ const popover = document.getElementById('table-popover');
253
+ if (!ObjectUtil.isNull(popover)) {
254
+ popover.style.visibility = 'hidden';
255
+ }
256
+ }
257
+ this._contextPopover = null;
258
+ this._isPopoverHover = null;
259
+ }
260
+ });
261
+ }
262
+ setSortingDataAccessor() {
263
+ this._dataSource.sortingDataAccessor = (data, sortHeaderId) => {
264
+ if (typeof data[sortHeaderId] === 'string') {
265
+ return data[sortHeaderId].toLowerCase();
266
+ }
267
+ return data[sortHeaderId];
268
+ };
269
+ }
270
+ // group header
271
+ genereteGroupsByColumn(data) {
272
+ const groups = data.reduce((group, row) => {
273
+ const dataColumn = row[this.groupByColumn].toString();
274
+ if (!group[dataColumn]) {
275
+ group[dataColumn] = [];
276
+ }
277
+ group[dataColumn].push(row);
278
+ return group;
279
+ }, {});
280
+ return Object.keys(groups).map(groupValue => {
281
+ return new TableGroupHeaderDTO(groupValue, groups[groupValue], groups[groupValue].length);
282
+ });
283
+ }
284
+ getHighlightRow(row) {
285
+ if (!ObjectUtil.isNull(row)) {
286
+ if (!ObjectUtil.isNull(this.highlightRowFn)) {
287
+ return this.highlightRowFn(row);
288
+ }
289
+ return false;
290
+ }
291
+ return false;
292
+ }
293
+ getIndexRow(row) {
294
+ if (!ObjectUtil.isNull(this._dataSource) && !ArrayUtil.isEmpty(this._dataSource.data) && !ObjectUtil.isNull(row)) {
295
+ return this._dataSource.data.findIndex(r => r === row);
296
+ }
297
+ }
298
+ // infinite scroll
299
+ hasMore() {
300
+ return !this._dataSource || (this._dataSource.data.length < this.paginatorLength);
301
+ }
302
+ handleScroll(scrolled) {
303
+ if (scrolled && this.hasMore()) {
304
+ this.onPage({
305
+ pageSize: this.paginatorPageSize,
306
+ pageIndex: this.paginatorPageIndex,
307
+ length: this.paginatorLength,
308
+ previousPageIndex: this.paginatorPageIndex,
309
+ });
310
+ this.paginatorPageIndex += 1;
311
+ }
312
+ }
313
+ };
314
+ __decorate([
315
+ ViewChild(MatSort, { static: true }),
316
+ __metadata("design:type", MatSort)
317
+ ], TableComponent.prototype, "matSort", void 0);
318
+ __decorate([
319
+ ViewChild(MatPaginator, { static: true }),
320
+ __metadata("design:type", MatPaginator)
321
+ ], TableComponent.prototype, "matPaginator", void 0);
322
+ __decorate([
323
+ ViewChild('frontendPaginator', { static: false }),
324
+ __metadata("design:type", MatPaginator)
325
+ ], TableComponent.prototype, "matFrontendPaginator", void 0);
326
+ __decorate([
327
+ ViewChild('backendPaginator', { static: false }),
328
+ __metadata("design:type", MatPaginator)
329
+ ], TableComponent.prototype, "matBackendPaginator", void 0);
330
+ __decorate([
331
+ ViewChild('matHeaderRow', { static: true }),
332
+ __metadata("design:type", TemplateRef)
333
+ ], TableComponent.prototype, "_matHeaderRowRef", void 0);
334
+ __decorate([
335
+ ViewChild('frontendPaginator', { static: true }),
336
+ __metadata("design:type", TemplateRef)
337
+ ], TableComponent.prototype, "_matFrontendPaginatorRowRef", void 0);
338
+ __decorate([
339
+ ViewChild('backendPaginator', { static: true }),
340
+ __metadata("design:type", TemplateRef)
341
+ ], TableComponent.prototype, "_matBackendPaginatorRowRef", void 0);
342
+ __decorate([
343
+ ContentChild('actions', { static: false }),
344
+ __metadata("design:type", TemplateRef)
345
+ ], TableComponent.prototype, "actionsRef", void 0);
346
+ __decorate([
347
+ ContentChild('actionsPopover', { static: false }),
348
+ __metadata("design:type", TemplateRef)
349
+ ], TableComponent.prototype, "actionsPopoverRef", void 0);
350
+ __decorate([
351
+ ContentChild('footer', { static: false }),
352
+ __metadata("design:type", TemplateRef)
353
+ ], TableComponent.prototype, "footerRef", void 0);
354
+ __decorate([
355
+ ContentChild('expanded', { static: false }),
356
+ __metadata("design:type", TemplateRef)
357
+ ], TableComponent.prototype, "expandedRef", void 0);
358
+ __decorate([
359
+ ContentChild('groupHeader', { static: false }),
360
+ __metadata("design:type", TemplateRef)
361
+ ], TableComponent.prototype, "groupHeaderRef", void 0);
362
+ __decorate([
363
+ ContentChild('groupFooter', { static: false }),
364
+ __metadata("design:type", TemplateRef)
365
+ ], TableComponent.prototype, "groupFooterRef", void 0);
366
+ __decorate([
367
+ Input(),
368
+ __metadata("design:type", Boolean)
369
+ ], TableComponent.prototype, "shadow", void 0);
370
+ __decorate([
371
+ Input(),
372
+ __metadata("design:type", Array)
373
+ ], TableComponent.prototype, "columns", void 0);
374
+ __decorate([
375
+ Input(),
376
+ __metadata("design:type", Array),
377
+ __metadata("design:paramtypes", [Array])
378
+ ], TableComponent.prototype, "data", null);
379
+ __decorate([
380
+ Input(),
381
+ __metadata("design:type", Boolean)
382
+ ], TableComponent.prototype, "paginator", void 0);
383
+ __decorate([
384
+ Input(),
385
+ __metadata("design:type", Boolean)
386
+ ], TableComponent.prototype, "backendPagination", void 0);
387
+ __decorate([
388
+ Input(),
389
+ __metadata("design:type", Number)
390
+ ], TableComponent.prototype, "paginatorPageIndex", void 0);
391
+ __decorate([
392
+ Input(),
393
+ __metadata("design:type", Number)
394
+ ], TableComponent.prototype, "paginatorLength", void 0);
395
+ __decorate([
396
+ Input(),
397
+ __metadata("design:type", Number)
398
+ ], TableComponent.prototype, "paginatorPageSize", void 0);
399
+ __decorate([
400
+ Input(),
401
+ __metadata("design:type", Array)
402
+ ], TableComponent.prototype, "paginatorPageSizeOptions", void 0);
403
+ __decorate([
404
+ Input(),
405
+ __metadata("design:type", Boolean)
406
+ ], TableComponent.prototype, "showPageSizeOptions", void 0);
407
+ __decorate([
408
+ Input(),
409
+ __metadata("design:type", Boolean)
410
+ ], TableComponent.prototype, "loading", void 0);
411
+ __decorate([
412
+ Input(),
413
+ __metadata("design:type", Boolean)
414
+ ], TableComponent.prototype, "expandable", void 0);
415
+ __decorate([
416
+ Input(),
417
+ __metadata("design:type", Boolean)
418
+ ], TableComponent.prototype, "showHeader", void 0);
419
+ __decorate([
420
+ Input(),
421
+ __metadata("design:type", Number)
422
+ ], TableComponent.prototype, "columnInitial", void 0);
423
+ __decorate([
424
+ Input(),
425
+ __metadata("design:type", Number)
426
+ ], TableComponent.prototype, "columnFinal", void 0);
427
+ __decorate([
428
+ Input(),
429
+ __metadata("design:type", Boolean)
430
+ ], TableComponent.prototype, "headerSticky", void 0);
431
+ __decorate([
432
+ Input(),
433
+ __metadata("design:type", String)
434
+ ], TableComponent.prototype, "groupByColumn", void 0);
435
+ __decorate([
436
+ Input(),
437
+ __metadata("design:type", Boolean)
438
+ ], TableComponent.prototype, "groupHeaderSticky", void 0);
439
+ __decorate([
440
+ Input(),
441
+ __metadata("design:type", Boolean)
442
+ ], TableComponent.prototype, "groupStartExpanded", void 0);
443
+ __decorate([
444
+ Input(),
445
+ __metadata("design:type", Function)
446
+ ], TableComponent.prototype, "highlightRowFn", void 0);
447
+ __decorate([
448
+ Input(),
449
+ __metadata("design:type", Boolean)
450
+ ], TableComponent.prototype, "infiniteScroll", void 0);
451
+ __decorate([
452
+ Input(),
453
+ __metadata("design:type", Number)
454
+ ], TableComponent.prototype, "scrollDelay", void 0);
455
+ __decorate([
456
+ Input(),
457
+ __metadata("design:type", Number)
458
+ ], TableComponent.prototype, "scrollOffset", void 0);
459
+ __decorate([
460
+ Input(),
461
+ __metadata("design:type", Number)
462
+ ], TableComponent.prototype, "scrollHeigth", void 0);
463
+ __decorate([
464
+ Input(),
465
+ __metadata("design:type", Boolean)
466
+ ], TableComponent.prototype, "isFiltering", void 0);
467
+ __decorate([
468
+ Input('columnExpandableFixed'),
469
+ __metadata("design:type", Boolean)
470
+ ], TableComponent.prototype, "showColumnExpandableFixed", void 0);
471
+ __decorate([
472
+ Input(),
473
+ __metadata("design:type", Boolean)
474
+ ], TableComponent.prototype, "expandableOneRow", void 0);
475
+ __decorate([
476
+ Input(),
477
+ __metadata("design:type", Boolean)
478
+ ], TableComponent.prototype, "ignoreChildrenExpandRow", void 0);
479
+ __decorate([
480
+ Input(),
481
+ __metadata("design:type", Boolean)
482
+ ], TableComponent.prototype, "clearSort", void 0);
483
+ __decorate([
484
+ Input(),
485
+ __metadata("design:type", String)
486
+ ], TableComponent.prototype, "sortActive", void 0);
487
+ __decorate([
488
+ Input(),
489
+ __metadata("design:type", String)
490
+ ], TableComponent.prototype, "sortDirection", void 0);
491
+ __decorate([
492
+ Output(),
493
+ __metadata("design:type", EventEmitter)
494
+ ], TableComponent.prototype, "rowExpandedChange", void 0);
495
+ __decorate([
496
+ Output(),
497
+ __metadata("design:type", EventEmitter)
498
+ ], TableComponent.prototype, "dataChange", void 0);
499
+ __decorate([
500
+ Output(),
501
+ __metadata("design:type", EventEmitter)
502
+ ], TableComponent.prototype, "page", void 0);
503
+ __decorate([
504
+ Output(),
505
+ __metadata("design:type", EventEmitter)
506
+ ], TableComponent.prototype, "rowHover", void 0);
507
+ TableComponent = __decorate([
508
+ Component({
509
+ selector: 'itss-table',
510
+ template: "<div [class.box-shadow]=\"shadow\"\n [style.height]=\"(matTableHeigth | async)\"\n style=\"background: transparent !important;\"\n fxLayout=\"column\"\n fxFlex>\n\n <itss-table-scrolled [more]=\"hasMore()\"\n [scrollOffset]=\"scrollOffset\"\n [scrollDelay]=\"scrollDelay\"\n (scrolled)=\"handleScroll($event)\"\n [ngStyle]=\"{'flex-basis': scrollHeigth ? scrollHeigth + 'px' : _scrollHeightCalc + 'px' }\"\n *ngIf=\"infiniteScroll; else table\">\n <ng-template *ngTemplateOutlet=\"table\"> </ng-template>\n </itss-table-scrolled>\n\n <ng-template #table>\n <mat-table matSort\n multiTemplateDataRows\n [dataSource]=\"_dataSource\"\n [matSortDisabled]=\"!clearSort\"\n [matSortDisableClear]=\"!clearSort\"\n [matSortActive]=\"sortActive\"\n [matSortDirection]=\"sortDirection?.toLocaleLowerCase()\"\n (matSortChange)=\"sortData($event)\"\n (mouseleave)=\"_isPopoverHover = false; closePopover(0)\">\n\n <ng-container *ngIf=\"expandedRef\"\n cdkColumnDef=\"expandedColumn\">\n <mat-header-cell fxFlex=\"5\"\n fxLayoutAlign=\"end center\"\n *cdkHeaderCellDef>\n </mat-header-cell>\n <mat-cell fxFlex=\"5\"\n fxLayoutAlign=\"end center\"\n *cdkCellDef=\"let row\">\n <itss-button [icon]=\"isExpansed(row) ? 'chevron_right' : 'expand_more'\"\n *ngIf=\"((row?.children) && (row.children.length > 0)) || (row?.expandable) || showColumnExpandableFixed\"\n color=\"primary\"\n type=\"icon\"\n tooltip=\"Expandir | Retrair\"\n (click)=\"(isExpansed(row) ? removeCollapse(row) : addCollapse(row)); rowExpandedChangeEmit(row)\">\n </itss-button>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let column of columns\"\n [cdkColumnDef]=\"column.property\">\n <div *ngIf=\"column.sortable\">\n <mat-header-cell [fxFlex]=\"column.width | async\"\n [fxLayoutAlign]=\"column.align\"\n [ngStyle]=\"{'padding-left': column.sortable && column.align !== '' && (column.align.toLowerCase() === 'center' || column.align.toLowerCase() === 'center center') ? '15px' : '' }\"\n [style.padding-left.px]=\"column.marginLeft | async\"\n [style.padding-right.px]=\"column.marginRight | async\"\n *cdkHeaderCellDef\n mat-sort-header>\n {{ column.name }}\n </mat-header-cell>\n </div>\n <div *ngIf=\"!column.sortable\">\n <mat-header-cell [fxFlex]=\"column.width | async\"\n [fxHide.lt-md]=\"column.hiddenSm\"\n [fxLayoutAlign]=\"column.align\"\n [style.padding-left.px]=\"column.marginLeft | async\"\n [style.padding-right.px]=\"column.marginRight | async\"\n *cdkHeaderCellDef>\n <ng-container *ngIf=\"column.name; else templateHeader\">\n {{ column.name }}\n </ng-container>\n\n <ng-template #templateHeader>\n <ng-container *ngIf=\"column.templateHeader\">\n <ng-container [ngTemplateOutlet]=\"column.templateHeader\"\n [ngTemplateOutletContext]=\"{$implicit: data}\">\n </ng-container>\n </ng-container>\n </ng-template>\n </mat-header-cell>\n </div>\n <mat-cell [fxFlex]=\"column.width | async\"\n [fxHide.lt-md]=\"column.hiddenSm\"\n [fxHide]=\"!column.visible\"\n [fxLayoutAlign]=\"column.align\"\n [class.mat-cell-pointer]=\"column.action\"\n [style.padding-left.px]=\"column.marginLeft | async\"\n [style.padding-right.px]=\"column.marginRight | async\"\n (click)=\"column.action ? column.action(row) : null\"\n *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"column.value; else template\">\n {{ (column.value(row) && (column.value(row).length > (column.sliceLength ? column.sliceLength :\n 50)))\n ? (column.value(row) | slice:0:(column.sliceLength ? column.sliceLength : 50)) + '...'\n : column.value(row) }}\n </ng-container>\n\n <ng-template #template>\n <ng-container *ngIf=\"column.template\">\n <ng-container [ngTemplateOutlet]=\"column.template\"\n [ngTemplateOutletContext]=\"{$implicit: row}\">\n </ng-container>\n </ng-container>\n </ng-template>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"actionsRef\"\n cdkColumnDef=\"actionsColumn\">\n <mat-header-cell fxFlex.gt-md=\"15\"\n fxLayoutAlign=\"center center\"\n *cdkHeaderCellDef>\n A\u00E7\u00F5es\n </mat-header-cell>\n <mat-cell fxFlex=\"15\"\n fxLayoutAlign=\"center center\"\n *cdkCellDef=\"let row\">\n <ng-template [ngTemplateOutlet]=\"actionsRef\"\n [ngTemplateOutletContext]=\"{$implicit: row}\">\n </ng-template>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"expandedRef\"\n matColumnDef=\"expandedDetail\">\n <mat-cell *matCellDef=\"let row\"\n fxFlexFill\n class=\"cell-element-detail\">\n <div class=\"element-detail\"\n *ngIf=\"!ignoreChildrenExpandRow ? (row.children.length > 0) : ignoreChildrenExpandRow\"\n [ngClass]=\"{'collapsed': isExpansed(row), 'expanded': !isExpansed(row)}\">\n <ng-template [ngTemplateOutlet]=\"expandedRef\"\n [ngTemplateOutletContext]=\"{$implicit: row}\">\n </ng-template>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n matColumnDef=\"groupHeader\">\n <mat-cell fxFlex\n [attr.colspan]=\"columns.length\"\n *matCellDef=\"let rowGroup\"\n style=\"cursor: pointer;\"\n [class.group-header-cell-expanded]=\"!isExpansed(rowGroup)\"\n [class.group-header-cell-collapsed]=\"isExpansed(rowGroup)\"\n (click)=\"isExpansed(rowGroup) ? removeCollapse(rowGroup) : addCollapse(rowGroup)\">\n <div class=\"group-header-cell\">\n <itss-button *ngIf=\"rowGroup.childrenGroup.length > 0\"\n [icon]=\"isExpansed(rowGroup) ? 'chevron_right' : 'expand_more'\"\n style.margin-right=\"1.25rem\"\n color=\"primary\"\n type=\"icon\"\n tooltip=\"Expandir | Retrair\"\n (click)=\"isExpansed(rowGroup) ? removeCollapse(rowGroup) : addCollapse(rowGroup)\">\n </itss-button>\n\n <ng-template [ngTemplateOutlet]=\"groupHeaderRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n </ng-template>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n matColumnDef=\"expandedGroupHeader\">\n <mat-cell *matCellDef=\"let rowGroup\"\n fxFlexFill>\n <div class=\"element-detail\"\n *ngIf=\"rowGroup.childrenGroup.length > 0\"\n [ngClass]=\"{'collapsed': isExpansed(rowGroup), 'expanded': !isExpansed(rowGroup)}\">\n\n <itss-table *ngIf=\"rowGroup.childrenGroup.length > 0; else noChildrenGroup\"\n [paginator]=\"false\"\n [shadow]=\"false\"\n [showHeader]=\"false\"\n [columns]=\"columns\"\n [data]=\"rowGroup.childrenGroup\"\n class=\"table-level-1\"\n fxFlexFill>\n <ng-template #footer\n *ngIf=\"groupByColumn && groupHeaderRef && groupFooterRef\">\n <ng-template [ngTemplateOutlet]=\"groupFooterRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n </ng-template>\n </ng-template>\n </itss-table>\n\n <ng-template #noChildrenGroup>\n <div *ngIf=\"!loading\"\n class=\"no-records\">\n <mat-icon>sentiment_very_dissatisfied</mat-icon>\n <span>Nenhum registro foi encontrado</span>\n </div>\n </ng-template>\n </div>\n </mat-cell>\n </ng-container>\n\n <mat-header-row #matHeaderRow\n (mouseenter)=\"_isPopoverHover = false; closePopover(0)\"\n *matHeaderRowDef=\"_displayedColumns; sticky: headerSticky || groupHeaderSticky\"\n [ngClass]=\"{ 'hidden-header': !showHeader }\">\n </mat-header-row>\n\n <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row (mouseover)=\"rowHover.emit(row)\"\n *matRowDef=\"let row; columns: _displayedColumns;\"\n [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && !expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row #rowTemplate\n *matRowDef=\"let row; columns: _displayedColumns;\"\n class=\"element-row\"\n (mousemove)=\"showPopover($event, row)\"\n [class.hoversimulator]=\"_contextPopover === row\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row *matRowDef=\"let row; columns: _displayedColumns;\"\n class=\"element-row\"\n (mouseover)=\"rowHover.emit(row)\"\n [class.expanded-row]=\"_expandedElement === row\"\n [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n\n <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n class=\"detail-row\"\n [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row #rowTemplate\n *matRowDef=\"let row; columns: _displayedColumns;\"\n class=\"element-row\"\n (mousemove)=\"showPopover($event, row)\"\n [class.hoversimulator]=\"_contextPopover === row\"\n [class.expanded-row]=\"_expandedElement === row\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n\n <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n class=\"detail-row\"\n [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && groupByColumn && groupHeaderRef\">\n <mat-row *matRowDef=\"let row; columns: ['groupHeader'];\"\n class=\"element-row\"\n (mouseover)=\"rowHover.emit(row)\"\n [class.expanded-row]=\"_expandedElement === row\"\n [class.group-header-sticky]=\"groupHeaderSticky\"\n [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n\n <mat-row *matRowDef=\"let row; columns: ['expandedGroupHeader'];\"\n class=\"detail-row\"\n [attr.id]=\"'row_group'+ getIndexRow(row)\">\n </mat-row>\n </div>\n </mat-table>\n\n <mat-progress-bar mode=\"indeterminate\"\n color=\"accent\"\n *ngIf=\"loading\">\n </mat-progress-bar>\n\n <div *ngIf=\"!loading && (data && (data.length > 0)) && footerRef\"\n class=\"footer-row\"\n fxLayout=\"column\"\n fxLayoutGap=\"10px\">\n <ng-template [ngTemplateOutlet]=\"footerRef\"\n [ngTemplateOutletContext]=\"{$implicit: data}\">\n </ng-template>\n </div>\n\n <div *ngIf=\"!loading && (data && (data.length <= 0))\"\n class=\"no-records\">\n <mat-icon>sentiment_very_dissatisfied</mat-icon>\n <span>Nenhum registro foi encontrado</span>\n </div>\n\n <ng-container *ngIf=\"!loading && paginator && (data && (data.length > 0))\">\n <ng-container #backendPaginatorTemplate\n *ngIf=\"backendPagination && !infiniteScroll\">\n <mat-paginator #backendPaginator\n [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n [length]=\"paginatorLength\"\n [pageIndex]=\"paginatorPageIndex\"\n [pageSize]=\"paginatorPageSize\"\n [pageSizeOptions]=\"paginatorPageSizeOptions\"\n (page)=\"onPage($event)\"\n (mouseenter)=\"closePopover(0)\"\n showFirstLastButtons>\n </mat-paginator>\n </ng-container>\n\n <ng-container #frontendPaginatorTemplate\n *ngIf=\"!backendPagination && !infiniteScroll\">\n <mat-paginator #frontendPaginator\n [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n [length]=\"paginatorLength\"\n [pageIndex]=\"paginatorPageIndex\"\n [pageSize]=\"paginatorPageSize\"\n [pageSizeOptions]=\"paginatorPageSizeOptions\"\n (page)=\"onPage($event)\"\n showFirstLastButtons>\n </mat-paginator>\n </ng-container>\n </ng-container>\n\n <ng-container #infiniteScrollPaginatorTemplate\n *ngIf=\"infiniteScroll && (data && (data.length > 0))\">\n <span class=\"infinite-scroll-paginator\">\n 1 - {{ data.length }} de {{ paginatorLength }}\n </span>\n </ng-container>\n </ng-template>\n</div>\n\n<div id=\"table-popover\"\n class=\"table-popover\"\n (mouseover)=\"_isPopoverHover = true\"\n (mouseout)=\"_isPopoverHover = false; closePopover(0)\"\n *ngIf=\"!loading && actionsPopoverRef\">\n <ng-container [ngTemplateOutlet]=\"actionsPopoverRef\"\n [ngTemplateOutletContext]=\"{ $implicit: _contextPopover }\">\n </ng-container>\n</div>",
511
+ animations: [
512
+ trigger('detailExpand', [
513
+ state('collapsed', style({ height: '0px', minHeight: '0', display: 'none' })),
514
+ state('expanded', style({ height: '*' })),
515
+ transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
516
+ ]),
517
+ ],
518
+ styles: [".box-shadow{border-radius:2px;box-shadow:0 3px 1px -2px rgba(0,0,0,.14),0 2px 2px 0 rgba(0,0,0,.098),0 1px 5px 0 rgba(0,0,0,.084)}table{width:100%}itss-loading{margin:25px;opacity:.7}.no-records{height:48px;display:flex;align-items:center;justify-content:center;flex-direction:column;margin:30px;font-size:14px!important;font-weight:600!important;color:#b3afb3!important}.no-records mat-icon{font-size:32px;height:32px;width:32px;margin-bottom:5px}.footer-row{min-height:57px;font-weight:700;padding:15px 24px;display:flex;align-items:flex-end;justify-content:center;flex-direction:column;color:rgba(0,0,0,.67);border-bottom:1px solid rgba(0,0,0,.12)}.mat-cell-pointer{cursor:pointer}.detail-row{min-height:0!important;border-bottom-width:0}element-row:not(.expanded-row):hover{background:#f5f5f5}element-row:not(.expanded-row):active{background:#efefef}.hoversimulator:not(.highlight){background:#f5f5f5}.hoversimulator:has(.highlight){background-color:rgba(255,217,0,.212)!important}.highlight{background-color:rgba(255,217,0,.102)!important}::ng-deep mat-cell.cell-element-detail{font-weight:400!important}.element-detail{width:100%;overflow:hidden;display:flex;min-height:45px!important}.element-detail.collapsed{height:0!important;min-height:0!important;display:none!important}.element-detail.expanded{height:auto!important}.hidden-header,.hidden-header .mat-header-cell{height:0!important;min-height:0!important}.actions-popover.mat-card{min-width:auto!important;padding:5px!important;background:#f5f5f5;border-radius:5px!important}.actions-popover.mat-card .mat-card-content itss-button .mat-icon-button mat-icon{height:18px!important;width:18px!important}.table-level-1 .mat-table .mat-header-row{border-bottom:unset!important}.mat-column-expandedGroupHeader{padding:0!important}.group-header-cell{display:flex;flex-direction:row;align-items:center;width:100%}.group-header-sticky{position:-webkit-sticky;position:sticky;top:54px}.infinite-scroll-paginator{color:#696969;font-size:14px;display:flex;align-items:center;justify-content:center;height:56px;position:-webkit-sticky;position:sticky;bottom:0;background:#fff;border-top:1px solid #f3465c}.table-popover{position:fixed;display:inline-flex;background-color:#f5f5f5;width:auto;border-radius:0 0 10px 10px;border:1px solid #ddd;border-top-width:0;padding:2px 5px;z-index:1;visibility:hidden}"]
519
+ }),
520
+ __metadata("design:paramtypes", [])
521
+ ], TableComponent);
522
+ export { TableComponent };
523
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUosT0FBTyxFQUFtQixZQUFZLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUF1QixNQUFNLG1CQUFtQixDQUFDO0FBQ3BILE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWdCdEYsSUFBYSxjQUFjLEdBQTNCLE1BQWEsY0FBYztJQXdIdkI7UUF0SFEsc0JBQWlCLEdBQVUsRUFBRSxDQUFDO1FBRS9CLHNCQUFpQixHQUFXLEdBQUcsQ0FBQztRQUNoQyxvQkFBZSxHQUFRLElBQUksQ0FBQztRQUc1QixzQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFtQjVCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFeEIsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFXL0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUzQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFFbEMsdUJBQWtCLEdBQVcsQ0FBQyxDQUFDO1FBRS9C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QUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzdFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQzthQUN4RixDQUFDO1NBQ0w7O0tBQ0osQ0FBQzs7R0FDVyxjQUFjLENBaVoxQjtTQWpaWSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SGVhZGVyUm93RGVmLCBNYXRQYWdpbmF0b3IsIE1hdFNvcnQsIE1hdFRhYmxlRGF0YVNvdXJjZSwgU29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXJyYXlVdGlsLCBPYmplY3RVdGlsLCBTdHJpbmdVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkRUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1jb2x1bW4uZHRvJztcbmltcG9ydCB7IFRhYmxlR3JvdXBIZWFkZXJEVE8gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9kdG8vdGFibGUtZ3JvdXAtaGVhZGVyLmR0byc7XG5pbXBvcnQgeyBUYWJsZVBhZ2VFdmVudERUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1wYWdlLWV2ZW50LmR0byc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpdHNzLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICAgICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJywgZGlzcGxheTogJ25vbmUnIH0pKSxcbiAgICAgICAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCB7XG5cbiAgICBwcml2YXRlIF9leHBhbmRlZEVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuXG4gICAgcHVibGljIF9zY3JvbGxIZWlnaHRDYWxjOiBudW1iZXIgPSA0MTA7XG4gICAgcHVibGljIF9pc1BvcG92ZXJIb3ZlcjogYW55ID0gbnVsbDtcbiAgICBwdWJsaWMgX2NvbnRleHRQb3BvdmVyOiBUO1xuICAgIHB1YmxpYyBfZXhwYW5kZWRFbGVtZW50OiBhbnk7XG4gICAgcHVibGljIF9kaXNwbGF5ZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICAgIHB1YmxpYyBfZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPPjtcblxuICAgIEBWaWV3Q2hpbGQoTWF0U29ydCwgeyBzdGF0aWM6IHRydWUgfSkgbWF0U29ydDogTWF0U29ydDtcbiAgICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgbWF0UGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gICAgQFZpZXdDaGlsZCgnZnJvbnRlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgbWF0RnJvbnRlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgICBAVmlld0NoaWxkKCdiYWNrZW5kUGFnaW5hdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1hdEJhY2tlbmRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICAgIEBWaWV3Q2hpbGQoJ21hdEhlYWRlclJvdycsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEhlYWRlclJvd1JlZjogVGVtcGxhdGVSZWY8TWF0SGVhZGVyUm93RGVmPjtcbiAgICBAVmlld0NoaWxkKCdmcm9udGVuZFBhZ2luYXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEZyb250ZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2JhY2tlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIF9tYXRCYWNrZW5kUGFnaW5hdG9yUm93UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYWN0aW9ucycsIHsgc3RhdGljOiBmYWxzZSB9KSBhY3Rpb25zUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2FjdGlvbnNQb3BvdmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFjdGlvbnNQb3BvdmVyUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBmb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZXhwYW5kZWQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZXhwYW5kZWRSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBIZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBIZWFkZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBGb290ZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBGb290ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBzaGFkb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uRFRPW10gPSBbXTtcblxuICAgIHByaXZhdGUgX2RhdGFWYWx1ZTogVFtdO1xuICAgIEBJbnB1dCgpIGdldCBkYXRhKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhVmFsdWU7XG4gICAgfVxuICAgIHNldCBkYXRhKGRhdGE6IFRbXSkge1xuICAgICAgICB0aGlzLl9kYXRhVmFsdWUgPSBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLl9kYXRhVmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgYmFja2VuZFBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZUluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yTGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemU6IG51bWJlciA9IDEwO1xuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDMwXTtcblxuICAgIEBJbnB1dCgpIHNob3dQYWdlU2l6ZU9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGV4cGFuZGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgY29sdW1uSW5pdGlhbDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgY29sdW1uRmluYWw6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGhlYWRlclN0aWNreTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZ3JvdXBCeUNvbHVtbjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZ3JvdXBIZWFkZXJTdGlja3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGdyb3VwU3RhcnRFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaGlnaGxpZ2h0Um93Rm46IChyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKSA9PiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgaW5maW5pdGVTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNjcm9sbERlbGF5OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsT2Zmc2V0OiBudW1iZXIgPSAxMDAwO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsSGVpZ3RoOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBpc0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCdjb2x1bW5FeHBhbmRhYmxlRml4ZWQnKSBzaG93Q29sdW1uRXhwYW5kYWJsZUZpeGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBleHBhbmRhYmxlT25lUm93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBpZ25vcmVDaGlsZHJlbkV4cGFuZFJvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgY2xlYXJTb3J0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc29ydEFjdGl2ZTogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9ICdhc2MnO1xuXG4gICAgQE91dHB1dCgpIHJvd0V4cGFuZGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KHRydWUpO1xuICAgIEBPdXRwdXQoKSBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPih0cnVlKTtcbiAgICBAT3V0cHV0KCkgcGFnZTogRXZlbnRFbWl0dGVyPFRhYmxlUGFnZUV2ZW50RFRPPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcm93SG92ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGdldCBtYXRUYWJsZUhlaWd0aCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICBsZXQgaGVhZGVyUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fbWF0SGVhZGVyUm93UmVmKSkge1xuICAgICAgICAgICAgaGVhZGVyUm93SGVpZ2h0ID0gKHRoaXMuX21hdEhlYWRlclJvd1JlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWdpbmF0b3JSb3dIZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yUmVmID0gdGhpcy5iYWNrZW5kUGFnaW5hdGlvbiA/IHRoaXMuX21hdEJhY2tlbmRQYWdpbmF0b3JSb3dSZWYgOiB0aGlzLl9tYXRGcm9udGVuZFBhZ2luYXRvclJvd1JlZjtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwYWdpbmF0b3JSZWYpKSB7XG4gICAgICAgICAgICBwYWdpbmF0b3JSb3dIZWlnaHQgPSAocGFnaW5hdG9yUmVmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0SGVhZGVyd0hlaWdodDogbnVtYmVyID0gaGVhZGVyUm93SGVpZ2h0IHx8IDYwO1xuICAgICAgICBjb25zdCBtYXRQYWdpbmF0b3JIZWlnaHQ6IG51bWJlciA9IHBhZ2luYXRvclJvd0hlaWdodCB8fCA1NztcblxuICAgICAgICBjb25zdCBwYWdlU2l6ZTogbnVtYmVyID0gdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSAmJiAodGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSA8PSAxMCkgPyB0aGlzLnBhZ2luYXRvclBhZ2VTaXplIDogMTA7XG4gICAgICAgIGNvbnN0IHNldEhlaWd0aDogYm9vbGVhbiA9IHRoaXMuaGVhZGVyU3RpY2t5ICYmICh0aGlzLmRhdGEubGVuZ3RoID4gcGFnZVNpemUpO1xuXG4gICAgICAgIHJldHVybiBvZihzZXRIZWlndGggPyBgJHsoKDU3ICogcGFnZVNpemUpICsgbWF0SGVhZGVyd0hlaWdodCArIG1hdFBhZ2luYXRvckhlaWdodCl9cHhgIDogJ2F1dG8nKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5tYXRTb3J0O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmICF0aGlzLmJhY2tlbmRQYWdpbmF0aW9uICYmICF0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRGcm9udGVuZFBhZ2luYXRvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiAodGhpcy5iYWNrZW5kUGFnaW5hdGlvbiB8fCB0aGlzLmluZmluaXRlU2Nyb2xsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yUGFnZVNpemUsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRvclBhZ2VTaXplT3B0aW9uczogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYWN0aW9uc1BvcG92ZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dFBvcG92ZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzUG9wb3ZlckhvdmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoMCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwb3BvdmVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlRGF0YVNvdXJjZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVEYXRhU291cmNlKCk6IHZvaWQge1xuICAgICAgICBsZXQgY29sdW1uczogc3RyaW5nW10gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy52aXNpYmxlKS5tYXAoYyA9PiBjLnByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmV4cGFuZGVkUmVmKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFsnZXhwYW5kZWRDb2x1bW4nLCAuLi5jb2x1bW5zXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYWN0aW9uc1JlZikpIHtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBbLi4uY29sdW1ucywgJ2FjdGlvbnNDb2x1bW4nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwbGF5ZWRDb2x1bW5zID0gY29sdW1ucztcblxuICAgICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgbGV0IGRhdGFBbGw6IFRbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFBbGwgPSBBcnJheVV0aWwuY2xvbmUodGhpcy5fZGF0YVNvdXJjZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5kYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGFBbGwucHVzaCguLi50aGlzLmRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShbXSk7XG4gICAgICAgICAgICBpZiAoIVN0cmluZ1V0aWwuaXNFbXB0eSh0aGlzLmdyb3VwQnlDb2x1bW4pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmdyb3VwSGVhZGVyUmVmKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZ2VuZXJldGVHcm91cHNCeUNvbHVtbihkYXRhQWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gZGF0YUFsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YUFsbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmNhbGNTY3JvbGxIZWlnaHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKFtdKTtcbiAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbC5pc0VtcHR5KHRoaXMuZ3JvdXBCeUNvbHVtbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZ3JvdXBIZWFkZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5nZW5lcmV0ZUdyb3Vwc0J5Q29sdW1uKHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZGF0YVNvdXJjZS5kYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5tYXRTb3J0O1xuICAgICAgICAgICAgdGhpcy5zZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgIXRoaXMuYmFja2VuZFBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRGcm9udGVuZFBhZ2luYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5ncm91cFN0YXJ0RXhwYW5kZWQgJiYgKHRoaXMuZ3JvdXBIZWFkZXJSZWYgfHwgKHRoaXMuZXhwYW5kYWJsZSAmJiB0aGlzLmV4cGFuZGVkUmVmKSkgJiYgIUFycmF5VXRpbC5pc0VtcHR5KHRoaXMuX2RhdGFTb3VyY2UuZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKHJvdyA9PiB0aGlzLmFkZENvbGxhcHNlKHJvdykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY1Njcm9sbEhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCh0aGlzLl9kYXRhU291cmNlICYmICh0aGlzLl9kYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMCkpICYmIChNYXRoLmZsb29yKHRoaXMuX3Njcm9sbEhlaWdodENhbGMpIDw9IDcwMCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbEhlaWdodENhbGMgPSAxMzAgKyAodGhpcy5fZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAqIDQ4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGFnZShwYWdlRXZlbnQ6IFRhYmxlUGFnZUV2ZW50RFRPKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFnaW5hdG9yUGFnZVNpemUgPSBwYWdlRXZlbnQucGFnZVNpemU7XG4gICAgICAgIHBhZ2VFdmVudC5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMgPSBBcnJheVV0aWwuaXNFbXB0eShwYWdlRXZlbnQucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zKSA/IHRoaXMucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zIDogcGFnZUV2ZW50LnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucztcbiAgICAgICAgdGhpcy5wYWdlLmVtaXQocGFnZUV2ZW50KTtcbiAgICB9XG5cbiAgICBpc0V4cGFuc2VkKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWRFbGVtZW50cy5maWx0ZXIoZSA9PiBPYmplY3RVdGlsLmVxdWFscyhlLCBlbGVtZW50KSkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICByZW1vdmVDb2xsYXBzZShlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kYWJsZU9uZVJvdykge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhLmZvckVhY2gocm93ID0+IHRoaXMuYWRkQ29sbGFwc2Uocm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBhbmRlZEVsZW1lbnRzQXV4OiBhbnlbXSA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLl9leHBhbmRlZEVsZW1lbnRzKTtcbiAgICAgICAgZXhwYW5kZWRFbGVtZW50c0F1eC5zcGxpY2UodGhpcy5fZXhwYW5kZWRFbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpLCAxKTtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRFbGVtZW50cyA9IEFycmF5VXRpbC5jbG9uZShleHBhbmRlZEVsZW1lbnRzQXV4KTtcbiAgICB9XG5cbiAgICBhZGRDb2xsYXBzZShlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sbGFwc2VkRWxlbWVudDogYm9vbGVhbiA9IHRoaXMuX2V4cGFuZGVkRWxlbWVudHMuZmlsdGVyKGUgPT4gT2JqZWN0VXRpbC5lcXVhbHMoZSwgZWxlbWVudCkpLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmICghY29sbGFwc2VkRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcm93RXhwYW5kZWRDaGFuZ2VFbWl0KGVsZW1lbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd0V4cGFuZGVkQ2hhbmdlLmVtaXQoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgc29ydERhdGEoc29ydDogU29ydCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdChbXSk7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShbXSk7XG4gICAgICAgICAgICB0aGlzLmNhbGNTY3JvbGxIZWlnaHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25QYWdlKHtcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplLFxuICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgICAgcHJldmlvdXNQYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICBwYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnM6IHRoaXMucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zLFxuICAgICAgICAgICAgc29ydDogc29ydFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93UG9wb3ZlcihldmVudDogTW91c2VFdmVudCwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlLXBvcG92ZXInKTtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwb3BvdmVyKSkge1xuICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tUmVjdFBvcG92ZXIgPSBwb3BvdmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVJlY3RSb3cgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MVGFibGVSb3dFbGVtZW50KS5jaGlsZHJlbjtcblxuICAgICAgICAgICAgICAgIGlmIChkb21SZWN0UG9wb3ZlciAmJiBkb21SZWN0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS50b3AgPSBgJHsoZG9tUmVjdFJvdy50b3AgKyBkb21SZWN0Um93LmhlaWdodCkgLSAxfXB4YDtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnRQb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVuZFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbkluaXRpYWwgJiYgKHRoaXMuY29sdW1uSW5pdGlhbCA+PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsc1t0aGlzLmNvbHVtbkluaXRpYWxdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbml0aWFsIGNvbHVtbiB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGNlbGxzW3RoaXMuY29sdW1uSW5pdGlhbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBkb21SZWN0Um93LmxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5GaW5hbCAmJiAodGhpcy5jb2x1bW5GaW5hbCA+PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsc1t0aGlzLmNvbHVtbkZpbmFsXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmluYWwgY29sdW1uIHVuZGVmaW5lZCBvciBudWxsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGNlbGxzW3RoaXMuY29sdW1uRmluYWxdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkb21SZWN0UG9wb3Zlci53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZG9tUmVjdFJvdy5yaWdodCAtIGRvbVJlY3RQb3BvdmVyLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2xpZW50WCA+IHN0YXJ0UG9zaXRpb24gKyAxNSAmJiBldmVudC5jbGllbnRYIDwgZW5kUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYIC0gMTV9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jbGllbnRYIDw9IHN0YXJ0UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLmxlZnQgPSBgJHtzdGFydFBvc2l0aW9ufXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA+PSBlbmRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUubGVmdCA9IGAke2VuZFBvc2l0aW9ufXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93SG92ZXIuZW1pdChkYXRhKTtcbiAgICAgICAgdGhpcy5fY29udGV4dFBvcG92ZXIgPSBkYXRhO1xuICAgIH1cblxuICAgIGNsb3NlUG9wb3Zlcih0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgb2YobnVsbCkucGlwZShkZWxheSh0aW1lKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICF0aGlzLl9pc1BvcG92ZXJIb3Zlcikge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5faXNQb3BvdmVySG92ZXIpICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmFjdGlvbnNQb3BvdmVyUmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocG9wb3ZlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRQb3BvdmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1BvcG92ZXJIb3ZlciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFNvcnRpbmdEYXRhQWNjZXNzb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChkYXRhOiBhbnksIHNvcnRIZWFkZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtzb3J0SGVhZGVySWRdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhW3NvcnRIZWFkZXJJZF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZ3JvdXAgaGVhZGVyXG4gICAgZ2VuZXJldGVHcm91cHNCeUNvbHVtbihkYXRhOiBhbnlbXSk6IFRhYmxlR3JvdXBIZWFkZXJEVE9bXSB7XG4gICAgICAgIGNvbnN0IGdyb3Vwczoge30gPSBkYXRhLnJlZHVjZSgoZ3JvdXAsIHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YUNvbHVtbjogc3RyaW5nID0gcm93W3RoaXMuZ3JvdXBCeUNvbHVtbl0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXBbZGF0YUNvbHVtbl0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhQ29sdW1uXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBbZGF0YUNvbHVtbl0ucHVzaChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwcykubWFwKGdyb3VwVmFsdWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUdyb3VwSGVhZGVyRFRPKGdyb3VwVmFsdWUsIGdyb3Vwc1tncm91cFZhbHVlXSwgZ3JvdXBzW2dyb3VwVmFsdWVdLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEhpZ2hsaWdodFJvdyhyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocm93KSkge1xuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmhpZ2hsaWdodFJvd0ZuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFJvd0ZuKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldEluZGV4Um93KHJvdzogVCB8IFRhYmxlR3JvdXBIZWFkZXJEVE8pOiBudW1iZXIge1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpICYmICFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9kYXRhU291cmNlLmRhdGEpICYmICFPYmplY3RVdGlsLmlzTnVsbChyb3cpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChyID0+IHIgPT09IHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbmZpbml0ZSBzY3JvbGxcbiAgICBoYXNNb3JlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2RhdGFTb3VyY2UgfHwgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggPCB0aGlzLnBhZ2luYXRvckxlbmd0aCk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2Nyb2xsKHNjcm9sbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChzY3JvbGxlZCAmJiB0aGlzLmhhc01vcmUoKSkge1xuICAgICAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLnBhZ2luYXRvckxlbmd0aCxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXgsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JQYWdlSW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19