nuxeo-development-framework 5.2.2 → 5.2.4

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 (373) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +7114 -714
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +48 -34
  4. package/esm2015/lib/components/dynamic-search/dynamic-search.module.js +5 -5
  5. package/esm2015/lib/components/ndf-datepicker/adapters/hijri-adapter.js +203 -0
  6. package/esm2015/lib/components/ndf-datepicker/adapters/index.js +3 -0
  7. package/esm2015/lib/components/ndf-datepicker/adapters/moment-adapter.js +186 -0
  8. package/esm2015/lib/components/ndf-datepicker/base/base-value-accessor.js +92 -0
  9. package/esm2015/lib/components/ndf-datepicker/base/index.js +2 -0
  10. package/esm2015/lib/components/ndf-datepicker/components/base-datepicker.js +37 -0
  11. package/esm2015/lib/components/ndf-datepicker/components/index.js +4 -0
  12. package/esm2015/lib/components/ndf-datepicker/components/input-date.component.js +110 -0
  13. package/esm2015/lib/components/ndf-datepicker/components/input-range-date.component.js +124 -0
  14. package/esm2015/lib/components/ndf-datepicker/constants/date-locale-keys.js +7 -0
  15. package/esm2015/lib/components/ndf-datepicker/constants/date-picker.js +2 -0
  16. package/esm2015/lib/components/ndf-datepicker/constants/date-type.js +5 -0
  17. package/esm2015/lib/components/ndf-datepicker/constants/formats.js +24 -0
  18. package/esm2015/lib/components/ndf-datepicker/constants/hijri-dates-names.js +117 -0
  19. package/esm2015/lib/components/ndf-datepicker/constants/index.js +6 -0
  20. package/esm2015/lib/components/ndf-datepicker/containers/datepicker-container.js +37 -0
  21. package/esm2015/lib/components/ndf-datepicker/containers/index.js +3 -0
  22. package/esm2015/lib/components/ndf-datepicker/containers/ndf-gregorian-datepicker.component.js +105 -0
  23. package/esm2015/lib/components/ndf-datepicker/containers/ndf-hijri-datepicker.component.js +112 -0
  24. package/esm2015/lib/components/ndf-datepicker/index.js +10 -0
  25. package/esm2015/lib/components/ndf-datepicker/models/data-types.js +2 -0
  26. package/esm2015/lib/components/ndf-datepicker/models/index.js +3 -0
  27. package/esm2015/lib/components/ndf-datepicker/models/value-object.js +2 -0
  28. package/esm2015/lib/components/ndf-datepicker/ndf-datepicker.component.js +198 -0
  29. package/esm2015/lib/components/ndf-datepicker/ndf-datepicker.module.js +66 -0
  30. package/esm2015/lib/components/ndf-datepicker/services/calendar.service.js +130 -0
  31. package/esm2015/lib/components/ndf-datepicker/services/index.js +3 -0
  32. package/esm2015/lib/components/ndf-datepicker/services/localize-state.service.js +41 -0
  33. package/esm2015/lib/components/no-data-found/index.js +3 -0
  34. package/esm2015/lib/components/no-data-found/no-data-found.component.js +33 -0
  35. package/esm2015/lib/components/no-data-found/no-data.module.js +19 -0
  36. package/esm2015/lib/components/notifications/models/common.js +1 -1
  37. package/esm2015/lib/components/{dynamic-table → tables/dynamic-table}/directives/empty-state.directive.js +1 -1
  38. package/esm2015/lib/components/tables/dynamic-table/dynamic-table/dynamic-table.component.js +353 -0
  39. package/esm2015/lib/components/tables/dynamic-table/dynamic-table.module.js +51 -0
  40. package/esm2015/lib/components/tables/dynamic-table/index.js +2 -0
  41. package/esm2015/lib/components/tables/dynamic-table/public-api.js +5 -0
  42. package/esm2015/lib/components/tables/dynamic-table/services/dynamic-table.service.js +16 -0
  43. package/esm2015/lib/components/{dynamic-table → tables}/index.js +1 -1
  44. package/esm2015/lib/components/tables/ndf-table/components/index.js +6 -0
  45. package/esm2015/lib/components/tables/ndf-table/components/mode-toggler/mode-toggler.component.js +45 -0
  46. package/esm2015/lib/components/tables/ndf-table/components/sorting-list/sorting-list.component.js +42 -0
  47. package/esm2015/lib/components/tables/ndf-table/components/table-columns-toggler/table-columns-toggler.component.js +123 -0
  48. package/esm2015/lib/components/tables/ndf-table/components/table-export/table-export.component.js +41 -0
  49. package/esm2015/lib/components/tables/ndf-table/components/text-search/text-search.component.js +74 -0
  50. package/esm2015/lib/components/tables/ndf-table/constants/index.js +2 -0
  51. package/esm2015/lib/components/tables/ndf-table/constants/sizes.js +19 -0
  52. package/esm2015/lib/components/tables/ndf-table/containers/index.js +2 -0
  53. package/esm2015/lib/components/tables/ndf-table/containers/ndf-table/ndf-table.component.js +404 -0
  54. package/esm2015/lib/components/tables/ndf-table/directives/actions.directive.js +28 -0
  55. package/esm2015/lib/components/tables/ndf-table/directives/filter-custom.directive.js +28 -0
  56. package/esm2015/lib/components/tables/ndf-table/directives/fluid-height.directive.js +112 -0
  57. package/esm2015/lib/components/tables/ndf-table/directives/index.js +5 -0
  58. package/esm2015/lib/components/tables/ndf-table/directives/search.directive.js +28 -0
  59. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-aggregation-field.component.js +91 -0
  60. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-checkbox-radio.component.js +66 -0
  61. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-custom-field.component.js +46 -0
  62. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-predicate-field.component.js +43 -0
  63. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-value-accessor.component.js +34 -0
  64. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/index.js +6 -0
  65. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/field-header.component.js +36 -0
  66. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-autocomplete-input/filter-autocomplete-input.component.js +97 -0
  67. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-autocomplete-input/filter-autocomplete.service.js +43 -0
  68. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-collapse-control/filter-collapse-control.component.js +44 -0
  69. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-date-range/filter-date-range.component.js +89 -0
  70. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-empty-message.component.js +30 -0
  71. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-option-text/filter-option-text.component.js +33 -0
  72. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-options-sort/filter-options-sort.component.js +34 -0
  73. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-search-input/filter-search-input.component.js +36 -0
  74. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/html-dialog/html-dialog.component.js +34 -0
  75. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/index.js +10 -0
  76. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-autocomplete/aggregation-autocomplete.component.js +109 -0
  77. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-checkbox/aggregation-checkbox.component.js +65 -0
  78. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-custom/aggregation-custom.component.js +66 -0
  79. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-date-list/aggregation-date-list.component.js +219 -0
  80. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-radio/aggregation-radio.component.js +68 -0
  81. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-select/aggregation-select.component.js +83 -0
  82. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-switch/aggregation-switch.component.js +71 -0
  83. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/index.js +11 -0
  84. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/predicate-date-input/predicate-date-input.component.js +146 -0
  85. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/predicate-text-input/predicate-text-input.component.js +144 -0
  86. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/common.js +4 -0
  87. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/field.js +6 -0
  88. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/index.js +5 -0
  89. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/operators.js +18 -0
  90. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/sort.js +23 -0
  91. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/type.js +26 -0
  92. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/aggregation-field/aggregation-field.component.js +78 -0
  93. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/base-field.js +62 -0
  94. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/custom-field/custom-field.component.js +73 -0
  95. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/filters-panel/base-filters-panel.js +55 -0
  96. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/filters-panel/filters-panel.component.js +122 -0
  97. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/index.js +5 -0
  98. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/predicate-field/predicate-field.component.js +71 -0
  99. package/esm2015/lib/components/tables/ndf-table/filters-panel/custom-components/active-user-switch/active-user-switch.component.js +55 -0
  100. package/esm2015/lib/components/tables/ndf-table/filters-panel/custom-components/active-user-switch/active-user.service.js +17 -0
  101. package/esm2015/lib/components/tables/ndf-table/filters-panel/custom-components/active-user-switch/user-types.js +2 -0
  102. package/esm2015/lib/components/tables/ndf-table/filters-panel/custom-components/index.js +2 -0
  103. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/autocomplete-template.directive.js +28 -0
  104. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/checkbox-template.directive.js +28 -0
  105. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/custom-template.directive.js +28 -0
  106. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/date-template.directive.js +28 -0
  107. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/dropdown-label-template.directive.js +53 -0
  108. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/dropdown-template.directive.js +28 -0
  109. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/index.js +9 -0
  110. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/radio-template.directive.js +28 -0
  111. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/switch-template.directive.js +28 -0
  112. package/esm2015/lib/components/tables/ndf-table/filters-panel/filters-panel.module.js +205 -0
  113. package/esm2015/lib/components/tables/ndf-table/filters-panel/index.js +12 -0
  114. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/aggregation-field-config.js +2 -0
  115. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/aggregation-response.model.js +2 -0
  116. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/base-field-config.js +2 -0
  117. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/common.js +2 -0
  118. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/custom-field-config.js +2 -0
  119. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-config.model.js +2 -0
  120. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/autocomplete-options.js +2 -0
  121. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/checkbox-options.js +2 -0
  122. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/common-utils.js +2 -0
  123. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/custom-fields-options.js +2 -0
  124. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/custom-options.js +2 -0
  125. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/date-list-options.js +2 -0
  126. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/date-options.js +2 -0
  127. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/dropdown-options.js +2 -0
  128. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/index.js +12 -0
  129. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/input-options.js +2 -0
  130. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/radio-options.js +2 -0
  131. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/switch-options.js +2 -0
  132. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/filter-option.model.js +2 -0
  133. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/form-query-request.js +2 -0
  134. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/index.js +13 -0
  135. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/predicate-field-config.js +2 -0
  136. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/types-helper.js +2 -0
  137. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/value-object.model.js +12 -0
  138. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/autocomplete-filter.pipe.js +27 -0
  139. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/filter.pipe.js +27 -0
  140. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/hash-translate.pipe.js +52 -0
  141. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/index.js +9 -0
  142. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/localized-label.pipe.js +28 -0
  143. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/roles-filters.pipe.js +31 -0
  144. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/sanitizer.pipe.js +34 -0
  145. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/sort.pipe.js +40 -0
  146. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/tooltip.pipe.js +69 -0
  147. package/esm2015/lib/components/tables/ndf-table/filters-panel/services/aggregation-field.service.js +105 -0
  148. package/esm2015/lib/components/tables/ndf-table/filters-panel/services/dynamic-component-loader.service.js +59 -0
  149. package/esm2015/lib/components/tables/ndf-table/filters-panel/services/filters-query.service.js +117 -0
  150. package/esm2015/lib/components/tables/ndf-table/filters-panel/services/index.js +5 -0
  151. package/esm2015/lib/components/tables/ndf-table/filters-panel/services/ndf-transform.service.js +80 -0
  152. package/esm2015/lib/components/tables/ndf-table/filters-panel/utility/index.js +3 -0
  153. package/esm2015/lib/components/tables/ndf-table/filters-panel/utility/nxql.js +47 -0
  154. package/esm2015/lib/components/tables/ndf-table/filters-panel/utility/object.js +42 -0
  155. package/esm2015/lib/components/tables/ndf-table/index.js +2 -0
  156. package/esm2015/lib/components/tables/ndf-table/models/index.js +8 -0
  157. package/esm2015/lib/components/tables/ndf-table/models/payload-types.js +2 -0
  158. package/esm2015/lib/components/tables/ndf-table/models/search.config.js +2 -0
  159. package/esm2015/lib/components/tables/ndf-table/models/table-column.js +2 -0
  160. package/esm2015/lib/components/tables/ndf-table/models/table-config.js +2 -0
  161. package/esm2015/lib/components/tables/ndf-table/models/table-mode.js +2 -0
  162. package/esm2015/lib/components/tables/ndf-table/models/table-options.js +2 -0
  163. package/esm2015/lib/components/tables/ndf-table/models/types.js +2 -0
  164. package/esm2015/lib/components/tables/ndf-table/ndf-table.module.js +104 -0
  165. package/esm2015/lib/components/tables/ndf-table/public-api.js +8 -0
  166. package/esm2015/lib/components/tables/ndf-table/services/filters-mapper.service.js +60 -0
  167. package/esm2015/lib/components/tables/ndf-table/services/index.js +3 -0
  168. package/esm2015/lib/components/tables/ndf-table/services/ndf-table.service.js +27 -0
  169. package/esm2015/lib/components/tables/ndf-table/utils/index.js +2 -0
  170. package/esm2015/lib/components/tables/ndf-table/utils/nxql-query.js +52 -0
  171. package/esm2015/lib/components/tables/public-api.js +4 -0
  172. package/esm2015/lib/components/tables/table/dynamic-column/dynamic-column.component.js +68 -0
  173. package/esm2015/lib/components/tables/table/dynamic-component.js +59 -0
  174. package/esm2015/lib/components/tables/table/index.js +2 -0
  175. package/esm2015/lib/components/{table → tables/table}/page-sizes-list/page-sizes-list.component.js +1 -1
  176. package/esm2015/lib/components/tables/table/public-api.js +6 -0
  177. package/esm2015/lib/components/tables/table/table/table.component.js +302 -0
  178. package/esm2015/lib/components/tables/table/table.module.js +69 -0
  179. package/esm2015/lib/core/services/index.js +3 -0
  180. package/esm2015/lib/shared/models/index.js +2 -1
  181. package/esm2015/lib/shared/models/types-helper.js +2 -0
  182. package/esm2015/public-api.js +4 -7
  183. package/fesm2015/nuxeo-development-framework.js +6335 -554
  184. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  185. package/lib/components/dynamic-search/dynamic-search/dynamic-search.component.d.ts +1 -1
  186. package/lib/components/dynamic-search/dynamic-search.module.d.ts +1 -1
  187. package/lib/components/ndf-datepicker/adapters/hijri-adapter.d.ts +35 -0
  188. package/lib/components/ndf-datepicker/adapters/index.d.ts +2 -0
  189. package/lib/components/ndf-datepicker/adapters/moment-adapter.d.ts +50 -0
  190. package/lib/components/ndf-datepicker/base/base-value-accessor.d.ts +38 -0
  191. package/lib/components/ndf-datepicker/base/index.d.ts +1 -0
  192. package/lib/components/ndf-datepicker/components/base-datepicker.d.ts +13 -0
  193. package/lib/components/ndf-datepicker/components/index.d.ts +3 -0
  194. package/lib/components/ndf-datepicker/components/input-date.component.d.ts +19 -0
  195. package/lib/components/ndf-datepicker/components/input-range-date.component.d.ts +19 -0
  196. package/lib/components/ndf-datepicker/constants/date-locale-keys.d.ts +6 -0
  197. package/lib/components/ndf-datepicker/constants/date-picker.d.ts +1 -0
  198. package/lib/components/ndf-datepicker/constants/date-type.d.ts +4 -0
  199. package/lib/components/ndf-datepicker/constants/formats.d.ts +5 -0
  200. package/lib/components/ndf-datepicker/constants/hijri-dates-names.d.ts +12 -0
  201. package/lib/components/ndf-datepicker/constants/index.d.ts +5 -0
  202. package/lib/components/ndf-datepicker/containers/datepicker-container.d.ts +15 -0
  203. package/lib/components/ndf-datepicker/containers/index.d.ts +2 -0
  204. package/lib/components/ndf-datepicker/containers/ndf-gregorian-datepicker.component.d.ts +10 -0
  205. package/lib/components/ndf-datepicker/containers/ndf-hijri-datepicker.component.d.ts +10 -0
  206. package/lib/components/ndf-datepicker/index.d.ts +9 -0
  207. package/lib/components/ndf-datepicker/models/data-types.d.ts +11 -0
  208. package/lib/components/ndf-datepicker/models/index.d.ts +2 -0
  209. package/lib/components/ndf-datepicker/models/value-object.d.ts +8 -0
  210. package/lib/components/ndf-datepicker/ndf-datepicker.component.d.ts +42 -0
  211. package/lib/components/ndf-datepicker/ndf-datepicker.module.d.ts +20 -0
  212. package/lib/components/ndf-datepicker/services/calendar.service.d.ts +33 -0
  213. package/lib/components/ndf-datepicker/services/index.d.ts +2 -0
  214. package/lib/components/ndf-datepicker/services/localize-state.service.d.ts +34 -0
  215. package/lib/components/no-data-found/index.d.ts +2 -0
  216. package/lib/components/no-data-found/no-data-found.component.d.ts +8 -0
  217. package/lib/components/no-data-found/no-data.module.d.ts +9 -0
  218. package/lib/components/notifications/models/common.d.ts +0 -1
  219. package/lib/components/{dynamic-table → tables/dynamic-table}/dynamic-table/dynamic-table.component.d.ts +7 -3
  220. package/lib/components/{dynamic-table → tables/dynamic-table}/dynamic-table.module.d.ts +3 -3
  221. package/lib/components/tables/index.d.ts +1 -0
  222. package/lib/components/tables/ndf-table/components/index.d.ts +5 -0
  223. package/lib/components/tables/ndf-table/components/mode-toggler/mode-toggler.component.d.ts +13 -0
  224. package/lib/components/tables/ndf-table/components/sorting-list/sorting-list.component.d.ts +12 -0
  225. package/lib/components/tables/ndf-table/components/table-columns-toggler/table-columns-toggler.component.d.ts +35 -0
  226. package/lib/components/tables/ndf-table/components/table-export/table-export.component.d.ts +13 -0
  227. package/lib/components/tables/ndf-table/components/text-search/text-search.component.d.ts +21 -0
  228. package/lib/components/tables/ndf-table/constants/index.d.ts +1 -0
  229. package/lib/components/tables/ndf-table/constants/sizes.d.ts +4 -0
  230. package/lib/components/tables/ndf-table/containers/index.d.ts +1 -0
  231. package/lib/components/tables/ndf-table/containers/ndf-table/ndf-table.component.d.ts +119 -0
  232. package/lib/components/tables/ndf-table/directives/actions.directive.d.ts +9 -0
  233. package/lib/components/tables/ndf-table/directives/filter-custom.directive.d.ts +9 -0
  234. package/lib/components/tables/ndf-table/directives/fluid-height.directive.d.ts +36 -0
  235. package/lib/components/tables/ndf-table/directives/index.d.ts +4 -0
  236. package/lib/components/tables/ndf-table/directives/search.directive.d.ts +9 -0
  237. package/lib/components/tables/ndf-table/filters-panel/base/base-aggregation-field.component.d.ts +35 -0
  238. package/lib/components/tables/ndf-table/filters-panel/base/base-checkbox-radio.component.d.ts +22 -0
  239. package/lib/components/tables/ndf-table/filters-panel/base/base-custom-field.component.d.ts +19 -0
  240. package/lib/components/tables/ndf-table/filters-panel/base/base-predicate-field.component.d.ts +15 -0
  241. package/lib/components/tables/ndf-table/filters-panel/base/base-value-accessor.component.d.ts +20 -0
  242. package/lib/components/tables/ndf-table/filters-panel/base/index.d.ts +5 -0
  243. package/lib/components/tables/ndf-table/filters-panel/components/__parts/field-header.component.d.ts +5 -0
  244. package/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-autocomplete-input/filter-autocomplete-input.component.d.ts +35 -0
  245. package/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-autocomplete-input/filter-autocomplete.service.d.ts +13 -0
  246. package/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-collapse-control/filter-collapse-control.component.d.ts +12 -0
  247. package/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-date-range/filter-date-range.component.d.ts +16 -0
  248. package/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-empty-message.component.d.ts +6 -0
  249. package/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-option-text/filter-option-text.component.d.ts +9 -0
  250. package/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-options-sort/filter-options-sort.component.d.ts +11 -0
  251. package/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-search-input/filter-search-input.component.d.ts +10 -0
  252. package/lib/components/tables/ndf-table/filters-panel/components/__parts/html-dialog/html-dialog.component.d.ts +10 -0
  253. package/lib/components/tables/ndf-table/filters-panel/components/__parts/index.d.ts +9 -0
  254. package/lib/components/tables/ndf-table/filters-panel/components/aggregation-autocomplete/aggregation-autocomplete.component.d.ts +20 -0
  255. package/lib/components/tables/ndf-table/filters-panel/components/aggregation-checkbox/aggregation-checkbox.component.d.ts +10 -0
  256. package/lib/components/tables/ndf-table/filters-panel/components/aggregation-custom/aggregation-custom.component.d.ts +9 -0
  257. package/lib/components/tables/ndf-table/filters-panel/components/aggregation-date-list/aggregation-date-list.component.d.ts +41 -0
  258. package/lib/components/tables/ndf-table/filters-panel/components/aggregation-radio/aggregation-radio.component.d.ts +11 -0
  259. package/lib/components/tables/ndf-table/filters-panel/components/aggregation-select/aggregation-select.component.d.ts +14 -0
  260. package/lib/components/tables/ndf-table/filters-panel/components/aggregation-switch/aggregation-switch.component.d.ts +11 -0
  261. package/lib/components/tables/ndf-table/filters-panel/components/index.d.ts +10 -0
  262. package/lib/components/tables/ndf-table/filters-panel/components/predicate-date-input/predicate-date-input.component.d.ts +25 -0
  263. package/lib/components/tables/ndf-table/filters-panel/components/predicate-text-input/predicate-text-input.component.d.ts +40 -0
  264. package/lib/components/tables/ndf-table/filters-panel/constants/common.d.ts +3 -0
  265. package/lib/components/tables/ndf-table/filters-panel/constants/field.d.ts +5 -0
  266. package/lib/components/tables/ndf-table/filters-panel/constants/index.d.ts +4 -0
  267. package/lib/components/tables/ndf-table/filters-panel/constants/operators.d.ts +17 -0
  268. package/lib/components/tables/ndf-table/filters-panel/constants/sort.d.ts +2 -0
  269. package/lib/components/tables/ndf-table/filters-panel/constants/type.d.ts +25 -0
  270. package/lib/components/tables/ndf-table/filters-panel/containers/aggregation-field/aggregation-field.component.d.ts +13 -0
  271. package/lib/components/tables/ndf-table/filters-panel/containers/base-field.d.ts +21 -0
  272. package/lib/components/tables/ndf-table/filters-panel/containers/custom-field/custom-field.component.d.ts +13 -0
  273. package/lib/components/tables/ndf-table/filters-panel/containers/filters-panel/base-filters-panel.d.ts +19 -0
  274. package/lib/components/tables/ndf-table/filters-panel/containers/filters-panel/filters-panel.component.d.ts +48 -0
  275. package/lib/components/tables/ndf-table/filters-panel/containers/index.d.ts +4 -0
  276. package/lib/components/tables/ndf-table/filters-panel/containers/predicate-field/predicate-field.component.d.ts +12 -0
  277. package/lib/components/tables/ndf-table/filters-panel/custom-components/active-user-switch/active-user-switch.component.d.ts +14 -0
  278. package/lib/components/tables/ndf-table/filters-panel/custom-components/active-user-switch/active-user.service.d.ts +8 -0
  279. package/lib/components/tables/ndf-table/filters-panel/custom-components/active-user-switch/user-types.d.ts +29 -0
  280. package/lib/components/tables/ndf-table/filters-panel/custom-components/index.d.ts +1 -0
  281. package/lib/components/tables/ndf-table/filters-panel/directives/autocomplete-template.directive.d.ts +9 -0
  282. package/lib/components/tables/ndf-table/filters-panel/directives/checkbox-template.directive.d.ts +9 -0
  283. package/lib/components/tables/ndf-table/filters-panel/directives/custom-template.directive.d.ts +9 -0
  284. package/lib/components/tables/ndf-table/filters-panel/directives/date-template.directive.d.ts +9 -0
  285. package/lib/components/tables/ndf-table/filters-panel/directives/dropdown-label-template.directive.d.ts +16 -0
  286. package/lib/components/tables/ndf-table/filters-panel/directives/dropdown-template.directive.d.ts +9 -0
  287. package/lib/components/tables/ndf-table/filters-panel/directives/index.d.ts +8 -0
  288. package/lib/components/tables/ndf-table/filters-panel/directives/radio-template.directive.d.ts +9 -0
  289. package/lib/components/tables/ndf-table/filters-panel/directives/switch-template.directive.d.ts +9 -0
  290. package/lib/components/tables/ndf-table/filters-panel/filters-panel.module.d.ts +65 -0
  291. package/lib/components/tables/ndf-table/filters-panel/index.d.ts +11 -0
  292. package/lib/components/tables/ndf-table/filters-panel/models/aggregation-field-config.d.ts +42 -0
  293. package/lib/components/tables/ndf-table/filters-panel/models/aggregation-response.model.d.ts +20 -0
  294. package/lib/components/tables/ndf-table/filters-panel/models/base-field-config.d.ts +13 -0
  295. package/lib/components/tables/ndf-table/filters-panel/models/common.d.ts +5 -0
  296. package/lib/components/tables/ndf-table/filters-panel/models/custom-field-config.d.ts +7 -0
  297. package/lib/components/tables/ndf-table/filters-panel/models/field-config.model.d.ts +14 -0
  298. package/lib/components/tables/ndf-table/filters-panel/models/field-options/autocomplete-options.d.ts +6 -0
  299. package/lib/components/tables/ndf-table/filters-panel/models/field-options/checkbox-options.d.ts +6 -0
  300. package/lib/components/tables/ndf-table/filters-panel/models/field-options/common-utils.d.ts +35 -0
  301. package/lib/components/tables/ndf-table/filters-panel/models/field-options/custom-fields-options.d.ts +9 -0
  302. package/lib/components/tables/ndf-table/filters-panel/models/field-options/custom-options.d.ts +5 -0
  303. package/lib/components/tables/ndf-table/filters-panel/models/field-options/date-list-options.d.ts +10 -0
  304. package/lib/components/tables/ndf-table/filters-panel/models/field-options/date-options.d.ts +22 -0
  305. package/lib/components/tables/ndf-table/filters-panel/models/field-options/dropdown-options.d.ts +6 -0
  306. package/lib/components/tables/ndf-table/filters-panel/models/field-options/index.d.ts +11 -0
  307. package/lib/components/tables/ndf-table/filters-panel/models/field-options/input-options.d.ts +40 -0
  308. package/lib/components/tables/ndf-table/filters-panel/models/field-options/radio-options.d.ts +6 -0
  309. package/lib/components/tables/ndf-table/filters-panel/models/field-options/switch-options.d.ts +6 -0
  310. package/lib/components/tables/ndf-table/filters-panel/models/filter-option.model.d.ts +13 -0
  311. package/lib/components/tables/ndf-table/filters-panel/models/form-query-request.d.ts +5 -0
  312. package/lib/components/tables/ndf-table/filters-panel/models/index.d.ts +12 -0
  313. package/lib/components/tables/ndf-table/filters-panel/models/predicate-field-config.d.ts +7 -0
  314. package/lib/components/tables/ndf-table/filters-panel/models/types-helper.d.ts +47 -0
  315. package/lib/components/tables/ndf-table/filters-panel/models/value-object.model.d.ts +18 -0
  316. package/lib/components/tables/ndf-table/filters-panel/pipes/autocomplete-filter.pipe.d.ts +11 -0
  317. package/lib/components/tables/ndf-table/filters-panel/pipes/filter.pipe.d.ts +11 -0
  318. package/lib/components/tables/ndf-table/filters-panel/pipes/hash-translate.pipe.d.ts +18 -0
  319. package/lib/components/tables/ndf-table/filters-panel/pipes/index.d.ts +8 -0
  320. package/lib/components/tables/ndf-table/filters-panel/pipes/localized-label.pipe.d.ts +14 -0
  321. package/lib/components/tables/ndf-table/filters-panel/pipes/roles-filters.pipe.d.ts +12 -0
  322. package/lib/components/tables/ndf-table/filters-panel/pipes/sanitizer.pipe.d.ts +10 -0
  323. package/lib/components/tables/ndf-table/filters-panel/pipes/sort.pipe.d.ts +11 -0
  324. package/lib/components/tables/ndf-table/filters-panel/pipes/tooltip.pipe.d.ts +21 -0
  325. package/lib/components/tables/ndf-table/filters-panel/services/aggregation-field.service.d.ts +16 -0
  326. package/lib/components/tables/ndf-table/filters-panel/services/dynamic-component-loader.service.d.ts +18 -0
  327. package/lib/components/tables/ndf-table/filters-panel/services/filters-query.service.d.ts +58 -0
  328. package/lib/components/tables/ndf-table/filters-panel/services/index.d.ts +4 -0
  329. package/lib/components/tables/ndf-table/filters-panel/services/ndf-transform.service.d.ts +55 -0
  330. package/lib/components/tables/ndf-table/filters-panel/utility/index.d.ts +2 -0
  331. package/lib/components/tables/ndf-table/filters-panel/utility/nxql.d.ts +19 -0
  332. package/lib/components/tables/ndf-table/filters-panel/utility/object.d.ts +7 -0
  333. package/lib/components/tables/ndf-table/index.d.ts +1 -0
  334. package/lib/components/tables/ndf-table/models/index.d.ts +7 -0
  335. package/lib/components/tables/ndf-table/models/payload-types.d.ts +28 -0
  336. package/lib/components/tables/ndf-table/models/search.config.d.ts +13 -0
  337. package/lib/components/tables/ndf-table/models/table-column.d.ts +34 -0
  338. package/lib/components/tables/ndf-table/models/table-config.d.ts +45 -0
  339. package/lib/components/tables/ndf-table/models/table-mode.d.ts +25 -0
  340. package/lib/components/tables/ndf-table/models/table-options.d.ts +54 -0
  341. package/lib/components/tables/ndf-table/models/types.d.ts +38 -0
  342. package/lib/components/tables/ndf-table/ndf-table.module.d.ts +32 -0
  343. package/lib/components/tables/ndf-table/public-api.d.ts +7 -0
  344. package/lib/components/tables/ndf-table/services/filters-mapper.service.d.ts +17 -0
  345. package/lib/components/tables/ndf-table/services/index.d.ts +2 -0
  346. package/lib/components/tables/ndf-table/services/ndf-table.service.d.ts +10 -0
  347. package/lib/components/tables/ndf-table/utils/index.d.ts +1 -0
  348. package/lib/components/tables/ndf-table/utils/nxql-query.d.ts +10 -0
  349. package/lib/components/tables/public-api.d.ts +3 -0
  350. package/lib/components/{table → tables/table}/dynamic-column/dynamic-column.component.d.ts +1 -1
  351. package/lib/components/{table → tables/table}/dynamic-component.d.ts +1 -1
  352. package/lib/components/tables/table/index.d.ts +1 -0
  353. package/lib/components/tables/table/public-api.d.ts +5 -0
  354. package/lib/components/{table → tables/table}/table/table.component.d.ts +6 -5
  355. package/lib/components/{table → tables/table}/table.module.d.ts +3 -3
  356. package/lib/core/services/index.d.ts +2 -0
  357. package/lib/shared/models/index.d.ts +1 -0
  358. package/lib/shared/models/types-helper.d.ts +1 -0
  359. package/package.json +3 -2
  360. package/public-api.d.ts +3 -6
  361. package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +0 -349
  362. package/esm2015/lib/components/dynamic-table/dynamic-table.module.js +0 -51
  363. package/esm2015/lib/components/dynamic-table/public-api.js +0 -5
  364. package/esm2015/lib/components/dynamic-table/services/dynamic-table.service.js +0 -16
  365. package/esm2015/lib/components/table/dynamic-column/dynamic-column.component.js +0 -68
  366. package/esm2015/lib/components/table/dynamic-component.js +0 -59
  367. package/esm2015/lib/components/table/table/table.component.js +0 -300
  368. package/esm2015/lib/components/table/table.module.js +0 -69
  369. /package/lib/components/{dynamic-table → tables/dynamic-table}/directives/empty-state.directive.d.ts +0 -0
  370. /package/lib/components/{dynamic-table → tables/dynamic-table}/index.d.ts +0 -0
  371. /package/lib/components/{dynamic-table → tables/dynamic-table}/public-api.d.ts +0 -0
  372. /package/lib/components/{dynamic-table → tables/dynamic-table}/services/dynamic-table.service.d.ts +0 -0
  373. /package/lib/components/{table → tables/table}/page-sizes-list/page-sizes-list.component.d.ts +0 -0
