@ecodev/natural 41.3.0 → 42.2.0

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 (350) hide show
  1. package/ecodev-natural.d.ts +1 -9
  2. package/esm2020/ecodev-natural.mjs +5 -0
  3. package/esm2020/lib/classes/abstract-controller.mjs +30 -0
  4. package/esm2020/lib/classes/abstract-detail.mjs +152 -0
  5. package/esm2020/lib/classes/abstract-editable-list.mjs +96 -0
  6. package/esm2020/lib/classes/abstract-list.mjs +406 -0
  7. package/esm2020/lib/classes/abstract-navigable-list.mjs +126 -0
  8. package/{esm2015/lib/classes/apollo-utils.js → esm2020/lib/classes/apollo-utils.mjs} +0 -0
  9. package/esm2020/lib/classes/data-source.mjs +76 -0
  10. package/{esm2015/lib/classes/query-variable-manager-utils.js → esm2020/lib/classes/query-variable-manager-utils.mjs} +0 -0
  11. package/esm2020/lib/classes/query-variable-manager.mjs +172 -0
  12. package/{esm2015/lib/classes/rxjs.js → esm2020/lib/classes/rxjs.mjs} +0 -0
  13. package/{esm2015/lib/classes/tld.js → esm2020/lib/classes/tld.mjs} +0 -0
  14. package/{esm2015/lib/classes/utility.js → esm2020/lib/classes/utility.mjs} +0 -0
  15. package/esm2020/lib/classes/validators.mjs +179 -0
  16. package/esm2020/lib/directives/http-prefix.directive.mjs +50 -0
  17. package/esm2020/lib/modules/alert/alert.module.mjs +20 -0
  18. package/esm2020/lib/modules/alert/alert.service.mjs +55 -0
  19. package/esm2020/lib/modules/alert/confirm.component.mjs +20 -0
  20. package/{esm2015/lib/modules/alert/public-api.js → esm2020/lib/modules/alert/public-api.mjs} +0 -0
  21. package/esm2020/lib/modules/avatar/avatar.module.mjs +19 -0
  22. package/esm2020/lib/modules/avatar/component/avatar.component.mjs +190 -0
  23. package/{esm2015/lib/modules/avatar/public-api.js → esm2020/lib/modules/avatar/public-api.mjs} +0 -0
  24. package/esm2020/lib/modules/avatar/service/avatar.service.mjs +66 -0
  25. package/esm2020/lib/modules/avatar/sources/gravatar.mjs +29 -0
  26. package/{esm2015/lib/modules/avatar/sources/image.js → esm2020/lib/modules/avatar/sources/image.mjs} +0 -0
  27. package/{esm2015/lib/modules/avatar/sources/initials.js → esm2020/lib/modules/avatar/sources/initials.mjs} +0 -0
  28. package/{esm2015/lib/modules/avatar/sources/source.js → esm2020/lib/modules/avatar/sources/source.mjs} +1 -1
  29. package/esm2020/lib/modules/columns-picker/columns-picker-column.directive.mjs +43 -0
  30. package/esm2020/lib/modules/columns-picker/columns-picker.component.mjs +84 -0
  31. package/esm2020/lib/modules/columns-picker/columns-picker.module.mjs +47 -0
  32. package/{esm2015/lib/modules/columns-picker/public-api.js → esm2020/lib/modules/columns-picker/public-api.mjs} +0 -0
  33. package/esm2020/lib/modules/common/common-module.mjs +50 -0
  34. package/esm2020/lib/modules/common/directives/linkable-tab.directive.mjs +79 -0
  35. package/esm2020/lib/modules/common/directives/src-density.directive.mjs +62 -0
  36. package/esm2020/lib/modules/common/pipes/capitalize.pipe.mjs +18 -0
  37. package/esm2020/lib/modules/common/pipes/ellipsis.pipe.mjs +14 -0
  38. package/esm2020/lib/modules/common/pipes/enum.pipe.mjs +25 -0
  39. package/esm2020/lib/modules/common/pipes/swiss-date.pipe.mjs +20 -0
  40. package/esm2020/lib/modules/common/public-api.mjs +13 -0
  41. package/esm2020/lib/modules/common/services/memory-storage.mjs +112 -0
  42. package/esm2020/lib/modules/common/services/seo.service.mjs +114 -0
  43. package/esm2020/lib/modules/detail-header/detail-header.component.mjs +76 -0
  44. package/esm2020/lib/modules/detail-header/detail-header.module.mjs +21 -0
  45. package/{esm2015/lib/modules/detail-header/public-api.js → esm2020/lib/modules/detail-header/public-api.mjs} +0 -0
  46. package/esm2020/lib/modules/dialog-trigger/dialog-trigger.component.mjs +69 -0
  47. package/esm2020/lib/modules/dialog-trigger/dialog-trigger.module.mjs +19 -0
  48. package/{esm2015/lib/modules/dialog-trigger/public-api.js → esm2020/lib/modules/dialog-trigger/public-api.mjs} +0 -0
  49. package/esm2020/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +98 -0
  50. package/esm2020/lib/modules/dropdown-components/natural-dropdown-components.module.mjs +92 -0
  51. package/{esm2015/lib/modules/dropdown-components/public-api.js → esm2020/lib/modules/dropdown-components/public-api.mjs} +0 -0
  52. package/esm2020/lib/modules/dropdown-components/type-date/type-date.component.mjs +133 -0
  53. package/esm2020/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +137 -0
  54. package/esm2020/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +69 -0
  55. package/esm2020/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +38 -0
  56. package/esm2020/lib/modules/dropdown-components/type-number/type-number.component.mjs +104 -0
  57. package/esm2020/lib/modules/dropdown-components/type-select/type-select.component.mjs +169 -0
  58. package/esm2020/lib/modules/dropdown-components/type-text/type-text.component.mjs +57 -0
  59. package/{esm2015/lib/modules/dropdown-components/types.js → esm2020/lib/modules/dropdown-components/types.mjs} +0 -0
  60. package/{esm2015/lib/modules/dropdown-components/utils.js → esm2020/lib/modules/dropdown-components/utils.mjs} +0 -0
  61. package/esm2020/lib/modules/file/abstract-file.mjs +231 -0
  62. package/esm2020/lib/modules/file/component/file.component.mjs +143 -0
  63. package/esm2020/lib/modules/file/file-drop.directive.mjs +110 -0
  64. package/esm2020/lib/modules/file/file-select.directive.mjs +28 -0
  65. package/esm2020/lib/modules/file/file.module.mjs +24 -0
  66. package/esm2020/lib/modules/file/file.service.mjs +48 -0
  67. package/{esm2015/lib/modules/file/public-api.js → esm2020/lib/modules/file/public-api.mjs} +0 -0
  68. package/{esm2015/lib/modules/file/types.js → esm2020/lib/modules/file/types.mjs} +0 -0
  69. package/{esm2015/lib/modules/file/utils.js → esm2020/lib/modules/file/utils.mjs} +3 -4
  70. package/esm2020/lib/modules/fixed-button/fixed-button.component.mjs +27 -0
  71. package/esm2020/lib/modules/fixed-button/fixed-button.module.mjs +21 -0
  72. package/{esm2015/lib/modules/fixed-button/public-api.js → esm2020/lib/modules/fixed-button/public-api.mjs} +0 -0
  73. package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +36 -0
  74. package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.module.mjs +20 -0
  75. package/{esm2015/lib/modules/fixed-button-detail/public-api.js → esm2020/lib/modules/fixed-button-detail/public-api.mjs} +0 -0
  76. package/{esm2015/lib/modules/hierarchic-selector/classes/flat-node.js → esm2020/lib/modules/hierarchic-selector/classes/flat-node.mjs} +1 -1
  77. package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs} +0 -0
  78. package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs} +0 -0
  79. package/{esm2015/lib/modules/hierarchic-selector/classes/model-node.js → esm2020/lib/modules/hierarchic-selector/classes/model-node.mjs} +1 -1
  80. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +364 -0
  81. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +258 -0
  82. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +31 -0
  83. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +23 -0
  84. package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector.module.mjs +81 -0
  85. package/{esm2015/lib/modules/hierarchic-selector/public-api.js → esm2020/lib/modules/hierarchic-selector/public-api.mjs} +0 -0
  86. package/esm2020/lib/modules/icon/icon.component.mjs +92 -0
  87. package/esm2020/lib/modules/icon/icon.module.mjs +30 -0
  88. package/{esm2015/lib/modules/icon/public-api.js → esm2020/lib/modules/icon/public-api.mjs} +0 -0
  89. package/esm2020/lib/modules/matomo/matomo-module.module.mjs +12 -0
  90. package/esm2020/lib/modules/matomo/matomo.service.mjs +105 -0
  91. package/{esm2015/lib/modules/matomo/public-api.js → esm2020/lib/modules/matomo/public-api.mjs} +0 -0
  92. package/esm2020/lib/modules/panels/abstract-panel.mjs +56 -0
  93. package/{esm2015/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.js → esm2020/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs} +0 -0
  94. package/esm2020/lib/modules/panels/panels.component.mjs +26 -0
  95. package/esm2020/lib/modules/panels/panels.module.mjs +33 -0
  96. package/esm2020/lib/modules/panels/panels.service.mjs +325 -0
  97. package/{esm2015/lib/modules/panels/panels.urlmatcher.js → esm2020/lib/modules/panels/panels.urlmatcher.mjs} +0 -0
  98. package/{esm2015/lib/modules/panels/public-api.js → esm2020/lib/modules/panels/public-api.mjs} +0 -0
  99. package/{esm2015/lib/modules/panels/types.js → esm2020/lib/modules/panels/types.mjs} +0 -0
  100. package/{esm2015/lib/modules/relations/public-api.js → esm2020/lib/modules/relations/public-api.mjs} +0 -0
  101. package/esm2020/lib/modules/relations/relations.component.mjs +198 -0
  102. package/esm2020/lib/modules/relations/relations.module.mjs +58 -0
  103. package/{esm2015/lib/modules/search/classes/graphql-doctrine.js → esm2020/lib/modules/search/classes/graphql-doctrine.mjs} +0 -0
  104. package/{esm2015/lib/modules/search/classes/graphql-doctrine.types.js → esm2020/lib/modules/search/classes/graphql-doctrine.types.mjs} +0 -0
  105. package/{esm2015/lib/modules/search/classes/transformers.js → esm2020/lib/modules/search/classes/transformers.mjs} +0 -0
  106. package/{esm2015/lib/modules/search/classes/url.js → esm2020/lib/modules/search/classes/url.mjs} +0 -0
  107. package/{esm2015/lib/modules/search/classes/utils.js → esm2020/lib/modules/search/classes/utils.mjs} +0 -0
  108. package/{esm2015/lib/modules/search/dropdown-container/dropdown-container-animations.js → esm2020/lib/modules/search/dropdown-container/dropdown-container-animations.mjs} +0 -0
  109. package/esm2020/lib/modules/search/dropdown-container/dropdown-container.component.mjs +88 -0
  110. package/{esm2015/lib/modules/search/dropdown-container/dropdown-ref.js → esm2020/lib/modules/search/dropdown-container/dropdown-ref.mjs} +1 -1
  111. package/esm2020/lib/modules/search/dropdown-container/dropdown.service.mjs +93 -0
  112. package/esm2020/lib/modules/search/facet-selector/facet-selector.component.mjs +50 -0
  113. package/esm2020/lib/modules/search/group/group.component.mjs +45 -0
  114. package/esm2020/lib/modules/search/input/input.component.mjs +328 -0
  115. package/{esm2015/lib/modules/search/public-api.js → esm2020/lib/modules/search/public-api.mjs} +0 -0
  116. package/esm2020/lib/modules/search/search/search.component.mjs +78 -0
  117. package/esm2020/lib/modules/search/search.module.mjs +84 -0
  118. package/{esm2015/lib/modules/search/types/dropdown-component.js → esm2020/lib/modules/search/types/dropdown-component.mjs} +0 -0
  119. package/{esm2015/lib/modules/search/types/facet.js → esm2020/lib/modules/search/types/facet.mjs} +0 -0
  120. package/{esm2015/lib/modules/search/types/values.js → esm2020/lib/modules/search/types/values.mjs} +0 -0
  121. package/esm2020/lib/modules/select/abstract-select.component.mjs +186 -0
  122. package/{esm2015/lib/modules/select/public-api.js → esm2020/lib/modules/select/public-api.mjs} +0 -0
  123. package/esm2020/lib/modules/select/select/select.component.mjs +207 -0
  124. package/esm2020/lib/modules/select/select-enum/select-enum.component.mjs +47 -0
  125. package/esm2020/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +127 -0
  126. package/esm2020/lib/modules/select/select.module.mjs +68 -0
  127. package/{esm2015/lib/modules/sidenav/public-api.js → esm2020/lib/modules/sidenav/public-api.mjs} +0 -0
  128. package/esm2020/lib/modules/sidenav/sidenav/sidenav.component.mjs +15 -0
  129. package/esm2020/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +87 -0
  130. package/esm2020/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +12 -0
  131. package/esm2020/lib/modules/sidenav/sidenav-stack.service.mjs +52 -0
  132. package/esm2020/lib/modules/sidenav/sidenav.module.mjs +25 -0
  133. package/esm2020/lib/modules/sidenav/sidenav.service.mjs +195 -0
  134. package/{esm2015/lib/modules/stamp/public-api.js → esm2020/lib/modules/stamp/public-api.mjs} +0 -0
  135. package/esm2020/lib/modules/stamp/stamp-module.module.mjs +18 -0
  136. package/esm2020/lib/modules/stamp/stamp.component.mjs +14 -0
  137. package/{esm2015/lib/modules/table-button/public-api.js → esm2020/lib/modules/table-button/public-api.mjs} +0 -0
  138. package/esm2020/lib/modules/table-button/table-button.component.mjs +48 -0
  139. package/esm2020/lib/modules/table-button/table-button.module.mjs +21 -0
  140. package/esm2020/lib/services/abstract-model.service.mjs +509 -0
  141. package/esm2020/lib/services/enum.service.mjs +67 -0
  142. package/esm2020/lib/services/link-mutation.service.mjs +153 -0
  143. package/esm2020/lib/services/persistence.service.mjs +113 -0
  144. package/esm2020/lib/services/swiss-parsing-date-adapter.service.mjs +55 -0
  145. package/{esm2015/lib/types/types.js → esm2020/lib/types/types.mjs} +0 -0
  146. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  147. package/fesm2015/{ecodev-natural.js → ecodev-natural.mjs} +2808 -2392
  148. package/fesm2015/ecodev-natural.mjs.map +1 -0
  149. package/fesm2020/ecodev-natural.mjs +10495 -0
  150. package/fesm2020/ecodev-natural.mjs.map +1 -0
  151. package/lib/classes/abstract-controller.d.ts +3 -0
  152. package/lib/classes/abstract-detail.d.ts +3 -0
  153. package/lib/classes/abstract-editable-list.d.ts +3 -0
  154. package/lib/classes/abstract-list.d.ts +3 -0
  155. package/lib/classes/abstract-navigable-list.d.ts +3 -0
  156. package/lib/classes/query-variable-manager.d.ts +19 -8
  157. package/lib/directives/http-prefix.directive.d.ts +3 -0
  158. package/lib/modules/alert/alert.module.d.ts +9 -0
  159. package/lib/modules/alert/alert.service.d.ts +3 -0
  160. package/lib/modules/alert/confirm.component.d.ts +3 -0
  161. package/lib/modules/avatar/avatar.module.d.ts +6 -0
  162. package/lib/modules/avatar/component/avatar.component.d.ts +4 -0
  163. package/lib/modules/avatar/service/avatar.service.d.ts +3 -0
  164. package/lib/modules/columns-picker/columns-picker-column.directive.d.ts +3 -0
  165. package/lib/modules/columns-picker/columns-picker.component.d.ts +3 -0
  166. package/lib/modules/columns-picker/columns-picker.module.d.ts +13 -0
  167. package/lib/modules/common/common-module.d.ts +15 -0
  168. package/lib/modules/common/directives/linkable-tab.directive.d.ts +3 -0
  169. package/lib/modules/common/directives/src-density.directive.d.ts +3 -0
  170. package/lib/modules/common/pipes/capitalize.pipe.d.ts +3 -0
  171. package/lib/modules/common/pipes/ellipsis.pipe.d.ts +3 -0
  172. package/lib/modules/common/pipes/enum.pipe.d.ts +3 -0
  173. package/lib/modules/common/pipes/swiss-date.pipe.d.ts +3 -0
  174. package/lib/modules/common/public-api.d.ts +0 -1
  175. package/lib/modules/common/services/memory-storage.d.ts +3 -0
  176. package/lib/modules/common/services/seo.service.d.ts +3 -0
  177. package/lib/modules/detail-header/detail-header.component.d.ts +3 -0
  178. package/lib/modules/detail-header/detail-header.module.d.ts +9 -0
  179. package/lib/modules/dialog-trigger/dialog-trigger.component.d.ts +3 -0
  180. package/lib/modules/dialog-trigger/dialog-trigger.module.d.ts +7 -0
  181. package/lib/modules/dropdown-components/abstract-association-select-component.directive.d.ts +3 -0
  182. package/lib/modules/dropdown-components/natural-dropdown-components.module.d.ts +22 -0
  183. package/lib/modules/dropdown-components/type-date/type-date.component.d.ts +3 -0
  184. package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +3 -0
  185. package/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.d.ts +3 -0
  186. package/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.d.ts +3 -0
  187. package/lib/modules/dropdown-components/type-number/type-number.component.d.ts +3 -0
  188. package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +3 -0
  189. package/lib/modules/dropdown-components/type-text/type-text.component.d.ts +3 -0
  190. package/lib/modules/file/abstract-file.d.ts +3 -0
  191. package/lib/modules/file/component/file.component.d.ts +3 -0
  192. package/lib/modules/file/file-drop.directive.d.ts +3 -0
  193. package/lib/modules/file/file-select.directive.d.ts +3 -0
  194. package/lib/modules/file/file.module.d.ts +11 -0
  195. package/lib/modules/file/file.service.d.ts +3 -0
  196. package/lib/modules/fixed-button/fixed-button.component.d.ts +3 -0
  197. package/lib/modules/fixed-button/fixed-button.module.d.ts +9 -0
  198. package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +3 -0
  199. package/lib/modules/fixed-button-detail/fixed-button-detail.module.d.ts +8 -0
  200. package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -0
  201. package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.d.ts +3 -0
  202. package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.d.ts +3 -0
  203. package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.d.ts +3 -0
  204. package/lib/modules/hierarchic-selector/hierarchic-selector.module.d.ts +21 -0
  205. package/lib/modules/icon/icon.component.d.ts +3 -0
  206. package/lib/modules/icon/icon.module.d.ts +7 -0
  207. package/lib/modules/matomo/matomo-module.module.d.ts +4 -0
  208. package/lib/modules/matomo/matomo.service.d.ts +3 -0
  209. package/lib/modules/panels/abstract-panel.d.ts +3 -0
  210. package/lib/modules/panels/panels.component.d.ts +3 -0
  211. package/lib/modules/panels/panels.module.d.ts +8 -0
  212. package/lib/modules/panels/panels.service.d.ts +3 -0
  213. package/lib/modules/relations/relations.component.d.ts +3 -0
  214. package/lib/modules/relations/relations.module.d.ts +15 -0
  215. package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +3 -0
  216. package/lib/modules/search/dropdown-container/dropdown-ref.d.ts +1 -1
  217. package/lib/modules/search/dropdown-container/dropdown.service.d.ts +3 -0
  218. package/lib/modules/search/facet-selector/facet-selector.component.d.ts +3 -0
  219. package/lib/modules/search/group/group.component.d.ts +3 -0
  220. package/lib/modules/search/input/input.component.d.ts +3 -0
  221. package/lib/modules/search/search/search.component.d.ts +3 -0
  222. package/lib/modules/search/search.module.d.ts +19 -0
  223. package/lib/modules/select/abstract-select.component.d.ts +4 -1
  224. package/lib/modules/select/select/select.component.d.ts +3 -0
  225. package/lib/modules/select/select-enum/select-enum.component.d.ts +9 -2
  226. package/lib/modules/select/select-hierarchic/select-hierarchic.component.d.ts +3 -0
  227. package/lib/modules/select/select.module.d.ts +19 -0
  228. package/lib/modules/sidenav/sidenav/sidenav.component.d.ts +3 -0
  229. package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +3 -0
  230. package/lib/modules/sidenav/sidenav-content/sidenav-content.component.d.ts +3 -0
  231. package/lib/modules/sidenav/sidenav-stack.service.d.ts +4 -1
  232. package/lib/modules/sidenav/sidenav.module.d.ts +11 -0
  233. package/lib/modules/sidenav/sidenav.service.d.ts +3 -0
  234. package/lib/modules/stamp/stamp-module.module.d.ts +6 -0
  235. package/lib/modules/stamp/stamp.component.d.ts +3 -0
  236. package/lib/modules/table-button/table-button.component.d.ts +3 -0
  237. package/lib/modules/table-button/table-button.module.d.ts +9 -0
  238. package/lib/services/enum.service.d.ts +3 -0
  239. package/lib/services/link-mutation.service.d.ts +3 -0
  240. package/lib/services/persistence.service.d.ts +3 -0
  241. package/lib/services/swiss-parsing-date-adapter.service.d.ts +4 -1
  242. package/package.json +25 -12
  243. package/src/lib/modules/alert/_alert.theme.scss +1 -1
  244. package/src/lib/modules/file/component/_file.theme.scss +1 -1
  245. package/src/lib/modules/icon/_icon.theme.scss +1 -1
  246. package/src/lib/modules/search/dropdown-container/_dropdown-container.theme.scss +1 -1
  247. package/src/lib/modules/table-button/_table-button.theme.scss +1 -1
  248. package/src/lib/styles/_table.scss +1 -1
  249. package/theming/_natural.theme.scss +1 -1
  250. package/bundles/ecodev-natural.umd.js +0 -11318
  251. package/bundles/ecodev-natural.umd.js.map +0 -1
  252. package/ecodev-natural.metadata.json +0 -1
  253. package/esm2015/ecodev-natural.js +0 -14
  254. package/esm2015/lib/classes/abstract-controller.js +0 -29
  255. package/esm2015/lib/classes/abstract-detail.js +0 -157
  256. package/esm2015/lib/classes/abstract-editable-list.js +0 -97
  257. package/esm2015/lib/classes/abstract-list.js +0 -409
  258. package/esm2015/lib/classes/abstract-navigable-list.js +0 -126
  259. package/esm2015/lib/classes/data-source.js +0 -76
  260. package/esm2015/lib/classes/query-variable-manager.js +0 -161
  261. package/esm2015/lib/classes/validators.js +0 -176
  262. package/esm2015/lib/directives/http-prefix.directive.js +0 -46
  263. package/esm2015/lib/modules/alert/alert.module.js +0 -15
  264. package/esm2015/lib/modules/alert/alert.service.js +0 -59
  265. package/esm2015/lib/modules/alert/confirm.component.js +0 -17
  266. package/esm2015/lib/modules/avatar/avatar.module.js +0 -14
  267. package/esm2015/lib/modules/avatar/component/avatar.component.js +0 -158
  268. package/esm2015/lib/modules/avatar/service/avatar.service.js +0 -65
  269. package/esm2015/lib/modules/avatar/sources/gravatar.js +0 -29
  270. package/esm2015/lib/modules/columns-picker/columns-picker-column.directive.js +0 -41
  271. package/esm2015/lib/modules/columns-picker/columns-picker.component.js +0 -82
  272. package/esm2015/lib/modules/columns-picker/columns-picker.module.js +0 -28
  273. package/esm2015/lib/modules/common/common-module.js +0 -35
  274. package/esm2015/lib/modules/common/directives/linkable-tab.directive.js +0 -82
  275. package/esm2015/lib/modules/common/directives/reactive-asterisk.directive.js +0 -31
  276. package/esm2015/lib/modules/common/directives/src-density.directive.js +0 -63
  277. package/esm2015/lib/modules/common/pipes/capitalize.pipe.js +0 -14
  278. package/esm2015/lib/modules/common/pipes/ellipsis.pipe.js +0 -10
  279. package/esm2015/lib/modules/common/pipes/enum.pipe.js +0 -24
  280. package/esm2015/lib/modules/common/pipes/swiss-date.pipe.js +0 -16
  281. package/esm2015/lib/modules/common/public-api.js +0 -14
  282. package/esm2015/lib/modules/common/services/memory-storage.js +0 -110
  283. package/esm2015/lib/modules/common/services/seo.service.js +0 -120
  284. package/esm2015/lib/modules/detail-header/detail-header.component.js +0 -63
  285. package/esm2015/lib/modules/detail-header/detail-header.module.js +0 -16
  286. package/esm2015/lib/modules/dialog-trigger/dialog-trigger.component.js +0 -68
  287. package/esm2015/lib/modules/dialog-trigger/dialog-trigger.module.js +0 -14
  288. package/esm2015/lib/modules/dropdown-components/abstract-association-select-component.directive.js +0 -96
  289. package/esm2015/lib/modules/dropdown-components/natural-dropdown-components.module.js +0 -51
  290. package/esm2015/lib/modules/dropdown-components/type-date/type-date.component.js +0 -123
  291. package/esm2015/lib/modules/dropdown-components/type-date-range/type-date-range.component.js +0 -128
  292. package/esm2015/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.js +0 -63
  293. package/esm2015/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.js +0 -31
  294. package/esm2015/lib/modules/dropdown-components/type-number/type-number.component.js +0 -99
  295. package/esm2015/lib/modules/dropdown-components/type-select/type-select.component.js +0 -161
  296. package/esm2015/lib/modules/dropdown-components/type-text/type-text.component.js +0 -53
  297. package/esm2015/lib/modules/file/abstract-file.js +0 -223
  298. package/esm2015/lib/modules/file/component/file.component.js +0 -133
  299. package/esm2015/lib/modules/file/file-drop.directive.js +0 -99
  300. package/esm2015/lib/modules/file/file-select.directive.js +0 -25
  301. package/esm2015/lib/modules/file/file.module.js +0 -19
  302. package/esm2015/lib/modules/file/file.service.js +0 -47
  303. package/esm2015/lib/modules/fixed-button/fixed-button.component.js +0 -23
  304. package/esm2015/lib/modules/fixed-button/fixed-button.module.js +0 -16
  305. package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.component.js +0 -31
  306. package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.module.js +0 -15
  307. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.js +0 -351
  308. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.js +0 -258
  309. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.js +0 -28
  310. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.js +0 -23
  311. package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector.module.js +0 -46
  312. package/esm2015/lib/modules/icon/icon.component.js +0 -78
  313. package/esm2015/lib/modules/icon/icon.module.js +0 -25
  314. package/esm2015/lib/modules/matomo/matomo-module.module.js +0 -7
  315. package/esm2015/lib/modules/matomo/matomo.service.js +0 -106
  316. package/esm2015/lib/modules/panels/abstract-panel.js +0 -50
  317. package/esm2015/lib/modules/panels/panels.component.js +0 -26
  318. package/esm2015/lib/modules/panels/panels.module.js +0 -28
  319. package/esm2015/lib/modules/panels/panels.service.js +0 -331
  320. package/esm2015/lib/modules/relations/relations.component.js +0 -181
  321. package/esm2015/lib/modules/relations/relations.module.js +0 -33
  322. package/esm2015/lib/modules/search/dropdown-container/dropdown-container.component.js +0 -87
  323. package/esm2015/lib/modules/search/dropdown-container/dropdown.service.js +0 -95
  324. package/esm2015/lib/modules/search/facet-selector/facet-selector.component.js +0 -47
  325. package/esm2015/lib/modules/search/group/group.component.js +0 -39
  326. package/esm2015/lib/modules/search/input/input.component.js +0 -316
  327. package/esm2015/lib/modules/search/search/search.component.js +0 -71
  328. package/esm2015/lib/modules/search/search.module.js +0 -52
  329. package/esm2015/lib/modules/select/abstract-select.component.js +0 -176
  330. package/esm2015/lib/modules/select/select/select.component.js +0 -190
  331. package/esm2015/lib/modules/select/select-enum/select-enum.component.js +0 -34
  332. package/esm2015/lib/modules/select/select-hierarchic/select-hierarchic.component.js +0 -120
  333. package/esm2015/lib/modules/select/select.module.js +0 -39
  334. package/esm2015/lib/modules/sidenav/sidenav/sidenav.component.js +0 -12
  335. package/esm2015/lib/modules/sidenav/sidenav-container/sidenav-container.component.js +0 -79
  336. package/esm2015/lib/modules/sidenav/sidenav-content/sidenav-content.component.js +0 -13
  337. package/esm2015/lib/modules/sidenav/sidenav-stack.service.js +0 -50
  338. package/esm2015/lib/modules/sidenav/sidenav.module.js +0 -20
  339. package/esm2015/lib/modules/sidenav/sidenav.service.js +0 -199
  340. package/esm2015/lib/modules/stamp/stamp-module.module.js +0 -13
  341. package/esm2015/lib/modules/stamp/stamp.component.js +0 -13
  342. package/esm2015/lib/modules/table-button/table-button.component.js +0 -38
  343. package/esm2015/lib/modules/table-button/table-button.module.js +0 -16
  344. package/esm2015/lib/services/abstract-model.service.js +0 -509
  345. package/esm2015/lib/services/enum.service.js +0 -68
  346. package/esm2015/lib/services/link-mutation.service.js +0 -155
  347. package/esm2015/lib/services/persistence.service.js +0 -114
  348. package/esm2015/lib/services/swiss-parsing-date-adapter.service.js +0 -55
  349. package/fesm2015/ecodev-natural.js.map +0 -1
  350. package/lib/modules/common/directives/reactive-asterisk.directive.d.ts +0 -10
