@elderbyte/ngx-starter 18.7.1 → 18.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/esm2022/lib/common/enums/elder-enum-translation.service.mjs +3 -3
  2. package/esm2022/lib/common/forms/elder-form-field-control-base.directive.mjs +3 -3
  3. package/esm2022/lib/common/forms/elder-from-field-base.mjs +3 -3
  4. package/esm2022/lib/common/forms/elder-from-field-customizable-base.mjs +3 -3
  5. package/esm2022/lib/common/forms/elder-from-field-entity-base.mjs +3 -3
  6. package/esm2022/lib/common/forms/elder-from-field-multi-entity-base.mjs +3 -3
  7. package/esm2022/lib/common/forms/form-field-base.component.mjs +3 -3
  8. package/esm2022/lib/common/forms/multi-model-base.component.mjs +3 -3
  9. package/esm2022/lib/common/forms/template-composite-control.mjs +3 -3
  10. package/esm2022/lib/common/forms/value-accessor-base.mjs +3 -3
  11. package/esm2022/lib/common/http/http-client-builder.service.mjs +3 -3
  12. package/esm2022/lib/common/http/http-client-pristine.mjs +3 -3
  13. package/esm2022/lib/common/http/transfer/data-transfer-factory.mjs +3 -3
  14. package/esm2022/lib/common/selection/selection-model.mjs +10 -10
  15. package/esm2022/lib/common/url/elder-router.service.mjs +3 -3
  16. package/esm2022/lib/common/url/elder-url-fragment-params.service.mjs +3 -3
  17. package/esm2022/lib/components/access-denied/elder-access-denied.component.mjs +3 -3
  18. package/esm2022/lib/components/access-denied/elder-access-denied.module.mjs +4 -4
  19. package/esm2022/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +3 -3
  20. package/esm2022/lib/components/auditing/elder-audit.module.mjs +4 -4
  21. package/esm2022/lib/components/badge/elder-badge/elder-badge.component.mjs +9 -9
  22. package/esm2022/lib/components/badge/elder-badge.directive.mjs +3 -3
  23. package/esm2022/lib/components/badge/elder-badge.module.mjs +4 -4
  24. package/esm2022/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +3 -3
  25. package/esm2022/lib/components/button-group/elder-button-group.module.mjs +4 -4
  26. package/esm2022/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +3 -3
  27. package/esm2022/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +3 -3
  28. package/esm2022/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +3 -3
  29. package/esm2022/lib/components/card-organizer/elder-card-organizer.module.mjs +4 -4
  30. package/esm2022/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +3 -3
  31. package/esm2022/lib/components/cards/elder-card/elder-card.component.mjs +18 -18
  32. package/esm2022/lib/components/cards/elder-card/elder-card.module.mjs +4 -4
  33. package/esm2022/lib/components/chips/elder-chip-label.directive.mjs +3 -3
  34. package/esm2022/lib/components/chips/elder-chips.module.mjs +4 -4
  35. package/esm2022/lib/components/connectivity/elder-connectivity.module.mjs +4 -4
  36. package/esm2022/lib/components/connectivity/elder-connectivity.service.mjs +3 -3
  37. package/esm2022/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +3 -3
  38. package/esm2022/lib/components/containers/elder-containers.module.mjs +4 -4
  39. package/esm2022/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +3 -3
  40. package/esm2022/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +3 -3
  41. package/esm2022/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +3 -3
  42. package/esm2022/lib/components/csv/elder-csv.module.mjs +4 -4
  43. package/esm2022/lib/components/currency/elder-currency.module.mjs +4 -4
  44. package/esm2022/lib/components/currency/elder-currency.pipe.mjs +3 -3
  45. package/esm2022/lib/components/data-transfer/elder-data-transfer.module.mjs +4 -4
  46. package/esm2022/lib/components/data-transfer/elder-data-transfer.service.mjs +3 -3
  47. package/esm2022/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +3 -3
  48. package/esm2022/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +3 -3
  49. package/esm2022/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +3 -3
  50. package/esm2022/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +3 -3
  51. package/esm2022/lib/components/data-view/base/elder-data-view-base.mjs +8 -8
  52. package/esm2022/lib/components/data-view/common/composite-sort/composite-sort-dc.directive.mjs +3 -3
  53. package/esm2022/lib/components/data-view/common/composite-sort/elder-composite-sort/elder-composite-sort.component.mjs +3 -3
  54. package/esm2022/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +3 -3
  55. package/esm2022/lib/components/data-view/common/elder-data-common.module.mjs +4 -4
  56. package/esm2022/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +6 -6
  57. package/esm2022/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +3 -3
  58. package/esm2022/lib/components/data-view/common/selection/data-context-selection.directive.mjs +5 -5
  59. package/esm2022/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +3 -3
  60. package/esm2022/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +37 -26
  61. package/esm2022/lib/components/data-view/grid/elder-grid.module.mjs +4 -4
  62. package/esm2022/lib/components/data-view/master-detail/elder-detail-dialog/elder-detail-dialog.component.mjs +3 -3
  63. package/esm2022/lib/components/data-view/master-detail/elder-detail.directive.mjs +3 -3
  64. package/esm2022/lib/components/data-view/master-detail/elder-master-activation.directive.mjs +3 -3
  65. package/esm2022/lib/components/data-view/master-detail/elder-master-detail.component.mjs +3 -3
  66. package/esm2022/lib/components/data-view/master-detail/elder-master-detail.module.mjs +4 -4
  67. package/esm2022/lib/components/data-view/master-detail/elder-master-detail.service.mjs +3 -3
  68. package/esm2022/lib/components/data-view/master-detail/elder-master.directive.mjs +3 -3
  69. package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +3 -3
  70. package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +4 -4
  71. package/esm2022/lib/components/data-view/table/activation/elder-delete-active.directive.mjs +3 -3
  72. package/esm2022/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +3 -3
  73. package/esm2022/lib/components/data-view/table/elder-center-cell.directive.mjs +3 -3
  74. package/esm2022/lib/components/data-view/table/elder-number-cell.directive.mjs +3 -3
  75. package/esm2022/lib/components/data-view/table/elder-paginator-intl.mjs +3 -3
  76. package/esm2022/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +3 -3
  77. package/esm2022/lib/components/data-view/table/elder-table/elder-table.component.mjs +6 -6
  78. package/esm2022/lib/components/data-view/table/elder-table-column.directive.mjs +3 -3
  79. package/esm2022/lib/components/data-view/table/elder-table-extension.directive.mjs +3 -3
  80. package/esm2022/lib/components/data-view/table/elder-table-root.directive.mjs +3 -3
  81. package/esm2022/lib/components/data-view/table/elder-table-row.directive.mjs +3 -3
  82. package/esm2022/lib/components/data-view/table/elder-table-sort.directive.mjs +3 -3
  83. package/esm2022/lib/components/data-view/table/elder-table.module.mjs +4 -4
  84. package/esm2022/lib/components/data-view/table/model/elder-table-model.mjs +3 -3
  85. package/esm2022/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +3 -3
  86. package/esm2022/lib/components/dialogs/elder-dialog.module.mjs +4 -4
  87. package/esm2022/lib/components/dialogs/elder-dialog.service.mjs +3 -3
  88. package/esm2022/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +3 -3
  89. package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +3 -3
  90. package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +3 -3
  91. package/esm2022/lib/components/errors/elder-error.module.mjs +4 -4
  92. package/esm2022/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +3 -3
  93. package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +3 -3
  94. package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +4 -4
  95. package/esm2022/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +3 -3
  96. package/esm2022/lib/components/files/drag-n-drop/elder-drop-zone/elder-drop-zone.component.mjs +3 -3
  97. package/esm2022/lib/components/files/drag-n-drop/global-drag-drop.service.mjs +3 -3
  98. package/esm2022/lib/components/files/elder-file-drop-zone.directive.mjs +3 -3
  99. package/esm2022/lib/components/files/elder-file-select.directive.mjs +3 -3
  100. package/esm2022/lib/components/files/elder-file.module.mjs +4 -4
  101. package/esm2022/lib/components/files/file-select/file-select.component.mjs +3 -3
  102. package/esm2022/lib/components/files/file-upload/file-upload.component.mjs +3 -3
  103. package/esm2022/lib/components/forms/clipboard/elder-clipboard.service.mjs +3 -3
  104. package/esm2022/lib/components/forms/directives/base/elder-class-hostbinding-base.mjs +3 -3
  105. package/esm2022/lib/components/forms/directives/elder-clipboard-put.directive.mjs +3 -3
  106. package/esm2022/lib/components/forms/directives/elder-delayed-focus.directive.mjs +3 -3
  107. package/esm2022/lib/components/forms/directives/elder-form-field-dense.directive.mjs +3 -3
  108. package/esm2022/lib/components/forms/directives/elder-form-field-label.directive.mjs +3 -3
  109. package/esm2022/lib/components/forms/directives/elder-form-field-no-hint.directive.mjs +3 -3
  110. package/esm2022/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +3 -3
  111. package/esm2022/lib/components/forms/directives/elder-forms-directives.module.mjs +4 -4
  112. package/esm2022/lib/components/forms/directives/elder-initial-value.directive.mjs +3 -3
  113. package/esm2022/lib/components/forms/directives/elder-input-pattern.directive.mjs +3 -3
  114. package/esm2022/lib/components/forms/directives/elder-key-event.directive.mjs +3 -3
  115. package/esm2022/lib/components/forms/directives/elder-next-focusable.directive.mjs +3 -3
  116. package/esm2022/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +3 -3
  117. package/esm2022/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +3 -3
  118. package/esm2022/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +3 -3
  119. package/esm2022/lib/components/forms/directives/elder-touched.directive.mjs +3 -3
  120. package/esm2022/lib/components/forms/directives/elder-triple-state-checkbox.directive.mjs +3 -3
  121. package/esm2022/lib/components/forms/directives/validation/elder-validation-error.directive.mjs +3 -3
  122. package/esm2022/lib/components/forms/directives/validation/strategies/common-validation-message-strategy.mjs +3 -3
  123. package/esm2022/lib/components/forms/directives/validation/strategies/dynamic-validation-message-strategy.mjs +3 -3
  124. package/esm2022/lib/components/forms/directives/validation/validation-message-renderer.service.mjs +3 -3
  125. package/esm2022/lib/components/forms/directives/validation/validators/elder-max.validator.mjs +3 -3
  126. package/esm2022/lib/components/forms/directives/validation/validators/elder-min.validator.mjs +3 -3
  127. package/esm2022/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.mjs +3 -3
  128. package/esm2022/lib/components/forms/directives/validation/validators/elder-required-ignore-zero.validator.mjs +3 -3
  129. package/esm2022/lib/components/forms/elder-forms.module.mjs +4 -4
  130. package/esm2022/lib/components/forms/search/domain/context/search-context.service.mjs +3 -3
  131. package/esm2022/lib/components/forms/search/domain/url/elder-search-url.directive.mjs +3 -3
  132. package/esm2022/lib/components/forms/search/domain/url/elder-search-url.service.mjs +3 -3
  133. package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +3 -3
  134. package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +3 -3
  135. package/esm2022/lib/components/forms/search/elder-search.module.mjs +4 -4
  136. package/esm2022/lib/components/forms/search/search-box/elder-search-box.component.mjs +3 -3
  137. package/esm2022/lib/components/forms/search/search-box/elder-search-panel.component.mjs +3 -3
  138. package/esm2022/lib/components/global-search/elder-global-search.component.mjs +3 -3
  139. package/esm2022/lib/components/global-search/elder-global-search.module.mjs +4 -4
  140. package/esm2022/lib/components/global-search/elder-global-search.service.mjs +3 -3
  141. package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +3 -3
  142. package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +4 -4
  143. package/esm2022/lib/components/headers/elder-header/elder-header.component.mjs +3 -3
  144. package/esm2022/lib/components/headers/elder-header.module.mjs +4 -4
  145. package/esm2022/lib/components/http-support/elder-http-client.service.mjs +3 -3
  146. package/esm2022/lib/components/i18n/entities/elder-i18n-entities.module.mjs +4 -4
  147. package/esm2022/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +3 -3
  148. package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +3 -3
  149. package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +3 -3
  150. package/esm2022/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +3 -3
  151. package/esm2022/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +3 -3
  152. package/esm2022/lib/components/i18n/entities/elder-localized-texts.directive.mjs +3 -3
  153. package/esm2022/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +3 -3
  154. package/esm2022/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +3 -3
  155. package/esm2022/lib/components/i18n/entities/picker/localisation-picker.service.mjs +3 -3
  156. package/esm2022/lib/components/i18n/language/elder-language-interceptor.mjs +3 -3
  157. package/esm2022/lib/components/i18n/language/elder-language.module.mjs +4 -4
  158. package/esm2022/lib/components/i18n/language/elder-language.service.mjs +3 -3
  159. package/esm2022/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +3 -3
  160. package/esm2022/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +4 -4
  161. package/esm2022/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.mjs +3 -3
  162. package/esm2022/lib/components/iframes/data-view/data-view-iframe-adapter.directive.mjs +3 -3
  163. package/esm2022/lib/components/iframes/elder-iframe.module.mjs +4 -4
  164. package/esm2022/lib/components/iframes/iframe-close.directive.mjs +3 -3
  165. package/esm2022/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +3 -3
  166. package/esm2022/lib/components/iframes/iframe-host/iframe-host.component.mjs +3 -3
  167. package/esm2022/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +3 -3
  168. package/esm2022/lib/components/iframes/iframe.service.mjs +3 -3
  169. package/esm2022/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +3 -3
  170. package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +3 -3
  171. package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +4 -4
  172. package/esm2022/lib/components/input/autocomplete/elder-autocomplete/elder-suggestion-panel.component.mjs +3 -3
  173. package/esm2022/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +3 -3
  174. package/esm2022/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +3 -3
  175. package/esm2022/lib/components/input/autocomplete/elder-autocomplete.module.mjs +4 -4
  176. package/esm2022/lib/components/labels/elder-labels.module.mjs +4 -4
  177. package/esm2022/lib/components/labels/labels-input/labels-input.component.mjs +3 -3
  178. package/esm2022/lib/components/measures/dimensions/dimensions-input/elder-dimensions-input.component.mjs +3 -3
  179. package/esm2022/lib/components/measures/dimensions/validation/elder-required-dimensions.validator.mjs +3 -3
  180. package/esm2022/lib/components/measures/directives/elder-unit-select.directive.mjs +3 -3
  181. package/esm2022/lib/components/measures/elder-measures.module.mjs +8 -8
  182. package/esm2022/lib/components/measures/elder-quantity-transform.pipe.mjs +3 -3
  183. package/esm2022/lib/components/measures/elder-quantity.pipe.mjs +3 -3
  184. package/esm2022/lib/components/measures/elder-unit.service.mjs +3 -3
  185. package/esm2022/lib/components/measures/quantity-input/quantity-form-field/elder-quantity-form-field.component.mjs +3 -3
  186. package/esm2022/lib/components/measures/quantity-input/quantity-input-control/elder-quantity-input-control.component.mjs +3 -3
  187. package/esm2022/lib/components/measures/quantity-input/validation/elder-quantity-range.validator.mjs +3 -3
  188. package/esm2022/lib/components/measures/quantity-input/validation/elder-required-quantity.validator.mjs +3 -3
  189. package/esm2022/lib/components/measures/util/elder-quantity.service.mjs +3 -3
  190. package/esm2022/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +3 -3
  191. package/esm2022/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +4 -4
  192. package/esm2022/lib/components/navigation/nav/elder-nav.module.mjs +4 -4
  193. package/esm2022/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +3 -3
  194. package/esm2022/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +3 -3
  195. package/esm2022/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +3 -3
  196. package/esm2022/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +3 -3
  197. package/esm2022/lib/components/navigation/toolbar/elder-toolbar.module.mjs +4 -4
  198. package/esm2022/lib/components/navigation/toolbar/elder-toolbar.service.mjs +3 -3
  199. package/esm2022/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +3 -3
  200. package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +3 -3
  201. package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +3 -3
  202. package/esm2022/lib/components/overlays/elder-overlay-origin.directive.mjs +3 -3
  203. package/esm2022/lib/components/overlays/elder-overlay-ref.mjs +3 -3
  204. package/esm2022/lib/components/overlays/elder-overlay-trigger.directive.mjs +3 -3
  205. package/esm2022/lib/components/overlays/elder-overlay.component.mjs +3 -3
  206. package/esm2022/lib/components/overlays/elder-overlay.module.mjs +4 -4
  207. package/esm2022/lib/components/page/exit-guard/page-exit-guard.module.mjs +27 -0
  208. package/esm2022/lib/components/page/exit-guard/page-exit-guard.service.mjs +129 -0
  209. package/esm2022/lib/components/page/exit-guard/page-exit-lock/page-exit-lock.component.mjs +27 -0
  210. package/esm2022/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.mjs +34 -0
  211. package/esm2022/lib/components/page/exit-guard/page-exit-lock-overview/page-exit-lock-overview.component.mjs +30 -0
  212. package/esm2022/lib/components/page/public_api.mjs +2 -0
  213. package/esm2022/lib/components/panels/card-panel/elder-card-panel.component.mjs +3 -3
  214. package/esm2022/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.mjs +3 -3
  215. package/esm2022/lib/components/panels/elder-panel.module.mjs +4 -4
  216. package/esm2022/lib/components/panels/flat/elder-panel.component.mjs +3 -3
  217. package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel-trigger.directive.mjs +3 -3
  218. package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel.component.mjs +9 -9
  219. package/esm2022/lib/components/public_api.mjs +2 -1
  220. package/esm2022/lib/components/scrollbar/elder-scrollbar.directive.mjs +3 -3
  221. package/esm2022/lib/components/scrollbar/elder-scrollbar.module.mjs +4 -4
  222. package/esm2022/lib/components/select/auto/elder-auto-select-first.directive.mjs +3 -3
  223. package/esm2022/lib/components/select/auto/elder-auto-select-first.service.mjs +3 -3
  224. package/esm2022/lib/components/select/auto/elder-auto-select-suggest-first.directive.mjs +3 -3
  225. package/esm2022/lib/components/select/elder-select-base.mjs +3 -3
  226. package/esm2022/lib/components/select/elder-select-chip.directive.mjs +9 -9
  227. package/esm2022/lib/components/select/elder-select-on-tab.directive.mjs +3 -3
  228. package/esm2022/lib/components/select/elder-select-value.directive.mjs +3 -3
  229. package/esm2022/lib/components/select/elder-select.module.mjs +4 -4
  230. package/esm2022/lib/components/select/filter/elder-chips-include-exclude.directive.mjs +3 -3
  231. package/esm2022/lib/components/select/filter/elder-filter-chip-template/elder-filter-chip-template.component.mjs +3 -3
  232. package/esm2022/lib/components/select/multi/elder-chip-select-option/elder-select-option.component.mjs +3 -3
  233. package/esm2022/lib/components/select/multi/elder-multi-select-base.mjs +3 -3
  234. package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.mjs +3 -3
  235. package/esm2022/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +3 -3
  236. package/esm2022/lib/components/select/multi/elder-multi-select-form-field.mjs +3 -3
  237. package/esm2022/lib/components/select/multi/elder-mutli-select-all-directive.mjs +3 -3
  238. package/esm2022/lib/components/select/multi/elder-search-include-exclude.directive.mjs +3 -3
  239. package/esm2022/lib/components/select/popup/selection-model-popup-trigger-adapter.directive.mjs +3 -3
  240. package/esm2022/lib/components/select/popup/selection-model-popup.directive.mjs +3 -3
  241. package/esm2022/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +3 -3
  242. package/esm2022/lib/components/select/single/elder-clear-select.directive.mjs +3 -3
  243. package/esm2022/lib/components/select/single/elder-select/elder-select.component.mjs +3 -3
  244. package/esm2022/lib/components/select/single/elder-select-form-field.mjs +3 -3
  245. package/esm2022/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +3 -3
  246. package/esm2022/lib/components/select-chip-list/elder-chip-list-select.module.mjs +4 -4
  247. package/esm2022/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +3 -3
  248. package/esm2022/lib/components/shell/drawers/elder-router-outlet.service.mjs +3 -3
  249. package/esm2022/lib/components/shell/elder-shell-slot.directive.mjs +3 -3
  250. package/esm2022/lib/components/shell/elder-shell.module.mjs +4 -4
  251. package/esm2022/lib/components/shell/elder-shell.service.mjs +3 -3
  252. package/esm2022/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +3 -3
  253. package/esm2022/lib/components/shell/shell/elder-shell.component.mjs +12 -12
  254. package/esm2022/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +3 -3
  255. package/esm2022/lib/components/tabs/elder-tab/elder-tab.directive.mjs +3 -3
  256. package/esm2022/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +3 -3
  257. package/esm2022/lib/components/tabs/elder-tab.module.mjs +4 -4
  258. package/esm2022/lib/components/theme/elder-theme-applier.directive.mjs +3 -3
  259. package/esm2022/lib/components/theme/elder-theme-preference.service.mjs +3 -3
  260. package/esm2022/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.mjs +3 -3
  261. package/esm2022/lib/components/theme/elder-theme.directive.mjs +3 -3
  262. package/esm2022/lib/components/theme/elder-theme.module.mjs +4 -4
  263. package/esm2022/lib/components/theme/elder-theme.service.mjs +3 -3
  264. package/esm2022/lib/components/time/date-adapters/custom-date-adapter.mjs +3 -3
  265. package/esm2022/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +3 -3
  266. package/esm2022/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +3 -3
  267. package/esm2022/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +3 -3
  268. package/esm2022/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +3 -3
  269. package/esm2022/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +3 -3
  270. package/esm2022/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +3 -3
  271. package/esm2022/lib/components/time/elder-time.module.mjs +4 -4
  272. package/esm2022/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +3 -3
  273. package/esm2022/lib/components/time/pipes/to-iso-date-string.pipe.mjs +3 -3
  274. package/esm2022/lib/components/toasts/elder-toast.module.mjs +4 -4
  275. package/esm2022/lib/components/toasts/elder-toast.service.mjs +3 -3
  276. package/esm2022/lib/components/toasts/standard-toast/standard-toast.component.mjs +3 -3
  277. package/esm2022/lib/components/url-fragment/elder-url-fragment.module.mjs +4 -4
  278. package/esm2022/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +3 -3
  279. package/esm2022/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +3 -3
  280. package/esm2022/lib/components/viewers/elder-viewers.module.mjs +4 -4
  281. package/esm2022/lib/features/event-source/fetch/reactive-fetch-event-source.service.mjs +3 -3
  282. package/esm2022/lib/features/event-source/standard/elder-event-source.service.mjs +3 -3
  283. package/esm2022/lib/features/kafent/access-token-provider.mjs +3 -3
  284. package/esm2022/lib/features/kafent/kafent-config.mjs +3 -3
  285. package/esm2022/lib/features/kafent/kafent-event-stream.mjs +3 -3
  286. package/esm2022/lib/features/kafent/kafent-event.service.mjs +3 -3
  287. package/esm2022/lib/features/kafent/kafent.module.mjs +4 -4
  288. package/esm2022/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +3 -3
  289. package/esm2022/lib/pipes/bytes.pipe.mjs +3 -3
  290. package/esm2022/lib/pipes/elder-pipes.module.mjs +10 -10
  291. package/esm2022/lib/pipes/elder-repeat.pipe.mjs +3 -3
  292. package/esm2022/lib/pipes/elder-round.pipe.mjs +3 -3
  293. package/esm2022/lib/pipes/elder-safe-url.pipe.mjs +3 -3
  294. package/esm2022/lib/pipes/elder-truncate.pipe.mjs +3 -3
  295. package/esm2022/lib/pipes/iso-duration.pipe.mjs +3 -3
  296. package/esm2022/lib/pipes/iso-interval-parse.pipe.mjs +3 -3
  297. package/esm2022/lib/pipes/iso-interval.pipe.mjs +3 -3
  298. package/esm2022/lib/pipes/time-ago.pipe.mjs +3 -3
  299. package/esm2022/lib/pipes/time-duration.pipe.mjs +3 -3
  300. package/esm2022/lib/pipes/weight.pipe.mjs +3 -3
  301. package/fesm2022/elderbyte-ngx-starter.mjs +1252 -1024
  302. package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
  303. package/lib/common/selection/selection-model.d.ts +2 -2
  304. package/lib/components/data-view/base/elder-data-view-base.d.ts +1 -1
  305. package/lib/components/data-view/grid/elder-grid/elder-grid.component.d.ts +13 -7
  306. package/lib/components/page/exit-guard/page-exit-guard.module.d.ts +10 -0
  307. package/lib/components/page/exit-guard/page-exit-guard.service.d.ts +77 -0
  308. package/lib/components/page/exit-guard/page-exit-lock/page-exit-lock.component.d.ts +18 -0
  309. package/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.d.ts +21 -0
  310. package/lib/components/page/exit-guard/page-exit-lock-overview/page-exit-lock-overview.component.d.ts +18 -0
  311. package/lib/components/page/public_api.d.ts +1 -0
  312. package/lib/components/public_api.d.ts +1 -0
  313. package/package.json +1 -1
  314. package/src/lib/components/page/exit-guard/page-exit-lock/page-exit-lock.component.scss +0 -0
  315. package/src/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.scss +10 -0
  316. package/src/lib/components/page/exit-guard/page-exit-lock-overview/page-exit-lock-overview.component.scss +0 -0