@@ -0,0 +1,109 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChild, forwardRef, TemplateRef, ViewEncapsulation } from '@angular/core';
2
+ import { FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { combineLatest, ReplaySubject, Subject } from 'rxjs';
4
+ import { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';
5
+ import { BaseAggregationField } from '../../base';
6
+ import { AUTOCOMPLETE_TEMPLATE } from '../../directives';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../__parts/field-header.component";
9
+ import * as i2 from "@angular/material/autocomplete";
10
+ import * as i3 from "@angular/material/core";
11
+ import * as i4 from "../__parts/filter-option-text/filter-option-text.component";
12
+ import * as i5 from "@angular/common";
13
+ import * as i6 from "@angular/forms";
14
+ import * as i7 from "@angular/cdk/bidi";
15
+ import * as i8 from "@ngx-translate/core";
16
+ import * as i9 from "../../pipes/autocomplete-filter.pipe";
17
+ export class AggregationAutocompleteComponent extends BaseAggregationField {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.internalValue = new FormControl('');
21
+ this.selectedValueSub = new Subject();
22
+ this._valueSub = new ReplaySubject();
23
+ this.displayFn = (value) => {
24
+ if (!value || typeof value === 'string')
25
+ return value;
26
+ if (value === null || value === void 0 ? void 0 : value.localizedLabel) {
27
+ return value.localizedLabel[this.language];
28
+ }
29
+ return this.translateService.instant(value.label);
30
+ };
31
+ }
32
+ writeValue(obj) {
33
+ if (obj) {
34
+ this._valueSub.next(obj);
35
+ }
36
+ else if (this._isFieldDirty) {
37
+ this._valueSub.next(null);
38
+ this._isFieldDirty = false;
39
+ }
40
+ }
41
+ ngOnInit() {
42
+ this._initValue();
43
+ this._updateValueListener();
44
+ this._changeValueListener();
45
+ }
46
+ _initValue() {
47
+ combineLatest([this._valueSub, this._optionsSub])
48
+ .pipe(filter(([value, items]) => !!value && !!(items === null || items === void 0 ? void 0 : items.length)), takeUntil(this.destroy$))
49
+ .subscribe(([value, items]) => {
50
+ const object = items.find((obj) => obj.value === value);
51
+ this.internalValue.setValue(object || value);
52
+ });
53
+ }
54
+ _changeValueListener() {
55
+ this.internalValue.valueChanges
56
+ .pipe(distinctUntilChanged(), debounceTime(200), takeUntil(this.destroy$))
57
+ .subscribe((obj) => {
58
+ this.selectedValueSub.next(!obj || typeof obj === 'string' ? obj : obj.value);
59
+ });
60
+ }
61
+ _updateValueListener() {
62
+ this.selectedValueSub.pipe(takeUntil(this.destroy$)).subscribe((value) => {
63
+ this._isFieldDirty = !!value;
64
+ this.onChange(this._isValueObject() ? this._prepareValueObject(value) : value);
65
+ });
66
+ }
67
+ }
68
+ AggregationAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
69
+ AggregationAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AggregationAutocompleteComponent, selector: "app-aggregation-autocomplete", host: { classAttribute: "filter-autocomplete" }, providers: [
70
+ {
71
+ provide: NG_VALUE_ACCESSOR,
72
+ useExisting: forwardRef(() => AggregationAutocompleteComponent),
73
+ multi: true
74
+ },
75
+ {
76
+ provide: NG_VALIDATORS,
77
+ useExisting: forwardRef(() => AggregationAutocompleteComponent),
78
+ multi: true
79
+ }
80
+ ], queries: [{ propertyName: "autocompleteTemplate", first: true, predicate: AUTOCOMPLETE_TEMPLATE, descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"options$ | async as options\">\r\n\t<field-header *ngIf=\"fieldConfig.label && !renderOptions?.hideLabel\" class=\"filter-autocomplete__label\">{{\r\n\t\tfieldConfig.label | translate\r\n\t}}</field-header>\r\n\r\n\t<div class=\"filter-autocomplete__wrapper\">\r\n\t\t<input\r\n\t\t\ttype=\"text\"\r\n\t\t\t[matAutocomplete]=\"autocomplete\"\r\n\t\t\tclass=\"filter-autocomplete__input form-control\"\r\n\t\t\t[dir]=\"direction\"\r\n\t\t\t[formControl]=\"internalValue\"\r\n\t\t/>\r\n\t</div>\r\n\r\n\t<mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n\t\t<mat-option\r\n\t\t\t*ngFor=\"let option of options | autocomplete : internalValue.value\"\r\n\t\t\t[value]=\"option\"\r\n\t\t>\r\n\t\t\t<ng-container\r\n\t\t\t\t[ngTemplateOutlet]=\"contentTemplate || defaultTemplate\"\r\n\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: option, fieldConfig, aggregation }\"\r\n\t\t\t></ng-container>\r\n\r\n\t\t\t<ng-template #defaultTemplate>\r\n\t\t\t\t<filter-option-text\r\n\t\t\t\t\t[option]=\"option\"\r\n\t\t\t\t\t[language]=\"language\"\r\n\t\t\t\t\t[showCount]=\"renderOptions?.showTotal\"\r\n\t\t\t\t></filter-option-text>\r\n\t\t\t</ng-template>\r\n\t\t</mat-option>\r\n\t</mat-autocomplete>\r\n</ng-container>\r\n", styles: [".filter-autocomplete{display:var(--fa-autocomplete-display, block)}.filter-autocomplete__wrapper{margin-inline:var(--fa-autocomplete-margin-inline, .5rem);margin-block:var(--fa-autocomplete-margin-block, 0)}\n"], components: [{ type: i1.FieldHeaderComponent, selector: "field-header" }, { type: i2.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i4.FilterOptionTextComponent, selector: "filter-option-text", inputs: ["option", "showCount", "language"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i5.AsyncPipe, "translate": i8.TranslatePipe, "autocomplete": i9.AutocompleteFilterPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationAutocompleteComponent, decorators: [{
82
+ type: Component,
83
+ args: [{
84
+ selector: 'app-aggregation-autocomplete',
85
+ templateUrl: './aggregation-autocomplete.component.html',
86
+ styleUrls: ['./aggregation-autocomplete.component.scss'],
87
+ encapsulation: ViewEncapsulation.None,
88
+ changeDetection: ChangeDetectionStrategy.OnPush,
89
+ providers: [
90
+ {
91
+ provide: NG_VALUE_ACCESSOR,
92
+ useExisting: forwardRef(() => AggregationAutocompleteComponent),
93
+ multi: true
94
+ },
95
+ {
96
+ provide: NG_VALIDATORS,
97
+ useExisting: forwardRef(() => AggregationAutocompleteComponent),
98
+ multi: true
99
+ }
100
+ ],
101
+ host: {
102
+ class: 'filter-autocomplete'
103
+ }
104
+ }]
105
+ }], propDecorators: { autocompleteTemplate: [{
106
+ type: ContentChild,
107
+ args: [AUTOCOMPLETE_TEMPLATE, { read: TemplateRef, static: true }]
108
+ }] } });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL25kZi10YWJsZS9maWx0ZXJzLXBhbmVsL2NvbXBvbmVudHMvYWdncmVnYXRpb24tYXV0b2NvbXBsZXRlL2FnZ3JlZ2F0aW9uLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9uZGYtdGFibGUvZmlsdGVycy1wYW5lbC9jb21wb25lbnRzL2FnZ3JlZ2F0aW9uLWF1dG9jb21wbGV0ZS9hZ2dyZWdhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFFVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7QUF3QnpE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RCxJQUFJLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLHFCQUFxQjtxQkFDNUI7aUJBQ0Q7OEJBR0Esb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuXHRDb21wb25lbnQsXHJcblx0Q29udGVudENoaWxkLFxyXG5cdGZvcndhcmRSZWYsXHJcblx0T25Jbml0LFxyXG5cdFRlbXBsYXRlUmVmLFxyXG5cdFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUFnZ3JlZ2F0aW9uRmllbGQgfSBmcm9tICcuLi8uLi9iYXNlJztcclxuaW1wb3J0IHsgQVVUT0NPTVBMRVRFX1RFTVBMQVRFIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IEZpbHRlck9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWFnZ3JlZ2F0aW9uLWF1dG9jb21wbGV0ZScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2FnZ3JlZ2F0aW9uLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vYWdncmVnYXRpb24tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuXHRwcm92aWRlcnM6IFtcclxuXHRcdHtcclxuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFnZ3JlZ2F0aW9uQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWVcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFnZ3JlZ2F0aW9uQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWVcclxuXHRcdH1cclxuXHRdLFxyXG5cdGhvc3Q6IHtcclxuXHRcdGNsYXNzOiAnZmlsdGVyLWF1dG9jb21wbGV0ZSdcclxuXHR9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGlvbkF1dG9jb21wbGV0ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VBZ2dyZWdhdGlvbkZpZWxkPCdhdXRvY29tcGxldGUnPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0QENvbnRlbnRDaGlsZChBVVRPQ09NUExFVEVfVEVNUExBVEUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxyXG5cdGF1dG9jb21wbGV0ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuXHRpbnRlcm5hbFZhbHVlID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuXHRzZWxlY3RlZFZhbHVlU3ViID0gbmV3IFN1YmplY3QoKTtcclxuXHJcblx0cHJpdmF0ZSBfdmFsdWVTdWIgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG5cdGRpc3BsYXlGbiA9ICh2YWx1ZTogRmlsdGVyT3B0aW9uIHwgc3RyaW5nKSA9PiB7XHJcblx0XHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZTtcclxuXHJcblx0XHRpZiAodmFsdWU/LmxvY2FsaXplZExhYmVsKSB7XHJcblx0XHRcdHJldHVybiB2YWx1ZS5sb2NhbGl6ZWRMYWJlbFt0aGlzLmxhbmd1YWdlXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodmFsdWUubGFiZWwpO1xyXG5cdH07XHJcblxyXG5cdHdyaXRlVmFsdWUob2JqOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGlmIChvYmopIHtcclxuXHRcdFx0dGhpcy5fdmFsdWVTdWIubmV4dChvYmopO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0ZpZWxkRGlydHkpIHtcclxuXHRcdFx0dGhpcy5fdmFsdWVTdWIubmV4dChudWxsKTtcclxuXHRcdFx0dGhpcy5faXNGaWVsZERpcnR5ID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuX2luaXRWYWx1ZSgpO1xyXG5cdFx0dGhpcy5fdXBkYXRlVmFsdWVMaXN0ZW5lcigpO1xyXG5cdFx0dGhpcy5fY2hhbmdlVmFsdWVMaXN0ZW5lcigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfaW5pdFZhbHVlKCkge1xyXG5cdFx0Y29tYmluZUxhdGVzdChbdGhpcy5fdmFsdWVTdWIsIHRoaXMuX29wdGlvbnNTdWJdKVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRmaWx0ZXIoKFt2YWx1ZSwgaXRlbXNdKSA9PiAhIXZhbHVlICYmICEhaXRlbXM/Lmxlbmd0aCksXHJcblx0XHRcdFx0dGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXHJcblx0XHRcdClcclxuXHRcdFx0LnN1YnNjcmliZSgoW3ZhbHVlLCBpdGVtc10pID0+IHtcclxuXHRcdFx0XHRjb25zdCBvYmplY3QgPSBpdGVtcy5maW5kKChvYmopID0+IG9iai52YWx1ZSA9PT0gdmFsdWUpO1xyXG5cdFx0XHRcdHRoaXMuaW50ZXJuYWxWYWx1ZS5zZXRWYWx1ZShvYmplY3QgfHwgdmFsdWUpO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX2NoYW5nZVZhbHVlTGlzdGVuZXIoKSB7XHJcblx0XHR0aGlzLmludGVybmFsVmFsdWUudmFsdWVDaGFuZ2VzXHJcblx0XHRcdC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgyMDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcblx0XHRcdC5zdWJzY3JpYmUoKG9iajogRmlsdGVyT3B0aW9uIHwgc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlU3ViLm5leHQoIW9iaiB8fCB0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyA/IG9iaiA6IG9iai52YWx1ZSk7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfdXBkYXRlVmFsdWVMaXN0ZW5lcigpIHtcclxuXHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZVN1Yi5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdHRoaXMuX2lzRmllbGREaXJ0eSA9ICEhdmFsdWU7XHJcblx0XHRcdHRoaXMub25DaGFuZ2UodGhpcy5faXNWYWx1ZU9iamVjdCgpID8gdGhpcy5fcHJlcGFyZVZhbHVlT2JqZWN0KHZhbHVlKSA6IHZhbHVlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9ucyQgfCBhc3luYyBhcyBvcHRpb25zXCI+XHJcblx0PGZpZWxkLWhlYWRlciAqbmdJZj1cImZpZWxkQ29uZmlnLmxhYmVsICYmICFyZW5kZXJPcHRpb25zPy5oaWRlTGFiZWxcIiBjbGFzcz1cImZpbHRlci1hdXRvY29tcGxldGVfX2xhYmVsXCI+e3tcclxuXHRcdGZpZWxkQ29uZmlnLmxhYmVsIHwgdHJhbnNsYXRlXHJcblx0fX08L2ZpZWxkLWhlYWRlcj5cclxuXHJcblx0PGRpdiBjbGFzcz1cImZpbHRlci1hdXRvY29tcGxldGVfX3dyYXBwZXJcIj5cclxuXHRcdDxpbnB1dFxyXG5cdFx0XHR0eXBlPVwidGV4dFwiXHJcblx0XHRcdFttYXRBdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcclxuXHRcdFx0Y2xhc3M9XCJmaWx0ZXItYXV0b2NvbXBsZXRlX19pbnB1dCBmb3JtLWNvbnRyb2xcIlxyXG5cdFx0XHRbZGlyXT1cImRpcmVjdGlvblwiXHJcblx0XHRcdFtmb3JtQ29udHJvbF09XCJpbnRlcm5hbFZhbHVlXCJcclxuXHRcdC8+XHJcblx0PC9kaXY+XHJcblxyXG5cdDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCI+XHJcblx0XHQ8bWF0LW9wdGlvblxyXG5cdFx0XHQqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnMgfCBhdXRvY29tcGxldGUgOiBpbnRlcm5hbFZhbHVlLnZhbHVlXCJcclxuXHRcdFx0W3ZhbHVlXT1cIm9wdGlvblwiXHJcblx0XHQ+XHJcblx0XHRcdDxuZy1jb250YWluZXJcclxuXHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VGVtcGxhdGUgfHwgZGVmYXVsdFRlbXBsYXRlXCJcclxuXHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbiwgZmllbGRDb25maWcsIGFnZ3JlZ2F0aW9uIH1cIlxyXG5cdFx0XHQ+PC9uZy1jb250YWluZXI+XHJcblxyXG5cdFx0XHQ8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cclxuXHRcdFx0XHQ8ZmlsdGVyLW9wdGlvbi10ZXh0XHJcblx0XHRcdFx0XHRbb3B0aW9uXT1cIm9wdGlvblwiXHJcblx0XHRcdFx0XHRbbGFuZ3VhZ2VdPVwibGFuZ3VhZ2VcIlxyXG5cdFx0XHRcdFx0W3Nob3dDb3VudF09XCJyZW5kZXJPcHRpb25zPy5zaG93VG90YWxcIlxyXG5cdFx0XHRcdD48L2ZpbHRlci1vcHRpb24tdGV4dD5cclxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdDwvbWF0LW9wdGlvbj5cclxuXHQ8L21hdC1hdXRvY29tcGxldGU+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
@@ -0,0 +1,65 @@
1
+ import { SelectionModel } from '@angular/cdk/collections';
2
+ import { ChangeDetectionStrategy, Component, forwardRef, ViewEncapsulation } from '@angular/core';
3
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { AggregationBaseSelectionComponent } from '../../base';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../__parts/field-header.component";
7
+ import * as i2 from "../__parts/filter-options-sort/filter-options-sort.component";
8
+ import * as i3 from "../__parts/filter-search-input/filter-search-input.component";
9
+ import * as i4 from "../__parts/filter-autocomplete-input/filter-autocomplete-input.component";
10
+ import * as i5 from "@angular/material/checkbox";
11
+ import * as i6 from "../__parts/filter-option-text/filter-option-text.component";
12
+ import * as i7 from "../__parts/filter-empty-message.component";
13
+ import * as i8 from "../__parts/filter-collapse-control/filter-collapse-control.component";
14
+ import * as i9 from "@angular/common";
15
+ import * as i10 from "@ngx-translate/core";
16
+ import * as i11 from "../../pipes/sort.pipe";
17
+ import * as i12 from "../../pipes/filter.pipe";
18
+ export class AggregationCheckboxComponent extends AggregationBaseSelectionComponent {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.selectionModel = new SelectionModel(true, []);
22
+ }
23
+ ngOnInit() {
24
+ this.updateValue();
25
+ }
26
+ }
27
+ AggregationCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationCheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
28
+ AggregationCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AggregationCheckboxComponent, selector: "app-aggregation-checkbox", host: { classAttribute: "filter-checkbox" }, providers: [
29
+ {
30
+ provide: NG_VALUE_ACCESSOR,
31
+ useExisting: forwardRef(() => AggregationCheckboxComponent),
32
+ multi: true
33
+ },
34
+ {
35
+ provide: NG_VALIDATORS,
36
+ useExisting: forwardRef(() => AggregationCheckboxComponent),
37
+ multi: true
38
+ }
39
+ ], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"options$ | async as options\">\r\n\t<field-header *ngIf=\"fieldConfig.label && !renderOptions?.hideLabel\" class=\"filter-checkbox__header\">\r\n\t\t<span>\r\n\t\t\t{{ fieldConfig.label | translate }}\r\n\t\t</span>\r\n\t\t<filter-options-sort *ngIf=\"renderOptions?.sort\" (sortChange)=\"sortChange($event)\"></filter-options-sort>\r\n\t</field-header>\r\n\r\n\t<filter-search-input\r\n\t\tclass=\"filter-checkbox__filter\"\r\n\t\t*ngIf=\"renderOptions?.filter\"\r\n\t\t[(searchText)]=\"searchText\"\r\n\t></filter-search-input>\r\n\r\n\t<filter-autocomplete-input\r\n\t\t*ngIf=\"renderOptions?.search\"\r\n\t\t[fieldConfig]=\"fieldConfig\"\r\n\t\t[language]=\"language\"\r\n\t\t[direction]=\"direction\"\r\n\t\t(searchChange)=\"emitValue($event)\"\r\n\t></filter-autocomplete-input>\r\n\r\n\t<ng-container *ngIf=\"options | filter: searchText | sortList: sort as filteredOptions\">\r\n\t\t<div class=\"filter-checkbox__wrapper\">\r\n\t\t\t<mat-checkbox\r\n\t\t\t\tclass=\"filter-checkbox__item\"\r\n\t\t\t\t*ngFor=\"let option of filteredOptions; index as index\"\r\n\t\t\t\t[checked]=\"selectionModel.isSelected(option.value)\"\r\n\t\t\t\t(change)=\"selectionModel.toggle(option.value)\"\r\n\t\t\t\t[class.checkedBox]=\"selectionModel.isSelected(option.value)\"\r\n\t\t\t\t[class.unCheckedBox]=\"!selectionModel.isSelected(option.value)\"\r\n\t\t\t\t[class.hidden]=\"renderOptions?.collapse && index + 1 > visibleItemsCount\"\r\n\t\t\t>\r\n\t\t\t\t<ng-container\r\n\t\t\t\t\t[ngTemplateOutlet]=\"contentTemplate || defaultTemplate\"\r\n\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: option, fieldConfig, aggregation }\"\r\n\t\t\t\t></ng-container>\r\n\r\n\t\t\t\t<ng-template #defaultTemplate>\r\n\t\t\t\t\t<filter-option-text\r\n\t\t\t\t\t\t[option]=\"option\"\r\n\t\t\t\t\t\t[language]=\"language\"\r\n\t\t\t\t\t\t[showCount]=\"renderOptions?.showTotal\"\r\n\t\t\t\t\t></filter-option-text>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</mat-checkbox>\r\n\t\t</div>\r\n\r\n\t\t<filter-empty-message *ngIf=\"!filteredOptions.length\" class=\"filter-checkbox__empty\"></filter-empty-message>\r\n\r\n\t\t<filter-collapse-control\r\n\t\t\tclass=\"filter-checkbox__collapse\"\r\n\t\t\t*ngIf=\"renderOptions?.collapse\"\r\n\t\t\t[minCount]=\"expandedCount\"\r\n\t\t\t[(visibleCount)]=\"visibleItemsCount\"\r\n\t\t\t[totalItems]=\"filteredOptions.length\"\r\n\t\t></filter-collapse-control>\r\n\t</ng-container>\r\n</ng-container>\r\n", styles: [".filter-checkbox{display:var(--fc-display, block)}.filter-checkbox__wrapper{display:var(--fc-wrapper-display, flex);flex-direction:var(--fc-wrapper-direction, column)}.filter-checkbox__item{margin-bottom:var(--filter-row-margin-bottom, .3rem)}.filter-checkbox__item.hidden{display:none}.filter-checkbox__item .mat-checkbox-layout{display:flex}.filter-checkbox__item .mat-checkbox-layout .mat-checkbox-label{flex-grow:1}\n"], components: [{ type: i1.FieldHeaderComponent, selector: "field-header" }, { type: i2.FilterOptionsSortComponent, selector: "filter-options-sort", inputs: ["options", "sort"], outputs: ["sortChange"] }, { type: i3.FilterSearchInputComponent, selector: "filter-search-input", inputs: ["searchText"], outputs: ["searchTextChange"] }, { type: i4.FilterAutocompleteInputComponent, selector: "filter-autocomplete-input", inputs: ["direction", "language", "fieldConfig"], outputs: ["searchChange"] }, { type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i6.FilterOptionTextComponent, selector: "filter-option-text", inputs: ["option", "showCount", "language"] }, { type: i7.FilterEmptyMessageComponent, selector: "filter-empty-message", inputs: ["message"] }, { type: i8.FilterCollapseControlComponent, selector: "filter-collapse-control", inputs: ["minCount", "totalItems", "visibleCount"], outputs: ["visibleCountChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i9.AsyncPipe, "translate": i10.TranslatePipe, "sortList": i11.SortListPipe, "filter": i12.FilterPipe }, changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationCheckboxComponent, decorators: [{
41
+ type: Component,
42
+ args: [{
43
+ selector: 'app-aggregation-checkbox',
44
+ templateUrl: './aggregation-checkbox.component.html',
45
+ styleUrls: ['./aggregation-checkbox.component.scss'],
46
+ encapsulation: ViewEncapsulation.None,
47
+ changeDetection: ChangeDetectionStrategy.Default,
48
+ providers: [
49
+ {
50
+ provide: NG_VALUE_ACCESSOR,
51
+ useExisting: forwardRef(() => AggregationCheckboxComponent),
52
+ multi: true
53
+ },
54
+ {
55
+ provide: NG_VALIDATORS,
56
+ useExisting: forwardRef(() => AggregationCheckboxComponent),
57
+ multi: true
58
+ }
59
+ ],
60
+ host: {
61
+ class: 'filter-checkbox'
62
+ }
63
+ }]
64
+ }] });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24tY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvbmRmLXRhYmxlL2ZpbHRlcnMtcGFuZWwvY29tcG9uZW50cy9hZ2dyZWdhdGlvbi1jaGVja2JveC9hZ2dyZWdhdGlvbi1jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9uZGYtdGFibGUvZmlsdGVycy1wYW5lbC9jb21wb25lbnRzL2FnZ3JlZ2F0aW9uLWNoZWNrYm94L2FnZ3JlZ2F0aW9uLWNoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQXdCL0QsTUFBTSxPQUFPLDRCQUE2QixTQUFRLGlDQUE2QztJQXRCL0Y7O1FBdUJDLG1CQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBSTlDO0lBSEEsUUFBUTtRQUNQLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQixDQUFDOzswSEFKVyw0QkFBNEI7OEdBQTVCLDRCQUE0QixnR0FoQjdCO1FBQ1Y7WUFDQyxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUM7WUFDM0QsS0FBSyxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0MsT0FBTyxFQUFFLGFBQWE7WUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztZQUMzRCxLQUFLLEVBQUUsSUFBSTtTQUNYO0tBQ0QsaURDdEJGLGs1RUEyREE7NEZEaENhLDRCQUE0QjtrQkF0QnhDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsV0FBVyxFQUFFLHVDQUF1QztvQkFDcEQsU0FBUyxFQUFFLENBQUMsdUNBQXVDLENBQUM7b0JBQ3BELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsT0FBTztvQkFDaEQsU0FBUyxFQUFFO3dCQUNWOzRCQUNDLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDOzRCQUMzRCxLQUFLLEVBQUUsSUFBSTt5QkFDWDt3QkFDRDs0QkFDQyxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLENBQUM7NEJBQzNELEtBQUssRUFBRSxJQUFJO3lCQUNYO3FCQUNEO29CQUNELElBQUksRUFBRTt3QkFDTCxLQUFLLEVBQUUsaUJBQWlCO3FCQUN4QjtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWdncmVnYXRpb25CYXNlU2VsZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1hZ2dyZWdhdGlvbi1jaGVja2JveCcsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2FnZ3JlZ2F0aW9uLWNoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9hZ2dyZWdhdGlvbi1jaGVja2JveC5jb21wb25lbnQuc2NzcyddLFxyXG5cdGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxyXG5cdHByb3ZpZGVyczogW1xyXG5cdFx0e1xyXG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuXHRcdFx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWdncmVnYXRpb25DaGVja2JveENvbXBvbmVudCksXHJcblx0XHRcdG11bHRpOiB0cnVlXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBZ2dyZWdhdGlvbkNoZWNrYm94Q29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWVcclxuXHRcdH1cclxuXHRdLFxyXG5cdGhvc3Q6IHtcclxuXHRcdGNsYXNzOiAnZmlsdGVyLWNoZWNrYm94J1xyXG5cdH1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBBZ2dyZWdhdGlvbkJhc2VTZWxlY3Rpb25Db21wb25lbnQ8J2NoZWNrYm94Jz4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdHNlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIFtdKTtcclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMudXBkYXRlVmFsdWUoKTtcclxuXHR9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnMkIHwgYXN5bmMgYXMgb3B0aW9uc1wiPlxyXG5cdDxmaWVsZC1oZWFkZXIgKm5nSWY9XCJmaWVsZENvbmZpZy5sYWJlbCAmJiAhcmVuZGVyT3B0aW9ucz8uaGlkZUxhYmVsXCIgY2xhc3M9XCJmaWx0ZXItY2hlY2tib3hfX2hlYWRlclwiPlxyXG5cdFx0PHNwYW4+XHJcblx0XHRcdHt7IGZpZWxkQ29uZmlnLmxhYmVsIHwgdHJhbnNsYXRlIH19XHJcblx0XHQ8L3NwYW4+XHJcblx0XHQ8ZmlsdGVyLW9wdGlvbnMtc29ydCAqbmdJZj1cInJlbmRlck9wdGlvbnM/LnNvcnRcIiAoc29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlKCRldmVudClcIj48L2ZpbHRlci1vcHRpb25zLXNvcnQ+XHJcblx0PC9maWVsZC1oZWFkZXI+XHJcblxyXG5cdDxmaWx0ZXItc2VhcmNoLWlucHV0XHJcblx0XHRjbGFzcz1cImZpbHRlci1jaGVja2JveF9fZmlsdGVyXCJcclxuXHRcdCpuZ0lmPVwicmVuZGVyT3B0aW9ucz8uZmlsdGVyXCJcclxuXHRcdFsoc2VhcmNoVGV4dCldPVwic2VhcmNoVGV4dFwiXHJcblx0PjwvZmlsdGVyLXNlYXJjaC1pbnB1dD5cclxuXHJcblx0PGZpbHRlci1hdXRvY29tcGxldGUtaW5wdXRcclxuXHRcdCpuZ0lmPVwicmVuZGVyT3B0aW9ucz8uc2VhcmNoXCJcclxuXHRcdFtmaWVsZENvbmZpZ109XCJmaWVsZENvbmZpZ1wiXHJcblx0XHRbbGFuZ3VhZ2VdPVwibGFuZ3VhZ2VcIlxyXG5cdFx0W2RpcmVjdGlvbl09XCJkaXJlY3Rpb25cIlxyXG5cdFx0KHNlYXJjaENoYW5nZSk9XCJlbWl0VmFsdWUoJGV2ZW50KVwiXHJcblx0PjwvZmlsdGVyLWF1dG9jb21wbGV0ZS1pbnB1dD5cclxuXHJcblx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnMgfCBmaWx0ZXI6IHNlYXJjaFRleHQgfCBzb3J0TGlzdDogc29ydCBhcyBmaWx0ZXJlZE9wdGlvbnNcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJmaWx0ZXItY2hlY2tib3hfX3dyYXBwZXJcIj5cclxuXHRcdFx0PG1hdC1jaGVja2JveFxyXG5cdFx0XHRcdGNsYXNzPVwiZmlsdGVyLWNoZWNrYm94X19pdGVtXCJcclxuXHRcdFx0XHQqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uczsgaW5kZXggYXMgaW5kZXhcIlxyXG5cdFx0XHRcdFtjaGVja2VkXT1cInNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQob3B0aW9uLnZhbHVlKVwiXHJcblx0XHRcdFx0KGNoYW5nZSk9XCJzZWxlY3Rpb25Nb2RlbC50b2dnbGUob3B0aW9uLnZhbHVlKVwiXHJcblx0XHRcdFx0W2NsYXNzLmNoZWNrZWRCb3hdPVwic2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChvcHRpb24udmFsdWUpXCJcclxuXHRcdFx0XHRbY2xhc3MudW5DaGVja2VkQm94XT1cIiFzZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKG9wdGlvbi52YWx1ZSlcIlxyXG5cdFx0XHRcdFtjbGFzcy5oaWRkZW5dPVwicmVuZGVyT3B0aW9ucz8uY29sbGFwc2UgJiYgaW5kZXggKyAxID4gdmlzaWJsZUl0ZW1zQ291bnRcIlxyXG5cdFx0XHQ+XHJcblx0XHRcdFx0PG5nLWNvbnRhaW5lclxyXG5cdFx0XHRcdFx0W25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFRlbXBsYXRlIHx8IGRlZmF1bHRUZW1wbGF0ZVwiXHJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbiwgZmllbGRDb25maWcsIGFnZ3JlZ2F0aW9uIH1cIlxyXG5cdFx0XHRcdD48L25nLWNvbnRhaW5lcj5cclxuXHJcblx0XHRcdFx0PG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGU+XHJcblx0XHRcdFx0XHQ8ZmlsdGVyLW9wdGlvbi10ZXh0XHJcblx0XHRcdFx0XHRcdFtvcHRpb25dPVwib3B0aW9uXCJcclxuXHRcdFx0XHRcdFx0W2xhbmd1YWdlXT1cImxhbmd1YWdlXCJcclxuXHRcdFx0XHRcdFx0W3Nob3dDb3VudF09XCJyZW5kZXJPcHRpb25zPy5zaG93VG90YWxcIlxyXG5cdFx0XHRcdFx0PjwvZmlsdGVyLW9wdGlvbi10ZXh0PlxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdDwvbWF0LWNoZWNrYm94PlxyXG5cdFx0PC9kaXY+XHJcblxyXG5cdFx0PGZpbHRlci1lbXB0eS1tZXNzYWdlICpuZ0lmPVwiIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGhcIiBjbGFzcz1cImZpbHRlci1jaGVja2JveF9fZW1wdHlcIj48L2ZpbHRlci1lbXB0eS1tZXNzYWdlPlxyXG5cclxuXHRcdDxmaWx0ZXItY29sbGFwc2UtY29udHJvbFxyXG5cdFx0XHRjbGFzcz1cImZpbHRlci1jaGVja2JveF9fY29sbGFwc2VcIlxyXG5cdFx0XHQqbmdJZj1cInJlbmRlck9wdGlvbnM/LmNvbGxhcHNlXCJcclxuXHRcdFx0W21pbkNvdW50XT1cImV4cGFuZGVkQ291bnRcIlxyXG5cdFx0XHRbKHZpc2libGVDb3VudCldPVwidmlzaWJsZUl0ZW1zQ291bnRcIlxyXG5cdFx0XHRbdG90YWxJdGVtc109XCJmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoXCJcclxuXHRcdD48L2ZpbHRlci1jb2xsYXBzZS1jb250cm9sPlxyXG5cdDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
@@ -0,0 +1,66 @@
1
+ import { ChangeDetectionStrategy, Component, forwardRef, ViewEncapsulation } from '@angular/core';
2
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { BaseAggregationField } from '../../base';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../__parts/field-header.component";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@ngx-translate/core";
8
+ export class AggregationCustomComponent extends BaseAggregationField {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.updateValue = (value) => {
12
+ this.internalValue = value;
13
+ this._isFieldDirty = !!value;
14
+ this.onChange(this._isValueObject() ? this._prepareValueObject(value) : value);
15
+ };
16
+ }
17
+ writeValue(obj) {
18
+ if (obj) {
19
+ this.internalValue = obj;
20
+ }
21
+ else if (this._isFieldDirty) {
22
+ this.internalValue = null;
23
+ this._isFieldDirty = false;
24
+ }
25
+ this.cdr.detectChanges();
26
+ }
27
+ }
28
+ AggregationCustomComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationCustomComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
29
+ AggregationCustomComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AggregationCustomComponent, selector: "app-aggregation-custom", host: { classAttribute: "filter-custom" }, providers: [
30
+ {
31
+ provide: NG_VALUE_ACCESSOR,
32
+ useExisting: forwardRef(() => AggregationCustomComponent),
33
+ multi: true
34
+ },
35
+ {
36
+ provide: NG_VALIDATORS,
37
+ useExisting: forwardRef(() => AggregationCustomComponent),
38
+ multi: true
39
+ }
40
+ ], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"options$ | async as options\">\r\n\t<field-header *ngIf=\"fieldConfig.label && !renderOptions?.hideLabel\" class=\"filter-custom__label\">{{\r\n\t\tfieldConfig.label | translate\r\n\t}}</field-header>\r\n\r\n\t<div class=\"filter-custom__wrapper\">\r\n\t\t<ng-container\r\n\t\t\t[ngTemplateOutlet]=\"contentTemplate\"\r\n\t\t\t[ngTemplateOutletContext]=\"{\r\n\t\t\t\t$implicit: options,\r\n\t\t\t\tfield: fieldConfig,\r\n\t\t\t\tvalue: internalValue,\r\n\t\t\t\taggregation,\r\n\t\t\t\tupdateValue\r\n\t\t\t}\"\r\n\t\t></ng-container>\r\n\t</div>\r\n</ng-container>\r\n", styles: [""], components: [{ type: i1.FieldHeaderComponent, selector: "field-header" }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i2.AsyncPipe, "translate": i3.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationCustomComponent, decorators: [{
42
+ type: Component,
43
+ args: [{
44
+ selector: 'app-aggregation-custom',
45
+ templateUrl: './aggregation-custom.component.html',
46
+ styleUrls: ['./aggregation-custom.component.scss'],
47
+ encapsulation: ViewEncapsulation.None,
48
+ changeDetection: ChangeDetectionStrategy.OnPush,
49
+ providers: [
50
+ {
51
+ provide: NG_VALUE_ACCESSOR,
52
+ useExisting: forwardRef(() => AggregationCustomComponent),
53
+ multi: true
54
+ },
55
+ {
56
+ provide: NG_VALIDATORS,
57
+ useExisting: forwardRef(() => AggregationCustomComponent),
58
+ multi: true
59
+ }
60
+ ],
61
+ host: {
62
+ class: 'filter-custom'
63
+ }
64
+ }]
65
+ }] });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24tY3VzdG9tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL25kZi10YWJsZS9maWx0ZXJzLXBhbmVsL2NvbXBvbmVudHMvYWdncmVnYXRpb24tY3VzdG9tL2FnZ3JlZ2F0aW9uLWN1c3RvbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9uZGYtdGFibGUvZmlsdGVycy1wYW5lbC9jb21wb25lbnRzL2FnZ3JlZ2F0aW9uLWN1c3RvbS9hZ2dyZWdhdGlvbi1jdXN0b20uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQzs7Ozs7QUF3QmxELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxvQkFBOEI7SUF0QjlFOztRQXlCQyxnQkFBVyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQztLQVdGO0lBVEEsVUFBVSxDQUFDLEdBQVE7UUFDbEIsSUFBSSxHQUFHLEVBQUU7WUFDUixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztTQUN6QjthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztTQUMzQjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7d0hBakJXLDBCQUEwQjs0R0FBMUIsMEJBQTBCLDRGQWhCM0I7UUFDVjtZQUNDLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztZQUN6RCxLQUFLLEVBQUUsSUFBSTtTQUNYO1FBQ0Q7WUFDQyxPQUFPLEVBQUUsYUFBYTtZQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO1lBQ3pELEtBQUssRUFBRSxJQUFJO1NBQ1g7S0FDRCxpRENyQkYsa2xCQWtCQTs0RkRRYSwwQkFBMEI7a0JBdEJ0QyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFdBQVcsRUFBRSxxQ0FBcUM7b0JBQ2xELFNBQVMsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO29CQUNsRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFNBQVMsRUFBRTt3QkFDVjs0QkFDQyxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQzs0QkFDekQsS0FBSyxFQUFFLElBQUk7eUJBQ1g7d0JBQ0Q7NEJBQ0MsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDOzRCQUN6RCxLQUFLLEVBQUUsSUFBSTt5QkFDWDtxQkFDRDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLGVBQWU7cUJBQ3RCO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJhc2VBZ2dyZWdhdGlvbkZpZWxkIH0gZnJvbSAnLi4vLi4vYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FwcC1hZ2dyZWdhdGlvbi1jdXN0b20nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9hZ2dyZWdhdGlvbi1jdXN0b20uY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2FnZ3JlZ2F0aW9uLWN1c3RvbS5jb21wb25lbnQuc2NzcyddLFxyXG5cdGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcblx0cHJvdmlkZXJzOiBbXHJcblx0XHR7XHJcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBZ2dyZWdhdGlvbkN1c3RvbUNvbXBvbmVudCksXHJcblx0XHRcdG11bHRpOiB0cnVlXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBZ2dyZWdhdGlvbkN1c3RvbUNvbXBvbmVudCksXHJcblx0XHRcdG11bHRpOiB0cnVlXHJcblx0XHR9XHJcblx0XSxcclxuXHRob3N0OiB7XHJcblx0XHRjbGFzczogJ2ZpbHRlci1jdXN0b20nXHJcblx0fVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWdncmVnYXRpb25DdXN0b21Db21wb25lbnQgZXh0ZW5kcyBCYXNlQWdncmVnYXRpb25GaWVsZDwnY3VzdG9tJz4ge1xyXG5cdGludGVybmFsVmFsdWU6IGFueTtcclxuXHJcblx0dXBkYXRlVmFsdWUgPSAodmFsdWU6IGFueSkgPT4ge1xyXG5cdFx0dGhpcy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XHJcblx0XHR0aGlzLl9pc0ZpZWxkRGlydHkgPSAhIXZhbHVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZSh0aGlzLl9pc1ZhbHVlT2JqZWN0KCkgPyB0aGlzLl9wcmVwYXJlVmFsdWVPYmplY3QodmFsdWUpIDogdmFsdWUpO1xyXG5cdH07XHJcblxyXG5cdHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuXHRcdGlmIChvYmopIHtcclxuXHRcdFx0dGhpcy5pbnRlcm5hbFZhbHVlID0gb2JqO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLl9pc0ZpZWxkRGlydHkpIHtcclxuXHRcdFx0dGhpcy5pbnRlcm5hbFZhbHVlID0gbnVsbDtcclxuXHRcdFx0dGhpcy5faXNGaWVsZERpcnR5ID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zJCB8IGFzeW5jIGFzIG9wdGlvbnNcIj5cclxuXHQ8ZmllbGQtaGVhZGVyICpuZ0lmPVwiZmllbGRDb25maWcubGFiZWwgJiYgIXJlbmRlck9wdGlvbnM/LmhpZGVMYWJlbFwiIGNsYXNzPVwiZmlsdGVyLWN1c3RvbV9fbGFiZWxcIj57e1xyXG5cdFx0ZmllbGRDb25maWcubGFiZWwgfCB0cmFuc2xhdGVcclxuXHR9fTwvZmllbGQtaGVhZGVyPlxyXG5cclxuXHQ8ZGl2IGNsYXNzPVwiZmlsdGVyLWN1c3RvbV9fd3JhcHBlclwiPlxyXG5cdFx0PG5nLWNvbnRhaW5lclxyXG5cdFx0XHRbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VGVtcGxhdGVcIlxyXG5cdFx0XHRbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG5cdFx0XHRcdCRpbXBsaWNpdDogb3B0aW9ucyxcclxuXHRcdFx0XHRmaWVsZDogZmllbGRDb25maWcsXHJcblx0XHRcdFx0dmFsdWU6IGludGVybmFsVmFsdWUsXHJcblx0XHRcdFx0YWdncmVnYXRpb24sXHJcblx0XHRcdFx0dXBkYXRlVmFsdWVcclxuXHRcdFx0fVwiXHJcblx0XHQ+PC9uZy1jb250YWluZXI+XHJcblx0PC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
@@ -0,0 +1,219 @@
1
+ import { SelectionModel } from '@angular/cdk/collections';
2
+ import { ChangeDetectionStrategy, Component, ElementRef, forwardRef, Host, Optional, Renderer2, SkipSelf, ViewEncapsulation } from '@angular/core';
3
+ import { ControlContainer, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { map, takeUntil } from 'rxjs/operators';
5
+ import { BaseAggregationField } from '../../base';
6
+ import { DATE_LIST_VIEW, FIELD_SEND_MODE } from '../../constants';
7
+ import { isFieldValueObject, NxQL } from '../../utility';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../__parts/field-header.component";
10
+ import * as i2 from "@angular/material/radio";
11
+ import * as i3 from "../__parts/filter-option-text/filter-option-text.component";
12
+ import * as i4 from "@angular/material/button";
13
+ import * as i5 from "@ng-select/ng-select";
14
+ import * as i6 from "../__parts/filter-date-range/filter-date-range.component";
15
+ import * as i7 from "@angular/common";
16
+ import * as i8 from "@angular/forms";
17
+ import * as i9 from "@ngx-translate/core";
18
+ import * as i10 from "../../pipes/localized-label.pipe";
19
+ export class AggregationDateListComponent extends BaseAggregationField {
20
+ constructor() {
21
+ super(...arguments);
22
+ this._controlContainer = this.injector.get(ControlContainer);
23
+ this._renderer = this.injector.get(Renderer2);
24
+ this._el = this.injector.get(ElementRef);
25
+ this.minMaxDateCtrl = new FormControl(null);
26
+ this.selectionModel = new SelectionModel(false, []);
27
+ this.viewLayout = DATE_LIST_VIEW;
28
+ }
29
+ writeValue(obj) {
30
+ if (obj) {
31
+ this._initValue(obj);
32
+ }
33
+ else if (this._isFieldDirty) {
34
+ this.selectionModel.clear();
35
+ this.internalValue = null;
36
+ this._isFieldDirty = false;
37
+ this.minMaxDateCtrl.reset(undefined, { emitEvent: false });
38
+ }
39
+ }
40
+ _initValue(obj) {
41
+ if (!isFieldValueObject(obj)) {
42
+ this._handleSelection(obj);
43
+ return;
44
+ }
45
+ const { min, max, value } = obj;
46
+ if (min || max) {
47
+ this.minMaxDateCtrl.patchValue({ min, max }, { emitEvent: false });
48
+ }
49
+ else {
50
+ this._handleSelection(value);
51
+ }
52
+ }
53
+ _handleSelection(values) {
54
+ this.internalValue = values;
55
+ if (this._isList()) {
56
+ const selectedValues = Array.isArray(values) ? values : [values];
57
+ this.selectionModel.select(...selectedValues);
58
+ }
59
+ }
60
+ ngOnInit() {
61
+ this._appendMinMaxControl();
62
+ this._addSelectionListener();
63
+ this._addMinMaxListener();
64
+ this._updateVisibility();
65
+ }
66
+ updateValueSelection(value) {
67
+ var _a;
68
+ this._onChange(value);
69
+ if (this.renderOptions.minMax) {
70
+ const _emitEvent = ((_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.sendMode) === FIELD_SEND_MODE.queryParam;
71
+ this._resetMinMaxCtrl(_emitEvent);
72
+ }
73
+ }
74
+ updateSelectValue(value) {
75
+ this.updateValueSelection([value]);
76
+ }
77
+ updateValueMinMax(value) {
78
+ const _hasData = (value === null || value === void 0 ? void 0 : value.min) || (value === null || value === void 0 ? void 0 : value.max);
79
+ if (!_hasData) {
80
+ this._onChange(value);
81
+ return;
82
+ }
83
+ this._internalReset();
84
+ this._isFieldDirty = !!_hasData;
85
+ if (this._isValueObject()) {
86
+ const _operator = NxQL._getRangeOperator(value);
87
+ const _val = NxQL._getValueRange(value, 'DATE', _operator);
88
+ this._onChange(_val);
89
+ return;
90
+ }
91
+ this._onChange(value);
92
+ }
93
+ updateValue(value) {
94
+ this.internalValue = value;
95
+ this._onChange(value);
96
+ }
97
+ clearSelected() {
98
+ this._internalReset();
99
+ this._onChange(null);
100
+ }
101
+ _appendMinMaxControl() {
102
+ const formGroup = this._controlContainer.control;
103
+ if (!this.renderOptions.minMax || !formGroup) {
104
+ return;
105
+ }
106
+ if (this._isSendAsQueryParams()) {
107
+ formGroup.addControl(`${this.fieldConfig.aggregation}__minMaxDate`, this.minMaxDateCtrl);
108
+ this.minMaxDateCtrl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((_) => {
109
+ this._internalReset();
110
+ this.updateValue(null);
111
+ });
112
+ }
113
+ }
114
+ _addMinMaxListener() {
115
+ var _a;
116
+ if ([FIELD_SEND_MODE.custom, FIELD_SEND_MODE.payload].includes((_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.sendMode)) {
117
+ this.minMaxDateCtrl.valueChanges
118
+ .pipe(takeUntil(this.destroy$))
119
+ .subscribe((value) => {
120
+ this.updateValueMinMax(value);
121
+ });
122
+ }
123
+ }
124
+ _addSelectionListener() {
125
+ if (!!this.renderOptions.view && this.renderOptions.view !== DATE_LIST_VIEW.list) {
126
+ return;
127
+ }
128
+ this.selectionModel.changed
129
+ .asObservable()
130
+ .pipe(map((data) => data.source.selected), takeUntil(this.destroy$))
131
+ .subscribe((value) => {
132
+ if (this.renderOptions.minMax) {
133
+ this._resetMinMaxCtrl(false);
134
+ }
135
+ this.updateValueSelection(value);
136
+ });
137
+ }
138
+ _resetMinMaxCtrl(emitEvent = true) {
139
+ this.minMaxDateCtrl.reset(null, {
140
+ emitEvent: emitEvent
141
+ });
142
+ }
143
+ _internalReset() {
144
+ this.internalValue = null;
145
+ this.selectionModel.clear();
146
+ }
147
+ _onChange(value) {
148
+ this._isFieldDirty = !!value;
149
+ this.onChange(value);
150
+ }
151
+ _isDropdown() {
152
+ var _a;
153
+ return ((_a = this.renderOptions) === null || _a === void 0 ? void 0 : _a.view) == DATE_LIST_VIEW.dropdown;
154
+ }
155
+ _isList() {
156
+ var _a;
157
+ return ((_a = this.renderOptions) === null || _a === void 0 ? void 0 : _a.view) == DATE_LIST_VIEW.list;
158
+ }
159
+ _updateVisibility() {
160
+ this._optionsSub
161
+ .pipe(map((data) => data.some((item) => !!(item === null || item === void 0 ? void 0 : item.count))), takeUntil(this.destroy$))
162
+ .subscribe((hasData) => {
163
+ const el = this._el.nativeElement;
164
+ if (hasData) {
165
+ this._renderer.removeStyle(el, 'display');
166
+ this._renderer.removeAttribute(el, 'hidden');
167
+ }
168
+ else {
169
+ this._renderer.setAttribute(el, 'hidden', 'true');
170
+ this._renderer.setStyle(el, 'display', 'none');
171
+ }
172
+ });
173
+ }
174
+ }
175
+ AggregationDateListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationDateListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
176
+ AggregationDateListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AggregationDateListComponent, selector: "aggregation-date-list", host: { classAttribute: "filter-date-list" }, providers: [
177
+ {
178
+ provide: NG_VALUE_ACCESSOR,
179
+ useExisting: forwardRef(() => AggregationDateListComponent),
180
+ multi: true
181
+ },
182
+ {
183
+ provide: NG_VALIDATORS,
184
+ useExisting: forwardRef(() => AggregationDateListComponent),
185
+ multi: true
186
+ }
187
+ ], usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"options$ | async as options\">\r\n\t<field-header *ngIf=\"fieldConfig.label && !renderOptions?.hideLabel\" class=\"filter-date-list__label\">{{\r\n\t\tfieldConfig.label | translate\r\n\t}}</field-header>\r\n\r\n\t<div class=\"filter-date-list__wrapper\">\r\n\t\t<ng-container *ngIf=\"!renderOptions?.view || renderOptions.view === viewLayout.list\">\r\n\t\t\t<mat-radio-button\r\n\t\t\t\tclass=\"filter-date-list__item\"\r\n\t\t\t\t*ngFor=\"let option of options; index as index\"\r\n\t\t\t\t[checked]=\"selectionModel.isSelected(option.value)\"\r\n\t\t\t\t(change)=\"selectionModel.toggle(option.value)\"\r\n\t\t\t\t[class.checkedBox]=\"selectionModel.isSelected(option.value)\"\r\n\t\t\t\t[class.unCheckedBox]=\"!selectionModel.isSelected(option.value)\"\r\n\t\t\t>\r\n\t\t\t\t<ng-container\r\n\t\t\t\t\t[ngTemplateOutlet]=\"contentTemplate || defaultTemplate\"\r\n\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: option, fieldConfig, aggregation }\"\r\n\t\t\t\t></ng-container>\r\n\r\n\t\t\t\t<ng-template #defaultTemplate>\r\n\t\t\t\t\t<filter-option-text\r\n\t\t\t\t\t\t[option]=\"option\"\r\n\t\t\t\t\t\t[language]=\"language\"\r\n\t\t\t\t\t\t[showCount]=\"renderOptions?.showTotal\"\r\n\t\t\t\t\t></filter-option-text>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</mat-radio-button>\r\n\r\n\t\t\t<button *ngIf=\"selectionModel.hasValue()\" mat-flat-button class=\"mb-2\" (click)=\"clearSelected()\">\r\n\t\t\t\t{{ 'FILTERS.clear' | translate }}\r\n\t\t\t</button>\r\n\t\t</ng-container>\r\n\r\n\t\t<ng-container *ngIf=\"renderOptions.view === viewLayout.dropdown\">\r\n\t\t\t<ng-select\r\n\t\t\t\tclass=\"filter-date-list__select\"\r\n\t\t\t\t[items]=\"options\"\r\n\t\t\t\tbindValue=\"value\"\r\n\t\t\t\t[multiple]=\"false\"\r\n\t\t\t\t[ngModel]=\"internalValue\"\r\n\t\t\t\t(ngModelChange)=\"updateSelectValue($event)\"\r\n\t\t\t\t[notFoundText]=\"emptyPlaceholder || 'SELECT.notFoundText' | translate\"\r\n\t\t\t\t[placeholder]=\"'SELECT.placeholder' | translate\"\r\n\t\t\t\t[clearAllText]=\"'SELECT.clearAllText' | translate\"\r\n\t\t\t\t[typeToSearchText]=\"'SELECT.typeToSearchText' | translate\"\r\n\t\t\t\t[searchable]=\"false\"\r\n\t\t\t>\r\n\t\t\t\t<ng-template ng-option-tmp let-item=\"item\">\r\n\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t[ngTemplateOutlet]=\"contentTemplate || defaultTemplate\"\r\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, fieldConfig, aggregation }\"\r\n\t\t\t\t\t></ng-container>\r\n\r\n\t\t\t\t\t<ng-template #defaultTemplate>\r\n\t\t\t\t\t\t<filter-option-text\r\n\t\t\t\t\t\t\t[option]=\"item\"\r\n\t\t\t\t\t\t\t[language]=\"language\"\r\n\t\t\t\t\t\t\t[showCount]=\"renderOptions?.showTotal\"\r\n\t\t\t\t\t\t></filter-option-text>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t<ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n\t\t\t\t\t<div *ngFor=\"let item of items\" class=\"ng-value\">\r\n\t\t\t\t\t\t<span class=\"ng-value-label\">{{ item | localizedLabel : language }}</span>\r\n\t\t\t\t\t\t<button class=\"ng-value-icon left\" (click)=\"clear(item)\" aria-hidden=\"true\">\u00D7</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t<ng-template ng-label-tmp let-item=\"item\">\r\n\t\t\t\t\t<filter-option-text\r\n\t\t\t\t\t\t[option]=\"item\"\r\n\t\t\t\t\t\t[language]=\"language\"\r\n\t\t\t\t\t\t[showCount]=\"renderOptions?.showTotal\"\r\n\t\t\t\t\t></filter-option-text>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</ng-select>\r\n\t\t</ng-container>\r\n\r\n\t\t<filter-date-range\r\n\t\t\tclass=\"filter-date-list__range\"\r\n\t\t\t*ngIf=\"renderOptions?.minMax\"\r\n\t\t\t[formControl]=\"minMaxDateCtrl\"\r\n\t\t></filter-date-range>\r\n\t</div>\r\n</div>\r\n", styles: [".filter-date-list{display:var(--fdl-display, block)}.filter-date-list__label{display:var(--fdl-label-display, block);margin-block:var(--fdl-label-margin-block, 0 .5rem);margin-inline:var(--fdl-label-margin-inline, 0 .2rem);padding:var(--fdl-padding, .2rem);font-weight:var(--fdl-weight, 600)}.filter-date-list__wrapper{display:var(--fdl-wrapper-display, flex);flex-direction:var(--fdl-wrapper-direction, column)}.filter-date-list__item{padding-inline-start:.5rem;margin-bottom:var(--fdl-row-margin-bottom, .3rem)}.filter-date-list__item .mat-radio-label{display:flex}.filter-date-list__item .mat-radio-label .mat-radio-label-content{flex-grow:1}.filter-date-list__select{margin-bottom:var(--fdl-row-margin-bottom, .3rem)}.filter-date-list__range{margin-top:var(--fdl-range-margin-top, .5rem);display:var(--fdl-range-display, flex);flex-direction:var(--fdl-range-direction, column)}\n"], components: [{ type: i1.FieldHeaderComponent, selector: "field-header" }, { type: i2.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i3.FilterOptionTextComponent, selector: "filter-option-text", inputs: ["option", "showCount", "language"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.NgSelectComponent, selector: "ng-select", inputs: ["markFirst", "dropdownPosition", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "bufferAmount", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "bindLabel", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "virtualScroll", "openOnEnter", "appendTo", "bindValue", "appearance", "maxSelectedItems", "groupBy", "groupValue", "tabIndex", "typeahead"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i6.FilterDateRangeComponent, selector: "filter-date-range" }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.ɵf, selector: "[ng-option-tmp]" }, { type: i5.ɵi, selector: "[ng-multi-label-tmp]" }, { type: i5.ɵh, selector: "[ng-label-tmp]" }, { type: i8.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "async": i7.AsyncPipe, "translate": i9.TranslatePipe, "localizedLabel": i10.LocalizedLabelPipe }, changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationDateListComponent, decorators: [{
189
+ type: Component,
190
+ args: [{
191
+ selector: 'aggregation-date-list',
192
+ templateUrl: './aggregation-date-list.component.html',
193
+ styleUrls: ['./aggregation-date-list.component.scss'],
194
+ encapsulation: ViewEncapsulation.None,
195
+ changeDetection: ChangeDetectionStrategy.Default,
196
+ providers: [
197
+ {
198
+ provide: NG_VALUE_ACCESSOR,
199
+ useExisting: forwardRef(() => AggregationDateListComponent),
200
+ multi: true
201
+ },
202
+ {
203
+ provide: NG_VALIDATORS,
204
+ useExisting: forwardRef(() => AggregationDateListComponent),
205
+ multi: true
206
+ }
207
+ ],
208
+ host: {
209
+ class: 'filter-date-list'
210
+ }
211
+ }]
212
+ }], propDecorators: { _controlContainer: [{
213
+ type: Optional
214
+ }, {
215
+ type: Host
216
+ }, {
217
+ type: SkipSelf
218
+ }] } });
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24tZGF0ZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvdGFibGVzL25kZi10YWJsZS9maWx0ZXJzLXBhbmVsL2NvbXBvbmVudHMvYWdncmVnYXRpb24tZGF0ZS1saXN0L2FnZ3JlZ2F0aW9uLWRhdGUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9uZGYtdGFibGUvZmlsdGVycy1wYW5lbC9jb21wb25lbnRzL2FnZ3JlZ2F0aW9uLWRhdGUtbGlzdC9hZ2dyZWdhdGlvbi1kYXRlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsSUFBSSxFQUVKLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFhLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGtCQUFr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Q1g7S0FDRCxpRENyQ0YsK21IQXVGQTs0RkQ3Q2EsNEJBQTRCO2tCQXRCeEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxXQUFXLEVBQUUsd0NBQXdDO29CQUNyRCxTQUFTLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQztvQkFDckQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxPQUFPO29CQUNoRCxTQUFTLEVBQUU7d0JBQ1Y7NEJBQ0MsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLENBQUM7NEJBQzNELEtBQUssRUFBRSxJQUFJO3lCQUNYO3dCQUNEOzRCQUNDLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw2QkFBNkIsQ0FBQzs0QkFDM0QsS0FBSyxFQUFFLElBQUk7eUJBQ1g7cUJBQ0Q7b0JBQ0QsSUFBSSxFQUFFO3dCQUNMLEtBQUssRUFBRSxrQkFBa0I7cUJBQ3pCO2lCQUNEOzhCQVFRLGlCQUFpQjtzQkFIeEIsUUFBUTs7c0JBQ1IsSUFBSTs7c0JBQ0osUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuXHRDb21wb25lbnQsXHJcblx0RWxlbWVudFJlZixcclxuXHRmb3J3YXJkUmVmLFxyXG5cdEhvc3QsXHJcblx0T25Jbml0LFxyXG5cdE9wdGlvbmFsLFxyXG5cdFJlbmRlcmVyMixcclxuXHRTa2lwU2VsZixcclxuXHRWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VBZ2dyZWdhdGlvbkZpZWxkIH0gZnJvbSAnLi4vLi4vYmFzZSc7XHJcbmltcG9ydCB7IERBVEVfTElTVF9WSUVXLCBGSUVMRF9TRU5EX01PREUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBGaWVsZFZhbHVlT2JqZWN0IH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgaXNGaWVsZFZhbHVlT2JqZWN0LCBOeFFMIH0gZnJvbSAnLi4vLi4vdXRpbGl0eSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2FnZ3JlZ2F0aW9uLWRhdGUtbGlzdCcsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2FnZ3JlZ2F0aW9uLWRhdGUtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vYWdncmVnYXRpb24tZGF0ZS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXHJcblx0cHJvdmlkZXJzOiBbXHJcblx0XHR7XHJcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBZ2dyZWdhdGlvbkRhdGVMaXN0Q29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWVcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcblx0XHRcdHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFnZ3JlZ2F0aW9uRGF0ZUxpc3RDb21wb25lbnQpLFxyXG5cdFx0XHRtdWx0aTogdHJ1ZVxyXG5cdFx0fVxyXG5cdF0sXHJcblx0aG9zdDoge1xyXG5cdFx0Y2xhc3M6ICdmaWx0ZXItZGF0ZS1saXN0J1xyXG5cdH1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uRGF0ZUxpc3RDb21wb25lbnRcclxuXHRleHRlbmRzIEJhc2VBZ2dyZWdhdGlvbkZpZWxkPCdkYXRlTGlzdCcsIHN0cmluZ1tdIHwgRmllbGRWYWx1ZU9iamVjdDxzdHJpbmc+PlxyXG5cdGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuXHRAT3B0aW9uYWwoKVxyXG5cdEBIb3N0KClcclxuXHRAU2tpcFNlbGYoKVxyXG5cdHByaXZhdGUgX2NvbnRyb2xDb250YWluZXIgPSB0aGlzLmluamVjdG9yLmdldChDb250cm9sQ29udGFpbmVyKTtcclxuXHRwcml2YXRlIF9yZW5kZXJlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJlbmRlcmVyMik7XHJcblx0cHJpdmF0ZSBfZWwgPSB0aGlzLmluamVjdG9yLmdldChFbGVtZW50UmVmKTtcclxuXHJcblx0bWluTWF4RGF0ZUN0cmwgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCk7XHJcblx0c2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWwoZmFsc2UsIFtdKTtcclxuXHJcblx0aW50ZXJuYWxWYWx1ZTogYW55O1xyXG5cclxuXHR2aWV3TGF5b3V0ID0gREFURV9MSVNUX1ZJRVc7XHJcblxyXG5cdHdyaXRlVmFsdWUob2JqOiBzdHJpbmdbXSB8IEZpZWxkVmFsdWVPYmplY3QpOiB2b2lkIHtcclxuXHRcdGlmIChvYmopIHtcclxuXHRcdFx0dGhpcy5faW5pdFZhbHVlKG9iaik7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzRmllbGREaXJ0eSkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XHJcblx0XHRcdHRoaXMuaW50ZXJuYWxWYWx1ZSA9IG51bGw7XHJcblx0XHRcdHRoaXMuX2lzRmllbGREaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLm1pbk1heERhdGVDdHJsLnJlc2V0KHVuZGVmaW5lZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfaW5pdFZhbHVlKG9iajogc3RyaW5nW10gfCBGaWVsZFZhbHVlT2JqZWN0PGFueT4pIHtcclxuXHRcdGlmICghaXNGaWVsZFZhbHVlT2JqZWN0KG9iaikpIHtcclxuXHRcdFx0dGhpcy5faGFuZGxlU2VsZWN0aW9uKG9iaik7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHsgbWluLCBtYXgsIHZhbHVlIH0gPSBvYmogYXMgRmllbGRWYWx1ZU9iamVjdDtcclxuXHRcdGlmIChtaW4gfHwgbWF4KSB7XHJcblx0XHRcdHRoaXMubWluTWF4RGF0ZUN0cmwucGF0Y2hWYWx1ZSh7IG1pbiwgbWF4IH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuX2hhbmRsZVNlbGVjdGlvbih2YWx1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIF9oYW5kbGVTZWxlY3Rpb24odmFsdWVzOiBhbnkpIHtcclxuXHRcdHRoaXMuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlcztcclxuXHJcblx0XHRpZiAodGhpcy5faXNMaXN0KCkpIHtcclxuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgPyB2YWx1ZXMgOiBbdmFsdWVzXTtcclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4uc2VsZWN0ZWRWYWx1ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLl9hcHBlbmRNaW5NYXhDb250cm9sKCk7XHJcblx0XHR0aGlzLl9hZGRTZWxlY3Rpb25MaXN0ZW5lcigpO1xyXG5cdFx0dGhpcy5fYWRkTWluTWF4TGlzdGVuZXIoKTtcclxuXHRcdHRoaXMuX3VwZGF0ZVZpc2liaWxpdHkoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZVZhbHVlU2VsZWN0aW9uKHZhbHVlOiBzdHJpbmdbXSkge1xyXG5cdFx0dGhpcy5fb25DaGFuZ2UodmFsdWUpO1xyXG5cdFx0aWYgKHRoaXMucmVuZGVyT3B0aW9ucy5taW5NYXgpIHtcclxuXHRcdFx0Y29uc3QgX2VtaXRFdmVudCA9IHRoaXMuZmllbGRDb25maWc/LnNlbmRNb2RlID09PSBGSUVMRF9TRU5EX01PREUucXVlcnlQYXJhbTtcclxuXHRcdFx0dGhpcy5fcmVzZXRNaW5NYXhDdHJsKF9lbWl0RXZlbnQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dXBkYXRlU2VsZWN0VmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy51cGRhdGVWYWx1ZVNlbGVjdGlvbihbdmFsdWVdKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZVZhbHVlTWluTWF4KHZhbHVlOiB7IG1pbjogc3RyaW5nOyBtYXg6IHN0cmluZyB9KSB7XHJcblx0XHRjb25zdCBfaGFzRGF0YSA9IHZhbHVlPy5taW4gfHwgdmFsdWU/Lm1heDtcclxuXHRcdGlmICghX2hhc0RhdGEpIHtcclxuXHRcdFx0dGhpcy5fb25DaGFuZ2UodmFsdWUpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLl9pbnRlcm5hbFJlc2V0KCk7XHJcblx0XHR0aGlzLl9pc0ZpZWxkRGlydHkgPSAhIV9oYXNEYXRhO1xyXG5cdFx0aWYgKHRoaXMuX2lzVmFsdWVPYmplY3QoKSkge1xyXG5cdFx0XHRjb25zdCBfb3BlcmF0b3IgPSBOeFFMLl9nZXRSYW5nZU9wZXJhdG9yKHZhbHVlKTtcclxuXHRcdFx0Y29uc3QgX3ZhbCA9IE54UUwuX2dldFZhbHVlUmFuZ2UodmFsdWUsICdEQVRFJywgX29wZXJhdG9yKTtcclxuXHRcdFx0dGhpcy5fb25DaGFuZ2UoX3ZhbCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuXHRcdHRoaXMuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xyXG5cdFx0dGhpcy5fb25DaGFuZ2UodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJTZWxlY3RlZCgpIHtcclxuXHRcdHRoaXMuX2ludGVybmFsUmVzZXQoKTtcclxuXHRcdHRoaXMuX29uQ2hhbmdlKG51bGwpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfYXBwZW5kTWluTWF4Q29udHJvbCgpIHtcclxuXHRcdGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcblx0XHRpZiAoIXRoaXMucmVuZGVyT3B0aW9ucy5taW5NYXggfHwgIWZvcm1Hcm91cCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuX2lzU2VuZEFzUXVlcnlQYXJhbXMoKSkge1xyXG5cdFx0XHRmb3JtR3JvdXAuYWRkQ29udHJvbChgJHt0aGlzLmZpZWxkQ29uZmlnLmFnZ3JlZ2F0aW9ufV9fbWluTWF4RGF0ZWAsIHRoaXMubWluTWF4RGF0ZUN0cmwpO1xyXG5cdFx0XHR0aGlzLm1pbk1heERhdGVDdHJsLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChfOiB7IG1pbjogc3RyaW5nOyBtYXg6IHN0cmluZyB9KSA9PiB7XHJcblx0XHRcdFx0dGhpcy5faW50ZXJuYWxSZXNldCgpO1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlVmFsdWUobnVsbCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfYWRkTWluTWF4TGlzdGVuZXIoKSB7XHJcblx0XHRpZiAoW0ZJRUxEX1NFTkRfTU9ERS5jdXN0b20sIEZJRUxEX1NFTkRfTU9ERS5wYXlsb2FkXS5pbmNsdWRlcyh0aGlzLmZpZWxkQ29uZmlnPy5zZW5kTW9kZSBhcyBhbnkpKSB7XHJcblx0XHRcdHRoaXMubWluTWF4RGF0ZUN0cmwudmFsdWVDaGFuZ2VzXHJcblx0XHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKHZhbHVlOiB7IG1pbjogc3RyaW5nOyBtYXg6IHN0cmluZyB9KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVZhbHVlTWluTWF4KHZhbHVlKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX2FkZFNlbGVjdGlvbkxpc3RlbmVyKCkge1xyXG5cdFx0aWYgKCEhdGhpcy5yZW5kZXJPcHRpb25zLnZpZXcgJiYgdGhpcy5yZW5kZXJPcHRpb25zLnZpZXcgIT09IERBVEVfTElTVF9WSUVXLmxpc3QpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXHJcblx0XHRcdC5hc09ic2VydmFibGUoKVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoKGRhdGEpID0+IGRhdGEuc291cmNlLnNlbGVjdGVkKSxcclxuXHRcdFx0XHR0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuXHRcdFx0KVxyXG5cdFx0XHQuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nW10pID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5yZW5kZXJPcHRpb25zLm1pbk1heCkge1xyXG5cdFx0XHRcdFx0dGhpcy5fcmVzZXRNaW5NYXhDdHJsKGZhbHNlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy51cGRhdGVWYWx1ZVNlbGVjdGlvbih2YWx1ZSk7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfcmVzZXRNaW5NYXhDdHJsKGVtaXRFdmVudCA9IHRydWUpIHtcclxuXHRcdHRoaXMubWluTWF4RGF0ZUN0cmwucmVzZXQobnVsbCwge1xyXG5cdFx0XHRlbWl0RXZlbnQ6IGVtaXRFdmVudFxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIF9pbnRlcm5hbFJlc2V0KCkge1xyXG5cdFx0dGhpcy5pbnRlcm5hbFZhbHVlID0gbnVsbDtcclxuXHRcdHRoaXMuc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX29uQ2hhbmdlKHZhbHVlOiBhbnkpIHtcclxuXHRcdHRoaXMuX2lzRmllbGREaXJ0eSA9ICEhdmFsdWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX2lzRHJvcGRvd24oKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZW5kZXJPcHRpb25zPy52aWV3ID09IERBVEVfTElTVF9WSUVXLmRyb3Bkb3duO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfaXNMaXN0KCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVuZGVyT3B0aW9ucz8udmlldyA9PSBEQVRFX0xJU1RfVklFVy5saXN0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfdXBkYXRlVmlzaWJpbGl0eSgpIHtcclxuXHRcdHRoaXMuX29wdGlvbnNTdWJcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0bWFwKChkYXRhKSA9PiBkYXRhLnNvbWUoKGl0ZW0pID0+ICEhaXRlbT8uY291bnQpKSxcclxuXHRcdFx0XHR0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuXHRcdFx0KVxyXG5cdFx0XHQuc3Vic2NyaWJlKChoYXNEYXRhKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZWwgPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50O1xyXG5cdFx0XHRcdGlmIChoYXNEYXRhKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ2Rpc3BsYXknKTtcclxuXHRcdFx0XHRcdHRoaXMuX3JlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShlbCwgJ2hpZGRlbicpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLl9yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWwsICdoaWRkZW4nLCAndHJ1ZScpO1xyXG5cdFx0XHRcdFx0dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwib3B0aW9ucyQgfCBhc3luYyBhcyBvcHRpb25zXCI+XHJcblx0PGZpZWxkLWhlYWRlciAqbmdJZj1cImZpZWxkQ29uZmlnLmxhYmVsICYmICFyZW5kZXJPcHRpb25zPy5oaWRlTGFiZWxcIiBjbGFzcz1cImZpbHRlci1kYXRlLWxpc3RfX2xhYmVsXCI+e3tcclxuXHRcdGZpZWxkQ29uZmlnLmxhYmVsIHwgdHJhbnNsYXRlXHJcblx0fX08L2ZpZWxkLWhlYWRlcj5cclxuXHJcblx0PGRpdiBjbGFzcz1cImZpbHRlci1kYXRlLWxpc3RfX3dyYXBwZXJcIj5cclxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVuZGVyT3B0aW9ucz8udmlldyB8fCByZW5kZXJPcHRpb25zLnZpZXcgPT09IHZpZXdMYXlvdXQubGlzdFwiPlxyXG5cdFx0XHQ8bWF0LXJhZGlvLWJ1dHRvblxyXG5cdFx0XHRcdGNsYXNzPVwiZmlsdGVyLWRhdGUtbGlzdF9faXRlbVwiXHJcblx0XHRcdFx0Km5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyBpbmRleCBhcyBpbmRleFwiXHJcblx0XHRcdFx0W2NoZWNrZWRdPVwic2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChvcHRpb24udmFsdWUpXCJcclxuXHRcdFx0XHQoY2hhbmdlKT1cInNlbGVjdGlvbk1vZGVsLnRvZ2dsZShvcHRpb24udmFsdWUpXCJcclxuXHRcdFx0XHRbY2xhc3MuY2hlY2tlZEJveF09XCJzZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKG9wdGlvbi52YWx1ZSlcIlxyXG5cdFx0XHRcdFtjbGFzcy51bkNoZWNrZWRCb3hdPVwiIXNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQob3B0aW9uLnZhbHVlKVwiXHJcblx0XHRcdD5cclxuXHRcdFx0XHQ8bmctY29udGFpbmVyXHJcblx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VGVtcGxhdGUgfHwgZGVmYXVsdFRlbXBsYXRlXCJcclxuXHRcdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uLCBmaWVsZENvbmZpZywgYWdncmVnYXRpb24gfVwiXHJcblx0XHRcdFx0PjwvbmctY29udGFpbmVyPlxyXG5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cclxuXHRcdFx0XHRcdDxmaWx0ZXItb3B0aW9uLXRleHRcclxuXHRcdFx0XHRcdFx0W29wdGlvbl09XCJvcHRpb25cIlxyXG5cdFx0XHRcdFx0XHRbbGFuZ3VhZ2VdPVwibGFuZ3VhZ2VcIlxyXG5cdFx0XHRcdFx0XHRbc2hvd0NvdW50XT1cInJlbmRlck9wdGlvbnM/LnNob3dUb3RhbFwiXHJcblx0XHRcdFx0XHQ+PC9maWx0ZXItb3B0aW9uLXRleHQ+XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0PC9tYXQtcmFkaW8tYnV0dG9uPlxyXG5cclxuXHRcdFx0PGJ1dHRvbiAqbmdJZj1cInNlbGVjdGlvbk1vZGVsLmhhc1ZhbHVlKClcIiBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJtYi0yXCIgKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWQoKVwiPlxyXG5cdFx0XHRcdHt7ICdGSUxURVJTLmNsZWFyJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHQ8L2J1dHRvbj5cclxuXHRcdDwvbmctY29udGFpbmVyPlxyXG5cclxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW5kZXJPcHRpb25zLnZpZXcgPT09IHZpZXdMYXlvdXQuZHJvcGRvd25cIj5cclxuXHRcdFx0PG5nLXNlbGVjdFxyXG5cdFx0XHRcdGNsYXNzPVwiZmlsdGVyLWRhdGUtbGlzdF9fc2VsZWN0XCJcclxuXHRcdFx0XHRbaXRlbXNdPVwib3B0aW9uc1wiXHJcblx0XHRcdFx0YmluZFZhbHVlPVwidmFsdWVcIlxyXG5cdFx0XHRcdFttdWx0aXBsZV09XCJmYWxzZVwiXHJcblx0XHRcdFx0W25nTW9kZWxdPVwiaW50ZXJuYWxWYWx1ZVwiXHJcblx0XHRcdFx0KG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlU2VsZWN0VmFsdWUoJGV2ZW50KVwiXHJcblx0XHRcdFx0W25vdEZvdW5kVGV4dF09XCJlbXB0eVBsYWNlaG9sZGVyIHx8ICdTRUxFQ1Qubm90Rm91bmRUZXh0JyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cIidTRUxFQ1QucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRbY2xlYXJBbGxUZXh0XT1cIidTRUxFQ1QuY2xlYXJBbGxUZXh0JyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0W3R5cGVUb1NlYXJjaFRleHRdPVwiJ1NFTEVDVC50eXBlVG9TZWFyY2hUZXh0JyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0W3NlYXJjaGFibGVdPVwiZmFsc2VcIlxyXG5cdFx0XHQ+XHJcblx0XHRcdFx0PG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcblx0XHRcdFx0XHQ8bmctY29udGFpbmVyXHJcblx0XHRcdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRUZW1wbGF0ZSB8fCBkZWZhdWx0VGVtcGxhdGVcIlxyXG5cdFx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0sIGZpZWxkQ29uZmlnLCBhZ2dyZWdhdGlvbiB9XCJcclxuXHRcdFx0XHRcdD48L25nLWNvbnRhaW5lcj5cclxuXHJcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0PGZpbHRlci1vcHRpb24tdGV4dFxyXG5cdFx0XHRcdFx0XHRcdFtvcHRpb25dPVwiaXRlbVwiXHJcblx0XHRcdFx0XHRcdFx0W2xhbmd1YWdlXT1cImxhbmd1YWdlXCJcclxuXHRcdFx0XHRcdFx0XHRbc2hvd0NvdW50XT1cInJlbmRlck9wdGlvbnM/LnNob3dUb3RhbFwiXHJcblx0XHRcdFx0XHRcdD48L2ZpbHRlci1vcHRpb24tdGV4dD5cclxuXHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHJcblx0XHRcdFx0PG5nLXRlbXBsYXRlIG5nLW11bHRpLWxhYmVsLXRtcCBsZXQtaXRlbXM9XCJpdGVtc1wiIGxldC1jbGVhcj1cImNsZWFyXCI+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCIgY2xhc3M9XCJuZy12YWx1ZVwiPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWxhYmVsXCI+e3sgaXRlbSB8IGxvY2FsaXplZExhYmVsIDogbGFuZ3VhZ2UgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDxidXR0b24gY2xhc3M9XCJuZy12YWx1ZS1pY29uIGxlZnRcIiAoY2xpY2spPVwiY2xlYXIoaXRlbSlcIiBhcmlhLWhpZGRlbj1cInRydWVcIj7DlzwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHJcblx0XHRcdFx0PG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuXHRcdFx0XHRcdDxmaWx0ZXItb3B0aW9uLXRleHRcclxuXHRcdFx0XHRcdFx0W29wdGlvbl09XCJpdGVtXCJcclxuXHRcdFx0XHRcdFx0W2xhbmd1YWdlXT1cImxhbmd1YWdlXCJcclxuXHRcdFx0XHRcdFx0W3Nob3dDb3VudF09XCJyZW5kZXJPcHRpb25zPy5zaG93VG90YWxcIlxyXG5cdFx0XHRcdFx0PjwvZmlsdGVyLW9wdGlvbi10ZXh0PlxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdDwvbmctc2VsZWN0PlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdFx0PGZpbHRlci1kYXRlLXJhbmdlXHJcblx0XHRcdGNsYXNzPVwiZmlsdGVyLWRhdGUtbGlzdF9fcmFuZ2VcIlxyXG5cdFx0XHQqbmdJZj1cInJlbmRlck9wdGlvbnM/Lm1pbk1heFwiXHJcblx0XHRcdFtmb3JtQ29udHJvbF09XCJtaW5NYXhEYXRlQ3RybFwiXHJcblx0XHQ+PC9maWx0ZXItZGF0ZS1yYW5nZT5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==