@inobeta/ui 18.0.1-build.1722007687

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 (369) hide show
  1. package/README.md +1 -0
  2. package/_index.scss +1 -0
  3. package/esm2022/inobeta-ui.mjs +5 -0
  4. package/esm2022/public_api.mjs +17 -0
  5. package/esm2022/src/app/inobeta-ui/core/filter.pipe.mjs +23 -0
  6. package/esm2022/src/app/inobeta-ui/core/index.mjs +2 -0
  7. package/esm2022/src/app/inobeta-ui/http/auth/guard.service.mjs +157 -0
  8. package/esm2022/src/app/inobeta-ui/http/auth/login.service.mjs +137 -0
  9. package/esm2022/src/app/inobeta-ui/http/auth/login.service.stub.spec.mjs +20 -0
  10. package/esm2022/src/app/inobeta-ui/http/auth/session.model.mjs +16 -0
  11. package/esm2022/src/app/inobeta-ui/http/http/auth.interceptor.mjs +79 -0
  12. package/esm2022/src/app/inobeta-ui/http/http/error.interceptor.mjs +76 -0
  13. package/esm2022/src/app/inobeta-ui/http/http/loader.interceptor.mjs +45 -0
  14. package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton-container.component.mjs +36 -0
  15. package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.component.mjs +34 -0
  16. package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.directive.mjs +66 -0
  17. package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.directive.stub.spec.mjs +22 -0
  18. package/esm2022/src/app/inobeta-ui/http/http/messages.decorator.mjs +42 -0
  19. package/esm2022/src/app/inobeta-ui/http/http/role-check.directive.mjs +45 -0
  20. package/esm2022/src/app/inobeta-ui/http/http/spinner-loading.component.mjs +28 -0
  21. package/esm2022/src/app/inobeta-ui/http/http/spinner-loading.stub.spec.mjs +15 -0
  22. package/esm2022/src/app/inobeta-ui/http/http-test.module.mjs +35 -0
  23. package/esm2022/src/app/inobeta-ui/http/http.module.mjs +178 -0
  24. package/esm2022/src/app/inobeta-ui/http/index.mjs +26 -0
  25. package/esm2022/src/app/inobeta-ui/http/store/index.mjs +11 -0
  26. package/esm2022/src/app/inobeta-ui/http/store/loader/actions.mjs +7 -0
  27. package/esm2022/src/app/inobeta-ui/http/store/loader/interfaces.mjs +2 -0
  28. package/esm2022/src/app/inobeta-ui/http/store/loader/reducers.mjs +35 -0
  29. package/esm2022/src/app/inobeta-ui/http/store/loader/selectors.mjs +9 -0
  30. package/esm2022/src/app/inobeta-ui/http/store/session/actions.mjs +17 -0
  31. package/esm2022/src/app/inobeta-ui/http/store/session/effects.mjs +50 -0
  32. package/esm2022/src/app/inobeta-ui/http/store/session/interfaces.mjs +2 -0
  33. package/esm2022/src/app/inobeta-ui/http/store/session/reducers.mjs +12 -0
  34. package/esm2022/src/app/inobeta-ui/http/store/session/selectors.mjs +22 -0
  35. package/esm2022/src/app/inobeta-ui/http/translations.mjs +13 -0
  36. package/esm2022/src/app/inobeta-ui/hydration/actions.mjs +3 -0
  37. package/esm2022/src/app/inobeta-ui/hydration/effects.mjs +45 -0
  38. package/esm2022/src/app/inobeta-ui/hydration/index.mjs +21 -0
  39. package/esm2022/src/app/inobeta-ui/hydration/reducer.mjs +36 -0
  40. package/esm2022/src/app/inobeta-ui/storage/index.mjs +4 -0
  41. package/esm2022/src/app/inobeta-ui/storage/storage-test.module.mjs +23 -0
  42. package/esm2022/src/app/inobeta-ui/storage/storage.module.mjs +22 -0
  43. package/esm2022/src/app/inobeta-ui/storage/storage.service.mjs +105 -0
  44. package/esm2022/src/app/inobeta-ui/storage/storage.stub.spec.mjs +8 -0
  45. package/esm2022/src/app/inobeta-ui/translate/index.mjs +2 -0
  46. package/esm2022/src/app/inobeta-ui/translate/translate-loader.service.mjs +37 -0
  47. package/esm2022/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.component.mjs +63 -0
  48. package/esm2022/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.module.mjs +44 -0
  49. package/esm2022/src/app/inobeta-ui/ui/breadcrumb/index.mjs +4 -0
  50. package/esm2022/src/app/inobeta-ui/ui/breadcrumb/material-breadcrumb/material-breadcrumb.component.mjs +16 -0
  51. package/esm2022/src/app/inobeta-ui/ui/data-export/data-export.module.mjs +92 -0
  52. package/esm2022/src/app/inobeta-ui/ui/data-export/data-export.service.mjs +83 -0
  53. package/esm2022/src/app/inobeta-ui/ui/data-export/formats/csv-export.service.mjs +42 -0
  54. package/esm2022/src/app/inobeta-ui/ui/data-export/formats/pdf-export.service.mjs +66 -0
  55. package/esm2022/src/app/inobeta-ui/ui/data-export/formats/xlsx-export.service.mjs +26 -0
  56. package/esm2022/src/app/inobeta-ui/ui/data-export/index.mjs +10 -0
  57. package/esm2022/src/app/inobeta-ui/ui/data-export/provider.mjs +3 -0
  58. package/esm2022/src/app/inobeta-ui/ui/data-export/table-data-export-dialog.component.mjs +113 -0
  59. package/esm2022/src/app/inobeta-ui/ui/data-export/table-data-export.component.mjs +58 -0
  60. package/esm2022/src/app/inobeta-ui/ui/data-export/transformer.mjs +68 -0
  61. package/esm2022/src/app/inobeta-ui/ui/forms/array/array.mjs +26 -0
  62. package/esm2022/src/app/inobeta-ui/ui/forms/controls/checkbox.mjs +5 -0
  63. package/esm2022/src/app/inobeta-ui/ui/forms/controls/dropdown.mjs +5 -0
  64. package/esm2022/src/app/inobeta-ui/ui/forms/controls/form-control-base.mjs +80 -0
  65. package/esm2022/src/app/inobeta-ui/ui/forms/controls/radio.mjs +5 -0
  66. package/esm2022/src/app/inobeta-ui/ui/forms/controls/textbox.mjs +5 -0
  67. package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form/dynamic-form.component.mjs +118 -0
  68. package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form-array/dynamic-form-array.component.mjs +46 -0
  69. package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form-control/dynamic-form-control.component.mjs +28 -0
  70. package/esm2022/src/app/inobeta-ui/ui/forms/form-control.service.mjs +57 -0
  71. package/esm2022/src/app/inobeta-ui/ui/forms/forms.module.mjs +36 -0
  72. package/esm2022/src/app/inobeta-ui/ui/forms/forms.pipes.mjs +41 -0
  73. package/esm2022/src/app/inobeta-ui/ui/forms/forms.types.mjs +2 -0
  74. package/esm2022/src/app/inobeta-ui/ui/forms/index.mjs +12 -0
  75. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-action-group.component.mjs +14 -0
  76. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-button.component.mjs +31 -0
  77. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter.component.mjs +149 -0
  78. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter.types.mjs +30 -0
  79. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/base/filter-base.mjs +83 -0
  80. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/boolean/boolean-filter.component.mjs +48 -0
  81. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/date/filter-date.component.mjs +284 -0
  82. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/number/filter-number.component.mjs +111 -0
  83. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/search-bar/search-bar.component.mjs +99 -0
  84. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/tag/filter-tag.component.mjs +106 -0
  85. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/text/filter-text.component.mjs +98 -0
  86. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters.mjs +109 -0
  87. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters.module.mjs +175 -0
  88. package/esm2022/src/app/inobeta-ui/ui/kai-filter/index.mjs +14 -0
  89. package/esm2022/src/app/inobeta-ui/ui/kai-filter/tokens.mjs +3 -0
  90. package/esm2022/src/app/inobeta-ui/ui/kai-filter/translations.mjs +51 -0
  91. package/esm2022/src/app/inobeta-ui/ui/kai-table/action.mjs +48 -0
  92. package/esm2022/src/app/inobeta-ui/ui/kai-table/cells.mjs +212 -0
  93. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/action-column.mjs +23 -0
  94. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/column.mjs +260 -0
  95. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/date-column.mjs +93 -0
  96. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/index.mjs +7 -0
  97. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/number-column.mjs +112 -0
  98. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/selection-column.mjs +149 -0
  99. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/text-column.mjs +90 -0
  100. package/esm2022/src/app/inobeta-ui/ui/kai-table/index.mjs +13 -0
  101. package/esm2022/src/app/inobeta-ui/ui/kai-table/paginator-intl.mjs +53 -0
  102. package/esm2022/src/app/inobeta-ui/ui/kai-table/remote-data-source.mjs +73 -0
  103. package/esm2022/src/app/inobeta-ui/ui/kai-table/rowgroup.mjs +17 -0
  104. package/esm2022/src/app/inobeta-ui/ui/kai-table/sort-header.mjs +37 -0
  105. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/const.mjs +2 -0
  106. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/index.mjs +9 -0
  107. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/actions.mjs +13 -0
  108. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/effects.mjs +47 -0
  109. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/interfaces.mjs +2 -0
  110. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/reducers.mjs +56 -0
  111. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/selectors.mjs +19 -0
  112. package/esm2022/src/app/inobeta-ui/ui/kai-table/table-data-source.mjs +450 -0
  113. package/esm2022/src/app/inobeta-ui/ui/kai-table/table-url.service.mjs +129 -0
  114. package/esm2022/src/app/inobeta-ui/ui/kai-table/table.component.mjs +260 -0
  115. package/esm2022/src/app/inobeta-ui/ui/kai-table/table.module.mjs +150 -0
  116. package/esm2022/src/app/inobeta-ui/ui/kai-table/table.types.mjs +2 -0
  117. package/esm2022/src/app/inobeta-ui/ui/kai-table/tokens.mjs +13 -0
  118. package/esm2022/src/app/inobeta-ui/ui/kai-table/translations.mjs +41 -0
  119. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.component.mjs +120 -0
  120. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.stub.spec.mjs +38 -0
  121. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-dialog/main-menu-dialog.component.mjs +48 -0
  122. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/header-footer-buttons.component.mjs +139 -0
  123. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/main-menu-expanded.component.mjs +41 -0
  124. package/esm2022/src/app/inobeta-ui/ui/main-menu/index.mjs +13 -0
  125. package/esm2022/src/app/inobeta-ui/ui/main-menu/main-menu-test.module.mjs +24 -0
  126. package/esm2022/src/app/inobeta-ui/ui/main-menu/main-menu.module.mjs +63 -0
  127. package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-button.model.mjs +2 -0
  128. package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-data-set.model.mjs +2 -0
  129. package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-data.model.mjs +2 -0
  130. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/autocomplete.mjs +108 -0
  131. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/button.mjs +80 -0
  132. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/checkbox.mjs +54 -0
  133. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/datepicker.mjs +96 -0
  134. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/dropdown.mjs +149 -0
  135. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/label.mjs +50 -0
  136. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/padding.mjs +26 -0
  137. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/radio.mjs +61 -0
  138. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/slide-toggle.mjs +62 -0
  139. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/textarea.mjs +63 -0
  140. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/textbox.mjs +205 -0
  141. package/esm2022/src/app/inobeta-ui/ui/material-forms/index.mjs +18 -0
  142. package/esm2022/src/app/inobeta-ui/ui/material-forms/intl/datepicker.intl.mjs +73 -0
  143. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form/material-form.component.mjs +48 -0
  144. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form/material-form.stub.spec.mjs +65 -0
  145. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-array/material-form-array.component.mjs +18 -0
  146. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-control/material-form-control.component.mjs +64 -0
  147. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-test.module.mjs +32 -0
  148. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form.module.mjs +168 -0
  149. package/esm2022/src/app/inobeta-ui/ui/material-forms/translations.mjs +26 -0
  150. package/esm2022/src/app/inobeta-ui/ui/modal/index.mjs +7 -0
  151. package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.component.mjs +76 -0
  152. package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.model.mjs +2 -0
  153. package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.service.mjs +64 -0
  154. package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.service.stub.spec.mjs +15 -0
  155. package/esm2022/src/app/inobeta-ui/ui/modal/modal-test.module.mjs +26 -0
  156. package/esm2022/src/app/inobeta-ui/ui/modal/modal.module.mjs +46 -0
  157. package/esm2022/src/app/inobeta-ui/ui/modal/translations.mjs +10 -0
  158. package/esm2022/src/app/inobeta-ui/ui/toast/index.mjs +5 -0
  159. package/esm2022/src/app/inobeta-ui/ui/toast/toast-test.module.mjs +23 -0
  160. package/esm2022/src/app/inobeta-ui/ui/toast/toast.module.mjs +21 -0
  161. package/esm2022/src/app/inobeta-ui/ui/toast/toast.service.mjs +54 -0
  162. package/esm2022/src/app/inobeta-ui/ui/toast/toast.service.stub.spec.mjs +4 -0
  163. package/esm2022/src/app/inobeta-ui/ui/uploader/index.mjs +3 -0
  164. package/esm2022/src/app/inobeta-ui/ui/uploader/uploader.component.mjs +41 -0
  165. package/esm2022/src/app/inobeta-ui/ui/uploader/uploader.module.mjs +42 -0
  166. package/esm2022/src/app/inobeta-ui/ui/views/components/default-table-view/default-table-view.component.mjs +20 -0
  167. package/esm2022/src/app/inobeta-ui/ui/views/components/index.mjs +6 -0
  168. package/esm2022/src/app/inobeta-ui/ui/views/components/table-view/table-view.component.mjs +37 -0
  169. package/esm2022/src/app/inobeta-ui/ui/views/components/table-view-group/table-view-group.component.mjs +186 -0
  170. package/esm2022/src/app/inobeta-ui/ui/views/components/view-dialog/view-dialog.component.mjs +110 -0
  171. package/esm2022/src/app/inobeta-ui/ui/views/components/view-list/view-list.component.mjs +43 -0
  172. package/esm2022/src/app/inobeta-ui/ui/views/index.mjs +5 -0
  173. package/esm2022/src/app/inobeta-ui/ui/views/store/actions.mjs +11 -0
  174. package/esm2022/src/app/inobeta-ui/ui/views/store/index.mjs +3 -0
  175. package/esm2022/src/app/inobeta-ui/ui/views/store/reducer.mjs +5 -0
  176. package/esm2022/src/app/inobeta-ui/ui/views/store/views/index.mjs +4 -0
  177. package/esm2022/src/app/inobeta-ui/ui/views/store/views/reducer.mjs +19 -0
  178. package/esm2022/src/app/inobeta-ui/ui/views/store/views/selectors.mjs +5 -0
  179. package/esm2022/src/app/inobeta-ui/ui/views/store/views/table-view.mjs +13 -0
  180. package/esm2022/src/app/inobeta-ui/ui/views/translations.mjs +34 -0
  181. package/esm2022/src/app/inobeta-ui/ui/views/view.module.mjs +98 -0
  182. package/esm2022/src/app/inobeta-ui/ui/views/view.service.mjs +137 -0
  183. package/fesm2022/inobeta-ui.mjs +8610 -0
  184. package/fesm2022/inobeta-ui.mjs.map +1 -0
  185. package/index.d.ts +5 -0
  186. package/package.json +55 -0
  187. package/public_api.d.ts +16 -0
  188. package/src/app/inobeta-ui/core/filter.pipe.d.ts +7 -0
  189. package/src/app/inobeta-ui/core/index.d.ts +1 -0
  190. package/src/app/inobeta-ui/http/auth/guard.service.d.ts +96 -0
  191. package/src/app/inobeta-ui/http/auth/login.service.d.ts +63 -0
  192. package/src/app/inobeta-ui/http/auth/login.service.stub.spec.d.ts +9 -0
  193. package/src/app/inobeta-ui/http/auth/session.model.d.ts +18 -0
  194. package/src/app/inobeta-ui/http/http/auth.interceptor.d.ts +21 -0
  195. package/src/app/inobeta-ui/http/http/error.interceptor.d.ts +18 -0
  196. package/src/app/inobeta-ui/http/http/loader.interceptor.d.ts +17 -0
  197. package/src/app/inobeta-ui/http/http/loading-skeleton-container.component.d.ts +13 -0
  198. package/src/app/inobeta-ui/http/http/loading-skeleton.component.d.ts +12 -0
  199. package/src/app/inobeta-ui/http/http/loading-skeleton.directive.d.ts +27 -0
  200. package/src/app/inobeta-ui/http/http/loading-skeleton.directive.stub.spec.d.ts +13 -0
  201. package/src/app/inobeta-ui/http/http/messages.decorator.d.ts +18 -0
  202. package/src/app/inobeta-ui/http/http/role-check.directive.d.ts +17 -0
  203. package/src/app/inobeta-ui/http/http/spinner-loading.component.d.ts +9 -0
  204. package/src/app/inobeta-ui/http/http/spinner-loading.stub.spec.d.ts +5 -0
  205. package/src/app/inobeta-ui/http/http-test.module.d.ts +8 -0
  206. package/src/app/inobeta-ui/http/http.module.d.ts +20 -0
  207. package/src/app/inobeta-ui/http/index.d.ts +23 -0
  208. package/src/app/inobeta-ui/http/store/index.d.ts +10 -0
  209. package/src/app/inobeta-ui/http/store/loader/actions.d.ts +17 -0
  210. package/src/app/inobeta-ui/http/store/loader/interfaces.d.ts +8 -0
  211. package/src/app/inobeta-ui/http/store/loader/reducers.d.ts +3 -0
  212. package/src/app/inobeta-ui/http/store/loader/selectors.d.ts +5 -0
  213. package/src/app/inobeta-ui/http/store/session/actions.d.ts +20 -0
  214. package/src/app/inobeta-ui/http/store/session/effects.d.ts +16 -0
  215. package/src/app/inobeta-ui/http/store/session/interfaces.d.ts +4 -0
  216. package/src/app/inobeta-ui/http/store/session/reducers.d.ts +3 -0
  217. package/src/app/inobeta-ui/http/store/session/selectors.d.ts +4 -0
  218. package/src/app/inobeta-ui/http/translations.d.ts +12 -0
  219. package/src/app/inobeta-ui/hydration/actions.d.ts +1 -0
  220. package/src/app/inobeta-ui/hydration/effects.d.ts +13 -0
  221. package/src/app/inobeta-ui/hydration/index.d.ts +13 -0
  222. package/src/app/inobeta-ui/hydration/reducer.d.ts +2 -0
  223. package/src/app/inobeta-ui/storage/index.d.ts +3 -0
  224. package/src/app/inobeta-ui/storage/storage-test.module.d.ts +6 -0
  225. package/src/app/inobeta-ui/storage/storage.module.d.ts +6 -0
  226. package/src/app/inobeta-ui/storage/storage.service.d.ts +62 -0
  227. package/src/app/inobeta-ui/storage/storage.stub.spec.d.ts +5 -0
  228. package/src/app/inobeta-ui/translate/index.d.ts +1 -0
  229. package/src/app/inobeta-ui/translate/translate-loader.service.d.ts +11 -0
  230. package/src/app/inobeta-ui/ui/_index.scss +87 -0
  231. package/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.component.d.ts +28 -0
  232. package/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.module.d.ts +12 -0
  233. package/src/app/inobeta-ui/ui/breadcrumb/index.d.ts +3 -0
  234. package/src/app/inobeta-ui/ui/breadcrumb/material-breadcrumb/material-breadcrumb.component.d.ts +6 -0
  235. package/src/app/inobeta-ui/ui/data-export/data-export.module.d.ts +20 -0
  236. package/src/app/inobeta-ui/ui/data-export/data-export.service.d.ts +35 -0
  237. package/src/app/inobeta-ui/ui/data-export/formats/csv-export.service.d.ts +19 -0
  238. package/src/app/inobeta-ui/ui/data-export/formats/pdf-export.service.d.ts +20 -0
  239. package/src/app/inobeta-ui/ui/data-export/formats/xlsx-export.service.d.ts +14 -0
  240. package/src/app/inobeta-ui/ui/data-export/index.d.ts +9 -0
  241. package/src/app/inobeta-ui/ui/data-export/provider.d.ts +15 -0
  242. package/src/app/inobeta-ui/ui/data-export/table-data-export-dialog.component.d.ts +23 -0
  243. package/src/app/inobeta-ui/ui/data-export/table-data-export.component.d.ts +13 -0
  244. package/src/app/inobeta-ui/ui/data-export/transformer.d.ts +50 -0
  245. package/src/app/inobeta-ui/ui/forms/array/array.d.ts +32 -0
  246. package/src/app/inobeta-ui/ui/forms/controls/checkbox.d.ts +4 -0
  247. package/src/app/inobeta-ui/ui/forms/controls/dropdown.d.ts +4 -0
  248. package/src/app/inobeta-ui/ui/forms/controls/form-control-base.d.ts +88 -0
  249. package/src/app/inobeta-ui/ui/forms/controls/radio.d.ts +4 -0
  250. package/src/app/inobeta-ui/ui/forms/controls/textbox.d.ts +4 -0
  251. package/src/app/inobeta-ui/ui/forms/dynamic-form/dynamic-form.component.d.ts +50 -0
  252. package/src/app/inobeta-ui/ui/forms/dynamic-form-array/dynamic-form-array.component.d.ts +18 -0
  253. package/src/app/inobeta-ui/ui/forms/dynamic-form-control/dynamic-form-control.component.d.ts +11 -0
  254. package/src/app/inobeta-ui/ui/forms/form-control.service.d.ts +13 -0
  255. package/src/app/inobeta-ui/ui/forms/forms.module.d.ts +12 -0
  256. package/src/app/inobeta-ui/ui/forms/forms.pipes.d.ts +20 -0
  257. package/src/app/inobeta-ui/ui/forms/forms.types.d.ts +3 -0
  258. package/src/app/inobeta-ui/ui/forms/index.d.ts +11 -0
  259. package/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-action-group.component.d.ts +5 -0
  260. package/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-button.component.d.ts +8 -0
  261. package/src/app/inobeta-ui/ui/kai-filter/filter.component.d.ts +41 -0
  262. package/src/app/inobeta-ui/ui/kai-filter/filter.types.d.ts +141 -0
  263. package/src/app/inobeta-ui/ui/kai-filter/filters/base/filter-base.d.ts +42 -0
  264. package/src/app/inobeta-ui/ui/kai-filter/filters/boolean/boolean-filter.component.d.ts +12 -0
  265. package/src/app/inobeta-ui/ui/kai-filter/filters/date/filter-date.component.d.ts +56 -0
  266. package/src/app/inobeta-ui/ui/kai-filter/filters/number/filter-number.component.d.ts +27 -0
  267. package/src/app/inobeta-ui/ui/kai-filter/filters/search-bar/search-bar.component.d.ts +16 -0
  268. package/src/app/inobeta-ui/ui/kai-filter/filters/tag/filter-tag.component.d.ts +28 -0
  269. package/src/app/inobeta-ui/ui/kai-filter/filters/text/filter-text.component.d.ts +21 -0
  270. package/src/app/inobeta-ui/ui/kai-filter/filters.d.ts +16 -0
  271. package/src/app/inobeta-ui/ui/kai-filter/filters.module.d.ts +35 -0
  272. package/src/app/inobeta-ui/ui/kai-filter/index.d.ts +13 -0
  273. package/src/app/inobeta-ui/ui/kai-filter/tokens.d.ts +2 -0
  274. package/src/app/inobeta-ui/ui/kai-filter/translations.d.ts +50 -0
  275. package/src/app/inobeta-ui/ui/kai-table/_table-theme.scss +123 -0
  276. package/src/app/inobeta-ui/ui/kai-table/action.d.ts +19 -0
  277. package/src/app/inobeta-ui/ui/kai-table/cells.d.ts +88 -0
  278. package/src/app/inobeta-ui/ui/kai-table/columns/action-column.d.ts +9 -0
  279. package/src/app/inobeta-ui/ui/kai-table/columns/column.d.ts +87 -0
  280. package/src/app/inobeta-ui/ui/kai-table/columns/date-column.d.ts +21 -0
  281. package/src/app/inobeta-ui/ui/kai-table/columns/index.d.ts +6 -0
  282. package/src/app/inobeta-ui/ui/kai-table/columns/number-column.d.ts +16 -0
  283. package/src/app/inobeta-ui/ui/kai-table/columns/selection-column.d.ts +26 -0
  284. package/src/app/inobeta-ui/ui/kai-table/columns/text-column.d.ts +16 -0
  285. package/src/app/inobeta-ui/ui/kai-table/index.d.ts +12 -0
  286. package/src/app/inobeta-ui/ui/kai-table/paginator-intl.d.ts +18 -0
  287. package/src/app/inobeta-ui/ui/kai-table/remote-data-source.d.ts +60 -0
  288. package/src/app/inobeta-ui/ui/kai-table/rowgroup.d.ts +8 -0
  289. package/src/app/inobeta-ui/ui/kai-table/sort-header.d.ts +20 -0
  290. package/src/app/inobeta-ui/ui/kai-table/store/const.d.ts +1 -0
  291. package/src/app/inobeta-ui/ui/kai-table/store/index.d.ts +8 -0
  292. package/src/app/inobeta-ui/ui/kai-table/store/url-state/actions.d.ts +59 -0
  293. package/src/app/inobeta-ui/ui/kai-table/store/url-state/effects.d.ts +15 -0
  294. package/src/app/inobeta-ui/ui/kai-table/store/url-state/interfaces.d.ts +16 -0
  295. package/src/app/inobeta-ui/ui/kai-table/store/url-state/reducers.d.ts +2 -0
  296. package/src/app/inobeta-ui/ui/kai-table/store/url-state/selectors.d.ts +3 -0
  297. package/src/app/inobeta-ui/ui/kai-table/table-data-source.d.ts +164 -0
  298. package/src/app/inobeta-ui/ui/kai-table/table-url.service.d.ts +51 -0
  299. package/src/app/inobeta-ui/ui/kai-table/table.component.d.ts +79 -0
  300. package/src/app/inobeta-ui/ui/kai-table/table.module.d.ts +30 -0
  301. package/src/app/inobeta-ui/ui/kai-table/table.types.d.ts +21 -0
  302. package/src/app/inobeta-ui/ui/kai-table/tokens.d.ts +22 -0
  303. package/src/app/inobeta-ui/ui/kai-table/translations.d.ts +40 -0
  304. package/src/app/inobeta-ui/ui/main-menu/_main-menu-theme.scss +226 -0
  305. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.component.d.ts +56 -0
  306. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.stub.spec.d.ts +18 -0
  307. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-dialog/main-menu-dialog.component.d.ts +13 -0
  308. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/header-footer-buttons.component.d.ts +9 -0
  309. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/main-menu-expanded.component.d.ts +16 -0
  310. package/src/app/inobeta-ui/ui/main-menu/index.d.ts +10 -0
  311. package/src/app/inobeta-ui/ui/main-menu/main-menu-test.module.d.ts +8 -0
  312. package/src/app/inobeta-ui/ui/main-menu/main-menu.module.d.ts +16 -0
  313. package/src/app/inobeta-ui/ui/main-menu/models/main-menu-button.model.d.ts +8 -0
  314. package/src/app/inobeta-ui/ui/main-menu/models/main-menu-data-set.model.d.ts +14 -0
  315. package/src/app/inobeta-ui/ui/main-menu/models/main-menu-data.model.d.ts +4 -0
  316. package/src/app/inobeta-ui/ui/material-forms/controls/autocomplete.d.ts +14 -0
  317. package/src/app/inobeta-ui/ui/material-forms/controls/button.d.ts +28 -0
  318. package/src/app/inobeta-ui/ui/material-forms/controls/checkbox.d.ts +10 -0
  319. package/src/app/inobeta-ui/ui/material-forms/controls/datepicker.d.ts +17 -0
  320. package/src/app/inobeta-ui/ui/material-forms/controls/dropdown.d.ts +29 -0
  321. package/src/app/inobeta-ui/ui/material-forms/controls/label.d.ts +10 -0
  322. package/src/app/inobeta-ui/ui/material-forms/controls/padding.d.ts +10 -0
  323. package/src/app/inobeta-ui/ui/material-forms/controls/radio.d.ts +10 -0
  324. package/src/app/inobeta-ui/ui/material-forms/controls/slide-toggle.d.ts +10 -0
  325. package/src/app/inobeta-ui/ui/material-forms/controls/textarea.d.ts +17 -0
  326. package/src/app/inobeta-ui/ui/material-forms/controls/textbox.d.ts +21 -0
  327. package/src/app/inobeta-ui/ui/material-forms/index.d.ts +17 -0
  328. package/src/app/inobeta-ui/ui/material-forms/intl/datepicker.intl.d.ts +25 -0
  329. package/src/app/inobeta-ui/ui/material-forms/material-form/material-form.component.d.ts +26 -0
  330. package/src/app/inobeta-ui/ui/material-forms/material-form/material-form.stub.spec.d.ts +21 -0
  331. package/src/app/inobeta-ui/ui/material-forms/material-form-array/material-form-array.component.d.ts +6 -0
  332. package/src/app/inobeta-ui/ui/material-forms/material-form-control/material-form-control.component.d.ts +19 -0
  333. package/src/app/inobeta-ui/ui/material-forms/material-form-test.module.d.ts +9 -0
  334. package/src/app/inobeta-ui/ui/material-forms/material-form.module.d.ts +49 -0
  335. package/src/app/inobeta-ui/ui/material-forms/translations.d.ts +25 -0
  336. package/src/app/inobeta-ui/ui/modal/index.d.ts +6 -0
  337. package/src/app/inobeta-ui/ui/modal/modal-message.component.d.ts +10 -0
  338. package/src/app/inobeta-ui/ui/modal/modal-message.model.d.ts +32 -0
  339. package/src/app/inobeta-ui/ui/modal/modal-message.service.d.ts +49 -0
  340. package/src/app/inobeta-ui/ui/modal/modal-message.service.stub.spec.d.ts +6 -0
  341. package/src/app/inobeta-ui/ui/modal/modal-test.module.d.ts +7 -0
  342. package/src/app/inobeta-ui/ui/modal/modal.module.d.ts +11 -0
  343. package/src/app/inobeta-ui/ui/modal/translations.d.ts +9 -0
  344. package/src/app/inobeta-ui/ui/toast/_toast-theme.scss +56 -0
  345. package/src/app/inobeta-ui/ui/toast/index.d.ts +4 -0
  346. package/src/app/inobeta-ui/ui/toast/toast-test.module.d.ts +6 -0
  347. package/src/app/inobeta-ui/ui/toast/toast.module.d.ts +7 -0
  348. package/src/app/inobeta-ui/ui/toast/toast.service.d.ts +36 -0
  349. package/src/app/inobeta-ui/ui/toast/toast.service.stub.spec.d.ts +3 -0
  350. package/src/app/inobeta-ui/ui/uploader/index.d.ts +2 -0
  351. package/src/app/inobeta-ui/ui/uploader/uploader.component.d.ts +12 -0
  352. package/src/app/inobeta-ui/ui/uploader/uploader.module.d.ts +10 -0
  353. package/src/app/inobeta-ui/ui/views/components/default-table-view/default-table-view.component.d.ts +8 -0
  354. package/src/app/inobeta-ui/ui/views/components/index.d.ts +5 -0
  355. package/src/app/inobeta-ui/ui/views/components/table-view/table-view.component.d.ts +14 -0
  356. package/src/app/inobeta-ui/ui/views/components/table-view-group/table-view-group.component.d.ts +45 -0
  357. package/src/app/inobeta-ui/ui/views/components/view-dialog/view-dialog.component.d.ts +22 -0
  358. package/src/app/inobeta-ui/ui/views/components/view-list/view-list.component.d.ts +16 -0
  359. package/src/app/inobeta-ui/ui/views/index.d.ts +4 -0
  360. package/src/app/inobeta-ui/ui/views/store/actions.d.ts +27 -0
  361. package/src/app/inobeta-ui/ui/views/store/index.d.ts +2 -0
  362. package/src/app/inobeta-ui/ui/views/store/reducer.d.ts +7 -0
  363. package/src/app/inobeta-ui/ui/views/store/views/index.d.ts +3 -0
  364. package/src/app/inobeta-ui/ui/views/store/views/reducer.d.ts +3 -0
  365. package/src/app/inobeta-ui/ui/views/store/views/selectors.d.ts +4 -0
  366. package/src/app/inobeta-ui/ui/views/store/views/table-view.d.ts +22 -0
  367. package/src/app/inobeta-ui/ui/views/translations.d.ts +33 -0
  368. package/src/app/inobeta-ui/ui/views/view.module.d.ts +23 -0
  369. package/src/app/inobeta-ui/ui/views/view.service.d.ts +40 -0