@@ -29,15 +29,21 @@ import * as i0 from "@angular/core";
29
29
  import * as i1 from "../../../../common/selection/selection-model";
30
30
  import * as i2 from "../../base/elder-data-view-options-provider";
31
31
  import * as i3 from "@angular/cdk/layout";
32
+ class GridRow {
33
+ constructor(id, cells) {
34
+ this.id = id;
35
+ this.cells = cells;
36
+ }
37
+ }
32
38
  export class ElderGridTileDirective {
33
39
  constructor(templateRef, viewContainer) {
34
40
  this.templateRef = templateRef;
35
41
  this.viewContainer = viewContainer;
36
42
  }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderGridTileDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
38
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: ElderGridTileDirective, isStandalone: true, selector: "[elderGridTile]", ngImport: i0 }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderGridTileDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
44
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.1", type: ElderGridTileDirective, isStandalone: true, selector: "[elderGridTile]", ngImport: i0 }); }
39
45
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderGridTileDirective, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderGridTileDirective, decorators: [{
41
47
  type: Directive,
42
48
  args: [{
43
49
  selector: '[elderGridTile]',
@@ -52,10 +58,10 @@ export class ElderGridToolbarDirective {
52
58
  this.templateRef = templateRef;
53
59
  this.viewContainer = viewContainer;
54
60
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderGridToolbarDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
56
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: ElderGridToolbarDirective, isStandalone: true, selector: "[elderGridToolbar]", ngImport: i0 }); }
61
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderGridToolbarDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
62
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.1", type: ElderGridToolbarDirective, isStandalone: true, selector: "[elderGridToolbar]", ngImport: i0 }); }
57
63
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderGridToolbarDirective, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderGridToolbarDirective, decorators: [{
59
65
  type: Directive,
60
66
  args: [{
61
67
  selector: '[elderGridToolbar]',
@@ -93,6 +99,7 @@ export class ElderGridComponent extends ElderDataViewBaseComponent {
93
99
  */
94
100
  this.loadNextQueued = false;
95
101
  this.scrollContainerId = 'documents-container-' + UuidUtil.weakUuid4();
102
+ this.TrackGridRowByIdFn = (index, row) => row.id;
96
103
  this.toolbarVisible = true;
97
104
  this.footerVisible = true;
98
105
  this.itemHeight = 250;
@@ -120,7 +127,7 @@ export class ElderGridComponent extends ElderDataViewBaseComponent {
120
127
  this.dataRows$ = combineLatest([
121
128
  this.dataContext$.pipe(filter(dc => !!dc), switchMap(dc => dc.data)),
122
129
  columnCount$
123
- ]).pipe(debounceTime(50), map(([data, columns]) => this.groupForColumns(data, columns)));
130
+ ]).pipe(debounceTime(50), map(([data, columnCount]) => this.buildGridRow(data, columnCount)));
124
131
  }
125
132
  ngAfterViewInit() {
126
133
  MatTableDataContextBindingBuilder
@@ -196,12 +203,6 @@ export class ElderGridComponent extends ElderDataViewBaseComponent {
196
203
  this.loadNextQueued = false;
197
204
  }
198
205
  }
199
- get trackByFn() {
200
- return (index, entity) => index;
201
- }
202
- trackByIndex(index, items) {
203
- return index;
204
- }
205
206
  showTile(tile) {
206
207
  return tile && (this.hiddenField ? !tile[this.hiddenField] : true);
207
208
  }
@@ -213,19 +214,29 @@ export class ElderGridComponent extends ElderDataViewBaseComponent {
213
214
  scrollTop() {
214
215
  this.virtualScrollViewPort.scrollToIndex(0, 'smooth');
215
216
  }
216
- groupForColumns(nodes, columns) {
217
+ buildGridRow(nodes, columnCount) {
217
218
  const rows = [];
218
- const rowCount = nodes.length / columns;
219
+ const rowCount = nodes.length / columnCount;
219
220
  for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
220
- const rowStartIndex = rowIndex * columns;
221
- const row = nodes.slice(rowStartIndex, rowStartIndex + columns);
222
- while (row.length < columns) {
223
- row.push(null); // Fill up remaining
221
+ const rowStartIndex = rowIndex * columnCount;
222
+ const rowCells = nodes.slice(rowStartIndex, rowStartIndex + columnCount);
223
+ while (rowCells.length < columnCount) {
224
+ rowCells.push(null); // Fill up remaining
224
225
  }
225
- rows.push(row);
226
+ rows.push(new GridRow(this.rowId(rowCells), rowCells));
226
227
  }
227
228
  return rows;
228
229
  }
230
+ rowId(cells) {
231
+ return cells.map(cell => {
232
+ if (cell) {
233
+ return this.getId(cell);
234
+ }
235
+ else {
236
+ return '_';
237
+ }
238
+ }).join('-');
239
+ }
229
240
  responsiveColumn() {
230
241
  const breakpoints = Array.from(this.sizeToColumns.keys());
231
242
  return this.breakpointObserver.observe(breakpoints).pipe(takeUntil(this.destroy$), map(result => {
@@ -248,22 +259,22 @@ export class ElderGridComponent extends ElderDataViewBaseComponent {
248
259
  });
249
260
  return columnCount;
250
261
  }
251
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderGridComponent, deps: [{ token: i1.SelectionModel, optional: true }, { token: i2.ElderDataViewOptionsProvider, optional: true, skipSelf: true }, { token: i3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
252
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: ElderGridComponent, isStandalone: true, selector: "elder-grid", inputs: { toolbarVisible: "toolbarVisible", footerVisible: "footerVisible", itemHeight: "itemHeight", responsiveColumnCount: "responsiveColumnCount", availableSorts: "availableSorts", sortTranslationPrefix: "sortTranslationPrefix", hiddenField: "hiddenField", idField: "idField", selectionVisible: "selectionVisible", pageSizeOptions: "pageSizeOptions", tileTemplate: "tileTemplate", toolbarTemplate: "toolbarTemplate", data: "data", columnCount: "columnCount" }, providers: [
262
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderGridComponent, deps: [{ token: i1.SelectionModel, optional: true }, { token: i2.ElderDataViewOptionsProvider, optional: true, skipSelf: true }, { token: i3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
263
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: ElderGridComponent, isStandalone: true, selector: "elder-grid", inputs: { toolbarVisible: "toolbarVisible", footerVisible: "footerVisible", itemHeight: "itemHeight", responsiveColumnCount: "responsiveColumnCount", availableSorts: "availableSorts", sortTranslationPrefix: "sortTranslationPrefix", hiddenField: "hiddenField", idField: "idField", selectionVisible: "selectionVisible", pageSizeOptions: "pageSizeOptions", tileTemplate: "tileTemplate", toolbarTemplate: "toolbarTemplate", data: "data", columnCount: "columnCount" }, providers: [
253
264
  {
254
265
  provide: ELDER_DATA_VIEW,
255
266
  useExisting: forwardRef(() => ElderGridComponent)
256
267
  }
257
- ], queries: [{ propertyName: "tileTemplateQuery", first: true, predicate: ElderGridTileDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "toolbarTemplateQuery", first: true, predicate: ElderGridToolbarDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "virtualScrollViewPort", first: true, predicate: ["virtualScrollViewPort"], descendants: true, static: true }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n @if (availableCompositeSorts && availableCompositeSorts.length > 0) {\n <elder-composite-sort\n class=\"flex-none\"\n [availableSorts]=\"availableCompositeSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [elderCompositeSortDc]=\"data\"\n >\n </elder-composite-sort>\n }\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"{{scrollContainerId}}\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n elderInfiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"scrollContainerId\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <mat-card appearance=\"outlined\" *ngIf=\"showTile(tile)\" class=\"elder-grid-tile\">\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\">\n </ng-container>\n\n <!-- Overlay (Selection) -->\n <ng-container *ngIf=\"selectionVisible\">\n <div *ngIf=\"selectionModel.selection | async as selection\"\n class=\"elder-grid-tile-overlay elder-click-through\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{ (selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked' }}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n </div>\n </mat-card>\n\n <div *ngIf=\"!showTile(tile)\" class=\"elder-grid-tile-hidden\"></div>\n </ng-container>\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n *ngIf=\"footerVisible\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n <ng-container *ngIf=\"isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{ (dataSnapshot?.data | async)?.length }} / {{ total$ | async }}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n\n <!-- Paged -->\n <mat-paginator #matPaginator *ngIf=\"isActivePaged && (dataActivePaged.page | async) as page\"\n class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n\n <!-- Local Source -->\n <ng-container *ngIf=\"!isActivePaged && !isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{ (dataSnapshot?.data | async)?.length }}\n </span>\n </ng-container>\n\n </div>\n\n\n </div>\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n <div *ngIf=\"tile\" class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{ tile }}</p>\n </div>\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.elder-grid-tile-overlay{position:absolute;inset:0;-webkit-transition:background-color .1s ease-in,opacity .1s ease-in;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-click-through{pointer-events:none}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: DataContextSelectionDirective, selector: "[elderDataContextSelection]", inputs: ["elderDataContextSelectionModel", "elderDataContextSelection"], exportAs: ["elderDataContextSelection"] }, { kind: "component", type: ElderSelectionMasterCheckboxComponent, selector: "elder-selection-master-checkbox" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: DataContextStateIndicatorComponent, selector: "elder-data-context-state-indicator", inputs: ["dataContext"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: ElderInfiniteScrollDirective, selector: "[elderInfiniteScroll]", inputs: ["listenToHost", "eventThrottle", "offsetFactor", "ignoreScrollEvent", "containerId", "scrollContainer"], outputs: ["closeToEnd", "scrolling"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ElderCompositeSortComponent, selector: "elder-composite-sort", inputs: ["availableSorts", "sorts", "translationPrefix"], outputs: ["sortsChange"] }, { kind: "directive", type: ElderCompositeSortDcDirective, selector: "[elderCompositeSortDc]", inputs: ["elderCompositeSortDc"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
268
+ ], queries: [{ propertyName: "tileTemplateQuery", first: true, predicate: ElderGridTileDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "toolbarTemplateQuery", first: true, predicate: ElderGridToolbarDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "virtualScrollViewPort", first: true, predicate: ["virtualScrollViewPort"], descendants: true, static: true }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n>\n\n @if(dataContext$ | async; as data){\n\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n @if (toolbarVisible) {\n <div class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n @if(selectionVisible) {\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n }\n\n <!-- Toolbar -->\n @if(toolbarTemplate) {\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n }\n\n @if (availableCompositeSorts && availableCompositeSorts.length > 0) {\n <elder-composite-sort\n class=\"flex-none\"\n [availableSorts]=\"availableCompositeSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [elderCompositeSortDc]=\"data\"\n >\n </elder-composite-sort>\n }\n </div>\n\n <mat-divider></mat-divider>\n }\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"{{scrollContainerId}}\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n elderInfiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"scrollContainerId\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let gridRow of dataRows$; trackBy: TrackGridRowByIdFn; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n @for (tile of gridRow.cells; track getId(tile)) {\n <!-- Tile Cell -->\n @if (showTile(tile)) {\n <mat-card appearance=\"outlined\" class=\"elder-grid-tile\">\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\"></ng-container>\n <!-- Overlay (Selection) -->\n @if (selectionVisible) {\n @if (selectionModel.selection | async; as selection) {\n <div class=\"elder-grid-tile-overlay elder-click-through\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{ (selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked' }}\n </mat-icon>\n </button>\n </div>\n }\n }\n </div>\n </mat-card>\n } @else {\n <div class=\"elder-grid-tile-hidden\"></div>\n }\n }\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n @if (footerVisible) {\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n @if (isContinuable) {\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{ (dataSnapshot?.data | async)?.length }} / {{ total$ | async }}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n }\n\n <!-- Paged -->\n @if (isActivePaged) {\n @if (dataActivePaged.page | async; as page) {\n <mat-paginator class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n }\n }\n\n <!-- Local Source -->\n @if (!isActivePaged && !isContinuable) {\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{ (dataSnapshot?.data | async)?.length }}\n </span>\n }\n </div>\n }\n </div>\n }\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n @if (tile) {\n <div class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{ tile }}</p>\n </div>\n }\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.elder-grid-tile-overlay{position:absolute;inset:0;-webkit-transition:background-color .1s ease-in,opacity .1s ease-in;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-click-through{pointer-events:none}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: DataContextSelectionDirective, selector: "[elderDataContextSelection]", inputs: ["elderDataContextSelectionModel", "elderDataContextSelection"], exportAs: ["elderDataContextSelection"] }, { kind: "component", type: ElderSelectionMasterCheckboxComponent, selector: "elder-selection-master-checkbox" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: DataContextStateIndicatorComponent, selector: "elder-data-context-state-indicator", inputs: ["dataContext"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: ElderInfiniteScrollDirective, selector: "[elderInfiniteScroll]", inputs: ["listenToHost", "eventThrottle", "offsetFactor", "ignoreScrollEvent", "containerId", "scrollContainer"], outputs: ["closeToEnd", "scrolling"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ElderCompositeSortComponent, selector: "elder-composite-sort", inputs: ["availableSorts", "sorts", "translationPrefix"], outputs: ["sortsChange"] }, { kind: "directive", type: ElderCompositeSortDcDirective, selector: "[elderCompositeSortDc]", inputs: ["elderCompositeSortDc"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
258
269
  }
259
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderGridComponent, decorators: [{
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderGridComponent, decorators: [{
260
271
  type: Component,
261
272
  args: [{ selector: 'elder-grid', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
262
273
  {
263
274
  provide: ELDER_DATA_VIEW,
264
275
  useExisting: forwardRef(() => ElderGridComponent)
265
276
  }
266
- ], standalone: true, imports: [MatCard, NgIf, DataContextSelectionDirective, ElderSelectionMasterCheckboxComponent, NgTemplateOutlet, ElderSingleSortComponent, MatDivider, DataContextStateIndicatorComponent, CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, ElderInfiniteScrollDirective, CdkVirtualForOf, NgFor, MatIconButton, ElderStopEventPropagationDirective, MatIcon, MatProgressBar, MatPaginator, AsyncPipe, ElderCompositeSortComponent, ElderCompositeSortDcDirective], template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n>\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n *ngIf=\"dataContext$ | async as data\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n <div *ngIf=\"toolbarVisible\"\n class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\" *ngIf=\"selectionVisible\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n\n <!-- Toolbar -->\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n </ng-container>\n\n @if (availableCompositeSorts && availableCompositeSorts.length > 0) {\n <elder-composite-sort\n class=\"flex-none\"\n [availableSorts]=\"availableCompositeSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [elderCompositeSortDc]=\"data\"\n >\n </elder-composite-sort>\n }\n </div>\n\n <mat-divider *ngIf=\"toolbarVisible\"></mat-divider>\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"{{scrollContainerId}}\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n elderInfiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"scrollContainerId\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let row of dataRows$; trackBy: trackByIndex; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n <ng-container *ngFor=\"let tile of row; trackBy: trackByFn\">\n\n <!-- Tile Cell -->\n <mat-card appearance=\"outlined\" *ngIf=\"showTile(tile)\" class=\"elder-grid-tile\">\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\">\n </ng-container>\n\n <!-- Overlay (Selection) -->\n <ng-container *ngIf=\"selectionVisible\">\n <div *ngIf=\"selectionModel.selection | async as selection\"\n class=\"elder-grid-tile-overlay elder-click-through\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{ (selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked' }}\n </mat-icon>\n </button>\n </div>\n </ng-container>\n\n </div>\n </mat-card>\n\n <div *ngIf=\"!showTile(tile)\" class=\"elder-grid-tile-hidden\"></div>\n </ng-container>\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n *ngIf=\"footerVisible\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n <ng-container *ngIf=\"isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{ (dataSnapshot?.data | async)?.length }} / {{ total$ | async }}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n\n <!-- Paged -->\n <mat-paginator #matPaginator *ngIf=\"isActivePaged && (dataActivePaged.page | async) as page\"\n class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n\n <!-- Local Source -->\n <ng-container *ngIf=\"!isActivePaged && !isContinuable\">\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{ (dataSnapshot?.data | async)?.length }}\n </span>\n </ng-container>\n\n </div>\n\n\n </div>\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n <div *ngIf=\"tile\" class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{ tile }}</p>\n </div>\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.elder-grid-tile-overlay{position:absolute;inset:0;-webkit-transition:background-color .1s ease-in,opacity .1s ease-in;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-click-through{pointer-events:none}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}\n"] }]
277
+ ], standalone: true, imports: [MatCard, NgIf, DataContextSelectionDirective, ElderSelectionMasterCheckboxComponent, NgTemplateOutlet, ElderSingleSortComponent, MatDivider, DataContextStateIndicatorComponent, CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, ElderInfiniteScrollDirective, CdkVirtualForOf, NgFor, MatIconButton, ElderStopEventPropagationDirective, MatIcon, MatProgressBar, MatPaginator, AsyncPipe, ElderCompositeSortComponent, ElderCompositeSortDcDirective], template: "<mat-card class=\"full\"\n [class.embedded]=\"embedded\"\n [appearance]=\"appearance\"\n>\n\n @if(dataContext$ | async; as data){\n\n <!-- Grid Browser -->\n <div class=\"layout-col full elder-grid-container\"\n [elderDataContextSelection]=\"data\" #dataSelection=\"elderDataContextSelection\"\n [elderDataContextSelectionModel]=\"selectionModel\"\n >\n <!-- Toolbar Row -->\n @if (toolbarVisible) {\n <div class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n\n @if(selectionVisible) {\n <div class=\"layout-col flex-none\" style=\"padding-left: 8px; padding-right: 8px\">\n <elder-selection-master-checkbox class=\"flex-none\" style=\"padding-left: 12px\"></elder-selection-master-checkbox>\n </div>\n }\n\n <!-- Toolbar -->\n @if(toolbarTemplate) {\n <ng-template *ngTemplateOutlet=\"toolbarTemplate; context: {$implicit: this}\"></ng-template>\n }\n\n @if (availableCompositeSorts && availableCompositeSorts.length > 0) {\n <elder-composite-sort\n class=\"flex-none\"\n [availableSorts]=\"availableCompositeSorts\"\n [translationPrefix]=\"sortTranslationPrefix\"\n [elderCompositeSortDc]=\"data\"\n >\n </elder-composite-sort>\n }\n </div>\n\n <mat-divider></mat-divider>\n }\n\n <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"data\">\n </elder-data-context-state-indicator>\n\n <!-- [cdkDropListSortingDisabled]=\"true\" -->\n <!-- cdkDropList -->\n <cdk-virtual-scroll-viewport\n class=\"layout-col flex elder-grid-browser\"\n id=\"{{scrollContainerId}}\"\n [itemSize]=\"itemHeight\"\n [minBufferPx]=\"itemHeight * 2\"\n [maxBufferPx]=\"itemHeight * 3\"\n #virtualScrollViewPort\n elderInfiniteScroll\n [eventThrottle]=\"200\"\n [offsetFactor]=\"2\"\n [ignoreScrollEvent]=\"data.loading | async\"\n [containerId]=\"scrollContainerId\" [listenToHost]=\"false\"\n (closeToEnd)=\"requestMoreDataZoned($event)\">\n\n <!-- (scrolling)=\"onScrolling($event)\" -->\n\n <div\n *cdkVirtualFor=\"let gridRow of dataRows$; trackBy: TrackGridRowByIdFn; templateCacheSize: 50\"\n class=\"elder-grid-tile-row\"\n [style.height]=\"itemHeight + 'px'\">\n\n @for (tile of gridRow.cells; track getId(tile)) {\n <!-- Tile Cell -->\n @if (showTile(tile)) {\n <mat-card appearance=\"outlined\" class=\"elder-grid-tile\">\n <div class=\"elder-grid-tile-content\"\n (click)=\"onItemClick(tile)\"\n (dblclick)=\"onItemDoubleClick(tile)\">\n\n <ng-container\n *ngTemplateOutlet=\"tileTemplate || simpleTileTemplate; context: {$implicit: tile}\"></ng-container>\n <!-- Overlay (Selection) -->\n @if (selectionVisible) {\n @if (selectionModel.selection | async; as selection) {\n <div class=\"elder-grid-tile-overlay elder-click-through\"\n [class.elder-grid-tile-overlay-hidden]=\"!inSelectionMode(selection)\"\n [class.elder-grid-tile-overlay-visible]=\"inSelectionMode(selection)\"\n >\n <button mat-icon-button type=\"button\"\n (click)=\"selectionModel.toggle(tile)\" elderStopEventPropagation\n class=\"elder-grid-tile-check\">\n <mat-icon\n [class.elder-selected]=\"(selectionModel.observeSelection(tile) | async)\"\n >\n {{ (selectionModel.observeSelection(tile) | async) ? 'check_circle' : 'radio_button_unchecked' }}\n </mat-icon>\n </button>\n </div>\n }\n }\n </div>\n </mat-card>\n } @else {\n <div class=\"elder-grid-tile-hidden\"></div>\n }\n }\n\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n\n <mat-progress-bar class=\"flex-none\"\n [mode]=\"(data?.loading | async) ? 'indeterminate' : 'determinate'\"\n [color]=\"(data && (data.status | async)?.hasError) ? 'warn' : 'primary'\">\n </mat-progress-bar>\n\n <!-- Footer -->\n @if (footerVisible) {\n <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\"\n style=\"padding-right: 12px\">\n\n <!-- Continuable -->\n @if (isContinuable) {\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{ (dataSnapshot?.data | async)?.length }} / {{ total$ | async }}\n </span>\n\n <button mat-icon-button type=\"button\"\n color=\"primary\"\n [disabled]=\"!(canLoadMore$ | async)\"\n (click)=\"dataSnapshot.loadMore()\">\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n }\n\n <!-- Paged -->\n @if (isActivePaged) {\n @if (dataActivePaged.page | async; as page) {\n <mat-paginator class=\"flex-none\"\n [length]=\"dataContext?.total | async\"\n [pageIndex]=\"page?.index\"\n [pageSize]=\"page?.size\"\n [pageSizeOptions]=\"pageSizeOptions\">\n </mat-paginator>\n }\n }\n\n <!-- Local Source -->\n @if (!isActivePaged && !isContinuable) {\n <span class=\"mat-caption noselect\" style=\"color: gray\">\n {{ (dataSnapshot?.data | async)?.length }}\n </span>\n }\n </div>\n }\n </div>\n }\n</mat-card>\n\n<ng-template #simpleTileTemplate let-tile>\n @if (tile) {\n <div class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n <p class=\"noselect\">Tile: {{ tile }}</p>\n </div>\n }\n</ng-template>\n", styles: [":host{min-width:0;min-height:0}.elder-grid-tile-row{display:flex;flex-direction:row;padding:8px}.elder-grid-tile-row:first-child{padding-top:16px}.elder-grid-tile-hidden{flex:0 1 100%;margin:8px;width:100%;height:100%}.elder-grid-tile-content{position:relative;width:100%;height:100%;overflow:hidden}.elder-grid-tile-overlay{position:absolute;inset:0;-webkit-transition:background-color .1s ease-in,opacity .1s ease-in;transition:background-color .1s ease-in,opacity .1s ease-in}.elder-click-through{pointer-events:none}.elder-grid-tile-overlay-visible{opacity:1}.elder-grid-tile-overlay-hidden{opacity:0}\n"] }]
267
278
  }], ctorParameters: () => [{ type: i1.SelectionModel, decorators: [{
268
279
  type: Optional
269
280
  }] }, { type: i2.ElderDataViewOptionsProvider, decorators: [{
@@ -311,4 +322,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
311
322
  }], columnCount: [{
312
323
  type: Input
313
324
  }] } });
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9ncmlkL2VsZGVyLWdyaWQvZWxkZXItZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9ncmlkL2VsZGVyLWdyaWQvZWxkZXItZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsUUFBUSxFQUNSLFFBQVEsRUFDUixXQUFXLEVBRVgsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUF3Qyx3QkFBd0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xJLE9BQU8sRUFBQyx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RyxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxF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TUFBTSxFQUFFLElBQUksRUFBQztnQkE4RC9ELFlBQVk7c0JBRHRCLEtBQUs7Z0JBVUssZUFBZTtzQkFEekIsS0FBSztnQkFVSyxJQUFJO3NCQURkLEtBQUs7Z0JBc0JLLFdBQVc7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNraXBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0lEYXRhQ29udGV4dCwgSURhdGFDb250ZXh0Q29udGludWFibGUsIGlzQ29udGludWFibGVEYXRhQ29udGV4dH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2RhdGEvZGF0YS1jb250ZXh0L2RhdGEtY29udGV4dCc7XG5pbXBvcnQge0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCwgQ2RrVmlydHVhbEZvck9mfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7U2VsZWN0aW9uTW9kZWx9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9zZWxlY3Rpb24vc2VsZWN0aW9uLW1vZGVsJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtTb3J0fSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZGF0YS9zb3J0JztcbmltcG9ydCB7RUxERVJfREFUQV9WSUVXfSBmcm9tICcuLi8uLi9iYXNlL2VsZGVyLWRhdGEtdmlldyc7XG5pbXBvcnQge0VsZGVyRGF0YVZpZXdCYXNlQ29tcG9uZW50fSBmcm9tICcuLi8uLi9iYXNlL2VsZGVyLWRhdGEtdmlldy1iYXNlJztcbmltcG9ydCB7TWF0UGFnaW5hdG9yfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHtNYXRUYWJsZURhdGFDb250ZXh0QmluZGluZ0J1aWxkZXJ9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9tYXQtdGFibGUtZGF0YS1jb250ZXh0LWJpbmRpbmcnO1xuaW1wb3J0IHtFbGRlckRhdGFWaWV3T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi9iYXNlL2VsZGVyLWRhdGEtdmlldy1vcHRpb25zLXByb3ZpZGVyJztcbmltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50c30gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQge01hdFByb2dyZXNzQmFyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHtNYXRJY29ufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7RWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvbkRpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZm9ybXMvZGlyZWN0aXZlcy9lbGRlci1zdG9wLWV2ZW50LXByb3BhZ2F0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQge01hdEljb25CdXR0b259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge0VsZGVySW5maW5pdGVTY3JvbGxEaXJlY3RpdmV9IGZyb20gJy4uLy4uLy4uL2luZmluaXRlc2Nyb2xsL2VsZGVyLWluZmluaXRlLXNjcm9sbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtEYXRhQ29udGV4dFN0YXRlSW5kaWNhdG9yQ29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21tb24vZGF0YS1jb250ZXh0LXN0YXRlLWluZGljYXRvci9kYXRhLWNvbnRleHQtc3RhdGUtaW5kaWNhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdERpdmlkZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHtFbGRlclNpbmdsZVNvcnRDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbW1vbi9lbGRlci1zaW5nbGUtc29ydC9lbGRlci1zaW5nbGUtc29ydC5jb21wb25lbnQnO1xuaW1wb3J0IHtFbGRlclNlbGVjdGlvbk1hc3RlckNoZWNrYm94Q29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21tb24vc2VsZWN0aW9uL2VsZGVyLXNlbGVjdGlvbi1tYXN0ZXItY2hlY2tib3gvZWxkZXItc2VsZWN0aW9uLW1hc3Rlci1jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHtEYXRhQ29udGV4dFNlbGVjdGlvbkRpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vY29tbW9uL3NlbGVjdGlvbi9kYXRhLWNvbnRleHQtc2VsZWN0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQge05nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIE5nRm9yLCBBc3luY1BpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge01hdENhcmR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHtFbGRlckNvbXBvc2l0ZVNvcnRDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbW1vbi9jb21wb3NpdGUtc29ydC9lbGRlci1jb21wb3NpdGUtc29ydC9lbGRlci1jb21wb3NpdGUtc29ydC5jb21wb25lbnQnO1xuaW1wb3J0IHtDb21wb3NpdGVTb3J0fSBmcm9tICcuLi8uLi9jb21tb24vY29tcG9zaXRlLXNvcnQvY29tcG9zaXRlLXNvcnQnO1xuaW1wb3J0IHtFbGRlckNvbXBvc2l0ZVNvcnREY0RpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbXBvc2l0ZS1zb3J0L2NvbXBvc2l0ZS1zb3J0LWRjLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1V1aWRVdGlsfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vdXRpbHMvdXVpZC11dGlsJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZWxkZXJHcmlkVGlsZV0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJHcmlkVGlsZURpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZikge1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgcHJvamVjdHMgbWFya2VkIGNvbnRlbnQgaW50byBhIHRvb2xiYXIuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2VsZGVyR3JpZFRvb2xiYXJdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyR3JpZFRvb2xiYXJEaXJlY3RpdmUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZlxuICApIHtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VsZGVyLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lbGRlci1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEVMREVSX0RBVEFfVklFVyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVsZGVyR3JpZENvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdENhcmQsIE5nSWYsIERhdGFDb250ZXh0U2VsZWN0aW9uRGlyZWN0aXZlLCBFbGRlclNlbGVjdGlvbk1hc3RlckNoZWNrYm94Q29tcG9uZW50LCBOZ1RlbXBsYXRlT3V0bGV0LCBFbGRlclNpbmdsZVNvcnRDb21wb25lbnQsIE1hdERpdmlkZXIsIERhdGFDb250ZXh0U3RhdGVJbmRpY2F0b3JDb21wb25lbnQsIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCwgRWxkZXJJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSwgQ2RrVmlydHVhbEZvck9mLCBOZ0ZvciwgTWF0SWNvbkJ1dHRvbiwgRWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvbkRpcmVjdGl2ZSwgTWF0SWNvbiwgTWF0UHJvZ3Jlc3NCYXIsIE1hdFBhZ2luYXRvciwgQXN5bmNQaXBlLCBFbGRlckNvbXBvc2l0ZVNvcnRDb21wb25lbnQsIEVsZGVyQ29tcG9zaXRlU29ydERjRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlckdyaWRDb21wb25lbnQgZXh0ZW5kcyBFbGRlckRhdGFWaWV3QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIHByaXZhdGUgX2NvbHVtbkNvdW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDQpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2l6ZVRvQ29sdW1ucyA9IG5ldyBNYXAoW1xuICAgIFtCcmVha3BvaW50cy5YU21hbGwsIDFdLFxuICAgIFtCcmVha3BvaW50cy5TbWFsbCwgMl0sXG4gICAgW0JyZWFrcG9pbnRzLk1lZGl1bSwgM10sXG4gICAgW0JyZWFrcG9pbnRzLkxhcmdlLCA0XSxcbiAgICBbQnJlYWtwb2ludHMuWExhcmdlLCA1XVxuICBdKTtcblxuICAvKipcbiAgICogTG9hZCBuZXh0IGNodW5rIGFmdGVyIGN1cnJlbnQgaXMgZG9uZVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkTmV4dFF1ZXVlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSAgc2Nyb2xsQ29udGFpbmVySWQgPSAnZG9jdW1lbnRzLWNvbnRhaW5lci0nICsgVXVpZFV0aWwud2Vha1V1aWQ0KCk7XG5cbiAgcHVibGljIGRhdGFSb3dzJDogT2JzZXJ2YWJsZTxhbnlbXVtdPjtcblxuICBwdWJsaWMgY2FuTG9hZE1vcmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgdG90YWwkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgQENvbnRlbnRDaGlsZChFbGRlckdyaWRUaWxlRGlyZWN0aXZlLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyB0aWxlVGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfdGlsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyVmlzaWJsZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvb3RlclZpc2libGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpdGVtSGVpZ2h0ID0gMjUwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZXNwb25zaXZlQ29sdW1uQ291bnQgPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGQoJ3ZpcnR1YWxTY3JvbGxWaWV3UG9ydCcsIHtzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgdmlydHVhbFNjcm9sbFZpZXdQb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cblxuICBwdWJsaWMgYXZhaWxhYmxlQ29tcG9zaXRlU29ydHM6IENvbXBvc2l0ZVNvcnRbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYXZhaWxhYmxlU29ydHMoYXZhaWxhYmxlU29ydHM6IHN0cmluZ1tdIHwgQ29tcG9zaXRlU29ydFtdKXtcbiAgICB0aGlzLmF2YWlsYWJsZUNvbXBvc2l0ZVNvcnRzID0gQ29tcG9zaXRlU29ydC5jb2VyY2UoYXZhaWxhYmxlU29ydHMpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNvcnRUcmFuc2xhdGlvblByZWZpeCA9ICdkb2N1bWVudHMuc29ydHMuJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaGlkZGVuRmllbGQ6IHN0cmluZyA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIE5vIGxvbmdlciByZXF1aXJlZC4gSWQgaXMgYXV0b21hdGljYWxseSBwaWNrZWQgZnJvbSB0aGUgRGF0YVNvdXJjZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpZEZpZWxkID0gJ2lkJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uVmlzaWJsZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBhZ2VTaXplT3B0aW9ucyA9IFszMCwgNTAsIDEwMCwgMTUwLCAyMDBdO1xuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcilcbiAgcHVibGljIG1hdFBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gIEBDb250ZW50Q2hpbGQoRWxkZXJHcmlkVG9vbGJhckRpcmVjdGl2ZSwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgdG9vbGJhclRlbXBsYXRlUXVlcnk6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgX3Rvb2xiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8YW55PixcbiAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBkYXRhVmlld09wdGlvbnNQcm92aWRlcjogRWxkZXJEYXRhVmlld09wdGlvbnNQcm92aWRlcixcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXG4gICkge1xuICAgIHN1cGVyKHNlbGVjdGlvbk1vZGVsLCBkYXRhVmlld09wdGlvbnNQcm92aWRlcik7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogTGlmZWN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIGNvbnN0IGNvbHVtbkNvdW50JCA9IChcbiAgICAgIHRoaXMucmVzcG9uc2l2ZUNvbHVtbkNvdW50XG4gICAgICAgID8gdGhpcy5yZXNwb25zaXZlQ29sdW1uKClcbiAgICAgICAgOiB0aGlzLl9jb2x1bW5Db3VudCk7XG5cbiAgICB0aGlzLmRhdGFSb3dzJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBbXG4gICAgICAgIHRoaXMuZGF0YUNvbnRleHQkLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGRjID0+ICEhZGMpLFxuICAgICAgICAgIHN3aXRjaE1hcChkYyA9PiBkYy5kYXRhKVxuICAgICAgICApLFxuICAgICAgICBjb2x1bW5Db3VudCRcbiAgICAgIF0pLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgbWFwKFxuICAgICAgICAoW2RhdGEsIGNvbHVtbnNdKSA9PiB0aGlzLmdyb3VwRm9yQ29sdW1ucyhkYXRhLCBjb2x1bW5zKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXG4gICAgTWF0VGFibGVEYXRhQ29udGV4dEJpbmRpbmdCdWlsZGVyXG4gICAgICAuc3RhcnQodGhpcy5kYXRhQ29udGV4dCQpXG4gICAgICAud2l0aFBhZ2luYXRvcihvZih0aGlzLm1hdFBhZ2luYXRvcikpXG4gICAgICAuYmluZFVudGlsKHRoaXMuZGVzdHJveSQpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0aWxlVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLl90aWxlVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGlsZVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl90aWxlVGVtcGxhdGUgfHwgdGhpcy50aWxlVGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdG9vbGJhclRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fdG9vbGJhclRlbXBsYXRlID0gdGVtcGxhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvb2xiYXJUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdG9vbGJhclRlbXBsYXRlIHx8IHRoaXMudG9vbGJhclRlbXBsYXRlUXVlcnk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGEoZGF0YTogSURhdGFDb250ZXh0PGFueT4pIHtcbiAgICB0aGlzLmRhdGFDb250ZXh0JC5uZXh0KGRhdGEpO1xuXG4gICAgdGhpcy50b3RhbCQgPSBkYXRhLnRvdGFsLnBpcGUoXG4gICAgICBtYXAodG90YWwgPT4gdG90YWwgPyB0b3RhbCArICcnIDogJ+KInicpXG4gICAgKTtcblxuICAgIGlmIChpc0NvbnRpbnVhYmxlRGF0YUNvbnRleHQoZGF0YSkpIHtcbiAgICAgIHRoaXMuY2FuTG9hZE1vcmUkID0gY29tYmluZUxhdGVzdChbZGF0YS5sb2FkaW5nLCBkYXRhLmhhc01vcmVEYXRhXSkucGlwZShcbiAgICAgICAgbWFwKChbbG9hZGluZywgaGFzTW9yZURhdGFdKSA9PiAhbG9hZGluZyAmJiBoYXNNb3JlRGF0YSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FuTG9hZE1vcmUkID0gb2YoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YVNuYXBzaG90KCk6IElEYXRhQ29udGV4dENvbnRpbnVhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFDb250aW51YWJsZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY29sdW1uQ291bnQoY291bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX2NvbHVtbkNvdW50Lm5leHQoY291bnQpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2x1bW5Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5Db3VudC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIGluU2VsZWN0aW9uTW9kZShjdXJyZW50U2VsZWN0aW9uOiBhbnlbXSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKHRoaXMuaW50ZXJhY3Rpb25Nb2RlID09PSAnc2VsZWN0aW9uJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gJiYgY3VycmVudFNlbGVjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdE1vcmVEYXRhWm9uZWQoZXZlbnQ6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhU25hcHNob3QuaGFzTW9yZURhdGFTbmFwc2hvdCkge1xuXG4gICAgICBpZiAodGhpcy5kYXRhU25hcHNob3Quc25hcHNob3QuaXNMb2FkaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZE5leHRRdWV1ZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhU25hcHNob3QubG9hZE1vcmUoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICBsb2FkZWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkTmV4dFF1ZXVlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE5leHRRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RNb3JlRGF0YVpvbmVkKGV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZE5leHRRdWV1ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRyYWNrQnlGbigpOiBUcmFja0J5RnVuY3Rpb248YW55PiB7XG4gICAgcmV0dXJuIChpbmRleDogbnVtYmVyLCBlbnRpdHk6IGFueSkgPT4gaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIsIGl0ZW1zOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgcHVibGljIHNob3dUaWxlKHRpbGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aWxlICYmICh0aGlzLmhpZGRlbkZpZWxkID8gIXRpbGVbdGhpcy5oaWRkZW5GaWVsZF0gOiB0cnVlKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIE1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgc2Nyb2xsVG9wKCkge1xuICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdQb3J0LnNjcm9sbFRvSW5kZXgoMCwgJ3Ntb290aCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEZvckNvbHVtbnMobm9kZXM6IGFueVtdLCBjb2x1bW5zOiBudW1iZXIpOiBhbnlbXVtdIHtcblxuICAgIGNvbnN0IHJvd3M6IGFueVtdW10gPSBbXTtcblxuICAgIGNvbnN0IHJvd0NvdW50ID0gbm9kZXMubGVuZ3RoIC8gY29sdW1ucztcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCByb3dDb3VudDsgcm93SW5kZXgrKykge1xuICAgICAgY29uc3Qgcm93U3RhcnRJbmRleCA9IHJvd0luZGV4ICogY29sdW1ucztcbiAgICAgIGNvbnN0IHJvdyA9IG5vZGVzLnNsaWNlKHJvd1N0YXJ0SW5kZXgsIHJvd1N0YXJ0SW5kZXggKyBjb2x1bW5zKTtcblxuICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBjb2x1bW5zKSB7XG4gICAgICAgIHJvdy5wdXNoKG51bGwpOyAvLyBGaWxsIHVwIHJlbWFpbmluZ1xuICAgICAgfVxuICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICBwcml2YXRlIHJlc3BvbnNpdmVDb2x1bW4oKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBjb25zdCBicmVha3BvaW50cyA9IEFycmF5LmZyb20odGhpcy5zaXplVG9Db2x1bW5zLmtleXMoKSk7XG4gICAgcmV0dXJuIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoYnJlYWtwb2ludHMpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgbGV0IGFjdGl2ZVNpemUgPSBCcmVha3BvaW50cy5NZWRpdW07XG4gICAgICAgIGZvciAoY29uc3QgcXVlcnkgb2YgT2JqZWN0LmtleXMocmVzdWx0LmJyZWFrcG9pbnRzKSkge1xuICAgICAgICAgIGlmIChyZXN1bHQuYnJlYWtwb2ludHNbcXVlcnldKSB7XG4gICAgICAgICAgICBhY3RpdmVTaXplID0gcXVlcnk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZVRvQ29sdW1ucy5nZXQoYWN0aXZlU2l6ZSk7XG4gICAgICB9KSxcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuYWN0aXZlQ29sdW1uQ291bnQoKSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFjdGl2ZUNvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gMTtcbiAgICB0aGlzLnNpemVUb0NvbHVtbnMuZm9yRWFjaCgoY29scywgbXFBbGlhcykgPT4ge1xuICAgICAgaWYgKHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChtcUFsaWFzKSkge1xuICAgICAgICBjb2x1bW5Db3VudCA9IGNvbHM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbHVtbkNvdW50O1xuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJmdWxsXCJcbiAgICAgICAgICBbY2xhc3MuZW1iZWRkZWRdPVwiZW1iZWRkZWRcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuPlxuICA8IS0tIEdyaWQgQnJvd3NlciAtLT5cbiAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZnVsbCBlbGRlci1ncmlkLWNvbnRhaW5lclwiXG4gICAgICAgKm5nSWY9XCJkYXRhQ29udGV4dCQgfCBhc3luYyBhcyBkYXRhXCJcbiAgICAgICBbZWxkZXJEYXRhQ29udGV4dFNlbGVjdGlvbl09XCJkYXRhXCIgI2RhdGFTZWxlY3Rpb249XCJlbGRlckRhdGFDb250ZXh0U2VsZWN0aW9uXCJcbiAgICAgICBbZWxkZXJEYXRhQ29udGV4dFNlbGVjdGlvbk1vZGVsXT1cInNlbGVjdGlvbk1vZGVsXCJcbiAgPlxuICAgIDwhLS0gVG9vbGJhciBSb3cgLS0+XG4gICAgPGRpdiAqbmdJZj1cInRvb2xiYXJWaXNpYmxlXCJcbiAgICAgICAgIGNsYXNzPVwibGF5b3V0LXJvdyBwbGFjZS1zdGFydC1jZW50ZXIgZmxleC1ub25lIGVsZGVyLWdyaWQtdG9vbGJhclwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBmbGV4LW5vbmVcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4OyBwYWRkaW5nLXJpZ2h0OiA4cHhcIiAqbmdJZj1cInNlbGVjdGlvblZpc2libGVcIj5cbiAgICAgICAgPGVsZGVyLXNlbGVjdGlvbi1tYXN0ZXItY2hlY2tib3ggY2xhc3M9XCJmbGV4LW5vbmVcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTJweFwiPjwvZWxkZXItc2VsZWN0aW9uLW1hc3Rlci1jaGVja2JveD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFRvb2xiYXIgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9vbGJhclRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXJUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogdGhpc31cIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIEBpZiAoYXZhaWxhYmxlQ29tcG9zaXRlU29ydHMgJiYgYXZhaWxhYmxlQ29tcG9zaXRlU29ydHMubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZWxkZXItY29tcG9zaXRlLXNvcnRcbiAgICAgICAgICBjbGFzcz1cImZsZXgtbm9uZVwiXG4gICAgICAgICAgW2F2YWlsYWJsZVNvcnRzXT1cImF2YWlsYWJsZUNvbXBvc2l0ZVNvcnRzXCJcbiAgICAgICAgICBbdHJhbnNsYXRpb25QcmVmaXhdPVwic29ydFRyYW5zbGF0aW9uUHJlZml4XCJcbiAgICAgICAgICBbZWxkZXJDb21wb3NpdGVTb3J0RGNdPVwiZGF0YVwiXG4gICAgICAgID5cbiAgICAgICAgPC9lbGRlci1jb21wb3NpdGUtc29ydD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cInRvb2xiYXJWaXNpYmxlXCI+PC9tYXQtZGl2aWRlcj5cblxuICAgIDxlbGRlci1kYXRhLWNvbnRleHQtc3RhdGUtaW5kaWNhdG9yIGNsYXNzPVwiZmxleC1ub25lXCIgW2RhdGFDb250ZXh0XT1cImRhdGFcIj5cbiAgICA8L2VsZGVyLWRhdGEtY29udGV4dC1zdGF0ZS1pbmRpY2F0b3I+XG5cbiAgICA8IS0tIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCIgLS0+XG4gICAgPCEtLSBjZGtEcm9wTGlzdCAtLT5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICBjbGFzcz1cImxheW91dC1jb2wgZmxleCBlbGRlci1ncmlkLWJyb3dzZXJcIlxuICAgICAgaWQ9XCJ7e3Njcm9sbENvbnRhaW5lcklkfX1cIlxuICAgICAgW2l0ZW1TaXplXT1cIml0ZW1IZWlnaHRcIlxuICAgICAgW21pbkJ1ZmZlclB4XT1cIml0ZW1IZWlnaHQgKiAyXCJcbiAgICAgIFttYXhCdWZmZXJQeF09XCJpdGVtSGVpZ2h0ICogM1wiXG4gICAgICAjdmlydHVhbFNjcm9sbFZpZXdQb3J0XG4gICAgICBlbGRlckluZmluaXRlU2Nyb2xsXG4gICAgICBbZXZlbnRUaHJvdHRsZV09XCIyMDBcIlxuICAgICAgW29mZnNldEZhY3Rvcl09XCIyXCJcbiAgICAgIFtpZ25vcmVTY3JvbGxFdmVudF09XCJkYXRhLmxvYWRpbmcgfCBhc3luY1wiXG4gICAgICBbY29udGFpbmVySWRdPVwic2Nyb2xsQ29udGFpbmVySWRcIiBbbGlzdGVuVG9Ib3N0XT1cImZhbHNlXCJcbiAgICAgIChjbG9zZVRvRW5kKT1cInJlcXVlc3RNb3JlRGF0YVpvbmVkKCRldmVudClcIj5cblxuICAgICAgPCEtLSAoc2Nyb2xsaW5nKT1cIm9uU2Nyb2xsaW5nKCRldmVudClcIiAtLT5cblxuICAgICAgPGRpdlxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YVJvd3MkOyB0cmFja0J5OiB0cmFja0J5SW5kZXg7IHRlbXBsYXRlQ2FjaGVTaXplOiA1MFwiXG4gICAgICAgIGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlLXJvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiaXRlbUhlaWdodCArICdweCdcIj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0aWxlIG9mIHJvdzsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG5cbiAgICAgICAgICA8IS0tIFRpbGUgQ2VsbCAtLT5cbiAgICAgICAgICA8bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgKm5nSWY9XCJzaG93VGlsZSh0aWxlKVwiIGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2sodGlsZSlcIlxuICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwib25JdGVtRG91YmxlQ2xpY2sodGlsZSlcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGlsZVRlbXBsYXRlIHx8IHNpbXBsZVRpbGVUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogdGlsZX1cIj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBPdmVybGF5IChTZWxlY3Rpb24pIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uVmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlbC5zZWxlY3Rpb24gfCBhc3luYyBhcyBzZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci1ncmlkLXRpbGUtb3ZlcmxheSBlbGRlci1jbGljay10aHJvdWdoXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lbGRlci1ncmlkLXRpbGUtb3ZlcmxheS1oaWRkZW5dPVwiIWluU2VsZWN0aW9uTW9kZShzZWxlY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lbGRlci1ncmlkLXRpbGUtb3ZlcmxheS12aXNpYmxlXT1cImluU2VsZWN0aW9uTW9kZShzZWxlY3Rpb24pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGlvbk1vZGVsLnRvZ2dsZSh0aWxlKVwiIGVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbGRlci1ncmlkLXRpbGUtY2hlY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVsZGVyLXNlbGVjdGVkXT1cIihzZWxlY3Rpb25Nb2RlbC5vYnNlcnZlU2VsZWN0aW9uKHRpbGUpIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IChzZWxlY3Rpb25Nb2RlbC5vYnNlcnZlU2VsZWN0aW9uKHRpbGUpIHwgYXN5bmMpID8gJ2NoZWNrX2NpcmNsZScgOiAncmFkaW9fYnV0dG9uX3VuY2hlY2tlZCcgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2FyZD5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1RpbGUodGlsZSlcIiBjbGFzcz1cImVsZGVyLWdyaWQtdGlsZS1oaWRkZW5cIj48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cblxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIGNsYXNzPVwiZmxleC1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCIoZGF0YT8ubG9hZGluZyB8IGFzeW5jKSA/ICdpbmRldGVybWluYXRlJyA6ICdkZXRlcm1pbmF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCIoZGF0YSAmJiAoZGF0YS5zdGF0dXMgfCBhc3luYyk/Lmhhc0Vycm9yKSA/ICd3YXJuJyA6ICdwcmltYXJ5J1wiPlxuICAgIDwvbWF0LXByb2dyZXNzLWJhcj5cblxuICAgIDwhLS0gRm9vdGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcm93IHBsYWNlLWVuZC1jZW50ZXIgZ2FwLW1kIGZsZXgtbm9uZSBlbGRlci1ncmlkLWZvb3RlclwiXG4gICAgICAgICAqbmdJZj1cImZvb3RlclZpc2libGVcIlxuICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMnB4XCI+XG5cbiAgICAgIDwhLS0gQ29udGludWFibGUgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDb250aW51YWJsZVwiPlxuICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtY2FwdGlvbiBub3NlbGVjdFwiIHN0eWxlPVwiY29sb3I6IGdyYXlcIj5cbiAgICAgICAgICAgIHt7IChkYXRhU25hcHNob3Q/LmRhdGEgfCBhc3luYyk/Lmxlbmd0aCB9fSAvIHt7IHRvdGFsJCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoY2FuTG9hZE1vcmUkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YVNuYXBzaG90LmxvYWRNb3JlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gUGFnZWQgLS0+XG4gICAgICA8bWF0LXBhZ2luYXRvciAjbWF0UGFnaW5hdG9yICpuZ0lmPVwiaXNBY3RpdmVQYWdlZCAmJiAoZGF0YUFjdGl2ZVBhZ2VkLnBhZ2UgfCBhc3luYykgYXMgcGFnZVwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICBbbGVuZ3RoXT1cImRhdGFDb250ZXh0Py50b3RhbCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPVwicGFnZT8uaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2U/LnNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIj5cbiAgICAgIDwvbWF0LXBhZ2luYXRvcj5cblxuICAgICAgPCEtLSBMb2NhbCBTb3VyY2UgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQWN0aXZlUGFnZWQgJiYgIWlzQ29udGludWFibGVcIj5cbiAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWNhcHRpb24gbm9zZWxlY3RcIiBzdHlsZT1cImNvbG9yOiBncmF5XCI+XG4gICAgICAgICAgICB7eyAoZGF0YVNuYXBzaG90Py5kYXRhIHwgYXN5bmMpPy5sZW5ndGggfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvZGl2PlxuXG5cbiAgPC9kaXY+XG48L21hdC1jYXJkPlxuXG48bmctdGVtcGxhdGUgI3NpbXBsZVRpbGVUZW1wbGF0ZSBsZXQtdGlsZT5cbiAgPGRpdiAqbmdJZj1cInRpbGVcIiBjbGFzcz1cImxheW91dC1jb2wgcGxhY2UtY2VudGVyLWNlbnRlciBmbGV4XCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWVcIj5cbiAgICA8cCBjbGFzcz1cIm5vc2VsZWN0XCI+VGlsZToge3sgdGlsZSB9fTwvcD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9ncmlkL2VsZGVyLWdyaWQvZWxkZXItZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9ncmlkL2VsZGVyLWdyaWQvZWxkZXItZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsUUFBUSxFQUNSLFFBQVEsRUFDUixXQUFXLEVBRVgsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUF3Qyx3QkFBd0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xJLE9BQU8sRUFBQyx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RyxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxF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RDNCLEtBQUs7Z0JBSUMscUJBQXFCO3NCQUQzQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFPdkMsY0FBYztzQkFEeEIsS0FBSztnQkFNQyxxQkFBcUI7c0JBRDNCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFPQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBR0MsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxZQUFZO2dCQUloQixvQkFBb0I7c0JBRDFCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBOEQvRCxZQUFZO3NCQUR0QixLQUFLO2dCQVVLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBVUssSUFBSTtzQkFEZCxLQUFLO2dCQXNCSyxXQUFXO3NCQURyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTa2lwU2VsZixcbiAgVGVtcGxhdGVSZWYsXG4gIFRyYWNrQnlGdW5jdGlvbixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJRGF0YUNvbnRleHQsIElEYXRhQ29udGV4dENvbnRpbnVhYmxlLCBpc0NvbnRpbnVhYmxlRGF0YUNvbnRleHR9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9kYXRhL2RhdGEtY29udGV4dC9kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vc2VsZWN0aW9uL3NlbGVjdGlvbi1tb2RlbCc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U29ydH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2RhdGEvc29ydCc7XG5pbXBvcnQge0VMREVSX0RBVEFfVklFV30gZnJvbSAnLi4vLi4vYmFzZS9lbGRlci1kYXRhLXZpZXcnO1xuaW1wb3J0IHtFbGRlckRhdGFWaWV3QmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vYmFzZS9lbGRlci1kYXRhLXZpZXctYmFzZSc7XG5pbXBvcnQge01hdFBhZ2luYXRvcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7TWF0VGFibGVEYXRhQ29udGV4dEJpbmRpbmdCdWlsZGVyfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZGF0YS9kYXRhLWNvbnRleHQvbWF0LXRhYmxlLWRhdGEtY29udGV4dC1iaW5kaW5nJztcbmltcG9ydCB7RWxkZXJEYXRhVmlld09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vYmFzZS9lbGRlci1kYXRhLXZpZXctb3B0aW9ucy1wcm92aWRlcic7XG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtNYXRQcm9ncmVzc0Jhcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7TWF0SWNvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge0VsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25EaXJlY3RpdmV9IGZyb20gJy4uLy4uLy4uL2Zvcm1zL2RpcmVjdGl2ZXMvZWxkZXItc3RvcC1ldmVudC1wcm9wYWdhdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHtNYXRJY29uQnV0dG9ufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtFbGRlckluZmluaXRlU2Nyb2xsRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi9pbmZpbml0ZXNjcm9sbC9lbGRlci1pbmZpbml0ZS1zY3JvbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7RGF0YUNvbnRleHRTdGF0ZUluZGljYXRvckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vY29tbW9uL2RhdGEtY29udGV4dC1zdGF0ZS1pbmRpY2F0b3IvZGF0YS1jb250ZXh0LXN0YXRlLWluZGljYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHtNYXREaXZpZGVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7RWxkZXJTaW5nbGVTb3J0Q29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21tb24vZWxkZXItc2luZ2xlLXNvcnQvZWxkZXItc2luZ2xlLXNvcnQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEVsZGVyU2VsZWN0aW9uTWFzdGVyQ2hlY2tib3hDb21wb25lbnRcbn0gZnJvbSAnLi4vLi4vY29tbW9uL3NlbGVjdGlvbi9lbGRlci1zZWxlY3Rpb24tbWFzdGVyLWNoZWNrYm94L2VsZGVyLXNlbGVjdGlvbi1tYXN0ZXItY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7RGF0YUNvbnRleHRTZWxlY3Rpb25EaXJlY3RpdmV9IGZyb20gJy4uLy4uL2NvbW1vbi9zZWxlY3Rpb24vZGF0YS1jb250ZXh0LXNlbGVjdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHtOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0ZvciwgQXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtNYXRDYXJkfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7RWxkZXJDb21wb3NpdGVTb3J0Q29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21tb24vY29tcG9zaXRlLXNvcnQvZWxkZXItY29tcG9zaXRlLXNvcnQvZWxkZXItY29tcG9zaXRlLXNvcnQuY29tcG9uZW50JztcbmltcG9ydCB7Q29tcG9zaXRlU29ydH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbXBvc2l0ZS1zb3J0L2NvbXBvc2l0ZS1zb3J0JztcbmltcG9ydCB7RWxkZXJDb21wb3NpdGVTb3J0RGNEaXJlY3RpdmV9IGZyb20gJy4uLy4uL2NvbW1vbi9jb21wb3NpdGUtc29ydC9jb21wb3NpdGUtc29ydC1kYy5kaXJlY3RpdmUnO1xuaW1wb3J0IHtVdWlkVXRpbH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL3V0aWxzL3V1aWQtdXRpbCc7XG5cblxuY2xhc3MgR3JpZFJvdzxUPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgY2VsbHM6IFRbXVxuICApIHtcbiAgfVxufVxuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlbGRlckdyaWRUaWxlXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJHcmlkVGlsZURpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZikge1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgcHJvamVjdHMgbWFya2VkIGNvbnRlbnQgaW50byBhIHRvb2xiYXIuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlbGRlckdyaWRUb29sYmFyXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJHcmlkVG9vbGJhckRpcmVjdGl2ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZWxkZXItZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VsZGVyLWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVMREVSX0RBVEFfVklFVyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVsZGVyR3JpZENvbXBvbmVudClcbiAgICB9XG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNYXRDYXJkLCBOZ0lmLCBEYXRhQ29udGV4dFNlbGVjdGlvbkRpcmVjdGl2ZSwgRWxkZXJTZWxlY3Rpb25NYXN0ZXJDaGVja2JveENvbXBvbmVudCwgTmdUZW1wbGF0ZU91dGxldCwgRWxkZXJTaW5nbGVTb3J0Q29tcG9uZW50LCBNYXREaXZpZGVyLCBEYXRhQ29udGV4dFN0YXRlSW5kaWNhdG9yQ29tcG9uZW50LCBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIEVsZGVySW5maW5pdGVTY3JvbGxEaXJlY3RpdmUsIENka1ZpcnR1YWxGb3JPZiwgTmdGb3IsIE1hdEljb25CdXR0b24sIEVsZGVyU3RvcEV2ZW50UHJvcGFnYXRpb25EaXJlY3RpdmUsIE1hdEljb24sIE1hdFByb2dyZXNzQmFyLCBNYXRQYWdpbmF0b3IsIEFzeW5jUGlwZSwgRWxkZXJDb21wb3NpdGVTb3J0Q29tcG9uZW50LCBFbGRlckNvbXBvc2l0ZVNvcnREY0RpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJHcmlkQ29tcG9uZW50PFQgPSBhbnk+IGV4dGVuZHMgRWxkZXJEYXRhVmlld0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIF9jb2x1bW5Db3VudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPig0KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNpemVUb0NvbHVtbnMgPSBuZXcgTWFwKFtcbiAgICBbQnJlYWtwb2ludHMuWFNtYWxsLCAxXSxcbiAgICBbQnJlYWtwb2ludHMuU21hbGwsIDJdLFxuICAgIFtCcmVha3BvaW50cy5NZWRpdW0sIDNdLFxuICAgIFtCcmVha3BvaW50cy5MYXJnZSwgNF0sXG4gICAgW0JyZWFrcG9pbnRzLlhMYXJnZSwgNV1cbiAgXSk7XG5cbiAgLyoqXG4gICAqIExvYWQgbmV4dCBjaHVuayBhZnRlciBjdXJyZW50IGlzIGRvbmVcbiAgICovXG4gIHByaXZhdGUgbG9hZE5leHRRdWV1ZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2Nyb2xsQ29udGFpbmVySWQgPSAnZG9jdW1lbnRzLWNvbnRhaW5lci0nICsgVXVpZFV0aWwud2Vha1V1aWQ0KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IFRyYWNrR3JpZFJvd0J5SWRGbjogVHJhY2tCeUZ1bmN0aW9uPEdyaWRSb3c8VD4+ID0gKGluZGV4LCByb3cpID0+IHJvdy5pZDtcbiAgcHVibGljIGRhdGFSb3dzJDogT2JzZXJ2YWJsZTxHcmlkUm93PFQ+W10+O1xuXG4gIHB1YmxpYyBjYW5Mb2FkTW9yZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyB0b3RhbCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBAQ29udGVudENoaWxkKEVsZGVyR3JpZFRpbGVEaXJlY3RpdmUsIHtyZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHRpbGVUZW1wbGF0ZVF1ZXJ5OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF90aWxlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRvb2xiYXJWaXNpYmxlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZm9vdGVyVmlzaWJsZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGl0ZW1IZWlnaHQgPSAyNTA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHJlc3BvbnNpdmVDb2x1bW5Db3VudCA9IHRydWU7XG5cbiAgQFZpZXdDaGlsZCgndmlydHVhbFNjcm9sbFZpZXdQb3J0Jywge3N0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsVmlld1BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuXG4gIHB1YmxpYyBhdmFpbGFibGVDb21wb3NpdGVTb3J0czogQ29tcG9zaXRlU29ydFtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhdmFpbGFibGVTb3J0cyhhdmFpbGFibGVTb3J0czogc3RyaW5nW10gfCBDb21wb3NpdGVTb3J0W10pIHtcbiAgICB0aGlzLmF2YWlsYWJsZUNvbXBvc2l0ZVNvcnRzID0gQ29tcG9zaXRlU29ydC5jb2VyY2UoYXZhaWxhYmxlU29ydHMpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNvcnRUcmFuc2xhdGlvblByZWZpeCA9ICdkb2N1bWVudHMuc29ydHMuJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaGlkZGVuRmllbGQ6IHN0cmluZyA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIE5vIGxvbmdlciByZXF1aXJlZC4gSWQgaXMgYXV0b21hdGljYWxseSBwaWNrZWQgZnJvbSB0aGUgRGF0YVNvdXJjZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpZEZpZWxkID0gJ2lkJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uVmlzaWJsZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBhZ2VTaXplT3B0aW9ucyA9IFszMCwgNTAsIDEwMCwgMTUwLCAyMDBdO1xuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcilcbiAgcHVibGljIG1hdFBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gIEBDb250ZW50Q2hpbGQoRWxkZXJHcmlkVG9vbGJhckRpcmVjdGl2ZSwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KVxuICBwdWJsaWMgdG9vbGJhclRlbXBsYXRlUXVlcnk6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgX3Rvb2xiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8YW55PixcbiAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBkYXRhVmlld09wdGlvbnNQcm92aWRlcjogRWxkZXJEYXRhVmlld09wdGlvbnNQcm92aWRlcixcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXG4gICkge1xuICAgIHN1cGVyKHNlbGVjdGlvbk1vZGVsLCBkYXRhVmlld09wdGlvbnNQcm92aWRlcik7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogTGlmZWN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIGNvbnN0IGNvbHVtbkNvdW50JCA9IChcbiAgICAgIHRoaXMucmVzcG9uc2l2ZUNvbHVtbkNvdW50XG4gICAgICAgID8gdGhpcy5yZXNwb25zaXZlQ29sdW1uKClcbiAgICAgICAgOiB0aGlzLl9jb2x1bW5Db3VudCk7XG5cbiAgICB0aGlzLmRhdGFSb3dzJCA9IGNvbWJpbmVMYXRlc3QoXG4gICAgICBbXG4gICAgICAgIHRoaXMuZGF0YUNvbnRleHQkLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKGRjID0+ICEhZGMpLFxuICAgICAgICAgIHN3aXRjaE1hcChkYyA9PiBkYy5kYXRhKVxuICAgICAgICApLFxuICAgICAgICBjb2x1bW5Db3VudCRcbiAgICAgIF0pLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgbWFwKFxuICAgICAgICAoW2RhdGEsIGNvbHVtbkNvdW50XSkgPT4gdGhpcy5idWlsZEdyaWRSb3coZGF0YSwgY29sdW1uQ291bnQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgICBNYXRUYWJsZURhdGFDb250ZXh0QmluZGluZ0J1aWxkZXJcbiAgICAgIC5zdGFydCh0aGlzLmRhdGFDb250ZXh0JClcbiAgICAgIC53aXRoUGFnaW5hdG9yKG9mKHRoaXMubWF0UGFnaW5hdG9yKSlcbiAgICAgIC5iaW5kVW50aWwodGhpcy5kZXN0cm95JCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRpbGVUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX3RpbGVUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICB9XG5cbiAgcHVibGljIGdldCB0aWxlVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbGVUZW1wbGF0ZSB8fCB0aGlzLnRpbGVUZW1wbGF0ZVF1ZXJ5O1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0b29sYmFyVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLl90b29sYmFyVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG9vbGJhclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl90b29sYmFyVGVtcGxhdGUgfHwgdGhpcy50b29sYmFyVGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBJRGF0YUNvbnRleHQ8YW55Pikge1xuICAgIHRoaXMuZGF0YUNvbnRleHQkLm5leHQoZGF0YSk7XG5cbiAgICB0aGlzLnRvdGFsJCA9IGRhdGEudG90YWwucGlwZShcbiAgICAgIG1hcCh0b3RhbCA9PiB0b3RhbCA/IHRvdGFsICsgJycgOiAn4oieJylcbiAgICApO1xuXG4gICAgaWYgKGlzQ29udGludWFibGVEYXRhQ29udGV4dChkYXRhKSkge1xuICAgICAgdGhpcy5jYW5Mb2FkTW9yZSQgPSBjb21iaW5lTGF0ZXN0KFtkYXRhLmxvYWRpbmcsIGRhdGEuaGFzTW9yZURhdGFdKS5waXBlKFxuICAgICAgICBtYXAoKFtsb2FkaW5nLCBoYXNNb3JlRGF0YV0pID0+ICFsb2FkaW5nICYmIGhhc01vcmVEYXRhKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYW5Mb2FkTW9yZSQgPSBvZihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBkYXRhU25hcHNob3QoKTogSURhdGFDb250ZXh0Q29udGludWFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUNvbnRpbnVhYmxlO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjb2x1bW5Db3VudChjb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fY29sdW1uQ291bnQubmV4dChjb3VudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkNvdW50LmdldFZhbHVlKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgaW5TZWxlY3Rpb25Nb2RlKGN1cnJlbnRTZWxlY3Rpb246IGFueVtdKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodGhpcy5pbnRlcmFjdGlvbk1vZGUgPT09ICdzZWxlY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAmJiBjdXJyZW50U2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0TW9yZURhdGFab25lZChldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTbmFwc2hvdC5oYXNNb3JlRGF0YVNuYXBzaG90KSB7XG5cbiAgICAgIGlmICh0aGlzLmRhdGFTbmFwc2hvdC5zbmFwc2hvdC5pc0xvYWRpbmcpIHtcbiAgICAgICAgdGhpcy5sb2FkTmV4dFF1ZXVlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFTbmFwc2hvdC5sb2FkTW9yZSgpXG4gICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgIGxvYWRlZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmxvYWROZXh0UXVldWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTmV4dFF1ZXVlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdE1vcmVEYXRhWm9uZWQoZXZlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkTmV4dFF1ZXVlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzaG93VGlsZSh0aWxlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGlsZSAmJiAodGhpcy5oaWRkZW5GaWVsZCA/ICF0aWxlW3RoaXMuaGlkZGVuRmllbGRdIDogdHJ1ZSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBNZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHNjcm9sbFRvcCgpIHtcbiAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3UG9ydC5zY3JvbGxUb0luZGV4KDAsICdzbW9vdGgnKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBidWlsZEdyaWRSb3cobm9kZXM6IFRbXSwgY29sdW1uQ291bnQ6IG51bWJlcik6IEdyaWRSb3c8VD5bXSB7XG5cbiAgICBjb25zdCByb3dzOiBHcmlkUm93PFQ+W10gPSBbXTtcblxuICAgIGNvbnN0IHJvd0NvdW50ID0gbm9kZXMubGVuZ3RoIC8gY29sdW1uQ291bnQ7XG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgcm93Q291bnQ7IHJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IHJvd1N0YXJ0SW5kZXggPSByb3dJbmRleCAqIGNvbHVtbkNvdW50O1xuICAgICAgY29uc3Qgcm93Q2VsbHMgPSBub2Rlcy5zbGljZShyb3dTdGFydEluZGV4LCByb3dTdGFydEluZGV4ICsgY29sdW1uQ291bnQpO1xuXG4gICAgICB3aGlsZSAocm93Q2VsbHMubGVuZ3RoIDwgY29sdW1uQ291bnQpIHtcbiAgICAgICAgcm93Q2VsbHMucHVzaChudWxsKTsgLy8gRmlsbCB1cCByZW1haW5pbmdcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaChuZXcgR3JpZFJvdzxUPih0aGlzLnJvd0lkKHJvd0NlbGxzKSwgcm93Q2VsbHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG5cbiAgcHJpdmF0ZSByb3dJZChjZWxsczogVFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2VsbHMubWFwKGNlbGwgPT4ge1xuICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SWQoY2VsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ18nO1xuICAgICAgfVxuICAgIH0pLmpvaW4oJy0nKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzcG9uc2l2ZUNvbHVtbigpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRzID0gQXJyYXkuZnJvbSh0aGlzLnNpemVUb0NvbHVtbnMua2V5cygpKTtcbiAgICByZXR1cm4gdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShicmVha3BvaW50cykucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICBsZXQgYWN0aXZlU2l6ZSA9IEJyZWFrcG9pbnRzLk1lZGl1bTtcbiAgICAgICAgZm9yIChjb25zdCBxdWVyeSBvZiBPYmplY3Qua2V5cyhyZXN1bHQuYnJlYWtwb2ludHMpKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5icmVha3BvaW50c1txdWVyeV0pIHtcbiAgICAgICAgICAgIGFjdGl2ZVNpemUgPSBxdWVyeTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zaXplVG9Db2x1bW5zLmdldChhY3RpdmVTaXplKTtcbiAgICAgIH0pLFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICBzdGFydFdpdGgodGhpcy5hY3RpdmVDb2x1bW5Db3VudCgpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2ZUNvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gMTtcbiAgICB0aGlzLnNpemVUb0NvbHVtbnMuZm9yRWFjaCgoY29scywgbXFBbGlhcykgPT4ge1xuICAgICAgaWYgKHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChtcUFsaWFzKSkge1xuICAgICAgICBjb2x1bW5Db3VudCA9IGNvbHM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbHVtbkNvdW50O1xuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJmdWxsXCJcbiAgICAgICAgICBbY2xhc3MuZW1iZWRkZWRdPVwiZW1iZWRkZWRcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuPlxuXG4gIEBpZihkYXRhQ29udGV4dCQgfCBhc3luYzsgYXMgZGF0YSl7XG5cbiAgICA8IS0tIEdyaWQgQnJvd3NlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBmdWxsIGVsZGVyLWdyaWQtY29udGFpbmVyXCJcbiAgICAgICAgIFtlbGRlckRhdGFDb250ZXh0U2VsZWN0aW9uXT1cImRhdGFcIiAjZGF0YVNlbGVjdGlvbj1cImVsZGVyRGF0YUNvbnRleHRTZWxlY3Rpb25cIlxuICAgICAgICAgW2VsZGVyRGF0YUNvbnRleHRTZWxlY3Rpb25Nb2RlbF09XCJzZWxlY3Rpb25Nb2RlbFwiXG4gICAgPlxuICAgICAgPCEtLSBUb29sYmFyIFJvdyAtLT5cbiAgICAgIEBpZiAodG9vbGJhclZpc2libGUpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxheW91dC1yb3cgcGxhY2Utc3RhcnQtY2VudGVyIGZsZXgtbm9uZSBlbGRlci1ncmlkLXRvb2xiYXJcIj5cblxuICAgICAgICAgIEBpZihzZWxlY3Rpb25WaXNpYmxlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBmbGV4LW5vbmVcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4OyBwYWRkaW5nLXJpZ2h0OiA4cHhcIj5cbiAgICAgICAgICAgICAgPGVsZGVyLXNlbGVjdGlvbi1tYXN0ZXItY2hlY2tib3ggY2xhc3M9XCJmbGV4LW5vbmVcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTJweFwiPjwvZWxkZXItc2VsZWN0aW9uLW1hc3Rlci1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gVG9vbGJhciAtLT5cbiAgICAgICAgICBAaWYodG9vbGJhclRlbXBsYXRlKSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IHRoaXN9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKGF2YWlsYWJsZUNvbXBvc2l0ZVNvcnRzICYmIGF2YWlsYWJsZUNvbXBvc2l0ZVNvcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxlbGRlci1jb21wb3NpdGUtc29ydFxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtbm9uZVwiXG4gICAgICAgICAgICAgIFthdmFpbGFibGVTb3J0c109XCJhdmFpbGFibGVDb21wb3NpdGVTb3J0c1wiXG4gICAgICAgICAgICAgIFt0cmFuc2xhdGlvblByZWZpeF09XCJzb3J0VHJhbnNsYXRpb25QcmVmaXhcIlxuICAgICAgICAgICAgICBbZWxkZXJDb21wb3NpdGVTb3J0RGNdPVwiZGF0YVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2VsZGVyLWNvbXBvc2l0ZS1zb3J0PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICB9XG5cbiAgICAgIDxlbGRlci1kYXRhLWNvbnRleHQtc3RhdGUtaW5kaWNhdG9yIGNsYXNzPVwiZmxleC1ub25lXCIgW2RhdGFDb250ZXh0XT1cImRhdGFcIj5cbiAgICAgIDwvZWxkZXItZGF0YS1jb250ZXh0LXN0YXRlLWluZGljYXRvcj5cblxuICAgICAgPCEtLSBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiIC0tPlxuICAgICAgPCEtLSBjZGtEcm9wTGlzdCAtLT5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgY2xhc3M9XCJsYXlvdXQtY29sIGZsZXggZWxkZXItZ3JpZC1icm93c2VyXCJcbiAgICAgICAgaWQ9XCJ7e3Njcm9sbENvbnRhaW5lcklkfX1cIlxuICAgICAgICBbaXRlbVNpemVdPVwiaXRlbUhlaWdodFwiXG4gICAgICAgIFttaW5CdWZmZXJQeF09XCJpdGVtSGVpZ2h0ICogMlwiXG4gICAgICAgIFttYXhCdWZmZXJQeF09XCJpdGVtSGVpZ2h0ICogM1wiXG4gICAgICAgICN2aXJ0dWFsU2Nyb2xsVmlld1BvcnRcbiAgICAgICAgZWxkZXJJbmZpbml0ZVNjcm9sbFxuICAgICAgICBbZXZlbnRUaHJvdHRsZV09XCIyMDBcIlxuICAgICAgICBbb2Zmc2V0RmFjdG9yXT1cIjJcIlxuICAgICAgICBbaWdub3JlU2Nyb2xsRXZlbnRdPVwiZGF0YS5sb2FkaW5nIHwgYXN5bmNcIlxuICAgICAgICBbY29udGFpbmVySWRdPVwic2Nyb2xsQ29udGFpbmVySWRcIiBbbGlzdGVuVG9Ib3N0XT1cImZhbHNlXCJcbiAgICAgICAgKGNsb3NlVG9FbmQpPVwicmVxdWVzdE1vcmVEYXRhWm9uZWQoJGV2ZW50KVwiPlxuXG4gICAgICAgIDwhLS0gKHNjcm9sbGluZyk9XCJvblNjcm9sbGluZygkZXZlbnQpXCIgLS0+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IGdyaWRSb3cgb2YgZGF0YVJvd3MkOyB0cmFja0J5OiBUcmFja0dyaWRSb3dCeUlkRm47IHRlbXBsYXRlQ2FjaGVTaXplOiA1MFwiXG4gICAgICAgICAgY2xhc3M9XCJlbGRlci1ncmlkLXRpbGUtcm93XCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIml0ZW1IZWlnaHQgKyAncHgnXCI+XG5cbiAgICAgICAgICBAZm9yICh0aWxlIG9mIGdyaWRSb3cuY2VsbHM7IHRyYWNrIGdldElkKHRpbGUpKSB7XG4gICAgICAgICAgICA8IS0tIFRpbGUgQ2VsbCAtLT5cbiAgICAgICAgICAgIEBpZiAoc2hvd1RpbGUodGlsZSkpIHtcbiAgICAgICAgICAgICAgPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJvdXRsaW5lZFwiIGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVsZGVyLWdyaWQtdGlsZS1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayh0aWxlKVwiXG4gICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwib25JdGVtRG91YmxlQ2xpY2sodGlsZSlcIj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRpbGVUZW1wbGF0ZSB8fCBzaW1wbGVUaWxlVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IHRpbGV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8IS0tIE92ZXJsYXkgKFNlbGVjdGlvbikgLS0+XG4gICAgICAgICAgICAgICAgICBAaWYgKHNlbGVjdGlvblZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3Rpb25Nb2RlbC5zZWxlY3Rpb24gfCBhc3luYzsgYXMgc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVsZGVyLWdyaWQtdGlsZS1vdmVybGF5IGVsZGVyLWNsaWNrLXRocm91Z2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVsZGVyLWdyaWQtdGlsZS1vdmVybGF5LWhpZGRlbl09XCIhaW5TZWxlY3Rpb25Nb2RlKHNlbGVjdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVsZGVyLWdyaWQtdGlsZS1vdmVybGF5LXZpc2libGVdPVwiaW5TZWxlY3Rpb25Nb2RlKHNlbGVjdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0aW9uTW9kZWwudG9nZ2xlKHRpbGUpXCIgZWxkZXJTdG9wRXZlbnRQcm9wYWdhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVsZGVyLWdyaWQtdGlsZS1jaGVja1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZWxkZXItc2VsZWN0ZWRdPVwiKHNlbGVjdGlvbk1vZGVsLm9ic2VydmVTZWxlY3Rpb24odGlsZSkgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKHNlbGVjdGlvbk1vZGVsLm9ic2VydmVTZWxlY3Rpb24odGlsZSkgfCBhc3luYykgPyAnY2hlY2tfY2lyY2xlJyA6ICdyYWRpb19idXR0b25fdW5jaGVja2VkJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxkZXItZ3JpZC10aWxlLWhpZGRlblwiPjwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cblxuICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgY2xhc3M9XCJmbGV4LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiKGRhdGE/LmxvYWRpbmcgfCBhc3luYykgPyAnaW5kZXRlcm1pbmF0ZScgOiAnZGV0ZXJtaW5hdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCIoZGF0YSAmJiAoZGF0YS5zdGF0dXMgfCBhc3luYyk/Lmhhc0Vycm9yKSA/ICd3YXJuJyA6ICdwcmltYXJ5J1wiPlxuICAgICAgPC9tYXQtcHJvZ3Jlc3MtYmFyPlxuXG4gICAgICA8IS0tIEZvb3RlciAtLT5cbiAgICAgIEBpZiAoZm9vdGVyVmlzaWJsZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBwbGFjZS1lbmQtY2VudGVyIGdhcC1tZCBmbGV4LW5vbmUgZWxkZXItZ3JpZC1mb290ZXJcIlxuICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTJweFwiPlxuXG4gICAgICAgICAgPCEtLSBDb250aW51YWJsZSAtLT5cbiAgICAgICAgICBAaWYgKGlzQ29udGludWFibGUpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWNhcHRpb24gbm9zZWxlY3RcIiBzdHlsZT1cImNvbG9yOiBncmF5XCI+XG4gICAgICAgICAgICB7eyAoZGF0YVNuYXBzaG90Py5kYXRhIHwgYXN5bmMpPy5sZW5ndGggfX0gLyB7eyB0b3RhbCQgfCBhc3luYyB9fVxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKGNhbkxvYWRNb3JlJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRhU25hcHNob3QubG9hZE1vcmUoKVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIFBhZ2VkIC0tPlxuICAgICAgICAgIEBpZiAoaXNBY3RpdmVQYWdlZCkge1xuICAgICAgICAgICAgQGlmIChkYXRhQWN0aXZlUGFnZWQucGFnZSB8IGFzeW5jOyBhcyBwYWdlKSB7XG4gICAgICAgICAgICAgIDxtYXQtcGFnaW5hdG9yIGNsYXNzPVwiZmxleC1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xlbmd0aF09XCJkYXRhQ29udGV4dD8udG90YWwgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPVwicGFnZT8uaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZT8uc2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCI+XG4gICAgICAgICAgICAgIDwvbWF0LXBhZ2luYXRvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIExvY2FsIFNvdXJjZSAtLT5cbiAgICAgICAgICBAaWYgKCFpc0FjdGl2ZVBhZ2VkICYmICFpc0NvbnRpbnVhYmxlKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1jYXB0aW9uIG5vc2VsZWN0XCIgc3R5bGU9XCJjb2xvcjogZ3JheVwiPlxuICAgICAgICAgICAge3sgKGRhdGFTbmFwc2hvdD8uZGF0YSB8IGFzeW5jKT8ubGVuZ3RoIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L21hdC1jYXJkPlxuXG48bmctdGVtcGxhdGUgI3NpbXBsZVRpbGVUZW1wbGF0ZSBsZXQtdGlsZT5cbiAgQGlmICh0aWxlKSB7XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgcGxhY2UtY2VudGVyLWNlbnRlciBmbGV4XCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWVcIj5cbiAgICAgIDxwIGNsYXNzPVwibm9zZWxlY3RcIj5UaWxlOiB7eyB0aWxlIH19PC9wPlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -20,8 +20,8 @@ import { MatCardModule } from '@angular/material/card';
20
20
  import * as i0 from "@angular/core";
21
21
  export { ElderGridTileDirective, ElderGridToolbarDirective, ElderGridComponent } from './elder-grid/elder-grid.component';
22
22
  export class ElderGridModule {
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
24
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: ElderGridModule, imports: [CommonModule,
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
24
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.1", ngImport: i0, type: ElderGridModule, imports: [CommonModule,
25
25
  MatCommonModule,
26
26
  MatProgressBarModule,
27
27
  MatMenuModule,
@@ -38,7 +38,7 @@ export class ElderGridModule {
38
38
  ElderGridToolbarDirective], exports: [ElderGridComponent,
39
39
  ElderGridTileDirective,
40
40
  ElderGridToolbarDirective] }); }
41
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderGridModule, imports: [CommonModule,
41
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderGridModule, imports: [CommonModule,
42
42
  MatCommonModule,
43
43
  MatProgressBarModule,
44
44
  MatMenuModule,
@@ -52,7 +52,7 @@ export class ElderGridModule {
52
52
  ElderFormsDirectivesModule, MatPaginatorModule, MatCardModule,
53
53
  ElderGridComponent] }); }
54
54
  }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderGridModule, decorators: [{
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderGridModule, decorators: [{
56
56
  type: NgModule,
57
57
  args: [{
58
58
  imports: [
@@ -52,10 +52,10 @@ export class ElderDetailDialogComponent {
52
52
  close() {
53
53
  this.dialogRef.close(this.entity$.getValue());
54
54
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderDetailDialogComponent, deps: [{ token: i1.MatDialogRef, optional: true }, { token: MAT_DIALOG_DATA, optional: true }, { token: i2.ElderMasterDetailService }], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: ElderDetailDialogComponent, isStandalone: true, selector: "elder-detail-dialog", ngImport: i0, template: "<div class=\"layout-col full\" *ngIf=\"entity$ | async as entity\">\n\n <span style=\"width: 100vw;\"></span>\n\n <!-- Header Section -->\n <elder-toolbar class=\"gap-md\" >\n <button (click)=\"close()\" mat-icon-button *elderToolbarColumn=\"'left.begin'\">\n <mat-icon>close</mat-icon>\n </button>\n </elder-toolbar>\n\n <div class=\"layout-row flex gap-md\">\n <ng-container *ngTemplateOutlet=\"data.detailTemplateRef; context: {$implicit: entity}\"></ng-container>\n </div>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ElderToolbarComponent, selector: "elder-toolbar", inputs: ["color"] }, { kind: "directive", type: ElderToolbarColumnDirective, selector: "[elderToolbarColumn]", inputs: ["elderToolbarColumn", "elderToolbarDefault"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderDetailDialogComponent, deps: [{ token: i1.MatDialogRef, optional: true }, { token: MAT_DIALOG_DATA, optional: true }, { token: i2.ElderMasterDetailService }], target: i0.ɵɵFactoryTarget.Component }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.1", type: ElderDetailDialogComponent, isStandalone: true, selector: "elder-detail-dialog", ngImport: i0, template: "<div class=\"layout-col full\" *ngIf=\"entity$ | async as entity\">\n\n <span style=\"width: 100vw;\"></span>\n\n <!-- Header Section -->\n <elder-toolbar class=\"gap-md\" >\n <button (click)=\"close()\" mat-icon-button *elderToolbarColumn=\"'left.begin'\">\n <mat-icon>close</mat-icon>\n </button>\n </elder-toolbar>\n\n <div class=\"layout-row flex gap-md\">\n <ng-container *ngTemplateOutlet=\"data.detailTemplateRef; context: {$implicit: entity}\"></ng-container>\n </div>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ElderToolbarComponent, selector: "elder-toolbar", inputs: ["color"] }, { kind: "directive", type: ElderToolbarColumnDirective, selector: "[elderToolbarColumn]", inputs: ["elderToolbarColumn", "elderToolbarDefault"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
57
57
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderDetailDialogComponent, decorators: [{
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderDetailDialogComponent, decorators: [{
59
59
  type: Component,
60
60
  args: [{ selector: 'elder-detail-dialog', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf, ElderToolbarComponent, ElderToolbarColumnDirective, MatIconButton, MatIcon, NgTemplateOutlet, AsyncPipe], template: "<div class=\"layout-col full\" *ngIf=\"entity$ | async as entity\">\n\n <span style=\"width: 100vw;\"></span>\n\n <!-- Header Section -->\n <elder-toolbar class=\"gap-md\" >\n <button (click)=\"close()\" mat-icon-button *elderToolbarColumn=\"'left.begin'\">\n <mat-icon>close</mat-icon>\n </button>\n </elder-toolbar>\n\n <div class=\"layout-row flex gap-md\">\n <ng-container *ngTemplateOutlet=\"data.detailTemplateRef; context: {$implicit: entity}\"></ng-container>\n </div>\n\n</div>\n" }]
61
61
  }], ctorParameters: () => [{ type: i1.MatDialogRef, decorators: [{
@@ -39,10 +39,10 @@ export class ElderDetailDirective {
39
39
  this.destroy$.next();
40
40
  this.destroy$.complete();
41
41
  }
42
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderDetailDirective, deps: [{ token: i1.ElderMasterDetailService }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
43
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: ElderDetailDirective, isStandalone: true, selector: "[elderDataDetail]", ngImport: i0 }); }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderDetailDirective, deps: [{ token: i1.ElderMasterDetailService }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
43
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.1", type: ElderDetailDirective, isStandalone: true, selector: "[elderDataDetail]", ngImport: i0 }); }
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderDetailDirective, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderDetailDirective, decorators: [{
46
46
  type: Directive,
47
47
  args: [{
48
48
  selector: '[elderDataDetail]',
@@ -64,10 +64,10 @@ export class ElderMasterActivationDirective {
64
64
  this.tableActivation.activationOptions = { mode: 'once', row: 'none' };
65
65
  }
66
66
  }
67
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterActivationDirective, deps: [{ token: i1.ElderToastService }, { token: i2.ElderTableActivationDirective }, { token: i3.ElderMasterDetailService }], target: i0.ɵɵFactoryTarget.Directive }); }
68
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: ElderMasterActivationDirective, isStandalone: true, selector: "[elderMasterActivation]", ngImport: i0 }); }
67
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterActivationDirective, deps: [{ token: i1.ElderToastService }, { token: i2.ElderTableActivationDirective }, { token: i3.ElderMasterDetailService }], target: i0.ɵɵFactoryTarget.Directive }); }
68
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.1", type: ElderMasterActivationDirective, isStandalone: true, selector: "[elderMasterActivation]", ngImport: i0 }); }
69
69
  }
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterActivationDirective, decorators: [{
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterActivationDirective, decorators: [{
71
71
  type: Directive,
72
72
  args: [{
73
73
  selector: '[elderMasterActivation]',
@@ -103,12 +103,12 @@ export class ElderMasterDetailComponent {
103
103
  this.dialogRef.close();
104
104
  }
105
105
  }
106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterDetailComponent, deps: [{ token: i1.ElderMasterDetailService }, { token: i2.MatDialog }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
107
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: ElderMasterDetailComponent, isStandalone: true, selector: "elder-master-detail", inputs: { mode: "mode" }, providers: [
106
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterDetailComponent, deps: [{ token: i1.ElderMasterDetailService }, { token: i2.MatDialog }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.1", type: ElderMasterDetailComponent, isStandalone: true, selector: "elder-master-detail", inputs: { mode: "mode" }, providers: [
108
108
  ElderMasterDetailProvider.ExistingOrNewMasterDetailService
109
109
  ], queries: [{ propertyName: "master", first: true, predicate: ElderMasterDirective, descendants: true, read: TemplateRef }, { propertyName: "detail", first: true, predicate: ElderDetailDirective, descendants: true, read: TemplateRef }], ngImport: i0, template: "\n<div class=\"layout-row full\" *ngIf=\"mode$ | async as mode\">\n\n <div class=\"layout-row full\" *ngIf=\"mode === 'DIALOG'\">\n <ng-container *ngTemplateOutlet=\"master\"></ng-container>\n </div>\n\n <div class=\"layout-row full gap-md\" *ngIf=\"mode === 'EMBEDDED'\">\n <ng-container *ngTemplateOutlet=\"master\"></ng-container>\n <ng-container *ngIf=\"currentActive$ | async as currentActive\">\n <ng-container *ngTemplateOutlet=\"detail; context: {$implicit: currentActive}\"></ng-container>\n </ng-container>\n </div>\n\n</div>\n\n\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
110
110
  }
111
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterDetailComponent, decorators: [{
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterDetailComponent, decorators: [{
112
112
  type: Component,
113
113
  args: [{ selector: 'elder-master-detail', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
114
114
  ElderMasterDetailProvider.ExistingOrNewMasterDetailService
@@ -31,8 +31,8 @@ export * from './master-detail-activation-event';
31
31
  export * from './elder-detail-dialog/elder-detail-dialog.component';
32
32
  export * from './elder-master-detail.component';
33
33
  export class ElderMasterDetailModule {
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterDetailModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
35
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterDetailModule, imports: [CommonModule,
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterDetailModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
35
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterDetailModule, imports: [CommonModule,
36
36
  MatIconModule,
37
37
  MatTableModule,
38
38
  ElderTableModule,
@@ -58,7 +58,7 @@ export class ElderMasterDetailModule {
58
58
  ElderMasterDirective,
59
59
  ElderMasterActivationDirective,
60
60
  ElderDetailDialogComponent] }); }
61
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterDetailModule, imports: [CommonModule,
61
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterDetailModule, imports: [CommonModule,
62
62
  MatIconModule,
63
63
  MatTableModule,
64
64
  ElderTableModule,
@@ -77,7 +77,7 @@ export class ElderMasterDetailModule {
77
77
  MatSlideToggleModule,
78
78
  ElderDetailDialogComponent] }); }
79
79
  }
80
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterDetailModule, decorators: [{
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterDetailModule, decorators: [{
81
81
  type: NgModule,
82
82
  args: [{
83
83
  imports: [
@@ -79,10 +79,10 @@ export class ElderMasterDetailService {
79
79
  asEvent(item, options) {
80
80
  return new MasterDetailActivationEvent(item, options.creating, options.source);
81
81
  }
82
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterDetailService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
83
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterDetailService }); }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterDetailService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
83
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterDetailService }); }
84
84
  }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ElderMasterDetailService, decorators: [{
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ElderMasterDetailService, decorators: [{
86
86
  type: Injectable
87
87
  }], ctorParameters: () => [] });
88
88
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbWFzdGVyLWRldGFpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXZpZXcvbWFzdGVyLWRldGFpbC9lbGRlci1tYXN0ZXItZGV0YWlsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDN0UsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7O0FBU2xGLE1BQU0sT0FBTyx3QkFBd0I7SUFxQm5DOzs7O2dGQUk0RTtJQUU1RTtRQXpCQTs7OztvRkFJNEU7UUFFekQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFbEMsVUFBSyxHQUFHLElBQUksZUFBZSxDQUF3QixJQUFJLENBQUMsQ0FBQztRQUV4RCxXQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELDRCQUF1QixHQUFHLElBQUksT0FBTyxFQUFLLENBQUM7UUFFM0MsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBaUMsSUFBSSxDQUFDLENBQUM7UUFDekUsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBaUMsSUFBSSxDQUFDLENBQUM7UUFFM0Usa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBSSxJQUFJLENBQUMsQ0FBQztRQUM3Qyx1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBa0MsQ0FBQztRQVNsRixLQUFLLENBQ0gsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FDbEI7YUFDRSxJQUFJLENBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxFQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QixDQUFDLFNBQVMsQ0FBQztZQUNaLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2pELENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXJFLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUU7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLHVCQUF1QjtRQUNoQyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRU0sZUFBZSxDQUFDLElBQU8sRUFBRSxPQUF1QztRQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU0scUJBQXFCLENBQUMsSUFBTztRQUNsQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxJQUFPO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxnQkFBZ0IsRUFBQyxDQUFDLENBQ3JFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXBFLE9BQU8sQ0FBQyxJQUFPLEVBQUUsT0FBdUM7UUFDOUQsT0FBTyxJQUFJLDJCQUEyQixDQUNwQyxJQUFJLEVBQ0osT0FBTyxDQUFDLFFBQVEsRUFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FDZixDQUFDO0lBQ0osQ0FBQzs4R0EzR1Usd0JBQXdCO2tIQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge2ZpbHRlciwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VsZGVyTWFzdGVyRGV0YWlsTW9kZX0gZnJvbSAnLi9lbGRlci1tYXN0ZXItZGV0YWlsLW1vZGUnO1xuaW1wb3J0IHtNYXN0ZXJEZXRhaWxBY3RpdmF0aW9uRXZlbnR9IGZyb20gJy4vbWFzdGVyLWRldGFpbC1hY3RpdmF0aW9uLWV2ZW50JztcbmltcG9ydCB7QWN0aXZhdGlvbkV2ZW50U291cmNlfSBmcm9tICcuLi90YWJsZS9hY3RpdmF0aW9uL2FjdGl2YXRpb24tZXZlbnQtc291cmNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJTWFzdGVyRGV0YWlsQWN0aXZhdGlvbk9wdGlvbnMge1xuICBzb3VyY2U6IEFjdGl2YXRpb25FdmVudFNvdXJjZVxuICBjcmVhdGluZz86IGJvb2xlYW4sXG59XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVsZGVyTWFzdGVyRGV0YWlsU2VydmljZTxUPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVsZGVyTWFzdGVyRGV0YWlsTW9kZT4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtQWN0aXZhdGlvblJlcXVlc3QkID0gbmV3IFN1YmplY3Q8VD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVJdGVtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFzdGVyRGV0YWlsQWN0aXZhdGlvbkV2ZW50PFQ+PihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3JlYXRpbmdJdGVtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFzdGVyRGV0YWlsQWN0aXZhdGlvbkV2ZW50PFQ+PihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50SXRlbSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFQ+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50SXRlbUNoYW5nZSA9IG5ldyBTdWJqZWN0PE1hc3RlckRldGFpbEFjdGl2YXRpb25FdmVudDxUPj4oKTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBtZXJnZShcbiAgICAgIHRoaXMuX2NyZWF0aW5nSXRlbSQsXG4gICAgICB0aGlzLl9hY3RpdmVJdGVtJFxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgIT09IG51bGwpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGNyZWF0aW5nT3JBY3RpdmUgPT4ge1xuICAgICAgICB0aGlzLl9jdXJyZW50SXRlbSQubmV4dChjcmVhdGluZ09yQWN0aXZlLml0ZW0pO1xuICAgICAgICB0aGlzLl9jdXJyZW50SXRlbUNoYW5nZS5uZXh0KGNyZWF0aW5nT3JBY3RpdmUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBvciBjcmVhdGluZyBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50SXRlbSQoKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRJdGVtJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudEl0ZW1TbmFwc2hvdCgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEl0ZW0kLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRJdGVtQ2hhbmdlKCk6IE9ic2VydmFibGU8TWFzdGVyRGV0YWlsQWN0aXZhdGlvbkV2ZW50PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRJdGVtQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtQWN0aXZhdGlvblJlcXVlc3RlZCgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5faXRlbUFjdGl2YXRpb25SZXF1ZXN0JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkl0ZW1BY3RpdmF0ZWQoaXRlbTogVCwgb3B0aW9uczogSU1hc3RlckRldGFpbEFjdGl2YXRpb25PcHRpb25zKSB7XG4gICAgdGhpcy5fYWN0aXZlSXRlbSQubmV4dChcbiAgICAgIHRoaXMuYXNFdmVudChpdGVtLCBvcHRpb25zKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdEl0ZW1BY3RpdmF0aW9uKGl0ZW06IFQpOiB2b2lkIHtcbiAgICB0aGlzLl9pdGVtQWN0aXZhdGlvblJlcXVlc3QkLm5leHQoaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGVDcmVhdGluZ0l0ZW0oaXRlbTogVCkge1xuICAgIHRoaXMuX2NyZWF0aW5nSXRlbSQubmV4dChcbiAgICAgIHRoaXMuYXNFdmVudChpdGVtLCB7c291cmNlOiBBY3RpdmF0aW9uRXZlbnRTb3VyY2UuVVNFUl9NT1VTRV9DTElDS30pXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgYXNFdmVudChpdGVtOiBULCBvcHRpb25zOiBJTWFzdGVyRGV0YWlsQWN0aXZhdGlvbk9wdGlvbnMpOiBNYXN0ZXJEZXRhaWxBY3RpdmF0aW9uRXZlbnQ8VD4ge1xuICAgIHJldHVybiBuZXcgTWFzdGVyRGV0YWlsQWN0aXZhdGlvbkV2ZW50PFQ+KFxuICAgICAgaXRlbSxcbiAgICAgIG9wdGlvbnMuY3JlYXRpbmcsXG4gICAgICBvcHRpb25zLnNvdXJjZVxuICAgICk7XG4gIH1cbn1cbiJdfQ==