@@ -0,0 +1,406 @@
1
+ import { SelectionModel } from '@angular/cdk/collections';
2
+ import { Directive, Input } from '@angular/core';
3
+ import { ActivatedRoute, Router } from '@angular/router';
4
+ import { defaults, isEmpty, isEqual, pick } from 'lodash-es';
5
+ import { Subject } from 'rxjs';
6
+ import { NaturalAlertService } from '../modules/alert/alert.service';
7
+ import { NaturalAbstractPanel } from '../modules/panels/abstract-panel';
8
+ import { toGraphQLDoctrineFilter } from '../modules/search/classes/graphql-doctrine';
9
+ import { fromUrl, toUrl } from '../modules/search/classes/url';
10
+ import { NaturalPersistenceService } from '../services/persistence.service';
11
+ import { NaturalDataSource } from './data-source';
12
+ import { NaturalQueryVariablesManager, SortingOrder, } from './query-variable-manager';
13
+ import { takeUntil } from 'rxjs/operators';
14
+ import * as i0 from "@angular/core";
15
+ function unwrapNavigable(item) {
16
+ if ('item' in item && 'hasNavigation' in item) {
17
+ return item.item;
18
+ }
19
+ return item;
20
+ }
21
+ /**
22
+ * This class helps managing a list of paginated items that can be filtered,
23
+ * selected, and then bulk actions can be performed on selection.
24
+ *
25
+ * Components inheriting from this class can be used as standalone with input attributes.
26
+ *
27
+ * Usage :
28
+ * <natural-my-listing [forcedVariables]="{filter:...}" [selectedColumns]="['col1']" [persistSearch]="false">
29
+ */
30
+ // @dynamic
31
+ export class NaturalAbstractList extends NaturalAbstractPanel {
32
+ constructor(service, injector) {
33
+ super();
34
+ this.service = service;
35
+ this.injector = injector;
36
+ /**
37
+ * Wherever search should be loaded from url/storage and persisted in it too.
38
+ */
39
+ this.persistSearch = true;
40
+ /**
41
+ * Columns list after interaction with <natural-columns-picker>
42
+ */
43
+ this.columnsForTable = [];
44
+ /**
45
+ * The default column selection that automatically happened after <natural-columns-picker> initialization
46
+ */
47
+ this.defaultSelectedColumns = null;
48
+ /**
49
+ * Selection for bulk actions
50
+ */
51
+ this.selection = new SelectionModel(true, []);
52
+ /**
53
+ * Next executed action from bulk menu
54
+ */
55
+ this.bulkActionSelected = null;
56
+ /**
57
+ * Centralisation of query variables
58
+ */
59
+ this.variablesManager = new NaturalQueryVariablesManager();
60
+ /**
61
+ * Configuration for natural-search facets
62
+ */
63
+ this.naturalSearchFacets = [];
64
+ /**
65
+ * Result of a search (can be provided as input for initialisation)
66
+ */
67
+ this.naturalSearchSelections = [[]];
68
+ /**
69
+ * List of page sizes
70
+ */
71
+ this.pageSizeOptions = [5, 10, 25, 50, 100, 200];
72
+ /**
73
+ * Initial pagination setup
74
+ */
75
+ this.defaultPagination = {
76
+ offset: null,
77
+ pageIndex: 0,
78
+ pageSize: 25,
79
+ };
80
+ this.router = injector.get(Router);
81
+ this.route = injector.get(ActivatedRoute);
82
+ this.alertService = injector.get(NaturalAlertService);
83
+ this.persistenceService = injector.get(NaturalPersistenceService);
84
+ }
85
+ /**
86
+ * Variables that are always forced on a list, in addition to whatever the end-user might select
87
+ */
88
+ set forcedVariables(variables) {
89
+ if (variables) {
90
+ this.applyForcedVariables(variables);
91
+ }
92
+ }
93
+ /**
94
+ * If change, check DocumentsComponent that overrides this function without calling super.ngOnInit().
95
+ */
96
+ ngOnInit() {
97
+ this.routeData = this.route.snapshot.data;
98
+ this.initFromRoute();
99
+ this.initFromPersisted();
100
+ this.variablesManager.defaults('pagination', { pagination: this.defaultPagination });
101
+ this.variablesManager.defaults('sorting', { sorting: this.defaultSorting });
102
+ this.dataSource = new NaturalDataSource(this.getDataObservable());
103
+ this.selection.clear();
104
+ }
105
+ /**
106
+ * Persist search and then launch whatever is required to refresh the list
107
+ */
108
+ search(naturalSearchSelections, navigationExtras, resetPagination = true) {
109
+ // Reset page index to restart the pagination (preserve pageSize)
110
+ if (resetPagination) {
111
+ this.variablesManager.merge('pagination', {
112
+ pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),
113
+ });
114
+ }
115
+ // Persist if activated
116
+ // Two parallel navigations conflict. We first persist the search, then the pagination
117
+ if (this.persistSearch && !this.isPanel) {
118
+ const promise = this.persistenceService.persist('ns', toUrl(naturalSearchSelections), this.route, this.getStorageKey());
119
+ const pagination = this.getPagination();
120
+ this.pagination(pagination, promise, navigationExtras);
121
+ }
122
+ this.translateSearchAndRefreshList(naturalSearchSelections);
123
+ }
124
+ /**
125
+ * Change sorting variables for query and persist the new value in url and local storage
126
+ * The default value is not persisted
127
+ * @param sortingEvents List of material sorting events
128
+ */
129
+ sorting(sortingEvents) {
130
+ // Reset page index to restart the pagination (preserve pageSize)
131
+ this.variablesManager.merge('pagination', {
132
+ pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),
133
+ });
134
+ // Preserve only sorting events with direction and convert into natural/graphql Sorting type
135
+ let sorting = sortingEvents
136
+ .filter(e => !!e.direction)
137
+ .map(sortingEvent => {
138
+ const s = {
139
+ field: sortingEvent.active,
140
+ };
141
+ if (sortingEvent.direction === 'asc') {
142
+ s.order = SortingOrder.ASC;
143
+ }
144
+ else if (sortingEvent.direction === 'desc') {
145
+ s.order = SortingOrder.DESC;
146
+ }
147
+ if ('nullAsHighest' in sortingEvent) {
148
+ s.nullAsHighest = sortingEvent.nullAsHighest;
149
+ }
150
+ return s;
151
+ });
152
+ // Empty sorting fallbacks on default
153
+ if (sorting.length === 0 && this.defaultSorting) {
154
+ sorting = this.defaultSorting;
155
+ }
156
+ // Set sorting as search variable
157
+ this.variablesManager.set('sorting', { sorting: sorting });
158
+ if (this.persistSearch && !this.isPanel) {
159
+ // If sorting is equal to default sorting, nullify it to remove from persistence (url and session storage)
160
+ const promise = this.persistenceService.persist('so', isEqual(sorting, this.defaultSorting) ? null : sorting, this.route, this.getStorageKey());
161
+ const pagination = this.getPagination();
162
+ this.pagination(pagination, promise);
163
+ }
164
+ }
165
+ /**
166
+ * Return current pagination, either the user defined one, or the default one
167
+ */
168
+ getPagination() {
169
+ const paginationChannel = this.variablesManager.get('pagination');
170
+ if (paginationChannel && paginationChannel.pagination) {
171
+ // The cast should not be necessary because Typescript correctly narrow down the type to `PaginationInput`
172
+ // but somehow still get confused when returning it
173
+ return paginationChannel.pagination;
174
+ }
175
+ return this.defaultPagination;
176
+ }
177
+ /**
178
+ * Change pagination variables for query and persist in url and local storage the new value
179
+ * The default value not persisted
180
+ *
181
+ * @param event Natural or Paginator PageEvent
182
+ * @param defer Promise (usually a route promise) that defers the redirection from this call to prevent route navigation collision
183
+ * @param navigationExtras Angular router navigation options. Is relevant only if persistSearch is true
184
+ */
185
+ pagination(event, defer, navigationExtras) {
186
+ let pagination = this.defaultPagination;
187
+ let forPersistence = null;
188
+ // Convert to natural/graphql format, adding missing attributes
189
+ let naturalEvent = pick(event, Object.keys(this.defaultPagination)); // object with only PaginationInput attributes
190
+ naturalEvent = defaults(naturalEvent, this.defaultPagination); // Default with controller values
191
+ if (!isEqual(naturalEvent, this.defaultPagination)) {
192
+ pagination = forPersistence = naturalEvent;
193
+ }
194
+ this.variablesManager.set('pagination', { pagination });
195
+ this.persistPagination(forPersistence, defer, navigationExtras);
196
+ }
197
+ persistPagination(pagination, defer, navigationExtras) {
198
+ if (this.persistSearch && !this.isPanel) {
199
+ // Declare persist function
200
+ const persist = (value) => this.persistenceService.persist('pa', value, this.route, this.getStorageKey(), navigationExtras);
201
+ // Call function directly or when promise is resolved
202
+ if (defer) {
203
+ defer.then(() => persist(pagination));
204
+ }
205
+ else {
206
+ persist(pagination);
207
+ }
208
+ }
209
+ }
210
+ /**
211
+ * Selects all rows if they are not all selected; otherwise clear selection
212
+ */
213
+ masterToggle() {
214
+ if (this.isAllSelected()) {
215
+ this.selection.clear();
216
+ }
217
+ else {
218
+ this.dataSource?.data?.items.forEach(row => {
219
+ const unwrapped = unwrapNavigable(row);
220
+ if (unwrapped.id) {
221
+ this.selection.select(unwrapped);
222
+ }
223
+ });
224
+ }
225
+ }
226
+ /**
227
+ * Whether the number of selected elements matches the total number of rows
228
+ */
229
+ isAllSelected() {
230
+ const numSelected = this.selection.selected.length;
231
+ let numRows = 0;
232
+ this.dataSource?.data?.items.forEach(row => {
233
+ const unwrapped = unwrapNavigable(row);
234
+ if (unwrapped.id) {
235
+ numRows++;
236
+ }
237
+ });
238
+ return numSelected === numRows;
239
+ }
240
+ /**
241
+ * Called when a bulk action is selected
242
+ */
243
+ bulkAction() {
244
+ if (!this.bulkActionSelected) {
245
+ throw new Error('Trying to execute a bulk action without selecting one');
246
+ }
247
+ if (!(this.bulkActionSelected in this)) {
248
+ throw new Error('Trying to execute a bulk action that does not exist: ' + this.bulkActionSelected);
249
+ }
250
+ this[this.bulkActionSelected]();
251
+ }
252
+ /**
253
+ * Header is always visible in non-panel context
254
+ * Is hidden when no results in panels
255
+ */
256
+ showHeader() {
257
+ return !this.isPanel || (this.isPanel && this.showTable());
258
+ }
259
+ /**
260
+ * Search is visible in most cases, but hidden on a panel
261
+ */
262
+ showSearch() {
263
+ return !this.isPanel;
264
+ }
265
+ /**
266
+ * Table should be shown only when there is data
267
+ */
268
+ showTable() {
269
+ return !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length > 0;
270
+ }
271
+ /**
272
+ * No results is shown when there is no items, but only in non-panel context only.
273
+ * In panels we want discrete mode, there is no search and no "no-results"
274
+ */
275
+ showNoResults() {
276
+ return !this.isPanel && !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length === 0;
277
+ }
278
+ /**
279
+ * Initialize from route.
280
+ *
281
+ * Uses data provided by router such as:
282
+ *
283
+ * - `route.data.forcedVariables`
284
+ * - `route.data.selectedColumns`
285
+ */
286
+ initFromRoute() {
287
+ // Variables
288
+ if (this.route.snapshot.data.forcedVariables) {
289
+ this.applyForcedVariables(this.route.snapshot.data.forcedVariables);
290
+ }
291
+ // Columns
292
+ if (this.route.snapshot.data.selectedColumns) {
293
+ this.selectedColumns = this.route.snapshot.data.selectedColumns;
294
+ }
295
+ }
296
+ getDataObservable() {
297
+ // Here the casting is a bit unfortunate but required because NaturalAbstractNavigableList
298
+ // breaks the data structure convention (by wrapping items in a structure). Ideally we should remove
299
+ // the casting and resolve things in a better way, but that's too much work for now
300
+ return this.service
301
+ .watchAll(this.variablesManager)
302
+ .pipe(takeUntil(this.ngUnsubscribe));
303
+ }
304
+ initFromPersisted() {
305
+ if (!this.persistSearch || this.isPanel) {
306
+ return;
307
+ }
308
+ const storageKey = this.getStorageKey();
309
+ // Pagination : pa
310
+ const pagination = this.persistenceService.get('pa', this.route, storageKey);
311
+ if (pagination) {
312
+ this.variablesManager.set('pagination', { pagination });
313
+ }
314
+ // Sorting : so
315
+ const sorting = this.persistenceService.get('so', this.route, storageKey);
316
+ if (sorting) {
317
+ this.variablesManager.set('sorting', { sorting });
318
+ }
319
+ // Columns
320
+ const persistedColumns = this.persistenceService.get('col', this.route, storageKey);
321
+ if (typeof persistedColumns === 'string') {
322
+ this.selectedColumns = persistedColumns.split(',');
323
+ }
324
+ // Natural search : ns
325
+ this.naturalSearchSelections = fromUrl(this.persistenceService.get('ns', this.route, storageKey));
326
+ this.translateSearchAndRefreshList(this.naturalSearchSelections, true);
327
+ }
328
+ translateSearchAndRefreshList(naturalSearchSelections, ignoreEmptyFilter = false) {
329
+ const filter = toGraphQLDoctrineFilter(this.naturalSearchFacets, naturalSearchSelections);
330
+ if (ignoreEmptyFilter && isEmpty(filter)) {
331
+ return;
332
+ }
333
+ this.variablesManager.set('natural-search', { filter });
334
+ }
335
+ /**
336
+ * Return current url excluding last route parameters;
337
+ */
338
+ getStorageKey() {
339
+ const urlTree = this.router.parseUrl(this.router.url);
340
+ urlTree.root.children.primary.segments[urlTree.root.children.primary.segments.length - 1].parameters = {};
341
+ return urlTree.toString();
342
+ }
343
+ bulkdDeleteConfirmation() {
344
+ return this.alertService.confirm($localize `Suppression`, $localize `Voulez-vous supprimer définitivement les éléments sélectionnés ?`, $localize `Supprimer définitivement`);
345
+ }
346
+ /**
347
+ * Delete multiple items at once
348
+ */
349
+ bulkDelete() {
350
+ const subject = new Subject();
351
+ this.bulkdDeleteConfirmation().subscribe(confirmed => {
352
+ this.bulkActionSelected = null;
353
+ if (confirmed) {
354
+ // Assume that our objects have ID. This is true in almost all cases. But if
355
+ // it is not, like AttributeReportComponent, then the inheriting class must
356
+ // never call this method.
357
+ const selection = this.selection.selected;
358
+ this.service.delete(selection).subscribe(() => {
359
+ this.selection.clear();
360
+ this.alertService.info($localize `Supprimé`);
361
+ subject.next();
362
+ subject.complete();
363
+ });
364
+ }
365
+ });
366
+ return subject;
367
+ }
368
+ applyForcedVariables(variables) {
369
+ if (variables.filter) {
370
+ this.variablesManager.set('forced-filter', { filter: variables.filter });
371
+ }
372
+ if (variables.pagination) {
373
+ this.variablesManager.set('pagination', { pagination: variables.pagination });
374
+ }
375
+ if (variables.sorting) {
376
+ this.variablesManager.set('sorting', { sorting: variables.sorting });
377
+ }
378
+ }
379
+ selectColumns(columns) {
380
+ this.columnsForTable = columns;
381
+ if (!this.persistSearch || this.isPanel) {
382
+ return;
383
+ }
384
+ // The first selection we receive is the default one made by <natural-columns-picker>
385
+ if (!this.defaultSelectedColumns) {
386
+ this.defaultSelectedColumns = columns;
387
+ }
388
+ else {
389
+ // Persist only if wanted columns are different from default selection
390
+ const value = isEqual(this.defaultSelectedColumns, columns) ? null : columns.join(',');
391
+ this.persistenceService.persist('col', value, this.route, this.getStorageKey());
392
+ }
393
+ }
394
+ }
395
+ NaturalAbstractList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalAbstractList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
396
+ NaturalAbstractList.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: NaturalAbstractList, inputs: { persistSearch: "persistSearch", selectedColumns: "selectedColumns", forcedVariables: "forcedVariables" }, usesInheritance: true, ngImport: i0 });
397
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalAbstractList, decorators: [{
398
+ type: Directive
399
+ }], ctorParameters: function () { return [{ type: undefined }, { type: i0.Injector }]; }, propDecorators: { persistSearch: [{
400
+ type: Input
401
+ }], selectedColumns: [{
402
+ type: Input
403
+ }], forcedVariables: [{
404
+ type: Input
405
+ }] } });
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL2Fic3RyYWN0LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxTQUFTLEVBQVksS0FBSyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUc1RSxPQUFPLEVBQUMsY0FBYyxFQUEwQixNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRSxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUk3RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsaUJBQWlCLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFDSCw0QkFBNEIsRUFJNUIsWUFBWSxHQUNmLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQUl6QyxTQUFTLGVBQWUsQ0FBQyxJQUFvQjtJQUN6QyxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksZUFBZSxJQUFJLElBQUksRUFBRTtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENB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LENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQzs7Z0hBM2ZRLG1CQUFtQjtvR0FBbkIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBRC9CLFNBQVM7b0hBeUJVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBZVUsZUFBZTtzQkFBOUIsS0FBSztnQkE0RUssZUFBZTtzQkFEekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0aW9uTW9kZWx9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BhZ2VFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7U29ydH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEYXRhLCBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2RlZmF1bHRzLCBpc0VtcHR5LCBpc0VxdWFsLCBwaWNrfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7TmF0dXJhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vbW9kdWxlcy9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0UGFuZWx9IGZyb20gJy4uL21vZHVsZXMvcGFuZWxzL2Fic3RyYWN0LXBhbmVsJztcbmltcG9ydCB7dG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXJ9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZSc7XG5pbXBvcnQge2Zyb21VcmwsIHRvVXJsfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC9jbGFzc2VzL3VybCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hGYWNldHN9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL3R5cGVzL2ZhY2V0JztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaFNlbGVjdGlvbnN9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL3R5cGVzL3ZhbHVlcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvYWJzdHJhY3QtbW9kZWwuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxQZXJzaXN0ZW5jZVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3BlcnNpc3RlbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsRGF0YVNvdXJjZSwgUGFnaW5hdGVkRGF0YX0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQge1xuICAgIE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIsXG4gICAgUGFnaW5hdGlvbklucHV0LFxuICAgIFF1ZXJ5VmFyaWFibGVzLFxuICAgIFNvcnRpbmcsXG4gICAgU29ydGluZ09yZGVyLFxufSBmcm9tICcuL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtFeHRyYWN0VGFsbCwgRXh0cmFjdFZhbGwsIExpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7TmF2aWdhYmxlSXRlbX0gZnJvbSAnLi9hYnN0cmFjdC1uYXZpZ2FibGUtbGlzdCc7XG5pbXBvcnQge3Rha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG50eXBlIE1heWJlTmF2aWdhYmxlID0gTGl0ZXJhbCB8IE5hdmlnYWJsZUl0ZW08TGl0ZXJhbD47XG5cbmZ1bmN0aW9uIHVud3JhcE5hdmlnYWJsZShpdGVtOiBNYXliZU5hdmlnYWJsZSk6IExpdGVyYWwge1xuICAgIGlmICgnaXRlbScgaW4gaXRlbSAmJiAnaGFzTmF2aWdhdGlvbicgaW4gaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5pdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGVscHMgbWFuYWdpbmcgYSBsaXN0IG9mIHBhZ2luYXRlZCBpdGVtcyB0aGF0IGNhbiBiZSBmaWx0ZXJlZCxcbiAqIHNlbGVjdGVkLCBhbmQgdGhlbiBidWxrIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBvbiBzZWxlY3Rpb24uXG4gKlxuICogQ29tcG9uZW50cyBpbmhlcml0aW5nIGZyb20gdGhpcyBjbGFzcyBjYW4gYmUgdXNlZCBhcyBzdGFuZGFsb25lIHdpdGggaW5wdXQgYXR0cmlidXRlcy5cbiAqXG4gKiBVc2FnZSA6XG4gKiA8bmF0dXJhbC1teS1saXN0aW5nIFtmb3JjZWRWYXJpYWJsZXNdPVwie2ZpbHRlcjouLi59XCIgW3NlbGVjdGVkQ29sdW1uc109XCJbJ2NvbDEnXVwiIFtwZXJzaXN0U2VhcmNoXT1cImZhbHNlXCI+XG4gKi9cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdExpc3Q8XG4gICAgICAgIFRTZXJ2aWNlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlPFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgUGFnaW5hdGVkRGF0YTxMaXRlcmFsPixcbiAgICAgICAgICAgIFF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55XG4gICAgICAgID4sXG4gICAgICAgIC8vIEluIG1vc3QgY2FzZSB0aGlzIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGJ5IGluaGVyaXRpbmcgY2xhc3Nlcy5cbiAgICAgICAgLy8gSXQgc2hvdWxkIG9ubHkgYmUgc3BlY2lmaWVkIHRvIG92ZXJyaWRlIGRlZmF1bHQgaWYgdGhlIHNlcnZpY2UgaXRlbXMgYXJlXG4gICAgICAgIC8vIG1hcHBlZCB0byBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgbGlrZSBpbiBOYXR1cmFsQWJzdHJhY3ROYXZpZ2FibGVMaXN0XG4gICAgICAgIFRhbGwgZXh0ZW5kcyBQYWdpbmF0ZWREYXRhPE1heWJlTmF2aWdhYmxlPiA9IEV4dHJhY3RUYWxsPFRTZXJ2aWNlPixcbiAgICA+XG4gICAgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RQYW5lbFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKipcbiAgICAgKiBXaGVyZXZlciBzZWFyY2ggc2hvdWxkIGJlIGxvYWRlZCBmcm9tIHVybC9zdG9yYWdlIGFuZCBwZXJzaXN0ZWQgaW4gaXQgdG9vLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwZXJzaXN0U2VhcmNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENvbHVtbnMgbGlzdCBhZnRlciBpbnRlcmFjdGlvbiB3aXRoIDxuYXR1cmFsLWNvbHVtbnMtcGlja2VyPlxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5zRm9yVGFibGU6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGVmYXVsdCBjb2x1bW4gc2VsZWN0aW9uIHRoYXQgYXV0b21hdGljYWxseSBoYXBwZW5lZCBhZnRlciA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj4gaW5pdGlhbGl6YXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlZmF1bHRTZWxlY3RlZENvbHVtbnM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBWaXNpYmxlIChjaGVja2VkKSBjb2x1bW5zXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkQ29sdW1ucz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogU291cmNlIG9mIHRoZSBsaXN0XG4gICAgICovXG4gICAgcHVibGljIGRhdGFTb3VyY2U/OiBOYXR1cmFsRGF0YVNvdXJjZTxUYWxsPjtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGlvbiBmb3IgYnVsayBhY3Rpb25zXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxFeHRyYWN0VGFsbDxUU2VydmljZT5bJ2l0ZW1zJ11bMF0+KHRydWUsIFtdKTtcblxuICAgIC8qKlxuICAgICAqIE5leHQgZXhlY3V0ZWQgYWN0aW9uIGZyb20gYnVsayBtZW51XG4gICAgICovXG4gICAgcHVibGljIGJ1bGtBY3Rpb25TZWxlY3RlZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDZW50cmFsaXNhdGlvbiBvZiBxdWVyeSB2YXJpYWJsZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxFeHRyYWN0VmFsbDxUU2VydmljZT4+ID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8XG4gICAgICAgIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPlxuICAgID4oKTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIG5hdHVyYWwtc2VhcmNoIGZhY2V0c1xuICAgICAqL1xuICAgIHB1YmxpYyBuYXR1cmFsU2VhcmNoRmFjZXRzOiBOYXR1cmFsU2VhcmNoRmFjZXRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSZXN1bHQgb2YgYSBzZWFyY2ggKGNhbiBiZSBwcm92aWRlZCBhcyBpbnB1dCBmb3IgaW5pdGlhbGlzYXRpb24pXG4gICAgICovXG4gICAgcHVibGljIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IFtbXV07XG5cbiAgICAvKipcbiAgICAgKiBEYXRhIGF0dHJpYnV0ZSBwcm92aWRlZCBieSBhY3RpdmF0ZWQgcm91dGUgc25hcHNob3RcbiAgICAgKi9cbiAgICBwdWJsaWMgcm91dGVEYXRhPzogRGF0YTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcGFnZSBzaXplc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMTAsIDI1LCA1MCwgMTAwLCAyMDBdO1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCBwYWdpbmF0aW9uIHNldHVwXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRQYWdpbmF0aW9uOiBSZXF1aXJlZDxQYWdpbmF0aW9uSW5wdXQ+ID0ge1xuICAgICAgICBvZmZzZXQ6IG51bGwsXG4gICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgcGFnZVNpemU6IDI1LFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIHNvcnRpbmdcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFNvcnRpbmc/OiBBcnJheTxTb3J0aW5nPjtcblxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgICBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICAgIHByb3RlY3RlZCBhbGVydFNlcnZpY2U6IE5hdHVyYWxBbGVydFNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIHBlcnNpc3RlbmNlU2VydmljZTogTmF0dXJhbFBlcnNpc3RlbmNlU2VydmljZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICAgICAgdGhpcy5yb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5hdHVyYWxBbGVydFNlcnZpY2UpO1xuICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZSA9IGluamVjdG9yLmdldChOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYXJpYWJsZXMgdGhhdCBhcmUgYWx3YXlzIGZvcmNlZCBvbiBhIGxpc3QsIGluIGFkZGl0aW9uIHRvIHdoYXRldmVyIHRoZSBlbmQtdXNlciBtaWdodCBzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGNoYW5nZSwgY2hlY2sgRG9jdW1lbnRzQ29tcG9uZW50IHRoYXQgb3ZlcnJpZGVzIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBjYWxsaW5nIHN1cGVyLm5nT25Jbml0KCkuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcblxuICAgICAgICB0aGlzLmluaXRGcm9tUm91dGUoKTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVBlcnNpc3RlZCgpO1xuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5kZWZhdWx0cygncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiB0aGlzLmRlZmF1bHRQYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZGVmYXVsdHMoJ3NvcnRpbmcnLCB7c29ydGluZzogdGhpcy5kZWZhdWx0U29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTmF0dXJhbERhdGFTb3VyY2U8VGFsbD4odGhpcy5nZXREYXRhT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJzaXN0IHNlYXJjaCBhbmQgdGhlbiBsYXVuY2ggd2hhdGV2ZXIgaXMgcmVxdWlyZWQgdG8gcmVmcmVzaCB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWFyY2goXG4gICAgICAgIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyxcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgICAgIHJlc2V0UGFnaW5hdGlvbiA9IHRydWUsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG5cbiAgICAgICAgaWYgKHJlc2V0UGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICAgICAgfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyc2lzdCBpZiBhY3RpdmF0ZWRcbiAgICAgICAgLy8gVHdvIHBhcmFsbGVsIG5hdmlnYXRpb25zIGNvbmZsaWN0LiBXZSBmaXJzdCBwZXJzaXN0IHRoZSBzZWFyY2gsIHRoZW4gdGhlIHBhZ2luYXRpb25cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnbnMnLFxuICAgICAgICAgICAgICAgIHRvVXJsKG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHNvcnRpbmcgdmFyaWFibGVzIGZvciBxdWVyeSBhbmQgcGVyc2lzdCB0aGUgbmV3IHZhbHVlIGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZVxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5vdCBwZXJzaXN0ZWRcbiAgICAgKiBAcGFyYW0gc29ydGluZ0V2ZW50cyBMaXN0IG9mIG1hdGVyaWFsIHNvcnRpbmcgZXZlbnRzXG4gICAgICovXG4gICAgcHVibGljIHNvcnRpbmcoc29ydGluZ0V2ZW50czogKFNvcnQgJiBQYXJ0aWFsPFBpY2s8U29ydGluZywgJ251bGxBc0hpZ2hlc3QnPj4pW10pOiB2b2lkIHtcbiAgICAgICAgLy8gUmVzZXQgcGFnZSBpbmRleCB0byByZXN0YXJ0IHRoZSBwYWdpbmF0aW9uIChwcmVzZXJ2ZSBwYWdlU2l6ZSlcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjogcGljayh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uLCBbJ29mZnNldCcsICdwYWdlSW5kZXgnXSksXG4gICAgICAgIH0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICAvLyBQcmVzZXJ2ZSBvbmx5IHNvcnRpbmcgZXZlbnRzIHdpdGggZGlyZWN0aW9uIGFuZCBjb252ZXJ0IGludG8gbmF0dXJhbC9ncmFwaHFsIFNvcnRpbmcgdHlwZVxuICAgICAgICBsZXQgc29ydGluZzogU29ydGluZ1tdID0gc29ydGluZ0V2ZW50c1xuICAgICAgICAgICAgLmZpbHRlcihlID0+ICEhZS5kaXJlY3Rpb24pXG4gICAgICAgICAgICAubWFwKHNvcnRpbmdFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgczogU29ydGluZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHNvcnRpbmdFdmVudC5hY3RpdmUsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChzb3J0aW5nRXZlbnQuZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgICAgICAgICAgICAgICBzLm9yZGVyID0gU29ydGluZ09yZGVyLkFTQztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnRpbmdFdmVudC5kaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgICAgICAgICAgICAgICBzLm9yZGVyID0gU29ydGluZ09yZGVyLkRFU0M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCdudWxsQXNIaWdoZXN0JyBpbiBzb3J0aW5nRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5udWxsQXNIaWdoZXN0ID0gc29ydGluZ0V2ZW50Lm51bGxBc0hpZ2hlc3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBFbXB0eSBzb3J0aW5nIGZhbGxiYWNrcyBvbiBkZWZhdWx0XG4gICAgICAgIGlmIChzb3J0aW5nLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmRlZmF1bHRTb3J0aW5nKSB7XG4gICAgICAgICAgICBzb3J0aW5nID0gdGhpcy5kZWZhdWx0U29ydGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBzb3J0aW5nIGFzIHNlYXJjaCB2YXJpYWJsZVxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdzb3J0aW5nJywge3NvcnRpbmc6IHNvcnRpbmd9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAvLyBJZiBzb3J0aW5nIGlzIGVxdWFsIHRvIGRlZmF1bHQgc29ydGluZywgbnVsbGlmeSBpdCB0byByZW1vdmUgZnJvbSBwZXJzaXN0ZW5jZSAodXJsIGFuZCBzZXNzaW9uIHN0b3JhZ2UpXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnc28nLFxuICAgICAgICAgICAgICAgIGlzRXF1YWwoc29ydGluZywgdGhpcy5kZWZhdWx0U29ydGluZykgPyBudWxsIDogc29ydGluZyxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGN1cnJlbnQgcGFnaW5hdGlvbiwgZWl0aGVyIHRoZSB1c2VyIGRlZmluZWQgb25lLCBvciB0aGUgZGVmYXVsdCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbklucHV0IHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkNoYW5uZWw6IFBhcnRpYWw8RXh0cmFjdFZhbGw8VFNlcnZpY2U+PiB8IHVuZGVmaW5lZCA9IHRoaXMudmFyaWFibGVzTWFuYWdlci5nZXQoJ3BhZ2luYXRpb24nKTtcblxuICAgICAgICBpZiAocGFnaW5hdGlvbkNoYW5uZWwgJiYgcGFnaW5hdGlvbkNoYW5uZWwucGFnaW5hdGlvbikge1xuICAgICAgICAgICAgLy8gVGhlIGNhc3Qgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSBUeXBlc2NyaXB0IGNvcnJlY3RseSBuYXJyb3cgZG93biB0aGUgdHlwZSB0byBgUGFnaW5hdGlvbklucHV0YFxuICAgICAgICAgICAgLy8gYnV0IHNvbWVob3cgc3RpbGwgZ2V0IGNvbmZ1c2VkIHdoZW4gcmV0dXJuaW5nIGl0XG4gICAgICAgICAgICByZXR1cm4gcGFnaW5hdGlvbkNoYW5uZWwucGFnaW5hdGlvbiBhcyBQYWdpbmF0aW9uSW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgcGFnaW5hdGlvbiB2YXJpYWJsZXMgZm9yIHF1ZXJ5IGFuZCBwZXJzaXN0IGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZSB0aGUgbmV3IHZhbHVlXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgbm90IHBlcnNpc3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IE5hdHVyYWwgb3IgUGFnaW5hdG9yIFBhZ2VFdmVudFxuICAgICAqIEBwYXJhbSBkZWZlciBQcm9taXNlICh1c3VhbGx5IGEgcm91dGUgcHJvbWlzZSkgdGhhdCBkZWZlcnMgdGhlIHJlZGlyZWN0aW9uIGZyb20gdGhpcyBjYWxsIHRvIHByZXZlbnQgcm91dGUgbmF2aWdhdGlvbiBjb2xsaXNpb25cbiAgICAgKiBAcGFyYW0gbmF2aWdhdGlvbkV4dHJhcyBBbmd1bGFyIHJvdXRlciBuYXZpZ2F0aW9uIG9wdGlvbnMuIElzIHJlbGV2YW50IG9ubHkgaWYgcGVyc2lzdFNlYXJjaCBpcyB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRpb24oXG4gICAgICAgIGV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgfCBQYWdlRXZlbnQsXG4gICAgICAgIGRlZmVyPzogUHJvbWlzZTx1bmtub3duPixcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGxldCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgPSB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uO1xuICAgICAgICBsZXQgZm9yUGVyc2lzdGVuY2U6IFBhZ2luYXRpb25JbnB1dCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gbmF0dXJhbC9ncmFwaHFsIGZvcm1hdCwgYWRkaW5nIG1pc3NpbmcgYXR0cmlidXRlc1xuICAgICAgICBsZXQgbmF0dXJhbEV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgPSBwaWNrKGV2ZW50LCBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKSk7IC8vIG9iamVjdCB3aXRoIG9ubHkgUGFnaW5hdGlvbklucHV0IGF0dHJpYnV0ZXNcbiAgICAgICAgbmF0dXJhbEV2ZW50ID0gZGVmYXVsdHMobmF0dXJhbEV2ZW50LCB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKTsgLy8gRGVmYXVsdCB3aXRoIGNvbnRyb2xsZXIgdmFsdWVzXG5cbiAgICAgICAgaWYgKCFpc0VxdWFsKG5hdHVyYWxFdmVudCwgdGhpcy5kZWZhdWx0UGFnaW5hdGlvbikpIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb24gPSBmb3JQZXJzaXN0ZW5jZSA9IG5hdHVyYWxFdmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLnBlcnNpc3RQYWdpbmF0aW9uKGZvclBlcnNpc3RlbmNlLCBkZWZlciwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHBlcnNpc3RQYWdpbmF0aW9uKFxuICAgICAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsLFxuICAgICAgICBkZWZlcj86IFByb21pc2U8dW5rbm93bj4sXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wZXJzaXN0U2VhcmNoICYmICF0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIC8vIERlY2xhcmUgcGVyc2lzdCBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgcGVyc2lzdCA9ICh2YWx1ZTogUGFnaW5hdGlvbklucHV0IHwgbnVsbCk6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdwYScsIHZhbHVlLCB0aGlzLnJvdXRlLCB0aGlzLmdldFN0b3JhZ2VLZXkoKSwgbmF2aWdhdGlvbkV4dHJhcyk7XG5cbiAgICAgICAgICAgIC8vIENhbGwgZnVuY3Rpb24gZGlyZWN0bHkgb3Igd2hlbiBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICAgICAgICBpZiAoZGVmZXIpIHtcbiAgICAgICAgICAgICAgICBkZWZlci50aGVuKCgpID0+IHBlcnNpc3QocGFnaW5hdGlvbikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0KHBhZ2luYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIG1hc3RlclRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5pdGVtcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW53cmFwcGVkID0gdW53cmFwTmF2aWdhYmxlKHJvdyk7XG4gICAgICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodW53cmFwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgbGV0IG51bVJvd3MgPSAwO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/Lml0ZW1zLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcE5hdmlnYWJsZShyb3cpO1xuICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgIG51bVJvd3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgYnVsayBhY3Rpb24gaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYnVsa0FjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gZXhlY3V0ZSBhIGJ1bGsgYWN0aW9uIHdpdGhvdXQgc2VsZWN0aW5nIG9uZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGV4ZWN1dGUgYSBidWxrIGFjdGlvbiB0aGF0IGRvZXMgbm90IGV4aXN0OiAnICsgdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMgYXMgYW55KVt0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZF0oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWFkZXIgaXMgYWx3YXlzIHZpc2libGUgaW4gbm9uLXBhbmVsIGNvbnRleHRcbiAgICAgKiBJcyBoaWRkZW4gd2hlbiBubyByZXN1bHRzIGluIHBhbmVsc1xuICAgICAqL1xuICAgIHB1YmxpYyBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbCB8fCAodGhpcy5pc1BhbmVsICYmIHRoaXMuc2hvd1RhYmxlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBpcyB2aXNpYmxlIGluIG1vc3QgY2FzZXMsIGJ1dCBoaWRkZW4gb24gYSBwYW5lbFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93U2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWJsZSBzaG91bGQgYmUgc2hvd24gb25seSB3aGVuIHRoZXJlIGlzIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGFTb3VyY2UgJiYgISF0aGlzLmRhdGFTb3VyY2UuZGF0YSAmJiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vIHJlc3VsdHMgaXMgc2hvd24gd2hlbiB0aGVyZSBpcyBubyBpdGVtcywgYnV0IG9ubHkgaW4gbm9uLXBhbmVsIGNvbnRleHQgb25seS5cbiAgICAgKiBJbiBwYW5lbHMgd2Ugd2FudCBkaXNjcmV0ZSBtb2RlLCB0aGVyZSBpcyBubyBzZWFyY2ggYW5kIG5vIFwibm8tcmVzdWx0c1wiXG4gICAgICovXG4gICAgcHVibGljIHNob3dOb1Jlc3VsdHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1BhbmVsICYmICEhdGhpcy5kYXRhU291cmNlICYmICEhdGhpcy5kYXRhU291cmNlLmRhdGEgJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgZnJvbSByb3V0ZS5cbiAgICAgKlxuICAgICAqIFVzZXMgZGF0YSBwcm92aWRlZCBieSByb3V0ZXIgc3VjaCBhczpcbiAgICAgKlxuICAgICAqIC0gYHJvdXRlLmRhdGEuZm9yY2VkVmFyaWFibGVzYFxuICAgICAqIC0gYHJvdXRlLmRhdGEuc2VsZWN0ZWRDb2x1bW5zYFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0RnJvbVJvdXRlKCk6IHZvaWQge1xuICAgICAgICAvLyBWYXJpYWJsZXNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5mb3JjZWRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmZvcmNlZFZhcmlhYmxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2x1bW5zXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5zZWxlY3RlZENvbHVtbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGF0YU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxUYWxsPiB7XG4gICAgICAgIC8vIEhlcmUgdGhlIGNhc3RpbmcgaXMgYSBiaXQgdW5mb3J0dW5hdGUgYnV0IHJlcXVpcmVkIGJlY2F1c2UgTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdFxuICAgICAgICAvLyBicmVha3MgdGhlIGRhdGEgc3RydWN0dXJlIGNvbnZlbnRpb24gKGJ5IHdyYXBwaW5nIGl0ZW1zIGluIGEgc3RydWN0dXJlKS4gSWRlYWxseSB3ZSBzaG91bGQgcmVtb3ZlXG4gICAgICAgIC8vIHRoZSBjYXN0aW5nIGFuZCByZXNvbHZlIHRoaW5ncyBpbiBhIGJldHRlciB3YXksIGJ1dCB0aGF0J3MgdG9vIG11Y2ggd29yayBmb3Igbm93XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC53YXRjaEFsbCh0aGlzLnZhcmlhYmxlc01hbmFnZXIgYXMgdW5rbm93biBhcyBhbnkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPFRhbGw+O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0RnJvbVBlcnNpc3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9yYWdlS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG5cbiAgICAgICAgLy8gUGFnaW5hdGlvbiA6IHBhXG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ3BhJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0aW5nIDogc29cbiAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnc28nLCB0aGlzLnJvdXRlLCBzdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKHNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbHVtbnNcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkQ29sdW1ucyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnY29sJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVkQ29sdW1ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcGVyc2lzdGVkQ29sdW1ucy5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmF0dXJhbCBzZWFyY2ggOiBuc1xuICAgICAgICB0aGlzLm5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gZnJvbVVybCh0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ25zJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSkpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlYXJjaEFuZFJlZnJlc2hMaXN0KHRoaXMubmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChcbiAgICAgICAgbmF0dXJhbFNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLFxuICAgICAgICBpZ25vcmVFbXB0eUZpbHRlciA9IGZhbHNlLFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0b0dyYXBoUUxEb2N0cmluZUZpbHRlcih0aGlzLm5hdHVyYWxTZWFyY2hGYWNldHMsIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTtcblxuICAgICAgICBpZiAoaWdub3JlRW1wdHlGaWx0ZXIgJiYgaXNFbXB0eShmaWx0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCduYXR1cmFsLXNlYXJjaCcsIHtmaWx0ZXJ9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGN1cnJlbnQgdXJsIGV4Y2x1ZGluZyBsYXN0IHJvdXRlIHBhcmFtZXRlcnM7XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFN0b3JhZ2VLZXkoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgIHVybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzW3VybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzLmxlbmd0aCAtIDFdLnBhcmFtZXRlcnMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHVybFRyZWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYnVsa2REZWxldGVDb25maXJtYXRpb24oKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZS5jb25maXJtKFxuICAgICAgICAgICAgJGxvY2FsaXplYFN1cHByZXNzaW9uYCxcbiAgICAgICAgICAgICRsb2NhbGl6ZWBWb3VsZXotdm91cyBzdXBwcmltZXIgZMOpZmluaXRpdmVtZW50IGxlcyDDqWzDqW1lbnRzIHPDqWxlY3Rpb25uw6lzID9gLFxuICAgICAgICAgICAgJGxvY2FsaXplYFN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnRgLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBtdWx0aXBsZSBpdGVtcyBhdCBvbmNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGJ1bGtEZWxldGUoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICB0aGlzLmJ1bGtkRGVsZXRlQ29uZmlybWF0aW9uKCkuc3Vic2NyaWJlKGNvbmZpcm1lZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgb3VyIG9iamVjdHMgaGF2ZSBJRC4gVGhpcyBpcyB0cnVlIGluIGFsbW9zdCBhbGwgY2FzZXMuIEJ1dCBpZlxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIG5vdCwgbGlrZSBBdHRyaWJ1dGVSZXBvcnRDb21wb25lbnQsIHRoZW4gdGhlIGluaGVyaXRpbmcgY2xhc3MgbXVzdFxuICAgICAgICAgICAgICAgIC8vIG5ldmVyIGNhbGwgdGhpcyBtZXRob2QuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQgYXMge2lkOiBzdHJpbmd9W107XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlKHNlbGVjdGlvbikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgU3VwcHJpbcOpYCk7XG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyk6IHZvaWQge1xuICAgICAgICBpZiAodmFyaWFibGVzLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnZm9yY2VkLWZpbHRlcicsIHtmaWx0ZXI6IHZhcmlhYmxlcy5maWx0ZXJ9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFyaWFibGVzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbjogdmFyaWFibGVzLnBhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFyaWFibGVzLnNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZzogdmFyaWFibGVzLnNvcnRpbmd9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnNGb3JUYWJsZSA9IGNvbHVtbnM7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0aW9uIHdlIHJlY2VpdmUgaXMgdGhlIGRlZmF1bHQgb25lIG1hZGUgYnkgPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZENvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUGVyc2lzdCBvbmx5IGlmIHdhbnRlZCBjb2x1bW5zIGFyZSBkaWZmZXJlbnQgZnJvbSBkZWZhdWx0IHNlbGVjdGlvblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpc0VxdWFsKHRoaXMuZGVmYXVsdFNlbGVjdGVkQ29sdW1ucywgY29sdW1ucykgPyBudWxsIDogY29sdW1ucy5qb2luKCcsJyk7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdjb2wnLCB2YWx1ZSwgdGhpcy5yb3V0ZSwgdGhpcy5nZXRTdG9yYWdlS2V5KCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -0,0 +1,126 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { map, takeUntil } from 'rxjs/operators';
3
+ import { NaturalAbstractList } from './abstract-list';
4
+ import { NaturalQueryVariablesManager } from './query-variable-manager';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * This class helps managing a list of paginated items that can be filtered,
8
+ * selected, and then bulk actions can be performed on selection.
9
+ *
10
+ * @dynamic
11
+ */
12
+ export class NaturalAbstractNavigableList extends NaturalAbstractList {
13
+ constructor(service, injector) {
14
+ super(service, injector);
15
+ /**
16
+ * Name of filter for child items to access ancestor item
17
+ */
18
+ this.ancestorRelationName = 'parent';
19
+ this.oldAncertorId = null;
20
+ this.breadcrumbs = [];
21
+ }
22
+ ngOnInit() {
23
+ // In fact, "na" and "ns" key may exist at the same time in url (but shouldn't).
24
+ // When this happens, on page reload, search is priority.
25
+ // "na" is a trailing param, and should be considered only when there is no search
26
+ this.route.params.subscribe(params => {
27
+ // "ns" stands for natural-search to be shorter in url
28
+ if (params['ns']) {
29
+ return;
30
+ }
31
+ let navigationConditionValue = null;
32
+ // "na" stands for "navigation" (relation) in url
33
+ if (params['na']) {
34
+ navigationConditionValue = { have: { values: [params['na']] } };
35
+ this.service.getOne(params['na']).subscribe(
36
+ // TODO casting should disappear and instead this class should enforce
37
+ // the service to support Tone with a new generic
38
+ (ancestor) => (this.breadcrumbs = this.getBreadcrumb(ancestor)));
39
+ const hasAncestorChanged = params['na'] !== this.oldAncertorId;
40
+ this.oldAncertorId = params['na'];
41
+ this.clearSearch(hasAncestorChanged);
42
+ }
43
+ else {
44
+ navigationConditionValue = { empty: {} };
45
+ this.breadcrumbs = [];
46
+ }
47
+ const condition = {};
48
+ condition[this.ancestorRelationName] = navigationConditionValue;
49
+ const variables = { filter: { groups: [{ conditions: [condition] }] } };
50
+ // todo : check why without "as Vall" it errors. Vall is supposed to be QueryVariables, and filter too.
51
+ this.variablesManager.set('navigation', variables);
52
+ });
53
+ super.ngOnInit();
54
+ }
55
+ getDataObservable() {
56
+ return this.service.watchAll(this.variablesManager).pipe(takeUntil(this.ngUnsubscribe), map(result => {
57
+ // On each data arriving, we query children count to show/hide chevron
58
+ const navigableItems = result.items.map(item => {
59
+ const navigableItem = {
60
+ item: item,
61
+ hasNavigation: false,
62
+ };
63
+ const condition = {};
64
+ condition[this.ancestorRelationName] = { have: { values: [item.id] } };
65
+ const variables = { filter: { groups: [{ conditions: [condition] }] } };
66
+ const qvm = new NaturalQueryVariablesManager();
67
+ qvm.set('variables', variables);
68
+ this.service.count(qvm).subscribe(count => (navigableItem.hasNavigation = count > 0));
69
+ return navigableItem;
70
+ });
71
+ const navigableResult = {
72
+ ...result,
73
+ items: navigableItems,
74
+ };
75
+ return navigableResult;
76
+ }));
77
+ }
78
+ translateSearchAndRefreshList(naturalSearchSelections) {
79
+ // Clear navigation filter if there is a search
80
+ if (naturalSearchSelections.some(s => s.length)) {
81
+ this.variablesManager.set('navigation', null);
82
+ this.breadcrumbs = [];
83
+ }
84
+ super.translateSearchAndRefreshList(naturalSearchSelections);
85
+ }
86
+ clearSearch(resetPagination = true) {
87
+ this.naturalSearchSelections = [[]];
88
+ super.search([[]], undefined, resetPagination);
89
+ this.persistenceService.persistInStorage('ns', null, this.getStorageKey());
90
+ }
91
+ search(naturalSearchSelections, navigationExtras, resetPagination = true) {
92
+ this.persistenceService.persistInUrl('na', null, this.route).then(() => {
93
+ super.search(naturalSearchSelections, navigationExtras, resetPagination);
94
+ });
95
+ }
96
+ /**
97
+ * Return an array for router link usage
98
+ */
99
+ getChildLink(ancestor) {
100
+ if (ancestor && ancestor.id) {
101
+ return ['.', { na: ancestor.id }];
102
+ }
103
+ else {
104
+ return ['.', {}];
105
+ }
106
+ }
107
+ /**
108
+ * Depth is limited by queries
109
+ * @param item with an ancestor relation (must match ancestorRelationName attribute)
110
+ */
111
+ getBreadcrumb(item) {
112
+ const ancestor = item[this.ancestorRelationName];
113
+ if (ancestor) {
114
+ return this.getBreadcrumb(ancestor).concat([item]);
115
+ }
116
+ return [item];
117
+ }
118
+ }
119
+ NaturalAbstractNavigableList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalAbstractNavigableList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
120
+ NaturalAbstractNavigableList.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: NaturalAbstractNavigableList, inputs: { ancestorRelationName: "ancestorRelationName" }, usesInheritance: true, ngImport: i0 });
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalAbstractNavigableList, decorators: [{
122
+ type: Directive
123
+ }], ctorParameters: function () { return [{ type: undefined }, { type: i0.Injector }]; }, propDecorators: { ancestorRelationName: [{
124
+ type: Input
125
+ }] } });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhYmxlLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvY2xhc3Nlcy9hYnN0cmFjdC1uYXZpZ2FibGUtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFZLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUc5QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsNEJBQTRCLEVBQWlCLE1BQU0sMEJBQTBCLENBQUM7O0FBY3RGOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLDRCQWNULFNBQVEsbUJBQThGO0lBWXRHLFlBQW1CLE9BQWlCLEVBQUUsUUFBa0I7UUFDcEQsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQVY3Qjs7V0FFRztRQUNhLHlCQUFvQixHQUFHLFFBQVEsQ0FBQztRQUV4QyxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFFckMsZ0JBQVcsR0FBcUIsRUFBRSxDQUFDO0lBSTFDLENBQUM7SUFFTSxRQUFRO1FBQ1gsZ0ZBQWdGO1FBQ2hGLHlEQUF5RDtRQUN6RCxrRkFBa0Y7UUFDbEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pDLHNEQUFzRDtZQUN0RCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDZCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLHdCQUF3QixHQUFlLElBQUksQ0FBQztZQUVoRCxpREFBaUQ7WUFDakQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2Qsd0JBQXdCLEdBQUcsRUFBQyxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUs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RSxFQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0gsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNwQjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDTyxhQUFhLENBQUMsSUFBb0I7UUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2pELElBQUksUUFBUSxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDdEQ7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQzs7eUhBdEpRLDRCQUE0Qjs2R0FBNUIsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBRHhDLFNBQVM7b0hBcUJVLG9CQUFvQjtzQkFBbkMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF2aWdhdGlvbkV4dHJhcywgUm91dGVyTGlua30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7bWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaFNlbGVjdGlvbnN9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL3R5cGVzL3ZhbHVlcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvYWJzdHJhY3QtbW9kZWwuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdExpc3R9IGZyb20gJy4vYWJzdHJhY3QtbGlzdCc7XG5pbXBvcnQge1BhZ2luYXRlZERhdGF9IGZyb20gJy4vZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLCBRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7RXh0cmFjdFRhbGwsIEV4dHJhY3RUYWxsT25lLCBFeHRyYWN0VmFsbCwgTGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxudHlwZSBCcmVhZGNydW1iSXRlbSA9IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbn0gJiBMaXRlcmFsO1xuXG5leHBvcnQgdHlwZSBOYXZpZ2FibGVJdGVtPFQ+ID0ge1xuICAgIGl0ZW06IFQ7XG4gICAgaGFzTmF2aWdhdGlvbjogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBoZWxwcyBtYW5hZ2luZyBhIGxpc3Qgb2YgcGFnaW5hdGVkIGl0ZW1zIHRoYXQgY2FuIGJlIGZpbHRlcmVkLFxuICogc2VsZWN0ZWQsIGFuZCB0aGVuIGJ1bGsgYWN0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIG9uIHNlbGVjdGlvbi5cbiAqXG4gKiBAZHluYW1pY1xuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQWJzdHJhY3ROYXZpZ2FibGVMaXN0PFxuICAgICAgICBUU2VydmljZSBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIFBhZ2luYXRlZERhdGE8e2lkOiBzdHJpbmd9PixcbiAgICAgICAgICAgIFF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55XG4gICAgICAgID4sXG4gICAgPlxuICAgIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0TGlzdDxUU2VydmljZSwgUGFnaW5hdGVkRGF0YTxOYXZpZ2FibGVJdGVtPEV4dHJhY3RUYWxsPFRTZXJ2aWNlPlsnaXRlbXMnXVswXT4+PlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIGZpbHRlciBmb3IgY2hpbGQgaXRlbXMgdG8gYWNjZXNzIGFuY2VzdG9yIGl0ZW1cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYW5jZXN0b3JSZWxhdGlvbk5hbWUgPSAncGFyZW50JztcblxuICAgIHByaXZhdGUgb2xkQW5jZXJ0b3JJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgYnJlYWRjcnVtYnM6IEJyZWFkY3J1bWJJdGVtW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzZXJ2aWNlOiBUU2VydmljZSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKHNlcnZpY2UsIGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEluIGZhY3QsIFwibmFcIiBhbmQgXCJuc1wiIGtleSBtYXkgZXhpc3QgYXQgdGhlIHNhbWUgdGltZSBpbiB1cmwgKGJ1dCBzaG91bGRuJ3QpLlxuICAgICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgb24gcGFnZSByZWxvYWQsIHNlYXJjaCBpcyBwcmlvcml0eS5cbiAgICAgICAgLy8gXCJuYVwiIGlzIGEgdHJhaWxpbmcgcGFyYW0sIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCBvbmx5IHdoZW4gdGhlcmUgaXMgbm8gc2VhcmNoXG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICAgICAgLy8gXCJuc1wiIHN0YW5kcyBmb3IgbmF0dXJhbC1zZWFyY2ggdG8gYmUgc2hvcnRlciBpbiB1cmxcbiAgICAgICAgICAgIGlmIChwYXJhbXNbJ25zJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBuYXZpZ2F0aW9uQ29uZGl0aW9uVmFsdWU6IGFueSB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyBcIm5hXCIgc3RhbmRzIGZvciBcIm5hdmlnYXRpb25cIiAocmVsYXRpb24pIGluIHVybFxuICAgICAgICAgICAgaWYgKHBhcmFtc1snbmEnXSkge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25Db25kaXRpb25WYWx1ZSA9IHtoYXZlOiB7dmFsdWVzOiBbcGFyYW1zWyduYSddXX19O1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5nZXRPbmUocGFyYW1zWyduYSddKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gY2FzdGluZyBzaG91bGQgZGlzYXBwZWFyIGFuZCBpbnN0ZWFkIHRoaXMgY2xhc3Mgc2hvdWxkIGVuZm9yY2VcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNlcnZpY2UgdG8gc3VwcG9ydCBUb25lIHdpdGggYSBuZXcgZ2VuZXJpY1xuICAgICAgICAgICAgICAgICAgICAoYW5jZXN0b3I6IEJyZWFkY3J1bWJJdGVtKSA9PiAodGhpcy5icmVhZGNydW1icyA9IHRoaXMuZ2V0QnJlYWRjcnVtYihhbmNlc3RvcikpLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNBbmNlc3RvckNoYW5nZWQgPSBwYXJhbXNbJ25hJ10gIT09IHRoaXMub2xkQW5jZXJ0b3JJZDtcbiAgICAgICAgICAgICAgICB0aGlzLm9sZEFuY2VydG9ySWQgPSBwYXJhbXNbJ25hJ107XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlYXJjaChoYXNBbmNlc3RvckNoYW5nZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uQ29uZGl0aW9uVmFsdWUgPSB7ZW1wdHk6IHt9fTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbjogTGl0ZXJhbCA9IHt9O1xuICAgICAgICAgICAgY29uZGl0aW9uW3RoaXMuYW5jZXN0b3JSZWxhdGlvbk5hbWVdID0gbmF2aWdhdGlvbkNvbmRpdGlvblZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyA9IHtmaWx0ZXI6IHtncm91cHM6IFt7Y29uZGl0aW9uczogW2NvbmRpdGlvbl19XX19O1xuXG4gICAgICAgICAgICAvLyB0b2RvIDogY2hlY2sgd2h5IHdpdGhvdXQgXCJhcyBWYWxsXCIgaXQgZXJyb3JzLiBWYWxsIGlzIHN1cHBvc2VkIHRvIGJlIFF1ZXJ5VmFyaWFibGVzLCBhbmQgZmlsdGVyIHRvby5cbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ25hdmlnYXRpb24nLCB2YXJpYWJsZXMgYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGF0YU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxQYWdpbmF0ZWREYXRhPE5hdmlnYWJsZUl0ZW08RXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+Pj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS53YXRjaEFsbCh0aGlzLnZhcmlhYmxlc01hbmFnZXIgYXMgdW5rbm93biBhcyBhbnkpLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE9uIGVhY2ggZGF0YSBhcnJpdmluZywgd2UgcXVlcnkgY2hpbGRyZW4gY291bnQgdG8gc2hvdy9oaWRlIGNoZXZyb25cbiAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2FibGVJdGVtczogTmF2aWdhYmxlSXRlbTxFeHRyYWN0VGFsbE9uZTxUU2VydmljZT4+W10gPSByZXN1bHQuaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2FibGVJdGVtOiBOYXZpZ2FibGVJdGVtPEV4dHJhY3RUYWxsT25lPFRTZXJ2aWNlPj4gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtIGFzIEV4dHJhY3RUYWxsT25lPFRTZXJ2aWNlPixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc05hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbjogTGl0ZXJhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25bdGhpcy5hbmNlc3RvclJlbGF0aW9uTmFtZV0gPSB7aGF2ZToge3ZhbHVlczogW2l0ZW0uaWRdfX07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgPSB7ZmlsdGVyOiB7Z3JvdXBzOiBbe2NvbmRpdGlvbnM6IFtjb25kaXRpb25dfV19fTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdm0gPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcigpO1xuICAgICAgICAgICAgICAgICAgICBxdm0uc2V0KCd2YXJpYWJsZXMnLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuY291bnQocXZtKS5zdWJzY3JpYmUoY291bnQgPT4gKG5hdmlnYWJsZUl0ZW0uaGFzTmF2aWdhdGlvbiA9IGNvdW50ID4gMCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuYXZpZ2FibGVJdGVtO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhYmxlUmVzdWx0OiBQYWdpbmF0ZWREYXRhPE5hdmlnYWJsZUl0ZW08RXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+Pj4gPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IG5hdmlnYWJsZUl0ZW1zLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmF2aWdhYmxlUmVzdWx0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlYXJjaEFuZFJlZnJlc2hMaXN0KG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk6IHZvaWQge1xuICAgICAgICAvLyBDbGVhciBuYXZpZ2F0aW9uIGZpbHRlciBpZiB0aGVyZSBpcyBhIHNlYXJjaFxuICAgICAgICBpZiAobmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMuc29tZShzID0+IHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnbmF2aWdhdGlvbicsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1icyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIudHJhbnNsYXRlU2VhcmNoQW5kUmVmcmVzaExpc3QobmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclNlYXJjaChyZXNldFBhZ2luYXRpb24gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMgPSBbW11dO1xuICAgICAgICBzdXBlci5zZWFyY2goW1tdXSwgdW5kZWZpbmVkLCByZXNldFBhZ2luYXRpb24pO1xuICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0SW5TdG9yYWdlKCducycsIG51bGwsIHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKFxuICAgICAgICBuYXR1cmFsU2VhcmNoU2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMsXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICAgICByZXNldFBhZ2luYXRpb24gPSB0cnVlLFxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0SW5VcmwoJ25hJywgbnVsbCwgdGhpcy5yb3V0ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBzdXBlci5zZWFyY2gobmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMsIG5hdmlnYXRpb25FeHRyYXMsIHJlc2V0UGFnaW5hdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbiBhcnJheSBmb3Igcm91dGVyIGxpbmsgdXNhZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2hpbGRMaW5rKGFuY2VzdG9yOiB7aWQ6IHN0cmluZ30gfCBudWxsKTogUm91dGVyTGlua1sncm91dGVyTGluayddIHtcbiAgICAgICAgaWYgKGFuY2VzdG9yICYmIGFuY2VzdG9yLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gWycuJywge25hOiBhbmNlc3Rvci5pZH1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsnLicsIHt9XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlcHRoIGlzIGxpbWl0ZWQgYnkgcXVlcmllc1xuICAgICAqIEBwYXJhbSBpdGVtIHdpdGggYW4gYW5jZXN0b3IgcmVsYXRpb24gKG11c3QgbWF0Y2ggYW5jZXN0b3JSZWxhdGlvbk5hbWUgYXR0cmlidXRlKVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRCcmVhZGNydW1iKGl0ZW06IEJyZWFkY3J1bWJJdGVtKTogQnJlYWRjcnVtYkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IGFuY2VzdG9yID0gaXRlbVt0aGlzLmFuY2VzdG9yUmVsYXRpb25OYW1lXTtcbiAgICAgICAgaWYgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCcmVhZGNydW1iKGFuY2VzdG9yKS5jb25jYXQoW2l0ZW1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbaXRlbV07XG4gICAgfVxufVxuIl19