@@ -0,0 +1,284 @@
1
+ import { formatDate } from "@angular/common";
2
+ import { Component, ViewEncapsulation } from "@angular/core";
3
+ import { FormControl, FormGroup, Validators } from "@angular/forms";
4
+ import { IbDateFilterCategory, IbDateFilterPeriod, } from "../../filter.types";
5
+ import { and, gte, lte, none } from "../../filters";
6
+ import { IbFilterBase } from "../base/filter-base";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/material/core";
9
+ import * as i2 from "@ngx-translate/core";
10
+ import * as i3 from "@angular/common";
11
+ import * as i4 from "@angular/forms";
12
+ import * as i5 from "@angular/material/input";
13
+ import * as i6 from "@angular/material/form-field";
14
+ import * as i7 from "@angular/material/button";
15
+ import * as i8 from "@angular/material/select";
16
+ import * as i9 from "@angular/material/radio";
17
+ import * as i10 from "@angular/material/datepicker";
18
+ import * as i11 from "../../filter-button/filter-button.component";
19
+ import * as i12 from "../../filter-button/filter-action-group.component";
20
+ export class IbDateFilter extends IbFilterBase {
21
+ adapter;
22
+ translate;
23
+ searchCriteria = new FormGroup({
24
+ categorySelected: new FormControl(null, [Validators.required]),
25
+ within: new FormGroup({
26
+ value: new FormControl(null, [Validators.min(1)]),
27
+ period: new FormControl(IbDateFilterPeriod.MINUTES, {
28
+ nonNullable: true,
29
+ }),
30
+ }),
31
+ moreThan: new FormGroup({
32
+ value: new FormControl(null, [Validators.min(1)]),
33
+ period: new FormControl(IbDateFilterPeriod.MINUTES, {
34
+ nonNullable: true,
35
+ }),
36
+ }),
37
+ range: new FormGroup({
38
+ start: new FormControl(null),
39
+ end: new FormControl(null),
40
+ }),
41
+ });
42
+ withinPeriodOptions = [
43
+ {
44
+ displayValue: "shared.ibFilter.date.minutes",
45
+ value: IbDateFilterPeriod.MINUTES,
46
+ },
47
+ {
48
+ displayValue: "shared.ibFilter.date.hours",
49
+ value: IbDateFilterPeriod.HOURS,
50
+ },
51
+ {
52
+ displayValue: "shared.ibFilter.date.days",
53
+ value: IbDateFilterPeriod.DAYS,
54
+ },
55
+ {
56
+ displayValue: "shared.ibFilter.date.weeks",
57
+ value: IbDateFilterPeriod.WEEKS,
58
+ },
59
+ ];
60
+ moreThanPeriodOptions = [
61
+ {
62
+ displayValue: "shared.ibFilter.date.minutesAgo",
63
+ value: IbDateFilterPeriod.MINUTES,
64
+ },
65
+ {
66
+ displayValue: "shared.ibFilter.date.hoursAgo",
67
+ value: IbDateFilterPeriod.HOURS,
68
+ },
69
+ {
70
+ displayValue: "shared.ibFilter.date.daysAgo",
71
+ value: IbDateFilterPeriod.DAYS,
72
+ },
73
+ {
74
+ displayValue: "shared.ibFilter.date.weeksAgo",
75
+ value: IbDateFilterPeriod.WEEKS,
76
+ },
77
+ ];
78
+ multipliers = {
79
+ [IbDateFilterPeriod.MINUTES]: 60_000,
80
+ [IbDateFilterPeriod.HOURS]: 60_000 * 60,
81
+ [IbDateFilterPeriod.DAYS]: 60_000 * 60 * 24,
82
+ [IbDateFilterPeriod.WEEKS]: 60_000 * 60 * 24 * 7,
83
+ };
84
+ get isDirty() {
85
+ if (this.getSelected()?.invalid) {
86
+ return false;
87
+ }
88
+ if (this.isSelected(IbDateFilterCategory.WITHIN)) {
89
+ return !!this.rawValue?.within?.value;
90
+ }
91
+ if (this.isSelected(IbDateFilterCategory.MORE_THAN)) {
92
+ return !!this.rawValue?.moreThan?.value;
93
+ }
94
+ if (this.isSelected(IbDateFilterCategory.RANGE)) {
95
+ return this.rawValue?.range?.start && this.rawValue?.range?.end;
96
+ }
97
+ }
98
+ get displayValue() {
99
+ if (this.isSelected(IbDateFilterCategory.WITHIN)) {
100
+ return this.rawValue?.within?.value;
101
+ }
102
+ if (this.isSelected(IbDateFilterCategory.MORE_THAN)) {
103
+ return this.rawValue?.moreThan?.value;
104
+ }
105
+ if (this.isSelected(IbDateFilterCategory.RANGE)) {
106
+ if (!this.rawValue?.range?.start || !this.rawValue?.range?.end) {
107
+ return;
108
+ }
109
+ const start = formatDate(this.rawValue?.range?.start, "dd/MM/yyyy", "en");
110
+ const end = formatDate(this.rawValue?.range?.end, "dd/MM/yyyy", "en");
111
+ return `${start} - ${end}`;
112
+ }
113
+ return;
114
+ }
115
+ get displayPeriod() {
116
+ if (this.isSelected(IbDateFilterCategory.WITHIN)) {
117
+ return this.withinPeriodOptions.find((o) => o.value === this.rawValue?.within?.period)?.displayValue;
118
+ }
119
+ if (this.isSelected(IbDateFilterCategory.MORE_THAN)) {
120
+ return this.moreThanPeriodOptions.find((o) => o.value === this.rawValue?.moreThan?.period)?.displayValue;
121
+ }
122
+ return;
123
+ }
124
+ get displayCondition() {
125
+ if (this.isSelected(IbDateFilterCategory.WITHIN)) {
126
+ return "shared.ibFilter.date.withinTheLast";
127
+ }
128
+ if (this.isSelected(IbDateFilterCategory.MORE_THAN)) {
129
+ return "shared.ibFilter.date.moreThan";
130
+ }
131
+ if (this.isSelected(IbDateFilterCategory.RANGE)) {
132
+ return "shared.ibFilter.date.between";
133
+ }
134
+ }
135
+ constructor(adapter, translate) {
136
+ super();
137
+ this.adapter = adapter;
138
+ this.translate = translate;
139
+ this.adapter.setLocale(this.translate.currentLang);
140
+ this.translate.onTranslationChange.subscribe((ev) => {
141
+ this.adapter.setLocale(ev.lang);
142
+ });
143
+ }
144
+ isSelected(category) {
145
+ return this.searchCriteria.value.categorySelected === category;
146
+ }
147
+ getSelected() {
148
+ return this.searchCriteria?.get(this.searchCriteria.value.categorySelected);
149
+ }
150
+ applyFilter() {
151
+ this.searchCriteria.updateValueAndValidity();
152
+ if (this.getSelected()?.invalid) {
153
+ this.searchCriteria.markAllAsTouched();
154
+ return;
155
+ }
156
+ const categorySelected = this.searchCriteria?.value.categorySelected;
157
+ const patch = {
158
+ [categorySelected]: this.getSelected()?.value,
159
+ categorySelected,
160
+ };
161
+ this.clearFilter(patch);
162
+ this.filter.update();
163
+ this.button.closeMenu();
164
+ }
165
+ clearFilter(patchValue = {}) {
166
+ const defaultPeriod = {
167
+ period: IbDateFilterPeriod.MINUTES,
168
+ value: null,
169
+ };
170
+ this.searchCriteria.reset({
171
+ within: defaultPeriod,
172
+ moreThan: defaultPeriod,
173
+ ...patchValue,
174
+ });
175
+ }
176
+ clear() {
177
+ this.clearFilter();
178
+ this.filter.update();
179
+ }
180
+ getOffsetTime(value, category) {
181
+ const now = new Date();
182
+ const then = new Date();
183
+ const multiplier = this.multipliers[category.period];
184
+ then.setTime(now.getTime() - value * multiplier);
185
+ return [then, now];
186
+ }
187
+ toMidnight(date) {
188
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);
189
+ }
190
+ buildWithinCategory() {
191
+ const value = this.searchCriteria.value.within.value;
192
+ if (!value) {
193
+ return none();
194
+ }
195
+ const [then, now] = this.getOffsetTime(value, this.searchCriteria.value.within);
196
+ return and([gte(then), lte(now)]);
197
+ }
198
+ buildMoreThanCategory() {
199
+ const value = this.searchCriteria.value.moreThan.value;
200
+ if (!value) {
201
+ return none();
202
+ }
203
+ const [then] = this.getOffsetTime(value, this.searchCriteria.value.moreThan);
204
+ return lte(then);
205
+ }
206
+ buildRangeCategory() {
207
+ const start = this.searchCriteria.value.range.start;
208
+ const end = this.searchCriteria.value.range.end;
209
+ if (!start || !end) {
210
+ return none();
211
+ }
212
+ return and([gte(new Date(start)), lte(this.toMidnight(new Date(end)))]);
213
+ }
214
+ build = () => {
215
+ if (this.getSelected()?.invalid) {
216
+ return none();
217
+ }
218
+ if (this.isSelected(IbDateFilterCategory.WITHIN)) {
219
+ return this.buildWithinCategory();
220
+ }
221
+ if (this.isSelected(IbDateFilterCategory.MORE_THAN)) {
222
+ return this.buildMoreThanCategory();
223
+ }
224
+ if (this.isSelected(IbDateFilterCategory.RANGE)) {
225
+ return this.buildRangeCategory();
226
+ }
227
+ return none();
228
+ };
229
+ toQueryWithinCategory() {
230
+ const value = this.searchCriteria.value.within.value;
231
+ if (!value) {
232
+ return null;
233
+ }
234
+ const [then, now] = this.getOffsetTime(value, this.searchCriteria.value.within);
235
+ return {
236
+ start: then.toISOString(),
237
+ end: now.toISOString(),
238
+ };
239
+ }
240
+ toQueryMoreThanCategory() {
241
+ const value = this.searchCriteria.value.moreThan.value;
242
+ if (!value) {
243
+ return null;
244
+ }
245
+ const [then] = this.getOffsetTime(value, this.searchCriteria.value.moreThan);
246
+ return {
247
+ start: new Date(0).toISOString(),
248
+ end: then.toISOString(),
249
+ };
250
+ }
251
+ toQueryRangeCategory() {
252
+ const start = this.searchCriteria.value.range.start;
253
+ const end = this.searchCriteria.value.range.end;
254
+ if (!start || !end) {
255
+ return null;
256
+ }
257
+ return {
258
+ start: new Date(start).toISOString(),
259
+ end: this.toMidnight(new Date(end)).toISOString(),
260
+ };
261
+ }
262
+ toQuery() {
263
+ if (this.getSelected()?.invalid) {
264
+ return;
265
+ }
266
+ if (this.isSelected(IbDateFilterCategory.WITHIN)) {
267
+ return this.toQueryWithinCategory();
268
+ }
269
+ if (this.isSelected(IbDateFilterCategory.MORE_THAN)) {
270
+ return this.toQueryMoreThanCategory();
271
+ }
272
+ if (this.isSelected(IbDateFilterCategory.RANGE)) {
273
+ return this.toQueryRangeCategory();
274
+ }
275
+ return;
276
+ }
277
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbDateFilter, deps: [{ token: i1.DateAdapter }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
278
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", type: IbDateFilter, selector: "ib-date-filter", providers: [{ provide: IbFilterBase, useExisting: IbDateFilter }], usesInheritance: true, ngImport: i0, template: "<ib-filter-button [attr.data-cy]=\"'ib-date-filter-' + name\">\n <span ib-filter-name><ng-content></ng-content></span>\n <span ib-filter-value *ngIf=\"isDirty\">\n {{ displayCondition | translate | lowercase }} {{ displayValue }} {{ displayPeriod | translate }}\n </span>\n\n <section [formGroup]=\"filter?.form\" style=\"padding: 0.5em 1em 0 1em\">\n <section [formGroupName]=\"name\" class=\"ib-filter-date\">\n <mat-radio-group formControlName=\"categorySelected\">\n <mat-radio-button value=\"within\" [attr.data-cy]=\"'ib-date-filter-' + name + '-within'\">{{\n 'shared.ibFilter.date.withinTheLast' | translate }}</mat-radio-button>\n <section [class.ib-filter-date__form--hidden]=\"!isSelected('within')\" formGroupName=\"within\"\n class=\"ib-filter-date__form\">\n <mat-form-field style=\"width: 100%\" appearance=\"outline\">\n <input type=\"number\" matInput formControlName=\"value\"\n [attr.data-cy]=\"'ib-date-filter-' + name + '-within-value'\" />\n </mat-form-field>\n\n <mat-form-field style=\"width: 100%\">\n <mat-select formControlName=\"period\" [attr.data-cy]=\"'ib-date-filter-' + name + '-within-period'\">\n <mat-option *ngFor=\"let option of withinPeriodOptions\" [value]=\"option.value\">\n {{ option.displayValue | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </section>\n\n <mat-radio-button value=\"moreThan\" [attr.data-cy]=\"'ib-date-filter-' + name + '-moreThan'\">{{\n 'shared.ibFilter.date.moreThan' | translate }}</mat-radio-button>\n <section [class.ib-filter-date__form--hidden]=\"!isSelected('moreThan')\" formGroupName=\"moreThan\"\n class=\"ib-filter-date__form\">\n <mat-form-field style=\"width: 100%\" appearance=\"outline\">\n <input type=\"number\" matInput formControlName=\"value\"\n [attr.data-cy]=\"'ib-date-filter-' + name + '-moreThan-value'\" />\n </mat-form-field>\n\n <mat-form-field style=\"width: 100%\">\n <mat-select formControlName=\"period\" [attr.data-cy]=\"'ib-date-filter-' + name + '-moreThan-period'\">\n <mat-option *ngFor=\"let option of moreThanPeriodOptions\" [value]=\"option.value\">\n {{ option.displayValue | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </section>\n\n <mat-radio-button value=\"range\" [attr.data-cy]=\"'ib-date-filter-' + name + '-range'\">{{\n 'shared.ibFilter.date.between' | translate }}</mat-radio-button>\n <section [class.ib-filter-date__form--hidden]=\"!isSelected('range')\" formGroupName=\"range\"\n class=\"ib-filter-date__range\">\n <mat-form-field style=\"width: 100%\">\n <mat-label>{{ 'shared.ibFilter.date.dateRangeLabel' | translate }}</mat-label>\n <mat-date-range-input [rangePicker]=\"picker\">\n <input matStartDate formControlName=\"start\" placeholder=\"dd/mm/yyyy\"\n [attr.data-cy]=\"'ib-date-filter-' + name + '-range-start'\">\n <input matEndDate formControlName=\"end\" placeholder=\"dd/mm/yyyy\"\n [attr.data-cy]=\"'ib-date-filter-' + name + '-range-end'\">\n </mat-date-range-input>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n <mat-error>{{ 'shared.ibFilter.date.dateRangeInvalid' | translate }}</mat-error>\n </mat-form-field>\n </section>\n\n </mat-radio-group>\n </section>\n </section>\n\n <ib-filter-action-group>\n <button mat-button (click)=\"clear()\" [disabled]=\"!isDirty\" [attr.data-cy]=\"'ib-filter-clear'\">\n {{ \"shared.ibFilter.clear\" | translate }}\n </button>\n <button mat-button color=\"primary\" (click)=\"applyFilter()\" [attr.data-cy]=\"'ib-filter-update'\">\n {{ \"shared.ibFilter.update\" | translate }}\n </button>\n </ib-filter-action-group>\n</ib-filter-button>", styles: [".ib-filter-date mat-radio-group{display:flex;flex-direction:column}.ib-filter-date section{margin-left:32px;margin-bottom:8px}.ib-filter-date .ib-filter-date__form{display:grid;gap:16px;grid-template-columns:8ch auto}.ib-filter-date .ib-filter-date__form mat-form-field{--mat-form-field-container-height: 36px;--mat-form-field-filled-label-display: none;--mat-form-field-container-vertical-padding: 6px;--mat-form-field-filled-with-label-container-padding-top: 6px;--mat-form-field-filled-with-label-container-padding-bottom: 6px;padding-bottom:0}.ib-filter-date .ib-filter-date__form input[type=number]{appearance:textfield}.ib-filter-date .ib-filter-date__form--hidden{display:none}.ib-filter-date .ib-filter-date__range input{font-size:12px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i9.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i9.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i10.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i10.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i10.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i10.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i10.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: i11.IbFilterButton, selector: "ib-filter-button" }, { kind: "directive", type: i12.IbFilterActionGroup, selector: "ib-filter-action-group" }, { kind: "pipe", type: i3.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
279
+ }
280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbDateFilter, decorators: [{
281
+ type: Component,
282
+ args: [{ selector: "ib-date-filter", providers: [{ provide: IbFilterBase, useExisting: IbDateFilter }], encapsulation: ViewEncapsulation.None, template: "<ib-filter-button [attr.data-cy]=\"'ib-date-filter-' + name\">\n <span ib-filter-name><ng-content></ng-content></span>\n <span ib-filter-value *ngIf=\"isDirty\">\n {{ displayCondition | translate | lowercase }} {{ displayValue }} {{ displayPeriod | translate }}\n </span>\n\n <section [formGroup]=\"filter?.form\" style=\"padding: 0.5em 1em 0 1em\">\n <section [formGroupName]=\"name\" class=\"ib-filter-date\">\n <mat-radio-group formControlName=\"categorySelected\">\n <mat-radio-button value=\"within\" [attr.data-cy]=\"'ib-date-filter-' + name + '-within'\">{{\n 'shared.ibFilter.date.withinTheLast' | translate }}</mat-radio-button>\n <section [class.ib-filter-date__form--hidden]=\"!isSelected('within')\" formGroupName=\"within\"\n class=\"ib-filter-date__form\">\n <mat-form-field style=\"width: 100%\" appearance=\"outline\">\n <input type=\"number\" matInput formControlName=\"value\"\n [attr.data-cy]=\"'ib-date-filter-' + name + '-within-value'\" />\n </mat-form-field>\n\n <mat-form-field style=\"width: 100%\">\n <mat-select formControlName=\"period\" [attr.data-cy]=\"'ib-date-filter-' + name + '-within-period'\">\n <mat-option *ngFor=\"let option of withinPeriodOptions\" [value]=\"option.value\">\n {{ option.displayValue | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </section>\n\n <mat-radio-button value=\"moreThan\" [attr.data-cy]=\"'ib-date-filter-' + name + '-moreThan'\">{{\n 'shared.ibFilter.date.moreThan' | translate }}</mat-radio-button>\n <section [class.ib-filter-date__form--hidden]=\"!isSelected('moreThan')\" formGroupName=\"moreThan\"\n class=\"ib-filter-date__form\">\n <mat-form-field style=\"width: 100%\" appearance=\"outline\">\n <input type=\"number\" matInput formControlName=\"value\"\n [attr.data-cy]=\"'ib-date-filter-' + name + '-moreThan-value'\" />\n </mat-form-field>\n\n <mat-form-field style=\"width: 100%\">\n <mat-select formControlName=\"period\" [attr.data-cy]=\"'ib-date-filter-' + name + '-moreThan-period'\">\n <mat-option *ngFor=\"let option of moreThanPeriodOptions\" [value]=\"option.value\">\n {{ option.displayValue | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </section>\n\n <mat-radio-button value=\"range\" [attr.data-cy]=\"'ib-date-filter-' + name + '-range'\">{{\n 'shared.ibFilter.date.between' | translate }}</mat-radio-button>\n <section [class.ib-filter-date__form--hidden]=\"!isSelected('range')\" formGroupName=\"range\"\n class=\"ib-filter-date__range\">\n <mat-form-field style=\"width: 100%\">\n <mat-label>{{ 'shared.ibFilter.date.dateRangeLabel' | translate }}</mat-label>\n <mat-date-range-input [rangePicker]=\"picker\">\n <input matStartDate formControlName=\"start\" placeholder=\"dd/mm/yyyy\"\n [attr.data-cy]=\"'ib-date-filter-' + name + '-range-start'\">\n <input matEndDate formControlName=\"end\" placeholder=\"dd/mm/yyyy\"\n [attr.data-cy]=\"'ib-date-filter-' + name + '-range-end'\">\n </mat-date-range-input>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n <mat-error>{{ 'shared.ibFilter.date.dateRangeInvalid' | translate }}</mat-error>\n </mat-form-field>\n </section>\n\n </mat-radio-group>\n </section>\n </section>\n\n <ib-filter-action-group>\n <button mat-button (click)=\"clear()\" [disabled]=\"!isDirty\" [attr.data-cy]=\"'ib-filter-clear'\">\n {{ \"shared.ibFilter.clear\" | translate }}\n </button>\n <button mat-button color=\"primary\" (click)=\"applyFilter()\" [attr.data-cy]=\"'ib-filter-update'\">\n {{ \"shared.ibFilter.update\" | translate }}\n </button>\n </ib-filter-action-group>\n</ib-filter-button>", styles: [".ib-filter-date mat-radio-group{display:flex;flex-direction:column}.ib-filter-date section{margin-left:32px;margin-bottom:8px}.ib-filter-date .ib-filter-date__form{display:grid;gap:16px;grid-template-columns:8ch auto}.ib-filter-date .ib-filter-date__form mat-form-field{--mat-form-field-container-height: 36px;--mat-form-field-filled-label-display: none;--mat-form-field-container-vertical-padding: 6px;--mat-form-field-filled-with-label-container-padding-top: 6px;--mat-form-field-filled-with-label-container-padding-bottom: 6px;padding-bottom:0}.ib-filter-date .ib-filter-date__form input[type=number]{appearance:textfield}.ib-filter-date .ib-filter-date__form--hidden{display:none}.ib-filter-date .ib-filter-date__range input{font-size:12px}\n"] }]
283
+ }], ctorParameters: () => [{ type: i1.DateAdapter }, { type: i2.TranslateService }] });
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9pbm9iZXRhLXVpL3VpL2thaS1maWx0ZXIvZmlsdGVycy9kYXRlL2ZpbHRlci1kYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS91aS9rYWktZmlsdGVyL2ZpbHRlcnMvZGF0ZS9maWx0ZXItZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUduQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVNuRCxNQUFNLE9BQU8sWUFBYSxTQUFRLFlBQVk7SUF3SWxDO0lBQ0E7SUF4SVYsY0FBYyxHQUFHLElBQUksU0FBUyxDQUFDO1FBQzdCLGdCQUFnQixFQUFFLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RCxNQUFNLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDcEIsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENB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SSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU87SUFDVCxDQUFDO3VHQTdVVSxZQUFZOzJGQUFaLFlBQVkseUNBSFosQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDLGlEQ2xCbkUsNm1JQTJFbUI7OzJGRHRETixZQUFZO2tCQVB4QixTQUFTOytCQUNFLGdCQUFnQixhQUdmLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsY0FBYyxFQUFFLENBQUMsaUJBQ2xELGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7XG4gIEliRGF0ZUZpbHRlckNhdGVnb3J5LFxuICBJYkRhdGVGaWx0ZXJQZXJpb2QsXG4gIEliRGF0ZVF1ZXJ5LFxuICBJYkZpbHRlckRlZixcbn0gZnJvbSBcIi4uLy4uL2ZpbHRlci50eXBlc1wiO1xuaW1wb3J0IHsgYW5kLCBndGUsIGx0ZSwgbm9uZSB9IGZyb20gXCIuLi8uLi9maWx0ZXJzXCI7XG5pbXBvcnQgeyBJYkZpbHRlckJhc2UgfSBmcm9tIFwiLi4vYmFzZS9maWx0ZXItYmFzZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiaWItZGF0ZS1maWx0ZXJcIixcbiAgdGVtcGxhdGVVcmw6IFwiZmlsdGVyLWRhdGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2ZpbHRlci1kYXRlLmNvbXBvbmVudC5zY3NzXCJdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEliRmlsdGVyQmFzZSwgdXNlRXhpc3Rpbmc6IEliRGF0ZUZpbHRlciB9XSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgSWJEYXRlRmlsdGVyIGV4dGVuZHMgSWJGaWx0ZXJCYXNlIHtcbiAgc2VhcmNoQ3JpdGVyaWEgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBjYXRlZ29yeVNlbGVjdGVkOiBuZXcgRm9ybUNvbnRyb2wobnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICB3aXRoaW46IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgdmFsdWU6IG5ldyBGb3JtQ29udHJvbChudWxsLCBbVmFsaWRhdG9ycy5taW4oMSldKSxcbiAgICAgIHBlcmlvZDogbmV3IEZvcm1Db250cm9sKEliRGF0ZUZpbHRlclBlcmlvZC5NSU5VVEVTLCB7XG4gICAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgbW9yZVRoYW46IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgdmFsdWU6IG5ldyBGb3JtQ29udHJvbChudWxsLCBbVmFsaWRhdG9ycy5taW4oMSldKSxcbiAgICAgIHBlcmlvZDogbmV3IEZvcm1Db250cm9sKEliRGF0ZUZpbHRlclBlcmlvZC5NSU5VVEVTLCB7XG4gICAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgcmFuZ2U6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcbiAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxuICAgIH0pLFxuICB9KTtcblxuICB3aXRoaW5QZXJpb2RPcHRpb25zID0gW1xuICAgIHtcbiAgICAgIGRpc3BsYXlWYWx1ZTogXCJzaGFyZWQuaWJGaWx0ZXIuZGF0ZS5taW51dGVzXCIsXG4gICAgICB2YWx1ZTogSWJEYXRlRmlsdGVyUGVyaW9kLk1JTlVURVMsXG4gICAgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5VmFsdWU6IFwic2hhcmVkLmliRmlsdGVyLmRhdGUuaG91cnNcIixcbiAgICAgIHZhbHVlOiBJYkRhdGVGaWx0ZXJQZXJpb2QuSE9VUlMsXG4gICAgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5VmFsdWU6IFwic2hhcmVkLmliRmlsdGVyLmRhdGUuZGF5c1wiLFxuICAgICAgdmFsdWU6IEliRGF0ZUZpbHRlclBlcmlvZC5EQVlTLFxuICAgIH0sXG4gICAge1xuICAgICAgZGlzcGxheVZhbHVlOiBcInNoYXJlZC5pYkZpbHRlci5kYXRlLndlZWtzXCIsXG4gICAgICB2YWx1ZTogSWJEYXRlRmlsdGVyUGVyaW9kLldFRUtTLFxuICAgIH0sXG4gIF07XG5cbiAgbW9yZVRoYW5QZXJpb2RPcHRpb25zID0gW1xuICAgIHtcbiAgICAgIGRpc3BsYXlWYWx1ZTogXCJzaGFyZWQuaWJGaWx0ZXIuZGF0ZS5taW51dGVzQWdvXCIsXG4gICAgICB2YWx1ZTogSWJEYXRlRmlsdGVyUGVyaW9kLk1JTlVURVMsXG4gICAgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5VmFsdWU6IFwic2hhcmVkLmliRmlsdGVyLmRhdGUuaG91cnNBZ29cIixcbiAgICAgIHZhbHVlOiBJYkRhdGVGaWx0ZXJQZXJpb2QuSE9VUlMsXG4gICAgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5VmFsdWU6IFwic2hhcmVkLmliRmlsdGVyLmRhdGUuZGF5c0Fnb1wiLFxuICAgICAgdmFsdWU6IEliRGF0ZUZpbHRlclBlcmlvZC5EQVlTLFxuICAgIH0sXG4gICAge1xuICAgICAgZGlzcGxheVZhbHVlOiBcInNoYXJlZC5pYkZpbHRlci5kYXRlLndlZWtzQWdvXCIsXG4gICAgICB2YWx1ZTogSWJEYXRlRmlsdGVyUGVyaW9kLldFRUtTLFxuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBtdWx0aXBsaWVycyA9IHtcbiAgICBbSWJEYXRlRmlsdGVyUGVyaW9kLk1JTlVURVNdOiA2MF8wMDAsXG4gICAgW0liRGF0ZUZpbHRlclBlcmlvZC5IT1VSU106IDYwXzAwMCAqIDYwLFxuICAgIFtJYkRhdGVGaWx0ZXJQZXJpb2QuREFZU106IDYwXzAwMCAqIDYwICogMjQsXG4gICAgW0liRGF0ZUZpbHRlclBlcmlvZC5XRUVLU106IDYwXzAwMCAqIDYwICogMjQgKiA3LFxuICB9O1xuXG4gIGdldCBpc0RpcnR5KCkge1xuICAgIGlmICh0aGlzLmdldFNlbGVjdGVkKCk/LmludmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKEliRGF0ZUZpbHRlckNhdGVnb3J5LldJVEhJTikpIHtcbiAgICAgIHJldHVybiAhIXRoaXMucmF3VmFsdWU/LndpdGhpbj8udmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChJYkRhdGVGaWx0ZXJDYXRlZ29yeS5NT1JFX1RIQU4pKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnJhd1ZhbHVlPy5tb3JlVGhhbj8udmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChJYkRhdGVGaWx0ZXJDYXRlZ29yeS5SQU5HRSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJhd1ZhbHVlPy5yYW5nZT8uc3RhcnQgJiYgdGhpcy5yYXdWYWx1ZT8ucmFuZ2U/LmVuZDtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzcGxheVZhbHVlKCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoSWJEYXRlRmlsdGVyQ2F0ZWdvcnkuV0lUSElOKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmF3VmFsdWU/LndpdGhpbj8udmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChJYkRhdGVGaWx0ZXJDYXRlZ29yeS5NT1JFX1RIQU4pKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYXdWYWx1ZT8ubW9yZVRoYW4/LnZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoSWJEYXRlRmlsdGVyQ2F0ZWdvcnkuUkFOR0UpKSB7XG4gICAgICBpZiAoIXRoaXMucmF3VmFsdWU/LnJhbmdlPy5zdGFydCB8fCAhdGhpcy5yYXdWYWx1ZT8ucmFuZ2U/LmVuZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydCA9IGZvcm1hdERhdGUodGhpcy5yYXdWYWx1ZT8ucmFuZ2U/LnN0YXJ0LCBcImRkL01NL3l5eXlcIiwgXCJlblwiKTtcbiAgICAgIGNvbnN0IGVuZCA9IGZvcm1hdERhdGUodGhpcy5yYXdWYWx1ZT8ucmFuZ2U/LmVuZCwgXCJkZC9NTS95eXl5XCIsIFwiZW5cIik7XG4gICAgICByZXR1cm4gYCR7c3RhcnR9IC0gJHtlbmR9YDtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBnZXQgZGlzcGxheVBlcmlvZCgpIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKEliRGF0ZUZpbHRlckNhdGVnb3J5LldJVEhJTikpIHtcbiAgICAgIHJldHVybiB0aGlzLndpdGhpblBlcmlvZE9wdGlvbnMuZmluZChcbiAgICAgICAgKG8pID0+IG8udmFsdWUgPT09IHRoaXMucmF3VmFsdWU/LndpdGhpbj8ucGVyaW9kXG4gICAgICApPy5kaXNwbGF5VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChJYkRhdGVGaWx0ZXJDYXRlZ29yeS5NT1JFX1RIQU4pKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb3JlVGhhblBlcmlvZE9wdGlvbnMuZmluZChcbiAgICAgICAgKG8pID0+IG8udmFsdWUgPT09IHRoaXMucmF3VmFsdWU/Lm1vcmVUaGFuPy5wZXJpb2RcbiAgICAgICk/LmRpc3BsYXlWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBnZXQgZGlzcGxheUNvbmRpdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKEliRGF0ZUZpbHRlckNhdGVnb3J5LldJVEhJTikpIHtcbiAgICAgIHJldHVybiBcInNoYXJlZC5pYkZpbHRlci5kYXRlLndpdGhpblRoZUxhc3RcIjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKEliRGF0ZUZpbHRlckNhdGVnb3J5Lk1PUkVfVEhBTikpIHtcbiAgICAgIHJldHVybiBcInNoYXJlZC5pYkZpbHRlci5kYXRlLm1vcmVUaGFuXCI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChJYkRhdGVGaWx0ZXJDYXRlZ29yeS5SQU5HRSkpIHtcbiAgICAgIHJldHVybiBcInNoYXJlZC5pYkZpbHRlci5kYXRlLmJldHdlZW5cIjtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFkYXB0ZXI6IERhdGVBZGFwdGVyPGFueT4sXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkYXB0ZXIuc2V0TG9jYWxlKHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nKTtcbiAgICB0aGlzLnRyYW5zbGF0ZS5vblRyYW5zbGF0aW9uQ2hhbmdlLnN1YnNjcmliZSgoZXYpID0+IHtcbiAgICAgIHRoaXMuYWRhcHRlci5zZXRMb2NhbGUoZXYubGFuZyk7XG4gICAgfSk7XG4gIH1cblxuICBpc1NlbGVjdGVkKGNhdGVnb3J5KSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWUuY2F0ZWdvcnlTZWxlY3RlZCA9PT0gY2F0ZWdvcnk7XG4gIH1cblxuICBnZXRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hDcml0ZXJpYT8uZ2V0KHRoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWUuY2F0ZWdvcnlTZWxlY3RlZCk7XG4gIH1cblxuICBhcHBseUZpbHRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaENyaXRlcmlhLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICBpZiAodGhpcy5nZXRTZWxlY3RlZCgpPy5pbnZhbGlkKSB7XG4gICAgICB0aGlzLnNlYXJjaENyaXRlcmlhLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYXRlZ29yeVNlbGVjdGVkID0gdGhpcy5zZWFyY2hDcml0ZXJpYT8udmFsdWUuY2F0ZWdvcnlTZWxlY3RlZDtcbiAgICBjb25zdCBwYXRjaCA9IHtcbiAgICAgIFtjYXRlZ29yeVNlbGVjdGVkXTogdGhpcy5nZXRTZWxlY3RlZCgpPy52YWx1ZSxcbiAgICAgIGNhdGVnb3J5U2VsZWN0ZWQsXG4gICAgfTtcblxuICAgIHRoaXMuY2xlYXJGaWx0ZXIocGF0Y2gpO1xuICAgIHRoaXMuZmlsdGVyLnVwZGF0ZSgpO1xuICAgIHRoaXMuYnV0dG9uLmNsb3NlTWVudSgpO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXIocGF0Y2hWYWx1ZSA9IHt9KSB7XG4gICAgY29uc3QgZGVmYXVsdFBlcmlvZCA9IHtcbiAgICAgIHBlcmlvZDogSWJEYXRlRmlsdGVyUGVyaW9kLk1JTlVURVMsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICB9O1xuICAgIHRoaXMuc2VhcmNoQ3JpdGVyaWEucmVzZXQoe1xuICAgICAgd2l0aGluOiBkZWZhdWx0UGVyaW9kLFxuICAgICAgbW9yZVRoYW46IGRlZmF1bHRQZXJpb2QsXG4gICAgICAuLi5wYXRjaFZhbHVlLFxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckZpbHRlcigpO1xuICAgIHRoaXMuZmlsdGVyLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPZmZzZXRUaW1lKHZhbHVlOiBudW1iZXIsIGNhdGVnb3J5KSB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCB0aGVuID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gdGhpcy5tdWx0aXBsaWVyc1tjYXRlZ29yeS5wZXJpb2RdO1xuXG4gICAgdGhlbi5zZXRUaW1lKG5vdy5nZXRUaW1lKCkgLSB2YWx1ZSAqIG11bHRpcGxpZXIpO1xuICAgIHJldHVybiBbdGhlbiwgbm93XTtcbiAgfVxuXG4gIHByaXZhdGUgdG9NaWRuaWdodChkYXRlOiBEYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKFxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgZGF0ZS5nZXRNb250aCgpLFxuICAgICAgZGF0ZS5nZXREYXRlKCksXG4gICAgICAyMyxcbiAgICAgIDU5LFxuICAgICAgNTksXG4gICAgICA5OTlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFdpdGhpbkNhdGVnb3J5KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWFyY2hDcml0ZXJpYS52YWx1ZS53aXRoaW4udmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5vbmUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBbdGhlbiwgbm93XSA9IHRoaXMuZ2V0T2Zmc2V0VGltZShcbiAgICAgIHZhbHVlLFxuICAgICAgdGhpcy5zZWFyY2hDcml0ZXJpYS52YWx1ZS53aXRoaW5cbiAgICApO1xuXG4gICAgcmV0dXJuIGFuZChbZ3RlKHRoZW4pLCBsdGUobm93KV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE1vcmVUaGFuQ2F0ZWdvcnkoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlLm1vcmVUaGFuLnZhbHVlO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBub25lKCk7XG4gICAgfVxuXG4gICAgY29uc3QgW3RoZW5dID0gdGhpcy5nZXRPZmZzZXRUaW1lKFxuICAgICAgdmFsdWUsXG4gICAgICB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlLm1vcmVUaGFuXG4gICAgKTtcblxuICAgIHJldHVybiBsdGUodGhlbik7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUmFuZ2VDYXRlZ29yeSgpIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWUucmFuZ2Uuc3RhcnQ7XG4gICAgY29uc3QgZW5kID0gdGhpcy5zZWFyY2hDcml0ZXJpYS52YWx1ZS5yYW5nZS5lbmQ7XG4gICAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgICByZXR1cm4gbm9uZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhbmQoW2d0ZShuZXcgRGF0ZShzdGFydCkpLCBsdGUodGhpcy50b01pZG5pZ2h0KG5ldyBEYXRlKGVuZCkpKV0pO1xuICB9XG5cbiAgYnVpbGQgPSAoKTogSWJGaWx0ZXJEZWYgPT4ge1xuICAgIGlmICh0aGlzLmdldFNlbGVjdGVkKCk/LmludmFsaWQpIHtcbiAgICAgIHJldHVybiBub25lKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChJYkRhdGVGaWx0ZXJDYXRlZ29yeS5XSVRISU4pKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZFdpdGhpbkNhdGVnb3J5KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChJYkRhdGVGaWx0ZXJDYXRlZ29yeS5NT1JFX1RIQU4pKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZE1vcmVUaGFuQ2F0ZWdvcnkoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKEliRGF0ZUZpbHRlckNhdGVnb3J5LlJBTkdFKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRSYW5nZUNhdGVnb3J5KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vbmUoKTtcbiAgfTtcblxuICBwcml2YXRlIHRvUXVlcnlXaXRoaW5DYXRlZ29yeSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWUud2l0aGluLnZhbHVlO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFt0aGVuLCBub3ddID0gdGhpcy5nZXRPZmZzZXRUaW1lKFxuICAgICAgdmFsdWUsXG4gICAgICB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlLndpdGhpblxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IHRoZW4udG9JU09TdHJpbmcoKSxcbiAgICAgIGVuZDogbm93LnRvSVNPU3RyaW5nKCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdG9RdWVyeU1vcmVUaGFuQ2F0ZWdvcnkoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlLm1vcmVUaGFuLnZhbHVlO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFt0aGVuXSA9IHRoaXMuZ2V0T2Zmc2V0VGltZShcbiAgICAgIHZhbHVlLFxuICAgICAgdGhpcy5zZWFyY2hDcml0ZXJpYS52YWx1ZS5tb3JlVGhhblxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5ldyBEYXRlKDApLnRvSVNPU3RyaW5nKCksXG4gICAgICBlbmQ6IHRoZW4udG9JU09TdHJpbmcoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB0b1F1ZXJ5UmFuZ2VDYXRlZ29yeSgpIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWUucmFuZ2Uuc3RhcnQ7XG4gICAgY29uc3QgZW5kID0gdGhpcy5zZWFyY2hDcml0ZXJpYS52YWx1ZS5yYW5nZS5lbmQ7XG4gICAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5ldyBEYXRlKHN0YXJ0KS50b0lTT1N0cmluZygpLFxuICAgICAgZW5kOiB0aGlzLnRvTWlkbmlnaHQobmV3IERhdGUoZW5kKSkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuICB9XG5cbiAgdG9RdWVyeSgpOiBJYkRhdGVRdWVyeSB7XG4gICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWQoKT8uaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoSWJEYXRlRmlsdGVyQ2F0ZWdvcnkuV0lUSElOKSkge1xuICAgICAgcmV0dXJuIHRoaXMudG9RdWVyeVdpdGhpbkNhdGVnb3J5KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChJYkRhdGVGaWx0ZXJDYXRlZ29yeS5NT1JFX1RIQU4pKSB7XG4gICAgICByZXR1cm4gdGhpcy50b1F1ZXJ5TW9yZVRoYW5DYXRlZ29yeSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoSWJEYXRlRmlsdGVyQ2F0ZWdvcnkuUkFOR0UpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b1F1ZXJ5UmFuZ2VDYXRlZ29yeSgpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxufVxuIiwiPGliLWZpbHRlci1idXR0b24gW2F0dHIuZGF0YS1jeV09XCInaWItZGF0ZS1maWx0ZXItJyArIG5hbWVcIj5cbiAgPHNwYW4gaWItZmlsdGVyLW5hbWU+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pjwvc3Bhbj5cbiAgPHNwYW4gaWItZmlsdGVyLXZhbHVlICpuZ0lmPVwiaXNEaXJ0eVwiPlxuICAgIHt7IGRpc3BsYXlDb25kaXRpb24gfCB0cmFuc2xhdGUgfCBsb3dlcmNhc2UgfX0ge3sgZGlzcGxheVZhbHVlIH19IHt7IGRpc3BsYXlQZXJpb2QgfCB0cmFuc2xhdGUgfX1cbiAgPC9zcGFuPlxuXG4gIDxzZWN0aW9uIFtmb3JtR3JvdXBdPVwiZmlsdGVyPy5mb3JtXCIgc3R5bGU9XCJwYWRkaW5nOiAwLjVlbSAxZW0gMCAxZW1cIj5cbiAgICA8c2VjdGlvbiBbZm9ybUdyb3VwTmFtZV09XCJuYW1lXCIgY2xhc3M9XCJpYi1maWx0ZXItZGF0ZVwiPlxuICAgICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJjYXRlZ29yeVNlbGVjdGVkXCI+XG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwid2l0aGluXCIgW2F0dHIuZGF0YS1jeV09XCInaWItZGF0ZS1maWx0ZXItJyArIG5hbWUgKyAnLXdpdGhpbidcIj57e1xuICAgICAgICAgICdzaGFyZWQuaWJGaWx0ZXIuZGF0ZS53aXRoaW5UaGVMYXN0JyB8IHRyYW5zbGF0ZSB9fTwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPHNlY3Rpb24gW2NsYXNzLmliLWZpbHRlci1kYXRlX19mb3JtLS1oaWRkZW5dPVwiIWlzU2VsZWN0ZWQoJ3dpdGhpbicpXCIgZm9ybUdyb3VwTmFtZT1cIndpdGhpblwiXG4gICAgICAgICAgY2xhc3M9XCJpYi1maWx0ZXItZGF0ZV9fZm9ybVwiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cIndpZHRoOiAxMDAlXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cIidpYi1kYXRlLWZpbHRlci0nICsgbmFtZSArICctd2l0aGluLXZhbHVlJ1wiIC8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJwZXJpb2RcIiBbYXR0ci5kYXRhLWN5XT1cIidpYi1kYXRlLWZpbHRlci0nICsgbmFtZSArICctd2l0aGluLXBlcmlvZCdcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB3aXRoaW5QZXJpb2RPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5kaXNwbGF5VmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiB2YWx1ZT1cIm1vcmVUaGFuXCIgW2F0dHIuZGF0YS1jeV09XCInaWItZGF0ZS1maWx0ZXItJyArIG5hbWUgKyAnLW1vcmVUaGFuJ1wiPnt7XG4gICAgICAgICAgJ3NoYXJlZC5pYkZpbHRlci5kYXRlLm1vcmVUaGFuJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPHNlY3Rpb24gW2NsYXNzLmliLWZpbHRlci1kYXRlX19mb3JtLS1oaWRkZW5dPVwiIWlzU2VsZWN0ZWQoJ21vcmVUaGFuJylcIiBmb3JtR3JvdXBOYW1lPVwibW9yZVRoYW5cIlxuICAgICAgICAgIGNsYXNzPVwiaWItZmlsdGVyLWRhdGVfX2Zvcm1cIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogMTAwJVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInaWItZGF0ZS1maWx0ZXItJyArIG5hbWUgKyAnLW1vcmVUaGFuLXZhbHVlJ1wiIC8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJwZXJpb2RcIiBbYXR0ci5kYXRhLWN5XT1cIidpYi1kYXRlLWZpbHRlci0nICsgbmFtZSArICctbW9yZVRoYW4tcGVyaW9kJ1wiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG1vcmVUaGFuUGVyaW9kT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICAgICAgICB7eyBvcHRpb24uZGlzcGxheVZhbHVlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gdmFsdWU9XCJyYW5nZVwiIFthdHRyLmRhdGEtY3ldPVwiJ2liLWRhdGUtZmlsdGVyLScgKyBuYW1lICsgJy1yYW5nZSdcIj57e1xuICAgICAgICAgICdzaGFyZWQuaWJGaWx0ZXIuZGF0ZS5iZXR3ZWVuJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPHNlY3Rpb24gW2NsYXNzLmliLWZpbHRlci1kYXRlX19mb3JtLS1oaWRkZW5dPVwiIWlzU2VsZWN0ZWQoJ3JhbmdlJylcIiBmb3JtR3JvdXBOYW1lPVwicmFuZ2VcIlxuICAgICAgICAgIGNsYXNzPVwiaWItZmlsdGVyLWRhdGVfX3JhbmdlXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NoYXJlZC5pYkZpbHRlci5kYXRlLmRhdGVSYW5nZUxhYmVsJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJwaWNrZXJcIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInaWItZGF0ZS1maWx0ZXItJyArIG5hbWUgKyAnLXJhbmdlLXN0YXJ0J1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2liLWRhdGUtZmlsdGVyLScgKyBuYW1lICsgJy1yYW5nZS1lbmQnXCI+XG4gICAgICAgICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICAgICAgICA8bWF0LWVycm9yPnt7ICdzaGFyZWQuaWJGaWx0ZXIuZGF0ZS5kYXRlUmFuZ2VJbnZhbGlkJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgPC9zZWN0aW9uPlxuICA8L3NlY3Rpb24+XG5cbiAgPGliLWZpbHRlci1hY3Rpb24tZ3JvdXA+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJjbGVhcigpXCIgW2Rpc2FibGVkXT1cIiFpc0RpcnR5XCIgW2F0dHIuZGF0YS1jeV09XCInaWItZmlsdGVyLWNsZWFyJ1wiPlxuICAgICAge3sgXCJzaGFyZWQuaWJGaWx0ZXIuY2xlYXJcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoKVwiIFthdHRyLmRhdGEtY3ldPVwiJ2liLWZpbHRlci11cGRhdGUnXCI+XG4gICAgICB7eyBcInNoYXJlZC5pYkZpbHRlci51cGRhdGVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2liLWZpbHRlci1hY3Rpb24tZ3JvdXA+XG48L2liLWZpbHRlci1idXR0b24+Il19
@@ -0,0 +1,111 @@
1
+ import { Component, Input, ViewEncapsulation } from "@angular/core";
2
+ import { FormControl, FormGroup, Validators } from "@angular/forms";
3
+ import { and, gte, lte, none } from "../../filters";
4
+ import { IbFilterBase } from "../base/filter-base";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "@angular/material/input";
9
+ import * as i4 from "@angular/material/form-field";
10
+ import * as i5 from "@angular/material/button";
11
+ import * as i6 from "@angular/material/slider";
12
+ import * as i7 from "../../filter-button/filter-button.component";
13
+ import * as i8 from "../../filter-button/filter-action-group.component";
14
+ import * as i9 from "@ngx-translate/core";
15
+ export class IbNumberFilter extends IbFilterBase {
16
+ min = 0;
17
+ max = 100;
18
+ step = 1;
19
+ slider = new FormGroup({
20
+ min: new FormControl(this.min, {
21
+ nonNullable: true,
22
+ validators: [Validators.required],
23
+ }),
24
+ max: new FormControl(this.max, {
25
+ nonNullable: true,
26
+ validators: [Validators.required],
27
+ }),
28
+ });
29
+ searchCriteria = new FormControl(none(), { nonNullable: true });
30
+ get displayLabelParams() {
31
+ return {
32
+ min: this.rawValue?.value?.[0]?.value,
33
+ max: this.rawValue?.value?.[1]?.value,
34
+ };
35
+ }
36
+ ngOnInit() {
37
+ this.searchCriteria.reset = () => {
38
+ this.searchCriteria.setValue(none());
39
+ this.clearRange();
40
+ };
41
+ this.searchCriteria.valueChanges.subscribe((values) => {
42
+ if (values.operator === 0) {
43
+ this.clearRange();
44
+ return;
45
+ }
46
+ this.slider.setValue({
47
+ min: values.value?.[0]?.value,
48
+ max: values.value?.[1]?.value,
49
+ });
50
+ });
51
+ this.clearRange();
52
+ super.ngOnInit();
53
+ }
54
+ initializeFromColumn(data) {
55
+ if (!data.length) {
56
+ return;
57
+ }
58
+ const values = data.map((x) => x[this.name]);
59
+ this.min = Math.min(...values);
60
+ this.max = Math.max(...values);
61
+ if (!this.isDirty) {
62
+ this.clearRange();
63
+ }
64
+ }
65
+ applyFilter() {
66
+ if (!this.slider.valid) {
67
+ this.slider.markAllAsTouched();
68
+ return;
69
+ }
70
+ this.searchCriteria.setValue(this.build());
71
+ this.filter.update();
72
+ this.button.closeMenu();
73
+ }
74
+ clear() {
75
+ this.searchCriteria.setValue(none());
76
+ this.clearRange();
77
+ this.filter.update();
78
+ }
79
+ clearRange() {
80
+ this.slider.setValue({
81
+ min: this.min,
82
+ max: this.max,
83
+ });
84
+ }
85
+ build = () => {
86
+ if (this.slider.value.min === this.min &&
87
+ this.slider.value.max === this.max) {
88
+ return none();
89
+ }
90
+ return and([gte(this.slider.value.min), lte(this.slider.value.max)]);
91
+ };
92
+ toQuery() {
93
+ return {
94
+ min: this.slider.value.min,
95
+ max: this.slider.value.max,
96
+ };
97
+ }
98
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbNumberFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
99
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", type: IbNumberFilter, selector: "ib-number-filter", inputs: { min: "min", max: "max", step: "step" }, providers: [{ provide: IbFilterBase, useExisting: IbNumberFilter }], usesInheritance: true, ngImport: i0, template: "<ib-filter-button [attr.data-cy]=\"'ib-number-filter-' + name\">\n <span ib-filter-name><ng-content></ng-content></span>\n <span ib-filter-value *ngIf=\"isDirty\">\n {{\n \"shared.ibFilter.label.number\"\n | translate : displayLabelParams\n | lowercase\n }}\n </span>\n\n <section style=\"padding: 0 1em\">\n <section class=\"ib-number-filter\" [formGroup]=\"slider\">\n <section style=\"display: flex\">\n <mat-slider style=\"flex: 1\" [max]=\"max\" [min]=\"min\" [step]=\"step\">\n <input\n matSliderStartThumb\n formControlName=\"min\"\n [value]=\"slider.value.min\"\n />\n <input\n matSliderEndThumb\n formControlName=\"max\"\n [value]=\"slider.value.max\"\n />\n </mat-slider>\n </section>\n\n <section class=\"ib-number-filter__input-range\">\n <mat-form-field appearance=\"outline\" style=\"width: 12ch\">\n <mat-label>{{ \"shared.ibFilter.min\" | translate }}</mat-label>\n <input\n matInput\n type=\"number\"\n placeholder=\"min\"\n formControlName=\"min\"\n [value]=\"slider.value.min\"\n [attr.data-cy]=\"'ib-number-filter-' + name + '-min'\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" style=\"width: 12ch\">\n <mat-label>{{ \"shared.ibFilter.max\" | translate }}</mat-label>\n <input\n matInput\n type=\"number\"\n placeholder=\"max\"\n formControlName=\"max\"\n [value]=\"slider.value.max\"\n [attr.data-cy]=\"'ib-number-filter-' + name + '-max'\"\n />\n </mat-form-field>\n </section>\n </section>\n </section>\n\n <ib-filter-action-group>\n <button mat-button (click)=\"clear()\" [disabled]=\"!isDirty\" [attr.data-cy]=\"'ib-filter-clear'\">\n {{ \"shared.ibFilter.clear\" | translate }}\n </button>\n <button mat-button color=\"primary\" (click)=\"applyFilter()\" [attr.data-cy]=\"'ib-filter-update'\">\n {{ \"shared.ibFilter.update\" | translate }}\n </button>\n </ib-filter-action-group>\n</ib-filter-button>\n", styles: [".ib-number-filter{padding:0 .5em;display:flex;flex-direction:column}.ib-number-filter__input-range{display:flex;justify-content:space-between}.ib-number-filter__input-range mat-form-field{--mat-form-field-container-height: 36px;--mat-form-field-filled-label-display: none;--mat-form-field-container-vertical-padding: 6px;--mat-form-field-filled-with-label-container-padding-top: 6px;--mat-form-field-filled-with-label-container-padding-bottom: 6px}.ib-number-filter__input-range input[type=number]{appearance:textfield}.ib-number-filter__input-range .mat-mdc-form-field{overflow-y:inherit}.ib-number-filter__input-range .mdc-notched-outline__notch{width:auto!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i6.MatSliderRangeThumb, selector: "input[matSliderStartThumb], input[matSliderEndThumb]", exportAs: ["matSliderRangeThumb"] }, { kind: "component", type: i7.IbFilterButton, selector: "ib-filter-button" }, { kind: "directive", type: i8.IbFilterActionGroup, selector: "ib-filter-action-group" }, { kind: "pipe", type: i1.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
100
+ }
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbNumberFilter, decorators: [{
102
+ type: Component,
103
+ args: [{ selector: "ib-number-filter", encapsulation: ViewEncapsulation.None, providers: [{ provide: IbFilterBase, useExisting: IbNumberFilter }], template: "<ib-filter-button [attr.data-cy]=\"'ib-number-filter-' + name\">\n <span ib-filter-name><ng-content></ng-content></span>\n <span ib-filter-value *ngIf=\"isDirty\">\n {{\n \"shared.ibFilter.label.number\"\n | translate : displayLabelParams\n | lowercase\n }}\n </span>\n\n <section style=\"padding: 0 1em\">\n <section class=\"ib-number-filter\" [formGroup]=\"slider\">\n <section style=\"display: flex\">\n <mat-slider style=\"flex: 1\" [max]=\"max\" [min]=\"min\" [step]=\"step\">\n <input\n matSliderStartThumb\n formControlName=\"min\"\n [value]=\"slider.value.min\"\n />\n <input\n matSliderEndThumb\n formControlName=\"max\"\n [value]=\"slider.value.max\"\n />\n </mat-slider>\n </section>\n\n <section class=\"ib-number-filter__input-range\">\n <mat-form-field appearance=\"outline\" style=\"width: 12ch\">\n <mat-label>{{ \"shared.ibFilter.min\" | translate }}</mat-label>\n <input\n matInput\n type=\"number\"\n placeholder=\"min\"\n formControlName=\"min\"\n [value]=\"slider.value.min\"\n [attr.data-cy]=\"'ib-number-filter-' + name + '-min'\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" style=\"width: 12ch\">\n <mat-label>{{ \"shared.ibFilter.max\" | translate }}</mat-label>\n <input\n matInput\n type=\"number\"\n placeholder=\"max\"\n formControlName=\"max\"\n [value]=\"slider.value.max\"\n [attr.data-cy]=\"'ib-number-filter-' + name + '-max'\"\n />\n </mat-form-field>\n </section>\n </section>\n </section>\n\n <ib-filter-action-group>\n <button mat-button (click)=\"clear()\" [disabled]=\"!isDirty\" [attr.data-cy]=\"'ib-filter-clear'\">\n {{ \"shared.ibFilter.clear\" | translate }}\n </button>\n <button mat-button color=\"primary\" (click)=\"applyFilter()\" [attr.data-cy]=\"'ib-filter-update'\">\n {{ \"shared.ibFilter.update\" | translate }}\n </button>\n </ib-filter-action-group>\n</ib-filter-button>\n", styles: [".ib-number-filter{padding:0 .5em;display:flex;flex-direction:column}.ib-number-filter__input-range{display:flex;justify-content:space-between}.ib-number-filter__input-range mat-form-field{--mat-form-field-container-height: 36px;--mat-form-field-filled-label-display: none;--mat-form-field-container-vertical-padding: 6px;--mat-form-field-filled-with-label-container-padding-top: 6px;--mat-form-field-filled-with-label-container-padding-bottom: 6px}.ib-number-filter__input-range input[type=number]{appearance:textfield}.ib-number-filter__input-range .mat-mdc-form-field{overflow-y:inherit}.ib-number-filter__input-range .mdc-notched-outline__notch{width:auto!important}\n"] }]
104
+ }], propDecorators: { min: [{
105
+ type: Input
106
+ }], max: [{
107
+ type: Input
108
+ }], step: [{
109
+ type: Input
110
+ }] } });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvdWkva2FpLWZpbHRlci9maWx0ZXJzL251bWJlci9maWx0ZXItbnVtYmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS91aS9rYWktZmlsdGVyL2ZpbHRlcnMvbnVtYmVyL2ZpbHRlci1udW1iZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7O0FBU25ELE1BQU0sT0FBTyxjQUFlLFNBQVEsWUFBWTtJQUNyQyxHQUFHLEdBQVcsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsR0FBVyxHQUFHLENBQUM7SUFDbEIsSUFBSSxHQUFXLENBQUMsQ0FBQztJQUUxQixNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUM7UUFDckIsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDN0IsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNsQyxDQUFDO1FBQ0YsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDN0IsV0FBVyxFQUFFLElBQUk7WUFDakIs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dCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBJYkZpbHRlckRlZiwgSWJOdW1iZXJRdWVyeSB9IGZyb20gXCIuLi8uLi9maWx0ZXIudHlwZXNcIjtcbmltcG9ydCB7IGFuZCwgZ3RlLCBsdGUsIG5vbmUgfSBmcm9tIFwiLi4vLi4vZmlsdGVyc1wiO1xuaW1wb3J0IHsgSWJGaWx0ZXJCYXNlIH0gZnJvbSBcIi4uL2Jhc2UvZmlsdGVyLWJhc2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImliLW51bWJlci1maWx0ZXJcIixcbiAgdGVtcGxhdGVVcmw6IFwiZmlsdGVyLW51bWJlci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZmlsdGVyLW51bWJlci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJYkZpbHRlckJhc2UsIHVzZUV4aXN0aW5nOiBJYk51bWJlckZpbHRlciB9XSxcbn0pXG5leHBvcnQgY2xhc3MgSWJOdW1iZXJGaWx0ZXIgZXh0ZW5kcyBJYkZpbHRlckJhc2Uge1xuICBASW5wdXQoKSBtaW46IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIG1heDogbnVtYmVyID0gMTAwO1xuICBASW5wdXQoKSBzdGVwOiBudW1iZXIgPSAxO1xuXG4gIHNsaWRlciA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIG1pbjogbmV3IEZvcm1Db250cm9sKHRoaXMubWluLCB7XG4gICAgICBub25OdWxsYWJsZTogdHJ1ZSxcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICB9KSxcbiAgICBtYXg6IG5ldyBGb3JtQ29udHJvbCh0aGlzLm1heCwge1xuICAgICAgbm9uTnVsbGFibGU6IHRydWUsXG4gICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgfSksXG4gIH0pO1xuXG4gIHNlYXJjaENyaXRlcmlhID0gbmV3IEZvcm1Db250cm9sKG5vbmUoKSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcblxuICBnZXQgZGlzcGxheUxhYmVsUGFyYW1zKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtaW46IHRoaXMucmF3VmFsdWU/LnZhbHVlPy5bMF0/LnZhbHVlLFxuICAgICAgbWF4OiB0aGlzLnJhd1ZhbHVlPy52YWx1ZT8uWzFdPy52YWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWFyY2hDcml0ZXJpYS5yZXNldCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoQ3JpdGVyaWEuc2V0VmFsdWUobm9uZSgpKTtcbiAgICAgIHRoaXMuY2xlYXJSYW5nZSgpO1xuICAgIH07XG4gICAgdGhpcy5zZWFyY2hDcml0ZXJpYS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZXMpID0+IHtcbiAgICAgIGlmICh2YWx1ZXMub3BlcmF0b3IgPT09IDApIHtcbiAgICAgICAgdGhpcy5jbGVhclJhbmdlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2xpZGVyLnNldFZhbHVlKHtcbiAgICAgICAgbWluOiB2YWx1ZXMudmFsdWU/LlswXT8udmFsdWUsXG4gICAgICAgIG1heDogdmFsdWVzLnZhbHVlPy5bMV0/LnZhbHVlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhclJhbmdlKCk7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVGcm9tQ29sdW1uKGRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLm1hcCgoeCkgPT4geFt0aGlzLm5hbWVdKTtcbiAgICB0aGlzLm1pbiA9IE1hdGgubWluKC4uLnZhbHVlcyk7XG4gICAgdGhpcy5tYXggPSBNYXRoLm1heCguLi52YWx1ZXMpO1xuICAgIGlmICghdGhpcy5pc0RpcnR5KSB7XG4gICAgICB0aGlzLmNsZWFyUmFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUZpbHRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2xpZGVyLnZhbGlkKSB7XG4gICAgICB0aGlzLnNsaWRlci5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ3JpdGVyaWEuc2V0VmFsdWUodGhpcy5idWlsZCgpKTtcbiAgICB0aGlzLmZpbHRlci51cGRhdGUoKTtcbiAgICB0aGlzLmJ1dHRvbi5jbG9zZU1lbnUoKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuc2VhcmNoQ3JpdGVyaWEuc2V0VmFsdWUobm9uZSgpKTtcbiAgICB0aGlzLmNsZWFyUmFuZ2UoKTtcbiAgICB0aGlzLmZpbHRlci51cGRhdGUoKTtcbiAgfVxuXG4gIGNsZWFyUmFuZ2UoKSB7XG4gICAgdGhpcy5zbGlkZXIuc2V0VmFsdWUoe1xuICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgfSk7XG4gIH1cblxuICBidWlsZCA9ICgpOiBJYkZpbHRlckRlZiA9PiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zbGlkZXIudmFsdWUubWluID09PSB0aGlzLm1pbiAmJlxuICAgICAgdGhpcy5zbGlkZXIudmFsdWUubWF4ID09PSB0aGlzLm1heFxuICAgICkge1xuICAgICAgcmV0dXJuIG5vbmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYW5kKFtndGUodGhpcy5zbGlkZXIudmFsdWUubWluKSwgbHRlKHRoaXMuc2xpZGVyLnZhbHVlLm1heCldKTtcbiAgfTtcblxuICB0b1F1ZXJ5KCk6IEliTnVtYmVyUXVlcnkge1xuICAgIHJldHVybiB7XG4gICAgICBtaW46IHRoaXMuc2xpZGVyLnZhbHVlLm1pbixcbiAgICAgIG1heDogdGhpcy5zbGlkZXIudmFsdWUubWF4LFxuICAgIH07XG4gIH1cbn1cbiIsIjxpYi1maWx0ZXItYnV0dG9uIFthdHRyLmRhdGEtY3ldPVwiJ2liLW51bWJlci1maWx0ZXItJyArIG5hbWVcIj5cbiAgPHNwYW4gaWItZmlsdGVyLW5hbWU+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pjwvc3Bhbj5cbiAgPHNwYW4gaWItZmlsdGVyLXZhbHVlICpuZ0lmPVwiaXNEaXJ0eVwiPlxuICAgIHt7XG4gICAgICBcInNoYXJlZC5pYkZpbHRlci5sYWJlbC5udW1iZXJcIlxuICAgICAgICB8IHRyYW5zbGF0ZSA6IGRpc3BsYXlMYWJlbFBhcmFtc1xuICAgICAgICB8IGxvd2VyY2FzZVxuICAgIH19XG4gIDwvc3Bhbj5cblxuICA8c2VjdGlvbiBzdHlsZT1cInBhZGRpbmc6IDAgMWVtXCI+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpYi1udW1iZXItZmlsdGVyXCIgW2Zvcm1Hcm91cF09XCJzbGlkZXJcIj5cbiAgICAgIDxzZWN0aW9uIHN0eWxlPVwiZGlzcGxheTogZmxleFwiPlxuICAgICAgICA8bWF0LXNsaWRlciBzdHlsZT1cImZsZXg6IDFcIiBbbWF4XT1cIm1heFwiIFttaW5dPVwibWluXCIgW3N0ZXBdPVwic3RlcFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0U2xpZGVyU3RhcnRUaHVtYlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWluXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzbGlkZXIudmFsdWUubWluXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0U2xpZGVyRW5kVGh1bWJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1heFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwic2xpZGVyLnZhbHVlLm1heFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtc2xpZGVyPlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImliLW51bWJlci1maWx0ZXJfX2lucHV0LXJhbmdlXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN0eWxlPVwid2lkdGg6IDEyY2hcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwic2hhcmVkLmliRmlsdGVyLm1pblwiIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIm1pblwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW5cIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNsaWRlci52YWx1ZS5taW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInaWItbnVtYmVyLWZpbHRlci0nICsgbmFtZSArICctbWluJ1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdHlsZT1cIndpZHRoOiAxMmNoXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcInNoYXJlZC5pYkZpbHRlci5tYXhcIiB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJtYXhcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzbGlkZXIudmFsdWUubWF4XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2liLW51bWJlci1maWx0ZXItJyArIG5hbWUgKyAnLW1heCdcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9zZWN0aW9uPlxuICA8L3NlY3Rpb24+XG5cbiAgPGliLWZpbHRlci1hY3Rpb24tZ3JvdXA+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJjbGVhcigpXCIgW2Rpc2FibGVkXT1cIiFpc0RpcnR5XCIgW2F0dHIuZGF0YS1jeV09XCInaWItZmlsdGVyLWNsZWFyJ1wiPlxuICAgICAge3sgXCJzaGFyZWQuaWJGaWx0ZXIuY2xlYXJcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoKVwiIFthdHRyLmRhdGEtY3ldPVwiJ2liLWZpbHRlci11cGRhdGUnXCI+XG4gICAgICB7eyBcInNoYXJlZC5pYkZpbHRlci51cGRhdGVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2liLWZpbHRlci1hY3Rpb24tZ3JvdXA+XG48L2liLWZpbHRlci1idXR0b24+XG4iXX0=