@firestitch/filter 13.4.0 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/16/25/214635fa124a83a4fe3a52bde70e7124d9d011a5d176790a9c607bf1f5ed27cadefc4a1b5a225c0bda11250a180ca5798773e0c108e8d5e2d8559d2f9eed +1 -0
  2. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/44/f9/ee834587d4ac4a429d8c4af2e1562028c7432ac179f9699f2990ab3dadc8e4f66ae45bf22625aedf47fad137e2de39a9b99141784e56d5123544f90c922a +1 -0
  3. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/4d/89/993c2eaff9e0cfca023676bf3f2d3d446f6b6cc90eec839075529d155102b2808a8b44e259d357704acd43143c12af5a5916b4e291a799164b722142ee8e +1 -0
  4. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/52/cb/71f80b48163c432fcb05ac0f736ae7cae10318713c98c74739b3eb5d83ebce635b1a7c77d357b1a4b13a9ae9cfe43348538e4336c25c234551f1e80f0567 +1 -0
  5. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/54/f6/73f0d8ea64a18aa71d80a2cf99d6eb4a2cd345e943127e018913d0f76e9575fabe3aee5002ee4da996e661662d474ad31e9a77f2858c68eed532c2d45d47 +1 -0
  6. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/61/84/7f56389ef39faf5c5b6ad292f668ec6cc5cb6e476d94b1740bdadb9832e3de22a0032b90811f02c80d3d56be5f5e32d8bb900e17ebcb09db379befddc221 +1 -0
  7. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/69/d3/d48ad36dd0a576c4d6f8af3a2ee671037639b0a8d91679992dcbd9dabc284bf316c3126201837e931a162f23cdc4a505608bb64df8e87f59a17364890873 +1 -0
  8. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/70/92/ac80dcd48732b949f163abf36c48b0912598d2bb66e5c1f2056fef872f59fb1b591abbf3bfdbf461a46cbd507eea05a6bd0f14ba3d573f1684cbc78bd094 +1 -0
  9. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/73/10/12664696206dcdab6b084331532b234c439acef8a6428af667a2e1bb1c15e2055b3ac70f44fd8bf508396d3e11a798b40849fd66dbdbd0ff9d9d7e780edd +1 -0
  10. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/74/f6/4c2db73499d08279895e1ab6e2fb65baa613d31218b6968f74143ba03819c72a2720b927ca5a708dd484c0bc6763124e62ce9c2e652f71b740cb2d29ae03 +1 -0
  11. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/78/30/8eedd8d752a08df898806b01abde5b4c1809f6edcba95fcf112c006833b34986c295b62a7e47cd73297c3da78ca6072ef18ba502b6efdd6048dbdbbcd257 +1 -0
  12. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/8c/f8/d9f30e3e898c99e8c3157d4c9157dead1b1115ea4db50aced0c33713cd394bb770b182d1d5087c821d22b2abb99e288191ba9e30954ea4ed9ab6ff70d391 +1 -0
  13. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/8d/53/ad58764bc240411378ae1c47c0c20525da378a3b143795a11bc3fdbf6c9cde6fb2de6c3947d673d5872b9ce205d6274114b3b4dfd27609a636df7fd0b600 +1 -0
  14. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/8f/74/3ed29367f32f9c909f5898704561eb1ebe5cdabba507ba08cbeeaeecd274d020b1401ba871938be899025a265299f8be66c59d59b574a996a74b2987d98e +1 -0
  15. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/a1/ac/1dbcf215585477c3f70180cb40186b5119d9ad1d27b2e0dcde66034c950e334ce0577409535c29bb15d2e6c9238eb9e841177fc62d3949a58bbbb397238d +1 -0
  16. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/a3/08/068a7a29e9cc2385b62d4b0fc14b04a7f09ed469d9b79bb754e37d4933b0ab8aa171b286080e20a11e67f42b8558a4bda64aa03ca097001ecda5c25a9015 +1 -0
  17. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/ae/6c/352ab77e603fa53f25ab95cd6fd19a230095b212464689ab76c89db8d97bd0f221c27fbd84d0767fb5ce7e33f5feb175a9256ab35cf216d30dd3263b6b14 +1 -0
  18. package/.angular/cache/14.2.13/ng-packagr/content-v2/sha512/b6/38/eb8a1b6bd6265968335935cbc2763fbcbb9cd4e32dd58a5234bfd87379ee840044338eeae5f126da9936d21ed423071cfbca6748ee153235addf874824f7 +1 -0
  19. package/.angular/cache/14.2.13/ng-packagr/index-v5/01/3c/d4dca899e5bd80c43ed2e78ec79687adc272ff835d03f0ae48cb881ddd83 +2 -0
  20. package/.angular/cache/14.2.13/ng-packagr/index-v5/05/a7/da2d9625c1bc294409dbf750062e363a1abbe39b51177bfb7e5a9aa9ae81 +2 -0
  21. package/.angular/cache/14.2.13/ng-packagr/index-v5/08/f1/b2e705e45544df7c77f4238b558d569a1215422c2086df9140963f960eef +2 -0
  22. package/.angular/cache/14.2.13/ng-packagr/index-v5/21/1d/398c87beb2402502d4e706beedd98ea707f31b441d6aa7711eef62a0439b +2 -0
  23. package/.angular/cache/14.2.13/ng-packagr/index-v5/26/0b/ee2b1cad7f114e99f8d4da848bd6ceb4e849178b50723d9dcd10f39fb05c +2 -0
  24. package/.angular/cache/14.2.13/ng-packagr/index-v5/26/98/b8614f38ea6fefe80f96f06adb98d925eccfae9eec0937c645a42034614c +2 -0
  25. package/.angular/cache/14.2.13/ng-packagr/index-v5/64/4d/18a7b240783e7b3de33ad33724d2b43e8f3349e840ccab571ca3c6c51c00 +2 -0
  26. package/.angular/cache/14.2.13/ng-packagr/index-v5/64/70/77036e049a76cab5a64caa9cba4b603631c7e9e2f47e6c5fbc7f39d67a2f +2 -0
  27. package/.angular/cache/14.2.13/ng-packagr/index-v5/6c/5d/700bf777ddebfd9b8f15e2709674069747b6fcd37376049712828252ca92 +3 -0
  28. package/.angular/cache/14.2.13/ng-packagr/index-v5/71/89/4e4e3808e28a4a95a98391ab38f87f165ae234aefd4231092d1f531f56b3 +2 -0
  29. package/.angular/cache/14.2.13/ng-packagr/index-v5/7c/c2/bd7b21a07f8b1da7797f40df86dc4289416305c26464c6b965a336fd3975 +2 -0
  30. package/.angular/cache/14.2.13/ng-packagr/index-v5/85/64/cb2f22b4df13a70eb519564e382de3d7dd3747bc0cab1109017f8934cff8 +2 -0
  31. package/.angular/cache/14.2.13/ng-packagr/index-v5/96/b1/2730596477eee53fc70082999f48e373f6795e68d21e04234a45131added +2 -0
  32. package/.angular/cache/14.2.13/ng-packagr/index-v5/af/e4/165326aa8daa8e07ac9e02bde3d64a31b00d1b2b59a797a51a89456d2ad6 +2 -0
  33. package/.angular/cache/14.2.13/ng-packagr/index-v5/cd/96/32e83b96bce723e8ad58fdb7c43cf0002b3e0561309899e8b2a75204cbff +2 -0
  34. package/.angular/cache/14.2.13/ng-packagr/index-v5/dd/38/1f423a0e17cf4e99ef3c880daeb533cdce9275226cb2f617aed52e881e59 +2 -0
  35. package/.angular/cache/14.2.13/ng-packagr/index-v5/e4/e8/f48bdfbec024c932fd928e4db790b6454d090d4db31e9d69201a5e1ea466 +2 -0
  36. package/.angular/cache/14.2.13/ng-packagr/index-v5/ee/59/16a63690de125da5067876d4ccf122230175174f3489e48893448bcbdcd3 +2 -0
  37. package/.angular/cache/14.2.13/ng-packagr/index-v5/fd/46/71e9d6d1a123ed68ce03aa617dcaaad4ad9c5a9193f1281166766c453621 +3 -0
  38. package/.angulardoc.json +4 -0
  39. package/.editorconfig +15 -0
  40. package/.eslintrc.json +9 -0
  41. package/.gitmodules +3 -0
  42. package/angular.json +163 -0
  43. package/babel.config.js +11 -0
  44. package/jest.config.js +24 -0
  45. package/{app → package/app}/classes/actions-controller.d.ts +41 -41
  46. package/{app → package/app}/components/action-button/action-button.component.d.ts +9 -9
  47. package/{app → package/app}/components/action-kebab-actions/action-kebab-actions.component.d.ts +7 -7
  48. package/{app → package/app}/components/actions/actions.component.d.ts +13 -13
  49. package/{app → package/app}/components/filter/filter.component.d.ts +204 -204
  50. package/{app → package/app}/components/filter-chip/filter-chip.component.d.ts +26 -26
  51. package/{app → package/app}/components/filter-chip-content/filter-chip-content.component.d.ts +18 -18
  52. package/{app → package/app}/components/filter-chips/filter-chips.component.d.ts +9 -9
  53. package/{app → package/app}/components/filter-drawer/filter-drawer.component.d.ts +30 -30
  54. package/{app → package/app}/components/filter-drawer-actions/filter-drawer-actions.component.d.ts +15 -15
  55. package/{app → package/app}/components/filters-item/autocomplete/autocomplete.component.d.ts +14 -14
  56. package/{app → package/app}/components/filters-item/autocompletechips/autocompletechips.component.d.ts +16 -16
  57. package/{app → package/app}/components/filters-item/base-item/base-item.component.d.ts +25 -25
  58. package/{app → package/app}/components/filters-item/checkbox/checkbox.component.d.ts +11 -11
  59. package/{app → package/app}/components/filters-item/chips/chips.component.d.ts +13 -13
  60. package/{app → package/app}/components/filters-item/date/date.component.d.ts +20 -20
  61. package/{app → package/app}/components/filters-item/date-range/date-range.component.d.ts +15 -15
  62. package/{app → package/app}/components/filters-item/filter-item.component.d.ts +39 -39
  63. package/{app → package/app}/components/filters-item/range/range.component.d.ts +15 -15
  64. package/{app → package/app}/components/filters-item/select/backdrop/backdrop.component.d.ts +6 -6
  65. package/{app → package/app}/components/filters-item/select/groups/groups.component.d.ts +12 -12
  66. package/{app → package/app}/components/filters-item/select/multiple/multiple.component.d.ts +15 -15
  67. package/{app → package/app}/components/filters-item/select/select.component.d.ts +23 -23
  68. package/{app → package/app}/components/filters-item/select/simple/simple.component.d.ts +14 -14
  69. package/{app → package/app}/components/filters-item/text/text.component.d.ts +19 -19
  70. package/{app → package/app}/components/filters-item/week/week.component.d.ts +12 -12
  71. package/{app → package/app}/components/saved-filter/index.d.ts +3 -3
  72. package/{app → package/app}/components/saved-filter/saved-filter-edit/index.d.ts +1 -1
  73. package/{app → package/app}/components/saved-filter/saved-filter-edit/saved-filter-edit.component.d.ts +18 -18
  74. package/{app → package/app}/components/saved-filter/saved-filter-manage/index.d.ts +1 -1
  75. package/{app → package/app}/components/saved-filter/saved-filter-manage/saved-filter-manage.component.d.ts +16 -16
  76. package/{app → package/app}/components/saved-filter/saved-filters-menu/index.d.ts +1 -1
  77. package/{app → package/app}/components/saved-filter/saved-filters-menu/saved-filters-menu.component.d.ts +23 -23
  78. package/{app → package/app}/consts/query-param-delimiter.d.ts +1 -1
  79. package/{app → package/app}/directives/focus-to-item/focus-to-item.directive.d.ts +27 -27
  80. package/{app → package/app}/directives/status-bar/status-bar.directive.d.ts +8 -8
  81. package/{app → package/app}/enums/action-mode.enum.d.ts +6 -6
  82. package/{app → package/app}/enums/action-type.enum.d.ts +9 -9
  83. package/{app → package/app}/enums/button-style.d.ts +9 -9
  84. package/{app → package/app}/enums/index.d.ts +6 -6
  85. package/{app → package/app}/enums/item-date-mode.enum.d.ts +5 -5
  86. package/{app → package/app}/enums/item-type.enum.d.ts +15 -15
  87. package/{app → package/app}/enums/picker-view-type.enum.d.ts +7 -7
  88. package/{app → package/app}/fs-filter.module.d.ts +70 -70
  89. package/{app → package/app}/helpers/build-query-params.d.ts +3 -3
  90. package/{app → package/app}/helpers/compare.d.ts +2 -2
  91. package/{app → package/app}/helpers/create-filter-item.d.ts +14 -14
  92. package/{app → package/app}/helpers/find-value.d.ts +1 -1
  93. package/{app → package/app}/helpers/get-range-name.d.ts +1 -1
  94. package/{app → package/app}/helpers/parse-date.d.ts +1 -1
  95. package/{app → package/app}/helpers/parse-item-value-from-stored.d.ts +1 -1
  96. package/{app → package/app}/helpers/query-param-transformers.d.ts +2 -2
  97. package/{app → package/app}/helpers/restore-items.d.ts +12 -12
  98. package/{app → package/app}/injectors/filter-config.d.ts +2 -2
  99. package/{app → package/app}/injectors/filter-drawer-data.d.ts +2 -2
  100. package/{app → package/app}/injectors/filter-drawer-overlay.d.ts +2 -2
  101. package/{app → package/app}/interfaces/action.interface.d.ts +81 -81
  102. package/{app → package/app}/interfaces/config.interface.d.ts +66 -66
  103. package/{app → package/app}/interfaces/external-params.interface.d.ts +3 -3
  104. package/{app → package/app}/interfaces/filter.interface.d.ts +4 -4
  105. package/{app → package/app}/interfaces/index.d.ts +6 -6
  106. package/{app → package/app}/interfaces/items/autocomplete-chips.interface.d.ts +15 -15
  107. package/{app → package/app}/interfaces/items/autocomplete.interface.d.ts +9 -9
  108. package/{app → package/app}/interfaces/items/base.interface.d.ts +29 -29
  109. package/{app → package/app}/interfaces/items/checkbox.interface.d.ts +7 -7
  110. package/{app → package/app}/interfaces/items/chips.interface.d.ts +6 -6
  111. package/{app → package/app}/interfaces/items/date-range.interface.d.ts +8 -8
  112. package/{app → package/app}/interfaces/items/date.interface.d.ts +7 -7
  113. package/{app → package/app}/interfaces/items/range.interface.d.ts +13 -13
  114. package/{app → package/app}/interfaces/items/select.interface.d.ts +20 -20
  115. package/{app → package/app}/interfaces/items/text.interface.d.ts +9 -9
  116. package/{app → package/app}/interfaces/items/week.interface.d.ts +7 -7
  117. package/{app → package/app}/interfaces/saved-filters.interface.d.ts +18 -18
  118. package/{app → package/app}/interfaces/update-filter-item.interface.d.ts +4 -4
  119. package/{app → package/app}/models/action-menu-item.model.d.ts +23 -23
  120. package/{app → package/app}/models/action.model.d.ts +54 -54
  121. package/{app → package/app}/models/filter-config.d.ts +31 -31
  122. package/{app → package/app}/models/items/autocomplete/base-autocomplete-item.d.ts +12 -12
  123. package/{app → package/app}/models/items/autocomplete-chips-item.d.ts +20 -20
  124. package/{app → package/app}/models/items/autocomplete-item.d.ts +11 -11
  125. package/{app → package/app}/models/items/base-item.d.ts +80 -80
  126. package/{app → package/app}/models/items/checkbox-item.d.ts +17 -17
  127. package/{app → package/app}/models/items/chips-item.d.ts +18 -18
  128. package/{app → package/app}/models/items/date/base-date-item.d.ts +14 -14
  129. package/{app → package/app}/models/items/date-item.d.ts +8 -8
  130. package/{app → package/app}/models/items/date-range/base-date-range-item.d.ts +21 -21
  131. package/{app → package/app}/models/items/date-range-item.d.ts +6 -6
  132. package/{app → package/app}/models/items/date-time-item.d.ts +7 -7
  133. package/{app → package/app}/models/items/date-time-range-item.d.ts +6 -6
  134. package/{app → package/app}/models/items/range-item.d.ts +23 -23
  135. package/{app → package/app}/models/items/select/base-select-item.d.ts +13 -13
  136. package/{app → package/app}/models/items/select/multiple-select-item.d.ts +14 -14
  137. package/{app → package/app}/models/items/select/simple-select-item.d.ts +14 -14
  138. package/{app → package/app}/models/items/select-item.d.ts +8 -8
  139. package/{app → package/app}/models/items/text-item.d.ts +15 -15
  140. package/{app → package/app}/models/items/week-item.d.ts +18 -18
  141. package/{app → package/app}/pipes/remove-isolate-value.pipe.d.ts +8 -8
  142. package/{app → package/app}/providers/filter-meta.d.ts +5 -5
  143. package/{app → package/app}/services/external-params/persistance-params-controller.service.d.ts +22 -22
  144. package/{app → package/app}/services/external-params/query-params-controller.service.d.ts +22 -22
  145. package/{app → package/app}/services/external-params/saved-filters-controller.service.d.ts +40 -40
  146. package/{app → package/app}/services/external-params-controller.service.d.ts +42 -42
  147. package/{app → package/app}/services/filter-overlay.service.d.ts +36 -36
  148. package/{app → package/app}/services/focus-controller.service.d.ts +18 -18
  149. package/{app → package/app}/services/items-store.service.d.ts +69 -68
  150. package/{esm2020 → package/esm2020}/app/classes/actions-controller.mjs +126 -126
  151. package/{esm2020 → package/esm2020}/app/components/action-button/action-button.component.mjs +21 -21
  152. package/{esm2020 → package/esm2020}/app/components/action-kebab-actions/action-kebab-actions.component.mjs +16 -16
  153. package/{esm2020 → package/esm2020}/app/components/actions/actions.component.mjs +41 -41
  154. package/{esm2020 → package/esm2020}/app/components/filter/filter.component.mjs +613 -613
  155. package/{esm2020 → package/esm2020}/app/components/filter-chip/filter-chip.component.mjs +85 -85
  156. package/{esm2020 → package/esm2020}/app/components/filter-chip-content/filter-chip-content.component.mjs +78 -78
  157. package/{esm2020 → package/esm2020}/app/components/filter-chips/filter-chips.component.mjs +18 -18
  158. package/{esm2020 → package/esm2020}/app/components/filter-drawer/filter-drawer.component.mjs +70 -70
  159. package/{esm2020 → package/esm2020}/app/components/filter-drawer-actions/filter-drawer-actions.component.mjs +40 -40
  160. package/{esm2020 → package/esm2020}/app/components/filters-item/autocomplete/autocomplete.component.mjs +26 -26
  161. package/{esm2020 → package/esm2020}/app/components/filters-item/autocompletechips/autocompletechips.component.mjs +41 -41
  162. package/{esm2020 → package/esm2020}/app/components/filters-item/base-item/base-item.component.mjs +62 -62
  163. package/{esm2020 → package/esm2020}/app/components/filters-item/checkbox/checkbox.component.mjs +20 -20
  164. package/{esm2020 → package/esm2020}/app/components/filters-item/chips/chips.component.mjs +27 -27
  165. package/{esm2020 → package/esm2020}/app/components/filters-item/date/date.component.mjs +42 -42
  166. package/{esm2020 → package/esm2020}/app/components/filters-item/date-range/date-range.component.mjs +33 -33
  167. package/{esm2020 → package/esm2020}/app/components/filters-item/filter-item.component.mjs +79 -79
  168. package/{esm2020 → package/esm2020}/app/components/filters-item/range/range.component.mjs +44 -44
  169. package/{esm2020 → package/esm2020}/app/components/filters-item/select/backdrop/backdrop.component.mjs +11 -11
  170. package/{esm2020 → package/esm2020}/app/components/filters-item/select/groups/groups.component.mjs +29 -29
  171. package/{esm2020 → package/esm2020}/app/components/filters-item/select/multiple/multiple.component.mjs +56 -56
  172. package/{esm2020 → package/esm2020}/app/components/filters-item/select/select.component.mjs +50 -50
  173. package/{esm2020 → package/esm2020}/app/components/filters-item/select/simple/simple.component.mjs +42 -42
  174. package/package/esm2020/app/components/filters-item/text/text.component.mjs +49 -0
  175. package/{esm2020 → package/esm2020}/app/components/filters-item/week/week.component.mjs +24 -24
  176. package/{esm2020 → package/esm2020}/app/components/saved-filter/index.mjs +3 -3
  177. package/{esm2020 → package/esm2020}/app/components/saved-filter/saved-filter-edit/index.mjs +1 -1
  178. package/{esm2020 → package/esm2020}/app/components/saved-filter/saved-filter-edit/saved-filter-edit.component.mjs +49 -49
  179. package/{esm2020 → package/esm2020}/app/components/saved-filter/saved-filter-manage/index.mjs +1 -1
  180. package/{esm2020 → package/esm2020}/app/components/saved-filter/saved-filter-manage/saved-filter-manage.component.mjs +39 -39
  181. package/{esm2020 → package/esm2020}/app/components/saved-filter/saved-filters-menu/index.mjs +1 -1
  182. package/{esm2020 → package/esm2020}/app/components/saved-filter/saved-filters-menu/saved-filters-menu.component.mjs +51 -51
  183. package/{esm2020 → package/esm2020}/app/consts/query-param-delimiter.mjs +1 -1
  184. package/{esm2020 → package/esm2020}/app/directives/focus-to-item/focus-to-item.directive.mjs +129 -129
  185. package/{esm2020 → package/esm2020}/app/directives/status-bar/status-bar.directive.mjs +15 -15
  186. package/{esm2020 → package/esm2020}/app/enums/action-mode.enum.mjs +7 -7
  187. package/{esm2020 → package/esm2020}/app/enums/action-type.enum.mjs +11 -11
  188. package/{esm2020 → package/esm2020}/app/enums/button-style.mjs +10 -10
  189. package/{esm2020 → package/esm2020}/app/enums/index.mjs +6 -6
  190. package/{esm2020 → package/esm2020}/app/enums/item-date-mode.enum.mjs +6 -6
  191. package/{esm2020 → package/esm2020}/app/enums/item-type.enum.mjs +16 -16
  192. package/{esm2020 → package/esm2020}/app/enums/picker-view-type.enum.mjs +8 -8
  193. package/{esm2020 → package/esm2020}/app/fs-filter.module.mjs +261 -263
  194. package/{esm2020 → package/esm2020}/app/helpers/build-query-params.mjs +32 -32
  195. package/{esm2020 → package/esm2020}/app/helpers/compare.mjs +37 -37
  196. package/{esm2020 → package/esm2020}/app/helpers/create-filter-item.mjs +54 -54
  197. package/{esm2020 → package/esm2020}/app/helpers/find-value.mjs +12 -12
  198. package/{esm2020 → package/esm2020}/app/helpers/get-range-name.mjs +8 -8
  199. package/{esm2020 → package/esm2020}/app/helpers/parse-date.mjs +7 -7
  200. package/{esm2020 → package/esm2020}/app/helpers/parse-item-value-from-stored.mjs +80 -80
  201. package/{esm2020 → package/esm2020}/app/helpers/query-param-transformers.mjs +8 -8
  202. package/{esm2020 → package/esm2020}/app/helpers/restore-items.mjs +49 -49
  203. package/{esm2020 → package/esm2020}/app/injectors/filter-config.mjs +2 -2
  204. package/{esm2020 → package/esm2020}/app/injectors/filter-drawer-data.mjs +2 -2
  205. package/{esm2020 → package/esm2020}/app/injectors/filter-drawer-overlay.mjs +2 -2
  206. package/{esm2020 → package/esm2020}/app/interfaces/action.interface.mjs +1 -1
  207. package/{esm2020 → package/esm2020}/app/interfaces/config.interface.mjs +1 -1
  208. package/{esm2020 → package/esm2020}/app/interfaces/external-params.interface.mjs +1 -1
  209. package/{esm2020 → package/esm2020}/app/interfaces/filter.interface.mjs +1 -1
  210. package/{esm2020 → package/esm2020}/app/interfaces/index.mjs +6 -6
  211. package/{esm2020 → package/esm2020}/app/interfaces/items/autocomplete-chips.interface.mjs +1 -1
  212. package/{esm2020 → package/esm2020}/app/interfaces/items/autocomplete.interface.mjs +1 -1
  213. package/{esm2020 → package/esm2020}/app/interfaces/items/base.interface.mjs +1 -1
  214. package/{esm2020 → package/esm2020}/app/interfaces/items/checkbox.interface.mjs +1 -1
  215. package/{esm2020 → package/esm2020}/app/interfaces/items/chips.interface.mjs +1 -1
  216. package/{esm2020 → package/esm2020}/app/interfaces/items/date-range.interface.mjs +1 -1
  217. package/{esm2020 → package/esm2020}/app/interfaces/items/date.interface.mjs +1 -1
  218. package/{esm2020 → package/esm2020}/app/interfaces/items/range.interface.mjs +1 -1
  219. package/{esm2020 → package/esm2020}/app/interfaces/items/select.interface.mjs +1 -1
  220. package/{esm2020 → package/esm2020}/app/interfaces/items/text.interface.mjs +1 -1
  221. package/{esm2020 → package/esm2020}/app/interfaces/items/week.interface.mjs +1 -1
  222. package/{esm2020 → package/esm2020}/app/interfaces/saved-filters.interface.mjs +1 -1
  223. package/{esm2020 → package/esm2020}/app/interfaces/update-filter-item.interface.mjs +1 -1
  224. package/{esm2020 → package/esm2020}/app/models/action-menu-item.model.mjs +66 -66
  225. package/{esm2020 → package/esm2020}/app/models/action.model.mjs +129 -129
  226. package/{esm2020 → package/esm2020}/app/models/filter-config.mjs +66 -66
  227. package/{esm2020 → package/esm2020}/app/models/items/autocomplete/base-autocomplete-item.mjs +13 -13
  228. package/{esm2020 → package/esm2020}/app/models/items/autocomplete-chips-item.mjs +60 -60
  229. package/{esm2020 → package/esm2020}/app/models/items/autocomplete-item.mjs +32 -32
  230. package/{esm2020 → package/esm2020}/app/models/items/base-item.mjs +233 -233
  231. package/{esm2020 → package/esm2020}/app/models/items/checkbox-item.mjs +49 -49
  232. package/{esm2020 → package/esm2020}/app/models/items/chips-item.mjs +88 -88
  233. package/{esm2020 → package/esm2020}/app/models/items/date/base-date-item.mjs +47 -47
  234. package/{esm2020 → package/esm2020}/app/models/items/date-item.mjs +18 -18
  235. package/{esm2020 → package/esm2020}/app/models/items/date-range/base-date-range-item.mjs +134 -134
  236. package/{esm2020 → package/esm2020}/app/models/items/date-range-item.mjs +6 -6
  237. package/{esm2020 → package/esm2020}/app/models/items/date-time-item.mjs +9 -9
  238. package/{esm2020 → package/esm2020}/app/models/items/date-time-range-item.mjs +6 -6
  239. package/{esm2020 → package/esm2020}/app/models/items/range-item.mjs +82 -82
  240. package/{esm2020 → package/esm2020}/app/models/items/select/base-select-item.mjs +36 -36
  241. package/{esm2020 → package/esm2020}/app/models/items/select/multiple-select-item.mjs +87 -87
  242. package/{esm2020 → package/esm2020}/app/models/items/select/simple-select-item.mjs +65 -65
  243. package/{esm2020 → package/esm2020}/app/models/items/select-item.mjs +10 -10
  244. package/{esm2020 → package/esm2020}/app/models/items/text-item.mjs +33 -33
  245. package/{esm2020 → package/esm2020}/app/models/items/week-item.mjs +93 -93
  246. package/{esm2020 → package/esm2020}/app/pipes/remove-isolate-value.pipe.mjs +20 -20
  247. package/{esm2020 → package/esm2020}/app/providers/filter-meta.mjs +9 -9
  248. package/{esm2020 → package/esm2020}/app/services/external-params/persistance-params-controller.service.mjs +57 -57
  249. package/{esm2020 → package/esm2020}/app/services/external-params/query-params-controller.service.mjs +61 -61
  250. package/{esm2020 → package/esm2020}/app/services/external-params/saved-filters-controller.service.mjs +162 -162
  251. package/{esm2020 → package/esm2020}/app/services/external-params-controller.service.mjs +179 -162
  252. package/{esm2020 → package/esm2020}/app/services/filter-overlay.service.mjs +121 -121
  253. package/{esm2020 → package/esm2020}/app/services/focus-controller.service.mjs +29 -29
  254. package/package/esm2020/app/services/items-store.service.mjs +345 -0
  255. package/{esm2020 → package/esm2020}/firestitch-filter.mjs +4 -4
  256. package/{esm2020 → package/esm2020}/public_api.mjs +35 -35
  257. package/{fesm2015 → package/fesm2015}/firestitch-filter.mjs +4383 -4377
  258. package/package/fesm2015/firestitch-filter.mjs.map +1 -0
  259. package/{fesm2020 → package/fesm2020}/firestitch-filter.mjs +4372 -4354
  260. package/package/fesm2020/firestitch-filter.mjs.map +1 -0
  261. package/{firestitch-filter.d.ts → package/index.d.ts} +5 -5
  262. package/package/package.json +56 -0
  263. package/{public_api.d.ts → package/public_api.d.ts} +40 -40
  264. package/package/styles.scss +0 -0
  265. package/package.json +79 -22
  266. package/tsconfig.compodoc.json +12 -0
  267. package/tsconfig.json +10 -0
  268. package/tslint.json +8 -0
  269. package/esm2020/app/components/filters-item/text/text.component.mjs +0 -49
  270. package/esm2020/app/services/items-store.service.mjs +0 -342
  271. package/fesm2015/firestitch-filter.mjs.map +0 -1
  272. package/fesm2020/firestitch-filter.mjs.map +0 -1
  273. /package/{styles.scss → README.MD} +0 -0
@@ -0,0 +1 @@
1
+ {"hash":"96f59e8481eefffcb4bd7f0488b0675385819712","fesm2020":{"code":"import * as i0 from '@angular/core';\nimport { Injectable, Optional, Component, ChangeDetectionStrategy, Inject, Input, EventEmitter, Output, InjectionToken, Directive, Self, ViewChild, Pipe, HostListener, ElementRef, ContentChild, HostBinding, NgModule } from '@angular/core';\nimport { BehaviorSubject, Subject, isObservable, forkJoin, of, timer, combineLatest, fromEvent, merge, interval } from 'rxjs';\nimport { tap, finalize, take, takeUntil, debounceTime, filter as filter$1, distinctUntilChanged, switchMap, mapTo, startWith, map, delay, skip } from 'rxjs/operators';\nimport { filter, isArrayEqual, list, isEmpty, getNormalizedPath, remove, FsCommonModule } from '@firestitch/common';\nimport { isObject, isFunction, clone, isString, toString, pickBy } from 'lodash-es';\nimport * as i1$1 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i2 from '@angular/router';\nimport { RouterModule } from '@angular/router';\nimport * as i1$2 from '@angular/material/dialog';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport * as i6 from '@firestitch/drawer';\nimport * as i1 from '@firestitch/store';\nimport { FsPersistanceStore, FsStoreModule, FsStore } from '@firestitch/store';\nimport { simpleFormat, format } from '@firestitch/date';\nimport { parseISO, isValid, isDate } from 'date-fns';\nimport * as i3$3 from '@firestitch/datepicker';\nimport { formatPeriodObject, FsDatePickerModule } from '@firestitch/datepicker';\nimport * as i2$1 from '@angular/forms';\nimport { UntypedFormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport * as i3 from '@angular/material/form-field';\nimport * as i4 from '@angular/material/input';\nimport { MatInput, MatInputModule } from '@angular/material/input';\nimport * as i4$1 from '@angular/material/select';\nimport { MatSelectModule } from '@angular/material/select';\nimport * as i5 from '@angular/material/core';\nimport * as i3$1 from '@angular/material/button';\nimport { MatButtonModule } from '@angular/material/button';\nimport * as i9 from '@firestitch/form';\nimport { FsFormModule } from '@firestitch/form';\nimport * as i2$3 from '@angular/cdk/drag-drop';\nimport { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';\nimport { ComponentPortal, PortalInjector, PortalModule } from '@angular/cdk/portal';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport * as i6$2 from '@angular/material/checkbox';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport * as i2$2 from '@angular/material/icon';\nimport { MatIconModule } from '@angular/material/icon';\nimport * as i12 from '@angular/material/slide-toggle';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport * as i4$2 from '@firestitch/autocomplete';\nimport { FsAutocompleteModule } from '@firestitch/autocomplete';\nimport * as i5$1 from '@firestitch/autocomplete-chips';\nimport { FsAutocompleteChipsModule } from '@firestitch/autocomplete-chips';\nimport * as i3$2 from '@firestitch/chip';\nimport { FsChipModule } from '@firestitch/chip';\nimport * as i14 from '@firestitch/clear';\nimport { FsClearModule } from '@firestitch/clear';\nimport * as i8 from '@firestitch/file';\nimport { FsFileModule } from '@firestitch/file';\nimport * as i4$3 from '@firestitch/label';\nimport { FsLabelModule } from '@firestitch/label';\nimport * as i6$1 from '@firestitch/menu';\nimport { FsMenuModule } from '@firestitch/menu';\nimport * as i10 from '@firestitch/popover';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { FsScrollModule } from '@firestitch/scroll';\nimport * as i9$1 from '@firestitch/selectbutton';\nimport { FsSelectButtonModule } from '@firestitch/selectbutton';\nimport * as i5$2 from '@firestitch/skeleton';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport * as i1$3 from '@angular/cdk/overlay';\nimport { OverlayConfig } from '@angular/cdk/overlay';\nimport * as i1$4 from '@angular/cdk/layout';\nimport * as i3$4 from '@firestitch/html';\n\nfunction objectsAreEquals(obj1, obj2) {\n const oldKeys = Object.keys(obj1);\n const currKeys = Object.keys(obj2);\n if (oldKeys.length !== currKeys.length) {\n return false;\n }\n for (const key in obj1) {\n if (obj1.hasOwnProperty(key)) {\n const oldItem = obj1[key];\n const currItem = obj2[key];\n const isArrays = Array.isArray(oldItem) && Array.isArray(currItem);\n const isObjects = isObject(oldItem) && isObject(currItem);\n if (isArrays && !arraysAreEquals(oldItem, currItem)) {\n return false;\n }\n else if (isObjects && !objectsAreEquals(oldItem, currItem)) {\n return false;\n }\n else if (!isArrays && !isObjects && oldItem !== currItem) {\n return false;\n }\n }\n }\n return true;\n}\nfunction arraysAreEquals(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (const el of arr1) {\n if (arr2.indexOf(el) === -1) {\n return false;\n }\n }\n return true;\n}\n\nvar ItemType;\n(function (ItemType) {\n ItemType[\"Text\"] = \"text\";\n ItemType[\"Select\"] = \"select\";\n ItemType[\"Range\"] = \"range\";\n ItemType[\"Date\"] = \"date\";\n ItemType[\"DateTime\"] = \"datetime\";\n ItemType[\"DateRange\"] = \"daterange\";\n ItemType[\"Week\"] = \"week\";\n ItemType[\"DateTimeRange\"] = \"datetimerange\";\n ItemType[\"AutoComplete\"] = \"autocomplete\";\n ItemType[\"AutoCompleteChips\"] = \"autocompletechips\";\n ItemType[\"Checkbox\"] = \"checkbox\";\n ItemType[\"Chips\"] = \"chips\";\n ItemType[\"Keyword\"] = \"keyword\";\n})(ItemType || (ItemType = {}));\n\nclass BaseItem {\n constructor(itemConfig, _additionalConfig, _filter) {\n this._additionalConfig = _additionalConfig;\n this._filter = _filter;\n this._pendingValues = false;\n this._pendingDefaultValue = false;\n this._initializedValues = false;\n this._loading$ = new BehaviorSubject(false);\n this._value$ = new BehaviorSubject(null);\n this._valueChange$ = new Subject();\n this._values$ = new BehaviorSubject(null);\n this._destroy$ = new Subject();\n this._clear$ = new Subject();\n this._type = itemConfig.type;\n this._parseConfig(itemConfig);\n }\n get filter() {\n return this._filter;\n }\n get isTypeAutocomplete() {\n return this.type === ItemType.AutoComplete;\n }\n get isTypeAutocompleteChips() {\n return this.type === ItemType.AutoCompleteChips;\n }\n get isTypeChips() {\n return this.type === ItemType.Chips;\n }\n get isTypeCheckbox() {\n return this.type === ItemType.Checkbox;\n }\n get isTypeSelect() {\n return this.type === ItemType.Select;\n }\n get isTypeDate() {\n return this.type === ItemType.Date;\n }\n get isTypeDateRange() {\n return this.type === ItemType.DateRange;\n }\n get isTypeRange() {\n return this.type === ItemType.Range;\n }\n get isTypeDateTimeRange() {\n return this.type === ItemType.DateTimeRange;\n }\n get isTypeDateTime() {\n return this.type === ItemType.DateTime;\n }\n get isTypeKeyword() {\n return this.type === ItemType.Keyword;\n }\n get isChipVisible() {\n return !!this.model;\n }\n get destroy$() {\n return this._destroy$.asObservable();\n }\n get type() {\n return this._type;\n }\n get hasPendingValues() {\n return this._pendingValues;\n }\n get hasPendingDefaultValue() {\n return this._pendingDefaultValue;\n }\n get model() {\n return this._model;\n }\n set model(value) {\n this._setModel(value);\n this.valueChanged();\n }\n set values(values) {\n this._values$.next(values);\n }\n get values() {\n return this._values$.getValue();\n }\n get values$() {\n return this._values$.asObservable();\n }\n get valueChange$() {\n return this._valueChange$.asObservable();\n }\n get value$() {\n return this._value$.asObservable();\n }\n get clear$() {\n return this._clear$.asObservable();\n }\n get initialized() {\n return this._initialized;\n }\n get loading$() {\n return this._loading$.asObservable();\n }\n get loading() {\n return this._loading$.getValue();\n }\n set loading(value) {\n this._loading$.next(value);\n }\n get _initialized() {\n return !this._pendingDefaultValue && !this._pendingValues && this._initializedValues;\n }\n valueChanged() {\n this._value$.next(this.value);\n if (this.change) {\n this.change(this, this._filter);\n }\n if (this.initialized) {\n this._valueChange$.next();\n }\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n if (Array.isArray(value)) {\n params[this.name] = value.join(',');\n }\n else {\n params[name] = value;\n }\n return params;\n }\n get persistanceObject() {\n return this.queryObject;\n }\n loadDefaultValue() {\n this._pendingDefaultValue = true;\n return this.defaultValueFn()\n .pipe(tap((value) => {\n this.defaultValue = value;\n this._initDefaultModel();\n }), finalize(() => {\n this._pendingDefaultValue = false;\n }));\n }\n initValues(persistedValue) {\n this._initializedValues = false;\n this.persistedValue = persistedValue;\n this._initDefaultModel();\n const isAutocomplete = this.type === ItemType.AutoComplete || this.type === ItemType.AutoCompleteChips;\n if (this._valuesFn && !isAutocomplete) {\n const valuesResult = this._valuesFn(null, this._filter);\n if (isObservable(valuesResult)) {\n this._pendingValues = true;\n }\n else {\n this.values = valuesResult;\n this._init();\n this._initializedValues = true;\n }\n }\n else {\n this._init();\n this._initializedValues = true;\n }\n }\n loadAsyncValues(reload = true) {\n if (reload || (!this.loading && this.hasPendingValues)) {\n this.loading = true;\n this._valuesFn(null, this._filter)\n .pipe(take(1), takeUntil(this._destroy$))\n .subscribe((values) => {\n this.values = values;\n this._pendingValues = false;\n this.loading = false;\n this._init();\n this._validateModel();\n this._initializedValues = true;\n });\n }\n }\n clear(defaultValue = undefined) {\n if (this.isTypeRange || this.isTypeDateRange || this.isTypeDateTimeRange) {\n console.warn(`\n Filter ${this.name} can not be cleared with .clear() method!\n Use special .clearRange() or clearDateRange() instead.\n `);\n }\n this._clear$.next(defaultValue);\n this._clearValue(defaultValue);\n }\n getChipsContent(type) {\n return '';\n }\n destroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n _setModel(value) {\n this._model = value;\n }\n _parseConfig(item) {\n this.name = item.name;\n this.label = item.label;\n this.chipLabel = item.chipLabel;\n if (typeof item.default === 'function') {\n this.defaultValueFn = item.default;\n }\n else {\n this.defaultValue = item.default;\n }\n this.change = item.change;\n this.init = item.init || ((_) => {\n //\n });\n this.hide = item.hide;\n this.showClear = item.clear ?? true;\n this.persistanceDisabled = item.disablePersist ?? false;\n this.queryParamsDisabled = item.disableQueryParams ?? false;\n if (isFunction(item.values)) {\n this._valuesFn = item.values;\n }\n else {\n this.values = item.values;\n }\n }\n _initDefaultModel() {\n const model = this.persistedValue ?? this.defaultValue;\n if (model !== undefined) {\n this._setModel(model);\n }\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n\nclass BaseSelectItem extends BaseItem {\n _parseConfig(item) {\n this.multiple = item.multiple;\n this.children = item.children;\n // TODO nullish\n if (item.isolate) {\n this.isolate = {\n ...item.isolate,\n enabled: false,\n };\n }\n super._parseConfig(item);\n }\n _init() {\n if (!Array.isArray(this.values)) {\n this.values = [];\n }\n // TODO Refactor\n if (this.isolate) {\n this.values = this.values.filter((item) => {\n if (Array.isArray(this.isolate.value)) {\n return this.isolate.value.indexOf(item.value) === -1;\n }\n else {\n return item.value !== this.isolate.value;\n }\n });\n }\n }\n _clearValue(defaultValue = undefined) {\n if (this.isolate) {\n this.isolate.enabled = false;\n }\n }\n}\n\nclass MultipleSelectItem extends BaseSelectItem {\n constructor(itemConfig, _persistedValues, _filter) {\n super(itemConfig, _persistedValues, _filter);\n }\n get value() {\n let value = clone(this.model);\n if (this.isolateOptionNotSelected) {\n value = this.values?.map((v) => v.value);\n }\n else if (!Array.isArray(value) || value.length === 0 || value.indexOf('__all') > -1) {\n value = undefined;\n }\n return value;\n }\n get isChipVisible() {\n return Array.isArray(this.model) && this.model.length > 0;\n }\n get isolateOptionNotSelected() {\n const modelValue = this.model;\n const isolate = this.isolate;\n return isolate && !isolate.enabled && modelValue?.length === 0;\n }\n getChipsContent(type = null) {\n const options = this.model.reduce((acc, key) => {\n const itemValue = this.values.find((val) => val.value === key);\n let itemLabel;\n if (itemValue) {\n itemLabel = itemValue.name;\n }\n else if (this.isolate && this.isolate.enabled) {\n itemLabel = this.isolate.label;\n }\n if (!acc.includes(itemLabel)) {\n acc.push(itemLabel);\n }\n return acc;\n }, []);\n return options.join(', ');\n }\n _init() {\n super._init();\n const values = this.values.map((itemv) => itemv.value);\n const wrongDefaultValue = !this.model && !Array.isArray(this.defaultValue);\n /**\n * When multiple select is in isolate mode and have no options selected\n * it should send to the server all it's possible values,\n * but should not show them as selected in interfaces as well as in query params & persistance\n *\n * Code below prevents filling model with values from query params if query params contain all possible values\n */\n const isolate = !wrongDefaultValue\n && !this.isolateOptionNotSelected\n && arraysAreEquals(this.model, values);\n if (wrongDefaultValue || isolate) {\n this.model = [];\n }\n }\n _setModel(value) {\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (isNaN(val)) {\n return val;\n }\n return +val;\n });\n }\n super._setModel(value);\n }\n _validateModel() {\n const possibleValues = filter(this.model || [], (item) => {\n return this.values.find((value) => {\n return value.value === item;\n });\n });\n if (!isArrayEqual(this.model, possibleValues)) {\n this.model = possibleValues;\n }\n }\n _clearValue(defaultValue = undefined) {\n super._clearValue(defaultValue);\n this.model = defaultValue ?? [];\n }\n}\n\nconst QUERY_PARAM_DELIMITER = ':';\n\nfunction filterToQueryParam(value, name) {\n return `${encodeURIComponent(value)}${QUERY_PARAM_DELIMITER}${encodeURIComponent(name)}`;\n}\nfunction filterFromQueryParam(param) {\n const parts = param.split(QUERY_PARAM_DELIMITER);\n return [decodeURIComponent(parts[0]), decodeURIComponent(parts[1])];\n}\n\nfunction buildQueryParams(flattenedParams, items) {\n items\n .forEach((filterItem) => {\n if (filterItem instanceof MultipleSelectItem && filterItem.isolate) {\n if (filterItem.multiple && filterItem.value) {\n const isolated = list(filterItem.values, 'value').sort();\n const value = filterItem.value.sort();\n if (arraysAreEquals(value, isolated)) {\n flattenedParams[filterItem.name] = null;\n }\n }\n }\n if (filterItem.isTypeAutocomplete) {\n if (isObject(filterItem.model)) {\n flattenedParams[filterItem.name] = filterToQueryParam(filterItem.model.value, filterItem.model.name);\n }\n }\n else if (filterItem.isTypeAutocompleteChips || filterItem.isTypeChips) {\n if (Array.isArray(filterItem.model) && filterItem.model.length) {\n flattenedParams[filterItem.name] = filterItem.model.map((item) => {\n return filterToQueryParam(item.value, item.name);\n }).join(',');\n }\n }\n });\n return flattenedParams;\n}\n\nfunction getRangeName(configCase, name, range) {\n if (configCase === 'snake') {\n return name.concat('_').concat(range);\n }\n if (configCase === 'camel') {\n return name.concat(range.charAt(0).toUpperCase()).concat(range.slice(1));\n }\n}\n\nclass BaseDateRangeItem extends BaseItem {\n get isTypeDateRange() {\n return this.type === ItemType.DateRange;\n }\n get isTypeDateTimeRange() {\n return this.type === ItemType.DateTimeRange;\n }\n get isChipVisible() {\n return this.model && (this.model.from !== undefined || this.model.to !== undefined);\n }\n get value() {\n let value = clone(this.model);\n if (!isObject(this.model) ||\n (isEmpty(this.model.from, { zero: true }) && isEmpty(this.model.to, { zero: true }))) {\n value = undefined;\n }\n if (isEmpty(value, { zero: true })) {\n return undefined;\n }\n let from = value.from;\n let to = value.to;\n value = {};\n if (from) {\n if (isString(from)) {\n from = parseISO(from);\n }\n if (isValid(from) && isDate(from)) {\n value.from = from;\n }\n }\n if (to) {\n if (isString(to)) {\n to = parseISO(to);\n }\n if (isValid(to) && isDate(to)) {\n value.to = to;\n }\n }\n return value;\n }\n get queryObject() {\n const value = this.value || {};\n const name = this.name;\n const paramFromName = getRangeName(this.case, name, 'from');\n const paramToName = getRangeName(this.case, name, 'to');\n return {\n [paramFromName]: value.from || undefined,\n [paramToName]: value.to || undefined,\n };\n }\n get persistanceObject() {\n const query = this.queryObject;\n return Object.keys(this.queryObject)\n .reduce((acc, key) => {\n if (!!query[key]) {\n acc[key] = simpleFormat(query[key]);\n }\n else {\n acc[key] = query[key];\n }\n return acc;\n }, {});\n }\n getChipsContent(type = null) {\n const formatTo = this.type === ItemType.DateRange ? 'date' : 'date-time';\n if (type === 'from') {\n const from = this.model.from;\n return `${format(from, formatTo)}`;\n }\n else if (type === 'to') {\n const to = this.model.to;\n return `${format(to, formatTo)}`;\n }\n }\n clearDateRange(type = null, defaultValue = undefined) {\n if (type === 'from') {\n delete this.model.from;\n if (defaultValue?.from) {\n this.model.from = defaultValue.from;\n }\n this.model = { ...this.model };\n }\n else if (type === 'to') {\n delete this.model.to;\n if (defaultValue?.to) {\n this.model.to = defaultValue.to;\n }\n this.model = { ...this.model };\n }\n else {\n if (defaultValue) {\n this.model = { ...defaultValue };\n }\n else {\n this.model = {};\n }\n }\n }\n _validateModel() {\n }\n _setModel(value) {\n if (value) {\n if (value.from && (!isDate(value.from) || !isValid(value.from))) {\n value.from = parseISO(value.from);\n }\n if (value.to && (!isDate(value.to) || !isValid(value.to))) {\n value.to = parseISO(value.to);\n }\n }\n super._setModel(value);\n }\n _parseConfig(item) {\n this.case = this._additionalConfig?.case ?? 'camel';\n super._parseConfig(item);\n }\n _init() {\n if (!this.label) {\n this.label = ['Date From', 'Date To'];\n }\n if (!this.model) {\n this.model = this.defaultValue || {};\n }\n }\n _clearValue(defaultValue = undefined) {\n this.model = this.defaultValue ?? {};\n }\n}\n\nclass DateRangeItem extends BaseDateRangeItem {\n static create(config, filter) {\n return new DateRangeItem(config, null, filter);\n }\n}\n\nclass DateTimeRangeItem extends BaseDateRangeItem {\n static create(config, filter) {\n return new DateTimeRangeItem(config, null, filter);\n }\n}\n\nclass RangeItem extends BaseItem {\n static create(config, additionalConfig, filter) {\n return new RangeItem(config, additionalConfig, filter);\n }\n get value() {\n let value = clone(this.model);\n if (!isObject(this.model) ||\n (isEmpty(this.model.max, { zero: true }) && isEmpty(this.model.min, { zero: true }))) {\n value = undefined;\n }\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n const paramMinName = getRangeName(this.case, name, 'min');\n const paramMaxName = getRangeName(this.case, name, 'max');\n if (isObject(value)) {\n params[paramMinName] = value.min || undefined;\n params[paramMaxName] = value.max || undefined;\n }\n else {\n params[paramMinName] = undefined;\n params[paramMaxName] = undefined;\n }\n return params;\n }\n get isChipVisible() {\n return this.model && (this.model.min !== undefined || this.model.max !== undefined);\n }\n getChipsContent(type) {\n if (type === 'from') {\n const min = this.model.min;\n return `${min}`;\n }\n else if (type === 'to') {\n const max = this.model.max;\n return `${max}`;\n }\n }\n clearRange(type = null, defaultValue = undefined) {\n if (type === 'from') {\n delete this.model.min;\n if (defaultValue?.min) {\n this.model.min = defaultValue.min;\n }\n this.model = { ...this.model };\n }\n else if (type === 'to') {\n delete this.model.max;\n if (defaultValue?.max) {\n this.model.max = defaultValue.max;\n }\n this.model = { ...this.model };\n }\n else {\n this.model = defaultValue ? { ...defaultValue } : {};\n }\n }\n _validateModel() {\n }\n _parseConfig(item) {\n this.options = item.options;\n this.prefix = item.prefix;\n this.suffix = item.suffix;\n this.case = this._additionalConfig?.case ?? 'camel';\n super._parseConfig(item);\n }\n _init() {\n if (!this.label) {\n this.label = ['Min', 'Max'];\n }\n if (!this.model) {\n this.model = this.defaultValue || {};\n }\n }\n}\n\nfunction parseDate(value) {\n if (value && (!isDate(value) || !isValid(value))) {\n return parseISO(value);\n }\n return value;\n}\n\nclass WeekItem extends BaseItem {\n static create(config, filter) {\n return new WeekItem(config, null, filter);\n }\n get value() {\n let value = clone(this.model);\n if (!isObject(this.model) ||\n (isEmpty(this.model.from, { zero: true }) && isEmpty(this.model.to, { zero: true }))) {\n value = undefined;\n }\n if (isEmpty(value, { zero: true })) {\n return undefined;\n }\n let from = value.from;\n let to = value.to;\n const period = value.period;\n value = {};\n if (from) {\n if (isString(from)) {\n from = parseISO(from);\n }\n if (isValid(from) && isDate(from)) {\n value.from = from;\n }\n }\n if (to) {\n if (isString(to)) {\n to = parseISO(to);\n }\n if (isValid(to) && isDate(to)) {\n value.to = to;\n }\n }\n if (period) {\n value.period = isString(period) ? parseInt(period, 10) : period;\n }\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const paramFromName = getRangeName('camel', name, 'from');\n const paramToName = getRangeName('camel', name, 'to');\n const paramPeriodName = `${name}Period`;\n return {\n [paramFromName]: value?.from || undefined,\n [paramToName]: value?.to || undefined,\n [paramPeriodName]: value?.period || undefined,\n };\n }\n get persistanceObject() {\n const query = this.queryObject;\n const name = this.name;\n const paramFromName = getRangeName('camel', name, 'from');\n const paramFromValue = query[paramFromName] && simpleFormat(query[paramFromName]) || query[paramFromName];\n const paramToName = getRangeName('camel', name, 'to');\n const paramToValue = query[paramToName] && simpleFormat(query[paramToName]) || query[paramToName];\n const paramPeriodName = `${name}Period`;\n return {\n [paramFromName]: paramFromValue,\n [paramToName]: paramToValue,\n [paramPeriodName]: query[paramPeriodName],\n };\n }\n getChipsContent(type = null) {\n return formatPeriodObject(this.value);\n }\n _validateModel() { }\n _setModel(value) {\n if (value) {\n value.from = parseDate(value.from);\n value.to = parseDate(value.to);\n value.period = parseInt(value.period, 10) || undefined;\n }\n super._setModel(value);\n }\n _parseConfig(item) {\n super._parseConfig(item);\n this.seedDate = item.seedDate;\n }\n _init() { }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n\nfunction parseItemValueFromStored(item, params, paramCase) {\n const param = params[item.name];\n switch (item.type) {\n case ItemType.Range: {\n const min = params[getRangeName(paramCase, item.name, 'min')];\n const max = params[getRangeName(paramCase, item.name, 'max')];\n return { min: min, max: max };\n }\n case ItemType.DateRange:\n case ItemType.DateTimeRange: {\n const from = params[getRangeName(item.case, item.name, 'from')];\n const to = params[getRangeName(item.case, item.name, 'to')];\n return { from: from, to: to };\n }\n case ItemType.Week: {\n const from = params[getRangeName('camel', item.name, 'from')];\n const to = params[getRangeName('camel', item.name, 'to')];\n const period = params[`${item.name}Period`];\n return { from, to, period };\n }\n case ItemType.Select: {\n if (item.multiple && !!param) {\n const values = param.split(',');\n if (item.isolate) {\n const isolatedValue = Array.isArray(item.isolate.value)\n ? item.isolate.value\n : [item.isolate.value];\n item.isolate.enabled = arraysHaveSameElements(isolatedValue, values);\n return item.isolate.enabled\n ? isolatedValue\n : values;\n }\n return values;\n }\n else {\n return param;\n }\n }\n case ItemType.Checkbox: {\n if (param === 'true') {\n return true === item.checked;\n }\n else {\n return param === item.checked;\n }\n }\n case ItemType.AutoComplete: {\n const filterParts = filterFromQueryParam(param);\n return {\n name: filterParts[1],\n value: filterParts[0]\n };\n }\n case ItemType.AutoCompleteChips:\n case ItemType.Chips: {\n const filterParts = param.split(',');\n return filterParts.reduce((arry, value) => {\n const chipParts = filterFromQueryParam(value);\n arry.push({\n name: chipParts[1],\n value: chipParts[0],\n });\n return arry;\n }, []);\n }\n default: {\n return param;\n }\n }\n}\nfunction arraysHaveSameElements(arr1, arr2) {\n arr1 = [...arr1].sort();\n arr2 = [...arr2].sort();\n return arr1.some((item) => {\n return arr2.includes(item);\n });\n}\n\n/**\n * We need this function because when we store persisted/query/remote filter values\n * it stores with different format, ex.: Range will be stored as RangeFrom && RangeTo\n * and in this case we don't know how to restroe those values.\n *\n * This function do convertation for those kinds of stored values\n *\n * @param params\n * @param items\n * @param paramsCase\n */\nfunction restoreItems(params, items, paramsCase) {\n const result = {};\n Object.keys(params)\n .forEach((name) => {\n const item = findItemWidthName(items, name);\n if (item) {\n result[item.name] = parseItemValueFromStored(item, params, paramsCase);\n }\n });\n return result;\n}\nfunction findItemWidthName(items, name) {\n return items\n .find((filterItem) => {\n if (filterItem instanceof RangeItem) {\n return name === getRangeName(filterItem.case, filterItem.name, 'min') ||\n name === getRangeName(filterItem.case, filterItem.name, 'max') ||\n name === filterItem.name;\n }\n else if (filterItem instanceof DateRangeItem || filterItem instanceof DateTimeRangeItem) {\n return name === getRangeName(filterItem.case, filterItem.name, 'from') ||\n name === getRangeName(filterItem.case, filterItem.name, 'to');\n }\n else if (filterItem instanceof WeekItem) {\n return name === getRangeName('camel', filterItem.name, 'from')\n || name === getRangeName('camel', filterItem.name, 'to')\n || name === `${filterItem.name}Period`;\n }\n return filterItem.name === name;\n });\n}\n\nclass BaseAutocompleteItem extends BaseItem {\n get valuesFn() {\n return this._valuesFn;\n }\n _validateModel() {\n //\n }\n _parseConfig(item) {\n this.fetchOnFocus = item.fetchOnFocus ?? true;\n super._parseConfig(item);\n }\n}\n\nclass AutocompleteChipsItem extends BaseAutocompleteItem {\n static create(config, filter) {\n return new AutocompleteChipsItem(config, null, filter);\n }\n get value() {\n if (Array.isArray(this.model) && this.model.length === 0) {\n return undefined;\n }\n return clone(this.model);\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n if (Array.isArray(value)) {\n params[this.name] = value\n .filter((item) => !!item.value)\n .map((item) => item.value)\n .join(',');\n }\n else {\n params[name] = value;\n }\n return params;\n }\n get isChipVisible() {\n return Array.isArray(this.model) && this.model.length > 0;\n }\n getChipsContent() {\n return this.model\n .reduce((acc, i) => {\n acc.push(i.name);\n return acc;\n }, [])\n .join(', ');\n }\n _init() {\n if (this.model === undefined) {\n this._model = [];\n }\n }\n _parseConfig(item) {\n this.chipImage = item.chipImage ?? 'image';\n this.chipIcon = item.chipIcon;\n this.chipIconColor = item.chipIconColor;\n this.chipColor = item.chipColor;\n this.chipBackground = item.chipBackground;\n this.chipClass = item.chipClass;\n super._parseConfig(item);\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue ?? [];\n this.search = '';\n }\n _setModel(value) {\n super._setModel(value || []);\n }\n}\n\nclass AutocompleteItem extends BaseAutocompleteItem {\n static create(config, filter) {\n return new AutocompleteItem(config, null, filter);\n }\n get value() {\n let value = clone(this.model);\n if (!this.model || this.model.value === undefined) {\n return undefined;\n }\n value = this.model.value;\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n params[name] = value;\n return params;\n }\n getChipsContent() {\n return this.model ? this.model.name : '';\n }\n _init() {\n //\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue ?? undefined;\n this.search = '';\n }\n}\n\nclass CheckboxItem extends BaseItem {\n static create(config, filter) {\n return new CheckboxItem(config, null, filter);\n }\n get isTypeCheckbox() {\n return true;\n }\n get isChipVisible() {\n return this.value === this.checked;\n }\n get value() {\n const value = this.model ? this.checked : this.unchecked;\n if (!value) {\n return undefined;\n }\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n params[name] = this.model ? value : undefined;\n return params;\n }\n getChipsContent(type = null) {\n return this.label;\n }\n _validateModel() {\n //\n }\n _parseConfig(item) {\n this.checked = item.checked;\n this.unchecked = item.unchecked;\n this.checked = item.checked ? toString(item.checked) : true;\n this.unchecked = item.unchecked ? toString(item.unchecked) : false;\n this.defaultValue = item.default === undefined ? this.unchecked : toString(this.defaultValue);\n super._parseConfig(item);\n }\n _init() {\n if (this.model === undefined) {\n this._model = this.checked === this.defaultValue;\n }\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue ?? false;\n }\n}\n\nclass ChipsItem extends BaseItem {\n static create(config, filter) {\n return new ChipsItem(config, null, filter);\n }\n get isTypeChips() {\n return true;\n }\n get value() {\n const value = clone(this.model);\n if (Array.isArray(value) && value.length === 0) {\n return undefined;\n }\n return value;\n }\n get isChipVisible() {\n return !!this.value;\n }\n get queryObject() {\n if (!this.value) {\n return {};\n }\n const value = this.value\n .map((item) => item.value)\n .join(',');\n const name = this.name;\n return {\n [name]: value,\n };\n }\n get persistanceObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n if (Array.isArray(value)) {\n params[name] = value.join(',');\n }\n else {\n params[name] = undefined;\n }\n return params;\n }\n getChipsContent() {\n return this.model\n .reduce((acc, i) => {\n acc.push(i.name);\n return acc;\n }, [])\n .join(', ');\n }\n _validateModel() {\n //\n }\n _setModel(value) {\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (isNaN(val)) {\n return val;\n }\n return +val;\n });\n }\n this._model = value;\n }\n _parseConfig(item) {\n this.multiple = item.multiple ?? true;\n super._parseConfig(item);\n }\n _init() {\n if (!Array.isArray(this.values)) {\n this.values = [];\n }\n if (this.model && Array.isArray(this.model) && this.values.length) {\n if (Number.isInteger(this.model[0])) {\n this._model = this.model.map((id) => {\n return this.values.find((value) => value.value === id);\n });\n }\n }\n if (this.model === undefined) {\n this._model = [];\n }\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue ?? [];\n }\n}\n\nvar ItemDateMode;\n(function (ItemDateMode) {\n ItemDateMode[\"Calendar\"] = \"calendar\";\n ItemDateMode[\"ScrollMonthYear\"] = \"monthyear\";\n ItemDateMode[\"ScrollMonthDayYear\"] = \"monthdayyear\";\n})(ItemDateMode || (ItemDateMode = {}));\n\nclass BaseDateItem extends BaseItem {\n get value() {\n const value = clone(this.model);\n if (!value || !isValid(value) || !isDate(value)) {\n return undefined;\n }\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n params[name] = value;\n return params;\n }\n get persistanceObject() {\n const value = this.queryObject[this.name];\n return {\n [this.name]: value ? simpleFormat(value) : undefined,\n };\n }\n _validateModel() {\n }\n _setModel(value) {\n if (value) {\n if (!isDate(value) || !isValid(value)) {\n value = parseISO(value);\n }\n }\n super._setModel(value);\n }\n _parseConfig(item) {\n this.maxYear = item.maxYear;\n this.mode = item.mode || ItemDateMode.Calendar;\n super._parseConfig(item);\n }\n _init() {\n if (!this.label) {\n this.label = ['Min', 'Max'];\n }\n }\n}\n\nclass DateItem extends BaseDateItem {\n static create(config, filter) {\n return new DateItem(config, null, filter);\n }\n getChipsContent(type = null) {\n let dateFormat = 'date';\n if (this.mode === ItemDateMode.ScrollMonthYear) {\n dateFormat = 'full-date-dayless';\n }\n return format(this.model, dateFormat);\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n\nclass DateTimeItem extends BaseDateItem {\n static create(config, filter) {\n return new DateTimeItem(config, null, filter);\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n\nfunction findValue(values, value, children) {\n for (let i = 0; i < values.length; i++) {\n const val = values[i];\n if (val[children]) {\n return findValue(val[children], value, children);\n }\n if (val.value === value) {\n return val;\n }\n }\n return undefined;\n}\n\nclass SimpleSelectItem extends BaseSelectItem {\n constructor(itemConfig, _persistedValues, _filter) {\n super(itemConfig, _persistedValues, _filter);\n }\n get value() {\n let value = this.model;\n if (value === '__all' || value === undefined) {\n value = undefined;\n }\n return value;\n }\n getChipsContent(type = null) {\n if (this.children) {\n const itemValue = findValue(this.values, this.model, this.children);\n return itemValue && itemValue.name;\n }\n const itemValue = this.values.find((val) => val.value === this.model);\n if (itemValue) {\n return itemValue.name;\n }\n else if (this.isolate) {\n return this.isolate.label;\n }\n }\n get isChipVisible() {\n return this.model !== '__all' && this.model !== undefined;\n }\n _init() {\n super._init();\n if (this.model === undefined && this.defaultValue === undefined) {\n this._model = '__all';\n }\n }\n get isolateOptionNotSelected() {\n const modelValue = this.model;\n const isolate = this.isolate;\n return isolate && !isolate.enabled && modelValue?.length === 0;\n }\n _setModel(value) {\n if (value) {\n if (!isNaN(value)) {\n value = +value;\n }\n }\n super._setModel(value);\n }\n _validateModel() {\n const item = this.values.find((value) => {\n return value.value == this.model;\n });\n const value = item ? item.value : '__all';\n if (this._model !== value) {\n this.model = value;\n }\n }\n _clearValue(defaultValue = undefined) {\n super._clearValue(defaultValue);\n const value = Array.isArray(this.values) && this.values.some((val) => val.value === '__all')\n ? '__all'\n : undefined;\n this.model = defaultValue ?? value;\n }\n}\n\nclass SelectItem {\n static create(config, filter) {\n if (config.multiple) {\n return new MultipleSelectItem(config, null, filter);\n }\n return new SimpleSelectItem(config, null, filter);\n }\n}\n\nclass TextItem extends BaseItem {\n static create(config, filter) {\n return new TextItem(config, null, filter);\n }\n get value() {\n return !!this.model ? this.model : undefined;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n params[name] = value;\n return params;\n }\n getChipsContent() {\n return this.model;\n }\n _validateModel() {\n //\n }\n _parseConfig(item) {\n this.prefix = item.prefix;\n this.suffix = item.suffix;\n super._parseConfig(item);\n }\n _init() {\n //\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue ?? '';\n }\n}\n\nfunction createFilterItem(item, config, filter) {\n switch (item.type) {\n case ItemType.Select: {\n return SelectItem.create(item, filter);\n }\n case ItemType.Chips: {\n return ChipsItem.create(item, filter);\n }\n case ItemType.Range: {\n return RangeItem.create(item, config, filter);\n }\n case ItemType.DateRange: {\n return DateRangeItem.create(item, filter);\n }\n case ItemType.DateTimeRange: {\n return DateTimeRangeItem.create(item, filter);\n }\n case ItemType.Date: {\n return DateItem.create(item, filter);\n }\n case ItemType.Week: {\n return WeekItem.create(item, filter);\n }\n case ItemType.DateTime: {\n return DateTimeItem.create(item, filter);\n }\n case ItemType.AutoComplete: {\n return AutocompleteItem.create(item, filter);\n }\n case ItemType.AutoCompleteChips: {\n return AutocompleteChipsItem.create(item, filter);\n }\n case ItemType.Checkbox: {\n return CheckboxItem.create(item, filter);\n }\n case ItemType.Keyword:\n case ItemType.Text: {\n return TextItem.create(item, filter);\n }\n }\n}\n\nvar ActionMode;\n(function (ActionMode) {\n ActionMode[\"Button\"] = \"button\";\n ActionMode[\"SelectButton\"] = \"selectButton\";\n ActionMode[\"Menu\"] = \"menu\";\n ActionMode[\"File\"] = \"file\";\n})(ActionMode || (ActionMode = {}));\n\nvar ButtonStyle;\n(function (ButtonStyle) {\n ButtonStyle[\"Basic\"] = \"basic\";\n ButtonStyle[\"Raised\"] = \"raised\";\n ButtonStyle[\"Icon\"] = \"icon\";\n ButtonStyle[\"Fab\"] = \"fab\";\n ButtonStyle[\"MiniFab\"] = \"mini-fab\";\n ButtonStyle[\"Flat\"] = \"flat\";\n ButtonStyle[\"Stroked\"] = \"stroked\";\n})(ButtonStyle || (ButtonStyle = {}));\n\nvar ActionType;\n(function (ActionType) {\n ActionType[\"Basic\"] = \"basic\";\n ActionType[\"Raised\"] = \"raised\";\n ActionType[\"Icon\"] = \"icon\";\n ActionType[\"Fab\"] = \"fab\";\n ActionType[\"MiniFab\"] = \"mini-fab\";\n ActionType[\"Flat\"] = \"flat\";\n ActionType[\"Stroked\"] = \"stroked\";\n})(ActionType || (ActionType = {}));\n\nvar PickerViewType;\n(function (PickerViewType) {\n PickerViewType[\"Date\"] = \"date\";\n PickerViewType[\"DateTime\"] = \"datetime\";\n PickerViewType[\"Time\"] = \"time\";\n PickerViewType[\"Week\"] = \"week\";\n PickerViewType[\"MonthRange\"] = \"monthrange\";\n})(PickerViewType || (PickerViewType = {}));\n\nconst SORT_BY_FIELD = 'sortName';\nconst SORT_DIRECTION_FIELD = 'sortDirection';\nclass FsFilterConfig {\n constructor(data = {}) {\n this.load = true;\n this.persist = false;\n this.inline = false;\n this.autofocus = false;\n this.chips = false;\n this.sortValues = null;\n this.sort = null;\n // public sortDirection = null;\n this.queryParam = false;\n this.case = 'camel';\n this._init(data);\n }\n _init(data = {}) {\n this.load = data.load ?? true;\n this.persist = data.persist;\n this.savedFilters = data.savedFilters;\n this.inline = data.inline ?? false;\n this.autofocus = data.autofocus ?? false;\n this.chips = data.chips ?? false;\n this.sortValues = data.sorts;\n this.sort = data.sort;\n this.queryParam = data.queryParam ?? false;\n this.init = data.init;\n this.change = data.change;\n this.reload = data.reload;\n this.autoReload = data.autoReload;\n this.clear = data.clear;\n this.sortChange = data.sortChange;\n this.case = data.case ?? 'camel';\n this.reloadWhenConfigChanged = data.reloadWhenConfigChanged;\n this.button = data.button;\n this.items = data.items;\n this.actions = data.actions;\n this.case = data.case ?? 'camel';\n if (this.persist) {\n if (typeof this.persist === 'object') {\n if (this.persist.name) {\n this.namespace = this.persist.name;\n }\n }\n }\n if (!this.button) {\n this.button = {};\n }\n if (this.button.label === undefined) {\n this.button.label = 'Filters';\n }\n if (this.button.icon === undefined) {\n this.button.icon = 'tune';\n }\n if (this.button.style === undefined) {\n this.button.style = ButtonStyle.Raised;\n }\n if (this.button.color === undefined) {\n this.button.color = 'default';\n }\n if (this.clear === undefined) {\n this.clear = () => { };\n }\n }\n}\n\nclass FsFilterItemsStore {\n constructor() {\n this.sortByItem = null;\n this.sortDirectionItem = null;\n this.keywordItem = null;\n this._ready$ = new BehaviorSubject(false);\n this._items = [];\n this._visibleItems$ = new BehaviorSubject([]);\n this._itemsByName = new Map();\n this._itemsValuesLoaded = false;\n this._hasKeyword = false;\n this._itemsChange$ = new Subject();\n this._destroy$ = new Subject();\n this._lazyInit();\n }\n get items() {\n return this._items;\n }\n get itemNames() {\n return this._items.map((item) => item.name);\n }\n get visibleItems() {\n return this._visibleItems$.getValue();\n }\n set visibleItems(items) {\n this._visibleItems$.next(items);\n }\n get visibleItems$() {\n return this._visibleItems$.asObservable();\n }\n get hasKeyword() {\n return this._hasKeyword;\n }\n get itemsChange$() {\n return this._itemsChange$.pipe(debounceTime(30));\n }\n get ready$() {\n return this._ready$.asObservable();\n }\n ngOnDestroy() {\n this.destroyItems();\n this._destroy$.next();\n this._destroy$.complete();\n }\n setConfig(config) {\n this._itemsByName.clear();\n this._config = config;\n this.initItems(config.items);\n }\n getItemByName(name) {\n return this._itemsByName.get(name);\n }\n initItems(items) {\n this._itemsValuesLoaded = false;\n if (Array.isArray(items)) {\n this._createItems(items);\n }\n }\n filtersClear() {\n this.items.forEach((item) => {\n if (item instanceof RangeItem) {\n item.clearRange(null, item.defaultValue);\n }\n else if (item instanceof BaseDateRangeItem) {\n item.clearDateRange(null, item.defaultValue);\n }\n else {\n item.clear(item.defaultValue);\n }\n });\n if (this.sortByItem) {\n if (this._config.sort) {\n this.sortByItem.model = this._config.sort.value;\n }\n else {\n this.sortByItem.clear(this.sortByItem.defaultValue);\n }\n }\n if (this.sortDirectionItem) {\n if (this._config.sort) {\n this.sortDirectionItem.model = this._config.sort.direction;\n }\n else {\n this.sortDirectionItem.clear(this.sortDirectionItem.defaultValue);\n }\n }\n this.keywordItem?.clear();\n }\n loadAsyncValues() {\n this.items\n .filter((item) => item.hasPendingValues)\n .forEach((item) => item.loadAsyncValues());\n }\n loadAsyncDefaults() {\n // default values can be asynchronous, and we must load them if there is no persisted value instead\n const defaultValuesToBeLoaded = this.items\n .filter((item) => {\n return item.defaultValueFn\n && (item.persistedValue === null || item.persistedValue === undefined);\n });\n // special hack for isolate multiple select\n // values for this type of select must be preloaded\n // Read more in class MultipleSelectItem._init()\n const valuesToBeLoaded = this.items\n .filter((item) => {\n return (item instanceof MultipleSelectItem) && item.hasPendingValues && item.isolate;\n });\n if (defaultValuesToBeLoaded.length > 0 || valuesToBeLoaded.length > 0) {\n forkJoin([\n ...defaultValuesToBeLoaded\n .map((item) => item.loadDefaultValue()),\n ...valuesToBeLoaded\n .map((item) => {\n item.loadAsyncValues();\n return item.loading$\n .pipe();\n }),\n ])\n .pipe(finalize(() => {\n this._ready$.next(true);\n }), takeUntil(this._destroy$))\n .subscribe();\n }\n else {\n this._ready$.next(true);\n }\n }\n getSort() {\n let sortBy = this.getSortByValue();\n sortBy = sortBy === '__all' ? null : sortBy;\n let sortDirection = this.getSortDirectionValue();\n sortDirection = sortDirection === '__all' ? null : sortDirection;\n return {\n value: sortBy,\n direction: sortDirection,\n };\n }\n getSortByValue() {\n return this.sortByItem ? this.sortByItem.model : null;\n }\n getSortDirectionValue() {\n return this.sortDirectionItem ? this.sortDirectionItem.model : null;\n }\n updateSort(sort) {\n if (sort.sortBy) {\n this.sortByItem.model = sort.sortBy;\n }\n if (sort.sortDirection) {\n this.sortDirectionItem.model = sort.sortDirection;\n }\n }\n values(onlyPresented = false) {\n return this.items\n .reduce((acc, item) => {\n const value = item.value;\n if (!onlyPresented || value !== null) {\n acc[item.name] = value;\n }\n return acc;\n }, {});\n }\n valuesAsQuery({ onlyPresented = true, items = null, persisted = false, } = {}) {\n const params = {};\n (items || this.items)\n .forEach((filterItem) => {\n const values = persisted\n ? filterItem.persistanceObject\n : filterItem.queryObject;\n Object.assign(params, values);\n });\n if (onlyPresented) {\n return pickBy(params, (val) => {\n return val !== void 0;\n });\n }\n return params;\n }\n init(p) {\n this.items\n .forEach((item) => {\n item.initValues(p[item.name]);\n });\n this._initSortingItems(p);\n this.loadAsyncDefaults();\n this._subscribeToItemsChanges();\n }\n updateItemsWithValues(values) {\n this.items\n .forEach((item) => {\n if (values[item.name]) {\n item.model = values[item.name];\n }\n else {\n if (item instanceof RangeItem) {\n item.clearRange(null, item.defaultValue);\n }\n else if (item instanceof BaseDateRangeItem) {\n item.clearDateRange(null, item.defaultValue);\n }\n else {\n item.clear();\n }\n }\n });\n if (this.sortByItem) {\n this.sortByItem.clear();\n }\n if (this.sortDirectionItem) {\n this.sortDirectionItem.clear();\n }\n }\n updateSortingItemsValues(items) {\n this.sortByItem.values = items;\n }\n destroyItems() {\n this.items\n .forEach((item) => item.destroy());\n this.sortByItem?.destroy();\n this.sortDirectionItem?.destroy();\n this._items = [];\n this.sortByItem = null;\n this.sortDirectionItem = null;\n }\n /**\n * Some items might need to load async values before they will be shown\n */\n prepareItems() {\n if (!this._itemsValuesLoaded) {\n this._itemsValuesLoaded = true;\n this.loadAsyncValues();\n }\n }\n updateItemsVisiblity() {\n this.visibleItems = this.items\n .filter((item) => !item.isTypeKeyword && !item.hide);\n }\n _createItems(items) {\n this._items = items\n .filter((item) => !item.disable)\n .filter((item) => {\n if (this._itemsByName.has(item.name)) {\n throw Error('Filter init error. Items name must be unique.');\n }\n else {\n this._itemsByName.set(item.name, null);\n return true;\n }\n })\n .map((item) => {\n const filterItem = createFilterItem(item, { case: this._config.case }, this.filter);\n if (filterItem.type === ItemType.Keyword) {\n this._hasKeyword = true;\n }\n this._itemsByName.set(item.name, filterItem);\n return filterItem;\n });\n this._createSortingItems();\n }\n _subscribeToItemsChanges() {\n this.items\n .forEach((item) => {\n item.valueChange$\n .pipe(takeUntil(item.destroy$))\n .subscribe(() => {\n this._itemsChange$.next(item);\n });\n });\n if (this._config.sortValues?.length) {\n this.sortByItem.valueChange$\n .pipe(takeUntil(this.sortByItem.destroy$))\n .subscribe(() => {\n this._itemsChange$.next(this.sortByItem);\n });\n this.sortDirectionItem.valueChange$\n .pipe(takeUntil(this.sortDirectionItem.destroy$))\n .subscribe(() => {\n this._itemsChange$.next(this.sortDirectionItem);\n });\n }\n }\n _lazyInit() {\n this.ready$\n .pipe(filter$1((state) => state), takeUntil(this._destroy$))\n .subscribe(() => {\n this.updateItemsVisiblity();\n this._setKeywordItem();\n });\n }\n _initSortingItems(p) {\n if (this.sortByItem && this.sortDirectionItem) {\n this.sortByItem.initValues(p[this.sortByItem.name]);\n this.sortDirectionItem.initValues(p[this.sortDirectionItem.name]);\n }\n }\n _createSortingItems() {\n if (this._config.sortValues?.length > 0) {\n const sortByItem = {\n name: SORT_BY_FIELD,\n type: ItemType.Select,\n label: 'Sort by',\n values: this._config.sortValues,\n };\n if (this._config.sort && this._config.sort.value) {\n sortByItem.default = this._config.sort.value;\n }\n this.sortByItem = new SimpleSelectItem(sortByItem, null, this.filter);\n const sortDirectionItem = {\n name: SORT_DIRECTION_FIELD,\n type: ItemType.Select,\n label: 'Sort direction',\n values: [\n { name: 'Ascending', value: 'asc' },\n { name: 'Descending', value: 'desc' },\n ],\n };\n if (this._config.sort && this._config.sort.direction) {\n sortDirectionItem.default = this._config.sort.direction;\n }\n this.sortDirectionItem = new SimpleSelectItem(sortDirectionItem, null, this.filter);\n }\n }\n _setKeywordItem() {\n this.keywordItem = this\n .items\n .find((item) => item.isTypeKeyword);\n }\n}\nFsFilterItemsStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterItemsStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nFsFilterItemsStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterItemsStore });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterItemsStore, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\nconst FILTER_STORE_KEY = 'fs-filter-persist';\nclass PersistanceParamsController extends FsPersistanceStore {\n constructor(_store, _route, _location, _itemsStore, _dialogRef, _drawerRef) {\n super(_store, _route);\n this._location = _location;\n this._itemsStore = _itemsStore;\n this._dialogRef = _dialogRef;\n this._drawerRef = _drawerRef;\n this.STORE_KEY = FILTER_STORE_KEY;\n }\n init(persistanceConfig, namespace, paramsCase) {\n this._paramsCase = paramsCase;\n namespace = namespace ?? getNormalizedPath(this._location);\n const persistanceDisabled = !!this._dialogRef || !!this._drawerRef;\n this.setConfig(persistanceConfig, namespace, persistanceDisabled);\n }\n restore() {\n if (!this.enabled) {\n return;\n }\n super.restore();\n const items = [\n ...this._itemsStore.items,\n this._itemsStore.sortByItem,\n this._itemsStore.sortDirectionItem,\n ].filter((item) => !!item);\n if (this._value) {\n this._value.data = restoreItems(this._value.data, items, this._paramsCase);\n }\n }\n}\nPersistanceParamsController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: PersistanceParamsController, deps: [{ token: i1.FsStore }, { token: i2.ActivatedRoute }, { token: i1$1.Location }, { token: FsFilterItemsStore }, { token: i1$2.MatDialogRef, optional: true }, { token: i6.DrawerRef, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nPersistanceParamsController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: PersistanceParamsController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: PersistanceParamsController, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1.FsStore }, { type: i2.ActivatedRoute }, { type: i1$1.Location }, { type: FsFilterItemsStore }, { type: i1$2.MatDialogRef, decorators: [{\n type: Optional\n }] }, { type: i6.DrawerRef, decorators: [{\n type: Optional\n }] }]; } });\n\nclass QueryParamsController {\n constructor(_route, _itemsStore) {\n this._route = _route;\n this._itemsStore = _itemsStore;\n this._enabled = false;\n }\n get enabled() {\n return this._enabled;\n }\n get fetchedParams() {\n return this._fetchedParams;\n }\n init(enabled, paramsCase) {\n this._enabled = enabled;\n this._paramsCase = paramsCase;\n if (this.enabled) {\n this.fetchFromQueryParams();\n }\n }\n writeStateToQueryParams(params) {\n if (this._enabled) {\n this._replaceState(params);\n }\n }\n /**\n * Parse query and update filter values\n */\n fetchFromQueryParams() {\n const items = [\n ...this._itemsStore.items,\n this._itemsStore.sortByItem,\n this._itemsStore.sortDirectionItem,\n ].filter((item) => !!item);\n this._fetchedParams = restoreItems(this._route.snapshot.queryParams, items, this._paramsCase);\n }\n _replaceState(data) {\n const url = new URL(window.location.href);\n Object.keys(data)\n .forEach((name) => {\n if (data[name] === undefined || data[name] === null) {\n url.searchParams.delete(name);\n }\n else {\n url.searchParams.set(name, data[name]);\n }\n });\n history.replaceState({}, null, url.pathname + url.search);\n }\n}\nQueryParamsController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: QueryParamsController, deps: [{ token: i2.ActivatedRoute }, { token: FsFilterItemsStore }], target: i0.ɵɵFactoryTarget.Injectable });\nQueryParamsController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: QueryParamsController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: QueryParamsController, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i2.ActivatedRoute }, { type: FsFilterItemsStore }]; } });\n\nclass FsFilterSavedFilterEditComponent {\n constructor(data, _dialogRef) {\n this.data = data;\n this._dialogRef = _dialogRef;\n this.saveAsFilter = 'new';\n this.savedFilterName = '';\n this._destroy$ = new Subject();\n this.save = () => {\n const savedFilter = this.saveAsFilter === 'new' ?\n {\n name: this.savedFilterName,\n active: true,\n filters: this.data.params,\n } : {\n ...this.saveAsFilter,\n filters: this.data.params,\n };\n return this._saveCallback(savedFilter)\n .pipe(tap((filter) => {\n this._dialogRef.close(filter);\n }), takeUntil(this._destroy$));\n };\n this.savedFilters = this.data.savedFilters;\n this._saveCallback = this.data.saveCallback;\n }\n}\nFsFilterSavedFilterEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterSavedFilterEditComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$2.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterSavedFilterEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterSavedFilterEditComponent, selector: \"ng-component\", ngImport: i0, template: \"<form fsForm [submit]=\\\"save\\\">\\n <h1 mat-dialog-title>\\n Save filter\\n </h1>\\n <div mat-dialog-content>\\n <mat-form-field>\\n <mat-label>Save as</mat-label>\\n <mat-select [(ngModel)]=\\\"saveAsFilter\\\" name=\\\"saveAs\\\">\\n <mat-option value=\\\"new\\\">New filter</mat-option>\\n <ng-container *ngIf=\\\"savedFilters.length\\\">\\n <mat-optgroup label=\\\"Saved filters\\\">\\n <ng-container *ngFor=\\\"let filter of savedFilters\\\">\\n <mat-option [value]=\\\"filter\\\">{{ filter.name }}</mat-option>\\n </ng-container>\\n </mat-optgroup>\\n </ng-container>\\n </mat-select>\\n </mat-form-field>\\n <br>\\n <mat-form-field *ngIf=\\\"saveAsFilter === 'new'\\\">\\n <mat-label>Name</mat-label>\\n <input matInput name=\\\"filter-name\\\" [(ngModel)]=\\\"savedFilterName\\\" required>\\n </mat-form-field>\\n </div>\\n <div mat-dialog-actions>\\n <button \\n mat-button\\n type=\\\"submit\\\"\\n color=\\\"primary\\\">\\n {{ saveAsFilter === 'new' ? 'Create' : 'Save' }}\\n </button>\\n\\n <button \\n mat-button\\n type=\\\"button\\\"\\n [mat-dialog-close]=\\\"null\\\">\\n Cancel\\n </button>\\n </div>\\n</form>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i2$1.RequiredValidator, selector: \":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]\", inputs: [\"required\"] }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: i2$1.NgForm, selector: \"form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]\", inputs: [\"ngFormOptions\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i4.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$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i5.MatOptgroup, selector: \"mat-optgroup\", inputs: [\"disabled\"], exportAs: [\"matOptgroup\"] }, { kind: \"component\", type: i3$1.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"directive\", type: i1$2.MatDialogClose, selector: \"[mat-dialog-close], [matDialogClose]\", inputs: [\"aria-label\", \"type\", \"mat-dialog-close\", \"matDialogClose\"], exportAs: [\"matDialogClose\"] }, { kind: \"directive\", type: i1$2.MatDialogTitle, selector: \"[mat-dialog-title], [matDialogTitle]\", inputs: [\"id\"], exportAs: [\"matDialogTitle\"] }, { kind: \"directive\", type: i1$2.MatDialogContent, selector: \"[mat-dialog-content], mat-dialog-content, [matDialogContent]\" }, { kind: \"directive\", type: i1$2.MatDialogActions, selector: \"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]\", inputs: [\"align\"] }, { kind: \"directive\", type: i9.FsFormDirective, selector: \"[fsForm]\", inputs: [\"wrapperSelector\", \"messageSelector\", \"hintSelector\", \"labelSelector\", \"autocomplete\", \"shortcuts\", \"confirm\", \"confirmDialog\", \"confirmDrawer\", \"confirmBrowser\", \"confirmTabs\", \"dirtySubmitButton\", \"submit\", \"successDelay\", \"errorDelay\", \"tabGroup\", \"deactivationGuard\"], outputs: [\"fsForm\", \"invalid\", \"valid\", \"submitted\", \"reseted\", \"cleared\"], exportAs: [\"fsForm\"] }, { kind: \"directive\", type: i9.FsFormRequiredDirective, selector: \"[fsFormRequired],[ngModel][required]\", inputs: [\"fsFormRequired\", \"required\", \"fsFormRequiredMessage\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterSavedFilterEditComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: \"<form fsForm [submit]=\\\"save\\\">\\n <h1 mat-dialog-title>\\n Save filter\\n </h1>\\n <div mat-dialog-content>\\n <mat-form-field>\\n <mat-label>Save as</mat-label>\\n <mat-select [(ngModel)]=\\\"saveAsFilter\\\" name=\\\"saveAs\\\">\\n <mat-option value=\\\"new\\\">New filter</mat-option>\\n <ng-container *ngIf=\\\"savedFilters.length\\\">\\n <mat-optgroup label=\\\"Saved filters\\\">\\n <ng-container *ngFor=\\\"let filter of savedFilters\\\">\\n <mat-option [value]=\\\"filter\\\">{{ filter.name }}</mat-option>\\n </ng-container>\\n </mat-optgroup>\\n </ng-container>\\n </mat-select>\\n </mat-form-field>\\n <br>\\n <mat-form-field *ngIf=\\\"saveAsFilter === 'new'\\\">\\n <mat-label>Name</mat-label>\\n <input matInput name=\\\"filter-name\\\" [(ngModel)]=\\\"savedFilterName\\\" required>\\n </mat-form-field>\\n </div>\\n <div mat-dialog-actions>\\n <button \\n mat-button\\n type=\\\"submit\\\"\\n color=\\\"primary\\\">\\n {{ saveAsFilter === 'new' ? 'Create' : 'Save' }}\\n </button>\\n\\n <button \\n mat-button\\n type=\\\"button\\\"\\n [mat-dialog-close]=\\\"null\\\">\\n Cancel\\n </button>\\n </div>\\n</form>\\n\" }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DIALOG_DATA]\n }] }, { type: i1$2.MatDialogRef }]; } });\n\nclass SavedFiltersController {\n constructor(_itemsStore, _dialog) {\n this._itemsStore = _itemsStore;\n this._dialog = _dialog;\n this._savedFilters$ = new BehaviorSubject([]);\n this._activeFilter$ = new BehaviorSubject(null);\n this._enabled$ = new BehaviorSubject(false);\n this._destroy$ = new Subject();\n }\n get enabled() {\n return this._enabled$.getValue();\n }\n get enabled$() {\n return this._enabled$\n .pipe(distinctUntilChanged());\n }\n get savedFilters() {\n return this._savedFilters$.getValue();\n }\n set savedFilters(filters) {\n this._savedFilters$.next(filters);\n }\n get savedFilters$() {\n return this._savedFilters$\n .pipe(distinctUntilChanged());\n }\n get activeFilter() {\n return this._activeFilter$.getValue();\n }\n get activeFilter$() {\n return this._activeFilter$\n .pipe(distinctUntilChanged());\n }\n get activeFilterData() {\n return this._activeFilter$.getValue()?.filters;\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n init(remoteParamsConfig, paramsCase) {\n if (!remoteParamsConfig) {\n this._setEnabledStatus(false);\n return;\n }\n this._setEnabledStatus(true);\n this._paramsCase = paramsCase;\n this._config = remoteParamsConfig;\n }\n initSavedFilters(filters) {\n filters = [...filters];\n filters.forEach((savedFilter) => {\n savedFilter.filters = restoreItems(savedFilter.filters, this._itemsStore.items, this._paramsCase);\n });\n this.savedFilters = filters;\n }\n load() {\n return this._config.load()\n .pipe(tap((response) => {\n this.initSavedFilters(response);\n }));\n }\n save(savedFilter) {\n return this._config.save(savedFilter);\n }\n order(savedFilters) {\n return this._config.order(savedFilters)\n .pipe(tap(() => {\n this.savedFilters = [\n ...savedFilters,\n ];\n }));\n }\n delete(savedFilter) {\n return this._config.delete(savedFilter)\n .pipe(tap(() => {\n this.savedFilters = this.savedFilters\n .filter((f) => f.id !== savedFilter.id);\n }));\n }\n setActiveFilter(savedFilter) {\n if (savedFilter) {\n const existingFilter = this.savedFilters\n .find((f) => f.id === savedFilter.id);\n if (!existingFilter) {\n throw new Error(`Saved filter cannot be activated, because it does not exists. Filter ID = ${savedFilter.id}`);\n }\n this._activeFilter$.next(existingFilter);\n }\n else {\n this._activeFilter$.next(null);\n }\n }\n openSavedFilterEditDialog() {\n const params = buildQueryParams(this._itemsStore.valuesAsQuery(), this._itemsStore.items);\n const dialogConfig = {\n data: {\n params: params,\n savedFilters: this.savedFilters,\n saveCallback: this.save.bind(this),\n },\n };\n this._dialog\n .open(FsFilterSavedFilterEditComponent, dialogConfig)\n .beforeClosed()\n .pipe(take(1), takeUntil(this._destroy$))\n .subscribe((updatedFilter) => {\n if (updatedFilter) {\n // get already saved related filter object\n const savedFilter = this.savedFilters\n .find((f) => f.id === updatedFilter.id);\n // restore values from query string\n updatedFilter.filters = restoreItems(updatedFilter.filters, this._itemsStore.items, this._paramsCase);\n if (savedFilter) {\n Object.assign(savedFilter, updatedFilter);\n }\n else {\n this.resetActiveFilter();\n this.savedFilters = [\n ...this.savedFilters,\n updatedFilter,\n ];\n }\n this.updateActiveFilter();\n }\n });\n }\n updateActiveFilter() {\n // Lookup active filter\n const acitveFilter = this.savedFilters\n .find((f) => f.active);\n if (acitveFilter) {\n this.setActiveFilter(acitveFilter);\n }\n }\n resetActiveFilter() {\n // Reset all previously activated filters\n this.savedFilters.forEach((savedFilter) => {\n savedFilter.active = false;\n });\n this.setActiveFilter(null);\n }\n _setEnabledStatus(value) {\n this._enabled$.next(value);\n }\n}\nSavedFiltersController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SavedFiltersController, deps: [{ token: FsFilterItemsStore }, { token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });\nSavedFiltersController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SavedFiltersController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SavedFiltersController, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: FsFilterItemsStore }, { type: i1$2.MatDialog }]; } });\n\nclass ExternalParamsController {\n constructor(_itemsStore, _persistanceStore, _queryParams, _savedFilters) {\n this._itemsStore = _itemsStore;\n this._persistanceStore = _persistanceStore;\n this._queryParams = _queryParams;\n this._savedFilters = _savedFilters;\n this._pending$ = new BehaviorSubject(false);\n this._shouldResetSavedFilters = true;\n this._destroy$ = new Subject();\n }\n get params() {\n let result = {};\n if (this._persistanceStore.enabled) {\n result = {\n ...result,\n ...this._persistanceStore.value?.data,\n };\n }\n if (this._savedFilters.enabled && this._savedFilters.activeFilter) {\n const query = Object.keys(result)\n .filter((key) => !this._itemsStore.itemNames.includes(key))\n .reduce((acc, key) => {\n return {\n ...acc,\n [key]: result[key],\n };\n }, {});\n result = {\n ...query,\n ...this._savedFilters.activeFilterData,\n };\n }\n else if (this._queryParams.enabled) {\n result = {\n ...result,\n ...this._queryParams.fetchedParams,\n };\n }\n return result;\n }\n get pending() {\n return this._pending$.getValue();\n }\n get pending$() {\n return this._pending$.asObservable();\n }\n get savedFiltersController() {\n return this._savedFilters;\n }\n get savedFiltersEnabled() {\n return this._savedFilters.enabled;\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n setConfig(config) {\n this._config = config;\n this._initPersistance();\n this._initQueryParams();\n this._initSavedFilters();\n this.initItems();\n }\n setActiveSavedFilter(savedFilter) {\n this.savedFiltersController.setActiveFilter(savedFilter);\n if (savedFilter) {\n this.reloadFiltersWithValues(savedFilter.filters, false);\n }\n }\n reloadFiltersWithValues(params, shouldResetSavedFilters = true) {\n this._shouldResetSavedFilters = shouldResetSavedFilters;\n this._itemsStore.updateItemsWithValues(params);\n this._saveQueryParams();\n this._savePersistedParams();\n }\n initItems() {\n this._pending$.next(true);\n if (this._savedFilters.enabled) {\n this._savedFilters\n .load()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._savedFilters.updateActiveFilter();\n this._initItemsValues();\n this._listenAndResetSavedFilters();\n this._pending$.next(false);\n });\n }\n else {\n this._initItemsValues();\n this._pending$.next(false);\n }\n this._listenItemsChange();\n }\n _initItemsValues() {\n this._itemsStore.init(this.params);\n this._saveQueryParams();\n this._savePersistedParams();\n }\n fetchQueryParams() {\n this._initQueryParams();\n this._itemsStore.updateItemsWithValues(this.params);\n }\n _initPersistance() {\n this._persistanceStore.init(this._config.persist, this._config.namespace, this._config.case);\n }\n _initQueryParams() {\n this._queryParams.init(this._config.queryParam, this._config.case);\n }\n _initSavedFilters() {\n this._savedFilters.init(this._config.savedFilters, this._config.case);\n }\n _listenItemsChange() {\n this._itemsStore.ready$\n .pipe(filter$1((v) => v), take(1), takeUntil(this._destroy$))\n .subscribe(() => {\n this._saveQueryParams();\n this._savePersistedParams();\n });\n this._itemsStore\n .itemsChange$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._saveQueryParams();\n this._savePersistedParams();\n });\n }\n _listenAndResetSavedFilters() {\n this._itemsStore\n .itemsChange$\n .pipe(filter$1(() => !!this.savedFiltersController.activeFilter), switchMap(() => {\n const shouldReset = this._shouldResetSavedFilters;\n this._shouldResetSavedFilters = true;\n return of(shouldReset);\n }), filter$1((shouldReset) => shouldReset), takeUntil(this._destroy$))\n .subscribe(() => {\n this.savedFiltersController.resetActiveFilter();\n });\n }\n _saveQueryParams() {\n const targetItems = this._itemsStore.items\n .filter((item) => !item.queryParamsDisabled);\n const params = buildQueryParams(this._itemsStore.valuesAsQuery({\n onlyPresented: false,\n items: targetItems,\n persisted: true,\n }), targetItems);\n this._queryParams.writeStateToQueryParams(params);\n }\n _savePersistedParams() {\n const targetItems = this._itemsStore.items\n .filter((item) => !item.persistanceDisabled);\n const params = buildQueryParams(this._itemsStore.valuesAsQuery({\n onlyPresented: false,\n items: targetItems,\n persisted: true,\n }), targetItems);\n this._persistanceStore.save(params);\n }\n}\nExternalParamsController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ExternalParamsController, deps: [{ token: FsFilterItemsStore }, { token: PersistanceParamsController }, { token: QueryParamsController }, { token: SavedFiltersController }], target: i0.ɵɵFactoryTarget.Injectable });\nExternalParamsController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ExternalParamsController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ExternalParamsController, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: FsFilterItemsStore }, { type: PersistanceParamsController }, { type: QueryParamsController }, { type: SavedFiltersController }]; } });\n\nclass ActionMenuItem {\n constructor(config = {}, _parent) {\n this._parent = _parent;\n this.items = [];\n this._isGroup = false;\n this._visible$ = new BehaviorSubject(true);\n this._disabled$ = new BehaviorSubject(false);\n this._init(config);\n }\n get isGroup() {\n return this._isGroup;\n }\n get visible() {\n return this._visible$.getValue();\n }\n get visible$() {\n return this._visible$.asObservable();\n }\n set disabled(value) {\n this._disabled$.next(value);\n }\n get disabled() {\n return this._disabled$.getValue();\n }\n get disabled$() {\n return this._disabled$.asObservable();\n }\n updateVisibility() {\n const visible = this._showFn ? this._showFn() : true;\n if (!visible || !this.isGroup) {\n this._visible$.next(visible);\n return;\n }\n const numberOfVisibleChildren = this.items\n .reduce((acc, item) => {\n item.updateVisibility();\n if (item.visible) {\n acc++;\n }\n return acc;\n }, 0);\n this._visible$.next(!!numberOfVisibleChildren);\n }\n _init(config) {\n this.label = config.label;\n this.icon = config.icon;\n this._showFn = config.show;\n if ('items' in config) {\n this._isGroup = true;\n if (Array.isArray(config.items)) {\n this.items = config\n .items\n .map((item) => new ActionMenuItem(item, this));\n }\n this.updateVisibility();\n }\n else {\n this.click = config.click;\n this.routerLink = config.link;\n if (!this._parent) {\n this.updateVisibility();\n }\n }\n }\n}\n\nclass Action {\n constructor(filterConfig, actionConfig = {}) {\n this.primary = true;\n this.isReorderAction = false;\n this.deselect = false;\n this.classArray = [];\n this.items = [];\n this._visible$ = new BehaviorSubject(true);\n this._disabled$ = new BehaviorSubject(false);\n this._init(filterConfig, actionConfig);\n }\n get visible() {\n return this._visible$.getValue();\n }\n get visible$() {\n return this._visible$.asObservable();\n }\n set disabled(value) {\n this._disabled$.next(value);\n }\n get disabled() {\n return this._disabled$.getValue();\n }\n get disabled$() {\n return this._disabled$.asObservable();\n }\n updateVisibility() {\n const visible = this._showFn ? this._showFn() : true;\n if (!visible || this.mode !== ActionMode.Menu) {\n this._visible$.next(visible);\n return;\n }\n const hasVisibleChildren = this.items.some((item) => item.visible);\n this._visible$.next(hasVisibleChildren);\n }\n updateDisabledState() {\n if (this._disabledFn) {\n this.disabled = this._disabledFn();\n }\n }\n _init(filterConfig, config = {}) {\n config.mode = config.mode ?? ActionMode.Button;\n this._initCore(filterConfig, config);\n switch (config.mode) {\n case ActionMode.Button:\n {\n this.customize = config.customize;\n this.click = config.click ?? (() => {\n // do nothing\n });\n this._disabledFn = config.disabled;\n this.updateDisabledState();\n }\n break;\n case ActionMode.Menu:\n {\n if (config.items && Array.isArray(config.items)) {\n this.items = config.items.map((item) => new ActionMenuItem(item));\n }\n }\n break;\n case ActionMode.SelectButton:\n {\n this._initSelectButton(config);\n }\n break;\n case ActionMode.File:\n {\n this._initFile(config);\n }\n break;\n }\n this.updateVisibility();\n }\n _initCore(filterConfig, config) {\n this.primary = config.primary ?? true;\n this.color = config.color;\n this.tooltip = config.tooltip;\n this.label = config.label;\n this.mode = config.mode;\n this.icon = config.icon;\n this.iconPlacement = config.iconPlacement;\n this._showFn = config.show;\n this.tabIndex = config.tabIndex ?? 0;\n this.menu = config.menu;\n if (!this.type) {\n this.type = (config.type || filterConfig.button?.style || ActionType.Raised);\n if (this.type === ActionType.Stroked && this.primary) {\n this.type = ActionType.Flat;\n }\n }\n if (config.className) {\n this.className = config.className;\n this.classArray = this.className\n .split(' ');\n }\n if (this.primary) {\n this.color = 'primary';\n }\n }\n _initSelectButton(config) {\n this.values = config.values;\n this.value = config.default;\n this.change = config.change;\n this.deselect = config.deselect ?? false;\n }\n _initFile(config) {\n this.fileSelected = config.select;\n this.fileError = config.error;\n this.accept = config.accept;\n this.imageQuality = config.imageQuality;\n this.minWidth = config.minWidth;\n this.minHeight = config.minHeight;\n this.maxWidth = config.maxWidth;\n this.maxHeight = config.maxHeight;\n this.click = config.click ?? (() => {\n //\n });\n this._disabledFn = config.disabled;\n if ((config).multiple !== undefined) {\n this.multiple = (config).multiple;\n }\n this.updateDisabledState();\n }\n}\n\nclass FsFilterActionButtonComponent {\n constructor() {\n this.ActionType = ActionType;\n }\n}\nFsFilterActionButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nFsFilterActionButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterActionButtonComponent, selector: \"fs-filter-action-button\", inputs: { action: \"action\" }, host: { classAttribute: \"action-button\" }, ngImport: i0, template: \"<ng-container [ngSwitch]=\\\"action.type\\\">\\n <button\\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.Icon\\\"\\n mat-icon-button\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <!-- Fab button -->\\n <button \\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.Fab\\\"\\n mat-fab\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <!-- Mini Fab button -->\\n <button \\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.MiniFab\\\"\\n mat-mini-fab\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <button \\n type=\\\"button\\\"\\n *ngSwitchDefault\\n mat-button\\n [ngClass]=\\\"{ \\n 'mat-raised-button': action.type === ActionType.Raised,\\n 'mat-flat-button': action.type === ActionType.Flat,\\n 'mat-stroked-button': action.type === ActionType.Stroked,\\n 'mat-button': action.type === ActionType.Basic,\\n 'mat-icon-button': action.type === ActionType.Icon\\n }\\\"\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [class]=\\\"action.classArray.join(' ')\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <ng-template #buttonContent>\\n <ng-container *ngIf=\\\"!action.icon else withIcon\\\">\\n {{action.label}}\\n </ng-container>\\n\\n <ng-template #withIcon>\\n <mat-icon *ngIf=\\\"!action.iconPlacement || action.iconPlacement === 'left'\\\">{{action.icon}}</mat-icon>\\n {{action.label}}\\n <mat-icon *ngIf=\\\"action.iconPlacement === 'right'\\\">{{action.icon}}</mat-icon>\\n </ng-template>\\n </ng-template>\\n</ng-container>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i1$1.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i3$1.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionButtonComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-action-button', host: { class: 'action-button' }, changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container [ngSwitch]=\\\"action.type\\\">\\n <button\\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.Icon\\\"\\n mat-icon-button\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <!-- Fab button -->\\n <button \\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.Fab\\\"\\n mat-fab\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <!-- Mini Fab button -->\\n <button \\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.MiniFab\\\"\\n mat-mini-fab\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <button \\n type=\\\"button\\\"\\n *ngSwitchDefault\\n mat-button\\n [ngClass]=\\\"{ \\n 'mat-raised-button': action.type === ActionType.Raised,\\n 'mat-flat-button': action.type === ActionType.Flat,\\n 'mat-stroked-button': action.type === ActionType.Stroked,\\n 'mat-button': action.type === ActionType.Basic,\\n 'mat-icon-button': action.type === ActionType.Icon\\n }\\\"\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [class]=\\\"action.classArray.join(' ')\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <ng-template #buttonContent>\\n <ng-container *ngIf=\\\"!action.icon else withIcon\\\">\\n {{action.label}}\\n </ng-container>\\n\\n <ng-template #withIcon>\\n <mat-icon *ngIf=\\\"!action.iconPlacement || action.iconPlacement === 'left'\\\">{{action.icon}}</mat-icon>\\n {{action.label}}\\n <mat-icon *ngIf=\\\"action.iconPlacement === 'right'\\\">{{action.icon}}</mat-icon>\\n </ng-template>\\n </ng-template>\\n</ng-container>\\n\" }]\n }], propDecorators: { action: [{\n type: Input\n }] } });\n\nclass FsFilterActionKebabActionsComponent {\n}\nFsFilterActionKebabActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionKebabActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nFsFilterActionKebabActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterActionKebabActionsComponent, selector: \"fs-filter-action-kebab-actions\", inputs: { kebabActions: \"kebabActions\" }, ngImport: i0, template: \"<button \\n type=\\\"button\\\"\\n mat-icon-button\\n class=\\\"menu-button\\\"\\n [fsMenuTriggerFor]=\\\"kebabActionsMenu\\\">\\n <mat-icon>more_vert</mat-icon>\\n</button>\\n<fs-menu #kebabActionsMenu>\\n <ng-container *ngFor=\\\"let action of kebabActions\\\">\\n <ng-container [ngSwitch]=\\\"action.mode\\\">\\n <!-- Case when actions was collapsed from action with mode = 'menu'-->\\n <ng-container *ngSwitchCase=\\\"'menu'\\\">\\n <ng-container *ngFor=\\\"let childAction of action.items\\\">\\n <ng-container *ngIf=\\\"childAction.isGroup else simpleMenuItem\\\">\\n <fs-menu-group>\\n <ng-template fs-group-menu-item-template>\\n {{ action.label }} <mat-icon style=\\\"margin: 0;\\\">arrow_right</mat-icon> {{childAction.label}}\\n </ng-template>\\n <ng-container *ngFor=\\\"let subAction of childAction.items\\\">\\n <ng-template \\n fs-menu-item\\n [link]=\\\"subAction.routerLink?.link\\\"\\n [queryParams]=\\\"subAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"!(subAction.visible$ | async)\\\"\\n (click)=\\\"subAction.click($event)\\\">\\n <mat-icon *ngIf=\\\"subAction.icon\\\">{{subAction.icon}}</mat-icon>\\n {{subAction.label}}\\n </ng-template>\\n </ng-container>\\n </fs-menu-group>\\n </ng-container>\\n <ng-template #simpleMenuItem>\\n <ng-template \\n fs-menu-item\\n [link]=\\\"childAction.routerLink?.link\\\"\\n [queryParams]=\\\"childAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"!(childAction.visible$ | async)\\\"\\n (click)=\\\"childAction.click($event);\\\">\\n <mat-icon *ngIf=\\\"childAction.icon\\\">{{childAction.icon}}</mat-icon>\\n {{ action.label }} <mat-icon style=\\\"margin: 0;\\\">arrow_right</mat-icon>{{ childAction.label }}\\n </ng-template>\\n </ng-template>\\n </ng-container>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'file'\\\">\\n <ng-template \\n fs-menu-file-item\\n [fsClass]=\\\"action.classArray\\\"\\n [multiple]=\\\"action.multiple\\\"\\n [accept]=\\\"action.accept || '*'\\\"\\n [minWidth]=\\\"action.minWidth\\\"\\n [minHeight]=\\\"action.minHeight\\\"\\n [imageWidth]=\\\"action.maxWidth\\\"\\n [imageHeight]=\\\"action.maxHeight\\\"\\n (error)=\\\"action.fileError($event)\\\"\\n (select)=\\\"action.fileSelected($event)\\\"\\n (click)=\\\"action.click($event)\\\">\\n <mat-icon *ngIf=\\\"action.icon\\\">{{action.icon}}</mat-icon> {{action.label}}\\n </ng-template>\\n </ng-container>\\n\\n <ng-container *ngSwitchDefault>\\n <ng-template \\n fs-menu-item\\n (click)=\\\"action.click($event)\\\"\\n [fsClass]=\\\"action.classArray\\\">\\n <mat-icon *ngIf=\\\"action.icon\\\">{{action.icon}}</mat-icon> {{action.label}}\\n </ng-template>\\n </ng-container>\\n\\n </ng-container>\\n </ng-container>\\n</fs-menu>\\n\", styles: [\".menu-button{width:36px;height:36px;line-height:36px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i1$1.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i3$1.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"component\", type: i6$1.FsMenuComponent, selector: \"fs-menu\", inputs: [\"class\", \"buttonClass\", \"buttonType\", \"buttonColor\"], outputs: [\"opened\", \"closed\"] }, { kind: \"directive\", type: i6$1.FsMenuItemDirective, selector: \"fs-menu-group,[fs-menu-item]\" }, { kind: \"directive\", type: i6$1.FsMenuTriggerDirective, selector: \"[fsMenuTriggerFor]\", inputs: [\"fsMenuTriggerFor\"] }, { kind: \"directive\", type: i6$1.FsMenuFileItemDirective, selector: \"[fs-menu-file-item]\", inputs: [\"multiple\", \"accept\", \"minWidth\", \"minHeight\", \"imageWidth\", \"imageHeight\"], outputs: [\"select\", \"error\"] }, { kind: \"directive\", type: i6$1.FsGroupMenuItemTemplateDirective, selector: \"[fs-group-menu-item-template]\" }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionKebabActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-action-kebab-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<button \\n type=\\\"button\\\"\\n mat-icon-button\\n class=\\\"menu-button\\\"\\n [fsMenuTriggerFor]=\\\"kebabActionsMenu\\\">\\n <mat-icon>more_vert</mat-icon>\\n</button>\\n<fs-menu #kebabActionsMenu>\\n <ng-container *ngFor=\\\"let action of kebabActions\\\">\\n <ng-container [ngSwitch]=\\\"action.mode\\\">\\n <!-- Case when actions was collapsed from action with mode = 'menu'-->\\n <ng-container *ngSwitchCase=\\\"'menu'\\\">\\n <ng-container *ngFor=\\\"let childAction of action.items\\\">\\n <ng-container *ngIf=\\\"childAction.isGroup else simpleMenuItem\\\">\\n <fs-menu-group>\\n <ng-template fs-group-menu-item-template>\\n {{ action.label }} <mat-icon style=\\\"margin: 0;\\\">arrow_right</mat-icon> {{childAction.label}}\\n </ng-template>\\n <ng-container *ngFor=\\\"let subAction of childAction.items\\\">\\n <ng-template \\n fs-menu-item\\n [link]=\\\"subAction.routerLink?.link\\\"\\n [queryParams]=\\\"subAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"!(subAction.visible$ | async)\\\"\\n (click)=\\\"subAction.click($event)\\\">\\n <mat-icon *ngIf=\\\"subAction.icon\\\">{{subAction.icon}}</mat-icon>\\n {{subAction.label}}\\n </ng-template>\\n </ng-container>\\n </fs-menu-group>\\n </ng-container>\\n <ng-template #simpleMenuItem>\\n <ng-template \\n fs-menu-item\\n [link]=\\\"childAction.routerLink?.link\\\"\\n [queryParams]=\\\"childAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"!(childAction.visible$ | async)\\\"\\n (click)=\\\"childAction.click($event);\\\">\\n <mat-icon *ngIf=\\\"childAction.icon\\\">{{childAction.icon}}</mat-icon>\\n {{ action.label }} <mat-icon style=\\\"margin: 0;\\\">arrow_right</mat-icon>{{ childAction.label }}\\n </ng-template>\\n </ng-template>\\n </ng-container>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'file'\\\">\\n <ng-template \\n fs-menu-file-item\\n [fsClass]=\\\"action.classArray\\\"\\n [multiple]=\\\"action.multiple\\\"\\n [accept]=\\\"action.accept || '*'\\\"\\n [minWidth]=\\\"action.minWidth\\\"\\n [minHeight]=\\\"action.minHeight\\\"\\n [imageWidth]=\\\"action.maxWidth\\\"\\n [imageHeight]=\\\"action.maxHeight\\\"\\n (error)=\\\"action.fileError($event)\\\"\\n (select)=\\\"action.fileSelected($event)\\\"\\n (click)=\\\"action.click($event)\\\">\\n <mat-icon *ngIf=\\\"action.icon\\\">{{action.icon}}</mat-icon> {{action.label}}\\n </ng-template>\\n </ng-container>\\n\\n <ng-container *ngSwitchDefault>\\n <ng-template \\n fs-menu-item\\n (click)=\\\"action.click($event)\\\"\\n [fsClass]=\\\"action.classArray\\\">\\n <mat-icon *ngIf=\\\"action.icon\\\">{{action.icon}}</mat-icon> {{action.label}}\\n </ng-template>\\n </ng-container>\\n\\n </ng-container>\\n </ng-container>\\n</fs-menu>\\n\", styles: [\".menu-button{width:36px;height:36px;line-height:36px}\\n\"] }]\n }], propDecorators: { kebabActions: [{\n type: Input\n }] } });\n\nclass FsFilterActionsComponent {\n constructor() {\n this.kebabActions = [];\n this.actions = [];\n this.ActionType = ActionType;\n this.ActionMode = ActionMode;\n }\n actionChange(action, value, selectButton) {\n if (action.change) {\n action.change(value);\n if (action.deselect) {\n selectButton.writeValue(null);\n }\n }\n }\n}\nFsFilterActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nFsFilterActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterActionsComponent, selector: \"fs-filter-actions\", inputs: { kebabActions: \"kebabActions\", actions: \"actions\" }, ngImport: i0, template: \"<ng-container *ngFor=\\\"let action of actions\\\">\\n <ng-container [ngSwitch]=\\\"action.mode\\\">\\n <ng-container *ngSwitchCase=\\\"ActionMode.Button\\\">\\n <fs-filter-action-button\\n [action]=\\\"action\\\"\\n class=\\\"action\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n </fs-filter-action-button>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.Menu\\\">\\n <fs-filter-action-button\\n class=\\\"action\\\"\\n [action]=\\\"action\\\"\\n [fsMenuTriggerFor]=\\\"someRef\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n </fs-filter-action-button>\\n\\n <fs-menu #someRef class=\\\"action\\\">\\n <ng-container *ngFor=\\\"let childAction of action.items\\\">\\n <ng-container *ngIf=\\\"childAction.isGroup else simpleMenuItem\\\">\\n <fs-menu-group [label]=\\\"childAction.label\\\">\\n <ng-container *ngFor=\\\"let subAction of childAction.items\\\">\\n <ng-template\\n fs-menu-item\\n [link]=\\\"subAction.routerLink?.link\\\"\\n [queryParams]=\\\"subAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"(subAction.visible$ | async) === false\\\"\\n (click)=\\\"subAction.click($event)\\\">\\n <mat-icon *ngIf=\\\"subAction.icon\\\">{{subAction.icon}}</mat-icon>\\n {{subAction.label}}\\n </ng-template>\\n </ng-container>\\n </fs-menu-group>\\n </ng-container>\\n <ng-template #simpleMenuItem>\\n <ng-template\\n fs-menu-item\\n [link]=\\\"childAction.routerLink?.link\\\"\\n [queryParams]=\\\"childAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"(childAction.visible$ | async) === false\\\"\\n (click)=\\\"childAction.click($event);\\\">\\n <mat-icon *ngIf=\\\"childAction.icon\\\">{{childAction.icon}}</mat-icon>\\n {{childAction.label}}\\n </ng-template>\\n </ng-template>\\n </ng-container>\\n </fs-menu>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.SelectButton\\\">\\n <mat-select \\n class=\\\"action\\\"\\n [ngClass]=\\\"{ \\n 'mat-stroked-button': action.type === ActionType.Stroked,\\n 'mat-raised-button': action.type === ActionType.Raised,\\n 'mat-flat-button': action.type === ActionType.Flat,\\n 'mat-basic-button': action.type === ActionType.Basic\\n }\\\"\\n [placeholder]=\\\"action.label\\\"\\n [(ngModel)]=\\\"action.value\\\" \\n (ngModelChange)=\\\"actionChange(action, $event, selectButton)\\\"\\n fsSelectButton\\n #selectButton\\n [deselectOnChange]=\\\"false\\\">\\n <mat-option \\n *ngFor=\\\"let item of action.values\\\" \\n [value]=\\\"item.value\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.File\\\">\\n <fs-file\\n class=\\\"action action-button\\\"\\n [accept]=\\\"action.accept || '*'\\\"\\n [multiple]=\\\"action.multiple\\\"\\n [minWidth]=\\\"action.minWidth\\\"\\n [minHeight]=\\\"action.minHeight\\\"\\n [imageWidth]=\\\"action.maxWidth\\\"\\n [imageHeight]=\\\"action.maxHeight\\\"\\n (select)=\\\"action.fileSelected($event)\\\"\\n (error)=\\\"action.fileError($event)\\\"\\n (clicked)=\\\"action.click($event)\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n <fs-filter-action-button \\n [action]=\\\"action\\\">\\n </fs-filter-action-button>\\n </fs-file>\\n </ng-container>\\n </ng-container>\\n</ng-container>\\n<ng-container *ngIf=\\\"kebabActions?.length\\\">\\n <fs-filter-action-kebab-actions\\n [kebabActions]=\\\"kebabActions\\\">\\n </fs-filter-action-kebab-actions>\\n</ng-container>\\n\", styles: [\":host{display:inline-flex}.action-button{display:block}.action+.action{margin-left:5px}.menu-button{width:36px;height:36px;line-height:36px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i6$1.FsMenuComponent, selector: \"fs-menu\", inputs: [\"class\", \"buttonClass\", \"buttonType\", \"buttonColor\"], outputs: [\"opened\", \"closed\"] }, { kind: \"directive\", type: i6$1.FsMenuItemDirective, selector: \"fs-menu-group,[fs-menu-item]\" }, { kind: \"directive\", type: i6$1.FsMenuTriggerDirective, selector: \"[fsMenuTriggerFor]\", inputs: [\"fsMenuTriggerFor\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"component\", type: i8.FsFileComponent, selector: \"fs-file\", inputs: [\"minHeight\", \"minWidth\", \"orientate\", \"multiple\", \"capture\", \"allowClick\", \"allowDrop\", \"accept\", \"disabled\", \"imageWidth\", \"imageHeight\", \"imageQuality\"], outputs: [\"select\", \"selectPreviews\", \"error\", \"clicked\", \"declined\"] }, { kind: \"directive\", type: i9$1.FsSelectButtonDirective, selector: \"[fsSelectButton]\", inputs: [\"color\", \"width\", \"buttonType\", \"deselectOnChange\"] }, { kind: \"directive\", type: i10.FsPopoverDirective, selector: \"[fsPopover]\", inputs: [\"text\", \"template\", \"data\", \"leaveDelay\", \"showDelay\", \"maxWidth\", \"wrapperClass\", \"autoShow\", \"autoClose\", \"loadingDiameter\", \"loading\", \"indication\", \"position\", \"theme\", \"size\", \"trigger\", \"enabled\"] }, { kind: \"component\", type: FsFilterActionButtonComponent, selector: \"fs-filter-action-button\", inputs: [\"action\"] }, { kind: \"component\", type: FsFilterActionKebabActionsComponent, selector: \"fs-filter-action-kebab-actions\", inputs: [\"kebabActions\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container *ngFor=\\\"let action of actions\\\">\\n <ng-container [ngSwitch]=\\\"action.mode\\\">\\n <ng-container *ngSwitchCase=\\\"ActionMode.Button\\\">\\n <fs-filter-action-button\\n [action]=\\\"action\\\"\\n class=\\\"action\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n </fs-filter-action-button>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.Menu\\\">\\n <fs-filter-action-button\\n class=\\\"action\\\"\\n [action]=\\\"action\\\"\\n [fsMenuTriggerFor]=\\\"someRef\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n </fs-filter-action-button>\\n\\n <fs-menu #someRef class=\\\"action\\\">\\n <ng-container *ngFor=\\\"let childAction of action.items\\\">\\n <ng-container *ngIf=\\\"childAction.isGroup else simpleMenuItem\\\">\\n <fs-menu-group [label]=\\\"childAction.label\\\">\\n <ng-container *ngFor=\\\"let subAction of childAction.items\\\">\\n <ng-template\\n fs-menu-item\\n [link]=\\\"subAction.routerLink?.link\\\"\\n [queryParams]=\\\"subAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"(subAction.visible$ | async) === false\\\"\\n (click)=\\\"subAction.click($event)\\\">\\n <mat-icon *ngIf=\\\"subAction.icon\\\">{{subAction.icon}}</mat-icon>\\n {{subAction.label}}\\n </ng-template>\\n </ng-container>\\n </fs-menu-group>\\n </ng-container>\\n <ng-template #simpleMenuItem>\\n <ng-template\\n fs-menu-item\\n [link]=\\\"childAction.routerLink?.link\\\"\\n [queryParams]=\\\"childAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"(childAction.visible$ | async) === false\\\"\\n (click)=\\\"childAction.click($event);\\\">\\n <mat-icon *ngIf=\\\"childAction.icon\\\">{{childAction.icon}}</mat-icon>\\n {{childAction.label}}\\n </ng-template>\\n </ng-template>\\n </ng-container>\\n </fs-menu>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.SelectButton\\\">\\n <mat-select \\n class=\\\"action\\\"\\n [ngClass]=\\\"{ \\n 'mat-stroked-button': action.type === ActionType.Stroked,\\n 'mat-raised-button': action.type === ActionType.Raised,\\n 'mat-flat-button': action.type === ActionType.Flat,\\n 'mat-basic-button': action.type === ActionType.Basic\\n }\\\"\\n [placeholder]=\\\"action.label\\\"\\n [(ngModel)]=\\\"action.value\\\" \\n (ngModelChange)=\\\"actionChange(action, $event, selectButton)\\\"\\n fsSelectButton\\n #selectButton\\n [deselectOnChange]=\\\"false\\\">\\n <mat-option \\n *ngFor=\\\"let item of action.values\\\" \\n [value]=\\\"item.value\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.File\\\">\\n <fs-file\\n class=\\\"action action-button\\\"\\n [accept]=\\\"action.accept || '*'\\\"\\n [multiple]=\\\"action.multiple\\\"\\n [minWidth]=\\\"action.minWidth\\\"\\n [minHeight]=\\\"action.minHeight\\\"\\n [imageWidth]=\\\"action.maxWidth\\\"\\n [imageHeight]=\\\"action.maxHeight\\\"\\n (select)=\\\"action.fileSelected($event)\\\"\\n (error)=\\\"action.fileError($event)\\\"\\n (clicked)=\\\"action.click($event)\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n <fs-filter-action-button \\n [action]=\\\"action\\\">\\n </fs-filter-action-button>\\n </fs-file>\\n </ng-container>\\n </ng-container>\\n</ng-container>\\n<ng-container *ngIf=\\\"kebabActions?.length\\\">\\n <fs-filter-action-kebab-actions\\n [kebabActions]=\\\"kebabActions\\\">\\n </fs-filter-action-kebab-actions>\\n</ng-container>\\n\", styles: [\":host{display:inline-flex}.action-button{display:block}.action+.action{margin-left:5px}.menu-button{width:36px;height:36px;line-height:36px}\\n\"] }]\n }], propDecorators: { kebabActions: [{\n type: Input\n }], actions: [{\n type: Input\n }] } });\n\nclass FsFilterChipContentComponent {\n constructor(_cdRef) {\n this._cdRef = _cdRef;\n this._destroy$ = new Subject();\n }\n ngOnInit() {\n this.listenValueChangesForRanges();\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n listenValueChangesForRanges() {\n this.item.value$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.content = this._getContent();\n this._cdRef.detectChanges();\n });\n }\n _getContent() {\n const result = this.item.getChipsContent(this.type);\n if (this.item.chipLabel !== undefined) {\n if (this.item.chipLabel === '') {\n return `${result}`;\n }\n else {\n if (Array.isArray(this.item.chipLabel)) {\n const label = getLabelFromArray(this.item.chipLabel, this.type);\n return `${label}: ${result}`;\n }\n else {\n return `${this.item.chipLabel}: ${result}`;\n }\n }\n }\n else {\n if (Array.isArray(this.item.label)) {\n const label = getLabelFromArray(this.item.label, this.type);\n return `${label}: ${result}`;\n }\n else {\n if (this.item.isTypeCheckbox) {\n return result;\n }\n else {\n return `${this.item.label}: ${result}`;\n }\n }\n }\n }\n}\nFsFilterChipContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipContentComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterChipContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterChipContentComponent, selector: \"fs-filter-chip-content\", inputs: { item: \"item\", type: \"type\" }, ngImport: i0, template: \"{{ content }}\\n\", styles: [\"\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipContentComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-chip-content', changeDetection: ChangeDetectionStrategy.OnPush, template: \"{{ content }}\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }], type: [{\n type: Input\n }] } });\nfunction getLabelFromArray(labelArr, type) {\n if (type === 'from' && labelArr[0]) {\n return `${labelArr[0]}`;\n }\n else if (type === 'to' && labelArr[1]) {\n return `${labelArr[1]}`;\n }\n else {\n return '';\n }\n}\n\nclass FocusControllerService {\n constructor() {\n this._focusOn = new BehaviorSubject(null);\n }\n get focusOn$() {\n return this._focusOn.asObservable();\n }\n click(item, type = null) {\n this._focusOn.next({ item, type });\n }\n listenFocusFor$(targetItem, targetType = null) {\n return this._focusOn\n .pipe(filter$1((event) => !!event), filter$1(({ item, type }) => {\n return targetItem === item && targetType === type;\n }), tap(() => this.clearFocus()));\n }\n clearFocus() {\n this._focusOn.next(null);\n }\n}\nFocusControllerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusControllerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nFocusControllerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusControllerService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusControllerService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\nclass FsFilterChipComponent {\n constructor(_cdRef, _focusController) {\n this._cdRef = _cdRef;\n this._focusController = _focusController;\n this._chipRenderTimer$ = timer(500)\n .pipe(mapTo(true));\n this._destroy$ = new Subject();\n }\n ngOnInit() {\n this.rangeItem = this.item.isTypeDateRange\n || this.item.isTypeRange\n || this.item.isTypeDateTimeRange;\n this.listenValueChangesForRanges();\n this._updateVisibility();\n if (this.item.hasPendingValues) {\n this.item.loadAsyncValues(false);\n this.item.values$\n .pipe(take(2), takeUntil(this._destroy$))\n .subscribe(() => {\n this._updateVisibility();\n this._cdRef.markForCheck();\n });\n this._initDelayRender();\n }\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n focusOnItem(type = null) {\n this._focusController.click(this.item, type);\n }\n removeItem(event, type = null) {\n if (this.item instanceof RangeItem) {\n this.item.clearRange(type);\n }\n else if (this.item instanceof DateRangeItem || this.item instanceof DateTimeRangeItem) {\n this.item.clearDateRange(type);\n }\n else {\n this.item.clear();\n }\n }\n listenValueChangesForRanges() {\n this.item.value$\n .pipe(distinctUntilChanged(), takeUntil(this._destroy$))\n .subscribe(() => {\n this._updateVisibility();\n this._cdRef.markForCheck();\n });\n }\n _updateVisibility() {\n this.itemVisible = this.item.isChipVisible;\n }\n _initDelayRender() {\n this.chipDelayedRender$ = combineLatest([\n this.item.values$,\n this._chipRenderTimer$.pipe(startWith(false)),\n ])\n .pipe(map(([values, timerValue]) => {\n return !!values || timerValue;\n }));\n }\n}\nFsFilterChipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: FocusControllerService }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterChipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterChipComponent, selector: \"fs-filter-chip\", inputs: { item: \"item\" }, ngImport: i0, template: \"<ng-container *ngIf=\\\"!item.hasPendingValues || (chipDelayedRender$ | async)\\\">\\n <ng-container *ngIf=\\\"rangeItem; else defaultChip\\\">\\n <fs-chip\\n *ngIf=\\\"item.model?.min || item.model?.from\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem('from')\\\"\\n (removed)=\\\"removeItem($event, 'from')\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item, type: 'from' }\\\">\\n </ng-template>\\n </fs-chip>\\n\\n <fs-chip\\n *ngIf=\\\"item.model?.max || item.model?.to\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem('to')\\\"\\n (removed)=\\\"removeItem($event, 'to')\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item, type: 'to' }\\\">\\n </ng-template>\\n </fs-chip>\\n\\n </ng-container>\\n\\n <ng-template #defaultChip>\\n <fs-chip\\n *ngIf=\\\"itemVisible\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem()\\\"\\n (removed)=\\\"removeItem($event)\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item }\\\">\\n </ng-template>\\n </fs-chip>\\n </ng-template>\\n\\n <ng-template #chipContent let-item=\\\"item\\\" let-type=\\\"type\\\">\\n <ng-container *ngIf=\\\"!item.hasPendingValues && !item.loading; else lodaingValues\\\">\\n <fs-filter-chip-content [item]=\\\"item\\\" [type]=\\\"type\\\"></fs-filter-chip-content>\\n </ng-container>\\n\\n <ng-template #lodaingValues>\\n Loading...\\n </ng-template>\\n </ng-template>\\n</ng-container>\\n\\n\", styles: [\"fs-chip{cursor:pointer;color:#6f6f6f;margin-right:4px;margin-bottom:4px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: i3$2.FsChipComponent, selector: \"fs-chip\", inputs: [\"selectable\", \"removable\", \"value\", \"icon\", \"image\", \"selected\", \"size\", \"backgroundColor\", \"borderColor\", \"color\", \"outlined\"], outputs: [\"selectedToggled\", \"removed\"] }, { kind: \"component\", type: FsFilterChipContentComponent, selector: \"fs-filter-chip-content\", inputs: [\"item\", \"type\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-chip', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container *ngIf=\\\"!item.hasPendingValues || (chipDelayedRender$ | async)\\\">\\n <ng-container *ngIf=\\\"rangeItem; else defaultChip\\\">\\n <fs-chip\\n *ngIf=\\\"item.model?.min || item.model?.from\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem('from')\\\"\\n (removed)=\\\"removeItem($event, 'from')\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item, type: 'from' }\\\">\\n </ng-template>\\n </fs-chip>\\n\\n <fs-chip\\n *ngIf=\\\"item.model?.max || item.model?.to\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem('to')\\\"\\n (removed)=\\\"removeItem($event, 'to')\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item, type: 'to' }\\\">\\n </ng-template>\\n </fs-chip>\\n\\n </ng-container>\\n\\n <ng-template #defaultChip>\\n <fs-chip\\n *ngIf=\\\"itemVisible\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem()\\\"\\n (removed)=\\\"removeItem($event)\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item }\\\">\\n </ng-template>\\n </fs-chip>\\n </ng-template>\\n\\n <ng-template #chipContent let-item=\\\"item\\\" let-type=\\\"type\\\">\\n <ng-container *ngIf=\\\"!item.hasPendingValues && !item.loading; else lodaingValues\\\">\\n <fs-filter-chip-content [item]=\\\"item\\\" [type]=\\\"type\\\"></fs-filter-chip-content>\\n </ng-container>\\n\\n <ng-template #lodaingValues>\\n Loading...\\n </ng-template>\\n </ng-template>\\n</ng-container>\\n\\n\", styles: [\"fs-chip{cursor:pointer;color:#6f6f6f;margin-right:4px;margin-bottom:4px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: FocusControllerService }]; }, propDecorators: { item: [{\n type: Input\n }] } });\n\nclass FsFilterChipsComponent {\n constructor() {\n this.ItemType = ItemType;\n }\n}\nFsFilterChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nFsFilterChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterChipsComponent, selector: \"fs-filter-chips\", inputs: { filters: \"filters\" }, ngImport: i0, template: \"<ng-container *ngFor=\\\"let item of filters\\\">\\n <ng-container *ngIf=\\\"(item.value$ | async) !== undefined && item.type !== ItemType.Keyword\\\">\\n <fs-filter-chip [item]=\\\"item\\\"></fs-filter-chip>\\n </ng-container>\\n</ng-container>\\n\", styles: [\"\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: FsFilterChipComponent, selector: \"fs-filter-chip\", inputs: [\"item\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-chips', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container *ngFor=\\\"let item of filters\\\">\\n <ng-container *ngIf=\\\"(item.value$ | async) !== undefined && item.type !== ItemType.Keyword\\\">\\n <fs-filter-chip [item]=\\\"item\\\"></fs-filter-chip>\\n </ng-container>\\n</ng-container>\\n\" }]\n }], propDecorators: { filters: [{\n type: Input\n }] } });\n\nclass FsFilterDrawerActionsComponent {\n constructor(externalParams) {\n this.externalParams = externalParams;\n this._clear = new EventEmitter();\n this._done = new EventEmitter();\n }\n get savedFilters() {\n return this.externalParams.savedFiltersController;\n }\n done() {\n this._done.emit();\n }\n clear() {\n this._clear.emit();\n }\n saveFilters() {\n this.externalParams\n .savedFiltersController\n .openSavedFilterEditDialog();\n }\n}\nFsFilterDrawerActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterDrawerActionsComponent, deps: [{ token: ExternalParamsController }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterDrawerActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterDrawerActionsComponent, selector: \"fs-filter-drawer-actions\", outputs: { _clear: \"clear\", _done: \"done\" }, ngImport: i0, template: \"<a mat-button color=\\\"primary\\\" (click)=\\\"done()\\\">Done</a>\\n<a mat-button (click)=\\\"clear()\\\">Clear</a>\\n<ng-container *ngIf=\\\"savedFilters.enabled$ | async\\\">\\n <a mat-button (click)=\\\"saveFilters()\\\">Save</a>\\n</ng-container>\\n\\n\", styles: [\"@charset \\\"UTF-8\\\";@media (max-width: 599px){h1[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"]{margin-top:0}}.fs-delimit>*:not(:last-child):after{content:\\\",\\\\a0\\\"}@media (max-width: 599px){a{width:100%}}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i3$1.MatAnchor, selector: \"a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matButton\", \"matAnchor\"] }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterDrawerActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-drawer-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<a mat-button color=\\\"primary\\\" (click)=\\\"done()\\\">Done</a>\\n<a mat-button (click)=\\\"clear()\\\">Clear</a>\\n<ng-container *ngIf=\\\"savedFilters.enabled$ | async\\\">\\n <a mat-button (click)=\\\"saveFilters()\\\">Save</a>\\n</ng-container>\\n\\n\", styles: [\"@charset \\\"UTF-8\\\";@media (max-width: 599px){h1[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"]{margin-top:0}}.fs-delimit>*:not(:last-child):after{content:\\\",\\\\a0\\\"}@media (max-width: 599px){a{width:100%}}\\n\"] }]\n }], ctorParameters: function () { return [{ type: ExternalParamsController }]; }, propDecorators: { _clear: [{\n type: Output,\n args: ['clear']\n }], _done: [{\n type: Output,\n args: ['done']\n }] } });\n\nconst FILTER_DRAWER_DATA = new InjectionToken('fs.filter-drawer-data');\n\nconst FILTER_DRAWER_OVERLAY = new InjectionToken('fs.filter-drawer-overlay');\n\nclass BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.inline = false;\n this._destroy$ = new Subject();\n this._debouncer$ = new Subject();\n this._kvDiffer = this._kvDiffers.find(this.item || {}).create();\n this.listenWithDebounce();\n }\n set item(value) {\n this._item = value;\n }\n get item() {\n return this._item;\n }\n ngDoCheck() {\n if (this._kvDiffer) {\n const changes = this._kvDiffer.diff(this.item);\n if (changes) {\n this._cd.detectChanges();\n }\n }\n }\n ngOnChanges(changes) {\n if (changes.item) {\n this.label = Array.isArray(this.item.label) ? this.item.label[0] : this.item.label;\n }\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n listenWithDebounce() {\n this._debouncer$\n .pipe(debounceTime(150), takeUntil(this._destroy$))\n .subscribe(() => {\n this.item.valueChanged();\n });\n }\n itemChange() {\n this._debouncer$.next();\n }\n}\nBaseItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BaseItemComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nBaseItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: BaseItemComponent, selector: \"base-item\", inputs: { item: \"item\", inline: \"inline\" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BaseItemComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'base-item',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }], inline: [{\n type: Input\n }] } });\n\nclass FocusToItemDirective {\n constructor(_el, _focusController, _targetSelect, _targetDate, _targetDateScroll, _targetDateRangeFrom, _targetDateRangeTo, _targetAutocomplete, _targetAutocompleteChips) {\n this._el = _el;\n this._focusController = _focusController;\n this._targetSelect = _targetSelect;\n this._targetDate = _targetDate;\n this._targetDateScroll = _targetDateScroll;\n this._targetDateRangeFrom = _targetDateRangeFrom;\n this._targetDateRangeTo = _targetDateRangeTo;\n this._targetAutocomplete = _targetAutocomplete;\n this._targetAutocompleteChips = _targetAutocompleteChips;\n this._destroy$ = new Subject();\n }\n ngOnInit() {\n this._focusController\n .listenFocusFor$(this._item, this._focusTargetType)\n .pipe(delay(500), takeUntil(this._destroy$))\n .subscribe(() => {\n this._focus();\n });\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n _focus() {\n switch (this._item.type) {\n case ItemType.Select:\n {\n this._targetSelect.open();\n }\n break;\n case ItemType.Text:\n case ItemType.Range:\n {\n this._el.nativeElement.focus();\n }\n break;\n case ItemType.Date:\n {\n if (this._item.mode === ItemDateMode.Calendar) {\n this._targetDate.open();\n }\n else {\n this._targetDateScroll.open();\n }\n }\n break;\n case ItemType.DateRange:\n {\n if (this._focusTargetType === 'from') {\n this._targetDateRangeFrom.open();\n }\n else {\n this._targetDateRangeTo.open();\n }\n }\n break;\n case ItemType.AutoComplete:\n {\n this._targetAutocomplete.focus();\n }\n break;\n case ItemType.AutoCompleteChips:\n {\n this._targetAutocompleteChips.focus();\n }\n break;\n }\n }\n}\nFocusToItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusToItemDirective, deps: [{ token: i0.ElementRef }, { token: FocusControllerService }, { token: i4$1.MatSelect, optional: true, self: true }, { token: i3$3.FsDatePickerComponent, optional: true, self: true }, { token: i3$3.FsDateScrollPickerComponent, optional: true, self: true }, { token: i3$3.DateRangePickerFromComponent, optional: true, self: true }, { token: i3$3.DateRangePickerToComponent, optional: true, self: true }, { token: i4$2.FsAutocompleteComponent, optional: true, self: true }, { token: i5$1.FsAutocompleteChipsComponent, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });\nFocusToItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: { _item: [\"fsFilterFocusTrigger\", \"_item\"], _focusTargetType: [\"focusTargetType\", \"_focusTargetType\"] }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusToItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fsFilterFocusTrigger]',\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: FocusControllerService }, { type: i4$1.MatSelect, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i3$3.FsDatePickerComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i3$3.FsDateScrollPickerComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i3$3.DateRangePickerFromComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i3$3.DateRangePickerToComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i4$2.FsAutocompleteComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i5$1.FsAutocompleteChipsComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }]; }, propDecorators: { _item: [{\n type: Input,\n args: ['fsFilterFocusTrigger']\n }], _focusTargetType: [{\n type: Input,\n args: ['focusTargetType']\n }] } });\n\nclass SelectGroupsComponent {\n constructor(cd) {\n this.cd = cd;\n }\n compare(o1, o2) {\n return o1 == o2;\n }\n}\nSelectGroupsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectGroupsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nSelectGroupsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectGroupsComponent, selector: \"filter-item-select-groups\", inputs: { item: \"item\" }, viewQueries: [{ propertyName: \"select\", first: true, predicate: [\"select\"], descendants: true, static: true }], ngImport: i0, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [compareWith]=\\\"compare\\\">\\n <ng-container *ngFor=\\\"let selectItem of item.values\\\">\\n <ng-container *ngIf=\\\"selectItem[item.children]; else simpleOption\\\">\\n <mat-optgroup [label]=\\\"selectItem.name\\\">\\n <mat-option *ngFor=\\\"let subItem of selectItem[item.children]\\\"\\n [value]=\\\"subItem.value\\\"\\n [ngStyle]=\\\"selectItem.style\\\">\\n {{ subItem.name }}\\n </mat-option>\\n </mat-optgroup>\\n </ng-container>\\n\\n <ng-template #simpleOption>\\n <mat-option\\n [value]=\\\"selectItem.value\\\"\\n [ngStyle]=\\\"selectItem.style\\\">\\n {{ selectItem.name }}\\n </mat-option>\\n </ng-template>\\n </ng-container>\\n </mat-select>\\n</mat-form-field>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i5.MatOptgroup, selector: \"mat-optgroup\", inputs: [\"disabled\"], exportAs: [\"matOptgroup\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectGroupsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select-groups', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [compareWith]=\\\"compare\\\">\\n <ng-container *ngFor=\\\"let selectItem of item.values\\\">\\n <ng-container *ngIf=\\\"selectItem[item.children]; else simpleOption\\\">\\n <mat-optgroup [label]=\\\"selectItem.name\\\">\\n <mat-option *ngFor=\\\"let subItem of selectItem[item.children]\\\"\\n [value]=\\\"subItem.value\\\"\\n [ngStyle]=\\\"selectItem.style\\\">\\n {{ subItem.name }}\\n </mat-option>\\n </mat-optgroup>\\n </ng-container>\\n\\n <ng-template #simpleOption>\\n <mat-option\\n [value]=\\\"selectItem.value\\\"\\n [ngStyle]=\\\"selectItem.style\\\">\\n {{ selectItem.name }}\\n </mat-option>\\n </ng-template>\\n </ng-container>\\n </mat-select>\\n</mat-form-field>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { select: [{\n type: ViewChild,\n args: ['select', { static: true }]\n }], item: [{\n type: Input\n }] } });\n\nclass FsFilterIsolateValues {\n transform(values, isolate) {\n if (!isolate) {\n return values;\n }\n return values.filter((value) => {\n return value.value !== isolate.value;\n });\n }\n}\nFsFilterIsolateValues.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterIsolateValues, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nFsFilterIsolateValues.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterIsolateValues, name: \"fsFilterIsolateValues\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterIsolateValues, decorators: [{\n type: Pipe,\n args: [{\n name: 'fsFilterIsolateValues',\n }]\n }] });\n\nclass SelectSimpleComponent {\n constructor(cd) {\n this.cd = cd;\n }\n changed() {\n if (this.item.isolate) {\n this.item.isolate.enabled = false;\n }\n }\n isolateChange(filter) {\n if (filter.isolate.enabled) {\n filter.model = filter.isolate.value;\n }\n else {\n filter.model = null;\n }\n }\n}\nSelectSimpleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectSimpleComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nSelectSimpleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectSimpleComponent, selector: \"filter-item-select-simple\", inputs: { item: \"item\" }, viewQueries: [{ propertyName: \"select\", first: true, predicate: [\"select\"], descendants: true, static: true }], ngImport: i0, template: \"<mat-form-field [ngClass]=\\\"{ isolate: item.isolate }\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n (ngModelChange)=\\\"changed()\\\">\\n <mat-option *ngFor=\\\"let item of item.values | fsFilterIsolateValues: item.isolate\\\"\\n [value]=\\\"item.value\\\"\\n >\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n\\n <mat-hint>\\n <div *ngIf=\\\"item.isolate\\\">\\n <mat-checkbox (change)=\\\"isolateChange(item)\\\" [(ngModel)]=\\\"item.isolate.enabled\\\">\\n <span class=\\\"checkbox-label\\\">{{ item.isolate.label }}</span>\\n </mat-checkbox>\\n </div>\\n </mat-hint>\\n</mat-form-field>\\n\", styles: [\".isolate{margin-bottom:25px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatHint, selector: \"mat-hint\", inputs: [\"align\", \"id\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i6$2.MatCheckbox, selector: \"mat-checkbox\", inputs: [\"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matCheckbox\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }, { kind: \"pipe\", type: FsFilterIsolateValues, name: \"fsFilterIsolateValues\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectSimpleComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select-simple', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field [ngClass]=\\\"{ isolate: item.isolate }\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n (ngModelChange)=\\\"changed()\\\">\\n <mat-option *ngFor=\\\"let item of item.values | fsFilterIsolateValues: item.isolate\\\"\\n [value]=\\\"item.value\\\"\\n >\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n\\n <mat-hint>\\n <div *ngIf=\\\"item.isolate\\\">\\n <mat-checkbox (change)=\\\"isolateChange(item)\\\" [(ngModel)]=\\\"item.isolate.enabled\\\">\\n <span class=\\\"checkbox-label\\\">{{ item.isolate.label }}</span>\\n </mat-checkbox>\\n </div>\\n </mat-hint>\\n</mat-form-field>\\n\", styles: [\".isolate{margin-bottom:25px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }], select: [{\n type: ViewChild,\n args: ['select', { static: true }]\n }] } });\n\nclass SelectMultipleComponent {\n constructor(cd) {\n this.cd = cd;\n }\n changed() {\n if (this.item.isolate) {\n this.item.isolate.enabled = false;\n if (this.item.multiple && Array.isArray(this.item.model)) {\n const index = this.item.model.indexOf(this.item.isolate.value);\n if (index > -1) {\n this.item.model.splice(index, 1);\n }\n }\n }\n }\n close() {\n this.select.close();\n }\n isolateChange(filter) {\n if (filter.isolate.enabled) {\n filter.model = filter.multiple ? [filter.isolate.value] : filter.isolate.value;\n }\n else {\n if (filter.multiple) {\n filter.model = filter.defaultValue ? filter.defaultValue : [];\n }\n else {\n filter.model = filter.defaultValue ? filter.defaultValue : null;\n }\n }\n }\n}\nSelectMultipleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectMultipleComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nSelectMultipleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectMultipleComponent, selector: \"filter-item-select-multiple\", inputs: { item: \"item\" }, viewQueries: [{ propertyName: \"select\", first: true, predicate: [\"select\"], descendants: true, static: true }], ngImport: i0, template: \"<mat-form-field [ngClass]=\\\"{ isolate: item.isolate }\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n (ngModelChange)=\\\"changed()\\\"\\n [multiple]=\\\"item.multiple\\\">\\n <mat-option\\n *ngFor=\\\"let item of item.values | fsFilterIsolateValues: item.isolate\\\"\\n [value]=\\\"item.value\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n\\n <mat-hint>\\n <div *ngIf=\\\"item.isolate\\\">\\n <mat-checkbox (change)=\\\"isolateChange(item)\\\" [(ngModel)]=\\\"item.isolate.enabled\\\">\\n <span class=\\\"checkbox-label\\\">{{ item.isolate.label }}</span>\\n </mat-checkbox>\\n </div>\\n </mat-hint>\\n</mat-form-field>\\n\", styles: [\".isolate{margin-bottom:25px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatHint, selector: \"mat-hint\", inputs: [\"align\", \"id\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i6$2.MatCheckbox, selector: \"mat-checkbox\", inputs: [\"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matCheckbox\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }, { kind: \"pipe\", type: FsFilterIsolateValues, name: \"fsFilterIsolateValues\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectMultipleComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select-multiple', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field [ngClass]=\\\"{ isolate: item.isolate }\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n (ngModelChange)=\\\"changed()\\\"\\n [multiple]=\\\"item.multiple\\\">\\n <mat-option\\n *ngFor=\\\"let item of item.values | fsFilterIsolateValues: item.isolate\\\"\\n [value]=\\\"item.value\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n\\n <mat-hint>\\n <div *ngIf=\\\"item.isolate\\\">\\n <mat-checkbox (change)=\\\"isolateChange(item)\\\" [(ngModel)]=\\\"item.isolate.enabled\\\">\\n <span class=\\\"checkbox-label\\\">{{ item.isolate.label }}</span>\\n </mat-checkbox>\\n </div>\\n </mat-hint>\\n</mat-form-field>\\n\", styles: [\".isolate{margin-bottom:25px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }], select: [{\n type: ViewChild,\n args: ['select', { static: true }]\n }] } });\n\nclass SelectComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n // For case when we have multiple selection with __all option\n // If _all has been selected than we must disable all other items\n this.allItemsOptionSelected = false;\n }\n get multipleSelectItem() {\n return this.item;\n }\n get simpleSelectItem() {\n return this.item;\n }\n ngOnChanges(changes) {\n if (changes.item) {\n this.values$ = this.item.values$;\n }\n }\n ngDoCheck() {\n if (this._kvDiffer) {\n const changes = this._kvDiffer.diff(this.item);\n if (changes) {\n this._cd.markForCheck();\n if (this.selectedItem) {\n this.selectedItem.cd.markForCheck();\n }\n }\n }\n }\n}\nSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectComponent, selector: \"filter-item-select\", viewQueries: [{ propertyName: \"selectedItem\", first: true, predicate: [\"selectItem\"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"<ng-container *ngIf=\\\"(item.loading$ | async) else itemSelect\\\">\\n <mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select disabled></mat-select>\\n </mat-form-field>\\n</ng-container>\\n\\n<ng-template #itemSelect>\\n <ng-container *ngIf=\\\"(values$ | async)?.length\\\">\\n <ng-container *ngIf=\\\"item.multiple && !item.children\\\">\\n <filter-item-select-multiple\\n [item]=\\\"multipleSelectItem\\\"\\n #selectItem>\\n </filter-item-select-multiple>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"!item.multiple && !item.children\\\">\\n <filter-item-select-simple\\n [item]=\\\"simpleSelectItem\\\"\\n #selectItem>\\n </filter-item-select-simple>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"item.children\\\">\\n <filter-item-select-groups\\n [item]=\\\"item\\\"\\n #selectItem>\\n </filter-item-select-groups>\\n </ng-container>\\n </ng-container>\\n</ng-template>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: SelectGroupsComponent, selector: \"filter-item-select-groups\", inputs: [\"item\"] }, { kind: \"component\", type: SelectSimpleComponent, selector: \"filter-item-select-simple\", inputs: [\"item\"] }, { kind: \"component\", type: SelectMultipleComponent, selector: \"filter-item-select-multiple\", inputs: [\"item\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container *ngIf=\\\"(item.loading$ | async) else itemSelect\\\">\\n <mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select disabled></mat-select>\\n </mat-form-field>\\n</ng-container>\\n\\n<ng-template #itemSelect>\\n <ng-container *ngIf=\\\"(values$ | async)?.length\\\">\\n <ng-container *ngIf=\\\"item.multiple && !item.children\\\">\\n <filter-item-select-multiple\\n [item]=\\\"multipleSelectItem\\\"\\n #selectItem>\\n </filter-item-select-multiple>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"!item.multiple && !item.children\\\">\\n <filter-item-select-simple\\n [item]=\\\"simpleSelectItem\\\"\\n #selectItem>\\n </filter-item-select-simple>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"item.children\\\">\\n <filter-item-select-groups\\n [item]=\\\"item\\\"\\n #selectItem>\\n </filter-item-select-groups>\\n </ng-container>\\n </ng-container>\\n</ng-template>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { selectedItem: [{\n type: ViewChild,\n args: ['selectItem']\n }] } });\n\nclass ChipsComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n }\n modelChange() {\n this.itemChange();\n }\n compareFn(modelValue, chipValue) {\n return String(modelValue.value) === String(chipValue.value);\n }\n}\nChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ChipsComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: ChipsComponent, selector: \"filter-item-chips\", usesInheritance: true, ngImport: i0, template: \"<ng-template [ngIf]=\\\"item.values?.length\\\">\\n <fs-label-field>\\n <fs-label>{{item.label}}</fs-label>\\n <fs-chips \\n [(ngModel)]=\\\"item.model\\\"\\n [compare]=\\\"compareFn\\\"\\n [multiple]=\\\"item.multiple\\\">\\n <fs-chip \\n *ngFor=\\\"let value of item.values\\\"\\n [value]=\\\"value\\\"\\n [selectable]=\\\"true\\\">\\n {{ value.name }}\\n </fs-chip>\\n </fs-chips>\\n </fs-label-field>\\n</ng-template>\\n\\n<ng-template [ngIf]=\\\"item.loading\\\">{{ item.label }} loading...</ng-template>\\n\", styles: [\"fs-chip{line-height:40px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3$2.FsChipsComponent, selector: \"fs-chips\", inputs: [\"compare\", \"multiple\"] }, { kind: \"component\", type: i3$2.FsChipComponent, selector: \"fs-chip\", inputs: [\"selectable\", \"removable\", \"value\", \"icon\", \"image\", \"selected\", \"size\", \"backgroundColor\", \"borderColor\", \"color\", \"outlined\"], outputs: [\"selectedToggled\", \"removed\"] }, { kind: \"component\", type: i4$3.FsLabelComponent, selector: \"fs-label\" }, { kind: \"component\", type: i4$3.FsLabelFieldComponent, selector: \"fs-label-field\", inputs: [\"bottomMargin\", \"topMargin\", \"labelMargin\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ChipsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-chips', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-template [ngIf]=\\\"item.values?.length\\\">\\n <fs-label-field>\\n <fs-label>{{item.label}}</fs-label>\\n <fs-chips \\n [(ngModel)]=\\\"item.model\\\"\\n [compare]=\\\"compareFn\\\"\\n [multiple]=\\\"item.multiple\\\">\\n <fs-chip \\n *ngFor=\\\"let value of item.values\\\"\\n [value]=\\\"value\\\"\\n [selectable]=\\\"true\\\">\\n {{ value.name }}\\n </fs-chip>\\n </fs-chips>\\n </fs-label-field>\\n</ng-template>\\n\\n<ng-template [ngIf]=\\\"item.loading\\\">{{ item.label }} loading...</ng-template>\\n\", styles: [\"fs-chip{line-height:40px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass TextComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.textControl = new UntypedFormControl();\n this.destroy$ = new Subject();\n }\n ngOnInit() {\n this._listenControlValueChanges();\n this._listenModelChanges();\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n _listenControlValueChanges() {\n this.textControl.valueChanges\n .pipe(distinctUntilChanged(), debounceTime(200), takeUntil(this.destroy$))\n .subscribe((value) => {\n this.item.model = value;\n });\n }\n _listenModelChanges() {\n this._item.value$\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.textControl.setValue(this.item.model, { emitEvent: false });\n });\n }\n}\nTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: TextComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: TextComponent, selector: \"filter-item-text\", usesInheritance: true, ngImport: i0, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <span matPrefix *ngIf=\\\"item.prefix\\\" [innerHtml]=\\\"item.prefix\\\"></span>\\n <input matInput [formControl]=\\\"textControl\\\" [fsFilterFocusTrigger]=\\\"item\\\">\\n <span matSuffix *ngIf=\\\"item.suffix\\\" [innerHtml]=\\\"item.suffix\\\"></span>\\n</mat-form-field>\\n\", styles: [\"\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.FormControlDirective, selector: \"[formControl]\", inputs: [\"formControl\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"], exportAs: [\"ngForm\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i3.MatPrefix, selector: \"[matPrefix]\" }, { kind: \"directive\", type: i3.MatSuffix, selector: \"[matSuffix]\" }, { kind: \"directive\", type: i4.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: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: TextComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-text', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <span matPrefix *ngIf=\\\"item.prefix\\\" [innerHtml]=\\\"item.prefix\\\"></span>\\n <input matInput [formControl]=\\\"textControl\\\" [fsFilterFocusTrigger]=\\\"item\\\">\\n <span matSuffix *ngIf=\\\"item.suffix\\\" [innerHtml]=\\\"item.suffix\\\"></span>\\n</mat-form-field>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass WeekComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n }\n ngOnInit() { }\n}\nWeekComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: WeekComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nWeekComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: WeekComponent, selector: \"filter-item-week\", usesInheritance: true, ngImport: i0, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDateWeekPicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [seedDate]=\\\"item.seedDate\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i3.MatPlaceholder, selector: \"mat-placeholder\" }, { kind: \"directive\", type: i4.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: i3$3.FsDateWeekPickerComponent, selector: \"[fsDateWeekPicker]\", inputs: [\"minYear\", \"maxYear\", \"minDate\", \"maxDate\", \"seedDate\", \"period\", \"view\", \"weekStartsOn\"], outputs: [\"change\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: WeekComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-week', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDateWeekPicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [seedDate]=\\\"item.seedDate\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass RangeComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n }\n ngOnInit() {\n this.listenChanges();\n }\n listenChanges() {\n const fromListener = fromEvent(this.from.nativeElement, 'keyup')\n .pipe(distinctUntilChanged());\n const toListener = fromEvent(this.to.nativeElement, 'keyup')\n .pipe(distinctUntilChanged());\n merge(fromListener, toListener)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.itemChange();\n });\n }\n}\nRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: RangeComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: RangeComponent, selector: \"filter-item-range\", viewQueries: [{ propertyName: \"from\", first: true, predicate: [\"from\"], descendants: true, static: true }, { propertyName: \"to\", first: true, predicate: [\"to\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"form-field\\\">\\n <mat-form-field class=\\\"filter-range-min\\\">\\n <mat-label>{{item.label[0]}}</mat-label>\\n <span \\n matPrefix \\n class=\\\"text-prefix\\\"\\n *ngIf=\\\"item.prefix\\\"\\n [innerHtml]=\\\"item.prefix\\\">\\n </span>\\n <input \\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'from'\\\"\\n type=\\\"text\\\"\\n inputmode=\\\"decimal\\\"\\n [(ngModel)]=\\\"item.model.min\\\"\\n #from>\\n <span \\n matSuffix \\n class=\\\"text-suffix\\\"\\n *ngIf=\\\"item.suffix\\\" \\n [innerHtml]=\\\"item.suffix\\\">\\n </span>\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"filter-range-max\\\">\\n <mat-label>{{item.label[1]}}</mat-label>\\n <span \\n matPrefix \\n class=\\\"text-prefix\\\"\\n *ngIf=\\\"item.prefix\\\"\\n [innerHtml]=\\\"item.prefix\\\">\\n </span>\\n <input \\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'to'\\\"\\n type=\\\"text\\\"\\n inputmode=\\\"decimal\\\"\\n [(ngModel)]=\\\"item.model.max\\\"\\n #to>\\n <span \\n matSuffix \\n class=\\\"text-suffix\\\"\\n *ngIf=\\\"item.suffix\\\"\\n [innerHtml]=\\\"item.suffix\\\">\\n </span>\\n </mat-form-field>\\n</div>\\n\", styles: [\".form-field{display:flex}.form-field mat-form-field{min-width:0}.form-field mat-form-field+mat-form-field{margin-left:10px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i3.MatPrefix, selector: \"[matPrefix]\" }, { kind: \"directive\", type: i3.MatSuffix, selector: \"[matSuffix]\" }, { kind: \"directive\", type: i4.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: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: RangeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-range', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"form-field\\\">\\n <mat-form-field class=\\\"filter-range-min\\\">\\n <mat-label>{{item.label[0]}}</mat-label>\\n <span \\n matPrefix \\n class=\\\"text-prefix\\\"\\n *ngIf=\\\"item.prefix\\\"\\n [innerHtml]=\\\"item.prefix\\\">\\n </span>\\n <input \\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'from'\\\"\\n type=\\\"text\\\"\\n inputmode=\\\"decimal\\\"\\n [(ngModel)]=\\\"item.model.min\\\"\\n #from>\\n <span \\n matSuffix \\n class=\\\"text-suffix\\\"\\n *ngIf=\\\"item.suffix\\\" \\n [innerHtml]=\\\"item.suffix\\\">\\n </span>\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"filter-range-max\\\">\\n <mat-label>{{item.label[1]}}</mat-label>\\n <span \\n matPrefix \\n class=\\\"text-prefix\\\"\\n *ngIf=\\\"item.prefix\\\"\\n [innerHtml]=\\\"item.prefix\\\">\\n </span>\\n <input \\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'to'\\\"\\n type=\\\"text\\\"\\n inputmode=\\\"decimal\\\"\\n [(ngModel)]=\\\"item.model.max\\\"\\n #to>\\n <span \\n matSuffix \\n class=\\\"text-suffix\\\"\\n *ngIf=\\\"item.suffix\\\"\\n [innerHtml]=\\\"item.suffix\\\">\\n </span>\\n </mat-form-field>\\n</div>\\n\", styles: [\".form-field{display:flex}.form-field mat-form-field{min-width:0}.form-field mat-form-field+mat-form-field{margin-left:10px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { from: [{\n type: ViewChild,\n args: ['from', { static: true }]\n }], to: [{\n type: ViewChild,\n args: ['to', { static: true }]\n }] } });\n\nclass AutocompleteComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.displayWith = (data) => {\n return data ? data.name : data;\n };\n this.fetch = (keyword) => {\n return this.item.valuesFn(keyword, this.item.filter);\n };\n }\n}\nAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: AutocompleteComponent, selector: \"filter-item-autocomplete\", usesInheritance: true, ngImport: i0, template: \"<fs-autocomplete\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [fetch]=\\\"fetch\\\"\\n [displayWith]=\\\"displayWith\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [placeholder]=\\\"label\\\"\\n [fetchOnFocus]=\\\"item.fetchOnFocus\\\"\\n [showClear]=\\\"item.showClear\\\"\\n name=\\\"item.name\\\">\\n <ng-template fsAutocompleteTemplate let-data=\\\"data\\\">\\n {{data.name}}\\n </ng-template>\\n</fs-autocomplete>\\n\", dependencies: [{ kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i4$2.FsAutocompleteComponent, selector: \"fs-autocomplete\", inputs: [\"fetch\", \"displayWith\", \"placeholder\", \"fetchOnFocus\", \"readonly\", \"required\", \"disabled\", \"formFieldClass\", \"appearance\", \"hint\", \"panelWidth\", \"panelClass\", \"showClear\"], outputs: [\"cleared\", \"opened\", \"closed\"] }, { kind: \"directive\", type: i4$2.FsAutocompleteTemplateDirective, selector: \"[fsAutocompleteTemplate]\" }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AutocompleteComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<fs-autocomplete\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [fetch]=\\\"fetch\\\"\\n [displayWith]=\\\"displayWith\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [placeholder]=\\\"label\\\"\\n [fetchOnFocus]=\\\"item.fetchOnFocus\\\"\\n [showClear]=\\\"item.showClear\\\"\\n name=\\\"item.name\\\">\\n <ng-template fsAutocompleteTemplate let-data=\\\"data\\\">\\n {{data.name}}\\n </ng-template>\\n</fs-autocomplete>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass AutocompletechipsComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.fetch = (keyword) => {\n return this.item.valuesFn(keyword, this.item.filter);\n };\n }\n addAutocompleteChipItem(event) {\n if (event.data && this.item.model.indexOf(event.data.value) === -1) {\n this.item.model.push(event.data);\n this.itemChange();\n }\n }\n removeAutocompleteChipItem(event) {\n remove(this.item.model, { value: event.data.value });\n this.itemChange();\n }\n clearAutocompleteChipItem() {\n this.item.clear();\n this.itemChange();\n }\n compareItems(item1, item2) {\n return item1?.value === item2?.value;\n }\n}\nAutocompletechipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AutocompletechipsComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nAutocompletechipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: AutocompletechipsComponent, selector: \"filter-item-autocompletechips\", usesInheritance: true, ngImport: i0, template: \"<fs-autocomplete-chips\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [fetch]=\\\"fetch\\\"\\n [ngModel]=\\\"item.model\\\"\\n (selected)=\\\"addAutocompleteChipItem($event)\\\"\\n (removed)=\\\"removeAutocompleteChipItem($event)\\\"\\n (clear)=\\\"clearAutocompleteChipItem()\\\"\\n [allowText]=\\\"false\\\"\\n [fetchOnFocus]=\\\"item.fetchOnFocus\\\"\\n [placeholder]=\\\"label\\\"\\n [chipImage]=\\\"item.chipImage\\\"\\n [chipColor]=\\\"item.chipColor\\\"\\n [chipIconColor]=\\\"item.chipIcon\\\"\\n [chipBackground]=\\\"item.chipBackground\\\"\\n [chipIcon]=\\\"item.chipIcon\\\"\\n [chipClass]=\\\"item.chipClass\\\"\\n [allowClear]=\\\"item.showClear\\\"\\n [removable]=\\\"item.showClear\\\"\\n [compareWith]=\\\"compareItems\\\"\\n [panelWidth]=\\\"300\\\"\\n name=\\\"model\\\">\\n <ng-template fsAutocompleteObject let-object=\\\"object\\\">\\n {{ object.name }}\\n </ng-template>\\n</fs-autocomplete-chips>\\n\\n<!--<mat-form-field floatLabel=\\\"auto\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-chip-list #chipList>\\n <mat-chip *ngFor=\\\"let item of item.model\\\"\\n (removed)=\\\"removeAutocompleteChipItem(item)\\\">\\n {{ item.name }}\\n <mat-icon matChipRemove>cancel</mat-icon>\\n </mat-chip>\\n\\n <input #chipsInput\\n type=\\\"text\\\"\\n matInput\\n [(ngModel)]=\\\"item.selectedValue\\\"\\n (ngModelChange)=\\\"onAutocompleteChipsChange(chipsInput)\\\"\\n [name]=\\\"item.name\\\"\\n [matChipInputFor]=\\\"chipList\\\"\\n [matAutocomplete]=\\\"autocompleteChipsInput\\\">\\n </mat-chip-list>\\n\\n <mat-autocomplete #autocompleteChipsInput=\\\"matAutocomplete\\\"\\n (optionSelected)=\\\"addAutocompleteChipItem( $event)\\\"\\n >\\n <mat-option *ngFor=\\\"let item of item.values$ | async\\\" [value]=\\\"item\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-autocomplete>\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>-->\\n\", dependencies: [{ kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i5$1.FsAutocompleteChipsComponent, selector: \"fs-autocomplete-chips\", inputs: [\"fetch\", \"appearance\", \"readonly\", \"size\", \"placeholder\", \"chipImage\", \"chipBackground\", \"chipColor\", \"chipIcon\", \"chipIconColor\", \"chipClass\", \"hint\", \"allowText\", \"allowObject\", \"delay\", \"validateText\", \"removable\", \"allowClear\", \"color\", \"background\", \"orderable\", \"limit\", \"initOnClick\", \"fetchOnFocus\", \"multiple\", \"confirm\", \"disabled\", \"panelWidth\", \"panelClass\", \"compareWith\"], outputs: [\"selected\", \"removed\", \"reordered\", \"clear\"] }, { kind: \"directive\", type: i5$1.FsAutocompleteObjectDirective, selector: \"[fsAutocompleteObject],[fsAutocompleteChipsTemplate]\" }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AutocompletechipsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-autocompletechips', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<fs-autocomplete-chips\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [fetch]=\\\"fetch\\\"\\n [ngModel]=\\\"item.model\\\"\\n (selected)=\\\"addAutocompleteChipItem($event)\\\"\\n (removed)=\\\"removeAutocompleteChipItem($event)\\\"\\n (clear)=\\\"clearAutocompleteChipItem()\\\"\\n [allowText]=\\\"false\\\"\\n [fetchOnFocus]=\\\"item.fetchOnFocus\\\"\\n [placeholder]=\\\"label\\\"\\n [chipImage]=\\\"item.chipImage\\\"\\n [chipColor]=\\\"item.chipColor\\\"\\n [chipIconColor]=\\\"item.chipIcon\\\"\\n [chipBackground]=\\\"item.chipBackground\\\"\\n [chipIcon]=\\\"item.chipIcon\\\"\\n [chipClass]=\\\"item.chipClass\\\"\\n [allowClear]=\\\"item.showClear\\\"\\n [removable]=\\\"item.showClear\\\"\\n [compareWith]=\\\"compareItems\\\"\\n [panelWidth]=\\\"300\\\"\\n name=\\\"model\\\">\\n <ng-template fsAutocompleteObject let-object=\\\"object\\\">\\n {{ object.name }}\\n </ng-template>\\n</fs-autocomplete-chips>\\n\\n<!--<mat-form-field floatLabel=\\\"auto\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-chip-list #chipList>\\n <mat-chip *ngFor=\\\"let item of item.model\\\"\\n (removed)=\\\"removeAutocompleteChipItem(item)\\\">\\n {{ item.name }}\\n <mat-icon matChipRemove>cancel</mat-icon>\\n </mat-chip>\\n\\n <input #chipsInput\\n type=\\\"text\\\"\\n matInput\\n [(ngModel)]=\\\"item.selectedValue\\\"\\n (ngModelChange)=\\\"onAutocompleteChipsChange(chipsInput)\\\"\\n [name]=\\\"item.name\\\"\\n [matChipInputFor]=\\\"chipList\\\"\\n [matAutocomplete]=\\\"autocompleteChipsInput\\\">\\n </mat-chip-list>\\n\\n <mat-autocomplete #autocompleteChipsInput=\\\"matAutocomplete\\\"\\n (optionSelected)=\\\"addAutocompleteChipItem( $event)\\\"\\n >\\n <mat-option *ngFor=\\\"let item of item.values$ | async\\\" [value]=\\\"item\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-autocomplete>\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>-->\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass DateComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.viewType = PickerViewType.Date;\n this.itemDateMode = ItemDateMode;\n this.showYear = true;\n this.showMonth = true;\n this.showDay = true;\n }\n ngOnInit() {\n if (this.item.type === ItemType.DateTime) {\n this.viewType = PickerViewType.DateTime;\n }\n else {\n this.viewType = PickerViewType.Date;\n }\n if (this.item.mode === ItemDateMode.ScrollMonthYear) {\n this.showDay = false;\n }\n }\n}\nDateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: DateComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: DateComponent, selector: \"filter-item-date\", usesInheritance: true, ngImport: i0, template: \"<mat-form-field *ngIf=\\\"item.mode===itemDateMode.Calendar; else elseMode\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDatePicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [maxYear]=\\\"item.maxYear\\\"\\n [view]=\\\"viewType\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>\\n\\n<ng-template #elseMode>\\n <mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDateScrollPicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [maxYear]=\\\"item.maxYear\\\"\\n [showMonth]=\\\"showMonth\\\"\\n [showDay]=\\\"showDay\\\"\\n [showYear]=\\\"showYear\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n </mat-form-field>\\n</ng-template>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i3.MatPlaceholder, selector: \"mat-placeholder\" }, { kind: \"directive\", type: i4.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: i3$3.FsDatePickerComponent, selector: \"[fsDatePicker]\", inputs: [\"minYear\", \"maxYear\", \"minDate\", \"maxDate\", \"startOfDay\", \"view\", \"format\", \"minutes\", \"weekStartsOn\"], outputs: [\"change\"] }, { kind: \"component\", type: i3$3.FsDateScrollPickerComponent, selector: \"[fsDateScrollPicker]\", inputs: [\"minYear\", \"maxYear\", \"minDate\", \"maxDate\", \"showMonth\", \"showYear\", \"showDay\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: DateComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-date', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field *ngIf=\\\"item.mode===itemDateMode.Calendar; else elseMode\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDatePicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [maxYear]=\\\"item.maxYear\\\"\\n [view]=\\\"viewType\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>\\n\\n<ng-template #elseMode>\\n <mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDateScrollPicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [maxYear]=\\\"item.maxYear\\\"\\n [showMonth]=\\\"showMonth\\\"\\n [showDay]=\\\"showDay\\\"\\n [showYear]=\\\"showYear\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n </mat-form-field>\\n</ng-template>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass DateRangeComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.viewType = PickerViewType.Date;\n }\n ngOnInit() {\n if (this.item.type === ItemType.DateTimeRange) {\n this.viewType = PickerViewType.DateTime;\n }\n else {\n this.viewType = PickerViewType.Date;\n }\n }\n}\nDateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: DateRangeComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: DateRangeComponent, selector: \"filter-item-date-range\", usesInheritance: true, ngImport: i0, template: \"<mat-form-field>\\n <mat-label>{{item.label[0]}}</mat-label>\\n <input\\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'from'\\\"\\n [fsDateRangeFrom]=\\\"item.name\\\"\\n [(ngModel)]=\\\"item.model.from\\\"\\n (ngModelChange)=\\\"itemChange()\\\"\\n [clear]=\\\"item.showClear\\\"\\n [view]=\\\"viewType\\\"\\n name=\\\"date_from\\\">\\n</mat-form-field>\\n\\n<mat-form-field>\\n <mat-label>{{item.label[1]}}</mat-label>\\n <input\\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'to'\\\"\\n [fsDateRangeTo]=\\\"item.name\\\"\\n [(ngModel)]=\\\"item.model.to\\\"\\n (ngModelChange)=\\\"itemChange()\\\"\\n [clear]=\\\"item.showClear\\\"\\n [view]=\\\"viewType\\\"\\n name=\\\"date_to\\\">\\n</mat-form-field>\\n\", dependencies: [{ kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i4.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: i3$3.DateRangePickerFromComponent, selector: \"[fsDateRangeFrom],[fsDateRangeFromPicker]\", inputs: [\"fsDateRangeFrom\", \"fsDateRangeFromPicker\"] }, { kind: \"component\", type: i3$3.DateRangePickerToComponent, selector: \"[fsDateRangeTo],[fsDateRangeToPicker]\", inputs: [\"fsDateRangeTo\", \"fsDateRangeToPicker\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: DateRangeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-date-range', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field>\\n <mat-label>{{item.label[0]}}</mat-label>\\n <input\\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'from'\\\"\\n [fsDateRangeFrom]=\\\"item.name\\\"\\n [(ngModel)]=\\\"item.model.from\\\"\\n (ngModelChange)=\\\"itemChange()\\\"\\n [clear]=\\\"item.showClear\\\"\\n [view]=\\\"viewType\\\"\\n name=\\\"date_from\\\">\\n</mat-form-field>\\n\\n<mat-form-field>\\n <mat-label>{{item.label[1]}}</mat-label>\\n <input\\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'to'\\\"\\n [fsDateRangeTo]=\\\"item.name\\\"\\n [(ngModel)]=\\\"item.model.to\\\"\\n (ngModelChange)=\\\"itemChange()\\\"\\n [clear]=\\\"item.showClear\\\"\\n [view]=\\\"viewType\\\"\\n name=\\\"date_to\\\">\\n</mat-form-field>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass CheckboxComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n }\n}\nCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: CheckboxComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: CheckboxComponent, selector: \"filter-item-checkbox\", usesInheritance: true, ngImport: i0, template: \"<fs-label-field>\\n <mat-checkbox [(ngModel)]=\\\"item.model\\\">\\n {{ item.label }}\\n </mat-checkbox>\\n</fs-label-field>\\n\", styles: [\"fs-label-field{margin:0}\\n\"], dependencies: [{ kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i6$2.MatCheckbox, selector: \"mat-checkbox\", inputs: [\"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matCheckbox\"] }, { kind: \"component\", type: i4$3.FsLabelFieldComponent, selector: \"fs-label-field\", inputs: [\"bottomMargin\", \"topMargin\", \"labelMargin\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: CheckboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<fs-label-field>\\n <mat-checkbox [(ngModel)]=\\\"item.model\\\">\\n {{ item.label }}\\n </mat-checkbox>\\n</fs-label-field>\\n\", styles: [\"fs-label-field{margin:0}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass FilterItemComponent {\n constructor(_cdRef) {\n this._cdRef = _cdRef;\n this.itemType = ItemType;\n this._destroy$ = new Subject();\n }\n get textItem() {\n return this.item;\n }\n get chipsItem() {\n return this.item;\n }\n get baseSelectItem() {\n return this.item;\n }\n get rangeItem() {\n return this.item;\n }\n get autocompleteItem() {\n return this.item;\n }\n get autocompleteChipsItem() {\n return this.item;\n }\n get dateItem() {\n return this.item;\n }\n get dateRangeItem() {\n return this.item;\n }\n get dateTimeItem() {\n return this.item;\n }\n get dateTimeRangeItem() {\n return this.item;\n }\n get weekItem() {\n return this.item;\n }\n get checkboxItem() {\n return this.item;\n }\n ngOnInit() {\n this.item.value$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._cdRef.markForCheck();\n });\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\nFilterItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterItemComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nFilterItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FilterItemComponent, selector: \"filter-item\", inputs: { item: \"item\" }, ngImport: i0, template: \"<div class=\\\"filter filter-{{ item.type }}\\\">\\n\\n <ng-container [ngSwitch]=\\\"item.type\\\">\\n <filter-item-text \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Text\\\"\\n [item]=\\\"textItem\\\">\\n </filter-item-text>\\n\\n <filter-item-select \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Select\\\"\\n [item]=\\\"baseSelectItem\\\">\\n </filter-item-select>\\n\\n <filter-item-chips \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Chips\\\"\\n [item]=\\\"chipsItem\\\">\\n </filter-item-chips>\\n\\n <filter-item-range \\n class=\\\"interface interface-range\\\"\\n *ngSwitchCase=\\\"itemType.Range\\\"\\n [item]=\\\"rangeItem\\\">\\n </filter-item-range>\\n\\n <filter-item-autocomplete \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.AutoComplete\\\"\\n [item]=\\\"autocompleteItem\\\">\\n </filter-item-autocomplete>\\n\\n <filter-item-autocompletechips \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.AutoCompleteChips\\\"\\n [item]=\\\"autocompleteChipsItem\\\">\\n </filter-item-autocompletechips>\\n\\n <filter-item-date \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.Date\\\"\\n [item]=\\\"dateItem\\\">\\n </filter-item-date>\\n\\n <filter-item-date \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateTime\\\"\\n [item]=\\\"dateTimeItem\\\">\\n </filter-item-date>\\n\\n <filter-item-date-range \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateRange\\\"\\n [item]=\\\"dateRangeItem\\\">\\n </filter-item-date-range>\\n\\n <filter-item-date-range \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateTimeRange\\\"\\n [item]=\\\"dateTimeRangeItem\\\">\\n </filter-item-date-range>\\n\\n <filter-item-week \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Week\\\"\\n [item]=\\\"weekItem\\\">\\n </filter-item-week>\\n\\n <filter-item-checkbox \\n class=\\\"interface interface-checkbox\\\"\\n *ngSwitchCase=\\\"itemType.Checkbox\\\"\\n [item]=\\\"checkboxItem\\\">\\n </filter-item-checkbox>\\n </ng-container>\\n\\n</div>\\n\", styles: [\":host ::ng-deep mat-form-field .mat-form-field-prefix .text-prefix,:host ::ng-deep mat-form-field .mat-form-field-prefix .text-suffix,:host ::ng-deep mat-form-field .mat-form-field-suffix .text-prefix,:host ::ng-deep mat-form-field .mat-form-field-suffix .text-suffix{top:-.25em;position:relative}:host ::ng-deep mat-form-field:not(.mat-form-field-should-float) .mat-form-field-prefix .text-prefix,:host ::ng-deep mat-form-field:not(.mat-form-field-should-float) .mat-form-field-suffix .text-suffix{display:none}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"component\", type: SelectComponent, selector: \"filter-item-select\" }, { kind: \"component\", type: ChipsComponent, selector: \"filter-item-chips\" }, { kind: \"component\", type: TextComponent, selector: \"filter-item-text\" }, { kind: \"component\", type: WeekComponent, selector: \"filter-item-week\" }, { kind: \"component\", type: RangeComponent, selector: \"filter-item-range\" }, { kind: \"component\", type: AutocompleteComponent, selector: \"filter-item-autocomplete\" }, { kind: \"component\", type: AutocompletechipsComponent, selector: \"filter-item-autocompletechips\" }, { kind: \"component\", type: DateComponent, selector: \"filter-item-date\" }, { kind: \"component\", type: DateRangeComponent, selector: \"filter-item-date-range\" }, { kind: \"component\", type: CheckboxComponent, selector: \"filter-item-checkbox\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"filter filter-{{ item.type }}\\\">\\n\\n <ng-container [ngSwitch]=\\\"item.type\\\">\\n <filter-item-text \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Text\\\"\\n [item]=\\\"textItem\\\">\\n </filter-item-text>\\n\\n <filter-item-select \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Select\\\"\\n [item]=\\\"baseSelectItem\\\">\\n </filter-item-select>\\n\\n <filter-item-chips \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Chips\\\"\\n [item]=\\\"chipsItem\\\">\\n </filter-item-chips>\\n\\n <filter-item-range \\n class=\\\"interface interface-range\\\"\\n *ngSwitchCase=\\\"itemType.Range\\\"\\n [item]=\\\"rangeItem\\\">\\n </filter-item-range>\\n\\n <filter-item-autocomplete \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.AutoComplete\\\"\\n [item]=\\\"autocompleteItem\\\">\\n </filter-item-autocomplete>\\n\\n <filter-item-autocompletechips \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.AutoCompleteChips\\\"\\n [item]=\\\"autocompleteChipsItem\\\">\\n </filter-item-autocompletechips>\\n\\n <filter-item-date \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.Date\\\"\\n [item]=\\\"dateItem\\\">\\n </filter-item-date>\\n\\n <filter-item-date \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateTime\\\"\\n [item]=\\\"dateTimeItem\\\">\\n </filter-item-date>\\n\\n <filter-item-date-range \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateRange\\\"\\n [item]=\\\"dateRangeItem\\\">\\n </filter-item-date-range>\\n\\n <filter-item-date-range \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateTimeRange\\\"\\n [item]=\\\"dateTimeRangeItem\\\">\\n </filter-item-date-range>\\n\\n <filter-item-week \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Week\\\"\\n [item]=\\\"weekItem\\\">\\n </filter-item-week>\\n\\n <filter-item-checkbox \\n class=\\\"interface interface-checkbox\\\"\\n *ngSwitchCase=\\\"itemType.Checkbox\\\"\\n [item]=\\\"checkboxItem\\\">\\n </filter-item-checkbox>\\n </ng-container>\\n\\n</div>\\n\", styles: [\":host ::ng-deep mat-form-field .mat-form-field-prefix .text-prefix,:host ::ng-deep mat-form-field .mat-form-field-prefix .text-suffix,:host ::ng-deep mat-form-field .mat-form-field-suffix .text-prefix,:host ::ng-deep mat-form-field .mat-form-field-suffix .text-suffix{top:-.25em;position:relative}:host ::ng-deep mat-form-field:not(.mat-form-field-should-float) .mat-form-field-prefix .text-prefix,:host ::ng-deep mat-form-field:not(.mat-form-field-should-float) .mat-form-field-suffix .text-suffix{display:none}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }] } });\n\nclass FilterDrawerComponent {\n constructor(_overlayRef, _data, externalParams, _cd, _itemsStore) {\n this._overlayRef = _overlayRef;\n this._data = _data;\n this.externalParams = externalParams;\n this._cd = _cd;\n this._itemsStore = _itemsStore;\n this.inline = false;\n this.windowDesktop = false;\n this._itemsStore.prepareItems();\n this._clear = this._data.clear;\n this._done = this._data.done;\n this.updateWindowWidth();\n }\n updateWindowWidth() {\n this.windowDesktop = window.innerWidth > 1200;\n }\n get items$() {\n return this._itemsStore.visibleItems$;\n }\n get sortItem() {\n return this._itemsStore.sortByItem;\n }\n get sortDirectionItem() {\n return this._itemsStore.sortDirectionItem;\n }\n clear() {\n this._clear();\n // this.overlayRef.detach();\n }\n done() {\n this._done();\n this._overlayRef.detach();\n }\n backdropClick() {\n this.done();\n }\n}\nFilterDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterDrawerComponent, deps: [{ token: FILTER_DRAWER_OVERLAY }, { token: FILTER_DRAWER_DATA }, { token: ExternalParamsController }, { token: i0.ChangeDetectorRef }, { token: FsFilterItemsStore }], target: i0.ɵɵFactoryTarget.Component });\nFilterDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FilterDrawerComponent, selector: \"ng-component\", inputs: { inline: \"inline\" }, host: { listeners: { \"window:resize\": \"updateWindowWidth()\" } }, ngImport: i0, template: \"<div class=\\\"filters\\\">\\n <div class=\\\"filters-wrap\\\">\\n\\n <div class=\\\"filter-by\\\">\\n <mat-icon>tune</mat-icon>\\n <span class=\\\"text\\\">Filters</span>\\n </div>\\n\\n <div class=\\\"overflow-shadow filter-items\\\">\\n <div class=\\\"overflow-shadow-content\\\">\\n <ng-container *fsSkeleton=\\\"(externalParams.pending$ | async) !== true\\\">\\n <filter-item \\n *ngFor=\\\"let filterItem of items$ | async\\\"\\n class=\\\"filter-group\\\"\\n [item]=\\\"filterItem\\\">\\n </filter-item>\\n\\n <ng-container *ngIf=\\\"sortItem && sortItem.values && sortItem.values.length > 0\\\">\\n <filter-item \\n class=\\\"filter-group sort\\\"\\n [item]=\\\"sortItem\\\">\\n </filter-item>\\n <filter-item \\n class=\\\"filter-group sort\\\"\\n [item]=\\\"sortDirectionItem\\\">\\n </filter-item>\\n </ng-container>\\n </ng-container>\\n </div>\\n </div>\\n\\n <fs-filter-drawer-actions \\n class=\\\"filter-actions\\\"\\n *ngIf=\\\"(externalParams.pending$ | async) !== true\\\"\\n (clear)=\\\"clear()\\\"\\n (done)=\\\"done()\\\">\\n </fs-filter-drawer-actions>\\n </div>\\n</div>\\n<div class=\\\"backdrop\\\" *ngIf=\\\"!windowDesktop\\\" (click)=\\\"backdropClick()\\\"></div>\\n\", styles: [\"@charset \\\"UTF-8\\\";@media (max-width: 599px){h1[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"]{margin-top:0}}.fs-delimit>*:not(:last-child):after{content:\\\",\\\\a0\\\"}:host ::ng-deep mat-form-field{width:100%}.filter-by{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 25px}.filter-by mat-icon{margin-right:8px}.filter-by .text{font-weight:400;font-size:19px}.filter-actions{display:block;box-sizing:border-box;padding:13px}.filter-actions button{margin-right:6px}.filter-actions button:last-child{margin-right:0}.filters{position:fixed;display:block;top:0;right:0;z-index:1002;bottom:0}.filters .filters-wrap{background:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;width:100vw;max-width:350px;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top);box-sizing:border-box;height:100%}.filters .filters-wrap .filter-items{overflow-y:auto;height:auto}.filters .filters-wrap .filter-items .overflow-shadow-content{padding:0 25px;box-sizing:border-box}.filters .filter-group{margin:10px 0 0}.filters .filter-group:first-child{margin:0}.filters .filter label{white-space:nowrap;color:#0000008a}.filters .filter .interface.interface-range input,.filters .filter .interface.interface-range .mat-input-wrapper,.filters .filter .interface.interface-range{text-align:center}.filters .filter .interface.interface-datetime fs-datetime.has-time .md-input{width:100%}.filters .filter .interface fs-datetime-range input{text-align:center}.filters .filter .filter-label{width:1%;white-space:nowrap;vertical-align:middle;padding-right:15px}.filters md-autocomplete-container md-input-container{margin:0}.filters .isolate{margin-top:-12px}.filters .isolate .interface{line-height:20px;padding-bottom:1.25em}.filters .isolate md-checkbox{margin:0 0 0 2px}.backdrop{position:fixed;inset:0;z-index:900;outline:none}@media (max-width: 599px){.filters .filters-wrap{max-width:none}}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"directive\", type: i5$2.FsSkeletonContentDirective, selector: \"[fsSkeleton]\", inputs: [\"fsSkeleton\", \"fsSkeletonPattern\"] }, { kind: \"component\", type: FilterItemComponent, selector: \"filter-item\", inputs: [\"item\"] }, { kind: \"component\", type: FsFilterDrawerActionsComponent, selector: \"fs-filter-drawer-actions\", outputs: [\"clear\", \"done\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterDrawerComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"filters\\\">\\n <div class=\\\"filters-wrap\\\">\\n\\n <div class=\\\"filter-by\\\">\\n <mat-icon>tune</mat-icon>\\n <span class=\\\"text\\\">Filters</span>\\n </div>\\n\\n <div class=\\\"overflow-shadow filter-items\\\">\\n <div class=\\\"overflow-shadow-content\\\">\\n <ng-container *fsSkeleton=\\\"(externalParams.pending$ | async) !== true\\\">\\n <filter-item \\n *ngFor=\\\"let filterItem of items$ | async\\\"\\n class=\\\"filter-group\\\"\\n [item]=\\\"filterItem\\\">\\n </filter-item>\\n\\n <ng-container *ngIf=\\\"sortItem && sortItem.values && sortItem.values.length > 0\\\">\\n <filter-item \\n class=\\\"filter-group sort\\\"\\n [item]=\\\"sortItem\\\">\\n </filter-item>\\n <filter-item \\n class=\\\"filter-group sort\\\"\\n [item]=\\\"sortDirectionItem\\\">\\n </filter-item>\\n </ng-container>\\n </ng-container>\\n </div>\\n </div>\\n\\n <fs-filter-drawer-actions \\n class=\\\"filter-actions\\\"\\n *ngIf=\\\"(externalParams.pending$ | async) !== true\\\"\\n (clear)=\\\"clear()\\\"\\n (done)=\\\"done()\\\">\\n </fs-filter-drawer-actions>\\n </div>\\n</div>\\n<div class=\\\"backdrop\\\" *ngIf=\\\"!windowDesktop\\\" (click)=\\\"backdropClick()\\\"></div>\\n\", styles: [\"@charset \\\"UTF-8\\\";@media (max-width: 599px){h1[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"]{margin-top:0}}.fs-delimit>*:not(:last-child):after{content:\\\",\\\\a0\\\"}:host ::ng-deep mat-form-field{width:100%}.filter-by{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 25px}.filter-by mat-icon{margin-right:8px}.filter-by .text{font-weight:400;font-size:19px}.filter-actions{display:block;box-sizing:border-box;padding:13px}.filter-actions button{margin-right:6px}.filter-actions button:last-child{margin-right:0}.filters{position:fixed;display:block;top:0;right:0;z-index:1002;bottom:0}.filters .filters-wrap{background:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;width:100vw;max-width:350px;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top);box-sizing:border-box;height:100%}.filters .filters-wrap .filter-items{overflow-y:auto;height:auto}.filters .filters-wrap .filter-items .overflow-shadow-content{padding:0 25px;box-sizing:border-box}.filters .filter-group{margin:10px 0 0}.filters .filter-group:first-child{margin:0}.filters .filter label{white-space:nowrap;color:#0000008a}.filters .filter .interface.interface-range input,.filters .filter .interface.interface-range .mat-input-wrapper,.filters .filter .interface.interface-range{text-align:center}.filters .filter .interface.interface-datetime fs-datetime.has-time .md-input{width:100%}.filters .filter .interface fs-datetime-range input{text-align:center}.filters .filter .filter-label{width:1%;white-space:nowrap;vertical-align:middle;padding-right:15px}.filters md-autocomplete-container md-input-container{margin:0}.filters .isolate{margin-top:-12px}.filters .isolate .interface{line-height:20px;padding-bottom:1.25em}.filters .isolate md-checkbox{margin:0 0 0 2px}.backdrop{position:fixed;inset:0;z-index:900;outline:none}@media (max-width: 599px){.filters .filters-wrap{max-width:none}}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i1$3.OverlayRef, decorators: [{\n type: Inject,\n args: [FILTER_DRAWER_OVERLAY]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [FILTER_DRAWER_DATA]\n }] }, { type: ExternalParamsController }, { type: i0.ChangeDetectorRef }, { type: FsFilterItemsStore }]; }, propDecorators: { inline: [{\n type: Input\n }], updateWindowWidth: [{\n type: HostListener,\n args: ['window:resize']\n }] } });\n\nclass ActionsController {\n constructor(_breakpointObserver) {\n this._breakpointObserver = _breakpointObserver;\n this._visible$ = new BehaviorSubject(false);\n this._actions$ = new BehaviorSubject([]);\n this._menuActions$ = new BehaviorSubject([]);\n this._destroy$ = new Subject();\n this._mobileMedia = '(max-width: 799px)';\n this._allActions = [];\n this._listenMobileMedia();\n }\n get menuActions() {\n return this._menuActions$.value;\n }\n get actions() {\n return this._actions$.value;\n }\n get actions$() {\n return this._actions$.asObservable();\n }\n get menuActions$() {\n return this._menuActions$.asObservable();\n }\n get visible$() {\n return this._visible$.asObservable();\n }\n get mobileMode() {\n return this._breakpointObserver.isMatched(this._mobileMedia);\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n setConfig(config) {\n this._config = config;\n this.initActions(config.actions);\n }\n initActions(rawActions) {\n if (!rawActions || !Array.isArray(rawActions)) {\n return;\n }\n this.show();\n this._allActions = rawActions\n .map((action) => new Action(this._config, action));\n if (this._reorderAction) {\n this._allActions.unshift(this._reorderAction);\n }\n this._classifyActions();\n }\n show() {\n this._visible$.next(true);\n }\n hide() {\n this._visible$.next(false);\n }\n addReorderAction(action) {\n this._allActions.unshift(action);\n action.isReorderAction = true;\n this._classifyAction(action);\n this._reorderAction = action;\n }\n clearActions() {\n this._allActions = [];\n this._setActions([]);\n this._setKebabActions([]);\n }\n updateActionsVisibility() {\n this._allActions.forEach((action) => action.updateVisibility());\n this._classifyActions();\n }\n updateDisabledState() {\n this.actions.forEach((action) => action.updateDisabledState());\n }\n _setKebabActions(actions) {\n this._menuActions$.next(actions);\n }\n _setActions(actions) {\n this._actions$.next(actions);\n }\n _classifyActions() {\n const kebabActions = [];\n const actions = [];\n const mobileMode = this.mobileMode;\n this._allActions\n .filter((action) => {\n return action.visible;\n })\n .forEach((action) => {\n if (action.menu !== false && (action.menu || mobileMode)) {\n kebabActions.push(action);\n }\n else {\n actions.push(action);\n }\n });\n this._setKebabActions(kebabActions);\n this._setActions(actions);\n }\n _classifyAction(action) {\n if (action.menu) {\n this._setKebabActions([...this.menuActions, action]);\n }\n else {\n this._setActions([...this.actions, action]);\n }\n }\n _listenMobileMedia() {\n this._breakpointObserver.observe(this._mobileMedia)\n .pipe(skip(1), takeUntil(this._destroy$))\n .subscribe(() => {\n this._classifyActions();\n });\n }\n}\nActionsController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ActionsController, deps: [{ token: i1$4.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });\nActionsController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ActionsController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ActionsController, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1$4.BreakpointObserver }]; } });\n\nconst FS_FILTER_META = new InjectionToken('fs.filter.meta', {\n providedIn: 'root',\n factory: () => {\n return {\n openedFilters: 0,\n };\n }\n});\n\nclass FsFilterOverlayService {\n constructor(_filterMeta, _injector, _overlay, _focusController, _htmlClassRenderer) {\n this._filterMeta = _filterMeta;\n this._injector = _injector;\n this._overlay = _overlay;\n this._focusController = _focusController;\n this._htmlClassRenderer = _htmlClassRenderer;\n this.detach$ = new Subject();\n this.attach$ = new Subject();\n this._destroy$ = new Subject();\n this._openWhenChipClicked();\n }\n get isOpened() {\n return !!this._overlayRef;\n }\n setClearFn(fn) {\n this._clearFn = fn;\n }\n setDoneFn(fn) {\n this._doneFn = fn;\n }\n close() {\n if (this._overlayRef) {\n this._overlayRef.detach();\n this._overlayRef = null;\n this._removeFilterClass();\n }\n }\n open() {\n this._overlayRef = this._createOverlay();\n this._overlayRef.backdropClick()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._overlayRef.detach();\n });\n this._overlayRef.detachments()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.detach$.next();\n });\n this._overlayRef.attachments()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.attach$.next();\n });\n this._addFilterClass();\n return this._openPortalPreview();\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n _createOverlay() {\n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'fs-filter-backdrop',\n });\n return this._overlay.create(overlayConfig);\n }\n _openPortalPreview() {\n const data = {\n done: this._doneFn,\n clear: this._clearFn,\n };\n const injector = this._createInjector(this._injector, data, this._overlayRef);\n const containerPortal = new ComponentPortal(FilterDrawerComponent, undefined, injector);\n const containerRef = this._overlayRef.attach(containerPortal);\n return containerRef.instance;\n }\n _createInjector(parentInjector, data, overlayRef) {\n const injectionTokens = new WeakMap([\n [FILTER_DRAWER_DATA, data],\n [FILTER_DRAWER_OVERLAY, overlayRef],\n ]);\n return new PortalInjector(parentInjector, injectionTokens);\n }\n _removeFilterClass() {\n this._filterMeta.openedFilters--;\n if (this._filterMeta.openedFilters === 0) {\n this._htmlClassRenderer.removeClass('fs-filter-open');\n }\n }\n _addFilterClass() {\n this._filterMeta.openedFilters++;\n if (this._filterMeta.openedFilters === 1) {\n this._htmlClassRenderer.addClass('fs-filter-open');\n }\n }\n _openWhenChipClicked() {\n this._focusController.focusOn$\n .pipe(filter$1((v) => !!v), takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.isOpened) {\n this.open();\n }\n });\n }\n}\nFsFilterOverlayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterOverlayService, deps: [{ token: FS_FILTER_META }, { token: i0.Injector }, { token: i1$3.Overlay }, { token: FocusControllerService }, { token: i3$4.HtmlClassRenderer }], target: i0.ɵɵFactoryTarget.Injectable });\nFsFilterOverlayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterOverlayService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterOverlayService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [FS_FILTER_META]\n }] }, { type: i0.Injector }, { type: i1$3.Overlay }, { type: FocusControllerService }, { type: i3$4.HtmlClassRenderer }]; } });\n\nclass FilterStatusBarDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFilterStatusBarDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterStatusBarDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nFilterStatusBarDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FilterStatusBarDirective, selector: \"[fsFilterStatusBar]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterStatusBarDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fsFilterStatusBar]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nconst FS_FILTER_CONFIG = new InjectionToken('fs.filter-config');\n\nclass FilterComponent {\n constructor(_defaultConfig, _filterOverlay, _zone, _externalParams, _filterItems, _actions, _savedFiltersController, _externalParamsController) {\n this._defaultConfig = _defaultConfig;\n this._filterOverlay = _filterOverlay;\n this._zone = _zone;\n this._externalParams = _externalParams;\n this._filterItems = _filterItems;\n this._actions = _actions;\n this._savedFiltersController = _savedFiltersController;\n this._externalParamsController = _externalParamsController;\n this.showSortBy = true;\n this.showFilterInput = true;\n this.closed = new EventEmitter();\n this.opened = new EventEmitter();\n this.ready = new EventEmitter();\n this.showFilterMenu = false;\n this.windowDesktop = false;\n this.fsFilterClass = true;\n this.searchPlaceholder = 'Search';\n this.keyword = '';\n this.autoReload = true;\n this._config = null;\n this._filtersBtnVisible$ = new BehaviorSubject(true);\n this._keywordVisible$ = new BehaviorSubject(true);\n this._hasFilterChips$ = new BehaviorSubject(false);\n this._keyword$ = new Subject();\n this._destroy$ = new Subject();\n this._filterItems.filter = this;\n this._listenWhenFilterReady();\n this._updateWindowWidth();\n this._filterOverlay.attach$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.showFilterMenu = true;\n });\n this._filterOverlay.detach$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.showFilterMenu = false;\n });\n this._listenWindowResize();\n }\n set setConfig(config) {\n this._initFilterWithConfig(config);\n }\n set setFilter(config) {\n this._initFilterWithConfig(config);\n }\n get hasKeyword() {\n return this._filterItems.hasKeyword;\n }\n get config() {\n return this._config;\n }\n get filterParams() {\n return this._filterItems.values();\n }\n get filterParamsQuery() {\n return this._filterItems.valuesAsQuery();\n }\n get items() {\n return this._filterItems.items;\n }\n get visibleItems() {\n return this._filterItems.visibleItems;\n }\n get keywordItem() {\n return this._filterItems.keywordItem;\n }\n get itemsReady$() {\n return this._filterItems.ready$;\n }\n get hasFilterChips$() {\n return this._hasFilterChips$.asObservable();\n }\n get hasVisibleItemOrSorting() {\n return this.visibleItems.length > 0 || !!this._filterItems.sortByItem;\n }\n get filtersBtnVisible$() {\n return this._filtersBtnVisible$.asObservable();\n }\n get keywordVisible$() {\n return this._keywordVisible$.asObservable();\n }\n get actionsVisible$() {\n return this._actions.visible$;\n }\n get actions$() {\n return this._actions.actions$;\n }\n get menuActions$() {\n return this._actions.menuActions$;\n }\n set activeSavedFilter(savedFilter) {\n this._externalParams.setActiveSavedFilter(savedFilter);\n }\n get activeSavedFilter() {\n return this._savedFiltersController.activeFilter;\n }\n get savedFilters() {\n return this._savedFiltersController.savedFilters;\n }\n ngOnInit() {\n // Avoid ngChanges error\n setTimeout(() => {\n if (this.config.autofocus) {\n this.focus();\n }\n });\n this._initAutoReload();\n this._listenInputChanges();\n this._listenInternalItemsChange();\n this._initOverlay();\n }\n ngOnDestroy() {\n this._destroyFilterDrawer();\n this._destroy$.next();\n this._destroy$.complete();\n }\n focus() {\n this.keywordMatInput?.focus();\n }\n updateSort(sort) {\n this._filterItems.updateSort(sort);\n }\n /**\n *\n * Do update value of some field\n *\n * @param values - values for update\n *\n * To update text value just pass new text value\n *\n * public updateSelectValue(val) {\n * this.filterEl.updateValues({ keyword: val });\n * }\n *\n * To update select or observable select you could pass suitable value\n *\n * public updateSelectValue(val: number) {\n * this.filterEl.updateValues({ simple_select: val }, { observable_select: val });\n * }\n *\n * To update checkbox value just pass true/false as value\n *\n * public updateCheckox(val: boolean) {\n * this.filterEl.updateValues({ checkbox: val });\n * }\n *\n * To update range value just pass object with min&max object or just with one of targets\n *\n * Ex.: { min: 10, max 15 }, { min: 5 }, { max 5 }\n *\n * public updateRange(val) {\n * this.filterEl.updateValues({ range: val });\n * }\n *\n * To update autocomplete just pass object with name/value fields\n *\n * Ex.: { name: 'John Doe', value: 1 }\n *\n * public updateAutocomplete(val) {\n * this.filterEl.updateValues({ autocomplete_user_id: val });\n * }\n *\n * To update autocompletechips just pass:\n *\n * 1) object with name/value fields - will be appended to existing set of values\n *\n * { name: 'John Doe', value: 1 }\n *\n * 2) array of objects - will be appended to existing set of values\n *\n * [{ name: 'John Doe', value: 1 }, { name: 'Darya Filipova', value: 2 }]\n *\n * 3) null - clear existing set of values\n *\n * public updateAutocomplete(val) {\n * this.filterEl.updateValues({ autocompletechips_user_id: val });\n * }\n *\n */\n updateValues(values) {\n Object.keys(values).forEach((key) => {\n const filterItem = this.items\n .find((item) => item.name === key);\n if (!filterItem) {\n return;\n }\n filterItem.model = values[key];\n });\n }\n hide() {\n this.changeVisibility(false);\n }\n show() {\n this.changeVisibility(true);\n }\n changeVisibilityClick(value, event = null) {\n if (event) {\n event.stopPropagation();\n }\n this.changeVisibility(value);\n }\n get itemValues() {\n return this.items\n .map((item) => item.value);\n }\n get nonEmptyItemValues() {\n return this.items\n .filter((item) => item.value !== undefined)\n .map((item) => item.value);\n }\n get hasItemValues() {\n return this.items\n .some((item) => item.value !== undefined);\n }\n getItemValue(name) {\n const item = this.items\n .find((_item) => _item.name === name);\n return item?.value;\n }\n showItem(name) {\n const item = this.getItem(name);\n if (item) {\n item.hide = false;\n this._filterItems.updateItemsVisiblity();\n }\n }\n hideItem(name) {\n const item = this.getItem(name);\n if (!item) {\n return;\n }\n item.hide = true;\n this._filterItems.updateItemsVisiblity();\n }\n clearItem(name) {\n const item = this.getItem(name);\n if (!item) {\n return;\n }\n item.clear();\n }\n updateItemConfig(name, params) {\n const item = this.getItem(name);\n if (!item) {\n return;\n }\n item.label = params.label ?? item.label;\n item.chipLabel = params.chipLabel ?? item.chipLabel;\n this._filterItems.updateItemsVisiblity();\n }\n getItemValueChange$(name) {\n const item = this.items.find((i) => i.name === name);\n if (item) {\n return item.value$\n .pipe(map(() => {\n return item.model;\n }));\n }\n return null;\n }\n changeVisibility(state) {\n if (state === this.showFilterMenu) {\n return;\n }\n if (!state) {\n this.closed.emit();\n return this._destroyFilterDrawer();\n }\n if (!this.hasVisibleItemOrSorting) {\n return;\n }\n this._listenEscButton();\n this.opened.emit();\n this._filterOverlay.open();\n }\n init() {\n const data = this._filterItems.valuesAsQuery();\n this._sort = this._filterItems.getSort();\n if (this.config.init) {\n this.config.init(data, this._sort, this);\n }\n this._updateChipsVisibility();\n this.items\n .forEach((item) => {\n item.init(item, this);\n });\n }\n clear(event = null) {\n if (event) {\n event.stopPropagation();\n }\n this._filterItems.filtersClear();\n if (this.config.clear) {\n this.config.clear();\n }\n this.keyword = '';\n }\n /**\n * Close filter window and do change callback\n */\n search(event) {\n this.changeVisibilityClick(false, event);\n }\n reload(event = null) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n const data = this._filterItems.valuesAsQuery();\n const el = this.reloadEl?.nativeElement;\n if (el) {\n el.style.transition = 'all 0.75s 0.0s';\n el.style.transform = 'rotate(360deg)';\n setTimeout(() => {\n el.style.transition = null;\n el.style.transform = null;\n }, 1000);\n }\n if (this.config.reload) {\n this.config.reload(data, this._filterItems.getSort());\n }\n }\n getItem(name) {\n return this.items\n .find((item) => item.name === name);\n }\n fetchQueryParams() {\n this._externalParams.fetchQueryParams();\n }\n /**\n * Call change callback and apply new filter values\n */\n change() {\n const data = this._filterItems.valuesAsQuery();\n const sort = this._filterItems.getSort();\n const sortingChanged = ((!sort || !this._sort) && sort !== this._sort)\n || (sort && this._sort && !objectsAreEquals(this._sort, sort));\n if (sortingChanged) {\n this._sort = sort;\n if (this.config.sortChange) {\n this.config.sortChange(data, sort);\n }\n }\n if (this.config.change) {\n this.config.change(data, sort);\n }\n this._updateChipsVisibility();\n // visibility for actions can depend on filters state\n this._actions.updateActionsVisibility();\n }\n /**\n * Update filter actions config\n *\n * @param actions\n */\n updateActions(actions) {\n this._actions.initActions(actions);\n }\n /**\n * Show \"Filters\" button\n */\n showFiltersBtn() {\n this._filtersBtnVisible$.next(true);\n }\n /**\n * Hide \"Filters\" button\n */\n hideFiltersBtn() {\n this._filtersBtnVisible$.next(false);\n }\n /**\n * Show \"Keyword\" field if it present\n */\n showKeywordField() {\n this._keywordVisible$.next(true);\n }\n /**\n * Hide \"Keyword\" field if it present\n */\n hideKeywordField() {\n this._keywordVisible$.next(false);\n }\n /**\n * Go through actions and check show() callback and update visible actions\n */\n updateActionsVisibility() {\n this._actions.updateActionsVisibility();\n }\n /**\n * Go through actions and check disabled() callback and update disabled state\n */\n updateDisabledState() {\n this._actions.updateDisabledState();\n }\n setItems(items) {\n this._filterItems.destroyItems();\n this.config.items = items;\n this._filterItems.setConfig(this._config);\n this._externalParams.initItems();\n this._syncSearchInputWithKeyword();\n }\n keywordChange(keyword) {\n this._keyword$.next(keyword);\n }\n updateSortings(items) {\n this._filterItems.updateSortingItemsValues(items);\n }\n _initFilterWithConfig(config) {\n if (this.config) {\n this._filterItems.destroyItems();\n }\n config = {\n ...(this._defaultConfig || {}),\n ...config,\n };\n this._config = new FsFilterConfig(config);\n this._actions.setConfig(this._config);\n this._filterItems.setConfig(this._config);\n this._externalParams.setConfig(this._config);\n this._syncSearchInputWithKeyword();\n if (this.config.reloadWhenConfigChanged) {\n this.change();\n }\n }\n _destroyFilterDrawer() {\n this._filterOverlay.close();\n }\n _updateWindowWidth() {\n this.windowDesktop = window.innerWidth > 1200;\n }\n _listenEscButton() {\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'keyup')\n .pipe(filter$1((event) => event.code === 'Escape'), takeUntil(this.closed), takeUntil(this._destroy$))\n .subscribe(() => {\n this._zone.run(() => {\n this.changeVisibility(false);\n });\n });\n });\n }\n _listenWindowResize() {\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(debounceTime(100), takeUntil(this._destroy$))\n .subscribe(() => {\n this._zone.run(() => {\n this._updateWindowWidth();\n });\n });\n });\n }\n _initAutoReload() {\n if (this.config.autoReload) {\n interval(this.config.autoReload.seconds * 1000)\n .pipe(filter$1(() => this.autoReload), takeUntil(this._destroy$))\n .subscribe(() => {\n this.reload(null);\n });\n }\n }\n _listenInputChanges() {\n this._keyword$\n .pipe(debounceTime(200), distinctUntilChanged(), takeUntil(this._destroy$))\n .subscribe((value) => {\n const keywordItem = this._filterItems.keywordItem;\n keywordItem.model = value;\n this.change();\n });\n }\n _syncSearchInputWithKeyword() {\n const keywordItem = this._filterItems.keywordItem;\n if (keywordItem) {\n this.keyword = keywordItem.model;\n this.searchPlaceholder = keywordItem.label || 'Search';\n }\n }\n _listenInternalItemsChange() {\n this._filterItems\n .itemsChange$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.change();\n });\n }\n _initOverlay() {\n this._filterOverlay.setClearFn(this.clear.bind(this));\n this._filterOverlay.setDoneFn(this.hide.bind(this));\n }\n // We may need some time to recieve external params and after that ready can be emitted\n _listenWhenFilterReady() {\n combineLatest([\n this._externalParams.pending$,\n this.itemsReady$,\n ])\n .pipe(filter$1(([pendingParams, itemsReady]) => !pendingParams && itemsReady), takeUntil(this._destroy$))\n .subscribe(() => {\n this.init();\n this._syncSearchInputWithKeyword();\n this.ready.emit();\n });\n }\n _updateChipsVisibility() {\n const hasFilterChips = this._filterItems.items\n .some((item) => {\n return item.isChipVisible;\n });\n this._hasFilterChips$.next(hasFilterChips);\n }\n}\nFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterComponent, deps: [{ token: FS_FILTER_CONFIG, optional: true }, { token: FsFilterOverlayService }, { token: i0.NgZone }, { token: ExternalParamsController }, { token: FsFilterItemsStore }, { token: ActionsController }, { token: SavedFiltersController }, { token: ExternalParamsController }], target: i0.ɵɵFactoryTarget.Component });\nFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FilterComponent, selector: \"fs-filter\", inputs: { setConfig: [\"config\", \"setConfig\"], setFilter: [\"filter\", \"setFilter\"], showSortBy: \"showSortBy\", showFilterInput: \"showFilterInput\" }, outputs: { closed: \"closed\", opened: \"opened\", ready: \"ready\" }, host: { properties: { \"class.filters-open\": \"this.showFilterMenu\", \"class.window-desktop\": \"this.windowDesktop\", \"class.fs-filter\": \"this.fsFilterClass\", \"class.has-keyword\": \"this.hasKeyword\" } }, providers: [\n FsFilterOverlayService,\n ExternalParamsController,\n PersistanceParamsController,\n QueryParamsController,\n FocusControllerService,\n FsFilterItemsStore,\n SavedFiltersController,\n ActionsController,\n ], queries: [{ propertyName: \"statusBar\", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: \"keywordMatInput\", first: true, predicate: [\"keywordMatInput\"], descendants: true, read: MatInput }, { propertyName: \"reloadEl\", first: true, predicate: [\"reloadEl\"], descendants: true, read: ElementRef }], ngImport: i0, template: \"<div class=\\\"filter-container\\\">\\n <div class=\\\"filter-inner-container\\\">\\n <ng-container *ngIf=\\\"!hasKeyword; else filterKeyword\\\">\\n <div>\\n <ng-container *ngTemplateOutlet=\\\"filterStatusBarChips\\\"></ng-container>\\n </div>\\n </ng-container>\\n\\n <ng-container [ngTemplateOutlet]=\\\"filterToolbar\\\"></ng-container>\\n <ng-container [ngTemplateOutlet]=\\\"filterActions\\\"></ng-container>\\n </div>\\n\\n <ng-container *ngIf=\\\"hasKeyword\\\">\\n <ng-container *ngTemplateOutlet=\\\"filterStatusBarChips\\\"></ng-container>\\n </ng-container>\\n</div>\\n\\n<ng-template #filterStatusBarChips>\\n <ng-container *ngIf=\\\"statusBar\\\">\\n <div class=\\\"filter-status-container\\\" [ngClass]=\\\"{ 'has-status': !!filterStatus.textContent }\\\">\\n <div class=\\\"filter-status\\\" #filterStatus>\\n <ng-container *ngTemplateOutlet=\\\"statusBar.templateRef\\\"></ng-container>\\n </div>\\n </div>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"config.chips && hasFilterChips$ | async\\\">\\n <fs-filter-chips\\n class=\\\"filter-chips\\\"\\n [filters]=\\\"items\\\">\\n </fs-filter-chips>\\n </ng-container>\\n</ng-template>\\n\\n<ng-template #filterKeyword>\\n <div class=\\\"filter-keyword\\\">\\n <ng-container *ngIf=\\\"(keywordVisible$ | async) && !keywordItem?.hide \\\">\\n <mat-form-field\\n [floatLabel]=\\\"'never'\\\"\\n class=\\\"form-field-padless\\\"\\n [ngClass]=\\\"search\\\"\\n appearance=\\\"outline\\\">\\n <span matPrefix>\\n <mat-icon matPrefix>search</mat-icon>\\n </span>\\n <input\\n #keywordMatInput\\n matInput\\n [(ngModel)]=\\\"keyword\\\"\\n (ngModelChange)=\\\"keywordChange($event)\\\"\\n name=\\\"filter-input\\\"\\n [fsClear]=\\\"true\\\"\\n [placeholder]=\\\"searchPlaceholder\\\">\\n </mat-form-field>\\n </ng-container>\\n </div>\\n</ng-template>\\n\\n<ng-template #filterActions>\\n <div class=\\\"filter-actions\\\">\\n <fs-filter-actions\\n *ngIf=\\\"actionsVisible$ | async\\\"\\n [actions]=\\\"actions$ | async\\\"\\n [kebabActions]=\\\"menuActions$ | async\\\">\\n </fs-filter-actions>\\n </div>\\n</ng-template>\\n\\n<ng-template #filterToolbar>\\n <div class=\\\"filter-toobar\\\">\\n <ng-container *ngIf=\\\"filtersBtnVisible$ | async\\\">\\n <ng-container *ngIf=\\\"hasVisibleItemOrSorting\\\">\\n <a\\n mat-button\\n class=\\\"filters-button\\\"\\n [ngClass]=\\\"{\\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\\n 'mat-button': config.button.style === 'basic' && config.button.label,\\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label\\n }\\\"\\n (click)=\\\"changeVisibilityClick(!showFilterMenu, $event)\\\"\\n [color]=\\\"config.button.color\\\">\\n <mat-icon *ngIf=\\\"config.button.icon\\\">{{config.button.icon}}</mat-icon>\\n {{ config.button.label }}\\n </a>\\n </ng-container>\\n </ng-container> \\n <ng-container *ngIf=\\\"config.reload\\\">\\n <a\\n mat-icon-button\\n (click)=\\\"reload($event)\\\"\\n class=\\\"reload\\\">\\n <mat-icon #reloadEl>refresh</mat-icon>\\n </a>\\n </ng-container>\\n <ng-container *ngIf=\\\"config.autoReload\\\">\\n <mat-slide-toggle \\n name=\\\"autoReload\\\" \\n class=\\\"auto-reload\\\"\\n [(ngModel)]=\\\"autoReload\\\">\\n Auto refresh\\n </mat-slide-toggle>\\n </ng-container>\\n </div>\\n</ng-template>\\n\", styles: [\":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toobar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:17px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.filter-inner-container .filter-keyword mat-form-field{max-width:100%;min-width:100px;margin-right:6px}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-wrapper{margin-bottom:0}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix .mat-icon{font-size:22px;color:#626262}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-infix{width:250px}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix,.filter-inner-container .filter-keyword mat-form-field .mat-form-field-suffix{top:.45em}.filter-inner-container .filter-keyword .mat-form-field-suffix{display:flex}.filter-inner-container .filter-keyword .mat-form-field-suffix .mat-icon-button{height:24px;width:24px}.filter-actions{display:flex;align-items:center}.filter-toobar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toobar .reload{margin-left:-6px}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin-top:4px;display:block}@media screen and (min-width: 599px){.filter-actions{margin-left:10px}.filters-button+fs-filter-actions:not(:empty){margin-left:5px}}@media screen and (max-width: 600px){.filter-actions{margin-left:5px}.filter-actions .filters-button{font-size:0;padding:0;min-width:unset;width:36px;height:36px;border-radius:50%;box-shadow:unset!important}}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}.fs-filter-backdrop{display:none}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatPrefix, selector: \"[matPrefix]\" }, { kind: \"directive\", type: i4.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: i3$1.MatAnchor, selector: \"a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matButton\", \"matAnchor\"] }, { kind: \"component\", type: i12.MatSlideToggle, selector: \"mat-slide-toggle\", inputs: [\"disabled\", \"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matSlideToggle\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }, { kind: \"component\", type: i14.FsClearComponent, selector: \"[fsClear]\", inputs: [\"ngModel\", \"fsClear\"], outputs: [\"ngModelChange\", \"cleared\"] }, { kind: \"component\", type: FsFilterChipsComponent, selector: \"fs-filter-chips\", inputs: [\"filters\"] }, { kind: \"component\", type: FsFilterActionsComponent, selector: \"fs-filter-actions\", inputs: [\"kebabActions\", \"actions\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter', providers: [\n FsFilterOverlayService,\n ExternalParamsController,\n PersistanceParamsController,\n QueryParamsController,\n FocusControllerService,\n FsFilterItemsStore,\n SavedFiltersController,\n ActionsController,\n ], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"filter-container\\\">\\n <div class=\\\"filter-inner-container\\\">\\n <ng-container *ngIf=\\\"!hasKeyword; else filterKeyword\\\">\\n <div>\\n <ng-container *ngTemplateOutlet=\\\"filterStatusBarChips\\\"></ng-container>\\n </div>\\n </ng-container>\\n\\n <ng-container [ngTemplateOutlet]=\\\"filterToolbar\\\"></ng-container>\\n <ng-container [ngTemplateOutlet]=\\\"filterActions\\\"></ng-container>\\n </div>\\n\\n <ng-container *ngIf=\\\"hasKeyword\\\">\\n <ng-container *ngTemplateOutlet=\\\"filterStatusBarChips\\\"></ng-container>\\n </ng-container>\\n</div>\\n\\n<ng-template #filterStatusBarChips>\\n <ng-container *ngIf=\\\"statusBar\\\">\\n <div class=\\\"filter-status-container\\\" [ngClass]=\\\"{ 'has-status': !!filterStatus.textContent }\\\">\\n <div class=\\\"filter-status\\\" #filterStatus>\\n <ng-container *ngTemplateOutlet=\\\"statusBar.templateRef\\\"></ng-container>\\n </div>\\n </div>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"config.chips && hasFilterChips$ | async\\\">\\n <fs-filter-chips\\n class=\\\"filter-chips\\\"\\n [filters]=\\\"items\\\">\\n </fs-filter-chips>\\n </ng-container>\\n</ng-template>\\n\\n<ng-template #filterKeyword>\\n <div class=\\\"filter-keyword\\\">\\n <ng-container *ngIf=\\\"(keywordVisible$ | async) && !keywordItem?.hide \\\">\\n <mat-form-field\\n [floatLabel]=\\\"'never'\\\"\\n class=\\\"form-field-padless\\\"\\n [ngClass]=\\\"search\\\"\\n appearance=\\\"outline\\\">\\n <span matPrefix>\\n <mat-icon matPrefix>search</mat-icon>\\n </span>\\n <input\\n #keywordMatInput\\n matInput\\n [(ngModel)]=\\\"keyword\\\"\\n (ngModelChange)=\\\"keywordChange($event)\\\"\\n name=\\\"filter-input\\\"\\n [fsClear]=\\\"true\\\"\\n [placeholder]=\\\"searchPlaceholder\\\">\\n </mat-form-field>\\n </ng-container>\\n </div>\\n</ng-template>\\n\\n<ng-template #filterActions>\\n <div class=\\\"filter-actions\\\">\\n <fs-filter-actions\\n *ngIf=\\\"actionsVisible$ | async\\\"\\n [actions]=\\\"actions$ | async\\\"\\n [kebabActions]=\\\"menuActions$ | async\\\">\\n </fs-filter-actions>\\n </div>\\n</ng-template>\\n\\n<ng-template #filterToolbar>\\n <div class=\\\"filter-toobar\\\">\\n <ng-container *ngIf=\\\"filtersBtnVisible$ | async\\\">\\n <ng-container *ngIf=\\\"hasVisibleItemOrSorting\\\">\\n <a\\n mat-button\\n class=\\\"filters-button\\\"\\n [ngClass]=\\\"{\\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\\n 'mat-button': config.button.style === 'basic' && config.button.label,\\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label\\n }\\\"\\n (click)=\\\"changeVisibilityClick(!showFilterMenu, $event)\\\"\\n [color]=\\\"config.button.color\\\">\\n <mat-icon *ngIf=\\\"config.button.icon\\\">{{config.button.icon}}</mat-icon>\\n {{ config.button.label }}\\n </a>\\n </ng-container>\\n </ng-container> \\n <ng-container *ngIf=\\\"config.reload\\\">\\n <a\\n mat-icon-button\\n (click)=\\\"reload($event)\\\"\\n class=\\\"reload\\\">\\n <mat-icon #reloadEl>refresh</mat-icon>\\n </a>\\n </ng-container>\\n <ng-container *ngIf=\\\"config.autoReload\\\">\\n <mat-slide-toggle \\n name=\\\"autoReload\\\" \\n class=\\\"auto-reload\\\"\\n [(ngModel)]=\\\"autoReload\\\">\\n Auto refresh\\n </mat-slide-toggle>\\n </ng-container>\\n </div>\\n</ng-template>\\n\", styles: [\":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toobar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:17px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.filter-inner-container .filter-keyword mat-form-field{max-width:100%;min-width:100px;margin-right:6px}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-wrapper{margin-bottom:0}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix .mat-icon{font-size:22px;color:#626262}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-infix{width:250px}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix,.filter-inner-container .filter-keyword mat-form-field .mat-form-field-suffix{top:.45em}.filter-inner-container .filter-keyword .mat-form-field-suffix{display:flex}.filter-inner-container .filter-keyword .mat-form-field-suffix .mat-icon-button{height:24px;width:24px}.filter-actions{display:flex;align-items:center}.filter-toobar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toobar .reload{margin-left:-6px}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin-top:4px;display:block}@media screen and (min-width: 599px){.filter-actions{margin-left:10px}.filters-button+fs-filter-actions:not(:empty){margin-left:5px}}@media screen and (max-width: 600px){.filter-actions{margin-left:5px}.filter-actions .filters-button{font-size:0;padding:0;min-width:unset;width:36px;height:36px;border-radius:50%;box-shadow:unset!important}}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}.fs-filter-backdrop{display:none}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: FsFilterConfig, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [FS_FILTER_CONFIG]\n }] }, { type: FsFilterOverlayService }, { type: i0.NgZone }, { type: ExternalParamsController }, { type: FsFilterItemsStore }, { type: ActionsController }, { type: SavedFiltersController }, { type: ExternalParamsController }]; }, propDecorators: { setConfig: [{\n type: Input,\n args: ['config']\n }], setFilter: [{\n type: Input,\n args: ['filter']\n }], showSortBy: [{\n type: Input\n }], showFilterInput: [{\n type: Input\n }], closed: [{\n type: Output\n }], opened: [{\n type: Output\n }], ready: [{\n type: Output\n }], statusBar: [{\n type: ContentChild,\n args: [FilterStatusBarDirective]\n }], keywordMatInput: [{\n type: ViewChild,\n args: ['keywordMatInput', { read: MatInput }]\n }], reloadEl: [{\n type: ViewChild,\n args: ['reloadEl', { read: ElementRef }]\n }], showFilterMenu: [{\n type: HostBinding,\n args: ['class.filters-open']\n }], windowDesktop: [{\n type: HostBinding,\n args: ['class.window-desktop']\n }], fsFilterClass: [{\n type: HostBinding,\n args: ['class.fs-filter']\n }], hasKeyword: [{\n type: HostBinding,\n args: ['class.has-keyword']\n }] } });\n\nclass SelectBackdropComponent {\n constructor() { }\n}\nSelectBackdropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectBackdropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nSelectBackdropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectBackdropComponent, selector: \"filter-item-select-backdrop\", ngImport: i0, template: \"\", styles: [\":host{position:absolute;z-index:1002;inset:0}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectBackdropComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select-backdrop', changeDetection: ChangeDetectionStrategy.OnPush, template: \"\", styles: [\":host{position:absolute;z-index:1002;inset:0}\\n\"] }]\n }], ctorParameters: function () { return []; } });\n\nclass FsFilterSavedFilterManageComponent {\n constructor(data, _cdRef) {\n this.data = data;\n this._cdRef = _cdRef;\n this._savedFiltersController = this.data.savedFiltersController;\n this.savedFilters = [...this._savedFiltersController.savedFilters];\n }\n remove(savedFilter) {\n this._savedFiltersController.delete(savedFilter)\n .subscribe(() => {\n this.savedFilters = [...this._savedFiltersController.savedFilters];\n this._cdRef.markForCheck();\n });\n }\n drop(event) {\n moveItemInArray(this.savedFilters, event.previousIndex, event.currentIndex);\n this._savedFiltersController.order(this.savedFilters)\n .subscribe();\n }\n}\nFsFilterSavedFilterManageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterSavedFilterManageComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterSavedFilterManageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterSavedFilterManageComponent, selector: \"ng-component\", ngImport: i0, template: \"<h1 mat-dialog-title>\\n Manage saved filters\\n</h1>\\n<div mat-dialog-content>\\n <div\\n cdkDropList \\n [cdkDropListData]=\\\"savedFilters\\\"\\n cdkDropListOrientation=\\\"vertical\\\"\\n (cdkDropListDropped)=\\\"drop($event)\\\"> \\n <ng-container \\n *ngFor=\\\"let savedFilter of savedFilters\\\">\\n <div class=\\\"chip-container\\\">\\n <fs-chip \\n cdkDrag\\n (removed)=\\\"remove(savedFilter)\\\">\\n {{savedFilter.name}}\\n </fs-chip>\\n </div>\\n </ng-container>\\n </div>\\n</div>\\n<div mat-dialog-actions>\\n <button \\n mat-button\\n type=\\\"button\\\"\\n [mat-dialog-close]=\\\"null\\\">\\n Done\\n </button>\\n</div>\\n\", styles: [\".chip-container{padding:5px 0}.chip-container fs-chip{cursor:move}.cdk-drag-preview{box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i2$3.CdkDropList, selector: \"[cdkDropList], cdk-drop-list\", inputs: [\"cdkDropListConnectedTo\", \"cdkDropListData\", \"cdkDropListOrientation\", \"id\", \"cdkDropListLockAxis\", \"cdkDropListDisabled\", \"cdkDropListSortingDisabled\", \"cdkDropListEnterPredicate\", \"cdkDropListSortPredicate\", \"cdkDropListAutoScrollDisabled\", \"cdkDropListAutoScrollStep\"], outputs: [\"cdkDropListDropped\", \"cdkDropListEntered\", \"cdkDropListExited\", \"cdkDropListSorted\"], exportAs: [\"cdkDropList\"] }, { kind: \"directive\", type: i2$3.CdkDrag, selector: \"[cdkDrag]\", inputs: [\"cdkDragData\", \"cdkDragLockAxis\", \"cdkDragRootElement\", \"cdkDragBoundary\", \"cdkDragStartDelay\", \"cdkDragFreeDragPosition\", \"cdkDragDisabled\", \"cdkDragConstrainPosition\", \"cdkDragPreviewClass\", \"cdkDragPreviewContainer\"], outputs: [\"cdkDragStarted\", \"cdkDragReleased\", \"cdkDragEnded\", \"cdkDragEntered\", \"cdkDragExited\", \"cdkDragDropped\", \"cdkDragMoved\"], exportAs: [\"cdkDrag\"] }, { kind: \"component\", type: i3$1.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"directive\", type: i1$2.MatDialogClose, selector: \"[mat-dialog-close], [matDialogClose]\", inputs: [\"aria-label\", \"type\", \"mat-dialog-close\", \"matDialogClose\"], exportAs: [\"matDialogClose\"] }, { kind: \"directive\", type: i1$2.MatDialogTitle, selector: \"[mat-dialog-title], [matDialogTitle]\", inputs: [\"id\"], exportAs: [\"matDialogTitle\"] }, { kind: \"directive\", type: i1$2.MatDialogContent, selector: \"[mat-dialog-content], mat-dialog-content, [matDialogContent]\" }, { kind: \"directive\", type: i1$2.MatDialogActions, selector: \"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]\", inputs: [\"align\"] }, { kind: \"component\", type: i3$2.FsChipComponent, selector: \"fs-chip\", inputs: [\"selectable\", \"removable\", \"value\", \"icon\", \"image\", \"selected\", \"size\", \"backgroundColor\", \"borderColor\", \"color\", \"outlined\"], outputs: [\"selectedToggled\", \"removed\"] }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterSavedFilterManageComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: \"<h1 mat-dialog-title>\\n Manage saved filters\\n</h1>\\n<div mat-dialog-content>\\n <div\\n cdkDropList \\n [cdkDropListData]=\\\"savedFilters\\\"\\n cdkDropListOrientation=\\\"vertical\\\"\\n (cdkDropListDropped)=\\\"drop($event)\\\"> \\n <ng-container \\n *ngFor=\\\"let savedFilter of savedFilters\\\">\\n <div class=\\\"chip-container\\\">\\n <fs-chip \\n cdkDrag\\n (removed)=\\\"remove(savedFilter)\\\">\\n {{savedFilter.name}}\\n </fs-chip>\\n </div>\\n </ng-container>\\n </div>\\n</div>\\n<div mat-dialog-actions>\\n <button \\n mat-button\\n type=\\\"button\\\"\\n [mat-dialog-close]=\\\"null\\\">\\n Done\\n </button>\\n</div>\\n\", styles: [\".chip-container{padding:5px 0}.chip-container fs-chip{cursor:move}.cdk-drag-preview{box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\\n\"] }]\n }], ctorParameters: function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DIALOG_DATA]\n }] }, { type: i0.ChangeDetectorRef }]; } });\n\nclass FsSavedFiltersMenuComponent {\n constructor(_itemsStore, _externalParams, _savedFilters, _dialog) {\n this._itemsStore = _itemsStore;\n this._externalParams = _externalParams;\n this._savedFilters = _savedFilters;\n this._dialog = _dialog;\n this.clear = new EventEmitter();\n }\n get filters$() {\n return this._savedFilters.savedFilters$;\n }\n get activeFilter$() {\n return this._savedFilters.activeFilter$;\n }\n selectFilter(savedFilter) {\n this._externalParams.setActiveSavedFilter(savedFilter);\n }\n removeActiveFilter() {\n this._itemsStore.filtersClear();\n this._externalParams.setActiveSavedFilter(null);\n this.clear.emit();\n }\n manageFilters() {\n this._dialog.open(FsFilterSavedFilterManageComponent, {\n data: {\n savedFiltersController: this._savedFilters,\n },\n });\n }\n}\nFsSavedFiltersMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsSavedFiltersMenuComponent, deps: [{ token: FsFilterItemsStore }, { token: ExternalParamsController }, { token: SavedFiltersController }, { token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });\nFsSavedFiltersMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsSavedFiltersMenuComponent, selector: \"fs-filter-saved-filters-menu\", outputs: { clear: \"clear\" }, ngImport: i0, template: \"<a [fsMenuTriggerFor]=\\\"menu\\\" class=\\\"selector\\\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\\n\\n<fs-menu #menu>\\n <ng-container *ngIf=\\\"activeFilter$ | async\\\">\\n <ng-template fs-menu-item (click)=\\\"removeActiveFilter()\\\">\\n None\\n </ng-template>\\n </ng-container>\\n <ng-container *ngIf=\\\"(filters$ | async).length !==0\\\">\\n <ng-container *ngFor=\\\"let filter of filters$ | async\\\">\\n <ng-template fs-menu-item (click)=\\\"selectFilter(filter)\\\">\\n {{ filter.name }}\\n </ng-template>\\n </ng-container>\\n <ng-template fs-menu-divider-item></ng-template>\\n </ng-container>\\n <ng-template \\n fs-menu-item \\n class=\\\"saved-filter-last-item\\\" \\n (click)=\\\"manageFilters()\\\">\\n Manage\\n </ng-template>\\n</fs-menu>\\n\", styles: [\":host ::ng-deep .selector{cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i6$1.FsMenuComponent, selector: \"fs-menu\", inputs: [\"class\", \"buttonClass\", \"buttonType\", \"buttonColor\"], outputs: [\"opened\", \"closed\"] }, { kind: \"directive\", type: i6$1.FsMenuItemDirective, selector: \"fs-menu-group,[fs-menu-item]\" }, { kind: \"directive\", type: i6$1.FsMenuTriggerDirective, selector: \"[fsMenuTriggerFor]\", inputs: [\"fsMenuTriggerFor\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsSavedFiltersMenuComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-saved-filters-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<a [fsMenuTriggerFor]=\\\"menu\\\" class=\\\"selector\\\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\\n\\n<fs-menu #menu>\\n <ng-container *ngIf=\\\"activeFilter$ | async\\\">\\n <ng-template fs-menu-item (click)=\\\"removeActiveFilter()\\\">\\n None\\n </ng-template>\\n </ng-container>\\n <ng-container *ngIf=\\\"(filters$ | async).length !==0\\\">\\n <ng-container *ngFor=\\\"let filter of filters$ | async\\\">\\n <ng-template fs-menu-item (click)=\\\"selectFilter(filter)\\\">\\n {{ filter.name }}\\n </ng-template>\\n </ng-container>\\n <ng-template fs-menu-divider-item></ng-template>\\n </ng-container>\\n <ng-template \\n fs-menu-item \\n class=\\\"saved-filter-last-item\\\" \\n (click)=\\\"manageFilters()\\\">\\n Manage\\n </ng-template>\\n</fs-menu>\\n\", styles: [\":host ::ng-deep .selector{cursor:pointer}\\n\"] }]\n }], ctorParameters: function () { return [{ type: FsFilterItemsStore }, { type: ExternalParamsController }, { type: SavedFiltersController }, { type: i1$2.MatDialog }]; }, propDecorators: { clear: [{\n type: Output\n }] } });\n\nclass FsFilterModule {\n static forRoot(config = {}) {\n return {\n ngModule: FsFilterModule,\n providers: [\n {\n provide: FS_FILTER_CONFIG,\n useValue: {\n button: {\n label: '',\n },\n ...config,\n },\n },\n ],\n };\n }\n}\nFsFilterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nFsFilterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterModule, declarations: [BaseItemComponent,\n FilterComponent,\n FilterItemComponent,\n FsFilterChipsComponent,\n SelectComponent,\n SelectGroupsComponent,\n SelectSimpleComponent,\n SelectMultipleComponent,\n ChipsComponent,\n TextComponent,\n WeekComponent,\n RangeComponent,\n AutocompleteComponent,\n AutocompletechipsComponent,\n DateComponent,\n DateRangeComponent,\n CheckboxComponent,\n FilterDrawerComponent,\n SelectBackdropComponent,\n FsFilterChipComponent,\n FsFilterChipContentComponent,\n FsFilterDrawerActionsComponent,\n FsFilterSavedFilterEditComponent,\n FsSavedFiltersMenuComponent,\n FsFilterActionsComponent,\n FsFilterActionButtonComponent,\n FsFilterActionKebabActionsComponent,\n FsFilterSavedFilterManageComponent,\n FilterStatusBarDirective,\n FocusToItemDirective,\n // Pipes\n FsFilterIsolateValues], imports: [CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n DragDropModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatChipsModule,\n MatCheckboxModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatDialogModule,\n MatTooltipModule,\n MatSlideToggleModule,\n FsChipModule,\n FsCommonModule,\n FsStoreModule,\n FsDatePickerModule,\n FsLabelModule,\n FsAutocompleteModule,\n FsAutocompleteChipsModule,\n FsScrollModule,\n FsMenuModule,\n FsSkeletonModule,\n FsFormModule,\n FsFileModule,\n FsSelectButtonModule,\n FsClearModule,\n FsPopoverModule,\n PortalModule], exports: [FilterComponent,\n FilterStatusBarDirective,\n FsSavedFiltersMenuComponent] });\nFsFilterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterModule, providers: [\n FsStore,\n ], imports: [CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n DragDropModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatChipsModule,\n MatCheckboxModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatDialogModule,\n MatTooltipModule,\n MatSlideToggleModule,\n FsChipModule,\n FsCommonModule,\n FsStoreModule,\n FsDatePickerModule,\n FsLabelModule,\n FsAutocompleteModule,\n FsAutocompleteChipsModule,\n FsScrollModule,\n FsMenuModule,\n FsSkeletonModule,\n FsFormModule,\n FsFileModule,\n FsSelectButtonModule,\n FsClearModule,\n FsPopoverModule,\n PortalModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n DragDropModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatChipsModule,\n MatCheckboxModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatDialogModule,\n MatTooltipModule,\n MatSlideToggleModule,\n FsChipModule,\n FsCommonModule,\n FsStoreModule,\n FsDatePickerModule,\n FsLabelModule,\n FsAutocompleteModule,\n FsAutocompleteChipsModule,\n FsScrollModule,\n FsMenuModule,\n FsSkeletonModule,\n FsFormModule,\n FsFileModule,\n FsSelectButtonModule,\n FsClearModule,\n FsPopoverModule,\n PortalModule,\n ],\n declarations: [\n BaseItemComponent,\n FilterComponent,\n FilterItemComponent,\n FsFilterChipsComponent,\n SelectComponent,\n SelectGroupsComponent,\n SelectSimpleComponent,\n SelectMultipleComponent,\n ChipsComponent,\n TextComponent,\n WeekComponent,\n RangeComponent,\n AutocompleteComponent,\n AutocompletechipsComponent,\n DateComponent,\n DateRangeComponent,\n CheckboxComponent,\n FilterDrawerComponent,\n SelectBackdropComponent,\n FsFilterChipComponent,\n FsFilterChipContentComponent,\n FsFilterDrawerActionsComponent,\n FsFilterSavedFilterEditComponent,\n FsSavedFiltersMenuComponent,\n FsFilterActionsComponent,\n FsFilterActionButtonComponent,\n FsFilterActionKebabActionsComponent,\n FsFilterSavedFilterManageComponent,\n FilterStatusBarDirective,\n FocusToItemDirective,\n // Pipes\n FsFilterIsolateValues,\n ],\n providers: [\n FsStore,\n ],\n exports: [\n FilterComponent,\n FilterStatusBarDirective,\n FsSavedFiltersMenuComponent,\n ],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ActionMode, ActionType, AutocompleteChipsItem, AutocompleteItem, BaseItem, ButtonStyle, CheckboxItem, ChipsItem, DateItem, DateRangeItem, DateTimeItem, DateTimeRangeItem, ExternalParamsController, FS_FILTER_CONFIG, FilterComponent, FilterItemComponent, FilterStatusBarDirective, FsFilterModule, FsSavedFiltersMenuComponent, ItemDateMode, ItemType, QUERY_PARAM_DELIMITER, RangeItem, SavedFiltersController, SelectItem, TextItem, buildQueryParams, filterFromQueryParam, filterToQueryParam };\n//# sourceMappingURL=firestitch-filter.mjs.map\n","map":{"version":3,"file":"firestitch-filter.mjs","sources":["../../src/app/helpers/compare.ts","../../src/app/enums/item-type.enum.ts","../../src/app/models/items/base-item.ts","../../src/app/models/items/select/base-select-item.ts","../../src/app/models/items/select/multiple-select-item.ts","../../src/app/consts/query-param-delimiter.ts","../../src/app/helpers/query-param-transformers.ts","../../src/app/helpers/build-query-params.ts","../../src/app/helpers/get-range-name.ts","../../src/app/models/items/date-range/base-date-range-item.ts","../../src/app/models/items/date-range-item.ts","../../src/app/models/items/date-time-range-item.ts","../../src/app/models/items/range-item.ts","../../src/app/helpers/parse-date.ts","../../src/app/models/items/week-item.ts","../../src/app/helpers/parse-item-value-from-stored.ts","../../src/app/helpers/restore-items.ts","../../src/app/models/items/autocomplete/base-autocomplete-item.ts","../../src/app/models/items/autocomplete-chips-item.ts","../../src/app/models/items/autocomplete-item.ts","../../src/app/models/items/checkbox-item.ts","../../src/app/models/items/chips-item.ts","../../src/app/enums/item-date-mode.enum.ts","../../src/app/models/items/date/base-date-item.ts","../../src/app/models/items/date-item.ts","../../src/app/models/items/date-time-item.ts","../../src/app/helpers/find-value.ts","../../src/app/models/items/select/simple-select-item.ts","../../src/app/models/items/select-item.ts","../../src/app/models/items/text-item.ts","../../src/app/helpers/create-filter-item.ts","../../src/app/enums/action-mode.enum.ts","../../src/app/enums/button-style.ts","../../src/app/enums/action-type.enum.ts","../../src/app/enums/picker-view-type.enum.ts","../../src/app/models/filter-config.ts","../../src/app/services/items-store.service.ts","../../src/app/services/external-params/persistance-params-controller.service.ts","../../src/app/services/external-params/query-params-controller.service.ts","../../src/app/components/saved-filter/saved-filter-edit/saved-filter-edit.component.ts","../../src/app/components/saved-filter/saved-filter-edit/saved-filter-edit.component.html","../../src/app/services/external-params/saved-filters-controller.service.ts","../../src/app/services/external-params-controller.service.ts","../../src/app/models/action-menu-item.model.ts","../../src/app/models/action.model.ts","../../src/app/components/action-button/action-button.component.ts","../../src/app/components/action-button/action-button.component.html","../../src/app/components/action-kebab-actions/action-kebab-actions.component.ts","../../src/app/components/action-kebab-actions/action-kebab-actions.component.html","../../src/app/components/actions/actions.component.ts","../../src/app/components/actions/actions.component.html","../../src/app/components/filter-chip-content/filter-chip-content.component.ts","../../src/app/components/filter-chip-content/filter-chip-content.component.html","../../src/app/services/focus-controller.service.ts","../../src/app/components/filter-chip/filter-chip.component.ts","../../src/app/components/filter-chip/filter-chip.component.html","../../src/app/components/filter-chips/filter-chips.component.ts","../../src/app/components/filter-chips/filter-chips.component.html","../../src/app/components/filter-drawer-actions/filter-drawer-actions.component.ts","../../src/app/components/filter-drawer-actions/filter-drawer-actions.component.html","../../src/app/injectors/filter-drawer-data.ts","../../src/app/injectors/filter-drawer-overlay.ts","../../src/app/components/filters-item/base-item/base-item.component.ts","../../src/app/directives/focus-to-item/focus-to-item.directive.ts","../../src/app/components/filters-item/select/groups/groups.component.ts","../../src/app/components/filters-item/select/groups/groups.component.html","../../src/app/pipes/remove-isolate-value.pipe.ts","../../src/app/components/filters-item/select/simple/simple.component.ts","../../src/app/components/filters-item/select/simple/simple.component.html","../../src/app/components/filters-item/select/multiple/multiple.component.ts","../../src/app/components/filters-item/select/multiple/multiple.component.html","../../src/app/components/filters-item/select/select.component.ts","../../src/app/components/filters-item/select/select.component.html","../../src/app/components/filters-item/chips/chips.component.ts","../../src/app/components/filters-item/chips/chips.component.html","../../src/app/components/filters-item/text/text.component.ts","../../src/app/components/filters-item/text/text.component.html","../../src/app/components/filters-item/week/week.component.ts","../../src/app/components/filters-item/week/week.component.html","../../src/app/components/filters-item/range/range.component.ts","../../src/app/components/filters-item/range/range.component.html","../../src/app/components/filters-item/autocomplete/autocomplete.component.ts","../../src/app/components/filters-item/autocomplete/autocomplete.component.html","../../src/app/components/filters-item/autocompletechips/autocompletechips.component.ts","../../src/app/components/filters-item/autocompletechips/autocompletechips.component.html","../../src/app/components/filters-item/date/date.component.ts","../../src/app/components/filters-item/date/date.component.html","../../src/app/components/filters-item/date-range/date-range.component.ts","../../src/app/components/filters-item/date-range/date-range.component.html","../../src/app/components/filters-item/checkbox/checkbox.component.ts","../../src/app/components/filters-item/checkbox/checkbox.component.html","../../src/app/components/filters-item/filter-item.component.ts","../../src/app/components/filters-item/filter-item.component.html","../../src/app/components/filter-drawer/filter-drawer.component.ts","../../src/app/components/filter-drawer/filter-drawer.component.html","../../src/app/classes/actions-controller.ts","../../src/app/providers/filter-meta.ts","../../src/app/services/filter-overlay.service.ts","../../src/app/directives/status-bar/status-bar.directive.ts","../../src/app/injectors/filter-config.ts","../../src/app/components/filter/filter.component.ts","../../src/app/components/filter/filter.component.html","../../src/app/components/filters-item/select/backdrop/backdrop.component.ts","../../src/app/components/filters-item/select/backdrop/backdrop.component.html","../../src/app/components/saved-filter/saved-filter-manage/saved-filter-manage.component.ts","../../src/app/components/saved-filter/saved-filter-manage/saved-filter-manage.component.html","../../src/app/components/saved-filter/saved-filters-menu/saved-filters-menu.component.ts","../../src/app/components/saved-filter/saved-filters-menu/saved-filters-menu.component.html","../../src/app/fs-filter.module.ts","../../src/firestitch-filter.ts"],"sourcesContent":["import { isObject } from 'lodash-es';\n\n\nexport function objectsAreEquals(obj1, obj2) {\n const oldKeys = Object.keys(obj1);\n const currKeys = Object.keys(obj2);\n\n if (oldKeys.length !== currKeys.length) {\n return false;\n }\n\n for (const key in obj1) {\n if (obj1.hasOwnProperty(key)) {\n const oldItem = obj1[key];\n const currItem = obj2[key];\n const isArrays = Array.isArray(oldItem) && Array.isArray(currItem);\n const isObjects = isObject(oldItem) && isObject(currItem);\n\n if (isArrays && !arraysAreEquals(oldItem, currItem)) {\n return false;\n } else if (isObjects && !objectsAreEquals(oldItem, currItem)) {\n return false;\n } else if (!isArrays && !isObjects && oldItem !== currItem) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nexport function arraysAreEquals(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (const el of arr1) {\n if (arr2.indexOf(el) === -1) {\n return false;\n }\n }\n\n return true;\n}\n","export enum ItemType {\n Text = 'text',\n Select = 'select',\n Range = 'range',\n Date = 'date',\n DateTime = 'datetime',\n DateRange = 'daterange',\n Week = 'week',\n DateTimeRange = 'datetimerange',\n AutoComplete = 'autocomplete',\n AutoCompleteChips = 'autocompletechips',\n Checkbox = 'checkbox',\n Chips = 'chips',\n Keyword = 'keyword',\n}\n","\nimport { BehaviorSubject, isObservable, Observable, Subject } from 'rxjs';\nimport {\n finalize,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nimport { isFunction } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { ItemType } from '../../enums/item-type.enum';\nimport { IFilterConfigItem } from '../../interfaces/config.interface';\nimport { IFilterDefaultFn } from '../../interfaces/items/base.interface';\nimport { IFilterItemDefaultRange } from '../../interfaces/items/range.interface';\n\n\nexport abstract class BaseItem<T extends IFilterConfigItem> {\n\n public name: string;\n public label: string | string[];\n public chipLabel: string | string[];\n public hide: boolean;\n public defaultValue: any | IFilterItemDefaultRange;\n public defaultValueFn: IFilterDefaultFn;\n public persistedValue: unknown;\n public showClear: boolean;\n public persistanceDisabled: boolean;\n public queryParamsDisabled: boolean;\n public change: (item: BaseItem<T>, filter: FilterComponent) => void;\n public init: (item: BaseItem<T>, filter?) => void;\n\n protected readonly _type: T['type'];\n\n protected _model: any;\n protected _pendingValues = false;\n protected _pendingDefaultValue = false;\n protected _initializedValues = false;\n protected _loading$ = new BehaviorSubject(false);\n protected _value$ = new BehaviorSubject(null);\n protected _valueChange$ = new Subject<void>();\n protected _values$ = new BehaviorSubject(null);\n protected _valuesFn: (keyword?: string, filter?: FilterComponent) => Observable<any> | any;\n\n protected _destroy$ = new Subject<void>();\n\n private _clear$ = new Subject<unknown>();\n\n constructor(\n itemConfig: T,\n protected _additionalConfig: unknown,\n protected _filter: FilterComponent,\n ) {\n this._type = itemConfig.type;\n this._parseConfig(itemConfig);\n }\n\n public abstract get value();\n\n public get filter(): FilterComponent {\n return this._filter;\n }\n\n public get isTypeAutocomplete() {\n return this.type === ItemType.AutoComplete;\n }\n\n public get isTypeAutocompleteChips() {\n return this.type === ItemType.AutoCompleteChips;\n }\n\n public get isTypeChips() {\n return this.type === ItemType.Chips;\n }\n\n public get isTypeCheckbox() {\n return this.type === ItemType.Checkbox;\n }\n\n public get isTypeSelect() {\n return this.type === ItemType.Select;\n }\n\n public get isTypeDate() {\n return this.type === ItemType.Date;\n }\n\n public get isTypeDateRange() {\n return this.type === ItemType.DateRange;\n }\n\n public get isTypeRange() {\n return this.type === ItemType.Range;\n }\n\n public get isTypeDateTimeRange() {\n return this.type === ItemType.DateTimeRange;\n }\n\n public get isTypeDateTime() {\n return this.type === ItemType.DateTime;\n }\n\n public get isTypeKeyword() {\n return this.type === ItemType.Keyword;\n }\n\n public get isChipVisible(): boolean {\n return !!this.model;\n }\n\n public get destroy$() {\n return this._destroy$.asObservable();\n }\n\n public get type(): T['type'] {\n return this._type;\n }\n\n public get hasPendingValues(): boolean {\n return this._pendingValues;\n }\n\n public get hasPendingDefaultValue(): boolean {\n return this._pendingDefaultValue;\n }\n\n public get model() {\n return this._model;\n }\n\n public set model(value) {\n this._setModel(value);\n this.valueChanged();\n }\n\n public set values(values) {\n this._values$.next(values);\n }\n\n public get values() {\n return this._values$.getValue();\n }\n\n public get values$(): Observable<unknown> {\n return this._values$.asObservable();\n }\n\n public get valueChange$() {\n return this._valueChange$.asObservable();\n }\n\n public get value$() {\n return this._value$.asObservable();\n }\n\n public get clear$() {\n return this._clear$.asObservable();\n }\n\n public get initialized() {\n return this._initialized;\n }\n\n public get loading$(): Observable<boolean> {\n return this._loading$.asObservable();\n }\n\n public get loading(): boolean {\n return this._loading$.getValue();\n }\n\n public set loading(value: boolean) {\n this._loading$.next(value);\n }\n\n protected get _initialized(): boolean {\n return !this._pendingDefaultValue && !this._pendingValues && this._initializedValues;\n }\n\n public valueChanged() {\n this._value$.next(this.value);\n\n if (this.change) {\n this.change(this, this._filter);\n }\n\n if (this.initialized) {\n this._valueChange$.next();\n }\n }\n\n public get queryObject(): Record<string, unknown> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n if (Array.isArray(value)) {\n params[this.name] = value.join(',');\n } else {\n params[name] = value;\n }\n\n return params;\n }\n\n public get persistanceObject(): Record<string, unknown> {\n return this.queryObject;\n }\n\n public loadDefaultValue(): Observable<any> {\n this._pendingDefaultValue = true;\n\n return this.defaultValueFn()\n .pipe(\n tap((value) => {\n this.defaultValue = value;\n\n this._initDefaultModel();\n }),\n finalize(() => {\n this._pendingDefaultValue = false;\n }),\n );\n }\n\n public initValues(persistedValue: unknown) {\n this._initializedValues = false;\n this.persistedValue = persistedValue;\n this._initDefaultModel();\n\n const isAutocomplete = this.type === ItemType.AutoComplete || this.type === ItemType.AutoCompleteChips;\n\n if (this._valuesFn && !isAutocomplete) {\n const valuesResult = this._valuesFn(null, this._filter);\n\n if (isObservable(valuesResult)) {\n this._pendingValues = true;\n } else {\n this.values = valuesResult;\n this._init();\n this._initializedValues = true;\n }\n\n } else {\n this._init();\n this._initializedValues = true;\n }\n }\n\n public loadAsyncValues(reload = true) {\n if (reload || (!this.loading && this.hasPendingValues)) {\n this.loading = true;\n\n (this._valuesFn(null, this._filter) as Observable<unknown>)\n .pipe(\n take(1),\n takeUntil(this._destroy$),\n )\n .subscribe((values) => {\n this.values = values;\n this._pendingValues = false;\n this.loading = false;\n this._init();\n this._validateModel();\n this._initializedValues = true;\n });\n\n }\n }\n\n public clear(defaultValue: unknown = undefined) {\n if (this.isTypeRange || this.isTypeDateRange || this.isTypeDateTimeRange) {\n console.warn(`\n Filter ${this.name} can not be cleared with .clear() method!\n Use special .clearRange() or clearDateRange() instead.\n `);\n }\n\n this._clear$.next(defaultValue);\n this._clearValue(defaultValue);\n }\n\n public getChipsContent(type): string {\n return '';\n }\n\n\n public destroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n protected _setModel(value) {\n this._model = value;\n }\n\n protected _parseConfig(item: T) {\n this.name = item.name;\n this.label = item.label;\n this.chipLabel = item.chipLabel;\n\n if (typeof item.default === 'function') {\n this.defaultValueFn = item.default as IFilterDefaultFn;\n } else {\n this.defaultValue = item.default;\n }\n\n this.change = item.change;\n this.init = item.init || ((_) => {\n //\n });\n this.hide = item.hide;\n this.showClear = item.clear ?? true;\n this.persistanceDisabled = item.disablePersist ?? false;\n this.queryParamsDisabled = item.disableQueryParams ?? false;\n\n if (isFunction(item.values)) {\n this._valuesFn = item.values;\n } else {\n this.values = item.values;\n }\n }\n\n protected _initDefaultModel() {\n const model = this.persistedValue ?? this.defaultValue;\n\n if (model !== undefined) {\n this._setModel(model);\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n }\n\n protected abstract _init();\n protected abstract _validateModel();\n}\n","import { BaseItem } from '../base-item';\nimport {\n IFilterConfigSelectIsolate,\n IFilterConfigSelectItem\n} from '../../../interfaces/items/select.interface';\n\nexport interface IFilterIsolate extends IFilterConfigSelectIsolate {\n enabled: boolean;\n}\n\nexport abstract class BaseSelectItem extends BaseItem<IFilterConfigSelectItem> {\n\n public children: string;\n public multiple: boolean;\n public isolate: IFilterIsolate;\n\n protected _parseConfig(item: IFilterConfigSelectItem) {\n this.multiple = item.multiple;\n this.children = item.children;\n\n // TODO nullish\n if (item.isolate) {\n this.isolate = {\n ...item.isolate,\n enabled: false,\n };\n }\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!Array.isArray(this.values)) {\n this.values = [];\n }\n\n // TODO Refactor\n if (this.isolate) {\n this.values = this.values.filter((item) => {\n if (Array.isArray(this.isolate.value)) {\n return (this.isolate.value as unknown[]).indexOf(item.value) === -1;\n } else {\n return item.value !== this.isolate.value;\n }\n });\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n if (this.isolate) {\n this.isolate.enabled = false;\n }\n }\n\n}\n","import { filter, isArrayEqual } from '@firestitch/common';\n\nimport { clone } from 'lodash-es';\n\nimport type { FilterComponent } from '../../../components/filter/filter.component';\nimport { arraysAreEquals } from '../../../helpers/compare';\nimport { IFilterConfigSelectItem } from '../../../interfaces/items/select.interface';\n\nimport { BaseSelectItem } from './base-select-item';\n\n\nexport class MultipleSelectItem extends BaseSelectItem {\n\n constructor(\n itemConfig: IFilterConfigSelectItem,\n _persistedValues: any,\n _filter: FilterComponent,\n ) {\n super(itemConfig, _persistedValues, _filter);\n }\n\n public get value() {\n let value = clone(this.model);\n\n if (this.isolateOptionNotSelected) {\n value = this.values?.map((v) => v.value);\n } else if (!Array.isArray(value) || value.length === 0 || value.indexOf('__all') > -1) {\n value = undefined;\n }\n\n return value;\n }\n\n public get isChipVisible(): boolean {\n return Array.isArray(this.model) && this.model.length > 0;\n }\n\n public get isolateOptionNotSelected() {\n const modelValue = this.model;\n const isolate = this.isolate;\n\n return isolate && !isolate.enabled && modelValue?.length === 0;\n }\n\n public getChipsContent(type = null): string {\n const options = this.model.reduce((acc, key) => {\n const itemValue = this.values.find((val) => val.value === key);\n let itemLabel: string;\n\n if (itemValue) {\n itemLabel = itemValue.name;\n } else if (this.isolate && this.isolate.enabled) {\n itemLabel = this.isolate.label;\n }\n\n if (!acc.includes(itemLabel)) {\n acc.push(itemLabel);\n }\n\n return acc;\n }, []);\n\n return options.join(', ');\n }\n\n protected _init() {\n super._init();\n\n const values = this.values.map((itemv) => itemv.value);\n const wrongDefaultValue = !this.model && !Array.isArray(this.defaultValue);\n\n /**\n * When multiple select is in isolate mode and have no options selected\n * it should send to the server all it's possible values,\n * but should not show them as selected in interfaces as well as in query params & persistance\n *\n * Code below prevents filling model with values from query params if query params contain all possible values\n */\n const isolate = !wrongDefaultValue\n && !this.isolateOptionNotSelected\n && arraysAreEquals(this.model, values);\n\n if (wrongDefaultValue || isolate) {\n this.model = [];\n }\n }\n protected _setModel(value) {\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (isNaN(val)) {\n return val;\n }\n\n return +val;\n\n });\n }\n\n super._setModel(value);\n }\n\n protected _validateModel() {\n const possibleValues = filter(this.model || [], (item) => {\n return this.values.find((value) => {\n return value.value === item;\n });\n });\n\n if (!isArrayEqual(this.model, possibleValues)) {\n this.model = possibleValues;\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n super._clearValue(defaultValue);\n\n this.model = defaultValue ?? [];\n }\n}\n","export const QUERY_PARAM_DELIMITER = ':';\n","import { QUERY_PARAM_DELIMITER } from '../consts/query-param-delimiter';\n\nexport function filterToQueryParam(value, name): string {\n return `${encodeURIComponent(value)}${QUERY_PARAM_DELIMITER}${encodeURIComponent(name)}`;\n}\n\nexport function filterFromQueryParam(param: string): string[] {\n const parts = param.split(QUERY_PARAM_DELIMITER);\n\n return [decodeURIComponent(parts[0]), decodeURIComponent(parts[1])];\n}\n\n","import { list as arrayList } from '@firestitch/common';\n\nimport { isObject } from 'lodash-es';\n\nimport { IFilterConfigItem } from '../interfaces/config.interface';\nimport { BaseItem } from '../models/items/base-item';\nimport { MultipleSelectItem } from '../models/items/select/multiple-select-item';\nimport { arraysAreEquals } from './compare';\nimport { filterToQueryParam } from './query-param-transformers';\n\n\nexport function buildQueryParams(flattenedParams: Record<string, unknown>, items: BaseItem<IFilterConfigItem>[]) {\n items\n .forEach((filterItem) => {\n if (filterItem instanceof MultipleSelectItem && filterItem.isolate) {\n if (filterItem.multiple && filterItem.value) {\n const isolated = arrayList(filterItem.values, 'value').sort();\n const value = filterItem.value.sort();\n\n if (arraysAreEquals(value, isolated)) {\n flattenedParams[filterItem.name] = null;\n }\n }\n }\n\n if (filterItem.isTypeAutocomplete) {\n if (isObject(filterItem.model)) {\n flattenedParams[filterItem.name] = filterToQueryParam(filterItem.model.value, filterItem.model.name);\n }\n } else if (filterItem.isTypeAutocompleteChips || filterItem.isTypeChips) {\n if (Array.isArray(filterItem.model) && filterItem.model.length) {\n flattenedParams[filterItem.name] = filterItem.model.map((item) => {\n return filterToQueryParam(item.value, item.name);\n }).join(',');\n }\n }\n });\n\n return flattenedParams;\n}\n","export function getRangeName(configCase: 'snake' | 'camel', name: string, range: string) {\n if (configCase === 'snake') {\n return name.concat('_').concat(range);\n }\n\n if (configCase === 'camel') {\n return name.concat(range.charAt(0).toUpperCase()).concat(range.slice(1));\n }\n}\n","import { isEmpty } from '@firestitch/common';\nimport { format, simpleFormat } from '@firestitch/date';\nimport { ItemType } from '../../../enums/item-type.enum';\n\nimport { isDate, isValid, parseISO } from 'date-fns';\n\nimport { clone, isObject, isString } from 'lodash-es';\nimport { BaseItem } from '../base-item';\nimport { getRangeName } from '../../../helpers/get-range-name';\nimport {\n IFilterConfigDateRangeItem,\n IFilterItemDefaultDateRange,\n} from '../../../interfaces/items/date-range.interface';\n\n\nexport abstract class BaseDateRangeItem extends BaseItem<IFilterConfigDateRangeItem> {\n\n public case: 'snake' | 'camel';\n\n protected readonly _additionalConfig: { case: 'camel' | 'snake' }\n\n public get isTypeDateRange(): boolean {\n return this.type === ItemType.DateRange;\n }\n\n public get isTypeDateTimeRange(): boolean {\n return this.type === ItemType.DateTimeRange;\n }\n\n public get isChipVisible(): boolean {\n return this.model && (this.model.from !== undefined || this.model.to !== undefined);\n }\n\n public get value() {\n let value = clone(this.model);\n\n if (!isObject(this.model) ||\n (isEmpty(this.model.from, { zero: true }) && isEmpty(this.model.to, { zero: true }))) {\n value = undefined;\n }\n\n if (isEmpty(value, { zero: true })) {\n return undefined;\n }\n\n let from = value.from;\n let to = value.to;\n\n value = {};\n\n if (from) {\n if (isString(from)) {\n from = parseISO(from);\n }\n\n if (isValid(from) && isDate(from)) {\n value.from = from;\n }\n }\n\n if (to) {\n if (isString(to)) {\n to = parseISO(to);\n }\n\n if (isValid(to) && isDate(to)) {\n value.to = to;\n }\n }\n\n return value;\n }\n\n public get queryObject(): Record<string, Date> {\n const value = this.value || {};\n const name = this.name;\n const paramFromName = getRangeName(this.case, name, 'from');\n const paramToName = getRangeName(this.case, name, 'to');\n\n return {\n [paramFromName]: value.from || undefined,\n [paramToName]: value.to || undefined,\n };\n }\n\n public get persistanceObject(): Record<string, string> {\n const query = this.queryObject;\n\n return Object.keys(this.queryObject)\n .reduce((acc, key) => {\n if (!!query[key]) {\n acc[key] = simpleFormat(query[key]);\n } else {\n acc[key] = query[key];\n }\n\n return acc;\n }, {});\n }\n\n public getChipsContent(type = null): string {\n const formatTo = this.type === ItemType.DateRange ? 'date' : 'date-time';\n\n if (type === 'from') {\n const from = this.model.from;\n return `${format(from, formatTo)}`;\n } else if (type === 'to') {\n const to = this.model.to;\n return `${format(to, formatTo)}`;\n }\n }\n\n public clearDateRange(type: 'from' | 'to' = null, defaultValue: IFilterItemDefaultDateRange = undefined) {\n if (type === 'from') {\n delete this.model.from;\n\n if (defaultValue?.from) {\n this.model.from = defaultValue.from;\n }\n\n this.model = { ...this.model };\n } else if (type === 'to') {\n delete this.model.to;\n\n if (defaultValue?.to) {\n this.model.to = defaultValue.to;\n }\n\n this.model = { ...this.model };\n } else {\n if (defaultValue) {\n this.model = { ...defaultValue };\n } else {\n this.model = {};\n }\n }\n }\n\n protected _validateModel() {\n }\n\n protected _setModel(value) {\n if (value) {\n if (value.from && (!isDate(value.from) || !isValid(value.from))) {\n value.from = parseISO(value.from);\n }\n if (value.to && (!isDate(value.to) || !isValid(value.to))) {\n value.to = parseISO(value.to);\n }\n }\n\n super._setModel(value);\n }\n\n protected _parseConfig(item: IFilterConfigDateRangeItem) {\n this.case = this._additionalConfig?.case ?? 'camel';\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!this.label) {\n this.label = ['Date From', 'Date To'];\n }\n\n if (!this.model) {\n this.model = this.defaultValue || {};\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = this.defaultValue ?? {};\n }\n\n}\n","import type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigDateRangeItem } from '../../interfaces/items/date-range.interface';\n\nimport { BaseDateRangeItem } from './date-range/base-date-range-item';\n\n\nexport class DateRangeItem extends BaseDateRangeItem {\n\n public static create(config: IFilterConfigDateRangeItem, filter: FilterComponent) {\n return new DateRangeItem(config, null, filter);\n }\n\n}\n","import type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigDateRangeItem } from '../../interfaces/items/date-range.interface';\n\nimport { BaseDateRangeItem } from './date-range/base-date-range-item';\n\n\nexport class DateTimeRangeItem extends BaseDateRangeItem {\n\n public static create(config: IFilterConfigDateRangeItem, filter: FilterComponent) {\n return new DateTimeRangeItem(config, null, filter);\n }\n\n}\n","import { isEmpty } from '@firestitch/common';\n\nimport { clone, isObject } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { getRangeName } from '../../helpers/get-range-name';\nimport {\n IFilterConfigRangeItem,\n IFilterItemDefaultRange,\n} from '../../interfaces/items/range.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class RangeItem extends BaseItem<IFilterConfigRangeItem> {\n\n public static create(config: IFilterConfigRangeItem, additionalConfig: unknown, filter: FilterComponent) {\n return new RangeItem(config, additionalConfig, filter);\n }\n\n public case: 'snake' | 'camel';\n public options: { scale?: number };\n public prefix: string;\n public suffix: string;\n\n protected readonly _additionalConfig: { case: 'camel' | 'snake' };\n\n public get value() {\n let value = clone(this.model);\n\n if (!isObject(this.model) ||\n (isEmpty(this.model.max, { zero: true }) && isEmpty(this.model.min, { zero: true }))) {\n value = undefined;\n }\n\n return value;\n }\n\n public get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n const paramMinName = getRangeName(this.case, name, 'min');\n const paramMaxName = getRangeName(this.case, name, 'max');\n\n if (isObject(value)) {\n params[paramMinName] = value.min || undefined;\n params[paramMaxName] = value.max || undefined;\n } else {\n params[paramMinName] = undefined;\n params[paramMaxName] = undefined;\n }\n\n return params;\n }\n\n public get isChipVisible(): boolean {\n return this.model && (this.model.min !== undefined || this.model.max !== undefined);\n }\n\n public getChipsContent(type): string {\n if (type === 'from') {\n const min = this.model.min;\n\n return `${min}`;\n } else if (type === 'to') {\n const max = this.model.max;\n\n return `${max}`;\n }\n }\n\n public clearRange(type: 'from' | 'to' = null, defaultValue: IFilterItemDefaultRange = undefined) {\n if (type === 'from') {\n delete this.model.min;\n\n if (defaultValue?.min) {\n this.model.min = defaultValue.min;\n }\n\n this.model = { ...this.model };\n } else if (type === 'to') {\n delete this.model.max;\n\n if (defaultValue?.max) {\n this.model.max = defaultValue.max;\n }\n\n this.model = { ...this.model };\n } else {\n this.model = defaultValue ? { ...defaultValue } : {};\n }\n }\n\n protected _validateModel() {\n }\n\n protected _parseConfig(item: IFilterConfigRangeItem) {\n this.options = item.options;\n this.prefix = item.prefix;\n this.suffix = item.suffix;\n this.case = this._additionalConfig?.case ?? 'camel';\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!this.label) {\n this.label = ['Min', 'Max'];\n }\n\n if (!this.model) {\n this.model = this.defaultValue || {};\n }\n }\n}\n","import { isDate, isValid, parseISO } from 'date-fns';\n\nexport function parseDate(value: string) {\n if (value && (!isDate(value) || !isValid(value))) {\n return parseISO(value);\n }\n\n return value;\n}\n","import { isEmpty } from '@firestitch/common';\nimport { simpleFormat } from '@firestitch/date';\nimport { formatPeriodObject } from '@firestitch/datepicker';\n\nimport { isDate, isValid, parseISO } from 'date-fns';\nimport { clone, isObject, isString } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { getRangeName } from '../../helpers/get-range-name';\nimport { parseDate } from '../../helpers/parse-date';\nimport { IFilterConfigWeekItem } from '../../interfaces/items/week.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class WeekItem extends BaseItem<IFilterConfigWeekItem> {\n\n public seedDate: Date;\n\n public static create(config: IFilterConfigWeekItem, filter: FilterComponent) {\n return new WeekItem(config, null, filter);\n }\n\n public get value() {\n let value = clone(this.model);\n\n if (!isObject(this.model) ||\n (isEmpty(this.model.from, { zero: true }) && isEmpty(this.model.to, { zero: true }))) {\n value = undefined;\n }\n\n if (isEmpty(value, { zero: true })) {\n return undefined;\n }\n\n let from = value.from;\n let to = value.to;\n const period = value.period;\n\n value = {};\n\n if (from) {\n if (isString(from)) {\n from = parseISO(from);\n }\n\n if (isValid(from) && isDate(from)) {\n value.from = from;\n }\n }\n\n if (to) {\n if (isString(to)) {\n to = parseISO(to);\n }\n\n if (isValid(to) && isDate(to)) {\n value.to = to;\n }\n }\n\n if (period) {\n value.period = isString(period) ? parseInt(period, 10) : period;\n }\n\n\n return value;\n }\n\n public get queryObject() {\n const value = this.value;\n const name = this.name;\n const paramFromName = getRangeName('camel', name, 'from');\n const paramToName = getRangeName('camel', name, 'to');\n const paramPeriodName = `${name}Period`;\n\n return {\n [paramFromName]: value?.from || undefined,\n [paramToName]: value?.to || undefined,\n [paramPeriodName]: value?.period || undefined,\n };\n }\n\n public get persistanceObject(): Record<string, string> {\n const query = this.queryObject;\n const name = this.name;\n const paramFromName = getRangeName('camel', name, 'from');\n const paramFromValue = query[paramFromName] && simpleFormat(query[paramFromName]) || query[paramFromName];\n const paramToName = getRangeName('camel', name, 'to');\n const paramToValue = query[paramToName] && simpleFormat(query[paramToName]) || query[paramToName];\n const paramPeriodName = `${name}Period`;\n\n return {\n [paramFromName]: paramFromValue,\n [paramToName]: paramToValue,\n [paramPeriodName]: query[paramPeriodName],\n };\n }\n\n public getChipsContent(type = null): string {\n return formatPeriodObject(this.value);\n }\n\n protected _validateModel() { }\n\n protected _setModel(value) {\n if (value) {\n value.from = parseDate(value.from);\n value.to = parseDate(value.to);\n value.period = parseInt(value.period, 10) || undefined;\n }\n\n super._setModel(value);\n }\n\n protected _parseConfig(item: IFilterConfigWeekItem) {\n super._parseConfig(item);\n\n this.seedDate = item.seedDate;\n }\n\n protected _init() { }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n","import { ItemType } from '../enums/item-type.enum';\nimport { getRangeName } from './get-range-name';\nimport { filterFromQueryParam } from './query-param-transformers';\n\nexport function parseItemValueFromStored(item, params, paramCase: 'snake' | 'camel') {\n const param = params[item.name];\n\n switch (item.type) {\n case ItemType.Range: {\n const min = params[getRangeName(paramCase, item.name, 'min')];\n const max = params[getRangeName(paramCase, item.name, 'max')];\n\n return { min: min, max: max };\n }\n\n case ItemType.DateRange: case ItemType.DateTimeRange: {\n const from = params[getRangeName(item.case, item.name, 'from')];\n const to = params[getRangeName(item.case, item.name, 'to')];\n\n return { from: from, to: to };\n }\n\n case ItemType.Week: {\n const from = params[getRangeName('camel', item.name, 'from')];\n const to = params[getRangeName('camel', item.name, 'to')];\n const period = params[`${item.name}Period`]\n\n return { from, to, period };\n }\n\n case ItemType.Select: {\n if (item.multiple && !!param) {\n const values = param.split(',');\n\n if (item.isolate) {\n const isolatedValue = Array.isArray(item.isolate.value)\n ? item.isolate.value\n : [ item.isolate.value ];\n\n item.isolate.enabled = arraysHaveSameElements(isolatedValue, values);\n\n return item.isolate.enabled\n ? isolatedValue\n : values;\n }\n\n return values;\n } else {\n return param;\n }\n }\n\n case ItemType.Checkbox: {\n if (param === 'true') {\n return true === item.checked;\n } else {\n return param === item.checked;\n }\n }\n\n case ItemType.AutoComplete: {\n const filterParts = filterFromQueryParam(param);\n\n return {\n name: filterParts[1],\n value: filterParts[0]\n }\n }\n\n case ItemType.AutoCompleteChips: \n case ItemType.Chips: {\n const filterParts = param.split(',');\n\n return filterParts.reduce((arry, value) => {\n\n const chipParts = filterFromQueryParam(value);\n\n arry.push({\n name: chipParts[1],\n value: chipParts[0],\n });\n\n return arry;\n }, [])\n }\n\n default: {\n return param;\n }\n }\n}\n\nfunction arraysHaveSameElements(arr1: unknown[], arr2: unknown[]): boolean {\n\n arr1 = [ ...arr1 ].sort();\n arr2 = [ ...arr2 ].sort();\n\n return arr1.some((item) => {\n return arr2.includes(item);\n });\n}\n","import { DateRangeItem } from '../models/items/date-range-item';\nimport { DateTimeRangeItem } from '../models/items/date-time-range-item';\nimport { RangeItem } from '../models/items/range-item';\nimport { WeekItem } from '../models/items/week-item';\n\nimport { getRangeName } from './get-range-name';\nimport { parseItemValueFromStored } from './parse-item-value-from-stored';\n\n\n/**\n * We need this function because when we store persisted/query/remote filter values\n * it stores with different format, ex.: Range will be stored as RangeFrom && RangeTo\n * and in this case we don't know how to restroe those values.\n *\n * This function do convertation for those kinds of stored values\n *\n * @param params\n * @param items\n * @param paramsCase\n */\nexport function restoreItems(params, items, paramsCase) {\n const result = {};\n\n Object.keys(params)\n .forEach((name) => {\n const item = findItemWidthName(items, name);\n\n if (item) {\n result[item.name] = parseItemValueFromStored(item, params, paramsCase);\n }\n });\n\n return result;\n}\n\nfunction findItemWidthName(items, name) {\n return items\n .find((filterItem) => {\n if (filterItem instanceof RangeItem) {\n return name === getRangeName(filterItem.case, filterItem.name, 'min') ||\n name === getRangeName(filterItem.case, filterItem.name, 'max') ||\n name === filterItem.name;\n } else if (filterItem instanceof DateRangeItem || filterItem instanceof DateTimeRangeItem) {\n return name === getRangeName(filterItem.case, filterItem.name, 'from') ||\n name === getRangeName(filterItem.case, filterItem.name, 'to');\n } else if (filterItem instanceof WeekItem) {\n return name === getRangeName('camel', filterItem.name, 'from')\n || name === getRangeName('camel', filterItem.name, 'to')\n || name === `${filterItem.name}Period`;\n }\n\n return filterItem.name === name;\n });\n}\n","import { IFilterConfigAutocompleteChipsItem } from '../../../interfaces/items/autocomplete-chips.interface';\nimport { IFilterConfigAutocompleteItem } from '../../../interfaces/items/autocomplete.interface';\nimport { BaseItem } from '../base-item';\n\ntype AutoCompleteItem = IFilterConfigAutocompleteItem | IFilterConfigAutocompleteChipsItem;\n\nexport abstract class BaseAutocompleteItem<T extends AutoCompleteItem> extends BaseItem<T> {\n\n public search: string;\n\n public fetchOnFocus: boolean;\n\n public get valuesFn() {\n return this._valuesFn;\n }\n\n protected _validateModel() {\n //\n }\n\n protected _parseConfig(item: T) {\n this.fetchOnFocus = item.fetchOnFocus ?? true;\n\n super._parseConfig(item);\n }\n}\n","import { clone } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigAutocompleteChipsItem } from '../../interfaces/items/autocomplete-chips.interface';\n\nimport { BaseAutocompleteItem } from './autocomplete/base-autocomplete-item';\n\n\nexport class AutocompleteChipsItem\n extends BaseAutocompleteItem<IFilterConfigAutocompleteChipsItem> {\n\n public chipImage: string;\n public chipIcon: string;\n public chipColor: string;\n public chipIconColor: string;\n public chipBackground: string;\n public chipClass: string;\n\n public static create(config: IFilterConfigAutocompleteChipsItem, filter: FilterComponent) {\n return new AutocompleteChipsItem(config, null, filter);\n }\n\n public get value() {\n if (Array.isArray(this.model) && this.model.length === 0) {\n return undefined;\n }\n\n return clone(this.model);\n }\n\n public get queryObject(): Record<string, unknown> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n if (Array.isArray(value)) {\n params[this.name] = value\n .filter((item) => !!item.value)\n .map((item) => item.value)\n .join(',');\n } else {\n params[name] = value;\n }\n\n return params;\n }\n\n public get isChipVisible(): boolean {\n return Array.isArray(this.model) && this.model.length > 0;\n }\n\n public getChipsContent() {\n return this.model\n .reduce((acc, i) => {\n acc.push(i.name);\n\n return acc;\n }, [])\n .join(', ');\n }\n\n protected _init() {\n if (this.model === undefined) {\n this._model = [];\n }\n }\n\n protected _parseConfig(item: IFilterConfigAutocompleteChipsItem) {\n this.chipImage = item.chipImage ?? 'image';\n this.chipIcon = item.chipIcon;\n this.chipIconColor = item.chipIconColor;\n this.chipColor = item.chipColor;\n this.chipBackground = item.chipBackground;\n this.chipClass = item.chipClass;\n\n super._parseConfig(item);\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? [];\n this.search = '';\n }\n\n protected _setModel(value) {\n super._setModel(value || []);\n }\n\n}\n","\nimport { clone } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigAutocompleteItem } from '../../interfaces/items/autocomplete.interface';\n\nimport { BaseAutocompleteItem } from './autocomplete/base-autocomplete-item';\n\n\nexport class AutocompleteItem extends BaseAutocompleteItem<IFilterConfigAutocompleteItem> {\n\n public static create(config: IFilterConfigAutocompleteItem, filter: FilterComponent) {\n return new AutocompleteItem(config, null, filter);\n }\n\n public get value() {\n let value = clone(this.model);\n\n if (!this.model || this.model.value === undefined) {\n return undefined;\n }\n\n value = this.model.value;\n\n return value;\n }\n\n public get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n params[name] = value;\n\n return params;\n }\n\n public getChipsContent() {\n return this.model ? this.model.name : '';\n }\n\n protected _init() {\n //\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n this.search = '';\n }\n}\n","import { toString } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigCheckboxItem } from '../../interfaces/items/checkbox.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class CheckboxItem extends BaseItem<IFilterConfigCheckboxItem> {\n\n public checked: unknown;\n public unchecked: unknown;\n\n public static create(config: IFilterConfigCheckboxItem, filter: FilterComponent) {\n return new CheckboxItem(config, null, filter);\n }\n\n public get isTypeCheckbox(): boolean {\n return true;\n }\n\n public get isChipVisible() {\n return this.value === (this as any).checked;\n }\n\n public get value() {\n const value = this.model ? this.checked : this.unchecked;\n\n if (!value) {\n return undefined;\n }\n\n return value;\n }\n\n public get queryObject(): Record<string, unknown> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n params[name] = this.model ? value : undefined;\n\n return params;\n }\n\n public getChipsContent(type = null): string {\n return this.label as string;\n }\n\n protected _validateModel() {\n //\n }\n\n protected _parseConfig(item: IFilterConfigCheckboxItem) {\n this.checked = item.checked;\n this.unchecked = item.unchecked;\n\n this.checked = item.checked ? toString(item.checked) : true;\n this.unchecked = item.unchecked ? toString(item.unchecked) : false;\n this.defaultValue = item.default === undefined ? this.unchecked : toString(this.defaultValue);\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (this.model === undefined) {\n this._model = this.checked === this.defaultValue;\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? false;\n }\n\n}\n","import { clone } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigChipsItem } from '../../interfaces/items/chips.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class ChipsItem extends BaseItem<IFilterConfigChipsItem> {\n\n public multiple: boolean;\n\n public static create(config: IFilterConfigChipsItem, filter: FilterComponent) {\n return new ChipsItem(config, null, filter);\n }\n\n public get isTypeChips(): boolean {\n return true;\n }\n\n public get value() {\n const value = clone(this.model);\n\n if (Array.isArray(value) && value.length === 0) {\n return undefined;\n }\n\n return value;\n }\n\n public get isChipVisible(): boolean {\n return !!this.value;\n }\n\n public get queryObject(): Record<string, unknown> {\n if(!this.value) {\n return {};\n }\n\n const value = this.value\n .map((item) => item.value)\n .join(',');\n \n const name = this.name;\n\n return {\n [name]: value,\n };\n }\n\n public get persistanceObject(): Record<string, string> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n if (Array.isArray(value)) {\n params[name] = value.join(',');\n } else {\n params[name] = undefined;\n }\n\n return params;\n }\n\n public getChipsContent() {\n return this.model\n .reduce((acc, i) => {\n acc.push(i.name);\n\n return acc;\n }, [])\n .join(', ');\n }\n\n protected _validateModel() {\n //\n }\n\n protected _setModel(value) {\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (isNaN(val)) {\n return val;\n }\n\n return +val;\n\n });\n }\n\n this._model = value;\n }\n\n protected _parseConfig(item: IFilterConfigChipsItem) {\n this.multiple = item.multiple ?? true;\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!Array.isArray(this.values)) {\n this.values = [];\n }\n\n if (this.model && Array.isArray(this.model) && this.values.length) {\n if (Number.isInteger(this.model[0])) {\n this._model = this.model.map((id) => {\n return this.values.find((value) => value.value === id);\n });\n }\n }\n\n if (this.model === undefined) {\n this._model = [];\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? [];\n }\n\n}\n","export enum ItemDateMode {\n Calendar = 'calendar',\n ScrollMonthYear = 'monthyear',\n ScrollMonthDayYear = 'monthdayyear'\n}\n","import { isDate, isValid, parseISO } from 'date-fns';\nimport { clone } from 'lodash-es';\n\nimport { BaseItem } from '../base-item';\nimport { IFilterConfigDateItem } from '../../../interfaces/items/date.interface';\nimport { ItemDateMode } from '../../../enums/item-date-mode.enum';\nimport { simpleFormat } from '@firestitch/date';\n\n\nexport abstract class BaseDateItem extends BaseItem<IFilterConfigDateItem> {\n\n public maxYear: number;\n public mode: ItemDateMode\n\n public get value() {\n const value = clone(this.model);\n\n if (!value || !isValid(value) || !isDate(value)) {\n return undefined;\n }\n\n return value;\n }\n\n public get queryObject(): Record<string, Date> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n params[name] = value;\n\n return params;\n }\n\n public get persistanceObject(): Record<string, string> {\n const value = this.queryObject[this.name];\n\n return {\n [this.name]: value ? simpleFormat(value) : undefined,\n }\n }\n\n protected _validateModel() {\n }\n\n protected _setModel(value) {\n if (value) {\n if (!isDate(value) || !isValid(value)) {\n value = parseISO(value);\n }\n }\n\n super._setModel(value);\n }\n\n protected _parseConfig(item: IFilterConfigDateItem) {\n this.maxYear = item.maxYear;\n this.mode = item.mode || ItemDateMode.Calendar;\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!this.label) {\n this.label = ['Min', 'Max'];\n }\n }\n\n}\n","import { format } from '@firestitch/date';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { ItemDateMode } from '../../enums/item-date-mode.enum';\nimport { IFilterConfigDateItem } from '../../interfaces/items/date.interface';\n\nimport { BaseDateItem } from './date/base-date-item';\n\n\nexport class DateItem extends BaseDateItem {\n\n public static create(config: IFilterConfigDateItem, filter: FilterComponent) {\n return new DateItem(config, null, filter);\n }\n\n public getChipsContent(type = null): string {\n let dateFormat = 'date';\n\n if (this.mode === ItemDateMode.ScrollMonthYear) {\n dateFormat = 'full-date-dayless';\n }\n\n return format(this.model, dateFormat);\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n","import type { FilterComponent } from '../../components/filter/filter.component';\nimport {\n IFilterConfigDateItem,\n} from '../../interfaces/items/date.interface';\n\nimport { BaseDateItem } from './date/base-date-item';\n\n\nexport class DateTimeItem extends BaseDateItem {\n\n public static create(config: IFilterConfigDateItem, filter: FilterComponent) {\n return new DateTimeItem(config, null, filter);\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n","export function findValue(values, value, children) {\n for (let i = 0; i < values.length; i++) {\n const val = values[i];\n\n if (val[children]) {\n return findValue(val[children], value, children);\n }\n\n if (val.value === value) {\n return val;\n }\n }\n\n return undefined;\n}\n","import type { FilterComponent } from '../../../components/filter/filter.component';\nimport { findValue } from '../../../helpers/find-value';\nimport { IFilterConfigSelectItem } from '../../../interfaces/items/select.interface';\n\nimport { BaseSelectItem } from './base-select-item';\n\n\nexport class SimpleSelectItem extends BaseSelectItem {\n\n constructor(\n itemConfig: IFilterConfigSelectItem,\n _persistedValues: any,\n _filter: FilterComponent,\n ) {\n super(itemConfig, _persistedValues, _filter);\n }\n\n public get value() {\n let value = this.model;\n\n if (value === '__all' || value === undefined) {\n value = undefined;\n }\n\n return value;\n }\n\n public getChipsContent(type = null): string {\n if (this.children) {\n const itemValue = findValue(this.values, this.model, this.children);\n\n return itemValue && itemValue.name;\n }\n const itemValue = this.values.find((val) => val.value === this.model);\n\n if (itemValue) {\n return itemValue.name;\n } else if (this.isolate) {\n return this.isolate.label;\n }\n\n }\n\n public get isChipVisible(): boolean {\n return this.model !== '__all' && this.model !== undefined;\n }\n\n protected _init() {\n super._init();\n\n if (this.model === undefined && this.defaultValue === undefined) {\n this._model = '__all';\n }\n }\n\n protected get isolateOptionNotSelected() {\n const modelValue = this.model;\n const isolate = this.isolate;\n\n return isolate && !isolate.enabled && modelValue?.length === 0;\n }\n\n protected _setModel(value): void {\n if (value) {\n if (!isNaN(value)) {\n value = +value;\n }\n }\n\n super._setModel(value);\n }\n\n protected _validateModel() {\n const item = this.values.find((value) => {\n return value.value == this.model;\n });\n\n const value = item ? item.value : '__all';\n\n if (this._model !== value) {\n this.model = value;\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n super._clearValue(defaultValue);\n\n const value = Array.isArray(this.values) && this.values.some((val) => val.value === '__all')\n ? '__all'\n : undefined;\n\n this.model = defaultValue ?? value;\n }\n}\n","\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { ItemType } from '../../enums/item-type.enum';\n\nimport { MultipleSelectItem } from './select/multiple-select-item';\nimport { SimpleSelectItem } from './select/simple-select-item';\n\n\nexport class SelectItem {\n\n public readonly type: ItemType.Select;\n\n public static create(config, filter: FilterComponent): SimpleSelectItem | MultipleSelectItem {\n if (config.multiple) {\n return new MultipleSelectItem(config, null, filter);\n }\n\n return new SimpleSelectItem(config, null, filter);\n\n }\n}\n","\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport {\n IFilterConfigTextItem,\n} from '../../interfaces/items/text.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class TextItem extends BaseItem<IFilterConfigTextItem> {\n\n public prefix: string;\n public suffix: string;\n\n public static create(config: IFilterConfigTextItem, filter: FilterComponent) {\n return new TextItem(config, null, filter);\n }\n\n public get value() {\n return !!this.model ? this.model : undefined;\n }\n\n public get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n params[name] = value;\n\n return params;\n }\n\n public getChipsContent() {\n return this.model;\n }\n\n protected _validateModel() {\n //\n }\n\n protected _parseConfig(item: IFilterConfigTextItem) {\n this.prefix = item.prefix;\n this.suffix = item.suffix;\n\n super._parseConfig(item);\n }\n\n protected _init() {\n //\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? '';\n }\n}\n","import type { FilterComponent } from '../components/filter/filter.component';\nimport { ItemType } from '../enums/item-type.enum';\nimport { IFilterConfigItem } from '../interfaces/config.interface';\nimport { IFilterConfigAutocompleteChipsItem } from '../interfaces/items/autocomplete-chips.interface';\nimport { IFilterConfigAutocompleteItem } from '../interfaces/items/autocomplete.interface';\nimport { IFilterConfigCheckboxItem } from '../interfaces/items/checkbox.interface';\nimport { IFilterConfigChipsItem } from '../interfaces/items/chips.interface';\nimport { IFilterConfigDateRangeItem } from '../interfaces/items/date-range.interface';\nimport { IFilterConfigDateItem } from '../interfaces/items/date.interface';\nimport { IFilterConfigRangeItem } from '../interfaces/items/range.interface';\nimport { IFilterConfigTextItem } from '../interfaces/items/text.interface';\nimport { IFilterConfigWeekItem } from '../interfaces/items/week.interface';\nimport { AutocompleteChipsItem } from '../models/items/autocomplete-chips-item';\nimport { AutocompleteItem } from '../models/items/autocomplete-item';\nimport { CheckboxItem } from '../models/items/checkbox-item';\nimport { ChipsItem } from '../models/items/chips-item';\nimport { DateItem } from '../models/items/date-item';\nimport { DateRangeItem } from '../models/items/date-range-item';\nimport { DateTimeItem } from '../models/items/date-time-item';\nimport { DateTimeRangeItem } from '../models/items/date-time-range-item';\nimport { RangeItem } from '../models/items/range-item';\nimport { SelectItem } from '../models/items/select-item';\nimport { TextItem } from '../models/items/text-item';\nimport { WeekItem } from '../models/items/week-item';\n\n\nexport function createFilterItem(item: IFilterConfigItem, config: any, filter: FilterComponent) {\n switch (item.type) {\n case ItemType.Select: {\n return SelectItem.create(item, filter);\n }\n\n case ItemType.Chips: {\n return ChipsItem.create(item as IFilterConfigChipsItem, filter);\n }\n\n case ItemType.Range: {\n return RangeItem.create(item as IFilterConfigRangeItem, config, filter);\n }\n\n case ItemType.DateRange: {\n return DateRangeItem.create(item as IFilterConfigDateRangeItem, filter);\n }\n\n case ItemType.DateTimeRange: {\n return DateTimeRangeItem.create(item as IFilterConfigDateRangeItem, filter);\n }\n\n case ItemType.Date: {\n return DateItem.create(item as IFilterConfigDateItem, filter);\n }\n\n case ItemType.Week: {\n return WeekItem.create(item as IFilterConfigWeekItem, filter);\n }\n\n case ItemType.DateTime: {\n return DateTimeItem.create(item as IFilterConfigDateItem, filter);\n }\n\n case ItemType.AutoComplete: {\n return AutocompleteItem.create(item as IFilterConfigAutocompleteItem, filter);\n }\n\n case ItemType.AutoCompleteChips: {\n return AutocompleteChipsItem.create(item as IFilterConfigAutocompleteChipsItem, filter);\n }\n\n case ItemType.Checkbox: {\n return CheckboxItem.create(item as IFilterConfigCheckboxItem, filter);\n }\n\n case ItemType.Keyword: case ItemType.Text: {\n return TextItem.create(item as IFilterConfigTextItem, filter);\n }\n }\n}\n","export enum ActionMode {\n Button = 'button',\n SelectButton = 'selectButton',\n Menu = 'menu',\n File = 'file',\n}\n","export enum ButtonStyle {\n Basic = 'basic',\n Raised = 'raised',\n Icon = 'icon',\n Fab = 'fab',\n MiniFab = 'mini-fab',\n Flat = 'flat',\n Stroked = 'stroked',\n}\n","import { ButtonStyle } from './button-style';\n\nexport enum ActionType {\n Basic = ButtonStyle.Basic,\n Raised = ButtonStyle.Raised,\n Icon = ButtonStyle.Icon,\n Fab = ButtonStyle.Fab,\n MiniFab = ButtonStyle.MiniFab,\n Flat = ButtonStyle.Flat,\n Stroked = ButtonStyle.Stroked, \n}\n","export enum PickerViewType {\n Date = \"date\",\n DateTime = \"datetime\",\n Time = \"time\",\n Week = \"week\",\n MonthRange = \"monthrange\"\n}\n","import { ButtonStyle } from '../enums';\nimport { FsFilterAction } from '../interfaces/action.interface';\nimport { ChangeFn, FilterSort, FsFilterAutoReload, Sort } from '../interfaces/config.interface';\nimport { IFilterSavedFiltersConfig } from '../interfaces/saved-filters.interface';\n\nimport {\n FilterButton,\n FilterConfig,\n FsFilterPersistance,\n IFilterConfigItem,\n} from './../interfaces/config.interface';\n\nexport const SORT_BY_FIELD = 'sortName';\nexport const SORT_DIRECTION_FIELD = 'sortDirection';\n\n\nexport class FsFilterConfig {\n\n public load = true;\n public persist: FsFilterPersistance = false;\n public savedFilters: IFilterSavedFiltersConfig;\n public inline = false;\n public autofocus = false;\n public chips = false;\n public sortValues: any[] = null;\n public sort: Sort = null;\n // public sortDirection = null;\n public queryParam = false;\n public init: (query?: any, sort?: FilterSort | null, filter?) => void;\n public change: ChangeFn;\n public reload: ChangeFn;\n public autoReload: FsFilterAutoReload;\n public clear: ChangeFn;\n public sortChange: ChangeFn;\n public case: 'snake' | 'camel' = 'camel';\n public reloadWhenConfigChanged: boolean;\n public button: FilterButton;\n public items: IFilterConfigItem[];\n public actions: FsFilterAction[];\n\n public namespace: string; // for persistance\n\n constructor(data: FilterConfig = {}) {\n this._init(data);\n }\n\n private _init(data: FilterConfig = {}) {\n this.load = data.load ?? true;\n this.persist = data.persist;\n this.savedFilters = data.savedFilters;\n this.inline = data.inline ?? false;\n this.autofocus = data.autofocus ?? false;\n this.chips = data.chips ?? false;\n this.sortValues = data.sorts;\n this.sort = data.sort;\n this.queryParam = data.queryParam ?? false;\n this.init = data.init;\n this.change = data.change;\n this.reload = data.reload;\n this.autoReload = data.autoReload;\n this.clear = data.clear;\n this.sortChange = data.sortChange;\n this.case = data.case ?? 'camel';\n this.reloadWhenConfigChanged = data.reloadWhenConfigChanged;\n this.button = data.button;\n this.items = data.items;\n this.actions = data.actions;\n this.case = data.case ?? 'camel';\n\n if (this.persist) {\n if (typeof this.persist === 'object') {\n if (this.persist.name) {\n this.namespace = this.persist.name;\n }\n }\n }\n\n if (!this.button) {\n this.button = {};\n }\n\n if (this.button.label === undefined) {\n this.button.label = 'Filters';\n }\n\n if (this.button.icon === undefined) {\n this.button.icon = 'tune';\n }\n\n if (this.button.style === undefined) {\n this.button.style = ButtonStyle.Raised;\n }\n\n if (this.button.color === undefined) {\n this.button.color = 'default';\n }\n\n if (this.clear === undefined) {\n this.clear = () => { };\n }\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, forkJoin, Observable, Subject } from 'rxjs';\nimport { debounceTime, filter, finalize, takeUntil } from 'rxjs/operators';\n\nimport { pickBy } from 'lodash-es';\n\nimport type { FilterComponent } from '../components/filter/filter.component';\nimport { ItemType } from '../enums/item-type.enum';\nimport { createFilterItem } from '../helpers/create-filter-item';\nimport {\n FilterSort,\n IFilterConfigItem,\n SortItem,\n} from '../interfaces/config.interface';\nimport { IFilterExternalParams } from '../interfaces/external-params.interface';\nimport { ISortingChangeEvent } from '../interfaces/filter.interface';\nimport { IFilterConfigSelectItem } from '../interfaces/items/select.interface';\nimport { FsFilterConfig, SORT_BY_FIELD, SORT_DIRECTION_FIELD } from '../models/filter-config';\nimport { BaseItem } from '../models/items/base-item';\nimport { BaseDateRangeItem } from '../models/items/date-range/base-date-range-item';\nimport { RangeItem } from '../models/items/range-item';\nimport { MultipleSelectItem } from '../models/items/select/multiple-select-item';\nimport { SimpleSelectItem } from '../models/items/select/simple-select-item';\nimport { TextItem } from '../models/items/text-item';\n\n\ninterface IValueAsQuery {\n onlyPresented?: boolean;\n items?: BaseItem<IFilterConfigItem>[];\n persisted?: boolean;\n}\n\n@Injectable()\nexport class FsFilterItemsStore implements OnDestroy {\n\n public sortByItem: BaseItem<IFilterConfigItem> = null;\n public sortDirectionItem: BaseItem<IFilterConfigItem> = null;\n public keywordItem: TextItem = null;\n public filter: FilterComponent;\n\n private _ready$ = new BehaviorSubject(false);\n private _items: BaseItem<IFilterConfigItem>[] = [];\n private _visibleItems$ = new BehaviorSubject<BaseItem<IFilterConfigItem>[]>([]);\n private _itemsByName = new Map<string, BaseItem<IFilterConfigItem>>();\n\n private _itemsValuesLoaded = false;\n private _hasKeyword = false;\n private _config: FsFilterConfig;\n\n private _itemsChange$ = new Subject();\n private _destroy$ = new Subject<void>();\n\n constructor(\n ) {\n this._lazyInit();\n }\n\n public get items(): BaseItem<IFilterConfigItem>[] {\n return this._items;\n }\n\n public get itemNames(): string[] {\n return this._items.map((item) => item.name);\n }\n\n public get visibleItems(): BaseItem<IFilterConfigItem>[] {\n return this._visibleItems$.getValue();\n }\n\n public set visibleItems(items: BaseItem<IFilterConfigItem>[]) {\n this._visibleItems$.next(items);\n }\n\n public get visibleItems$(): Observable<BaseItem<IFilterConfigItem>[]> {\n return this._visibleItems$.asObservable();\n }\n\n public get hasKeyword(): boolean {\n return this._hasKeyword;\n }\n\n public get itemsChange$() {\n return this._itemsChange$.pipe(debounceTime(30));\n }\n\n public get ready$() {\n return this._ready$.asObservable();\n }\n\n public ngOnDestroy() {\n this.destroyItems();\n\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public setConfig(config) {\n this._itemsByName.clear();\n this._config = config;\n this.initItems(config.items);\n }\n\n public getItemByName(name: string): BaseItem<IFilterConfigItem> {\n return this._itemsByName.get(name);\n }\n\n public initItems(items: IFilterConfigItem[]) {\n this._itemsValuesLoaded = false;\n if (Array.isArray(items)) {\n this._createItems(items);\n }\n }\n\n public filtersClear() {\n this.items.forEach((item) => {\n if (item instanceof RangeItem) {\n item.clearRange(null, item.defaultValue);\n } else if (item instanceof BaseDateRangeItem) {\n item.clearDateRange(null, item.defaultValue);\n } else {\n item.clear(item.defaultValue);\n }\n });\n\n if (this.sortByItem) {\n if (this._config.sort) {\n this.sortByItem.model = this._config.sort.value;\n } else {\n this.sortByItem.clear(this.sortByItem.defaultValue);\n }\n }\n\n if (this.sortDirectionItem) {\n if (this._config.sort) {\n this.sortDirectionItem.model = this._config.sort.direction;\n } else {\n this.sortDirectionItem.clear(this.sortDirectionItem.defaultValue);\n }\n }\n\n this.keywordItem?.clear();\n }\n\n public loadAsyncValues() {\n this.items\n .filter((item) => item.hasPendingValues)\n .forEach((item) => item.loadAsyncValues());\n }\n\n public loadAsyncDefaults(): void {\n // default values can be asynchronous, and we must load them if there is no persisted value instead\n const defaultValuesToBeLoaded = this.items\n .filter((item) => {\n return item.defaultValueFn\n && (item.persistedValue === null || item.persistedValue === undefined);\n });\n\n // special hack for isolate multiple select\n // values for this type of select must be preloaded\n // Read more in class MultipleSelectItem._init()\n const valuesToBeLoaded = this.items\n .filter((item) => {\n return (item instanceof MultipleSelectItem) && item.hasPendingValues && item.isolate;\n });\n\n if (defaultValuesToBeLoaded.length > 0 || valuesToBeLoaded.length > 0) {\n forkJoin(\n [\n ...defaultValuesToBeLoaded\n .map((item) => item.loadDefaultValue()),\n\n ...valuesToBeLoaded\n .map((item) => {\n item.loadAsyncValues();\n\n return item.loading$\n .pipe();\n }),\n ],\n )\n .pipe(\n finalize(() => {\n this._ready$.next(true);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n } else {\n this._ready$.next(true);\n }\n }\n\n public getSort(): FilterSort {\n let sortBy = this.getSortByValue();\n sortBy = sortBy === '__all' ? null : sortBy;\n\n let sortDirection = this.getSortDirectionValue();\n sortDirection = sortDirection === '__all' ? null : sortDirection;\n\n return {\n value: sortBy,\n direction: sortDirection,\n };\n }\n\n public getSortByValue() {\n return this.sortByItem ? this.sortByItem.model : null;\n }\n\n public getSortDirectionValue() {\n return this.sortDirectionItem ? this.sortDirectionItem.model : null;\n }\n\n public updateSort(sort: ISortingChangeEvent) {\n if (sort.sortBy) {\n this.sortByItem.model = sort.sortBy;\n }\n\n if (sort.sortDirection) {\n this.sortDirectionItem.model = sort.sortDirection;\n }\n }\n\n public values(onlyPresented = false): Record<string, unknown> {\n return this.items\n .reduce((acc, item) => {\n const value = item.value;\n\n if (!onlyPresented || value !== null) {\n acc[item.name] = value;\n }\n\n return acc;\n }, {});\n }\n\n public valuesAsQuery({\n onlyPresented = true,\n items = null,\n persisted = false,\n }: IValueAsQuery = {}): Record<string, unknown> {\n const params = {};\n\n (items || this.items)\n .forEach((filterItem: BaseItem<any>) => {\n const values = persisted\n ? filterItem.persistanceObject\n : filterItem.queryObject;\n\n Object.assign(params, values);\n });\n\n if (onlyPresented) {\n return pickBy(params, (val) => {\n return val !== void 0;\n });\n }\n\n return params;\n }\n\n public init(p: IFilterExternalParams) {\n this.items\n .forEach((item) => {\n item.initValues(p[item.name]);\n });\n\n this._initSortingItems(p);\n this.loadAsyncDefaults();\n this._subscribeToItemsChanges();\n }\n\n public updateItemsWithValues(values: IFilterExternalParams) {\n this.items\n .forEach((item) => {\n if (values[item.name]) {\n item.model = values[item.name];\n } else {\n if (item instanceof RangeItem) {\n item.clearRange(null, item.defaultValue);\n } else if (item instanceof BaseDateRangeItem) {\n item.clearDateRange(null, item.defaultValue);\n } else {\n item.clear();\n }\n }\n });\n\n if (this.sortByItem) {\n this.sortByItem.clear();\n }\n if (this.sortDirectionItem) {\n this.sortDirectionItem.clear();\n }\n }\n\n public updateSortingItemsValues(items: SortItem[]) {\n this.sortByItem.values = items;\n }\n\n public destroyItems() {\n this.items\n .forEach((item) => item.destroy());\n this.sortByItem?.destroy();\n this.sortDirectionItem?.destroy();\n\n this._items = [];\n this.sortByItem = null;\n this.sortDirectionItem = null;\n }\n\n /**\n * Some items might need to load async values before they will be shown\n */\n public prepareItems() {\n if (!this._itemsValuesLoaded) {\n this._itemsValuesLoaded = true;\n\n this.loadAsyncValues();\n }\n }\n\n public updateItemsVisiblity(): void {\n this.visibleItems = this.items\n .filter((item) => !item.isTypeKeyword && !item.hide);\n }\n\n private _createItems(items: IFilterConfigItem[]) {\n this._items = items\n .filter((item) => !item.disable)\n .filter((item) => {\n if (this._itemsByName.has(item.name)) {\n throw Error('Filter init error. Items name must be unique.');\n } else {\n this._itemsByName.set(item.name, null);\n\n return true;\n }\n })\n .map((item) => {\n const filterItem = createFilterItem(item, { case: this._config.case }, this.filter);\n\n if (filterItem.type === ItemType.Keyword) {\n this._hasKeyword = true;\n }\n\n this._itemsByName.set(item.name, filterItem);\n\n return filterItem;\n });\n\n this._createSortingItems();\n }\n\n private _subscribeToItemsChanges() {\n this.items\n .forEach((item) => {\n item.valueChange$\n .pipe(\n takeUntil(item.destroy$),\n )\n .subscribe(() => {\n this._itemsChange$.next(item);\n });\n });\n\n if (this._config.sortValues?.length) {\n this.sortByItem.valueChange$\n .pipe(\n takeUntil(this.sortByItem.destroy$),\n )\n .subscribe(() => {\n this._itemsChange$.next(this.sortByItem);\n });\n\n this.sortDirectionItem.valueChange$\n .pipe(\n takeUntil(this.sortDirectionItem.destroy$),\n )\n .subscribe(() => {\n this._itemsChange$.next(this.sortDirectionItem);\n });\n }\n }\n\n private _lazyInit(): void {\n this.ready$\n .pipe(\n filter((state) => state),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.updateItemsVisiblity();\n this._setKeywordItem();\n });\n }\n\n private _initSortingItems(p: IFilterExternalParams): void {\n if (this.sortByItem && this.sortDirectionItem) {\n this.sortByItem.initValues(p[this.sortByItem.name]);\n this.sortDirectionItem.initValues(p[this.sortDirectionItem.name]);\n }\n }\n\n private _createSortingItems(): void {\n if (this._config.sortValues?.length > 0) {\n const sortByItem = {\n name: SORT_BY_FIELD,\n type: ItemType.Select,\n label: 'Sort by',\n values: this._config.sortValues,\n } as IFilterConfigSelectItem;\n\n\n if (this._config.sort && this._config.sort.value) {\n sortByItem.default = this._config.sort.value;\n }\n\n this.sortByItem = new SimpleSelectItem(\n sortByItem,\n null,\n this.filter,\n );\n\n const sortDirectionItem = {\n name: SORT_DIRECTION_FIELD,\n type: ItemType.Select,\n label: 'Sort direction',\n values: [\n { name: 'Ascending', value: 'asc' },\n { name: 'Descending', value: 'desc' },\n ],\n } as IFilterConfigSelectItem;\n\n if (this._config.sort && this._config.sort.direction) {\n sortDirectionItem.default = this._config.sort.direction;\n }\n\n this.sortDirectionItem = new SimpleSelectItem(\n sortDirectionItem,\n null,\n this.filter,\n );\n }\n }\n\n private _setKeywordItem() {\n this.keywordItem = this\n .items\n .find((item) => item.isTypeKeyword) as TextItem;\n }\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { DrawerRef } from '@firestitch/drawer';\nimport { FsPersistanceStore } from '@firestitch/store';\nimport { getNormalizedPath } from '@firestitch/common';\nimport { FsStore } from '@firestitch/store';\n\nimport { FsFilterPersistance } from '../../interfaces/config.interface';\nimport { restoreItems } from '../../helpers/restore-items';\nimport { FsFilterItemsStore } from '../items-store.service';\n\nconst FILTER_STORE_KEY = 'fs-filter-persist';\n\n\n@Injectable()\nexport class PersistanceParamsController extends FsPersistanceStore<FsFilterPersistance> {\n\n protected STORE_KEY = FILTER_STORE_KEY;\n protected _paramsCase: 'snake' | 'camel';\n\n constructor(\n _store: FsStore,\n _route: ActivatedRoute,\n private _location: Location,\n private _itemsStore: FsFilterItemsStore,\n @Optional() private _dialogRef: MatDialogRef<unknown>,\n @Optional() private _drawerRef: DrawerRef<unknown>,\n ) {\n super(_store, _route);\n }\n\n public init(\n persistanceConfig: FsFilterPersistance,\n namespace: string,\n paramsCase: 'snake' | 'camel',\n ): void {\n this._paramsCase = paramsCase;\n\n namespace = namespace ?? getNormalizedPath(this._location);\n const persistanceDisabled = !!this._dialogRef || !!this._drawerRef;\n\n this.setConfig(persistanceConfig, namespace, persistanceDisabled);\n }\n\n public restore(): void {\n if (!this.enabled) {\n return;\n }\n\n super.restore();\n\n const items = [\n ...this._itemsStore.items,\n this._itemsStore.sortByItem,\n this._itemsStore.sortDirectionItem,\n ].filter((item) => !!item);\n\n if (this._value) {\n this._value.data = restoreItems(\n this._value.data,\n items,\n this._paramsCase\n );\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { restoreItems } from '../../helpers/restore-items';\nimport { FsFilterItemsStore } from '../items-store.service';\n\n\n@Injectable()\nexport class QueryParamsController {\n\n private _enabled = false;\n private _paramsCase: 'snake' | 'camel';\n private _fetchedParams: Record<string, any>;\n\n constructor(\n private _route: ActivatedRoute,\n private _itemsStore: FsFilterItemsStore\n ) {}\n\n public get enabled(): boolean {\n return this._enabled;\n }\n\n public get fetchedParams() {\n return this._fetchedParams;\n }\n\n public init(enabled: boolean, paramsCase: 'snake' | 'camel') {\n this._enabled = enabled;\n this._paramsCase = paramsCase;\n\n if (this.enabled) {\n this.fetchFromQueryParams();\n }\n }\n\n public writeStateToQueryParams(params) {\n if (this._enabled) { \n this._replaceState(params);\n }\n }\n\n /**\n * Parse query and update filter values\n */\n public fetchFromQueryParams() {\n const items = [\n ...this._itemsStore.items,\n this._itemsStore.sortByItem,\n this._itemsStore.sortDirectionItem,\n ].filter((item) => !!item);\n\n this._fetchedParams = restoreItems(\n this._route.snapshot.queryParams,\n items,\n this._paramsCase\n );\n }\n\n private _replaceState(data) {\n const url = new URL(window.location.href);\n\n Object.keys(data)\n .forEach((name) => {\n if(data[name] === undefined || data[name] === null) {\n url.searchParams.delete(name);\n } else {\n url.searchParams.set(name,data[name]);\n }\n });\n\n history.replaceState({}, null, url.pathname + url.search);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\n\nimport { IFilterExternalParams } from '../../../interfaces/external-params.interface';\nimport {\n FilterRemoteSave,\n IFilterSavedFilter,\n} from '../../../interfaces/saved-filters.interface';\n\n\n@Component({\n templateUrl: './saved-filter-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterSavedFilterEditComponent {\n\n public filterParams: IFilterExternalParams;\n public saveAsFilter: IFilterSavedFilter | 'new' = 'new';\n public savedFilters: IFilterSavedFilter[];\n public savedFilterName = '';\n\n private _saveCallback: FilterRemoteSave;\n private _destroy$ = new Subject<void>();\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data,\n private _dialogRef: MatDialogRef<FsFilterSavedFilterEditComponent>,\n ) {\n this.savedFilters = this.data.savedFilters;\n this._saveCallback = this.data.saveCallback;\n }\n\n public save = () => {\n const savedFilter: IFilterSavedFilter = this.saveAsFilter === 'new' ? \n {\n name: this.savedFilterName,\n active: true,\n filters: this.data.params,\n } : {\n ...this.saveAsFilter,\n filters: this.data.params,\n };\n\n return this._saveCallback(savedFilter)\n .pipe(\n tap((filter) => {\n this._dialogRef.close(filter);\n }),\n takeUntil(this._destroy$),\n );\n };\n\n}\n","<form fsForm [submit]=\"save\">\n <h1 mat-dialog-title>\n Save filter\n </h1>\n <div mat-dialog-content>\n <mat-form-field>\n <mat-label>Save as</mat-label>\n <mat-select [(ngModel)]=\"saveAsFilter\" name=\"saveAs\">\n <mat-option value=\"new\">New filter</mat-option>\n <ng-container *ngIf=\"savedFilters.length\">\n <mat-optgroup label=\"Saved filters\">\n <ng-container *ngFor=\"let filter of savedFilters\">\n <mat-option [value]=\"filter\">{{ filter.name }}</mat-option>\n </ng-container>\n </mat-optgroup>\n </ng-container>\n </mat-select>\n </mat-form-field>\n <br>\n <mat-form-field *ngIf=\"saveAsFilter === 'new'\">\n <mat-label>Name</mat-label>\n <input matInput name=\"filter-name\" [(ngModel)]=\"savedFilterName\" required>\n </mat-form-field>\n </div>\n <div mat-dialog-actions>\n <button \n mat-button\n type=\"submit\"\n color=\"primary\">\n {{ saveAsFilter === 'new' ? 'Create' : 'Save' }}\n </button>\n\n <button \n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </div>\n</form>\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport {\n distinctUntilChanged,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nimport {\n FsFilterSavedFilterEditComponent,\n} from '../../components/saved-filter/saved-filter-edit/saved-filter-edit.component';\nimport { buildQueryParams } from '../../helpers/build-query-params';\nimport { restoreItems } from '../../helpers/restore-items';\nimport { IFilterExternalParams } from '../../interfaces/external-params.interface';\nimport {\n IFilterSavedFilter,\n IFilterSavedFiltersConfig,\n} from '../../interfaces/saved-filters.interface';\nimport { FsFilterItemsStore } from '../items-store.service';\n\n\n@Injectable()\nexport class SavedFiltersController implements OnDestroy {\n\n protected _config: IFilterSavedFiltersConfig;\n\n private _savedFilters$ = new BehaviorSubject<IFilterSavedFilter[]>([]);\n private _activeFilter$ = new BehaviorSubject<IFilterSavedFilter>(null);\n private _enabled$ = new BehaviorSubject<boolean>(false);\n private _paramsCase: 'snake' | 'camel';\n private _destroy$ = new Subject<void>();\n\n constructor(\n private _itemsStore: FsFilterItemsStore,\n private _dialog: MatDialog,\n ) {}\n\n public get enabled(): boolean {\n return this._enabled$.getValue();\n }\n\n public get enabled$(): Observable<boolean> {\n return this._enabled$\n .pipe(\n distinctUntilChanged(),\n );\n }\n\n public get savedFilters(): IFilterSavedFilter[] {\n return this._savedFilters$.getValue();\n }\n\n public set savedFilters(filters: IFilterSavedFilter[]) {\n this._savedFilters$.next(filters);\n }\n\n public get savedFilters$(): Observable<IFilterSavedFilter[]> {\n return this._savedFilters$\n .pipe(\n distinctUntilChanged(),\n );\n }\n\n public get activeFilter(): IFilterSavedFilter {\n return this._activeFilter$.getValue();\n }\n\n public get activeFilter$(): Observable<IFilterSavedFilter> {\n return this._activeFilter$\n .pipe(\n distinctUntilChanged(),\n );\n }\n\n public get activeFilterData(): IFilterExternalParams {\n return this._activeFilter$.getValue()?.filters;\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public init(\n remoteParamsConfig: IFilterSavedFiltersConfig,\n paramsCase: 'snake' | 'camel',\n ): void {\n if (!remoteParamsConfig) {\n this._setEnabledStatus(false);\n\n return;\n }\n this._setEnabledStatus(true);\n\n this._paramsCase = paramsCase;\n this._config = remoteParamsConfig;\n }\n\n public initSavedFilters(filters: IFilterSavedFilter[]): void {\n filters = [...filters];\n filters.forEach((savedFilter) => {\n savedFilter.filters = restoreItems(\n savedFilter.filters,\n this._itemsStore.items,\n this._paramsCase,\n );\n });\n\n this.savedFilters = filters;\n }\n\n public load(): Observable<IFilterSavedFilter[]> {\n return this._config.load()\n .pipe(\n tap((response) => {\n this.initSavedFilters(response);\n }),\n );\n }\n\n public save(savedFilter: IFilterSavedFilter): Observable<IFilterSavedFilter> {\n return this._config.save(savedFilter);\n }\n\n public order(savedFilters: IFilterSavedFilter[]): Observable<IFilterSavedFilter[]> {\n return this._config.order(savedFilters)\n .pipe(\n tap(() => {\n this.savedFilters = [\n ...savedFilters,\n ];\n }),\n );\n }\n\n public delete(savedFilter: IFilterSavedFilter): Observable<IFilterSavedFilter> {\n return this._config.delete(savedFilter)\n .pipe(\n tap(() => {\n this.savedFilters = this.savedFilters\n .filter((f) => f.id !== savedFilter.id);\n }),\n );\n }\n\n public setActiveFilter(savedFilter: IFilterSavedFilter): void {\n if (savedFilter) {\n const existingFilter = this.savedFilters\n .find((f) => f.id === savedFilter.id);\n\n if (!existingFilter) {\n throw new Error(`Saved filter cannot be activated, because it does not exists. Filter ID = ${savedFilter.id}`);\n }\n\n this._activeFilter$.next(existingFilter);\n } else {\n this._activeFilter$.next(null);\n }\n }\n\n public openSavedFilterEditDialog(): void {\n const params = buildQueryParams(\n this._itemsStore.valuesAsQuery(),\n this._itemsStore.items,\n );\n\n const dialogConfig = {\n data: {\n params: params,\n savedFilters: this.savedFilters,\n saveCallback: this.save.bind(this),\n },\n };\n\n this._dialog\n .open(FsFilterSavedFilterEditComponent, dialogConfig)\n .beforeClosed()\n .pipe(\n take(1),\n takeUntil(this._destroy$),\n )\n .subscribe((updatedFilter: IFilterSavedFilter | null) => {\n if (updatedFilter) {\n // get already saved related filter object\n const savedFilter = this.savedFilters\n .find((f) => f.id === updatedFilter.id);\n\n // restore values from query string\n updatedFilter.filters = restoreItems(\n updatedFilter.filters,\n this._itemsStore.items,\n this._paramsCase,\n );\n\n\n if (savedFilter) {\n Object.assign(savedFilter, updatedFilter);\n } else {\n this.resetActiveFilter();\n this.savedFilters = [\n ...this.savedFilters,\n updatedFilter,\n ];\n }\n\n this.updateActiveFilter();\n }\n });\n }\n\n public updateActiveFilter(): void {\n // Lookup active filter\n const acitveFilter = this.savedFilters\n .find((f) => f.active);\n\n if (acitveFilter) {\n this.setActiveFilter(acitveFilter);\n }\n }\n\n public resetActiveFilter(): void {\n // Reset all previously activated filters\n this.savedFilters.forEach((savedFilter) => {\n savedFilter.active = false;\n });\n\n this.setActiveFilter(null);\n }\n\n private _setEnabledStatus(value: boolean): void {\n this._enabled$.next(value);\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\nimport { filter, switchMap, take, takeUntil } from 'rxjs/operators';\n\nimport { buildQueryParams } from '../helpers/build-query-params';\nimport { IFilterExternalParams } from '../interfaces/external-params.interface';\nimport { IFilterSavedFilter } from '../interfaces/saved-filters.interface';\nimport { FsFilterConfig } from '../models/filter-config';\n\nimport { PersistanceParamsController } from './external-params/persistance-params-controller.service';\nimport { QueryParamsController } from './external-params/query-params-controller.service';\nimport { SavedFiltersController } from './external-params/saved-filters-controller.service';\nimport { FsFilterItemsStore } from './items-store.service';\n\n\n@Injectable()\nexport class ExternalParamsController implements OnDestroy {\n\n protected _init;\n\n private _pending$ = new BehaviorSubject(false);\n private _shouldResetSavedFilters = true;\n private _config: FsFilterConfig;\n private _destroy$ = new Subject<void>();\n\n constructor(\n private _itemsStore: FsFilterItemsStore,\n private _persistanceStore: PersistanceParamsController,\n private _queryParams: QueryParamsController,\n private _savedFilters: SavedFiltersController,\n ) { }\n\n public get params(): IFilterExternalParams {\n let result: IFilterExternalParams = {};\n\n if (this._persistanceStore.enabled) {\n result = {\n ...result, \n ...this._persistanceStore.value?.data,\n };\n }\n\n if (this._savedFilters.enabled && this._savedFilters.activeFilter) {\n const query = Object.keys(result)\n .filter((key) => !this._itemsStore.itemNames.includes(key))\n .reduce((acc, key) => {\n return {\n ...acc,\n [key]: result[key],\n };\n }, {});\n\n result = {\n ...query, \n ...this._savedFilters.activeFilterData,\n };\n } else if (this._queryParams.enabled) {\n result = {\n ...result, \n ...this._queryParams.fetchedParams,\n };\n }\n\n return result;\n }\n\n public get pending(): boolean {\n return this._pending$.getValue();\n }\n\n public get pending$(): Observable<boolean> {\n return this._pending$.asObservable();\n }\n\n public get savedFiltersController(): SavedFiltersController {\n return this._savedFilters;\n }\n\n public get savedFiltersEnabled(): boolean {\n return this._savedFilters.enabled;\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public setConfig(config) {\n this._config = config;\n\n this._initPersistance();\n this._initQueryParams();\n this._initSavedFilters();\n this.initItems();\n }\n\n public setActiveSavedFilter(savedFilter: IFilterSavedFilter) {\n this.savedFiltersController.setActiveFilter(savedFilter);\n\n if (savedFilter) {\n this.reloadFiltersWithValues(savedFilter.filters, false);\n }\n }\n\n public reloadFiltersWithValues(params: IFilterExternalParams, shouldResetSavedFilters = true) {\n this._shouldResetSavedFilters = shouldResetSavedFilters;\n this._itemsStore.updateItemsWithValues(params);\n\n this._saveQueryParams();\n this._savePersistedParams();\n }\n\n public initItems(): void {\n this._pending$.next(true);\n if (this._savedFilters.enabled) {\n this._savedFilters\n .load()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._savedFilters.updateActiveFilter();\n this._initItemsValues();\n this._listenAndResetSavedFilters();\n this._pending$.next(false);\n });\n } else {\n this._initItemsValues();\n this._pending$.next(false);\n }\n\n this._listenItemsChange();\n }\n\n public _initItemsValues() {\n this._itemsStore.init(this.params);\n this._saveQueryParams();\n this._savePersistedParams();\n }\n\n public fetchQueryParams(): void {\n this._initQueryParams();\n this._itemsStore.updateItemsWithValues(this.params);\n }\n\n private _initPersistance() {\n this._persistanceStore.init(\n this._config.persist,\n this._config.namespace,\n this._config.case,\n );\n }\n\n private _initQueryParams() {\n this._queryParams.init(this._config.queryParam, this._config.case);\n }\n\n private _initSavedFilters() {\n this._savedFilters.init(this._config.savedFilters, this._config.case);\n }\n\n private _listenItemsChange() {\n this._itemsStore.ready$\n .pipe(\n filter((v) => v),\n take(1),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._saveQueryParams();\n this._savePersistedParams();\n });\n\n this._itemsStore\n .itemsChange$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._saveQueryParams();\n this._savePersistedParams();\n });\n }\n\n private _listenAndResetSavedFilters(): void {\n this._itemsStore\n .itemsChange$\n .pipe(\n filter(() => !!this.savedFiltersController.activeFilter),\n switchMap(() => {\n const shouldReset = this._shouldResetSavedFilters;\n\n this._shouldResetSavedFilters = true;\n\n return of(shouldReset);\n }),\n filter((shouldReset) => shouldReset),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.savedFiltersController.resetActiveFilter();\n });\n }\n\n private _saveQueryParams() {\n const targetItems = this._itemsStore.items\n .filter((item) => !item.queryParamsDisabled);\n\n const params = buildQueryParams(\n this._itemsStore.valuesAsQuery({\n onlyPresented: false,\n items: targetItems,\n persisted: true,\n }),\n targetItems,\n );\n\n this._queryParams.writeStateToQueryParams(params);\n }\n\n private _savePersistedParams() {\n const targetItems = this._itemsStore.items\n .filter((item) => !item.persistanceDisabled);\n\n const params = buildQueryParams(\n this._itemsStore.valuesAsQuery({\n onlyPresented: false,\n items: targetItems,\n persisted: true,\n }),\n targetItems,\n );\n\n this._persistanceStore.save(params);\n }\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nimport {\n FsFilterAction, FsFilterActionClickFn, FsFilterActionShowFn,\n IFsFilterMenuActionGroupItem,\n IFsFilterMenuActionItem, IFsFilterMenuActionLink,\n} from '../interfaces/action.interface';\n\n\nexport class ActionMenuItem {\n\n public icon: string;\n public label: string;\n public click: FsFilterActionClickFn;\n public routerLink: IFsFilterMenuActionLink;\n public items: ActionMenuItem[] = [];\n\n private _isGroup = false;\n private _showFn: FsFilterActionShowFn;\n private _visible$ = new BehaviorSubject<boolean>(true);\n private _disabled$ = new BehaviorSubject<boolean>(false);\n\n constructor(\n config: FsFilterAction = {},\n private _parent?: ActionMenuItem,\n ) {\n this._init(config);\n }\n\n public get isGroup(): boolean {\n return this._isGroup;\n }\n\n public get visible(): boolean {\n return this._visible$.getValue();\n }\n\n public get visible$(): Observable<boolean> {\n return this._visible$.asObservable();\n }\n\n public set disabled(value: boolean) {\n this._disabled$.next(value);\n }\n\n public get disabled(): boolean {\n return this._disabled$.getValue();\n }\n\n public get disabled$(): Observable<boolean> {\n return this._disabled$.asObservable();\n }\n\n public updateVisibility(): void {\n const visible = this._showFn ? this._showFn() : true;\n\n if (!visible || !this.isGroup) {\n this._visible$.next(visible);\n\n return;\n }\n\n const numberOfVisibleChildren = this.items\n .reduce((acc, item) => {\n item.updateVisibility();\n\n if (item.visible) {\n acc++;\n }\n\n return acc;\n }, 0);\n\n this._visible$.next(!!numberOfVisibleChildren);\n }\n\n private _init(config: IFsFilterMenuActionGroupItem | IFsFilterMenuActionItem) {\n this.label = config.label;\n this.icon = config.icon;\n this._showFn = config.show;\n\n if ('items' in config) {\n this._isGroup = true;\n\n if (Array.isArray(config.items)) {\n this.items = config\n .items\n .map((item) => new ActionMenuItem(item, this));\n }\n\n this.updateVisibility();\n } else {\n this.click = config.click;\n this.routerLink = config.link;\n\n if (!this._parent) {\n this.updateVisibility();\n }\n }\n }\n}\n","import { ThemePalette } from '@angular/material/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { ActionMode } from '../enums/action-mode.enum';\nimport { ActionType } from '../enums/action-type.enum';\nimport {\n FsFilterAction,\n FsFilterActionClickFn,\n FsFilterActionDisabledFn,\n FsFilterActionShowFn,\n FsFilterFileActionErrorFn,\n FsFilterFileActionSelectFn,\n IFsFilterFileAction,\n IFsFilterSelectButtonAction,\n} from '../interfaces/action.interface';\n\nimport { ActionMenuItem } from './action-menu-item.model';\nimport { FsFilterConfig } from './filter-config';\n\n\nexport class Action {\n\n public primary = true;\n public icon: string;\n public iconPlacement: 'left' | 'right';\n public label: string;\n public value: any;\n public menu: boolean;\n public color: ThemePalette;\n public customize: boolean;\n public className: string;\n public click: FsFilterActionClickFn;\n public type: ActionType;\n public tabIndex: number;\n public fileSelected: FsFilterFileActionSelectFn;\n public fileError: FsFilterFileActionErrorFn;\n public multiple: boolean;\n public accept: string;\n public tooltip: string;\n public minWidth: number;\n public minHeight: number;\n public maxWidth: number;\n public maxHeight: number;\n public imageQuality: number;\n public change: (value: any) => void;\n public values: any[];\n public mode: ActionMode;\n public isReorderAction = false;\n public deselect = false;\n public classArray: string[] = [];\n public items: ActionMenuItem[] = [];\n\n private _visible$ = new BehaviorSubject<boolean>(true);\n private _disabled$ = new BehaviorSubject<boolean>(false);\n private _showFn: FsFilterActionShowFn;\n private _disabledFn: FsFilterActionDisabledFn;\n\n constructor(filterConfig: FsFilterConfig, actionConfig: FsFilterAction = {}) {\n this._init(filterConfig, actionConfig);\n }\n\n public get visible(): boolean {\n return this._visible$.getValue();\n }\n\n public get visible$(): Observable<boolean> {\n return this._visible$.asObservable();\n }\n\n public set disabled(value: boolean) {\n this._disabled$.next(value);\n }\n\n public get disabled(): boolean {\n return this._disabled$.getValue();\n }\n\n public get disabled$(): Observable<boolean> {\n return this._disabled$.asObservable();\n }\n\n public updateVisibility(): void {\n const visible = this._showFn ? this._showFn() : true;\n\n if (!visible || this.mode !== ActionMode.Menu) {\n this._visible$.next(visible);\n\n return;\n }\n\n const hasVisibleChildren = this.items.some((item) => item.visible);\n this._visible$.next(hasVisibleChildren);\n }\n\n public updateDisabledState(): void {\n if (this._disabledFn) {\n this.disabled = this._disabledFn();\n }\n }\n\n private _init(filterConfig: FsFilterConfig, config: FsFilterAction = {}): void {\n config.mode = config.mode ?? ActionMode.Button;\n this._initCore(filterConfig, config);\n \n switch (config.mode) {\n case ActionMode.Button: {\n this.customize = config.customize;\n this.click = config.click ?? (() => { \n // do nothing\n });\n this._disabledFn = config.disabled;\n\n this.updateDisabledState();\n } break;\n\n case ActionMode.Menu: {\n if (config.items && Array.isArray(config.items)) {\n this.items = config.items.map((item) => new ActionMenuItem(item));\n }\n } break;\n\n case ActionMode.SelectButton: {\n this._initSelectButton(config);\n } break;\n\n case ActionMode.File: {\n this._initFile(config);\n } break;\n }\n\n this.updateVisibility();\n }\n\n private _initCore(filterConfig: FsFilterConfig, config: FsFilterAction): void {\n this.primary = config.primary ?? true;\n this.color = config.color;\n this.tooltip = config.tooltip;\n this.label = config.label;\n this.mode = config.mode;\n this.icon = config.icon;\n this.iconPlacement = config.iconPlacement;\n this._showFn = config.show;\n this.tabIndex = config.tabIndex ?? 0;\n this.menu = config.menu;\n\n if (!this.type) {\n this.type = (config.type || (filterConfig.button?.style as any) || ActionType.Raised);\n\n if (this.type === ActionType.Stroked && this.primary) {\n this.type = ActionType.Flat;\n }\n }\n\n if (config.className) {\n this.className = config.className;\n this.classArray = this.className\n .split(' ');\n }\n\n if (this.primary) {\n this.color = 'primary';\n }\n\n }\n\n private _initSelectButton(config: IFsFilterSelectButtonAction): void {\n this.values = config.values;\n this.value = config.default;\n this.change = config.change;\n this.deselect = config.deselect ?? false;\n }\n\n private _initFile(config: IFsFilterFileAction): void {\n this.fileSelected = config.select;\n this.fileError = config.error;\n this.accept = config.accept;\n this.imageQuality = config.imageQuality;\n this.minWidth = config.minWidth;\n this.minHeight = config.minHeight;\n this.maxWidth = config.maxWidth;\n this.maxHeight = config.maxHeight;\n this.click = config.click ?? (() => { \n //\n });\n this._disabledFn = config.disabled;\n\n if ((config).multiple !== undefined) {\n this.multiple = (config).multiple;\n }\n\n this.updateDisabledState();\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ActionType } from '../../enums/action-type.enum';\nimport { Action } from '../../models/action.model';\n\n\n@Component({\n selector: 'fs-filter-action-button',\n templateUrl: './action-button.component.html',\n host: { class: 'action-button' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterActionButtonComponent {\n\n public ActionType = ActionType;\n\n @Input()\n public action: Action;\n\n}\n","<ng-container [ngSwitch]=\"action.type\">\n <button\n type=\"button\"\n *ngSwitchCase=\"ActionType.Icon\"\n mat-icon-button\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <!-- Fab button -->\n <button \n type=\"button\"\n *ngSwitchCase=\"ActionType.Fab\"\n mat-fab\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <!-- Mini Fab button -->\n <button \n type=\"button\"\n *ngSwitchCase=\"ActionType.MiniFab\"\n mat-mini-fab\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <button \n type=\"button\"\n *ngSwitchDefault\n mat-button\n [ngClass]=\"{ \n 'mat-raised-button': action.type === ActionType.Raised,\n 'mat-flat-button': action.type === ActionType.Flat,\n 'mat-stroked-button': action.type === ActionType.Stroked,\n 'mat-button': action.type === ActionType.Basic,\n 'mat-icon-button': action.type === ActionType.Icon\n }\"\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [class]=\"action.classArray.join(' ')\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <ng-template #buttonContent>\n <ng-container *ngIf=\"!action.icon else withIcon\">\n {{action.label}}\n </ng-container>\n\n <ng-template #withIcon>\n <mat-icon *ngIf=\"!action.iconPlacement || action.iconPlacement === 'left'\">{{action.icon}}</mat-icon>\n {{action.label}}\n <mat-icon *ngIf=\"action.iconPlacement === 'right'\">{{action.icon}}</mat-icon>\n </ng-template>\n </ng-template>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Action } from '../../models/action.model';\n\n\n@Component({\n selector: 'fs-filter-action-kebab-actions',\n styleUrls: ['./action-kebab-actions.component.scss'],\n templateUrl: './action-kebab-actions.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterActionKebabActionsComponent {\n\n @Input()\n public kebabActions: Action[];\n\n}\n","<button \n type=\"button\"\n mat-icon-button\n class=\"menu-button\"\n [fsMenuTriggerFor]=\"kebabActionsMenu\">\n <mat-icon>more_vert</mat-icon>\n</button>\n<fs-menu #kebabActionsMenu>\n <ng-container *ngFor=\"let action of kebabActions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <!-- Case when actions was collapsed from action with mode = 'menu'-->\n <ng-container *ngSwitchCase=\"'menu'\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group>\n <ng-template fs-group-menu-item-template>\n {{ action.label }} <mat-icon style=\"margin: 0;\">arrow_right</mat-icon> {{childAction.label}}\n </ng-template>\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template \n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"!(subAction.visible$ | async)\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template \n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"!(childAction.visible$ | async)\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{ action.label }} <mat-icon style=\"margin: 0;\">arrow_right</mat-icon>{{ childAction.label }}\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-template \n fs-menu-file-item\n [fsClass]=\"action.classArray\"\n [multiple]=\"action.multiple\"\n [accept]=\"action.accept || '*'\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (error)=\"action.fileError($event)\"\n (select)=\"action.fileSelected($event)\"\n (click)=\"action.click($event)\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon> {{action.label}}\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-template \n fs-menu-item\n (click)=\"action.click($event)\"\n [fsClass]=\"action.classArray\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon> {{action.label}}\n </ng-template>\n </ng-container>\n\n </ng-container>\n </ng-container>\n</fs-menu>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n} from '@angular/core';\n\nimport { MatSelect } from '@angular/material/select';\n\nimport { ActionMode, ActionType } from '../../enums';\nimport { Action } from '../../models/action.model';\n\n\n@Component({\n selector: 'fs-filter-actions',\n templateUrl: './actions.component.html',\n styleUrls: ['./actions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterActionsComponent {\n\n @Input()\n public kebabActions: Action[] = [];\n\n @Input()\n public actions: Action[] = [];\n\n public ActionType = ActionType;\n public ActionMode = ActionMode;\n\n public actionChange(action: Action, value: any, selectButton: MatSelect): void {\n if(action.change) {\n action.change(value); \n\n if(action.deselect) {\n selectButton.writeValue(null);\n }\n }\n }\n\n}\n","<ng-container *ngFor=\"let action of actions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <ng-container *ngSwitchCase=\"ActionMode.Button\">\n <fs-filter-action-button\n [action]=\"action\"\n class=\"action\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.Menu\">\n <fs-filter-action-button\n class=\"action\"\n [action]=\"action\"\n [fsMenuTriggerFor]=\"someRef\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n\n <fs-menu #someRef class=\"action\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"childAction.label\">\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template\n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"(subAction.visible$ | async) === false\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template\n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"(childAction.visible$ | async) === false\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-template>\n </ng-container>\n </fs-menu>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.SelectButton\">\n <mat-select \n class=\"action\"\n [ngClass]=\"{ \n 'mat-stroked-button': action.type === ActionType.Stroked,\n 'mat-raised-button': action.type === ActionType.Raised,\n 'mat-flat-button': action.type === ActionType.Flat,\n 'mat-basic-button': action.type === ActionType.Basic\n }\"\n [placeholder]=\"action.label\"\n [(ngModel)]=\"action.value\" \n (ngModelChange)=\"actionChange(action, $event, selectButton)\"\n fsSelectButton\n #selectButton\n [deselectOnChange]=\"false\">\n <mat-option \n *ngFor=\"let item of action.values\" \n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.File\">\n <fs-file\n class=\"action action-button\"\n [accept]=\"action.accept || '*'\"\n [multiple]=\"action.multiple\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (select)=\"action.fileSelected($event)\"\n (error)=\"action.fileError($event)\"\n (clicked)=\"action.click($event)\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n <fs-filter-action-button \n [action]=\"action\">\n </fs-filter-action-button>\n </fs-file>\n </ng-container>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"kebabActions?.length\">\n <fs-filter-action-kebab-actions\n [kebabActions]=\"kebabActions\">\n </fs-filter-action-kebab-actions>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { BaseItem } from '../../models/items/base-item';\nimport { IFilterConfigItem } from '../../interfaces/config.interface';\n\n\n@Component({\n selector: 'fs-filter-chip-content',\n templateUrl: './filter-chip-content.component.html',\n styleUrls: ['./filter-chip-content.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterChipContentComponent implements OnInit, OnDestroy {\n\n @Input() public item: BaseItem<IFilterConfigItem>;\n @Input() public type: 'from' | 'to';\n\n public content;\n\n private _destroy$ = new Subject();\n\n constructor(private _cdRef: ChangeDetectorRef) {\n }\n\n public ngOnInit() {\n this.listenValueChangesForRanges();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public listenValueChangesForRanges() {\n this.item.value$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.content = this._getContent();\n this._cdRef.detectChanges();\n });\n }\n\n private _getContent() {\n const result = this.item.getChipsContent(this.type);\n\n if (this.item.chipLabel !== undefined) {\n if (this.item.chipLabel === '') {\n return `${result}`;\n } else {\n if (Array.isArray(this.item.chipLabel)) {\n const label = getLabelFromArray(this.item.chipLabel, this.type);\n return `${label}: ${result}`;\n } else {\n return `${this.item.chipLabel}: ${result}`;\n }\n }\n } else {\n if (Array.isArray(this.item.label)) {\n const label = getLabelFromArray(this.item.label, this.type);\n return `${label}: ${result}`;\n } else {\n if (this.item.isTypeCheckbox) {\n return result;\n } else {\n return `${this.item.label}: ${result}`;\n }\n }\n }\n }\n}\n\nfunction getLabelFromArray(labelArr, type) {\n if (type === 'from' && labelArr[0]) {\n return `${labelArr[0]}`;\n } else if (type === 'to' && labelArr[1]) {\n return `${labelArr[1]}`;\n } else {\n return '';\n }\n}\n","{{ content }}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { BaseItem } from '../models/items/base-item';\n\n\n@Injectable()\nexport class FocusControllerService {\n\n private _focusOn = new BehaviorSubject<{ item: BaseItem<any>, type: 'from' | 'to'}>(null);\n\n constructor() {}\n\n public get focusOn$() {\n return this._focusOn.asObservable();\n }\n\n public click(item: BaseItem<any>, type: 'from' | 'to' = null) {\n this._focusOn.next({ item, type })\n }\n\n public listenFocusFor$(targetItem: BaseItem<any>, targetType: 'from' | 'to' = null) {\n return this._focusOn\n .pipe(\n filter((event) => !!event),\n filter(({ item, type }) => {\n return targetItem === item && targetType === type;\n }),\n tap(() => this.clearFocus()),\n )\n }\n\n public clearFocus() {\n this._focusOn.next(null);\n }\n}\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n Input, OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { combineLatest, Observable, Subject, timer } from 'rxjs';\nimport { distinctUntilChanged, map, mapTo, startWith, take, takeUntil } from 'rxjs/operators';\n\nimport { IFilterConfigItem } from '../../interfaces/config.interface';\nimport { BaseItem } from '../../models/items/base-item';\nimport { DateRangeItem } from '../../models/items/date-range-item';\nimport { DateTimeRangeItem } from '../../models/items/date-time-range-item';\nimport { RangeItem } from '../../models/items/range-item';\nimport { FocusControllerService } from '../../services/focus-controller.service';\n\n\n@Component({\n selector: 'fs-filter-chip',\n templateUrl: './filter-chip.component.html',\n styleUrls: ['./filter-chip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterChipComponent implements OnInit, OnDestroy {\n\n @Input() public item: BaseItem<IFilterConfigItem>;\n\n public itemVisible: boolean;\n public rangeItem: boolean;\n\n public chipDelayedRender$: Observable<boolean>;\n\n private _chipRenderTimer$ = timer(500)\n .pipe(\n mapTo(true),\n );\n\n private _destroy$ = new Subject();\n\n constructor(\n private _cdRef: ChangeDetectorRef,\n private _focusController: FocusControllerService,\n ) {\n }\n\n public ngOnInit() {\n this.rangeItem = this.item.isTypeDateRange\n || this.item.isTypeRange\n || this.item.isTypeDateTimeRange;\n\n this.listenValueChangesForRanges();\n this._updateVisibility();\n\n if (this.item.hasPendingValues) {\n this.item.loadAsyncValues(false);\n\n this.item.values$\n .pipe(\n take(2),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateVisibility();\n this._cdRef.markForCheck();\n });\n\n this._initDelayRender();\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public focusOnItem(type = null) {\n this._focusController.click(this.item, type);\n }\n\n public removeItem(event: MouseEvent, type = null) {\n if (this.item instanceof RangeItem) {\n this.item.clearRange(type);\n } else if (this.item instanceof DateRangeItem || this.item instanceof DateTimeRangeItem) {\n this.item.clearDateRange(type);\n } else {\n this.item.clear();\n }\n }\n\n public listenValueChangesForRanges() {\n this.item.value$\n .pipe(\n distinctUntilChanged(),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateVisibility();\n this._cdRef.markForCheck();\n });\n }\n\n private _updateVisibility() {\n this.itemVisible = this.item.isChipVisible;\n }\n\n private _initDelayRender() {\n this.chipDelayedRender$ = combineLatest([\n this.item.values$,\n this._chipRenderTimer$.pipe(startWith(false)),\n ])\n .pipe(\n map(([values, timerValue]) => {\n return !!values || timerValue;\n }),\n );\n }\n}\n","<ng-container *ngIf=\"!item.hasPendingValues || (chipDelayedRender$ | async)\">\n <ng-container *ngIf=\"rangeItem; else defaultChip\">\n <fs-chip\n *ngIf=\"item.model?.min || item.model?.from\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem('from')\"\n (removed)=\"removeItem($event, 'from')\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item, type: 'from' }\">\n </ng-template>\n </fs-chip>\n\n <fs-chip\n *ngIf=\"item.model?.max || item.model?.to\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem('to')\"\n (removed)=\"removeItem($event, 'to')\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item, type: 'to' }\">\n </ng-template>\n </fs-chip>\n\n </ng-container>\n\n <ng-template #defaultChip>\n <fs-chip\n *ngIf=\"itemVisible\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem()\"\n (removed)=\"removeItem($event)\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </fs-chip>\n </ng-template>\n\n <ng-template #chipContent let-item=\"item\" let-type=\"type\">\n <ng-container *ngIf=\"!item.hasPendingValues && !item.loading; else lodaingValues\">\n <fs-filter-chip-content [item]=\"item\" [type]=\"type\"></fs-filter-chip-content>\n </ng-container>\n\n <ng-template #lodaingValues>\n Loading...\n </ng-template>\n </ng-template>\n</ng-container>\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ItemType } from '../../enums';\nimport { BaseItem } from '../../models/items/base-item';\n\n\n@Component({\n selector: 'fs-filter-chips',\n templateUrl: './filter-chips.component.html',\n styleUrls: ['./filter-chips.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterChipsComponent {\n\n @Input() public filters: BaseItem<any>[];\n\n public ItemType = ItemType;\n}\n","<ng-container *ngFor=\"let item of filters\">\n <ng-container *ngIf=\"(item.value$ | async) !== undefined && item.type !== ItemType.Keyword\">\n <fs-filter-chip [item]=\"item\"></fs-filter-chip>\n </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\n\nimport { ExternalParamsController } from '../../services/external-params-controller.service';\nimport { SavedFiltersController } from '../../services/external-params/saved-filters-controller.service';\n\n\n@Component({\n selector: 'fs-filter-drawer-actions',\n templateUrl: './filter-drawer-actions.component.html',\n styleUrls: ['./filter-drawer-actions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterDrawerActionsComponent {\n\n @Output('clear')\n private _clear = new EventEmitter<void>();\n\n @Output('done')\n private _done = new EventEmitter<void>();\n\n constructor(public externalParams: ExternalParamsController) { }\n\n public get savedFilters(): SavedFiltersController {\n return this.externalParams.savedFiltersController;\n }\n\n public done(): void {\n this._done.emit();\n }\n\n public clear(): void {\n this._clear.emit();\n }\n\n public saveFilters() {\n this.externalParams\n .savedFiltersController\n .openSavedFilterEditDialog();\n }\n}\n","<a mat-button color=\"primary\" (click)=\"done()\">Done</a>\n<a mat-button (click)=\"clear()\">Clear</a>\n<ng-container *ngIf=\"savedFilters.enabled$ | async\">\n <a mat-button (click)=\"saveFilters()\">Save</a>\n</ng-container>\n\n","import { InjectionToken } from '@angular/core';\n\nexport const FILTER_DRAWER_DATA = new InjectionToken<any>('fs.filter-drawer-data');\n","import { InjectionToken } from '@angular/core';\n\nexport const FILTER_DRAWER_OVERLAY = new InjectionToken<any>('fs.filter-drawer-overlay');\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n Input,\n KeyValueDiffer,\n KeyValueDiffers, OnChanges, OnDestroy,\n SimpleChanges,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\n\nimport { IFilterConfigItem } from '../../../interfaces/config.interface';\nimport { BaseItem } from '../../../models/items/base-item';\n\n\n@Component({\n selector: 'base-item',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BaseItemComponent<T extends BaseItem<IFilterConfigItem>>\nimplements DoCheck, OnChanges, OnDestroy {\n\n @Input()\n public set item(value: T) {\n this._item = value;\n }\n\n public get item(): T {\n return this._item;\n }\n\n @Input()\n public inline = false;\n\n public label!: string;\n\n protected _item: T;\n protected _kvDiffer: KeyValueDiffer<string, any>;\n protected _destroy$ = new Subject();\n\n private _debouncer$ = new Subject();\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef,\n ) {\n this._kvDiffer = this._kvDiffers.find(this.item || {}).create();\n this.listenWithDebounce();\n }\n public ngDoCheck(): void {\n if (this._kvDiffer) {\n const changes = this._kvDiffer.diff(this.item);\n\n if (changes) {\n this._cd.detectChanges();\n }\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.item) {\n this.label = Array.isArray(this.item.label) ? this.item.label[0] : this.item.label;\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public listenWithDebounce() {\n this._debouncer$\n .pipe(\n debounceTime(150),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.item.valueChanged();\n });\n }\n\n public itemChange() {\n this._debouncer$.next();\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit, Optional, Self,\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n DateRangePickerFromComponent, DateRangePickerToComponent,\n FsDatePickerComponent,\n FsDateScrollPickerComponent\n} from '@firestitch/datepicker';\nimport { FsAutocompleteComponent } from '@firestitch/autocomplete';\nimport { FsAutocompleteChipsComponent } from '@firestitch/autocomplete-chips';\n\nimport { Subject } from 'rxjs';\nimport { delay, takeUntil } from 'rxjs/operators';\n\nimport { FocusControllerService } from '../../services/focus-controller.service';\nimport { ItemType } from '../../enums/item-type.enum';\nimport { ItemDateMode } from '../../enums/item-date-mode.enum';\n\n\n@Directive({\n selector: '[fsFilterFocusTrigger]',\n})\nexport class FocusToItemDirective implements OnInit, OnDestroy {\n\n @Input('fsFilterFocusTrigger')\n private _item;\n\n @Input('focusTargetType')\n private _focusTargetType;\n\n private _destroy$ = new Subject<void>();\n\n constructor(\n private _el: ElementRef,\n private _focusController: FocusControllerService,\n @Optional() @Self() private _targetSelect: MatSelect,\n @Optional() @Self() private _targetDate: FsDatePickerComponent,\n @Optional() @Self() private _targetDateScroll: FsDateScrollPickerComponent,\n @Optional() @Self() private _targetDateRangeFrom: DateRangePickerFromComponent,\n @Optional() @Self() private _targetDateRangeTo: DateRangePickerToComponent,\n @Optional() @Self() private _targetAutocomplete: FsAutocompleteComponent,\n @Optional() @Self() private _targetAutocompleteChips: FsAutocompleteChipsComponent,\n ) {}\n\n public ngOnInit(): void {\n this._focusController\n .listenFocusFor$(this._item, this._focusTargetType)\n .pipe(\n delay(500),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._focus();\n })\n }\n\n public ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n private _focus() {\n switch (this._item.type) {\n case ItemType.Select: {\n this._targetSelect.open();\n } break;\n\n case ItemType.Text: case ItemType.Range: {\n this._el.nativeElement.focus();\n } break;\n\n case ItemType.Date: {\n if (this._item.mode === ItemDateMode.Calendar) {\n this._targetDate.open();\n } else {\n this._targetDateScroll.open();\n }\n } break;\n case ItemType.DateRange: {\n if (this._focusTargetType === 'from') {\n this._targetDateRangeFrom.open();\n } else {\n this._targetDateRangeTo.open();\n }\n } break;\n\n case ItemType.AutoComplete: {\n this._targetAutocomplete.focus();\n } break;\n\n case ItemType.AutoCompleteChips: {\n this._targetAutocompleteChips.focus();\n } break;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\n\n@Component({\n selector: 'filter-item-select-groups',\n templateUrl: './groups.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectGroupsComponent {\n\n @ViewChild('select', { static: true }) select: MatSelect;\n @Input() public item;\n\n constructor(public cd: ChangeDetectorRef) {}\n\n public compare(o1, o2) {\n return o1 == o2;\n }\n}\n","<mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [compareWith]=\"compare\">\n <ng-container *ngFor=\"let selectItem of item.values\">\n <ng-container *ngIf=\"selectItem[item.children]; else simpleOption\">\n <mat-optgroup [label]=\"selectItem.name\">\n <mat-option *ngFor=\"let subItem of selectItem[item.children]\"\n [value]=\"subItem.value\"\n [ngStyle]=\"selectItem.style\">\n {{ subItem.name }}\n </mat-option>\n </mat-optgroup>\n </ng-container>\n\n <ng-template #simpleOption>\n <mat-option\n [value]=\"selectItem.value\"\n [ngStyle]=\"selectItem.style\">\n {{ selectItem.name }}\n </mat-option>\n </ng-template>\n </ng-container>\n </mat-select>\n</mat-form-field>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { BaseItem } from '../models/items/base-item';\n\n\n@Pipe({\n name: 'fsFilterIsolateValues',\n})\nexport class FsFilterIsolateValues implements PipeTransform {\n transform(values: BaseItem<any>[], isolate) {\n if (!isolate) {\n return values;\n }\n\n return values.filter((value) => {\n return value.value !== isolate.value;\n });\n\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n ViewChild,\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\nimport { SimpleSelectItem } from '../../../../models/items/select/simple-select-item';\n\n\n@Component({\n selector: 'filter-item-select-simple',\n templateUrl: './simple.component.html',\n styleUrls: ['./simple.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectSimpleComponent {\n\n @Input() public item: SimpleSelectItem;\n\n @ViewChild('select', { static: true }) select: MatSelect;\n\n constructor(public cd: ChangeDetectorRef) {}\n\n public changed() {\n if (this.item.isolate) {\n this.item.isolate.enabled = false;\n }\n }\n\n public isolateChange(filter) {\n\n if (filter.isolate.enabled) {\n filter.model = filter.isolate.value;\n } else {\n filter.model = null;\n }\n }\n}\n","<mat-form-field [ngClass]=\"{ isolate: item.isolate }\">\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n (ngModelChange)=\"changed()\">\n <mat-option *ngFor=\"let item of item.values | fsFilterIsolateValues: item.isolate\"\n [value]=\"item.value\"\n >\n {{ item.name }}\n </mat-option>\n </mat-select>\n\n <mat-hint>\n <div *ngIf=\"item.isolate\">\n <mat-checkbox (change)=\"isolateChange(item)\" [(ngModel)]=\"item.isolate.enabled\">\n <span class=\"checkbox-label\">{{ item.isolate.label }}</span>\n </mat-checkbox>\n </div>\n </mat-hint>\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n ViewChild\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\n\nimport { MultipleSelectItem } from '../../../../models/items/select/multiple-select-item';\n\n\n@Component({\n selector: 'filter-item-select-multiple',\n templateUrl: './multiple.component.html',\n styleUrls: ['./multiple.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectMultipleComponent {\n\n @Input()\n public item: MultipleSelectItem;\n\n @ViewChild('select', { static: true })\n public select: MatSelect;\n\n constructor(public cd: ChangeDetectorRef) {}\n\n public changed() {\n\n if (this.item.isolate) {\n\n this.item.isolate.enabled = false;\n\n if (this.item.multiple && Array.isArray(this.item.model)) {\n const index = this.item.model.indexOf(this.item.isolate.value);\n\n if (index > -1) {\n this.item.model.splice(index, 1);\n }\n }\n }\n }\n\n public close() {\n this.select.close();\n }\n\n public isolateChange(filter) {\n if (filter.isolate.enabled) {\n filter.model = filter.multiple ? [filter.isolate.value] : filter.isolate.value;\n } else {\n if (filter.multiple) {\n filter.model = filter.defaultValue ? filter.defaultValue : [];\n } else {\n filter.model = filter.defaultValue ? filter.defaultValue : null;\n }\n }\n }\n}\n","<mat-form-field [ngClass]=\"{ isolate: item.isolate }\">\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n (ngModelChange)=\"changed()\"\n [multiple]=\"item.multiple\">\n <mat-option\n *ngFor=\"let item of item.values | fsFilterIsolateValues: item.isolate\"\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n\n <mat-hint>\n <div *ngIf=\"item.isolate\">\n <mat-checkbox (change)=\"isolateChange(item)\" [(ngModel)]=\"item.isolate.enabled\">\n <span class=\"checkbox-label\">{{ item.isolate.label }}</span>\n </mat-checkbox>\n </div>\n </mat-hint>\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n KeyValueDiffers,\n Component,\n ViewChild,\n DoCheck,\n SimpleChanges,\n} from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { SelectSimpleComponent } from './simple/simple.component';\nimport { SelectMultipleComponent } from './multiple/multiple.component';\nimport { BaseSelectItem } from '../../../models/items/select/base-select-item';\nimport { MultipleSelectItem } from '../../../models/items/select/multiple-select-item';\nimport { SimpleSelectItem } from '../../../models/items/select/simple-select-item';\n\n@Component({\n selector: 'filter-item-select',\n templateUrl: './select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectComponent extends BaseItemComponent<BaseSelectItem> implements DoCheck {\n\n @ViewChild('selectItem')\n public selectedItem: SelectSimpleComponent | SelectMultipleComponent;\n // For case when we have multiple selection with __all option\n // If _all has been selected than we must disable all other items\n public allItemsOptionSelected = false;\n\n public get multipleSelectItem(): MultipleSelectItem {\n return this.item as MultipleSelectItem;\n }\n\n public get simpleSelectItem(): SimpleSelectItem {\n return this.item as SimpleSelectItem;\n }\n\n public values$: Observable<unknown[]>;\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n \n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.item) {\n this.values$ = this.item.values$ as Observable<unknown[]>;\n }\n }\n\n public ngDoCheck() {\n if (this._kvDiffer) {\n const changes = this._kvDiffer.diff(this.item);\n\n if (changes) {\n this._cd.markForCheck();\n\n if (this.selectedItem) {\n this.selectedItem.cd.markForCheck();\n }\n }\n }\n }\n}\n","<ng-container *ngIf=\"(item.loading$ | async) else itemSelect\">\n <mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <mat-select disabled></mat-select>\n </mat-form-field>\n</ng-container>\n\n<ng-template #itemSelect>\n <ng-container *ngIf=\"(values$ | async)?.length\">\n <ng-container *ngIf=\"item.multiple && !item.children\">\n <filter-item-select-multiple\n [item]=\"multipleSelectItem\"\n #selectItem>\n </filter-item-select-multiple>\n </ng-container>\n\n <ng-container *ngIf=\"!item.multiple && !item.children\">\n <filter-item-select-simple\n [item]=\"simpleSelectItem\"\n #selectItem>\n </filter-item-select-simple>\n </ng-container>\n\n <ng-container *ngIf=\"item.children\">\n <filter-item-select-groups\n [item]=\"item\"\n #selectItem>\n </filter-item-select-groups>\n </ng-container>\n </ng-container>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers\n} from '@angular/core';\n\nimport { ChipsItem } from '../../../models/items/chips-item';\nimport { BaseItemComponent } from '../base-item/base-item.component';\n\n\n@Component({\n selector: 'filter-item-chips',\n templateUrl: './chips.component.html',\n styleUrls: [ './chips.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChipsComponent extends BaseItemComponent<ChipsItem> {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public modelChange() {\n this.itemChange();\n }\n\n public compareFn(modelValue, chipValue) {\n return String(modelValue.value) === String(chipValue.value);\n }\n}\n","<ng-template [ngIf]=\"item.values?.length\">\n <fs-label-field>\n <fs-label>{{item.label}}</fs-label>\n <fs-chips \n [(ngModel)]=\"item.model\"\n [compare]=\"compareFn\"\n [multiple]=\"item.multiple\">\n <fs-chip \n *ngFor=\"let value of item.values\"\n [value]=\"value\"\n [selectable]=\"true\">\n {{ value.name }}\n </fs-chip>\n </fs-chips>\n </fs-label-field>\n</ng-template>\n\n<ng-template [ngIf]=\"item.loading\">{{ item.label }} loading...</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\n\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil, debounceTime } from 'rxjs/operators';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { TextItem } from '../../../models/items/text-item';\n\n\n@Component({\n selector: 'filter-item-text',\n templateUrl: './text.component.html',\n styleUrls: ['./text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextComponent extends BaseItemComponent<TextItem> implements OnInit, OnDestroy {\n\n public textControl = new UntypedFormControl();\n public destroy$ = new Subject();\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit(): void {\n this._listenControlValueChanges();\n this._listenModelChanges();\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private _listenControlValueChanges(): void {\n this.textControl.valueChanges\n .pipe(\n distinctUntilChanged(),\n debounceTime(200),\n takeUntil(this.destroy$),\n )\n .subscribe((value) => {\n this.item.model = value;\n });\n }\n\n private _listenModelChanges(): void {\n this._item.value$\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this.textControl.setValue(this.item.model, { emitEvent: false });\n })\n }\n\n}\n","<mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <span matPrefix *ngIf=\"item.prefix\" [innerHtml]=\"item.prefix\"></span>\n <input matInput [formControl]=\"textControl\" [fsFilterFocusTrigger]=\"item\">\n <span matSuffix *ngIf=\"item.suffix\" [innerHtml]=\"item.suffix\"></span>\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n OnInit\n} from '@angular/core';\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { WeekItem } from '../../../models/items/week-item';\n\n\n@Component({\n selector: 'filter-item-week',\n templateUrl: './week.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WeekComponent extends BaseItemComponent<WeekItem> implements OnInit {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit() {}\n}\n","<mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDateWeekPicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [seedDate]=\"item.seedDate\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component, ElementRef,\n KeyValueDiffers, OnInit, ViewChild\n} from '@angular/core';\nimport { fromEvent, merge } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { RangeItem } from '../../../models/items/range-item';\n\n\n@Component({\n selector: 'filter-item-range',\n templateUrl: './range.component.html',\n styleUrls: ['./range.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RangeComponent extends BaseItemComponent<RangeItem> implements OnInit {\n\n @ViewChild('from', { static: true })\n public from: ElementRef;\n\n @ViewChild('to', { static: true })\n public to;\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit(): void {\n this.listenChanges();\n }\n\n public listenChanges() {\n const fromListener = fromEvent(this.from.nativeElement, 'keyup')\n .pipe(\n distinctUntilChanged()\n );\n\n const toListener = fromEvent(this.to.nativeElement, 'keyup')\n .pipe(\n distinctUntilChanged()\n );\n\n merge(fromListener, toListener)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.itemChange();\n })\n }\n}\n","<div class=\"form-field\">\n <mat-form-field class=\"filter-range-min\">\n <mat-label>{{item.label[0]}}</mat-label>\n <span \n matPrefix \n class=\"text-prefix\"\n *ngIf=\"item.prefix\"\n [innerHtml]=\"item.prefix\">\n </span>\n <input \n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'from'\"\n type=\"text\"\n inputmode=\"decimal\"\n [(ngModel)]=\"item.model.min\"\n #from>\n <span \n matSuffix \n class=\"text-suffix\"\n *ngIf=\"item.suffix\" \n [innerHtml]=\"item.suffix\">\n </span>\n </mat-form-field>\n\n <mat-form-field class=\"filter-range-max\">\n <mat-label>{{item.label[1]}}</mat-label>\n <span \n matPrefix \n class=\"text-prefix\"\n *ngIf=\"item.prefix\"\n [innerHtml]=\"item.prefix\">\n </span>\n <input \n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'to'\"\n type=\"text\"\n inputmode=\"decimal\"\n [(ngModel)]=\"item.model.max\"\n #to>\n <span \n matSuffix \n class=\"text-suffix\"\n *ngIf=\"item.suffix\"\n [innerHtml]=\"item.suffix\">\n </span>\n </mat-form-field>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n} from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { AutocompleteItem } from '../../../models/items/autocomplete-item';\nimport { BaseItemComponent } from '../base-item/base-item.component';\n\n\n@Component({\n selector: 'filter-item-autocomplete',\n templateUrl: './autocomplete.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AutocompleteComponent extends BaseItemComponent<AutocompleteItem> {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef,\n ) {\n super(_kvDiffers, _cd);\n }\n\n public displayWith = (data) => {\n return data ? data.name : data;\n };\n\n public fetch = (keyword): Observable<any> => {\n return this.item.valuesFn(keyword, this.item.filter);\n };\n}\n","<fs-autocomplete\n [fsFilterFocusTrigger]=\"item\"\n [fetch]=\"fetch\"\n [displayWith]=\"displayWith\"\n [(ngModel)]=\"item.model\"\n [placeholder]=\"label\"\n [fetchOnFocus]=\"item.fetchOnFocus\"\n [showClear]=\"item.showClear\"\n name=\"item.name\">\n <ng-template fsAutocompleteTemplate let-data=\"data\">\n {{data.name}}\n </ng-template>\n</fs-autocomplete>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n} from '@angular/core';\n\nimport { remove as arrayRemove } from '@firestitch/common';\n\nimport { AutocompleteChipsItem } from '../../../models/items/autocomplete-chips-item';\nimport { BaseItemComponent } from '../base-item/base-item.component';\n\n\n@Component({\n selector: 'filter-item-autocompletechips',\n templateUrl: './autocompletechips.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AutocompletechipsComponent extends BaseItemComponent<AutocompleteChipsItem> {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef,\n ) {\n super(_kvDiffers, _cd);\n }\n\n public addAutocompleteChipItem(event) {\n if (event.data && this.item.model.indexOf(event.data.value) === -1) {\n this.item.model.push(event.data);\n this.itemChange();\n }\n }\n\n public removeAutocompleteChipItem(event) {\n arrayRemove(this.item.model, { value: event.data.value });\n this.itemChange();\n }\n\n public clearAutocompleteChipItem() {\n this.item.clear();\n this.itemChange();\n }\n\n public fetch = (keyword) => {\n return this.item.valuesFn(keyword, this.item.filter);\n };\n\n public compareItems(item1, item2): boolean {\n return item1?.value === item2?.value;\n }\n}\n","<fs-autocomplete-chips\n [fsFilterFocusTrigger]=\"item\"\n [fetch]=\"fetch\"\n [ngModel]=\"item.model\"\n (selected)=\"addAutocompleteChipItem($event)\"\n (removed)=\"removeAutocompleteChipItem($event)\"\n (clear)=\"clearAutocompleteChipItem()\"\n [allowText]=\"false\"\n [fetchOnFocus]=\"item.fetchOnFocus\"\n [placeholder]=\"label\"\n [chipImage]=\"item.chipImage\"\n [chipColor]=\"item.chipColor\"\n [chipIconColor]=\"item.chipIcon\"\n [chipBackground]=\"item.chipBackground\"\n [chipIcon]=\"item.chipIcon\"\n [chipClass]=\"item.chipClass\"\n [allowClear]=\"item.showClear\"\n [removable]=\"item.showClear\"\n [compareWith]=\"compareItems\"\n [panelWidth]=\"300\"\n name=\"model\">\n <ng-template fsAutocompleteObject let-object=\"object\">\n {{ object.name }}\n </ng-template>\n</fs-autocomplete-chips>\n\n<!--<mat-form-field floatLabel=\"auto\">\n <mat-label>{{item.label}}</mat-label>\n <mat-chip-list #chipList>\n <mat-chip *ngFor=\"let item of item.model\"\n (removed)=\"removeAutocompleteChipItem(item)\">\n {{ item.name }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n\n <input #chipsInput\n type=\"text\"\n matInput\n [(ngModel)]=\"item.selectedValue\"\n (ngModelChange)=\"onAutocompleteChipsChange(chipsInput)\"\n [name]=\"item.name\"\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"autocompleteChipsInput\">\n </mat-chip-list>\n\n <mat-autocomplete #autocompleteChipsInput=\"matAutocomplete\"\n (optionSelected)=\"addAutocompleteChipItem( $event)\"\n >\n <mat-option *ngFor=\"let item of item.values$ | async\" [value]=\"item\">\n {{ item.name }}\n </mat-option>\n </mat-autocomplete>\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>-->\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n OnInit\n} from '@angular/core';\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { ItemType } from '../../../enums/item-type.enum';\nimport { ItemDateMode } from '../../../enums/item-date-mode.enum';\nimport { BaseDateItem } from '../../../models/items/date/base-date-item';\nimport { DateItem } from '../../../models/items/date-item';\nimport { DateTimeItem } from '../../../models/items/date-time-item';\nimport { PickerViewType } from '../../../enums/picker-view-type.enum';\n\n\n@Component({\n selector: 'filter-item-date',\n templateUrl: './date.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateComponent extends BaseItemComponent<DateItem | DateTimeItem> implements OnInit {\n\n public viewType = PickerViewType.Date;\n\n public itemDateMode = ItemDateMode;\n public showYear = true;\n public showMonth = true;\n public showDay = true;\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit() {\n if (this.item.type === ItemType.DateTime) {\n this.viewType = PickerViewType.DateTime;\n } else {\n this.viewType = PickerViewType.Date;\n }\n\n if ((this.item as BaseDateItem).mode === ItemDateMode.ScrollMonthYear) {\n this.showDay = false;\n }\n }\n}\n","<mat-form-field *ngIf=\"item.mode===itemDateMode.Calendar; else elseMode\">\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDatePicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [maxYear]=\"item.maxYear\"\n [view]=\"viewType\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>\n\n<ng-template #elseMode>\n <mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDateScrollPicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [maxYear]=\"item.maxYear\"\n [showMonth]=\"showMonth\"\n [showDay]=\"showDay\"\n [showYear]=\"showYear\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n </mat-form-field>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers, OnInit\n} from '@angular/core';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { ItemType } from '../../../enums/item-type.enum';\nimport { DateRangeItem } from '../../../models/items/date-range-item';\nimport { DateTimeRangeItem } from '../../../models/items/date-time-range-item';\nimport { PickerViewType } from '../../../enums/picker-view-type.enum';\n\n\n@Component({\n selector: 'filter-item-date-range',\n templateUrl: './date-range.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateRangeComponent extends BaseItemComponent<DateRangeItem | DateTimeRangeItem> implements OnInit {\n\n public viewType = PickerViewType.Date;\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit() {\n if (this.item.type === ItemType.DateTimeRange) {\n this.viewType = PickerViewType.DateTime;\n } else {\n this.viewType = PickerViewType.Date;\n }\n }\n}\n","<mat-form-field>\n <mat-label>{{item.label[0]}}</mat-label>\n <input\n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'from'\"\n [fsDateRangeFrom]=\"item.name\"\n [(ngModel)]=\"item.model.from\"\n (ngModelChange)=\"itemChange()\"\n [clear]=\"item.showClear\"\n [view]=\"viewType\"\n name=\"date_from\">\n</mat-form-field>\n\n<mat-form-field>\n <mat-label>{{item.label[1]}}</mat-label>\n <input\n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'to'\"\n [fsDateRangeTo]=\"item.name\"\n [(ngModel)]=\"item.model.to\"\n (ngModelChange)=\"itemChange()\"\n [clear]=\"item.showClear\"\n [view]=\"viewType\"\n name=\"date_to\">\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers\n} from '@angular/core';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { CheckboxItem } from '../../../models/items/checkbox-item';\n\n\n@Component({\n selector: 'filter-item-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent extends BaseItemComponent<CheckboxItem> {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n}\n","<fs-label-field>\n <mat-checkbox [(ngModel)]=\"item.model\">\n {{ item.label }}\n </mat-checkbox>\n</fs-label-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { ItemType } from '../../enums/item-type.enum';\nimport { AutocompleteChipsItem } from '../../models/items/autocomplete-chips-item';\nimport { AutocompleteItem } from '../../models/items/autocomplete-item';\nimport { BaseItem } from '../../models/items/base-item';\nimport { CheckboxItem } from '../../models/items/checkbox-item';\nimport { ChipsItem } from '../../models/items/chips-item';\nimport { DateItem } from '../../models/items/date-item';\nimport { DateRangeItem } from '../../models/items/date-range-item';\nimport { DateTimeItem } from '../../models/items/date-time-item';\nimport { DateTimeRangeItem } from '../../models/items/date-time-range-item';\nimport { RangeItem } from '../../models/items/range-item';\nimport { BaseSelectItem } from '../../models/items/select/base-select-item';\nimport { TextItem } from '../../models/items/text-item';\nimport { WeekItem } from '../../models/items/week-item';\n\n\n@Component({\n selector: 'filter-item',\n templateUrl: './filter-item.component.html',\n styleUrls: ['./filter-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterItemComponent implements OnInit, OnDestroy {\n\n @Input() public item: BaseItem<any>;\n\n public itemType = ItemType;\n\n public get textItem(): TextItem {\n return this.item as TextItem;\n }\n\n public get chipsItem(): ChipsItem {\n return this.item as ChipsItem;\n }\n\n public get baseSelectItem(): BaseSelectItem {\n return this.item as BaseSelectItem;\n }\n\n public get rangeItem(): RangeItem {\n return this.item as RangeItem;\n }\n\n public get autocompleteItem(): AutocompleteItem {\n return this.item as AutocompleteItem;\n }\n\n public get autocompleteChipsItem(): AutocompleteChipsItem {\n return this.item as AutocompleteChipsItem;\n }\n\n public get dateItem(): DateItem {\n return this.item as DateItem;\n }\n\n public get dateRangeItem(): DateRangeItem {\n return this.item as DateRangeItem;\n }\n\n public get dateTimeItem(): DateTimeItem {\n return this.item as DateTimeItem;\n }\n\n public get dateTimeRangeItem(): DateTimeRangeItem {\n return this.item as DateTimeRangeItem;\n }\n\n public get weekItem(): WeekItem {\n return this.item as WeekItem;\n }\n\n public get checkboxItem(): CheckboxItem {\n return this.item as CheckboxItem;\n }\n\n private _destroy$ = new Subject<void>();\n\n constructor(private _cdRef: ChangeDetectorRef) { }\n\n public ngOnInit(): void {\n this.item.value$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n}\n","<div class=\"filter filter-{{ item.type }}\">\n\n <ng-container [ngSwitch]=\"item.type\">\n <filter-item-text \n class=\"interface\"\n *ngSwitchCase=\"itemType.Text\"\n [item]=\"textItem\">\n </filter-item-text>\n\n <filter-item-select \n class=\"interface\"\n *ngSwitchCase=\"itemType.Select\"\n [item]=\"baseSelectItem\">\n </filter-item-select>\n\n <filter-item-chips \n class=\"interface\"\n *ngSwitchCase=\"itemType.Chips\"\n [item]=\"chipsItem\">\n </filter-item-chips>\n\n <filter-item-range \n class=\"interface interface-range\"\n *ngSwitchCase=\"itemType.Range\"\n [item]=\"rangeItem\">\n </filter-item-range>\n\n <filter-item-autocomplete \n class=\"interface\"\n *ngSwitchCase=\"itemType.AutoComplete\"\n [item]=\"autocompleteItem\">\n </filter-item-autocomplete>\n\n <filter-item-autocompletechips \n class=\"interface\"\n *ngSwitchCase=\"itemType.AutoCompleteChips\"\n [item]=\"autocompleteChipsItem\">\n </filter-item-autocompletechips>\n\n <filter-item-date \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.Date\"\n [item]=\"dateItem\">\n </filter-item-date>\n\n <filter-item-date \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateTime\"\n [item]=\"dateTimeItem\">\n </filter-item-date>\n\n <filter-item-date-range \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateRange\"\n [item]=\"dateRangeItem\">\n </filter-item-date-range>\n\n <filter-item-date-range \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateTimeRange\"\n [item]=\"dateTimeRangeItem\">\n </filter-item-date-range>\n\n <filter-item-week \n class=\"interface\"\n *ngSwitchCase=\"itemType.Week\"\n [item]=\"weekItem\">\n </filter-item-week>\n\n <filter-item-checkbox \n class=\"interface interface-checkbox\"\n *ngSwitchCase=\"itemType.Checkbox\"\n [item]=\"checkboxItem\">\n </filter-item-checkbox>\n </ng-container>\n\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostListener,\n Inject,\n Input,\n} from '@angular/core';\n\nimport { OverlayRef } from '@angular/cdk/overlay';\n\nimport { Observable } from 'rxjs';\n\nimport { FILTER_DRAWER_DATA } from '../../injectors/filter-drawer-data';\nimport { FILTER_DRAWER_OVERLAY } from '../../injectors/filter-drawer-overlay';\nimport { BaseItem } from '../../models/items/base-item';\nimport { ExternalParamsController } from '../../services/external-params-controller.service';\nimport { FsFilterItemsStore } from '../../services/items-store.service';\n\ntype Item = BaseItem<any>;\n\n@Component({\n templateUrl: './filter-drawer.component.html',\n styleUrls: ['./filter-drawer.component.scss'],\n // Commented out because filter items are not updating with a delayed observable. Need to figure this out.\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterDrawerComponent {\n\n @Input() public inline = false;\n\n public windowDesktop = false;\n\n protected _clear: Function;\n protected _done: Function;\n\n constructor(\n @Inject(FILTER_DRAWER_OVERLAY) private _overlayRef: OverlayRef,\n @Inject(FILTER_DRAWER_DATA) private _data,\n public externalParams: ExternalParamsController,\n protected _cd: ChangeDetectorRef,\n protected _itemsStore: FsFilterItemsStore,\n ) {\n this._itemsStore.prepareItems();\n\n this._clear = this._data.clear;\n this._done = this._data.done;\n\n this.updateWindowWidth();\n }\n\n @HostListener('window:resize')\n public updateWindowWidth() {\n this.windowDesktop = window.innerWidth > 1200;\n }\n\n public get items$(): Observable<Item[]> {\n return this._itemsStore.visibleItems$;\n }\n\n public get sortItem(): Item {\n return this._itemsStore.sortByItem;\n }\n\n public get sortDirectionItem(): Item {\n return this._itemsStore.sortDirectionItem;\n }\n\n public clear() {\n this._clear();\n // this.overlayRef.detach();\n }\n\n public done() {\n this._done();\n this._overlayRef.detach();\n }\n\n public backdropClick() {\n this.done();\n }\n}\n","<div class=\"filters\">\n <div class=\"filters-wrap\">\n\n <div class=\"filter-by\">\n <mat-icon>tune</mat-icon>\n <span class=\"text\">Filters</span>\n </div>\n\n <div class=\"overflow-shadow filter-items\">\n <div class=\"overflow-shadow-content\">\n <ng-container *fsSkeleton=\"(externalParams.pending$ | async) !== true\">\n <filter-item \n *ngFor=\"let filterItem of items$ | async\"\n class=\"filter-group\"\n [item]=\"filterItem\">\n </filter-item>\n\n <ng-container *ngIf=\"sortItem && sortItem.values && sortItem.values.length > 0\">\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortItem\">\n </filter-item>\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortDirectionItem\">\n </filter-item>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <fs-filter-drawer-actions \n class=\"filter-actions\"\n *ngIf=\"(externalParams.pending$ | async) !== true\"\n (clear)=\"clear()\"\n (done)=\"done()\">\n </fs-filter-drawer-actions>\n </div>\n</div>\n<div class=\"backdrop\" *ngIf=\"!windowDesktop\" (click)=\"backdropClick()\"></div>\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { skip, takeUntil } from 'rxjs/operators';\n\nimport { FsFilterAction } from '../interfaces/action.interface';\nimport { Action } from '../models/action.model';\nimport { FsFilterConfig } from '../models/filter-config';\n\n\n@Injectable()\nexport class ActionsController implements OnDestroy {\n\n private _visible$ = new BehaviorSubject(false);\n private _actions$ = new BehaviorSubject<Action[]>([]);\n private _menuActions$ = new BehaviorSubject<Action[]>([]);\n private _destroy$ = new Subject<void>();\n private _config: FsFilterConfig;\n\n private readonly _mobileMedia = '(max-width: 799px)';\n private _allActions: Action[] = [];\n private _reorderAction: Action;\n\n constructor(\n private _breakpointObserver: BreakpointObserver,\n ) {\n this._listenMobileMedia();\n }\n\n public get menuActions(): Action[] {\n return this._menuActions$.value;\n }\n\n public get actions(): Action[] {\n return this._actions$.value;\n }\n\n public get actions$(): Observable<Action[]> {\n return this._actions$.asObservable();\n }\n\n public get menuActions$(): Observable<Action[]> {\n return this._menuActions$.asObservable();\n }\n\n public get visible$(): Observable<boolean> {\n return this._visible$.asObservable();\n }\n\n public get mobileMode(): boolean {\n return this._breakpointObserver.isMatched(this._mobileMedia);\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public setConfig(config: FsFilterConfig) {\n this._config = config;\n this.initActions(config.actions);\n }\n\n public initActions(rawActions: FsFilterAction[]) {\n if (!rawActions || !Array.isArray(rawActions)) {\n return;\n }\n\n this.show();\n\n this._allActions = rawActions\n .map((action) => new Action(this._config, action));\n\n if (this._reorderAction) {\n this._allActions.unshift(this._reorderAction);\n }\n\n this._classifyActions();\n }\n\n public show() {\n this._visible$.next(true);\n }\n\n public hide() {\n this._visible$.next(false);\n }\n\n public addReorderAction(action: Action) {\n this._allActions.unshift(action);\n\n action.isReorderAction = true;\n\n this._classifyAction(action);\n this._reorderAction = action;\n }\n\n public clearActions() {\n this._allActions = [];\n this._setActions([]);\n this._setKebabActions([]);\n }\n\n public updateActionsVisibility() {\n this._allActions.forEach((action) => action.updateVisibility());\n this._classifyActions();\n }\n\n public updateDisabledState() {\n this.actions.forEach((action) => action.updateDisabledState())\n }\n\n private _setKebabActions(actions: Action[]) {\n this._menuActions$.next(actions);\n }\n\n private _setActions(actions: Action[]) {\n this._actions$.next(actions);\n }\n\n private _classifyActions() {\n const kebabActions = [];\n const actions = [];\n const mobileMode = this.mobileMode;\n\n this._allActions\n .filter((action) => {\n return action.visible;\n })\n .forEach((action) => {\n if (action.menu !== false && (action.menu || mobileMode)) {\n kebabActions.push(action);\n } else {\n actions.push(action);\n }\n });\n\n this._setKebabActions(kebabActions);\n this._setActions(actions);\n }\n\n private _classifyAction(action: Action) {\n if (action.menu) {\n this._setKebabActions([...this.menuActions, action]);\n } else {\n this._setActions([...this.actions, action]);\n }\n }\n\n private _listenMobileMedia() {\n this._breakpointObserver.observe(this._mobileMedia)\n .pipe(\n skip(1),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._classifyActions();\n })\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface FsFilterMeta {\n openedFilters: number;\n}\n\nexport const FS_FILTER_META =\n new InjectionToken<FsFilterMeta>('fs.filter.meta',\n {\n providedIn: 'root',\n factory: () => {\n return {\n openedFilters: 0,\n };\n }\n }\n );\n","import { Inject, Injectable, Injector, OnDestroy } from '@angular/core';\n\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, PortalInjector } from '@angular/cdk/portal';\n\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { HtmlClassRenderer } from '@firestitch/html';\n\nimport { FilterDrawerComponent } from '../components/filter-drawer/filter-drawer.component';\nimport { FILTER_DRAWER_DATA } from '../injectors/filter-drawer-data';\nimport { FILTER_DRAWER_OVERLAY } from '../injectors/filter-drawer-overlay';\nimport { FS_FILTER_META, FsFilterMeta } from '../providers/filter-meta';\n\nimport { FocusControllerService } from './focus-controller.service';\n\n\n@Injectable()\nexport class FsFilterOverlayService implements OnDestroy {\n\n public detach$ = new Subject();\n public attach$ = new Subject();\n\n private _clearFn: Function;\n private _doneFn: Function;\n\n private _destroy$ = new Subject();\n private _overlayRef: OverlayRef;\n\n constructor(\n @Inject(FS_FILTER_META) private _filterMeta: FsFilterMeta,\n private _injector: Injector,\n private _overlay: Overlay,\n private _focusController: FocusControllerService,\n private _htmlClassRenderer: HtmlClassRenderer,\n ) {\n this._openWhenChipClicked();\n }\n\n public get isOpened() {\n return !!this._overlayRef;\n }\n\n public setClearFn(fn: Function) {\n this._clearFn = fn;\n }\n\n public setDoneFn(fn: Function) {\n this._doneFn = fn;\n }\n\n public close() {\n if (this._overlayRef) {\n this._overlayRef.detach();\n this._overlayRef = null;\n\n this._removeFilterClass();\n }\n }\n\n public open() {\n this._overlayRef = this._createOverlay();\n\n this._overlayRef.backdropClick()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._overlayRef.detach();\n });\n\n this._overlayRef.detachments()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.detach$.next();\n });\n\n this._overlayRef.attachments()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.attach$.next();\n });\n\n this._addFilterClass();\n\n return this._openPortalPreview();\n }\n\n public ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n private _createOverlay() {\n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'fs-filter-backdrop',\n });\n\n return this._overlay.create(overlayConfig);\n }\n\n private _openPortalPreview() {\n const data = {\n done: this._doneFn,\n clear: this._clearFn,\n };\n const injector = this._createInjector(this._injector, data, this._overlayRef);\n const containerPortal = new ComponentPortal(FilterDrawerComponent, undefined, injector);\n const containerRef = this._overlayRef.attach<FilterDrawerComponent>(containerPortal);\n\n return containerRef.instance;\n }\n\n private _createInjector(parentInjector, data, overlayRef) {\n const injectionTokens = new WeakMap<any, any>([\n [FILTER_DRAWER_DATA, data],\n [FILTER_DRAWER_OVERLAY, overlayRef],\n ]);\n\n return new PortalInjector(parentInjector, injectionTokens);\n }\n\n private _removeFilterClass() {\n this._filterMeta.openedFilters--;\n\n if (this._filterMeta.openedFilters === 0) {\n this._htmlClassRenderer.removeClass('fs-filter-open');\n }\n }\n\n private _addFilterClass() {\n this._filterMeta.openedFilters++;\n\n if (this._filterMeta.openedFilters === 1) {\n this._htmlClassRenderer.addClass('fs-filter-open');\n }\n }\n\n private _openWhenChipClicked(): void {\n this._focusController.focusOn$\n .pipe(\n filter((v) => !!v),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n if (!this.isOpened) {\n this.open();\n }\n });\n }\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n\n@Directive({\n selector: '[fsFilterStatusBar]',\n})\nexport class FilterStatusBarDirective {\n\n public constructor(\n public templateRef: TemplateRef<any>,\n ) { }\n\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_FILTER_CONFIG = new InjectionToken<any>('fs.filter-config');\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { MatInput } from '@angular/material/input';\n\nimport { BehaviorSubject, combineLatest, fromEvent, interval, Observable, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';\n\nimport { ActionsController } from '../../classes/actions-controller';\nimport { objectsAreEquals } from '../../helpers/compare';\nimport { IFilterSavedFilter, ISortingChangeEvent } from '../../interfaces';\nimport { FsFilterAction } from '../../interfaces/action.interface';\nimport { FilterConfig, FilterSort, IFilterConfigItem, SortItem } from '../../interfaces/config.interface';\nimport { IUpdateFilterItemConfig } from '../../interfaces/update-filter-item.interface';\nimport { FsFilterConfig } from '../../models/filter-config';\nimport { BaseItem } from '../../models/items/base-item';\nimport { TextItem } from '../../models/items/text-item';\nimport { ExternalParamsController } from '../../services/external-params-controller.service';\nimport { PersistanceParamsController } from '../../services/external-params/persistance-params-controller.service';\nimport { QueryParamsController } from '../../services/external-params/query-params-controller.service';\nimport { SavedFiltersController } from '../../services/external-params/saved-filters-controller.service';\nimport { FsFilterOverlayService } from '../../services/filter-overlay.service';\nimport { FocusControllerService } from '../../services/focus-controller.service';\nimport { FsFilterItemsStore } from '../../services/items-store.service';\n\nimport { FilterStatusBarDirective } from './../../directives/status-bar/status-bar.directive';\nimport { FS_FILTER_CONFIG } from './../../injectors/filter-config';\n\n\n@Component({\n selector: 'fs-filter',\n styleUrls: ['./filter.component.scss'],\n templateUrl: './filter.component.html',\n providers: [\n FsFilterOverlayService,\n ExternalParamsController,\n PersistanceParamsController,\n QueryParamsController,\n FocusControllerService,\n FsFilterItemsStore,\n SavedFiltersController,\n ActionsController,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterComponent implements OnInit, OnDestroy {\n\n @Input('config')\n public set setConfig(config) {\n this._initFilterWithConfig(config);\n }\n\n @Input('filter')\n public set setFilter(config) {\n this._initFilterWithConfig(config);\n }\n\n @Input() public showSortBy: any = true;\n @Input() public showFilterInput = true;\n @Output() public closed = new EventEmitter<any>();\n @Output() public opened = new EventEmitter<any>();\n @Output() public ready = new EventEmitter<void>();\n\n @ContentChild(FilterStatusBarDirective)\n public statusBar: FilterStatusBarDirective;\n\n @ViewChild('keywordMatInput', { read: MatInput })\n public keywordMatInput: MatInput;\n\n @ViewChild('reloadEl', { read: ElementRef })\n public reloadEl: ElementRef;\n\n @HostBinding('class.filters-open')\n public showFilterMenu = false;\n\n @HostBinding('class.window-desktop')\n public windowDesktop = false;\n\n @HostBinding('class.fs-filter')\n public fsFilterClass = true;\n\n @HostBinding('class.has-keyword')\n public get hasKeyword() {\n return this._filterItems.hasKeyword;\n }\n\n public searchPlaceholder = 'Search';\n public keyword = '';\n public autoReload = true;\n\n protected _config: FsFilterConfig = null;\n\n private _sort: FilterSort;\n private _filtersBtnVisible$ = new BehaviorSubject(true);\n private _keywordVisible$ = new BehaviorSubject(true);\n private _hasFilterChips$ = new BehaviorSubject(false);\n private _keyword$ = new Subject();\n private _destroy$ = new Subject<void>();\n\n constructor(\n @Optional() @Inject(FS_FILTER_CONFIG) private _defaultConfig: FsFilterConfig,\n private _filterOverlay: FsFilterOverlayService,\n private _zone: NgZone,\n private _externalParams: ExternalParamsController,\n private _filterItems: FsFilterItemsStore,\n private _actions: ActionsController,\n private _savedFiltersController: SavedFiltersController,\n private _externalParamsController: ExternalParamsController,\n ) {\n this._filterItems.filter = this;\n this._listenWhenFilterReady();\n this._updateWindowWidth();\n\n this._filterOverlay.attach$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.showFilterMenu = true;\n });\n\n this._filterOverlay.detach$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.showFilterMenu = false;\n });\n\n this._listenWindowResize();\n }\n\n public get config(): FsFilterConfig {\n return this._config;\n }\n\n public get filterParams() {\n return this._filterItems.values();\n }\n\n public get filterParamsQuery(): Record<string, unknown> {\n return this._filterItems.valuesAsQuery();\n }\n\n public get items() {\n return this._filterItems.items;\n }\n\n public get visibleItems() {\n return this._filterItems.visibleItems;\n }\n\n public get keywordItem(): TextItem | null {\n return this._filterItems.keywordItem;\n }\n\n public get itemsReady$(): Observable<boolean> {\n return this._filterItems.ready$;\n }\n\n public get hasFilterChips$(): Observable<boolean> {\n return this._hasFilterChips$.asObservable();\n }\n\n public get hasVisibleItemOrSorting(): boolean {\n return this.visibleItems.length > 0 || !!this._filterItems.sortByItem;\n }\n\n public get filtersBtnVisible$(): Observable<boolean> {\n return this._filtersBtnVisible$.asObservable();\n }\n\n public get keywordVisible$(): Observable<boolean> {\n return this._keywordVisible$.asObservable();\n }\n\n public get actionsVisible$() {\n return this._actions.visible$;\n }\n\n public get actions$() {\n return this._actions.actions$;\n }\n\n public get menuActions$() {\n return this._actions.menuActions$;\n }\n\n public set activeSavedFilter(savedFilter: IFilterSavedFilter) {\n this._externalParams.setActiveSavedFilter(savedFilter);\n }\n\n public get activeSavedFilter(): IFilterSavedFilter {\n return this._savedFiltersController.activeFilter;\n }\n\n public get savedFilters(): IFilterSavedFilter[] {\n return this._savedFiltersController.savedFilters;\n }\n\n public ngOnInit() {\n // Avoid ngChanges error\n setTimeout(() => {\n if (this.config.autofocus) {\n this.focus();\n }\n });\n\n this._initAutoReload();\n this._listenInputChanges();\n this._listenInternalItemsChange();\n this._initOverlay();\n }\n\n public ngOnDestroy() {\n this._destroyFilterDrawer();\n\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public focus() {\n this.keywordMatInput?.focus();\n }\n\n public updateSort(sort: ISortingChangeEvent) {\n this._filterItems.updateSort(sort);\n }\n\n /**\n *\n * Do update value of some field\n *\n * @param values - values for update\n *\n * To update text value just pass new text value\n *\n * public updateSelectValue(val) {\n * this.filterEl.updateValues({ keyword: val });\n * }\n *\n * To update select or observable select you could pass suitable value\n *\n * public updateSelectValue(val: number) {\n * this.filterEl.updateValues({ simple_select: val }, { observable_select: val });\n * }\n *\n * To update checkbox value just pass true/false as value\n *\n * public updateCheckox(val: boolean) {\n * this.filterEl.updateValues({ checkbox: val });\n * }\n *\n * To update range value just pass object with min&max object or just with one of targets\n *\n * Ex.: { min: 10, max 15 }, { min: 5 }, { max 5 }\n *\n * public updateRange(val) {\n * this.filterEl.updateValues({ range: val });\n * }\n *\n * To update autocomplete just pass object with name/value fields\n *\n * Ex.: { name: 'John Doe', value: 1 }\n *\n * public updateAutocomplete(val) {\n * this.filterEl.updateValues({ autocomplete_user_id: val });\n * }\n *\n * To update autocompletechips just pass:\n *\n * 1) object with name/value fields - will be appended to existing set of values\n *\n * { name: 'John Doe', value: 1 }\n *\n * 2) array of objects - will be appended to existing set of values\n *\n * [{ name: 'John Doe', value: 1 }, { name: 'Darya Filipova', value: 2 }]\n *\n * 3) null - clear existing set of values\n *\n * public updateAutocomplete(val) {\n * this.filterEl.updateValues({ autocompletechips_user_id: val });\n * }\n *\n */\n public updateValues(values) {\n Object.keys(values).forEach((key) => {\n const filterItem = this.items\n .find((item) => item.name === key);\n\n if (!filterItem) {\n return;\n }\n\n filterItem.model = values[key];\n });\n }\n\n public hide() {\n this.changeVisibility(false);\n }\n\n public show() {\n this.changeVisibility(true);\n }\n\n public changeVisibilityClick(value, event = null) {\n\n if (event) {\n event.stopPropagation();\n }\n\n this.changeVisibility(value);\n }\n\n public get itemValues(): any[] {\n return this.items\n .map((item) => item.value);\n }\n\n public get nonEmptyItemValues(): any[] {\n return this.items\n .filter((item) => item.value !== undefined)\n .map((item) => item.value);\n }\n\n public get hasItemValues(): boolean {\n return this.items\n .some((item) => item.value !== undefined);\n }\n\n public getItemValue(name: string) {\n const item = this.items\n .find((_item) => _item.name === name);\n\n return item?.value;\n }\n\n public showItem(name: string) {\n const item = this.getItem(name);\n\n if (item) {\n item.hide = false;\n\n this._filterItems.updateItemsVisiblity();\n }\n }\n\n public hideItem(name: string) {\n const item = this.getItem(name);\n\n if (!item) {\n return;\n }\n\n item.hide = true;\n\n this._filterItems.updateItemsVisiblity();\n }\n\n public clearItem(name: string) {\n const item = this.getItem(name);\n\n if (!item) {\n return;\n }\n\n item.clear();\n }\n\n public updateItemConfig(\n name: string,\n params: IUpdateFilterItemConfig,\n ): void {\n const item = this.getItem(name);\n\n if (!item) {\n return;\n }\n\n item.label = params.label ?? item.label;\n item.chipLabel = params.chipLabel ?? item.chipLabel;\n\n this._filterItems.updateItemsVisiblity();\n }\n\n public getItemValueChange$(name: string): Observable<any> | null {\n const item = this.items.find((i) => i.name === name);\n\n if (item) {\n return item.value$\n .pipe(\n map(() => {\n return item.model;\n }),\n );\n }\n\n return null;\n\n }\n\n public changeVisibility(state: boolean) {\n if (state === this.showFilterMenu) {\n return;\n }\n\n if (!state) {\n this.closed.emit();\n\n return this._destroyFilterDrawer();\n }\n\n if (!this.hasVisibleItemOrSorting) {\n return;\n }\n\n this._listenEscButton();\n\n this.opened.emit();\n\n this._filterOverlay.open();\n }\n\n public init() {\n const data = this._filterItems.valuesAsQuery();\n this._sort = this._filterItems.getSort();\n\n if (this.config.init) {\n this.config.init(data, this._sort, this);\n }\n\n this._updateChipsVisibility();\n\n this.items\n .forEach((item) => {\n item.init(item, this);\n });\n }\n\n public clear(event = null) {\n if (event) {\n event.stopPropagation();\n }\n\n this._filterItems.filtersClear();\n\n if (this.config.clear) {\n this.config.clear();\n }\n\n this.keyword = '';\n }\n\n /**\n * Close filter window and do change callback\n */\n public search(event) {\n this.changeVisibilityClick(false, event);\n }\n\n public reload(event = null) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const data = this._filterItems.valuesAsQuery();\n const el = this.reloadEl?.nativeElement;\n\n if(el) {\n el.style.transition = 'all 0.75s 0.0s';\n el.style.transform = 'rotate(360deg)';\n\n setTimeout(() => {\n el.style.transition = null;\n el.style.transform = null;\n }, 1000);\n }\n\n if (this.config.reload) {\n this.config.reload(data, this._filterItems.getSort());\n }\n }\n\n public getItem(name): BaseItem<any> {\n return this.items\n .find((item) => item.name === name);\n }\n\n public fetchQueryParams(): void {\n this._externalParams.fetchQueryParams();\n }\n\n /**\n * Call change callback and apply new filter values\n */\n public change() {\n const data = this._filterItems.valuesAsQuery();\n const sort = this._filterItems.getSort();\n\n const sortingChanged = ((!sort || !this._sort) && sort !== this._sort)\n || (sort && this._sort && !objectsAreEquals(this._sort, sort));\n\n if (sortingChanged) {\n this._sort = sort;\n\n if (this.config.sortChange) {\n this.config.sortChange(data, sort);\n }\n }\n\n if (this.config.change) {\n this.config.change(data, sort);\n }\n\n this._updateChipsVisibility();\n\n // visibility for actions can depend on filters state\n this._actions.updateActionsVisibility();\n }\n\n /**\n * Update filter actions config\n *\n * @param actions\n */\n public updateActions(actions: FsFilterAction[]): void {\n this._actions.initActions(actions);\n }\n\n /**\n * Show \"Filters\" button\n */\n public showFiltersBtn(): void {\n this._filtersBtnVisible$.next(true);\n }\n\n /**\n * Hide \"Filters\" button\n */\n public hideFiltersBtn(): void {\n this._filtersBtnVisible$.next(false);\n }\n\n /**\n * Show \"Keyword\" field if it present\n */\n public showKeywordField(): void {\n this._keywordVisible$.next(true);\n }\n\n /**\n * Hide \"Keyword\" field if it present\n */\n public hideKeywordField(): void {\n this._keywordVisible$.next(false);\n }\n\n /**\n * Go through actions and check show() callback and update visible actions\n */\n public updateActionsVisibility(): void {\n this._actions.updateActionsVisibility();\n }\n\n /**\n * Go through actions and check disabled() callback and update disabled state\n */\n public updateDisabledState(): void {\n this._actions.updateDisabledState();\n }\n\n public setItems(items: IFilterConfigItem[]) {\n this._filterItems.destroyItems();\n\n this.config.items = items;\n this._filterItems.setConfig(this._config);\n this._externalParams.initItems();\n\n this._syncSearchInputWithKeyword();\n }\n\n public keywordChange(keyword) {\n this._keyword$.next(keyword);\n }\n\n public updateSortings(items: SortItem[]): void {\n this._filterItems.updateSortingItemsValues(items);\n }\n\n private _initFilterWithConfig(config: FilterConfig) {\n if (this.config) {\n this._filterItems.destroyItems();\n }\n\n config = {\n ...(this._defaultConfig || {}),\n ...config,\n };\n\n this._config = new FsFilterConfig(config);\n this._actions.setConfig(this._config);\n this._filterItems.setConfig(this._config);\n this._externalParams.setConfig(this._config);\n\n this._syncSearchInputWithKeyword();\n\n if (this.config.reloadWhenConfigChanged) {\n this.change();\n }\n }\n\n private _destroyFilterDrawer() {\n this._filterOverlay.close();\n }\n\n private _updateWindowWidth() {\n this.windowDesktop = window.innerWidth > 1200;\n }\n\n private _listenEscButton() {\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'keyup')\n .pipe(\n filter((event: KeyboardEvent) => event.code === 'Escape'),\n takeUntil(this.closed),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._zone.run(() => {\n this.changeVisibility(false);\n });\n });\n });\n }\n\n private _listenWindowResize() {\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(100),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._zone.run(() => {\n this._updateWindowWidth();\n });\n });\n });\n }\n\n private _initAutoReload() {\n if(this.config.autoReload) {\n interval(this.config.autoReload.seconds * 1000)\n .pipe(\n filter(() => this.autoReload),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.reload(null);\n });\n }\n }\n\n private _listenInputChanges() {\n this._keyword$\n .pipe(\n debounceTime(200),\n distinctUntilChanged(),\n takeUntil(this._destroy$),\n )\n .subscribe((value) => {\n const keywordItem = this._filterItems.keywordItem;\n keywordItem.model = value;\n this.change();\n });\n }\n\n private _syncSearchInputWithKeyword(): void {\n const keywordItem = this._filterItems.keywordItem;\n if (keywordItem) {\n this.keyword = keywordItem.model;\n this.searchPlaceholder = keywordItem.label as string || 'Search';\n }\n }\n\n private _listenInternalItemsChange() {\n this._filterItems\n .itemsChange$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.change();\n });\n }\n\n private _initOverlay() {\n this._filterOverlay.setClearFn(this.clear.bind(this));\n this._filterOverlay.setDoneFn(this.hide.bind(this));\n }\n\n // We may need some time to recieve external params and after that ready can be emitted\n private _listenWhenFilterReady() {\n combineLatest(\n [\n this._externalParams.pending$,\n this.itemsReady$,\n ])\n .pipe(\n filter(([pendingParams, itemsReady]) => !pendingParams && itemsReady),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.init();\n this._syncSearchInputWithKeyword();\n\n this.ready.emit();\n });\n }\n\n private _updateChipsVisibility() {\n const hasFilterChips = this._filterItems.items\n .some((item: BaseItem<any>) => {\n return item.isChipVisible;\n });\n\n this._hasFilterChips$.next(hasFilterChips);\n }\n}\n","<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"statusBar\">\n <div class=\"filter-status-container\" [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div class=\"filter-status\" #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async) && !keywordItem?.hide \">\n <mat-form-field\n [floatLabel]=\"'never'\"\n class=\"form-field-padless\"\n [ngClass]=\"search\"\n appearance=\"outline\">\n <span matPrefix>\n <mat-icon matPrefix>search</mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n\n<ng-template #filterToolbar>\n <div class=\"filter-toobar\">\n <ng-container *ngIf=\"filtersBtnVisible$ | async\">\n <ng-container *ngIf=\"hasVisibleItemOrSorting\">\n <a\n mat-button\n class=\"filters-button\"\n [ngClass]=\"{\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\n 'mat-button': config.button.style === 'basic' && config.button.label,\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label\n }\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n <mat-icon *ngIf=\"config.button.icon\">{{config.button.icon}}</mat-icon>\n {{ config.button.label }}\n </a>\n </ng-container>\n </ng-container> \n <ng-container *ngIf=\"config.reload\">\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"reload\">\n <mat-icon #reloadEl>refresh</mat-icon>\n </a>\n </ng-container>\n <ng-container *ngIf=\"config.autoReload\">\n <mat-slide-toggle \n name=\"autoReload\" \n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n Auto refresh\n </mat-slide-toggle>\n </ng-container>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, } from '@angular/core';\n\n@Component({\n selector: 'filter-item-select-backdrop',\n styleUrls: ['./backdrop.component.scss'],\n templateUrl: './backdrop.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectBackdropComponent {\n constructor() {}\n}\n","","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n} from '@angular/core';\n\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport { FilterRemoteOrder, IFilterSavedFilter } from '../../../interfaces/saved-filters.interface';\nimport { SavedFiltersController } from '../../../services/external-params/saved-filters-controller.service';\n\n\n@Component({\n templateUrl: './saved-filter-manage.component.html',\n styleUrls: ['./saved-filter-manage.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterSavedFilterManageComponent {\n\n public savedFilters: IFilterSavedFilter[];\n\n private _savedFiltersController: SavedFiltersController;\n private _filterRemoteOrder: FilterRemoteOrder;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data,\n private _cdRef: ChangeDetectorRef,\n ) {\n this._savedFiltersController = this.data.savedFiltersController;\n this.savedFilters = [...this._savedFiltersController.savedFilters];\n }\n\n public remove(savedFilter: IFilterSavedFilter) {\n this._savedFiltersController.delete(savedFilter)\n .subscribe(() => {\n this.savedFilters = [...this._savedFiltersController.savedFilters];\n this._cdRef.markForCheck();\n });\n }\n\n public drop(event: CdkDragDrop<any[]>) {\n moveItemInArray(this.savedFilters, event.previousIndex, event.currentIndex);\n\n this._savedFiltersController.order(this.savedFilters)\n .subscribe();\n }\n\n}\n","<h1 mat-dialog-title>\n Manage saved filters\n</h1>\n<div mat-dialog-content>\n <div\n cdkDropList \n [cdkDropListData]=\"savedFilters\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"drop($event)\"> \n <ng-container \n *ngFor=\"let savedFilter of savedFilters\">\n <div class=\"chip-container\">\n <fs-chip \n cdkDrag\n (removed)=\"remove(savedFilter)\">\n {{savedFilter.name}}\n </fs-chip>\n </div>\n </ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button \n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { Observable } from 'rxjs';\n\nimport { IFilterSavedFilter } from '../../../interfaces/saved-filters.interface';\nimport { ExternalParamsController } from '../../../services/external-params-controller.service';\nimport { SavedFiltersController } from '../../../services/external-params/saved-filters-controller.service';\nimport { FsFilterItemsStore } from '../../../services/items-store.service';\nimport { FsFilterSavedFilterManageComponent } from '../saved-filter-manage';\n\n\n@Component({\n selector: 'fs-filter-saved-filters-menu',\n templateUrl: './saved-filters-menu.component.html',\n styleUrls: ['./saved-filters-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsSavedFiltersMenuComponent {\n\n @Output()\n public clear = new EventEmitter<void>();\n\n constructor(\n private _itemsStore: FsFilterItemsStore,\n private _externalParams: ExternalParamsController,\n private _savedFilters: SavedFiltersController,\n private _dialog: MatDialog,\n ) {}\n\n public get filters$(): Observable<IFilterSavedFilter[]> {\n return this._savedFilters.savedFilters$;\n }\n\n public get activeFilter$(): Observable<IFilterSavedFilter> {\n return this._savedFilters.activeFilter$;\n }\n\n public selectFilter(savedFilter: IFilterSavedFilter): void {\n this._externalParams.setActiveSavedFilter(savedFilter);\n }\n\n public removeActiveFilter(): void {\n this._itemsStore.filtersClear();\n this._externalParams.setActiveSavedFilter(null);\n\n this.clear.emit();\n }\n\n public manageFilters(): void {\n this._dialog.open(FsFilterSavedFilterManageComponent, {\n data: {\n savedFiltersController: this._savedFilters,\n },\n });\n }\n}\n","<a [fsMenuTriggerFor]=\"menu\" class=\"selector\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\n\n<fs-menu #menu>\n <ng-container *ngIf=\"activeFilter$ | async\">\n <ng-template fs-menu-item (click)=\"removeActiveFilter()\">\n None\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"(filters$ | async).length !==0\">\n <ng-container *ngFor=\"let filter of filters$ | async\">\n <ng-template fs-menu-item (click)=\"selectFilter(filter)\">\n {{ filter.name }}\n </ng-template>\n </ng-container>\n <ng-template fs-menu-divider-item></ng-template>\n </ng-container>\n <ng-template \n fs-menu-item \n class=\"saved-filter-last-item\" \n (click)=\"manageFilters()\">\n Manage\n </ng-template>\n</fs-menu>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FsAutocompleteModule } from '@firestitch/autocomplete';\nimport { FsAutocompleteChipsModule } from '@firestitch/autocomplete-chips';\nimport { FsChipModule } from '@firestitch/chip';\nimport { FsClearModule } from '@firestitch/clear';\nimport { FsCommonModule } from '@firestitch/common';\nimport { FsDatePickerModule } from '@firestitch/datepicker';\nimport { FsFileModule } from '@firestitch/file';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsMenuModule } from '@firestitch/menu';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { FsScrollModule } from '@firestitch/scroll';\nimport { FsSelectButtonModule } from '@firestitch/selectbutton';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsStore, FsStoreModule } from '@firestitch/store';\n\nimport { FsFilterActionButtonComponent } from './components/action-button/action-button.component';\nimport { FsFilterActionKebabActionsComponent } from './components/action-kebab-actions/action-kebab-actions.component';\nimport { FsFilterActionsComponent } from './components/actions/actions.component';\nimport { FsFilterChipContentComponent } from './components/filter-chip-content/filter-chip-content.component';\nimport { FsFilterChipComponent } from './components/filter-chip/filter-chip.component';\nimport { FsFilterChipsComponent } from './components/filter-chips/filter-chips.component';\nimport { FsFilterDrawerActionsComponent } from './components/filter-drawer-actions/filter-drawer-actions.component';\nimport { FilterDrawerComponent } from './components/filter-drawer/filter-drawer.component';\nimport { FilterComponent } from './components/filter/filter.component';\nimport { AutocompleteComponent } from './components/filters-item/autocomplete/autocomplete.component';\nimport { AutocompletechipsComponent } from './components/filters-item/autocompletechips/autocompletechips.component';\nimport { BaseItemComponent } from './components/filters-item/base-item/base-item.component';\nimport { CheckboxComponent } from './components/filters-item/checkbox/checkbox.component';\nimport { ChipsComponent } from './components/filters-item/chips/chips.component';\nimport { DateRangeComponent } from './components/filters-item/date-range/date-range.component';\nimport { DateComponent } from './components/filters-item/date/date.component';\nimport { FilterItemComponent } from './components/filters-item/filter-item.component';\nimport { RangeComponent } from './components/filters-item/range/range.component';\nimport { SelectBackdropComponent } from './components/filters-item/select/backdrop/backdrop.component';\nimport { SelectGroupsComponent } from './components/filters-item/select/groups/groups.component';\nimport { SelectMultipleComponent } from './components/filters-item/select/multiple/multiple.component';\nimport { SelectComponent } from './components/filters-item/select/select.component';\nimport { SelectSimpleComponent } from './components/filters-item/select/simple/simple.component';\nimport { TextComponent } from './components/filters-item/text/text.component';\nimport { WeekComponent } from './components/filters-item/week/week.component';\nimport { FsFilterSavedFilterManageComponent } from './components/saved-filter';\nimport { FsFilterSavedFilterEditComponent } from './components/saved-filter/saved-filter-edit/saved-filter-edit.component';\nimport { FsSavedFiltersMenuComponent } from './components/saved-filter/saved-filters-menu/saved-filters-menu.component';\nimport { FocusToItemDirective } from './directives/focus-to-item/focus-to-item.directive';\nimport { FilterStatusBarDirective } from './directives/status-bar/status-bar.directive';\nimport { FS_FILTER_CONFIG } from './injectors/filter-config';\nimport { FilterConfig } from './interfaces/config.interface';\nimport { FsFilterIsolateValues } from './pipes/remove-isolate-value.pipe';\n\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n \n DragDropModule,\n \n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatChipsModule,\n MatCheckboxModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatDialogModule,\n MatTooltipModule,\n MatSlideToggleModule,\n\n FsChipModule,\n FsCommonModule,\n FsStoreModule,\n FsDatePickerModule,\n FsLabelModule,\n FsAutocompleteModule,\n FsAutocompleteChipsModule,\n FsScrollModule,\n FsMenuModule,\n FsSkeletonModule,\n FsFormModule,\n FsFileModule,\n FsSelectButtonModule,\n FsClearModule,\n FsPopoverModule,\n\n PortalModule,\n ],\n declarations: [\n BaseItemComponent,\n FilterComponent,\n FilterItemComponent,\n FsFilterChipsComponent,\n SelectComponent,\n SelectGroupsComponent,\n SelectSimpleComponent,\n SelectMultipleComponent,\n ChipsComponent,\n TextComponent,\n WeekComponent,\n RangeComponent,\n AutocompleteComponent,\n AutocompletechipsComponent,\n DateComponent,\n DateRangeComponent,\n CheckboxComponent,\n FilterDrawerComponent,\n SelectBackdropComponent,\n FsFilterChipComponent,\n FsFilterChipContentComponent,\n FsFilterDrawerActionsComponent,\n FsFilterSavedFilterEditComponent,\n FsSavedFiltersMenuComponent,\n FsFilterActionsComponent,\n FsFilterActionButtonComponent,\n FsFilterActionKebabActionsComponent,\n FsFilterSavedFilterManageComponent,\n\n FilterStatusBarDirective,\n FocusToItemDirective,\n\n // Pipes\n FsFilterIsolateValues,\n ],\n providers: [\n FsStore,\n ],\n exports: [\n FilterComponent,\n FilterStatusBarDirective,\n FsSavedFiltersMenuComponent,\n ],\n})\nexport class FsFilterModule {\n public static forRoot(config: FilterConfig = {}): ModuleWithProviders<FsFilterModule> {\n return {\n ngModule: FsFilterModule,\n providers: [\n {\n provide: FS_FILTER_CONFIG,\n useValue: {\n button: {\n label: '',\n },\n ...config,\n } as FilterConfig,\n },\n ],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["arrayList","filter","i3","i4.FsFilterItemsStore","i5","i1","i2.FsFilterItemsStore","i2","i4","i6","i7","i8","i1.FsFilterItemsStore","i2.PersistanceParamsController","i3.QueryParamsController","i4.SavedFiltersController","i9","i11.FsFilterActionButtonComponent","i12.FsFilterActionKebabActionsComponent","i1.FocusControllerService","i4.FsFilterChipContentComponent","i2.FsFilterChipComponent","i1.ExternalParamsController","i7.FocusToItemDirective","i8.FocusToItemDirective","i9.FsFilterIsolateValues","i4.SelectGroupsComponent","i5.SelectSimpleComponent","i6.SelectMultipleComponent","i5.FocusToItemDirective","i6.FocusToItemDirective","i4.FocusToItemDirective","arrayRemove","i2.SelectComponent","i3.ChipsComponent","i4.TextComponent","i5.WeekComponent","i6.RangeComponent","i7.AutocompleteComponent","i8.AutocompletechipsComponent","i9.DateComponent","i10.DateRangeComponent","i11.CheckboxComponent","i6.FilterItemComponent","i7.FsFilterDrawerActionsComponent","i2.FocusControllerService","i1.FsFilterOverlayService","i2.ExternalParamsController","i3.FsFilterItemsStore","i4.ActionsController","i5.SavedFiltersController","i10","i11","i13","i15.FsFilterChipsComponent","i16.FsFilterActionsComponent","i3.SavedFiltersController"],"mappings":"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"}},"fesm2015":{"code":"import * as i0 from '@angular/core';\nimport { Injectable, Optional, Component, ChangeDetectionStrategy, Inject, Input, EventEmitter, Output, InjectionToken, Directive, Self, ViewChild, Pipe, HostListener, ElementRef, ContentChild, HostBinding, NgModule } from '@angular/core';\nimport { BehaviorSubject, Subject, isObservable, forkJoin, of, timer, combineLatest, fromEvent, merge, interval } from 'rxjs';\nimport { tap, finalize, take, takeUntil, debounceTime, filter as filter$1, distinctUntilChanged, switchMap, mapTo, startWith, map, delay, skip } from 'rxjs/operators';\nimport { filter, isArrayEqual, list, isEmpty, getNormalizedPath, remove, FsCommonModule } from '@firestitch/common';\nimport { isObject, isFunction, clone, toString, isString, pickBy } from 'lodash-es';\nimport { simpleFormat, format } from '@firestitch/date';\nimport { isValid, isDate, parseISO } from 'date-fns';\nimport * as i3$3 from '@firestitch/datepicker';\nimport { formatPeriodObject, FsDatePickerModule } from '@firestitch/datepicker';\nimport * as i1 from '@firestitch/store';\nimport { FsPersistanceStore, FsStoreModule, FsStore } from '@firestitch/store';\nimport * as i2 from '@angular/router';\nimport { RouterModule } from '@angular/router';\nimport * as i1$1 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i1$2 from '@angular/material/dialog';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport * as i6 from '@firestitch/drawer';\nimport * as i2$1 from '@angular/forms';\nimport { UntypedFormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport * as i3 from '@angular/material/form-field';\nimport * as i4 from '@angular/material/input';\nimport { MatInput, MatInputModule } from '@angular/material/input';\nimport * as i4$1 from '@angular/material/select';\nimport { MatSelectModule } from '@angular/material/select';\nimport * as i5 from '@angular/material/core';\nimport * as i3$1 from '@angular/material/button';\nimport { MatButtonModule } from '@angular/material/button';\nimport * as i9 from '@firestitch/form';\nimport { FsFormModule } from '@firestitch/form';\nimport * as i2$3 from '@angular/cdk/drag-drop';\nimport { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';\nimport { ComponentPortal, PortalInjector, PortalModule } from '@angular/cdk/portal';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport * as i6$2 from '@angular/material/checkbox';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport * as i2$2 from '@angular/material/icon';\nimport { MatIconModule } from '@angular/material/icon';\nimport * as i12 from '@angular/material/slide-toggle';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport * as i4$2 from '@firestitch/autocomplete';\nimport { FsAutocompleteModule } from '@firestitch/autocomplete';\nimport * as i5$1 from '@firestitch/autocomplete-chips';\nimport { FsAutocompleteChipsModule } from '@firestitch/autocomplete-chips';\nimport * as i3$2 from '@firestitch/chip';\nimport { FsChipModule } from '@firestitch/chip';\nimport * as i14 from '@firestitch/clear';\nimport { FsClearModule } from '@firestitch/clear';\nimport * as i8 from '@firestitch/file';\nimport { FsFileModule } from '@firestitch/file';\nimport * as i4$3 from '@firestitch/label';\nimport { FsLabelModule } from '@firestitch/label';\nimport * as i6$1 from '@firestitch/menu';\nimport { FsMenuModule } from '@firestitch/menu';\nimport * as i10 from '@firestitch/popover';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { FsScrollModule } from '@firestitch/scroll';\nimport * as i9$1 from '@firestitch/selectbutton';\nimport { FsSelectButtonModule } from '@firestitch/selectbutton';\nimport * as i5$2 from '@firestitch/skeleton';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport * as i1$3 from '@angular/cdk/overlay';\nimport { OverlayConfig } from '@angular/cdk/overlay';\nimport * as i1$4 from '@angular/cdk/layout';\nimport * as i3$4 from '@firestitch/html';\n\nfunction objectsAreEquals(obj1, obj2) {\n const oldKeys = Object.keys(obj1);\n const currKeys = Object.keys(obj2);\n if (oldKeys.length !== currKeys.length) {\n return false;\n }\n for (const key in obj1) {\n if (obj1.hasOwnProperty(key)) {\n const oldItem = obj1[key];\n const currItem = obj2[key];\n const isArrays = Array.isArray(oldItem) && Array.isArray(currItem);\n const isObjects = isObject(oldItem) && isObject(currItem);\n if (isArrays && !arraysAreEquals(oldItem, currItem)) {\n return false;\n }\n else if (isObjects && !objectsAreEquals(oldItem, currItem)) {\n return false;\n }\n else if (!isArrays && !isObjects && oldItem !== currItem) {\n return false;\n }\n }\n }\n return true;\n}\nfunction arraysAreEquals(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (const el of arr1) {\n if (arr2.indexOf(el) === -1) {\n return false;\n }\n }\n return true;\n}\n\nvar ItemType;\n(function (ItemType) {\n ItemType[\"Text\"] = \"text\";\n ItemType[\"Select\"] = \"select\";\n ItemType[\"Range\"] = \"range\";\n ItemType[\"Date\"] = \"date\";\n ItemType[\"DateTime\"] = \"datetime\";\n ItemType[\"DateRange\"] = \"daterange\";\n ItemType[\"Week\"] = \"week\";\n ItemType[\"DateTimeRange\"] = \"datetimerange\";\n ItemType[\"AutoComplete\"] = \"autocomplete\";\n ItemType[\"AutoCompleteChips\"] = \"autocompletechips\";\n ItemType[\"Checkbox\"] = \"checkbox\";\n ItemType[\"Chips\"] = \"chips\";\n ItemType[\"Keyword\"] = \"keyword\";\n})(ItemType || (ItemType = {}));\n\nclass BaseItem {\n constructor(itemConfig, _additionalConfig, _filter) {\n this._additionalConfig = _additionalConfig;\n this._filter = _filter;\n this._pendingValues = false;\n this._pendingDefaultValue = false;\n this._initializedValues = false;\n this._loading$ = new BehaviorSubject(false);\n this._value$ = new BehaviorSubject(null);\n this._valueChange$ = new Subject();\n this._values$ = new BehaviorSubject(null);\n this._destroy$ = new Subject();\n this._clear$ = new Subject();\n this._type = itemConfig.type;\n this._parseConfig(itemConfig);\n }\n get filter() {\n return this._filter;\n }\n get isTypeAutocomplete() {\n return this.type === ItemType.AutoComplete;\n }\n get isTypeAutocompleteChips() {\n return this.type === ItemType.AutoCompleteChips;\n }\n get isTypeChips() {\n return this.type === ItemType.Chips;\n }\n get isTypeCheckbox() {\n return this.type === ItemType.Checkbox;\n }\n get isTypeSelect() {\n return this.type === ItemType.Select;\n }\n get isTypeDate() {\n return this.type === ItemType.Date;\n }\n get isTypeDateRange() {\n return this.type === ItemType.DateRange;\n }\n get isTypeRange() {\n return this.type === ItemType.Range;\n }\n get isTypeDateTimeRange() {\n return this.type === ItemType.DateTimeRange;\n }\n get isTypeDateTime() {\n return this.type === ItemType.DateTime;\n }\n get isTypeKeyword() {\n return this.type === ItemType.Keyword;\n }\n get isChipVisible() {\n return !!this.model;\n }\n get destroy$() {\n return this._destroy$.asObservable();\n }\n get type() {\n return this._type;\n }\n get hasPendingValues() {\n return this._pendingValues;\n }\n get hasPendingDefaultValue() {\n return this._pendingDefaultValue;\n }\n get model() {\n return this._model;\n }\n set model(value) {\n this._setModel(value);\n this.valueChanged();\n }\n set values(values) {\n this._values$.next(values);\n }\n get values() {\n return this._values$.getValue();\n }\n get values$() {\n return this._values$.asObservable();\n }\n get valueChange$() {\n return this._valueChange$.asObservable();\n }\n get value$() {\n return this._value$.asObservable();\n }\n get clear$() {\n return this._clear$.asObservable();\n }\n get initialized() {\n return this._initialized;\n }\n get loading$() {\n return this._loading$.asObservable();\n }\n get loading() {\n return this._loading$.getValue();\n }\n set loading(value) {\n this._loading$.next(value);\n }\n get _initialized() {\n return !this._pendingDefaultValue && !this._pendingValues && this._initializedValues;\n }\n valueChanged() {\n this._value$.next(this.value);\n if (this.change) {\n this.change(this, this._filter);\n }\n if (this.initialized) {\n this._valueChange$.next();\n }\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n if (Array.isArray(value)) {\n params[this.name] = value.join(',');\n }\n else {\n params[name] = value;\n }\n return params;\n }\n get persistanceObject() {\n return this.queryObject;\n }\n loadDefaultValue() {\n this._pendingDefaultValue = true;\n return this.defaultValueFn()\n .pipe(tap((value) => {\n this.defaultValue = value;\n this._initDefaultModel();\n }), finalize(() => {\n this._pendingDefaultValue = false;\n }));\n }\n initValues(persistedValue) {\n this._initializedValues = false;\n this.persistedValue = persistedValue;\n this._initDefaultModel();\n const isAutocomplete = this.type === ItemType.AutoComplete || this.type === ItemType.AutoCompleteChips;\n if (this._valuesFn && !isAutocomplete) {\n const valuesResult = this._valuesFn(null, this._filter);\n if (isObservable(valuesResult)) {\n this._pendingValues = true;\n }\n else {\n this.values = valuesResult;\n this._init();\n this._initializedValues = true;\n }\n }\n else {\n this._init();\n this._initializedValues = true;\n }\n }\n loadAsyncValues(reload = true) {\n if (reload || (!this.loading && this.hasPendingValues)) {\n this.loading = true;\n this._valuesFn(null, this._filter)\n .pipe(take(1), takeUntil(this._destroy$))\n .subscribe((values) => {\n this.values = values;\n this._pendingValues = false;\n this.loading = false;\n this._init();\n this._validateModel();\n this._initializedValues = true;\n });\n }\n }\n clear(defaultValue = undefined) {\n if (this.isTypeRange || this.isTypeDateRange || this.isTypeDateTimeRange) {\n console.warn(`\n Filter ${this.name} can not be cleared with .clear() method!\n Use special .clearRange() or clearDateRange() instead.\n `);\n }\n this._clear$.next(defaultValue);\n this._clearValue(defaultValue);\n }\n getChipsContent(type) {\n return '';\n }\n destroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n _setModel(value) {\n this._model = value;\n }\n _parseConfig(item) {\n var _a, _b, _c;\n this.name = item.name;\n this.label = item.label;\n this.chipLabel = item.chipLabel;\n if (typeof item.default === 'function') {\n this.defaultValueFn = item.default;\n }\n else {\n this.defaultValue = item.default;\n }\n this.change = item.change;\n this.init = item.init || ((_) => {\n //\n });\n this.hide = item.hide;\n this.showClear = (_a = item.clear) !== null && _a !== void 0 ? _a : true;\n this.persistanceDisabled = (_b = item.disablePersist) !== null && _b !== void 0 ? _b : false;\n this.queryParamsDisabled = (_c = item.disableQueryParams) !== null && _c !== void 0 ? _c : false;\n if (isFunction(item.values)) {\n this._valuesFn = item.values;\n }\n else {\n this.values = item.values;\n }\n }\n _initDefaultModel() {\n var _a;\n const model = (_a = this.persistedValue) !== null && _a !== void 0 ? _a : this.defaultValue;\n if (model !== undefined) {\n this._setModel(model);\n }\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : undefined;\n }\n}\n\nclass BaseSelectItem extends BaseItem {\n _parseConfig(item) {\n this.multiple = item.multiple;\n this.children = item.children;\n // TODO nullish\n if (item.isolate) {\n this.isolate = Object.assign(Object.assign({}, item.isolate), { enabled: false });\n }\n super._parseConfig(item);\n }\n _init() {\n if (!Array.isArray(this.values)) {\n this.values = [];\n }\n // TODO Refactor\n if (this.isolate) {\n this.values = this.values.filter((item) => {\n if (Array.isArray(this.isolate.value)) {\n return this.isolate.value.indexOf(item.value) === -1;\n }\n else {\n return item.value !== this.isolate.value;\n }\n });\n }\n }\n _clearValue(defaultValue = undefined) {\n if (this.isolate) {\n this.isolate.enabled = false;\n }\n }\n}\n\nclass MultipleSelectItem extends BaseSelectItem {\n constructor(itemConfig, _persistedValues, _filter) {\n super(itemConfig, _persistedValues, _filter);\n }\n get value() {\n var _a;\n let value = clone(this.model);\n if (this.isolateOptionNotSelected) {\n value = (_a = this.values) === null || _a === void 0 ? void 0 : _a.map((v) => v.value);\n }\n else if (!Array.isArray(value) || value.length === 0 || value.indexOf('__all') > -1) {\n value = undefined;\n }\n return value;\n }\n get isChipVisible() {\n return Array.isArray(this.model) && this.model.length > 0;\n }\n get isolateOptionNotSelected() {\n const modelValue = this.model;\n const isolate = this.isolate;\n return isolate && !isolate.enabled && (modelValue === null || modelValue === void 0 ? void 0 : modelValue.length) === 0;\n }\n getChipsContent(type = null) {\n const options = this.model.reduce((acc, key) => {\n const itemValue = this.values.find((val) => val.value === key);\n let itemLabel;\n if (itemValue) {\n itemLabel = itemValue.name;\n }\n else if (this.isolate && this.isolate.enabled) {\n itemLabel = this.isolate.label;\n }\n if (!acc.includes(itemLabel)) {\n acc.push(itemLabel);\n }\n return acc;\n }, []);\n return options.join(', ');\n }\n _init() {\n super._init();\n const values = this.values.map((itemv) => itemv.value);\n const wrongDefaultValue = !this.model && !Array.isArray(this.defaultValue);\n /**\n * When multiple select is in isolate mode and have no options selected\n * it should send to the server all it's possible values,\n * but should not show them as selected in interfaces as well as in query params & persistance\n *\n * Code below prevents filling model with values from query params if query params contain all possible values\n */\n const isolate = !wrongDefaultValue\n && !this.isolateOptionNotSelected\n && arraysAreEquals(this.model, values);\n if (wrongDefaultValue || isolate) {\n this.model = [];\n }\n }\n _setModel(value) {\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (isNaN(val)) {\n return val;\n }\n return +val;\n });\n }\n super._setModel(value);\n }\n _validateModel() {\n const possibleValues = filter(this.model || [], (item) => {\n return this.values.find((value) => {\n return value.value === item;\n });\n });\n if (!isArrayEqual(this.model, possibleValues)) {\n this.model = possibleValues;\n }\n }\n _clearValue(defaultValue = undefined) {\n super._clearValue(defaultValue);\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : [];\n }\n}\n\nconst QUERY_PARAM_DELIMITER = ':';\n\nfunction filterToQueryParam(value, name) {\n return `${encodeURIComponent(value)}${QUERY_PARAM_DELIMITER}${encodeURIComponent(name)}`;\n}\nfunction filterFromQueryParam(param) {\n const parts = param.split(QUERY_PARAM_DELIMITER);\n return [decodeURIComponent(parts[0]), decodeURIComponent(parts[1])];\n}\n\nfunction buildQueryParams(flattenedParams, items) {\n items\n .forEach((filterItem) => {\n if (filterItem instanceof MultipleSelectItem && filterItem.isolate) {\n if (filterItem.multiple && filterItem.value) {\n const isolated = list(filterItem.values, 'value').sort();\n const value = filterItem.value.sort();\n if (arraysAreEquals(value, isolated)) {\n flattenedParams[filterItem.name] = null;\n }\n }\n }\n if (filterItem.isTypeAutocomplete) {\n if (isObject(filterItem.model)) {\n flattenedParams[filterItem.name] = filterToQueryParam(filterItem.model.value, filterItem.model.name);\n }\n }\n else if (filterItem.isTypeAutocompleteChips || filterItem.isTypeChips) {\n if (Array.isArray(filterItem.model) && filterItem.model.length) {\n flattenedParams[filterItem.name] = filterItem.model.map((item) => {\n return filterToQueryParam(item.value, item.name);\n }).join(',');\n }\n }\n });\n return flattenedParams;\n}\n\nclass BaseAutocompleteItem extends BaseItem {\n get valuesFn() {\n return this._valuesFn;\n }\n _validateModel() {\n //\n }\n _parseConfig(item) {\n var _a;\n this.fetchOnFocus = (_a = item.fetchOnFocus) !== null && _a !== void 0 ? _a : true;\n super._parseConfig(item);\n }\n}\n\nclass AutocompleteChipsItem extends BaseAutocompleteItem {\n static create(config, filter) {\n return new AutocompleteChipsItem(config, null, filter);\n }\n get value() {\n if (Array.isArray(this.model) && this.model.length === 0) {\n return undefined;\n }\n return clone(this.model);\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n if (Array.isArray(value)) {\n params[this.name] = value\n .filter((item) => !!item.value)\n .map((item) => item.value)\n .join(',');\n }\n else {\n params[name] = value;\n }\n return params;\n }\n get isChipVisible() {\n return Array.isArray(this.model) && this.model.length > 0;\n }\n getChipsContent() {\n return this.model\n .reduce((acc, i) => {\n acc.push(i.name);\n return acc;\n }, [])\n .join(', ');\n }\n _init() {\n if (this.model === undefined) {\n this._model = [];\n }\n }\n _parseConfig(item) {\n var _a;\n this.chipImage = (_a = item.chipImage) !== null && _a !== void 0 ? _a : 'image';\n this.chipIcon = item.chipIcon;\n this.chipIconColor = item.chipIconColor;\n this.chipColor = item.chipColor;\n this.chipBackground = item.chipBackground;\n this.chipClass = item.chipClass;\n super._parseConfig(item);\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : [];\n this.search = '';\n }\n _setModel(value) {\n super._setModel(value || []);\n }\n}\n\nclass AutocompleteItem extends BaseAutocompleteItem {\n static create(config, filter) {\n return new AutocompleteItem(config, null, filter);\n }\n get value() {\n let value = clone(this.model);\n if (!this.model || this.model.value === undefined) {\n return undefined;\n }\n value = this.model.value;\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n params[name] = value;\n return params;\n }\n getChipsContent() {\n return this.model ? this.model.name : '';\n }\n _init() {\n //\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : undefined;\n this.search = '';\n }\n}\n\nclass CheckboxItem extends BaseItem {\n static create(config, filter) {\n return new CheckboxItem(config, null, filter);\n }\n get isTypeCheckbox() {\n return true;\n }\n get isChipVisible() {\n return this.value === this.checked;\n }\n get value() {\n const value = this.model ? this.checked : this.unchecked;\n if (!value) {\n return undefined;\n }\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n params[name] = this.model ? value : undefined;\n return params;\n }\n getChipsContent(type = null) {\n return this.label;\n }\n _validateModel() {\n //\n }\n _parseConfig(item) {\n this.checked = item.checked;\n this.unchecked = item.unchecked;\n this.checked = item.checked ? toString(item.checked) : true;\n this.unchecked = item.unchecked ? toString(item.unchecked) : false;\n this.defaultValue = item.default === undefined ? this.unchecked : toString(this.defaultValue);\n super._parseConfig(item);\n }\n _init() {\n if (this.model === undefined) {\n this._model = this.checked === this.defaultValue;\n }\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : false;\n }\n}\n\nclass ChipsItem extends BaseItem {\n static create(config, filter) {\n return new ChipsItem(config, null, filter);\n }\n get isTypeChips() {\n return true;\n }\n get value() {\n const value = clone(this.model);\n if (Array.isArray(value) && value.length === 0) {\n return undefined;\n }\n return value;\n }\n get isChipVisible() {\n return !!this.value;\n }\n get queryObject() {\n if (!this.value) {\n return {};\n }\n const value = this.value\n .map((item) => item.value)\n .join(',');\n const name = this.name;\n return {\n [name]: value,\n };\n }\n get persistanceObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n if (Array.isArray(value)) {\n params[name] = value.join(',');\n }\n else {\n params[name] = undefined;\n }\n return params;\n }\n getChipsContent() {\n return this.model\n .reduce((acc, i) => {\n acc.push(i.name);\n return acc;\n }, [])\n .join(', ');\n }\n _validateModel() {\n //\n }\n _setModel(value) {\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (isNaN(val)) {\n return val;\n }\n return +val;\n });\n }\n this._model = value;\n }\n _parseConfig(item) {\n var _a;\n this.multiple = (_a = item.multiple) !== null && _a !== void 0 ? _a : true;\n super._parseConfig(item);\n }\n _init() {\n if (!Array.isArray(this.values)) {\n this.values = [];\n }\n if (this.model && Array.isArray(this.model) && this.values.length) {\n if (Number.isInteger(this.model[0])) {\n this._model = this.model.map((id) => {\n return this.values.find((value) => value.value === id);\n });\n }\n }\n if (this.model === undefined) {\n this._model = [];\n }\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : [];\n }\n}\n\nvar ItemDateMode;\n(function (ItemDateMode) {\n ItemDateMode[\"Calendar\"] = \"calendar\";\n ItemDateMode[\"ScrollMonthYear\"] = \"monthyear\";\n ItemDateMode[\"ScrollMonthDayYear\"] = \"monthdayyear\";\n})(ItemDateMode || (ItemDateMode = {}));\n\nclass BaseDateItem extends BaseItem {\n get value() {\n const value = clone(this.model);\n if (!value || !isValid(value) || !isDate(value)) {\n return undefined;\n }\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n params[name] = value;\n return params;\n }\n get persistanceObject() {\n const value = this.queryObject[this.name];\n return {\n [this.name]: value ? simpleFormat(value) : undefined,\n };\n }\n _validateModel() {\n }\n _setModel(value) {\n if (value) {\n if (!isDate(value) || !isValid(value)) {\n value = parseISO(value);\n }\n }\n super._setModel(value);\n }\n _parseConfig(item) {\n this.maxYear = item.maxYear;\n this.mode = item.mode || ItemDateMode.Calendar;\n super._parseConfig(item);\n }\n _init() {\n if (!this.label) {\n this.label = ['Min', 'Max'];\n }\n }\n}\n\nclass DateItem extends BaseDateItem {\n static create(config, filter) {\n return new DateItem(config, null, filter);\n }\n getChipsContent(type = null) {\n let dateFormat = 'date';\n if (this.mode === ItemDateMode.ScrollMonthYear) {\n dateFormat = 'full-date-dayless';\n }\n return format(this.model, dateFormat);\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : undefined;\n }\n}\n\nfunction getRangeName(configCase, name, range) {\n if (configCase === 'snake') {\n return name.concat('_').concat(range);\n }\n if (configCase === 'camel') {\n return name.concat(range.charAt(0).toUpperCase()).concat(range.slice(1));\n }\n}\n\nclass BaseDateRangeItem extends BaseItem {\n get isTypeDateRange() {\n return this.type === ItemType.DateRange;\n }\n get isTypeDateTimeRange() {\n return this.type === ItemType.DateTimeRange;\n }\n get isChipVisible() {\n return this.model && (this.model.from !== undefined || this.model.to !== undefined);\n }\n get value() {\n let value = clone(this.model);\n if (!isObject(this.model) ||\n (isEmpty(this.model.from, { zero: true }) && isEmpty(this.model.to, { zero: true }))) {\n value = undefined;\n }\n if (isEmpty(value, { zero: true })) {\n return undefined;\n }\n let from = value.from;\n let to = value.to;\n value = {};\n if (from) {\n if (isString(from)) {\n from = parseISO(from);\n }\n if (isValid(from) && isDate(from)) {\n value.from = from;\n }\n }\n if (to) {\n if (isString(to)) {\n to = parseISO(to);\n }\n if (isValid(to) && isDate(to)) {\n value.to = to;\n }\n }\n return value;\n }\n get queryObject() {\n const value = this.value || {};\n const name = this.name;\n const paramFromName = getRangeName(this.case, name, 'from');\n const paramToName = getRangeName(this.case, name, 'to');\n return {\n [paramFromName]: value.from || undefined,\n [paramToName]: value.to || undefined,\n };\n }\n get persistanceObject() {\n const query = this.queryObject;\n return Object.keys(this.queryObject)\n .reduce((acc, key) => {\n if (!!query[key]) {\n acc[key] = simpleFormat(query[key]);\n }\n else {\n acc[key] = query[key];\n }\n return acc;\n }, {});\n }\n getChipsContent(type = null) {\n const formatTo = this.type === ItemType.DateRange ? 'date' : 'date-time';\n if (type === 'from') {\n const from = this.model.from;\n return `${format(from, formatTo)}`;\n }\n else if (type === 'to') {\n const to = this.model.to;\n return `${format(to, formatTo)}`;\n }\n }\n clearDateRange(type = null, defaultValue = undefined) {\n if (type === 'from') {\n delete this.model.from;\n if (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.from) {\n this.model.from = defaultValue.from;\n }\n this.model = Object.assign({}, this.model);\n }\n else if (type === 'to') {\n delete this.model.to;\n if (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.to) {\n this.model.to = defaultValue.to;\n }\n this.model = Object.assign({}, this.model);\n }\n else {\n if (defaultValue) {\n this.model = Object.assign({}, defaultValue);\n }\n else {\n this.model = {};\n }\n }\n }\n _validateModel() {\n }\n _setModel(value) {\n if (value) {\n if (value.from && (!isDate(value.from) || !isValid(value.from))) {\n value.from = parseISO(value.from);\n }\n if (value.to && (!isDate(value.to) || !isValid(value.to))) {\n value.to = parseISO(value.to);\n }\n }\n super._setModel(value);\n }\n _parseConfig(item) {\n var _a, _b;\n this.case = (_b = (_a = this._additionalConfig) === null || _a === void 0 ? void 0 : _a.case) !== null && _b !== void 0 ? _b : 'camel';\n super._parseConfig(item);\n }\n _init() {\n if (!this.label) {\n this.label = ['Date From', 'Date To'];\n }\n if (!this.model) {\n this.model = this.defaultValue || {};\n }\n }\n _clearValue(defaultValue = undefined) {\n var _a;\n this.model = (_a = this.defaultValue) !== null && _a !== void 0 ? _a : {};\n }\n}\n\nclass DateRangeItem extends BaseDateRangeItem {\n static create(config, filter) {\n return new DateRangeItem(config, null, filter);\n }\n}\n\nclass DateTimeItem extends BaseDateItem {\n static create(config, filter) {\n return new DateTimeItem(config, null, filter);\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : undefined;\n }\n}\n\nclass DateTimeRangeItem extends BaseDateRangeItem {\n static create(config, filter) {\n return new DateTimeRangeItem(config, null, filter);\n }\n}\n\nclass RangeItem extends BaseItem {\n static create(config, additionalConfig, filter) {\n return new RangeItem(config, additionalConfig, filter);\n }\n get value() {\n let value = clone(this.model);\n if (!isObject(this.model) ||\n (isEmpty(this.model.max, { zero: true }) && isEmpty(this.model.min, { zero: true }))) {\n value = undefined;\n }\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n const paramMinName = getRangeName(this.case, name, 'min');\n const paramMaxName = getRangeName(this.case, name, 'max');\n if (isObject(value)) {\n params[paramMinName] = value.min || undefined;\n params[paramMaxName] = value.max || undefined;\n }\n else {\n params[paramMinName] = undefined;\n params[paramMaxName] = undefined;\n }\n return params;\n }\n get isChipVisible() {\n return this.model && (this.model.min !== undefined || this.model.max !== undefined);\n }\n getChipsContent(type) {\n if (type === 'from') {\n const min = this.model.min;\n return `${min}`;\n }\n else if (type === 'to') {\n const max = this.model.max;\n return `${max}`;\n }\n }\n clearRange(type = null, defaultValue = undefined) {\n if (type === 'from') {\n delete this.model.min;\n if (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.min) {\n this.model.min = defaultValue.min;\n }\n this.model = Object.assign({}, this.model);\n }\n else if (type === 'to') {\n delete this.model.max;\n if (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.max) {\n this.model.max = defaultValue.max;\n }\n this.model = Object.assign({}, this.model);\n }\n else {\n this.model = defaultValue ? Object.assign({}, defaultValue) : {};\n }\n }\n _validateModel() {\n }\n _parseConfig(item) {\n var _a, _b;\n this.options = item.options;\n this.prefix = item.prefix;\n this.suffix = item.suffix;\n this.case = (_b = (_a = this._additionalConfig) === null || _a === void 0 ? void 0 : _a.case) !== null && _b !== void 0 ? _b : 'camel';\n super._parseConfig(item);\n }\n _init() {\n if (!this.label) {\n this.label = ['Min', 'Max'];\n }\n if (!this.model) {\n this.model = this.defaultValue || {};\n }\n }\n}\n\nfunction findValue(values, value, children) {\n for (let i = 0; i < values.length; i++) {\n const val = values[i];\n if (val[children]) {\n return findValue(val[children], value, children);\n }\n if (val.value === value) {\n return val;\n }\n }\n return undefined;\n}\n\nclass SimpleSelectItem extends BaseSelectItem {\n constructor(itemConfig, _persistedValues, _filter) {\n super(itemConfig, _persistedValues, _filter);\n }\n get value() {\n let value = this.model;\n if (value === '__all' || value === undefined) {\n value = undefined;\n }\n return value;\n }\n getChipsContent(type = null) {\n if (this.children) {\n const itemValue = findValue(this.values, this.model, this.children);\n return itemValue && itemValue.name;\n }\n const itemValue = this.values.find((val) => val.value === this.model);\n if (itemValue) {\n return itemValue.name;\n }\n else if (this.isolate) {\n return this.isolate.label;\n }\n }\n get isChipVisible() {\n return this.model !== '__all' && this.model !== undefined;\n }\n _init() {\n super._init();\n if (this.model === undefined && this.defaultValue === undefined) {\n this._model = '__all';\n }\n }\n get isolateOptionNotSelected() {\n const modelValue = this.model;\n const isolate = this.isolate;\n return isolate && !isolate.enabled && (modelValue === null || modelValue === void 0 ? void 0 : modelValue.length) === 0;\n }\n _setModel(value) {\n if (value) {\n if (!isNaN(value)) {\n value = +value;\n }\n }\n super._setModel(value);\n }\n _validateModel() {\n const item = this.values.find((value) => {\n return value.value == this.model;\n });\n const value = item ? item.value : '__all';\n if (this._model !== value) {\n this.model = value;\n }\n }\n _clearValue(defaultValue = undefined) {\n super._clearValue(defaultValue);\n const value = Array.isArray(this.values) && this.values.some((val) => val.value === '__all')\n ? '__all'\n : undefined;\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : value;\n }\n}\n\nclass SelectItem {\n static create(config, filter) {\n if (config.multiple) {\n return new MultipleSelectItem(config, null, filter);\n }\n return new SimpleSelectItem(config, null, filter);\n }\n}\n\nclass TextItem extends BaseItem {\n static create(config, filter) {\n return new TextItem(config, null, filter);\n }\n get value() {\n return !!this.model ? this.model : undefined;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n params[name] = value;\n return params;\n }\n getChipsContent() {\n return this.model;\n }\n _validateModel() {\n //\n }\n _parseConfig(item) {\n this.prefix = item.prefix;\n this.suffix = item.suffix;\n super._parseConfig(item);\n }\n _init() {\n //\n }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : '';\n }\n}\n\nfunction parseDate(value) {\n if (value && (!isDate(value) || !isValid(value))) {\n return parseISO(value);\n }\n return value;\n}\n\nclass WeekItem extends BaseItem {\n static create(config, filter) {\n return new WeekItem(config, null, filter);\n }\n get value() {\n let value = clone(this.model);\n if (!isObject(this.model) ||\n (isEmpty(this.model.from, { zero: true }) && isEmpty(this.model.to, { zero: true }))) {\n value = undefined;\n }\n if (isEmpty(value, { zero: true })) {\n return undefined;\n }\n let from = value.from;\n let to = value.to;\n const period = value.period;\n value = {};\n if (from) {\n if (isString(from)) {\n from = parseISO(from);\n }\n if (isValid(from) && isDate(from)) {\n value.from = from;\n }\n }\n if (to) {\n if (isString(to)) {\n to = parseISO(to);\n }\n if (isValid(to) && isDate(to)) {\n value.to = to;\n }\n }\n if (period) {\n value.period = isString(period) ? parseInt(period, 10) : period;\n }\n return value;\n }\n get queryObject() {\n const value = this.value;\n const name = this.name;\n const paramFromName = getRangeName('camel', name, 'from');\n const paramToName = getRangeName('camel', name, 'to');\n const paramPeriodName = `${name}Period`;\n return {\n [paramFromName]: (value === null || value === void 0 ? void 0 : value.from) || undefined,\n [paramToName]: (value === null || value === void 0 ? void 0 : value.to) || undefined,\n [paramPeriodName]: (value === null || value === void 0 ? void 0 : value.period) || undefined,\n };\n }\n get persistanceObject() {\n const query = this.queryObject;\n const name = this.name;\n const paramFromName = getRangeName('camel', name, 'from');\n const paramFromValue = query[paramFromName] && simpleFormat(query[paramFromName]) || query[paramFromName];\n const paramToName = getRangeName('camel', name, 'to');\n const paramToValue = query[paramToName] && simpleFormat(query[paramToName]) || query[paramToName];\n const paramPeriodName = `${name}Period`;\n return {\n [paramFromName]: paramFromValue,\n [paramToName]: paramToValue,\n [paramPeriodName]: query[paramPeriodName],\n };\n }\n getChipsContent(type = null) {\n return formatPeriodObject(this.value);\n }\n _validateModel() { }\n _setModel(value) {\n if (value) {\n value.from = parseDate(value.from);\n value.to = parseDate(value.to);\n value.period = parseInt(value.period, 10) || undefined;\n }\n super._setModel(value);\n }\n _parseConfig(item) {\n super._parseConfig(item);\n this.seedDate = item.seedDate;\n }\n _init() { }\n _clearValue(defaultValue = undefined) {\n this.model = defaultValue !== null && defaultValue !== void 0 ? defaultValue : undefined;\n }\n}\n\nfunction createFilterItem(item, config, filter) {\n switch (item.type) {\n case ItemType.Select: {\n return SelectItem.create(item, filter);\n }\n case ItemType.Chips: {\n return ChipsItem.create(item, filter);\n }\n case ItemType.Range: {\n return RangeItem.create(item, config, filter);\n }\n case ItemType.DateRange: {\n return DateRangeItem.create(item, filter);\n }\n case ItemType.DateTimeRange: {\n return DateTimeRangeItem.create(item, filter);\n }\n case ItemType.Date: {\n return DateItem.create(item, filter);\n }\n case ItemType.Week: {\n return WeekItem.create(item, filter);\n }\n case ItemType.DateTime: {\n return DateTimeItem.create(item, filter);\n }\n case ItemType.AutoComplete: {\n return AutocompleteItem.create(item, filter);\n }\n case ItemType.AutoCompleteChips: {\n return AutocompleteChipsItem.create(item, filter);\n }\n case ItemType.Checkbox: {\n return CheckboxItem.create(item, filter);\n }\n case ItemType.Keyword:\n case ItemType.Text: {\n return TextItem.create(item, filter);\n }\n }\n}\n\nvar ActionMode;\n(function (ActionMode) {\n ActionMode[\"Button\"] = \"button\";\n ActionMode[\"SelectButton\"] = \"selectButton\";\n ActionMode[\"Menu\"] = \"menu\";\n ActionMode[\"File\"] = \"file\";\n})(ActionMode || (ActionMode = {}));\n\nvar ActionType;\n(function (ActionType) {\n ActionType[\"Basic\"] = \"basic\";\n ActionType[\"Raised\"] = \"raised\";\n ActionType[\"Icon\"] = \"icon\";\n ActionType[\"Fab\"] = \"fab\";\n ActionType[\"MiniFab\"] = \"mini-fab\";\n ActionType[\"Flat\"] = \"flat\";\n ActionType[\"Stroked\"] = \"stroked\";\n})(ActionType || (ActionType = {}));\n\nvar ButtonStyle;\n(function (ButtonStyle) {\n ButtonStyle[\"Basic\"] = \"basic\";\n ButtonStyle[\"Raised\"] = \"raised\";\n ButtonStyle[\"Icon\"] = \"icon\";\n ButtonStyle[\"Fab\"] = \"fab\";\n ButtonStyle[\"MiniFab\"] = \"mini-fab\";\n ButtonStyle[\"Flat\"] = \"flat\";\n ButtonStyle[\"Stroked\"] = \"stroked\";\n})(ButtonStyle || (ButtonStyle = {}));\n\nvar PickerViewType;\n(function (PickerViewType) {\n PickerViewType[\"Date\"] = \"date\";\n PickerViewType[\"DateTime\"] = \"datetime\";\n PickerViewType[\"Time\"] = \"time\";\n PickerViewType[\"Week\"] = \"week\";\n PickerViewType[\"MonthRange\"] = \"monthrange\";\n})(PickerViewType || (PickerViewType = {}));\n\nconst SORT_BY_FIELD = 'sortName';\nconst SORT_DIRECTION_FIELD = 'sortDirection';\nclass FsFilterConfig {\n constructor(data = {}) {\n this.load = true;\n this.persist = false;\n this.inline = false;\n this.autofocus = false;\n this.chips = false;\n this.sortValues = null;\n this.sort = null;\n // public sortDirection = null;\n this.queryParam = false;\n this.case = 'camel';\n this._init(data);\n }\n _init(data = {}) {\n var _a, _b, _c, _d, _e, _f, _g;\n this.load = (_a = data.load) !== null && _a !== void 0 ? _a : true;\n this.persist = data.persist;\n this.savedFilters = data.savedFilters;\n this.inline = (_b = data.inline) !== null && _b !== void 0 ? _b : false;\n this.autofocus = (_c = data.autofocus) !== null && _c !== void 0 ? _c : false;\n this.chips = (_d = data.chips) !== null && _d !== void 0 ? _d : false;\n this.sortValues = data.sorts;\n this.sort = data.sort;\n this.queryParam = (_e = data.queryParam) !== null && _e !== void 0 ? _e : false;\n this.init = data.init;\n this.change = data.change;\n this.reload = data.reload;\n this.autoReload = data.autoReload;\n this.clear = data.clear;\n this.sortChange = data.sortChange;\n this.case = (_f = data.case) !== null && _f !== void 0 ? _f : 'camel';\n this.reloadWhenConfigChanged = data.reloadWhenConfigChanged;\n this.button = data.button;\n this.items = data.items;\n this.actions = data.actions;\n this.case = (_g = data.case) !== null && _g !== void 0 ? _g : 'camel';\n if (this.persist) {\n if (typeof this.persist === 'object') {\n if (this.persist.name) {\n this.namespace = this.persist.name;\n }\n }\n }\n if (!this.button) {\n this.button = {};\n }\n if (this.button.label === undefined) {\n this.button.label = 'Filters';\n }\n if (this.button.icon === undefined) {\n this.button.icon = 'tune';\n }\n if (this.button.style === undefined) {\n this.button.style = ButtonStyle.Raised;\n }\n if (this.button.color === undefined) {\n this.button.color = 'default';\n }\n if (this.clear === undefined) {\n this.clear = () => { };\n }\n }\n}\n\nclass FsFilterItemsStore {\n constructor() {\n this.sortByItem = null;\n this.sortDirectionItem = null;\n this.keywordItem = null;\n this._ready$ = new BehaviorSubject(false);\n this._items = [];\n this._visibleItems$ = new BehaviorSubject([]);\n this._itemsByName = new Map();\n this._itemsValuesLoaded = false;\n this._hasKeyword = false;\n this._itemsChange$ = new Subject();\n this._destroy$ = new Subject();\n this._lazyInit();\n }\n get items() {\n return this._items;\n }\n get itemNames() {\n return this._items.map((item) => item.name);\n }\n get visibleItems() {\n return this._visibleItems$.getValue();\n }\n set visibleItems(items) {\n this._visibleItems$.next(items);\n }\n get visibleItems$() {\n return this._visibleItems$.asObservable();\n }\n get hasKeyword() {\n return this._hasKeyword;\n }\n get itemsChange$() {\n return this._itemsChange$.pipe(debounceTime(30));\n }\n get ready$() {\n return this._ready$.asObservable();\n }\n ngOnDestroy() {\n this.destroyItems();\n this._destroy$.next();\n this._destroy$.complete();\n }\n setConfig(config) {\n this._itemsByName.clear();\n this._config = config;\n this.initItems(config.items);\n }\n getItemByName(name) {\n return this._itemsByName.get(name);\n }\n initItems(items) {\n this._itemsValuesLoaded = false;\n if (Array.isArray(items)) {\n this._createItems(items);\n }\n }\n filtersClear() {\n var _a;\n this.items.forEach((item) => {\n if (item instanceof RangeItem) {\n item.clearRange(null, item.defaultValue);\n }\n else if (item instanceof BaseDateRangeItem) {\n item.clearDateRange(null, item.defaultValue);\n }\n else {\n item.clear(item.defaultValue);\n }\n });\n if (this.sortByItem) {\n if (this._config.sort) {\n this.sortByItem.model = this._config.sort.value;\n }\n else {\n this.sortByItem.clear(this.sortByItem.defaultValue);\n }\n }\n if (this.sortDirectionItem) {\n if (this._config.sort) {\n this.sortDirectionItem.model = this._config.sort.direction;\n }\n else {\n this.sortDirectionItem.clear(this.sortDirectionItem.defaultValue);\n }\n }\n (_a = this.keywordItem) === null || _a === void 0 ? void 0 : _a.clear();\n }\n loadAsyncValues() {\n this.items\n .filter((item) => item.hasPendingValues)\n .forEach((item) => item.loadAsyncValues());\n }\n loadAsyncDefaults() {\n // default values can be asynchronous, and we must load them if there is no persisted value instead\n const defaultValuesToBeLoaded = this.items\n .filter((item) => {\n return item.defaultValueFn\n && (item.persistedValue === null || item.persistedValue === undefined);\n });\n // special hack for isolate multiple select\n // values for this type of select must be preloaded\n // Read more in class MultipleSelectItem._init()\n const valuesToBeLoaded = this.items\n .filter((item) => {\n return (item instanceof MultipleSelectItem) && item.hasPendingValues && item.isolate;\n });\n if (defaultValuesToBeLoaded.length > 0 || valuesToBeLoaded.length > 0) {\n forkJoin([\n ...defaultValuesToBeLoaded\n .map((item) => item.loadDefaultValue()),\n ...valuesToBeLoaded\n .map((item) => {\n item.loadAsyncValues();\n return item.loading$\n .pipe();\n }),\n ])\n .pipe(finalize(() => {\n this._ready$.next(true);\n }), takeUntil(this._destroy$))\n .subscribe();\n }\n else {\n this._ready$.next(true);\n }\n }\n getSort() {\n let sortBy = this.getSortByValue();\n sortBy = sortBy === '__all' ? null : sortBy;\n let sortDirection = this.getSortDirectionValue();\n sortDirection = sortDirection === '__all' ? null : sortDirection;\n return {\n value: sortBy,\n direction: sortDirection,\n };\n }\n getSortByValue() {\n return this.sortByItem ? this.sortByItem.model : null;\n }\n getSortDirectionValue() {\n return this.sortDirectionItem ? this.sortDirectionItem.model : null;\n }\n updateSort(sort) {\n if (sort.sortBy) {\n this.sortByItem.model = sort.sortBy;\n }\n if (sort.sortDirection) {\n this.sortDirectionItem.model = sort.sortDirection;\n }\n }\n values(onlyPresented = false) {\n return this.items\n .reduce((acc, item) => {\n const value = item.value;\n if (!onlyPresented || value !== null) {\n acc[item.name] = value;\n }\n return acc;\n }, {});\n }\n valuesAsQuery({ onlyPresented = true, items = null, persisted = false, } = {}) {\n const params = {};\n (items || this.items)\n .forEach((filterItem) => {\n const values = persisted\n ? filterItem.persistanceObject\n : filterItem.queryObject;\n Object.assign(params, values);\n });\n if (onlyPresented) {\n return pickBy(params, (val) => {\n return val !== void 0;\n });\n }\n return params;\n }\n init(p) {\n this.items\n .forEach((item) => {\n item.initValues(p[item.name]);\n });\n this._initSortingItems(p);\n this.loadAsyncDefaults();\n this._subscribeToItemsChanges();\n }\n updateItemsWithValues(values) {\n this.items\n .forEach((item) => {\n if (values[item.name]) {\n item.model = values[item.name];\n }\n else {\n if (item instanceof RangeItem) {\n item.clearRange(null, item.defaultValue);\n }\n else if (item instanceof BaseDateRangeItem) {\n item.clearDateRange(null, item.defaultValue);\n }\n else {\n item.clear();\n }\n }\n });\n if (this.sortByItem) {\n this.sortByItem.clear();\n }\n if (this.sortDirectionItem) {\n this.sortDirectionItem.clear();\n }\n }\n updateSortingItemsValues(items) {\n this.sortByItem.values = items;\n }\n destroyItems() {\n var _a, _b;\n this.items\n .forEach((item) => item.destroy());\n (_a = this.sortByItem) === null || _a === void 0 ? void 0 : _a.destroy();\n (_b = this.sortDirectionItem) === null || _b === void 0 ? void 0 : _b.destroy();\n this._items = [];\n this.sortByItem = null;\n this.sortDirectionItem = null;\n }\n /**\n * Some items might need to load async values before they will be shown\n */\n prepareItems() {\n if (!this._itemsValuesLoaded) {\n this._itemsValuesLoaded = true;\n this.loadAsyncValues();\n }\n }\n updateItemsVisiblity() {\n this.visibleItems = this.items\n .filter((item) => !item.isTypeKeyword && !item.hide);\n }\n _createItems(items) {\n this._items = items\n .filter((item) => !item.disable)\n .filter((item) => {\n if (this._itemsByName.has(item.name)) {\n throw Error('Filter init error. Items name must be unique.');\n }\n else {\n this._itemsByName.set(item.name, null);\n return true;\n }\n })\n .map((item) => {\n const filterItem = createFilterItem(item, { case: this._config.case }, this.filter);\n if (filterItem.type === ItemType.Keyword) {\n this._hasKeyword = true;\n }\n this._itemsByName.set(item.name, filterItem);\n return filterItem;\n });\n this._createSortingItems();\n }\n _subscribeToItemsChanges() {\n var _a;\n this.items\n .forEach((item) => {\n item.valueChange$\n .pipe(takeUntil(item.destroy$))\n .subscribe(() => {\n this._itemsChange$.next(item);\n });\n });\n if ((_a = this._config.sortValues) === null || _a === void 0 ? void 0 : _a.length) {\n this.sortByItem.valueChange$\n .pipe(takeUntil(this.sortByItem.destroy$))\n .subscribe(() => {\n this._itemsChange$.next(this.sortByItem);\n });\n this.sortDirectionItem.valueChange$\n .pipe(takeUntil(this.sortDirectionItem.destroy$))\n .subscribe(() => {\n this._itemsChange$.next(this.sortDirectionItem);\n });\n }\n }\n _lazyInit() {\n this.ready$\n .pipe(filter$1((state) => state), takeUntil(this._destroy$))\n .subscribe(() => {\n this.updateItemsVisiblity();\n this._setKeywordItem();\n });\n }\n _initSortingItems(p) {\n if (this.sortByItem && this.sortDirectionItem) {\n this.sortByItem.initValues(p[this.sortByItem.name]);\n this.sortDirectionItem.initValues(p[this.sortDirectionItem.name]);\n }\n }\n _createSortingItems() {\n var _a;\n if (((_a = this._config.sortValues) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n const sortByItem = {\n name: SORT_BY_FIELD,\n type: ItemType.Select,\n label: 'Sort by',\n values: this._config.sortValues,\n };\n if (this._config.sort && this._config.sort.value) {\n sortByItem.default = this._config.sort.value;\n }\n this.sortByItem = new SimpleSelectItem(sortByItem, null, this.filter);\n const sortDirectionItem = {\n name: SORT_DIRECTION_FIELD,\n type: ItemType.Select,\n label: 'Sort direction',\n values: [\n { name: 'Ascending', value: 'asc' },\n { name: 'Descending', value: 'desc' },\n ],\n };\n if (this._config.sort && this._config.sort.direction) {\n sortDirectionItem.default = this._config.sort.direction;\n }\n this.sortDirectionItem = new SimpleSelectItem(sortDirectionItem, null, this.filter);\n }\n }\n _setKeywordItem() {\n this.keywordItem = this\n .items\n .find((item) => item.isTypeKeyword);\n }\n}\nFsFilterItemsStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterItemsStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nFsFilterItemsStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterItemsStore });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterItemsStore, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\nfunction parseItemValueFromStored(item, params, paramCase) {\n const param = params[item.name];\n switch (item.type) {\n case ItemType.Range: {\n const min = params[getRangeName(paramCase, item.name, 'min')];\n const max = params[getRangeName(paramCase, item.name, 'max')];\n return { min: min, max: max };\n }\n case ItemType.DateRange:\n case ItemType.DateTimeRange: {\n const from = params[getRangeName(item.case, item.name, 'from')];\n const to = params[getRangeName(item.case, item.name, 'to')];\n return { from: from, to: to };\n }\n case ItemType.Week: {\n const from = params[getRangeName('camel', item.name, 'from')];\n const to = params[getRangeName('camel', item.name, 'to')];\n const period = params[`${item.name}Period`];\n return { from, to, period };\n }\n case ItemType.Select: {\n if (item.multiple && !!param) {\n const values = param.split(',');\n if (item.isolate) {\n const isolatedValue = Array.isArray(item.isolate.value)\n ? item.isolate.value\n : [item.isolate.value];\n item.isolate.enabled = arraysHaveSameElements(isolatedValue, values);\n return item.isolate.enabled\n ? isolatedValue\n : values;\n }\n return values;\n }\n else {\n return param;\n }\n }\n case ItemType.Checkbox: {\n if (param === 'true') {\n return true === item.checked;\n }\n else {\n return param === item.checked;\n }\n }\n case ItemType.AutoComplete: {\n const filterParts = filterFromQueryParam(param);\n return {\n name: filterParts[1],\n value: filterParts[0]\n };\n }\n case ItemType.AutoCompleteChips:\n case ItemType.Chips: {\n const filterParts = param.split(',');\n return filterParts.reduce((arry, value) => {\n const chipParts = filterFromQueryParam(value);\n arry.push({\n name: chipParts[1],\n value: chipParts[0],\n });\n return arry;\n }, []);\n }\n default: {\n return param;\n }\n }\n}\nfunction arraysHaveSameElements(arr1, arr2) {\n arr1 = [...arr1].sort();\n arr2 = [...arr2].sort();\n return arr1.some((item) => {\n return arr2.includes(item);\n });\n}\n\n/**\n * We need this function because when we store persisted/query/remote filter values\n * it stores with different format, ex.: Range will be stored as RangeFrom && RangeTo\n * and in this case we don't know how to restroe those values.\n *\n * This function do convertation for those kinds of stored values\n *\n * @param params\n * @param items\n * @param paramsCase\n */\nfunction restoreItems(params, items, paramsCase) {\n const result = {};\n Object.keys(params)\n .forEach((name) => {\n const item = findItemWidthName(items, name);\n if (item) {\n result[item.name] = parseItemValueFromStored(item, params, paramsCase);\n }\n });\n return result;\n}\nfunction findItemWidthName(items, name) {\n return items\n .find((filterItem) => {\n if (filterItem instanceof RangeItem) {\n return name === getRangeName(filterItem.case, filterItem.name, 'min') ||\n name === getRangeName(filterItem.case, filterItem.name, 'max') ||\n name === filterItem.name;\n }\n else if (filterItem instanceof DateRangeItem || filterItem instanceof DateTimeRangeItem) {\n return name === getRangeName(filterItem.case, filterItem.name, 'from') ||\n name === getRangeName(filterItem.case, filterItem.name, 'to');\n }\n else if (filterItem instanceof WeekItem) {\n return name === getRangeName('camel', filterItem.name, 'from')\n || name === getRangeName('camel', filterItem.name, 'to')\n || name === `${filterItem.name}Period`;\n }\n return filterItem.name === name;\n });\n}\n\nconst FILTER_STORE_KEY = 'fs-filter-persist';\nclass PersistanceParamsController extends FsPersistanceStore {\n constructor(_store, _route, _location, _itemsStore, _dialogRef, _drawerRef) {\n super(_store, _route);\n this._location = _location;\n this._itemsStore = _itemsStore;\n this._dialogRef = _dialogRef;\n this._drawerRef = _drawerRef;\n this.STORE_KEY = FILTER_STORE_KEY;\n }\n init(persistanceConfig, namespace, paramsCase) {\n this._paramsCase = paramsCase;\n namespace = namespace !== null && namespace !== void 0 ? namespace : getNormalizedPath(this._location);\n const persistanceDisabled = !!this._dialogRef || !!this._drawerRef;\n this.setConfig(persistanceConfig, namespace, persistanceDisabled);\n }\n restore() {\n if (!this.enabled) {\n return;\n }\n super.restore();\n const items = [\n ...this._itemsStore.items,\n this._itemsStore.sortByItem,\n this._itemsStore.sortDirectionItem,\n ].filter((item) => !!item);\n if (this._value) {\n this._value.data = restoreItems(this._value.data, items, this._paramsCase);\n }\n }\n}\nPersistanceParamsController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: PersistanceParamsController, deps: [{ token: i1.FsStore }, { token: i2.ActivatedRoute }, { token: i1$1.Location }, { token: FsFilterItemsStore }, { token: i1$2.MatDialogRef, optional: true }, { token: i6.DrawerRef, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nPersistanceParamsController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: PersistanceParamsController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: PersistanceParamsController, decorators: [{\n type: Injectable\n }], ctorParameters: function () {\n return [{ type: i1.FsStore }, { type: i2.ActivatedRoute }, { type: i1$1.Location }, { type: FsFilterItemsStore }, { type: i1$2.MatDialogRef, decorators: [{\n type: Optional\n }] }, { type: i6.DrawerRef, decorators: [{\n type: Optional\n }] }];\n } });\n\nclass QueryParamsController {\n constructor(_route, _itemsStore) {\n this._route = _route;\n this._itemsStore = _itemsStore;\n this._enabled = false;\n }\n get enabled() {\n return this._enabled;\n }\n get fetchedParams() {\n return this._fetchedParams;\n }\n init(enabled, paramsCase) {\n this._enabled = enabled;\n this._paramsCase = paramsCase;\n if (this.enabled) {\n this.fetchFromQueryParams();\n }\n }\n writeStateToQueryParams(params) {\n if (this._enabled) {\n this._replaceState(params);\n }\n }\n /**\n * Parse query and update filter values\n */\n fetchFromQueryParams() {\n const items = [\n ...this._itemsStore.items,\n this._itemsStore.sortByItem,\n this._itemsStore.sortDirectionItem,\n ].filter((item) => !!item);\n this._fetchedParams = restoreItems(this._route.snapshot.queryParams, items, this._paramsCase);\n }\n _replaceState(data) {\n const url = new URL(window.location.href);\n Object.keys(data)\n .forEach((name) => {\n if (data[name] === undefined || data[name] === null) {\n url.searchParams.delete(name);\n }\n else {\n url.searchParams.set(name, data[name]);\n }\n });\n history.replaceState({}, null, url.pathname + url.search);\n }\n}\nQueryParamsController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: QueryParamsController, deps: [{ token: i2.ActivatedRoute }, { token: FsFilterItemsStore }], target: i0.ɵɵFactoryTarget.Injectable });\nQueryParamsController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: QueryParamsController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: QueryParamsController, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i2.ActivatedRoute }, { type: FsFilterItemsStore }]; } });\n\nclass FsFilterSavedFilterEditComponent {\n constructor(data, _dialogRef) {\n this.data = data;\n this._dialogRef = _dialogRef;\n this.saveAsFilter = 'new';\n this.savedFilterName = '';\n this._destroy$ = new Subject();\n this.save = () => {\n const savedFilter = this.saveAsFilter === 'new' ?\n {\n name: this.savedFilterName,\n active: true,\n filters: this.data.params,\n } : Object.assign(Object.assign({}, this.saveAsFilter), { filters: this.data.params });\n return this._saveCallback(savedFilter)\n .pipe(tap((filter) => {\n this._dialogRef.close(filter);\n }), takeUntil(this._destroy$));\n };\n this.savedFilters = this.data.savedFilters;\n this._saveCallback = this.data.saveCallback;\n }\n}\nFsFilterSavedFilterEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterSavedFilterEditComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$2.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterSavedFilterEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterSavedFilterEditComponent, selector: \"ng-component\", ngImport: i0, template: \"<form fsForm [submit]=\\\"save\\\">\\n <h1 mat-dialog-title>\\n Save filter\\n </h1>\\n <div mat-dialog-content>\\n <mat-form-field>\\n <mat-label>Save as</mat-label>\\n <mat-select [(ngModel)]=\\\"saveAsFilter\\\" name=\\\"saveAs\\\">\\n <mat-option value=\\\"new\\\">New filter</mat-option>\\n <ng-container *ngIf=\\\"savedFilters.length\\\">\\n <mat-optgroup label=\\\"Saved filters\\\">\\n <ng-container *ngFor=\\\"let filter of savedFilters\\\">\\n <mat-option [value]=\\\"filter\\\">{{ filter.name }}</mat-option>\\n </ng-container>\\n </mat-optgroup>\\n </ng-container>\\n </mat-select>\\n </mat-form-field>\\n <br>\\n <mat-form-field *ngIf=\\\"saveAsFilter === 'new'\\\">\\n <mat-label>Name</mat-label>\\n <input matInput name=\\\"filter-name\\\" [(ngModel)]=\\\"savedFilterName\\\" required>\\n </mat-form-field>\\n </div>\\n <div mat-dialog-actions>\\n <button \\n mat-button\\n type=\\\"submit\\\"\\n color=\\\"primary\\\">\\n {{ saveAsFilter === 'new' ? 'Create' : 'Save' }}\\n </button>\\n\\n <button \\n mat-button\\n type=\\\"button\\\"\\n [mat-dialog-close]=\\\"null\\\">\\n Cancel\\n </button>\\n </div>\\n</form>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i2$1.RequiredValidator, selector: \":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]\", inputs: [\"required\"] }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: i2$1.NgForm, selector: \"form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]\", inputs: [\"ngFormOptions\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i4.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$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i5.MatOptgroup, selector: \"mat-optgroup\", inputs: [\"disabled\"], exportAs: [\"matOptgroup\"] }, { kind: \"component\", type: i3$1.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"directive\", type: i1$2.MatDialogClose, selector: \"[mat-dialog-close], [matDialogClose]\", inputs: [\"aria-label\", \"type\", \"mat-dialog-close\", \"matDialogClose\"], exportAs: [\"matDialogClose\"] }, { kind: \"directive\", type: i1$2.MatDialogTitle, selector: \"[mat-dialog-title], [matDialogTitle]\", inputs: [\"id\"], exportAs: [\"matDialogTitle\"] }, { kind: \"directive\", type: i1$2.MatDialogContent, selector: \"[mat-dialog-content], mat-dialog-content, [matDialogContent]\" }, { kind: \"directive\", type: i1$2.MatDialogActions, selector: \"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]\", inputs: [\"align\"] }, { kind: \"directive\", type: i9.FsFormDirective, selector: \"[fsForm]\", inputs: [\"wrapperSelector\", \"messageSelector\", \"hintSelector\", \"labelSelector\", \"autocomplete\", \"shortcuts\", \"confirm\", \"confirmDialog\", \"confirmDrawer\", \"confirmBrowser\", \"confirmTabs\", \"dirtySubmitButton\", \"submit\", \"successDelay\", \"errorDelay\", \"tabGroup\", \"deactivationGuard\"], outputs: [\"fsForm\", \"invalid\", \"valid\", \"submitted\", \"reseted\", \"cleared\"], exportAs: [\"fsForm\"] }, { kind: \"directive\", type: i9.FsFormRequiredDirective, selector: \"[fsFormRequired],[ngModel][required]\", inputs: [\"fsFormRequired\", \"required\", \"fsFormRequiredMessage\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterSavedFilterEditComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: \"<form fsForm [submit]=\\\"save\\\">\\n <h1 mat-dialog-title>\\n Save filter\\n </h1>\\n <div mat-dialog-content>\\n <mat-form-field>\\n <mat-label>Save as</mat-label>\\n <mat-select [(ngModel)]=\\\"saveAsFilter\\\" name=\\\"saveAs\\\">\\n <mat-option value=\\\"new\\\">New filter</mat-option>\\n <ng-container *ngIf=\\\"savedFilters.length\\\">\\n <mat-optgroup label=\\\"Saved filters\\\">\\n <ng-container *ngFor=\\\"let filter of savedFilters\\\">\\n <mat-option [value]=\\\"filter\\\">{{ filter.name }}</mat-option>\\n </ng-container>\\n </mat-optgroup>\\n </ng-container>\\n </mat-select>\\n </mat-form-field>\\n <br>\\n <mat-form-field *ngIf=\\\"saveAsFilter === 'new'\\\">\\n <mat-label>Name</mat-label>\\n <input matInput name=\\\"filter-name\\\" [(ngModel)]=\\\"savedFilterName\\\" required>\\n </mat-form-field>\\n </div>\\n <div mat-dialog-actions>\\n <button \\n mat-button\\n type=\\\"submit\\\"\\n color=\\\"primary\\\">\\n {{ saveAsFilter === 'new' ? 'Create' : 'Save' }}\\n </button>\\n\\n <button \\n mat-button\\n type=\\\"button\\\"\\n [mat-dialog-close]=\\\"null\\\">\\n Cancel\\n </button>\\n </div>\\n</form>\\n\" }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DIALOG_DATA]\n }] }, { type: i1$2.MatDialogRef }];\n } });\n\nclass SavedFiltersController {\n constructor(_itemsStore, _dialog) {\n this._itemsStore = _itemsStore;\n this._dialog = _dialog;\n this._savedFilters$ = new BehaviorSubject([]);\n this._activeFilter$ = new BehaviorSubject(null);\n this._enabled$ = new BehaviorSubject(false);\n this._destroy$ = new Subject();\n }\n get enabled() {\n return this._enabled$.getValue();\n }\n get enabled$() {\n return this._enabled$\n .pipe(distinctUntilChanged());\n }\n get savedFilters() {\n return this._savedFilters$.getValue();\n }\n set savedFilters(filters) {\n this._savedFilters$.next(filters);\n }\n get savedFilters$() {\n return this._savedFilters$\n .pipe(distinctUntilChanged());\n }\n get activeFilter() {\n return this._activeFilter$.getValue();\n }\n get activeFilter$() {\n return this._activeFilter$\n .pipe(distinctUntilChanged());\n }\n get activeFilterData() {\n var _a;\n return (_a = this._activeFilter$.getValue()) === null || _a === void 0 ? void 0 : _a.filters;\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n init(remoteParamsConfig, paramsCase) {\n if (!remoteParamsConfig) {\n this._setEnabledStatus(false);\n return;\n }\n this._setEnabledStatus(true);\n this._paramsCase = paramsCase;\n this._config = remoteParamsConfig;\n }\n initSavedFilters(filters) {\n filters = [...filters];\n filters.forEach((savedFilter) => {\n savedFilter.filters = restoreItems(savedFilter.filters, this._itemsStore.items, this._paramsCase);\n });\n this.savedFilters = filters;\n }\n load() {\n return this._config.load()\n .pipe(tap((response) => {\n this.initSavedFilters(response);\n }));\n }\n save(savedFilter) {\n return this._config.save(savedFilter);\n }\n order(savedFilters) {\n return this._config.order(savedFilters)\n .pipe(tap(() => {\n this.savedFilters = [\n ...savedFilters,\n ];\n }));\n }\n delete(savedFilter) {\n return this._config.delete(savedFilter)\n .pipe(tap(() => {\n this.savedFilters = this.savedFilters\n .filter((f) => f.id !== savedFilter.id);\n }));\n }\n setActiveFilter(savedFilter) {\n if (savedFilter) {\n const existingFilter = this.savedFilters\n .find((f) => f.id === savedFilter.id);\n if (!existingFilter) {\n throw new Error(`Saved filter cannot be activated, because it does not exists. Filter ID = ${savedFilter.id}`);\n }\n this._activeFilter$.next(existingFilter);\n }\n else {\n this._activeFilter$.next(null);\n }\n }\n openSavedFilterEditDialog() {\n const params = buildQueryParams(this._itemsStore.valuesAsQuery(), this._itemsStore.items);\n const dialogConfig = {\n data: {\n params: params,\n savedFilters: this.savedFilters,\n saveCallback: this.save.bind(this),\n },\n };\n this._dialog\n .open(FsFilterSavedFilterEditComponent, dialogConfig)\n .beforeClosed()\n .pipe(take(1), takeUntil(this._destroy$))\n .subscribe((updatedFilter) => {\n if (updatedFilter) {\n // get already saved related filter object\n const savedFilter = this.savedFilters\n .find((f) => f.id === updatedFilter.id);\n // restore values from query string\n updatedFilter.filters = restoreItems(updatedFilter.filters, this._itemsStore.items, this._paramsCase);\n if (savedFilter) {\n Object.assign(savedFilter, updatedFilter);\n }\n else {\n this.resetActiveFilter();\n this.savedFilters = [\n ...this.savedFilters,\n updatedFilter,\n ];\n }\n this.updateActiveFilter();\n }\n });\n }\n updateActiveFilter() {\n // Lookup active filter\n const acitveFilter = this.savedFilters\n .find((f) => f.active);\n if (acitveFilter) {\n this.setActiveFilter(acitveFilter);\n }\n }\n resetActiveFilter() {\n // Reset all previously activated filters\n this.savedFilters.forEach((savedFilter) => {\n savedFilter.active = false;\n });\n this.setActiveFilter(null);\n }\n _setEnabledStatus(value) {\n this._enabled$.next(value);\n }\n}\nSavedFiltersController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SavedFiltersController, deps: [{ token: FsFilterItemsStore }, { token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });\nSavedFiltersController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SavedFiltersController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SavedFiltersController, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: FsFilterItemsStore }, { type: i1$2.MatDialog }]; } });\n\nclass ExternalParamsController {\n constructor(_itemsStore, _persistanceStore, _queryParams, _savedFilters) {\n this._itemsStore = _itemsStore;\n this._persistanceStore = _persistanceStore;\n this._queryParams = _queryParams;\n this._savedFilters = _savedFilters;\n this._pending$ = new BehaviorSubject(false);\n this._shouldResetSavedFilters = true;\n this._destroy$ = new Subject();\n }\n get params() {\n var _a;\n let result = {};\n if (this._persistanceStore.enabled) {\n result = Object.assign(Object.assign({}, result), (_a = this._persistanceStore.value) === null || _a === void 0 ? void 0 : _a.data);\n }\n if (this._savedFilters.enabled && this._savedFilters.activeFilter) {\n const query = Object.keys(result)\n .filter((key) => !this._itemsStore.itemNames.includes(key))\n .reduce((acc, key) => {\n return Object.assign(Object.assign({}, acc), { [key]: result[key] });\n }, {});\n result = Object.assign(Object.assign({}, query), this._savedFilters.activeFilterData);\n }\n else if (this._queryParams.enabled) {\n result = Object.assign(Object.assign({}, result), this._queryParams.fetchedParams);\n }\n return result;\n }\n get pending() {\n return this._pending$.getValue();\n }\n get pending$() {\n return this._pending$.asObservable();\n }\n get savedFiltersController() {\n return this._savedFilters;\n }\n get savedFiltersEnabled() {\n return this._savedFilters.enabled;\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n setConfig(config) {\n this._config = config;\n this._initPersistance();\n this._initQueryParams();\n this._initSavedFilters();\n this.initItems();\n }\n setActiveSavedFilter(savedFilter) {\n this.savedFiltersController.setActiveFilter(savedFilter);\n if (savedFilter) {\n this.reloadFiltersWithValues(savedFilter.filters, false);\n }\n }\n reloadFiltersWithValues(params, shouldResetSavedFilters = true) {\n this._shouldResetSavedFilters = shouldResetSavedFilters;\n this._itemsStore.updateItemsWithValues(params);\n this._saveQueryParams();\n this._savePersistedParams();\n }\n initItems() {\n this._pending$.next(true);\n if (this._savedFilters.enabled) {\n this._savedFilters\n .load()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._savedFilters.updateActiveFilter();\n this._initItemsValues();\n this._listenAndResetSavedFilters();\n this._pending$.next(false);\n });\n }\n else {\n this._initItemsValues();\n this._pending$.next(false);\n }\n this._listenItemsChange();\n }\n _initItemsValues() {\n this._itemsStore.init(this.params);\n this._saveQueryParams();\n this._savePersistedParams();\n }\n fetchQueryParams() {\n this._initQueryParams();\n this._itemsStore.updateItemsWithValues(this.params);\n }\n _initPersistance() {\n this._persistanceStore.init(this._config.persist, this._config.namespace, this._config.case);\n }\n _initQueryParams() {\n this._queryParams.init(this._config.queryParam, this._config.case);\n }\n _initSavedFilters() {\n this._savedFilters.init(this._config.savedFilters, this._config.case);\n }\n _listenItemsChange() {\n this._itemsStore.ready$\n .pipe(filter$1((v) => v), take(1), takeUntil(this._destroy$))\n .subscribe(() => {\n this._saveQueryParams();\n this._savePersistedParams();\n });\n this._itemsStore\n .itemsChange$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._saveQueryParams();\n this._savePersistedParams();\n });\n }\n _listenAndResetSavedFilters() {\n this._itemsStore\n .itemsChange$\n .pipe(filter$1(() => !!this.savedFiltersController.activeFilter), switchMap(() => {\n const shouldReset = this._shouldResetSavedFilters;\n this._shouldResetSavedFilters = true;\n return of(shouldReset);\n }), filter$1((shouldReset) => shouldReset), takeUntil(this._destroy$))\n .subscribe(() => {\n this.savedFiltersController.resetActiveFilter();\n });\n }\n _saveQueryParams() {\n const targetItems = this._itemsStore.items\n .filter((item) => !item.queryParamsDisabled);\n const params = buildQueryParams(this._itemsStore.valuesAsQuery({\n onlyPresented: false,\n items: targetItems,\n persisted: true,\n }), targetItems);\n this._queryParams.writeStateToQueryParams(params);\n }\n _savePersistedParams() {\n const targetItems = this._itemsStore.items\n .filter((item) => !item.persistanceDisabled);\n const params = buildQueryParams(this._itemsStore.valuesAsQuery({\n onlyPresented: false,\n items: targetItems,\n persisted: true,\n }), targetItems);\n this._persistanceStore.save(params);\n }\n}\nExternalParamsController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ExternalParamsController, deps: [{ token: FsFilterItemsStore }, { token: PersistanceParamsController }, { token: QueryParamsController }, { token: SavedFiltersController }], target: i0.ɵɵFactoryTarget.Injectable });\nExternalParamsController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ExternalParamsController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ExternalParamsController, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: FsFilterItemsStore }, { type: PersistanceParamsController }, { type: QueryParamsController }, { type: SavedFiltersController }]; } });\n\nclass FsFilterActionButtonComponent {\n constructor() {\n this.ActionType = ActionType;\n }\n}\nFsFilterActionButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nFsFilterActionButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterActionButtonComponent, selector: \"fs-filter-action-button\", inputs: { action: \"action\" }, host: { classAttribute: \"action-button\" }, ngImport: i0, template: \"<ng-container [ngSwitch]=\\\"action.type\\\">\\n <button\\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.Icon\\\"\\n mat-icon-button\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <!-- Fab button -->\\n <button \\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.Fab\\\"\\n mat-fab\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <!-- Mini Fab button -->\\n <button \\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.MiniFab\\\"\\n mat-mini-fab\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <button \\n type=\\\"button\\\"\\n *ngSwitchDefault\\n mat-button\\n [ngClass]=\\\"{ \\n 'mat-raised-button': action.type === ActionType.Raised,\\n 'mat-flat-button': action.type === ActionType.Flat,\\n 'mat-stroked-button': action.type === ActionType.Stroked,\\n 'mat-button': action.type === ActionType.Basic,\\n 'mat-icon-button': action.type === ActionType.Icon\\n }\\\"\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [class]=\\\"action.classArray.join(' ')\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <ng-template #buttonContent>\\n <ng-container *ngIf=\\\"!action.icon else withIcon\\\">\\n {{action.label}}\\n </ng-container>\\n\\n <ng-template #withIcon>\\n <mat-icon *ngIf=\\\"!action.iconPlacement || action.iconPlacement === 'left'\\\">{{action.icon}}</mat-icon>\\n {{action.label}}\\n <mat-icon *ngIf=\\\"action.iconPlacement === 'right'\\\">{{action.icon}}</mat-icon>\\n </ng-template>\\n </ng-template>\\n</ng-container>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i1$1.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i3$1.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionButtonComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-action-button', host: { class: 'action-button' }, changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container [ngSwitch]=\\\"action.type\\\">\\n <button\\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.Icon\\\"\\n mat-icon-button\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <!-- Fab button -->\\n <button \\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.Fab\\\"\\n mat-fab\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <!-- Mini Fab button -->\\n <button \\n type=\\\"button\\\"\\n *ngSwitchCase=\\\"ActionType.MiniFab\\\"\\n mat-mini-fab\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [ngClass]=\\\"action.classArray\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <button \\n type=\\\"button\\\"\\n *ngSwitchDefault\\n mat-button\\n [ngClass]=\\\"{ \\n 'mat-raised-button': action.type === ActionType.Raised,\\n 'mat-flat-button': action.type === ActionType.Flat,\\n 'mat-stroked-button': action.type === ActionType.Stroked,\\n 'mat-button': action.type === ActionType.Basic,\\n 'mat-icon-button': action.type === ActionType.Icon\\n }\\\"\\n (click)=\\\"action.click && action.click($event)\\\"\\n [color]=\\\"action.color\\\"\\n [class]=\\\"action.classArray.join(' ')\\\"\\n [disabled]=\\\"action.disabled$ | async\\\"\\n [tabIndex]=\\\"action.tabIndex\\\">\\n <ng-template [ngTemplateOutlet]=\\\"buttonContent\\\"></ng-template>\\n </button>\\n\\n <ng-template #buttonContent>\\n <ng-container *ngIf=\\\"!action.icon else withIcon\\\">\\n {{action.label}}\\n </ng-container>\\n\\n <ng-template #withIcon>\\n <mat-icon *ngIf=\\\"!action.iconPlacement || action.iconPlacement === 'left'\\\">{{action.icon}}</mat-icon>\\n {{action.label}}\\n <mat-icon *ngIf=\\\"action.iconPlacement === 'right'\\\">{{action.icon}}</mat-icon>\\n </ng-template>\\n </ng-template>\\n</ng-container>\\n\" }]\n }], propDecorators: { action: [{\n type: Input\n }] } });\n\nclass FsFilterActionKebabActionsComponent {\n}\nFsFilterActionKebabActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionKebabActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nFsFilterActionKebabActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterActionKebabActionsComponent, selector: \"fs-filter-action-kebab-actions\", inputs: { kebabActions: \"kebabActions\" }, ngImport: i0, template: \"<button \\n type=\\\"button\\\"\\n mat-icon-button\\n class=\\\"menu-button\\\"\\n [fsMenuTriggerFor]=\\\"kebabActionsMenu\\\">\\n <mat-icon>more_vert</mat-icon>\\n</button>\\n<fs-menu #kebabActionsMenu>\\n <ng-container *ngFor=\\\"let action of kebabActions\\\">\\n <ng-container [ngSwitch]=\\\"action.mode\\\">\\n <!-- Case when actions was collapsed from action with mode = 'menu'-->\\n <ng-container *ngSwitchCase=\\\"'menu'\\\">\\n <ng-container *ngFor=\\\"let childAction of action.items\\\">\\n <ng-container *ngIf=\\\"childAction.isGroup else simpleMenuItem\\\">\\n <fs-menu-group>\\n <ng-template fs-group-menu-item-template>\\n {{ action.label }} <mat-icon style=\\\"margin: 0;\\\">arrow_right</mat-icon> {{childAction.label}}\\n </ng-template>\\n <ng-container *ngFor=\\\"let subAction of childAction.items\\\">\\n <ng-template \\n fs-menu-item\\n [link]=\\\"subAction.routerLink?.link\\\"\\n [queryParams]=\\\"subAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"!(subAction.visible$ | async)\\\"\\n (click)=\\\"subAction.click($event)\\\">\\n <mat-icon *ngIf=\\\"subAction.icon\\\">{{subAction.icon}}</mat-icon>\\n {{subAction.label}}\\n </ng-template>\\n </ng-container>\\n </fs-menu-group>\\n </ng-container>\\n <ng-template #simpleMenuItem>\\n <ng-template \\n fs-menu-item\\n [link]=\\\"childAction.routerLink?.link\\\"\\n [queryParams]=\\\"childAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"!(childAction.visible$ | async)\\\"\\n (click)=\\\"childAction.click($event);\\\">\\n <mat-icon *ngIf=\\\"childAction.icon\\\">{{childAction.icon}}</mat-icon>\\n {{ action.label }} <mat-icon style=\\\"margin: 0;\\\">arrow_right</mat-icon>{{ childAction.label }}\\n </ng-template>\\n </ng-template>\\n </ng-container>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'file'\\\">\\n <ng-template \\n fs-menu-file-item\\n [fsClass]=\\\"action.classArray\\\"\\n [multiple]=\\\"action.multiple\\\"\\n [accept]=\\\"action.accept || '*'\\\"\\n [minWidth]=\\\"action.minWidth\\\"\\n [minHeight]=\\\"action.minHeight\\\"\\n [imageWidth]=\\\"action.maxWidth\\\"\\n [imageHeight]=\\\"action.maxHeight\\\"\\n (error)=\\\"action.fileError($event)\\\"\\n (select)=\\\"action.fileSelected($event)\\\"\\n (click)=\\\"action.click($event)\\\">\\n <mat-icon *ngIf=\\\"action.icon\\\">{{action.icon}}</mat-icon> {{action.label}}\\n </ng-template>\\n </ng-container>\\n\\n <ng-container *ngSwitchDefault>\\n <ng-template \\n fs-menu-item\\n (click)=\\\"action.click($event)\\\"\\n [fsClass]=\\\"action.classArray\\\">\\n <mat-icon *ngIf=\\\"action.icon\\\">{{action.icon}}</mat-icon> {{action.label}}\\n </ng-template>\\n </ng-container>\\n\\n </ng-container>\\n </ng-container>\\n</fs-menu>\\n\", styles: [\".menu-button{width:36px;height:36px;line-height:36px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i1$1.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i3$1.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"component\", type: i6$1.FsMenuComponent, selector: \"fs-menu\", inputs: [\"class\", \"buttonClass\", \"buttonType\", \"buttonColor\"], outputs: [\"opened\", \"closed\"] }, { kind: \"directive\", type: i6$1.FsMenuItemDirective, selector: \"fs-menu-group,[fs-menu-item]\" }, { kind: \"directive\", type: i6$1.FsMenuTriggerDirective, selector: \"[fsMenuTriggerFor]\", inputs: [\"fsMenuTriggerFor\"] }, { kind: \"directive\", type: i6$1.FsMenuFileItemDirective, selector: \"[fs-menu-file-item]\", inputs: [\"multiple\", \"accept\", \"minWidth\", \"minHeight\", \"imageWidth\", \"imageHeight\"], outputs: [\"select\", \"error\"] }, { kind: \"directive\", type: i6$1.FsGroupMenuItemTemplateDirective, selector: \"[fs-group-menu-item-template]\" }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionKebabActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-action-kebab-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<button \\n type=\\\"button\\\"\\n mat-icon-button\\n class=\\\"menu-button\\\"\\n [fsMenuTriggerFor]=\\\"kebabActionsMenu\\\">\\n <mat-icon>more_vert</mat-icon>\\n</button>\\n<fs-menu #kebabActionsMenu>\\n <ng-container *ngFor=\\\"let action of kebabActions\\\">\\n <ng-container [ngSwitch]=\\\"action.mode\\\">\\n <!-- Case when actions was collapsed from action with mode = 'menu'-->\\n <ng-container *ngSwitchCase=\\\"'menu'\\\">\\n <ng-container *ngFor=\\\"let childAction of action.items\\\">\\n <ng-container *ngIf=\\\"childAction.isGroup else simpleMenuItem\\\">\\n <fs-menu-group>\\n <ng-template fs-group-menu-item-template>\\n {{ action.label }} <mat-icon style=\\\"margin: 0;\\\">arrow_right</mat-icon> {{childAction.label}}\\n </ng-template>\\n <ng-container *ngFor=\\\"let subAction of childAction.items\\\">\\n <ng-template \\n fs-menu-item\\n [link]=\\\"subAction.routerLink?.link\\\"\\n [queryParams]=\\\"subAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"!(subAction.visible$ | async)\\\"\\n (click)=\\\"subAction.click($event)\\\">\\n <mat-icon *ngIf=\\\"subAction.icon\\\">{{subAction.icon}}</mat-icon>\\n {{subAction.label}}\\n </ng-template>\\n </ng-container>\\n </fs-menu-group>\\n </ng-container>\\n <ng-template #simpleMenuItem>\\n <ng-template \\n fs-menu-item\\n [link]=\\\"childAction.routerLink?.link\\\"\\n [queryParams]=\\\"childAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"!(childAction.visible$ | async)\\\"\\n (click)=\\\"childAction.click($event);\\\">\\n <mat-icon *ngIf=\\\"childAction.icon\\\">{{childAction.icon}}</mat-icon>\\n {{ action.label }} <mat-icon style=\\\"margin: 0;\\\">arrow_right</mat-icon>{{ childAction.label }}\\n </ng-template>\\n </ng-template>\\n </ng-container>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'file'\\\">\\n <ng-template \\n fs-menu-file-item\\n [fsClass]=\\\"action.classArray\\\"\\n [multiple]=\\\"action.multiple\\\"\\n [accept]=\\\"action.accept || '*'\\\"\\n [minWidth]=\\\"action.minWidth\\\"\\n [minHeight]=\\\"action.minHeight\\\"\\n [imageWidth]=\\\"action.maxWidth\\\"\\n [imageHeight]=\\\"action.maxHeight\\\"\\n (error)=\\\"action.fileError($event)\\\"\\n (select)=\\\"action.fileSelected($event)\\\"\\n (click)=\\\"action.click($event)\\\">\\n <mat-icon *ngIf=\\\"action.icon\\\">{{action.icon}}</mat-icon> {{action.label}}\\n </ng-template>\\n </ng-container>\\n\\n <ng-container *ngSwitchDefault>\\n <ng-template \\n fs-menu-item\\n (click)=\\\"action.click($event)\\\"\\n [fsClass]=\\\"action.classArray\\\">\\n <mat-icon *ngIf=\\\"action.icon\\\">{{action.icon}}</mat-icon> {{action.label}}\\n </ng-template>\\n </ng-container>\\n\\n </ng-container>\\n </ng-container>\\n</fs-menu>\\n\", styles: [\".menu-button{width:36px;height:36px;line-height:36px}\\n\"] }]\n }], propDecorators: { kebabActions: [{\n type: Input\n }] } });\n\nclass FsFilterActionsComponent {\n constructor() {\n this.kebabActions = [];\n this.actions = [];\n this.ActionType = ActionType;\n this.ActionMode = ActionMode;\n }\n actionChange(action, value, selectButton) {\n if (action.change) {\n action.change(value);\n if (action.deselect) {\n selectButton.writeValue(null);\n }\n }\n }\n}\nFsFilterActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nFsFilterActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterActionsComponent, selector: \"fs-filter-actions\", inputs: { kebabActions: \"kebabActions\", actions: \"actions\" }, ngImport: i0, template: \"<ng-container *ngFor=\\\"let action of actions\\\">\\n <ng-container [ngSwitch]=\\\"action.mode\\\">\\n <ng-container *ngSwitchCase=\\\"ActionMode.Button\\\">\\n <fs-filter-action-button\\n [action]=\\\"action\\\"\\n class=\\\"action\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n </fs-filter-action-button>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.Menu\\\">\\n <fs-filter-action-button\\n class=\\\"action\\\"\\n [action]=\\\"action\\\"\\n [fsMenuTriggerFor]=\\\"someRef\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n </fs-filter-action-button>\\n\\n <fs-menu #someRef class=\\\"action\\\">\\n <ng-container *ngFor=\\\"let childAction of action.items\\\">\\n <ng-container *ngIf=\\\"childAction.isGroup else simpleMenuItem\\\">\\n <fs-menu-group [label]=\\\"childAction.label\\\">\\n <ng-container *ngFor=\\\"let subAction of childAction.items\\\">\\n <ng-template\\n fs-menu-item\\n [link]=\\\"subAction.routerLink?.link\\\"\\n [queryParams]=\\\"subAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"(subAction.visible$ | async) === false\\\"\\n (click)=\\\"subAction.click($event)\\\">\\n <mat-icon *ngIf=\\\"subAction.icon\\\">{{subAction.icon}}</mat-icon>\\n {{subAction.label}}\\n </ng-template>\\n </ng-container>\\n </fs-menu-group>\\n </ng-container>\\n <ng-template #simpleMenuItem>\\n <ng-template\\n fs-menu-item\\n [link]=\\\"childAction.routerLink?.link\\\"\\n [queryParams]=\\\"childAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"(childAction.visible$ | async) === false\\\"\\n (click)=\\\"childAction.click($event);\\\">\\n <mat-icon *ngIf=\\\"childAction.icon\\\">{{childAction.icon}}</mat-icon>\\n {{childAction.label}}\\n </ng-template>\\n </ng-template>\\n </ng-container>\\n </fs-menu>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.SelectButton\\\">\\n <mat-select \\n class=\\\"action\\\"\\n [ngClass]=\\\"{ \\n 'mat-stroked-button': action.type === ActionType.Stroked,\\n 'mat-raised-button': action.type === ActionType.Raised,\\n 'mat-flat-button': action.type === ActionType.Flat,\\n 'mat-basic-button': action.type === ActionType.Basic\\n }\\\"\\n [placeholder]=\\\"action.label\\\"\\n [(ngModel)]=\\\"action.value\\\" \\n (ngModelChange)=\\\"actionChange(action, $event, selectButton)\\\"\\n fsSelectButton\\n #selectButton\\n [deselectOnChange]=\\\"false\\\">\\n <mat-option \\n *ngFor=\\\"let item of action.values\\\" \\n [value]=\\\"item.value\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.File\\\">\\n <fs-file\\n class=\\\"action action-button\\\"\\n [accept]=\\\"action.accept || '*'\\\"\\n [multiple]=\\\"action.multiple\\\"\\n [minWidth]=\\\"action.minWidth\\\"\\n [minHeight]=\\\"action.minHeight\\\"\\n [imageWidth]=\\\"action.maxWidth\\\"\\n [imageHeight]=\\\"action.maxHeight\\\"\\n (select)=\\\"action.fileSelected($event)\\\"\\n (error)=\\\"action.fileError($event)\\\"\\n (clicked)=\\\"action.click($event)\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n <fs-filter-action-button \\n [action]=\\\"action\\\">\\n </fs-filter-action-button>\\n </fs-file>\\n </ng-container>\\n </ng-container>\\n</ng-container>\\n<ng-container *ngIf=\\\"kebabActions?.length\\\">\\n <fs-filter-action-kebab-actions\\n [kebabActions]=\\\"kebabActions\\\">\\n </fs-filter-action-kebab-actions>\\n</ng-container>\\n\", styles: [\":host{display:inline-flex}.action-button{display:block}.action+.action{margin-left:5px}.menu-button{width:36px;height:36px;line-height:36px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i6$1.FsMenuComponent, selector: \"fs-menu\", inputs: [\"class\", \"buttonClass\", \"buttonType\", \"buttonColor\"], outputs: [\"opened\", \"closed\"] }, { kind: \"directive\", type: i6$1.FsMenuItemDirective, selector: \"fs-menu-group,[fs-menu-item]\" }, { kind: \"directive\", type: i6$1.FsMenuTriggerDirective, selector: \"[fsMenuTriggerFor]\", inputs: [\"fsMenuTriggerFor\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"component\", type: i8.FsFileComponent, selector: \"fs-file\", inputs: [\"minHeight\", \"minWidth\", \"orientate\", \"multiple\", \"capture\", \"allowClick\", \"allowDrop\", \"accept\", \"disabled\", \"imageWidth\", \"imageHeight\", \"imageQuality\"], outputs: [\"select\", \"selectPreviews\", \"error\", \"clicked\", \"declined\"] }, { kind: \"directive\", type: i9$1.FsSelectButtonDirective, selector: \"[fsSelectButton]\", inputs: [\"color\", \"width\", \"buttonType\", \"deselectOnChange\"] }, { kind: \"directive\", type: i10.FsPopoverDirective, selector: \"[fsPopover]\", inputs: [\"text\", \"template\", \"data\", \"leaveDelay\", \"showDelay\", \"maxWidth\", \"wrapperClass\", \"autoShow\", \"autoClose\", \"loadingDiameter\", \"loading\", \"indication\", \"position\", \"theme\", \"size\", \"trigger\", \"enabled\"] }, { kind: \"component\", type: FsFilterActionButtonComponent, selector: \"fs-filter-action-button\", inputs: [\"action\"] }, { kind: \"component\", type: FsFilterActionKebabActionsComponent, selector: \"fs-filter-action-kebab-actions\", inputs: [\"kebabActions\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container *ngFor=\\\"let action of actions\\\">\\n <ng-container [ngSwitch]=\\\"action.mode\\\">\\n <ng-container *ngSwitchCase=\\\"ActionMode.Button\\\">\\n <fs-filter-action-button\\n [action]=\\\"action\\\"\\n class=\\\"action\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n </fs-filter-action-button>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.Menu\\\">\\n <fs-filter-action-button\\n class=\\\"action\\\"\\n [action]=\\\"action\\\"\\n [fsMenuTriggerFor]=\\\"someRef\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n </fs-filter-action-button>\\n\\n <fs-menu #someRef class=\\\"action\\\">\\n <ng-container *ngFor=\\\"let childAction of action.items\\\">\\n <ng-container *ngIf=\\\"childAction.isGroup else simpleMenuItem\\\">\\n <fs-menu-group [label]=\\\"childAction.label\\\">\\n <ng-container *ngFor=\\\"let subAction of childAction.items\\\">\\n <ng-template\\n fs-menu-item\\n [link]=\\\"subAction.routerLink?.link\\\"\\n [queryParams]=\\\"subAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"(subAction.visible$ | async) === false\\\"\\n (click)=\\\"subAction.click($event)\\\">\\n <mat-icon *ngIf=\\\"subAction.icon\\\">{{subAction.icon}}</mat-icon>\\n {{subAction.label}}\\n </ng-template>\\n </ng-container>\\n </fs-menu-group>\\n </ng-container>\\n <ng-template #simpleMenuItem>\\n <ng-template\\n fs-menu-item\\n [link]=\\\"childAction.routerLink?.link\\\"\\n [queryParams]=\\\"childAction.routerLink?.queryParams\\\"\\n [hidden]=\\\"(childAction.visible$ | async) === false\\\"\\n (click)=\\\"childAction.click($event);\\\">\\n <mat-icon *ngIf=\\\"childAction.icon\\\">{{childAction.icon}}</mat-icon>\\n {{childAction.label}}\\n </ng-template>\\n </ng-template>\\n </ng-container>\\n </fs-menu>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.SelectButton\\\">\\n <mat-select \\n class=\\\"action\\\"\\n [ngClass]=\\\"{ \\n 'mat-stroked-button': action.type === ActionType.Stroked,\\n 'mat-raised-button': action.type === ActionType.Raised,\\n 'mat-flat-button': action.type === ActionType.Flat,\\n 'mat-basic-button': action.type === ActionType.Basic\\n }\\\"\\n [placeholder]=\\\"action.label\\\"\\n [(ngModel)]=\\\"action.value\\\" \\n (ngModelChange)=\\\"actionChange(action, $event, selectButton)\\\"\\n fsSelectButton\\n #selectButton\\n [deselectOnChange]=\\\"false\\\">\\n <mat-option \\n *ngFor=\\\"let item of action.values\\\" \\n [value]=\\\"item.value\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"ActionMode.File\\\">\\n <fs-file\\n class=\\\"action action-button\\\"\\n [accept]=\\\"action.accept || '*'\\\"\\n [multiple]=\\\"action.multiple\\\"\\n [minWidth]=\\\"action.minWidth\\\"\\n [minHeight]=\\\"action.minHeight\\\"\\n [imageWidth]=\\\"action.maxWidth\\\"\\n [imageHeight]=\\\"action.maxHeight\\\"\\n (select)=\\\"action.fileSelected($event)\\\"\\n (error)=\\\"action.fileError($event)\\\"\\n (clicked)=\\\"action.click($event)\\\"\\n fsPopover\\n [enabled]=\\\"!!action.tooltip\\\"\\n [text]=\\\"action.tooltip\\\">\\n <fs-filter-action-button \\n [action]=\\\"action\\\">\\n </fs-filter-action-button>\\n </fs-file>\\n </ng-container>\\n </ng-container>\\n</ng-container>\\n<ng-container *ngIf=\\\"kebabActions?.length\\\">\\n <fs-filter-action-kebab-actions\\n [kebabActions]=\\\"kebabActions\\\">\\n </fs-filter-action-kebab-actions>\\n</ng-container>\\n\", styles: [\":host{display:inline-flex}.action-button{display:block}.action+.action{margin-left:5px}.menu-button{width:36px;height:36px;line-height:36px}\\n\"] }]\n }], propDecorators: { kebabActions: [{\n type: Input\n }], actions: [{\n type: Input\n }] } });\n\nclass FsFilterChipContentComponent {\n constructor(_cdRef) {\n this._cdRef = _cdRef;\n this._destroy$ = new Subject();\n }\n ngOnInit() {\n this.listenValueChangesForRanges();\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n listenValueChangesForRanges() {\n this.item.value$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.content = this._getContent();\n this._cdRef.detectChanges();\n });\n }\n _getContent() {\n const result = this.item.getChipsContent(this.type);\n if (this.item.chipLabel !== undefined) {\n if (this.item.chipLabel === '') {\n return `${result}`;\n }\n else {\n if (Array.isArray(this.item.chipLabel)) {\n const label = getLabelFromArray(this.item.chipLabel, this.type);\n return `${label}: ${result}`;\n }\n else {\n return `${this.item.chipLabel}: ${result}`;\n }\n }\n }\n else {\n if (Array.isArray(this.item.label)) {\n const label = getLabelFromArray(this.item.label, this.type);\n return `${label}: ${result}`;\n }\n else {\n if (this.item.isTypeCheckbox) {\n return result;\n }\n else {\n return `${this.item.label}: ${result}`;\n }\n }\n }\n }\n}\nFsFilterChipContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipContentComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterChipContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterChipContentComponent, selector: \"fs-filter-chip-content\", inputs: { item: \"item\", type: \"type\" }, ngImport: i0, template: \"{{ content }}\\n\", styles: [\"\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipContentComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-chip-content', changeDetection: ChangeDetectionStrategy.OnPush, template: \"{{ content }}\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }], type: [{\n type: Input\n }] } });\nfunction getLabelFromArray(labelArr, type) {\n if (type === 'from' && labelArr[0]) {\n return `${labelArr[0]}`;\n }\n else if (type === 'to' && labelArr[1]) {\n return `${labelArr[1]}`;\n }\n else {\n return '';\n }\n}\n\nclass FocusControllerService {\n constructor() {\n this._focusOn = new BehaviorSubject(null);\n }\n get focusOn$() {\n return this._focusOn.asObservable();\n }\n click(item, type = null) {\n this._focusOn.next({ item, type });\n }\n listenFocusFor$(targetItem, targetType = null) {\n return this._focusOn\n .pipe(filter$1((event) => !!event), filter$1(({ item, type }) => {\n return targetItem === item && targetType === type;\n }), tap(() => this.clearFocus()));\n }\n clearFocus() {\n this._focusOn.next(null);\n }\n}\nFocusControllerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusControllerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nFocusControllerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusControllerService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusControllerService, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return []; } });\n\nclass FsFilterChipComponent {\n constructor(_cdRef, _focusController) {\n this._cdRef = _cdRef;\n this._focusController = _focusController;\n this._chipRenderTimer$ = timer(500)\n .pipe(mapTo(true));\n this._destroy$ = new Subject();\n }\n ngOnInit() {\n this.rangeItem = this.item.isTypeDateRange\n || this.item.isTypeRange\n || this.item.isTypeDateTimeRange;\n this.listenValueChangesForRanges();\n this._updateVisibility();\n if (this.item.hasPendingValues) {\n this.item.loadAsyncValues(false);\n this.item.values$\n .pipe(take(2), takeUntil(this._destroy$))\n .subscribe(() => {\n this._updateVisibility();\n this._cdRef.markForCheck();\n });\n this._initDelayRender();\n }\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n focusOnItem(type = null) {\n this._focusController.click(this.item, type);\n }\n removeItem(event, type = null) {\n if (this.item instanceof RangeItem) {\n this.item.clearRange(type);\n }\n else if (this.item instanceof DateRangeItem || this.item instanceof DateTimeRangeItem) {\n this.item.clearDateRange(type);\n }\n else {\n this.item.clear();\n }\n }\n listenValueChangesForRanges() {\n this.item.value$\n .pipe(distinctUntilChanged(), takeUntil(this._destroy$))\n .subscribe(() => {\n this._updateVisibility();\n this._cdRef.markForCheck();\n });\n }\n _updateVisibility() {\n this.itemVisible = this.item.isChipVisible;\n }\n _initDelayRender() {\n this.chipDelayedRender$ = combineLatest([\n this.item.values$,\n this._chipRenderTimer$.pipe(startWith(false)),\n ])\n .pipe(map(([values, timerValue]) => {\n return !!values || timerValue;\n }));\n }\n}\nFsFilterChipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: FocusControllerService }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterChipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterChipComponent, selector: \"fs-filter-chip\", inputs: { item: \"item\" }, ngImport: i0, template: \"<ng-container *ngIf=\\\"!item.hasPendingValues || (chipDelayedRender$ | async)\\\">\\n <ng-container *ngIf=\\\"rangeItem; else defaultChip\\\">\\n <fs-chip\\n *ngIf=\\\"item.model?.min || item.model?.from\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem('from')\\\"\\n (removed)=\\\"removeItem($event, 'from')\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item, type: 'from' }\\\">\\n </ng-template>\\n </fs-chip>\\n\\n <fs-chip\\n *ngIf=\\\"item.model?.max || item.model?.to\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem('to')\\\"\\n (removed)=\\\"removeItem($event, 'to')\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item, type: 'to' }\\\">\\n </ng-template>\\n </fs-chip>\\n\\n </ng-container>\\n\\n <ng-template #defaultChip>\\n <fs-chip\\n *ngIf=\\\"itemVisible\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem()\\\"\\n (removed)=\\\"removeItem($event)\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item }\\\">\\n </ng-template>\\n </fs-chip>\\n </ng-template>\\n\\n <ng-template #chipContent let-item=\\\"item\\\" let-type=\\\"type\\\">\\n <ng-container *ngIf=\\\"!item.hasPendingValues && !item.loading; else lodaingValues\\\">\\n <fs-filter-chip-content [item]=\\\"item\\\" [type]=\\\"type\\\"></fs-filter-chip-content>\\n </ng-container>\\n\\n <ng-template #lodaingValues>\\n Loading...\\n </ng-template>\\n </ng-template>\\n</ng-container>\\n\\n\", styles: [\"fs-chip{cursor:pointer;color:#6f6f6f;margin-right:4px;margin-bottom:4px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: i3$2.FsChipComponent, selector: \"fs-chip\", inputs: [\"selectable\", \"removable\", \"value\", \"icon\", \"image\", \"selected\", \"size\", \"backgroundColor\", \"borderColor\", \"color\", \"outlined\"], outputs: [\"selectedToggled\", \"removed\"] }, { kind: \"component\", type: FsFilterChipContentComponent, selector: \"fs-filter-chip-content\", inputs: [\"item\", \"type\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-chip', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container *ngIf=\\\"!item.hasPendingValues || (chipDelayedRender$ | async)\\\">\\n <ng-container *ngIf=\\\"rangeItem; else defaultChip\\\">\\n <fs-chip\\n *ngIf=\\\"item.model?.min || item.model?.from\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem('from')\\\"\\n (removed)=\\\"removeItem($event, 'from')\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item, type: 'from' }\\\">\\n </ng-template>\\n </fs-chip>\\n\\n <fs-chip\\n *ngIf=\\\"item.model?.max || item.model?.to\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem('to')\\\"\\n (removed)=\\\"removeItem($event, 'to')\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item, type: 'to' }\\\">\\n </ng-template>\\n </fs-chip>\\n\\n </ng-container>\\n\\n <ng-template #defaultChip>\\n <fs-chip\\n *ngIf=\\\"itemVisible\\\"\\n [value]=\\\"item\\\"\\n [selectable]=\\\"false\\\"\\n [removable]=\\\"item.showClear\\\"\\n size=\\\"small\\\"\\n (click)=\\\"focusOnItem()\\\"\\n (removed)=\\\"removeItem($event)\\\">\\n <ng-template\\n [ngTemplateOutlet]=\\\"chipContent\\\"\\n [ngTemplateOutletContext]=\\\"{ item: item }\\\">\\n </ng-template>\\n </fs-chip>\\n </ng-template>\\n\\n <ng-template #chipContent let-item=\\\"item\\\" let-type=\\\"type\\\">\\n <ng-container *ngIf=\\\"!item.hasPendingValues && !item.loading; else lodaingValues\\\">\\n <fs-filter-chip-content [item]=\\\"item\\\" [type]=\\\"type\\\"></fs-filter-chip-content>\\n </ng-container>\\n\\n <ng-template #lodaingValues>\\n Loading...\\n </ng-template>\\n </ng-template>\\n</ng-container>\\n\\n\", styles: [\"fs-chip{cursor:pointer;color:#6f6f6f;margin-right:4px;margin-bottom:4px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: FocusControllerService }]; }, propDecorators: { item: [{\n type: Input\n }] } });\n\nclass FsFilterChipsComponent {\n constructor() {\n this.ItemType = ItemType;\n }\n}\nFsFilterChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nFsFilterChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterChipsComponent, selector: \"fs-filter-chips\", inputs: { filters: \"filters\" }, ngImport: i0, template: \"<ng-container *ngFor=\\\"let item of filters\\\">\\n <ng-container *ngIf=\\\"(item.value$ | async) !== undefined && item.type !== ItemType.Keyword\\\">\\n <fs-filter-chip [item]=\\\"item\\\"></fs-filter-chip>\\n </ng-container>\\n</ng-container>\\n\", styles: [\"\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: FsFilterChipComponent, selector: \"fs-filter-chip\", inputs: [\"item\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterChipsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-chips', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container *ngFor=\\\"let item of filters\\\">\\n <ng-container *ngIf=\\\"(item.value$ | async) !== undefined && item.type !== ItemType.Keyword\\\">\\n <fs-filter-chip [item]=\\\"item\\\"></fs-filter-chip>\\n </ng-container>\\n</ng-container>\\n\" }]\n }], propDecorators: { filters: [{\n type: Input\n }] } });\n\nclass FsFilterDrawerActionsComponent {\n constructor(externalParams) {\n this.externalParams = externalParams;\n this._clear = new EventEmitter();\n this._done = new EventEmitter();\n }\n get savedFilters() {\n return this.externalParams.savedFiltersController;\n }\n done() {\n this._done.emit();\n }\n clear() {\n this._clear.emit();\n }\n saveFilters() {\n this.externalParams\n .savedFiltersController\n .openSavedFilterEditDialog();\n }\n}\nFsFilterDrawerActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterDrawerActionsComponent, deps: [{ token: ExternalParamsController }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterDrawerActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterDrawerActionsComponent, selector: \"fs-filter-drawer-actions\", outputs: { _clear: \"clear\", _done: \"done\" }, ngImport: i0, template: \"<a mat-button color=\\\"primary\\\" (click)=\\\"done()\\\">Done</a>\\n<a mat-button (click)=\\\"clear()\\\">Clear</a>\\n<ng-container *ngIf=\\\"savedFilters.enabled$ | async\\\">\\n <a mat-button (click)=\\\"saveFilters()\\\">Save</a>\\n</ng-container>\\n\\n\", styles: [\"@charset \\\"UTF-8\\\";@media (max-width: 599px){h1[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"]{margin-top:0}}.fs-delimit>*:not(:last-child):after{content:\\\",\\\\a0\\\"}@media (max-width: 599px){a{width:100%}}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i3$1.MatAnchor, selector: \"a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matButton\", \"matAnchor\"] }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterDrawerActionsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-drawer-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<a mat-button color=\\\"primary\\\" (click)=\\\"done()\\\">Done</a>\\n<a mat-button (click)=\\\"clear()\\\">Clear</a>\\n<ng-container *ngIf=\\\"savedFilters.enabled$ | async\\\">\\n <a mat-button (click)=\\\"saveFilters()\\\">Save</a>\\n</ng-container>\\n\\n\", styles: [\"@charset \\\"UTF-8\\\";@media (max-width: 599px){h1[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"]{margin-top:0}}.fs-delimit>*:not(:last-child):after{content:\\\",\\\\a0\\\"}@media (max-width: 599px){a{width:100%}}\\n\"] }]\n }], ctorParameters: function () { return [{ type: ExternalParamsController }]; }, propDecorators: { _clear: [{\n type: Output,\n args: ['clear']\n }], _done: [{\n type: Output,\n args: ['done']\n }] } });\n\nconst FILTER_DRAWER_DATA = new InjectionToken('fs.filter-drawer-data');\n\nconst FILTER_DRAWER_OVERLAY = new InjectionToken('fs.filter-drawer-overlay');\n\nclass BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.inline = false;\n this._destroy$ = new Subject();\n this._debouncer$ = new Subject();\n this._kvDiffer = this._kvDiffers.find(this.item || {}).create();\n this.listenWithDebounce();\n }\n set item(value) {\n this._item = value;\n }\n get item() {\n return this._item;\n }\n ngDoCheck() {\n if (this._kvDiffer) {\n const changes = this._kvDiffer.diff(this.item);\n if (changes) {\n this._cd.detectChanges();\n }\n }\n }\n ngOnChanges(changes) {\n if (changes.item) {\n this.label = Array.isArray(this.item.label) ? this.item.label[0] : this.item.label;\n }\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n listenWithDebounce() {\n this._debouncer$\n .pipe(debounceTime(150), takeUntil(this._destroy$))\n .subscribe(() => {\n this.item.valueChanged();\n });\n }\n itemChange() {\n this._debouncer$.next();\n }\n}\nBaseItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BaseItemComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nBaseItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: BaseItemComponent, selector: \"base-item\", inputs: { item: \"item\", inline: \"inline\" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: BaseItemComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'base-item',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }], inline: [{\n type: Input\n }] } });\n\nclass FocusToItemDirective {\n constructor(_el, _focusController, _targetSelect, _targetDate, _targetDateScroll, _targetDateRangeFrom, _targetDateRangeTo, _targetAutocomplete, _targetAutocompleteChips) {\n this._el = _el;\n this._focusController = _focusController;\n this._targetSelect = _targetSelect;\n this._targetDate = _targetDate;\n this._targetDateScroll = _targetDateScroll;\n this._targetDateRangeFrom = _targetDateRangeFrom;\n this._targetDateRangeTo = _targetDateRangeTo;\n this._targetAutocomplete = _targetAutocomplete;\n this._targetAutocompleteChips = _targetAutocompleteChips;\n this._destroy$ = new Subject();\n }\n ngOnInit() {\n this._focusController\n .listenFocusFor$(this._item, this._focusTargetType)\n .pipe(delay(500), takeUntil(this._destroy$))\n .subscribe(() => {\n this._focus();\n });\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n _focus() {\n switch (this._item.type) {\n case ItemType.Select:\n {\n this._targetSelect.open();\n }\n break;\n case ItemType.Text:\n case ItemType.Range:\n {\n this._el.nativeElement.focus();\n }\n break;\n case ItemType.Date:\n {\n if (this._item.mode === ItemDateMode.Calendar) {\n this._targetDate.open();\n }\n else {\n this._targetDateScroll.open();\n }\n }\n break;\n case ItemType.DateRange:\n {\n if (this._focusTargetType === 'from') {\n this._targetDateRangeFrom.open();\n }\n else {\n this._targetDateRangeTo.open();\n }\n }\n break;\n case ItemType.AutoComplete:\n {\n this._targetAutocomplete.focus();\n }\n break;\n case ItemType.AutoCompleteChips:\n {\n this._targetAutocompleteChips.focus();\n }\n break;\n }\n }\n}\nFocusToItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusToItemDirective, deps: [{ token: i0.ElementRef }, { token: FocusControllerService }, { token: i4$1.MatSelect, optional: true, self: true }, { token: i3$3.FsDatePickerComponent, optional: true, self: true }, { token: i3$3.FsDateScrollPickerComponent, optional: true, self: true }, { token: i3$3.DateRangePickerFromComponent, optional: true, self: true }, { token: i3$3.DateRangePickerToComponent, optional: true, self: true }, { token: i4$2.FsAutocompleteComponent, optional: true, self: true }, { token: i5$1.FsAutocompleteChipsComponent, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });\nFocusToItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: { _item: [\"fsFilterFocusTrigger\", \"_item\"], _focusTargetType: [\"focusTargetType\", \"_focusTargetType\"] }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FocusToItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fsFilterFocusTrigger]',\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: FocusControllerService }, { type: i4$1.MatSelect, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i3$3.FsDatePickerComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i3$3.FsDateScrollPickerComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i3$3.DateRangePickerFromComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i3$3.DateRangePickerToComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i4$2.FsAutocompleteComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }, { type: i5$1.FsAutocompleteChipsComponent, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }];\n }, propDecorators: { _item: [{\n type: Input,\n args: ['fsFilterFocusTrigger']\n }], _focusTargetType: [{\n type: Input,\n args: ['focusTargetType']\n }] } });\n\nclass SelectGroupsComponent {\n constructor(cd) {\n this.cd = cd;\n }\n compare(o1, o2) {\n return o1 == o2;\n }\n}\nSelectGroupsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectGroupsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nSelectGroupsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectGroupsComponent, selector: \"filter-item-select-groups\", inputs: { item: \"item\" }, viewQueries: [{ propertyName: \"select\", first: true, predicate: [\"select\"], descendants: true, static: true }], ngImport: i0, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [compareWith]=\\\"compare\\\">\\n <ng-container *ngFor=\\\"let selectItem of item.values\\\">\\n <ng-container *ngIf=\\\"selectItem[item.children]; else simpleOption\\\">\\n <mat-optgroup [label]=\\\"selectItem.name\\\">\\n <mat-option *ngFor=\\\"let subItem of selectItem[item.children]\\\"\\n [value]=\\\"subItem.value\\\"\\n [ngStyle]=\\\"selectItem.style\\\">\\n {{ subItem.name }}\\n </mat-option>\\n </mat-optgroup>\\n </ng-container>\\n\\n <ng-template #simpleOption>\\n <mat-option\\n [value]=\\\"selectItem.value\\\"\\n [ngStyle]=\\\"selectItem.style\\\">\\n {{ selectItem.name }}\\n </mat-option>\\n </ng-template>\\n </ng-container>\\n </mat-select>\\n</mat-form-field>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i5.MatOptgroup, selector: \"mat-optgroup\", inputs: [\"disabled\"], exportAs: [\"matOptgroup\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectGroupsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select-groups', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [compareWith]=\\\"compare\\\">\\n <ng-container *ngFor=\\\"let selectItem of item.values\\\">\\n <ng-container *ngIf=\\\"selectItem[item.children]; else simpleOption\\\">\\n <mat-optgroup [label]=\\\"selectItem.name\\\">\\n <mat-option *ngFor=\\\"let subItem of selectItem[item.children]\\\"\\n [value]=\\\"subItem.value\\\"\\n [ngStyle]=\\\"selectItem.style\\\">\\n {{ subItem.name }}\\n </mat-option>\\n </mat-optgroup>\\n </ng-container>\\n\\n <ng-template #simpleOption>\\n <mat-option\\n [value]=\\\"selectItem.value\\\"\\n [ngStyle]=\\\"selectItem.style\\\">\\n {{ selectItem.name }}\\n </mat-option>\\n </ng-template>\\n </ng-container>\\n </mat-select>\\n</mat-form-field>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { select: [{\n type: ViewChild,\n args: ['select', { static: true }]\n }], item: [{\n type: Input\n }] } });\n\nclass FsFilterIsolateValues {\n transform(values, isolate) {\n if (!isolate) {\n return values;\n }\n return values.filter((value) => {\n return value.value !== isolate.value;\n });\n }\n}\nFsFilterIsolateValues.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterIsolateValues, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\nFsFilterIsolateValues.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterIsolateValues, name: \"fsFilterIsolateValues\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterIsolateValues, decorators: [{\n type: Pipe,\n args: [{\n name: 'fsFilterIsolateValues',\n }]\n }] });\n\nclass SelectSimpleComponent {\n constructor(cd) {\n this.cd = cd;\n }\n changed() {\n if (this.item.isolate) {\n this.item.isolate.enabled = false;\n }\n }\n isolateChange(filter) {\n if (filter.isolate.enabled) {\n filter.model = filter.isolate.value;\n }\n else {\n filter.model = null;\n }\n }\n}\nSelectSimpleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectSimpleComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nSelectSimpleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectSimpleComponent, selector: \"filter-item-select-simple\", inputs: { item: \"item\" }, viewQueries: [{ propertyName: \"select\", first: true, predicate: [\"select\"], descendants: true, static: true }], ngImport: i0, template: \"<mat-form-field [ngClass]=\\\"{ isolate: item.isolate }\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n (ngModelChange)=\\\"changed()\\\">\\n <mat-option *ngFor=\\\"let item of item.values | fsFilterIsolateValues: item.isolate\\\"\\n [value]=\\\"item.value\\\"\\n >\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n\\n <mat-hint>\\n <div *ngIf=\\\"item.isolate\\\">\\n <mat-checkbox (change)=\\\"isolateChange(item)\\\" [(ngModel)]=\\\"item.isolate.enabled\\\">\\n <span class=\\\"checkbox-label\\\">{{ item.isolate.label }}</span>\\n </mat-checkbox>\\n </div>\\n </mat-hint>\\n</mat-form-field>\\n\", styles: [\".isolate{margin-bottom:25px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatHint, selector: \"mat-hint\", inputs: [\"align\", \"id\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i6$2.MatCheckbox, selector: \"mat-checkbox\", inputs: [\"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matCheckbox\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }, { kind: \"pipe\", type: FsFilterIsolateValues, name: \"fsFilterIsolateValues\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectSimpleComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select-simple', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field [ngClass]=\\\"{ isolate: item.isolate }\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n (ngModelChange)=\\\"changed()\\\">\\n <mat-option *ngFor=\\\"let item of item.values | fsFilterIsolateValues: item.isolate\\\"\\n [value]=\\\"item.value\\\"\\n >\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n\\n <mat-hint>\\n <div *ngIf=\\\"item.isolate\\\">\\n <mat-checkbox (change)=\\\"isolateChange(item)\\\" [(ngModel)]=\\\"item.isolate.enabled\\\">\\n <span class=\\\"checkbox-label\\\">{{ item.isolate.label }}</span>\\n </mat-checkbox>\\n </div>\\n </mat-hint>\\n</mat-form-field>\\n\", styles: [\".isolate{margin-bottom:25px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }], select: [{\n type: ViewChild,\n args: ['select', { static: true }]\n }] } });\n\nclass SelectMultipleComponent {\n constructor(cd) {\n this.cd = cd;\n }\n changed() {\n if (this.item.isolate) {\n this.item.isolate.enabled = false;\n if (this.item.multiple && Array.isArray(this.item.model)) {\n const index = this.item.model.indexOf(this.item.isolate.value);\n if (index > -1) {\n this.item.model.splice(index, 1);\n }\n }\n }\n }\n close() {\n this.select.close();\n }\n isolateChange(filter) {\n if (filter.isolate.enabled) {\n filter.model = filter.multiple ? [filter.isolate.value] : filter.isolate.value;\n }\n else {\n if (filter.multiple) {\n filter.model = filter.defaultValue ? filter.defaultValue : [];\n }\n else {\n filter.model = filter.defaultValue ? filter.defaultValue : null;\n }\n }\n }\n}\nSelectMultipleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectMultipleComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nSelectMultipleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectMultipleComponent, selector: \"filter-item-select-multiple\", inputs: { item: \"item\" }, viewQueries: [{ propertyName: \"select\", first: true, predicate: [\"select\"], descendants: true, static: true }], ngImport: i0, template: \"<mat-form-field [ngClass]=\\\"{ isolate: item.isolate }\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n (ngModelChange)=\\\"changed()\\\"\\n [multiple]=\\\"item.multiple\\\">\\n <mat-option\\n *ngFor=\\\"let item of item.values | fsFilterIsolateValues: item.isolate\\\"\\n [value]=\\\"item.value\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n\\n <mat-hint>\\n <div *ngIf=\\\"item.isolate\\\">\\n <mat-checkbox (change)=\\\"isolateChange(item)\\\" [(ngModel)]=\\\"item.isolate.enabled\\\">\\n <span class=\\\"checkbox-label\\\">{{ item.isolate.label }}</span>\\n </mat-checkbox>\\n </div>\\n </mat-hint>\\n</mat-form-field>\\n\", styles: [\".isolate{margin-bottom:25px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatHint, selector: \"mat-hint\", inputs: [\"align\", \"id\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: i5.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { kind: \"component\", type: i6$2.MatCheckbox, selector: \"mat-checkbox\", inputs: [\"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matCheckbox\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }, { kind: \"pipe\", type: FsFilterIsolateValues, name: \"fsFilterIsolateValues\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectMultipleComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select-multiple', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field [ngClass]=\\\"{ isolate: item.isolate }\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select\\n #select\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n (ngModelChange)=\\\"changed()\\\"\\n [multiple]=\\\"item.multiple\\\">\\n <mat-option\\n *ngFor=\\\"let item of item.values | fsFilterIsolateValues: item.isolate\\\"\\n [value]=\\\"item.value\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-select>\\n\\n <mat-hint>\\n <div *ngIf=\\\"item.isolate\\\">\\n <mat-checkbox (change)=\\\"isolateChange(item)\\\" [(ngModel)]=\\\"item.isolate.enabled\\\">\\n <span class=\\\"checkbox-label\\\">{{ item.isolate.label }}</span>\\n </mat-checkbox>\\n </div>\\n </mat-hint>\\n</mat-form-field>\\n\", styles: [\".isolate{margin-bottom:25px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }], select: [{\n type: ViewChild,\n args: ['select', { static: true }]\n }] } });\n\nclass SelectComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n // For case when we have multiple selection with __all option\n // If _all has been selected than we must disable all other items\n this.allItemsOptionSelected = false;\n }\n get multipleSelectItem() {\n return this.item;\n }\n get simpleSelectItem() {\n return this.item;\n }\n ngOnChanges(changes) {\n if (changes.item) {\n this.values$ = this.item.values$;\n }\n }\n ngDoCheck() {\n if (this._kvDiffer) {\n const changes = this._kvDiffer.diff(this.item);\n if (changes) {\n this._cd.markForCheck();\n if (this.selectedItem) {\n this.selectedItem.cd.markForCheck();\n }\n }\n }\n }\n}\nSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectComponent, selector: \"filter-item-select\", viewQueries: [{ propertyName: \"selectedItem\", first: true, predicate: [\"selectItem\"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"<ng-container *ngIf=\\\"(item.loading$ | async) else itemSelect\\\">\\n <mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select disabled></mat-select>\\n </mat-form-field>\\n</ng-container>\\n\\n<ng-template #itemSelect>\\n <ng-container *ngIf=\\\"(values$ | async)?.length\\\">\\n <ng-container *ngIf=\\\"item.multiple && !item.children\\\">\\n <filter-item-select-multiple\\n [item]=\\\"multipleSelectItem\\\"\\n #selectItem>\\n </filter-item-select-multiple>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"!item.multiple && !item.children\\\">\\n <filter-item-select-simple\\n [item]=\\\"simpleSelectItem\\\"\\n #selectItem>\\n </filter-item-select-simple>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"item.children\\\">\\n <filter-item-select-groups\\n [item]=\\\"item\\\"\\n #selectItem>\\n </filter-item-select-groups>\\n </ng-container>\\n </ng-container>\\n</ng-template>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"component\", type: i4$1.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { kind: \"component\", type: SelectGroupsComponent, selector: \"filter-item-select-groups\", inputs: [\"item\"] }, { kind: \"component\", type: SelectSimpleComponent, selector: \"filter-item-select-simple\", inputs: [\"item\"] }, { kind: \"component\", type: SelectMultipleComponent, selector: \"filter-item-select-multiple\", inputs: [\"item\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-container *ngIf=\\\"(item.loading$ | async) else itemSelect\\\">\\n <mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <mat-select disabled></mat-select>\\n </mat-form-field>\\n</ng-container>\\n\\n<ng-template #itemSelect>\\n <ng-container *ngIf=\\\"(values$ | async)?.length\\\">\\n <ng-container *ngIf=\\\"item.multiple && !item.children\\\">\\n <filter-item-select-multiple\\n [item]=\\\"multipleSelectItem\\\"\\n #selectItem>\\n </filter-item-select-multiple>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"!item.multiple && !item.children\\\">\\n <filter-item-select-simple\\n [item]=\\\"simpleSelectItem\\\"\\n #selectItem>\\n </filter-item-select-simple>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"item.children\\\">\\n <filter-item-select-groups\\n [item]=\\\"item\\\"\\n #selectItem>\\n </filter-item-select-groups>\\n </ng-container>\\n </ng-container>\\n</ng-template>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { selectedItem: [{\n type: ViewChild,\n args: ['selectItem']\n }] } });\n\nclass ChipsComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n }\n modelChange() {\n this.itemChange();\n }\n compareFn(modelValue, chipValue) {\n return String(modelValue.value) === String(chipValue.value);\n }\n}\nChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ChipsComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: ChipsComponent, selector: \"filter-item-chips\", usesInheritance: true, ngImport: i0, template: \"<ng-template [ngIf]=\\\"item.values?.length\\\">\\n <fs-label-field>\\n <fs-label>{{item.label}}</fs-label>\\n <fs-chips \\n [(ngModel)]=\\\"item.model\\\"\\n [compare]=\\\"compareFn\\\"\\n [multiple]=\\\"item.multiple\\\">\\n <fs-chip \\n *ngFor=\\\"let value of item.values\\\"\\n [value]=\\\"value\\\"\\n [selectable]=\\\"true\\\">\\n {{ value.name }}\\n </fs-chip>\\n </fs-chips>\\n </fs-label-field>\\n</ng-template>\\n\\n<ng-template [ngIf]=\\\"item.loading\\\">{{ item.label }} loading...</ng-template>\\n\", styles: [\"fs-chip{line-height:40px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3$2.FsChipsComponent, selector: \"fs-chips\", inputs: [\"compare\", \"multiple\"] }, { kind: \"component\", type: i3$2.FsChipComponent, selector: \"fs-chip\", inputs: [\"selectable\", \"removable\", \"value\", \"icon\", \"image\", \"selected\", \"size\", \"backgroundColor\", \"borderColor\", \"color\", \"outlined\"], outputs: [\"selectedToggled\", \"removed\"] }, { kind: \"component\", type: i4$3.FsLabelComponent, selector: \"fs-label\" }, { kind: \"component\", type: i4$3.FsLabelFieldComponent, selector: \"fs-label-field\", inputs: [\"bottomMargin\", \"topMargin\", \"labelMargin\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ChipsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-chips', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ng-template [ngIf]=\\\"item.values?.length\\\">\\n <fs-label-field>\\n <fs-label>{{item.label}}</fs-label>\\n <fs-chips \\n [(ngModel)]=\\\"item.model\\\"\\n [compare]=\\\"compareFn\\\"\\n [multiple]=\\\"item.multiple\\\">\\n <fs-chip \\n *ngFor=\\\"let value of item.values\\\"\\n [value]=\\\"value\\\"\\n [selectable]=\\\"true\\\">\\n {{ value.name }}\\n </fs-chip>\\n </fs-chips>\\n </fs-label-field>\\n</ng-template>\\n\\n<ng-template [ngIf]=\\\"item.loading\\\">{{ item.label }} loading...</ng-template>\\n\", styles: [\"fs-chip{line-height:40px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass TextComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.textControl = new UntypedFormControl();\n this.destroy$ = new Subject();\n }\n ngOnInit() {\n this._listenControlValueChanges();\n this._listenModelChanges();\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n _listenControlValueChanges() {\n this.textControl.valueChanges\n .pipe(distinctUntilChanged(), debounceTime(200), takeUntil(this.destroy$))\n .subscribe((value) => {\n this.item.model = value;\n });\n }\n _listenModelChanges() {\n this._item.value$\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.textControl.setValue(this.item.model, { emitEvent: false });\n });\n }\n}\nTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: TextComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: TextComponent, selector: \"filter-item-text\", usesInheritance: true, ngImport: i0, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <span matPrefix *ngIf=\\\"item.prefix\\\" [innerHtml]=\\\"item.prefix\\\"></span>\\n <input matInput [formControl]=\\\"textControl\\\" [fsFilterFocusTrigger]=\\\"item\\\">\\n <span matSuffix *ngIf=\\\"item.suffix\\\" [innerHtml]=\\\"item.suffix\\\"></span>\\n</mat-form-field>\\n\", styles: [\"\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.FormControlDirective, selector: \"[formControl]\", inputs: [\"formControl\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"], exportAs: [\"ngForm\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i3.MatPrefix, selector: \"[matPrefix]\" }, { kind: \"directive\", type: i3.MatSuffix, selector: \"[matSuffix]\" }, { kind: \"directive\", type: i4.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: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: TextComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-text', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <span matPrefix *ngIf=\\\"item.prefix\\\" [innerHtml]=\\\"item.prefix\\\"></span>\\n <input matInput [formControl]=\\\"textControl\\\" [fsFilterFocusTrigger]=\\\"item\\\">\\n <span matSuffix *ngIf=\\\"item.suffix\\\" [innerHtml]=\\\"item.suffix\\\"></span>\\n</mat-form-field>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass WeekComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n }\n ngOnInit() { }\n}\nWeekComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: WeekComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nWeekComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: WeekComponent, selector: \"filter-item-week\", usesInheritance: true, ngImport: i0, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDateWeekPicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [seedDate]=\\\"item.seedDate\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i3.MatPlaceholder, selector: \"mat-placeholder\" }, { kind: \"directive\", type: i4.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: i3$3.FsDateWeekPickerComponent, selector: \"[fsDateWeekPicker]\", inputs: [\"minYear\", \"maxYear\", \"minDate\", \"maxDate\", \"seedDate\", \"period\", \"view\", \"weekStartsOn\"], outputs: [\"change\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: WeekComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-week', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDateWeekPicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [seedDate]=\\\"item.seedDate\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass RangeComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n }\n ngOnInit() {\n this.listenChanges();\n }\n listenChanges() {\n const fromListener = fromEvent(this.from.nativeElement, 'keyup')\n .pipe(distinctUntilChanged());\n const toListener = fromEvent(this.to.nativeElement, 'keyup')\n .pipe(distinctUntilChanged());\n merge(fromListener, toListener)\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.itemChange();\n });\n }\n}\nRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: RangeComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: RangeComponent, selector: \"filter-item-range\", viewQueries: [{ propertyName: \"from\", first: true, predicate: [\"from\"], descendants: true, static: true }, { propertyName: \"to\", first: true, predicate: [\"to\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"form-field\\\">\\n <mat-form-field class=\\\"filter-range-min\\\">\\n <mat-label>{{item.label[0]}}</mat-label>\\n <span \\n matPrefix \\n class=\\\"text-prefix\\\"\\n *ngIf=\\\"item.prefix\\\"\\n [innerHtml]=\\\"item.prefix\\\">\\n </span>\\n <input \\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'from'\\\"\\n type=\\\"text\\\"\\n inputmode=\\\"decimal\\\"\\n [(ngModel)]=\\\"item.model.min\\\"\\n #from>\\n <span \\n matSuffix \\n class=\\\"text-suffix\\\"\\n *ngIf=\\\"item.suffix\\\" \\n [innerHtml]=\\\"item.suffix\\\">\\n </span>\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"filter-range-max\\\">\\n <mat-label>{{item.label[1]}}</mat-label>\\n <span \\n matPrefix \\n class=\\\"text-prefix\\\"\\n *ngIf=\\\"item.prefix\\\"\\n [innerHtml]=\\\"item.prefix\\\">\\n </span>\\n <input \\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'to'\\\"\\n type=\\\"text\\\"\\n inputmode=\\\"decimal\\\"\\n [(ngModel)]=\\\"item.model.max\\\"\\n #to>\\n <span \\n matSuffix \\n class=\\\"text-suffix\\\"\\n *ngIf=\\\"item.suffix\\\"\\n [innerHtml]=\\\"item.suffix\\\">\\n </span>\\n </mat-form-field>\\n</div>\\n\", styles: [\".form-field{display:flex}.form-field mat-form-field{min-width:0}.form-field mat-form-field+mat-form-field{margin-left:10px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i3.MatPrefix, selector: \"[matPrefix]\" }, { kind: \"directive\", type: i3.MatSuffix, selector: \"[matSuffix]\" }, { kind: \"directive\", type: i4.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: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: RangeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-range', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"form-field\\\">\\n <mat-form-field class=\\\"filter-range-min\\\">\\n <mat-label>{{item.label[0]}}</mat-label>\\n <span \\n matPrefix \\n class=\\\"text-prefix\\\"\\n *ngIf=\\\"item.prefix\\\"\\n [innerHtml]=\\\"item.prefix\\\">\\n </span>\\n <input \\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'from'\\\"\\n type=\\\"text\\\"\\n inputmode=\\\"decimal\\\"\\n [(ngModel)]=\\\"item.model.min\\\"\\n #from>\\n <span \\n matSuffix \\n class=\\\"text-suffix\\\"\\n *ngIf=\\\"item.suffix\\\" \\n [innerHtml]=\\\"item.suffix\\\">\\n </span>\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"filter-range-max\\\">\\n <mat-label>{{item.label[1]}}</mat-label>\\n <span \\n matPrefix \\n class=\\\"text-prefix\\\"\\n *ngIf=\\\"item.prefix\\\"\\n [innerHtml]=\\\"item.prefix\\\">\\n </span>\\n <input \\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'to'\\\"\\n type=\\\"text\\\"\\n inputmode=\\\"decimal\\\"\\n [(ngModel)]=\\\"item.model.max\\\"\\n #to>\\n <span \\n matSuffix \\n class=\\\"text-suffix\\\"\\n *ngIf=\\\"item.suffix\\\"\\n [innerHtml]=\\\"item.suffix\\\">\\n </span>\\n </mat-form-field>\\n</div>\\n\", styles: [\".form-field{display:flex}.form-field mat-form-field{min-width:0}.form-field mat-form-field+mat-form-field{margin-left:10px}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { from: [{\n type: ViewChild,\n args: ['from', { static: true }]\n }], to: [{\n type: ViewChild,\n args: ['to', { static: true }]\n }] } });\n\nclass AutocompleteComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.displayWith = (data) => {\n return data ? data.name : data;\n };\n this.fetch = (keyword) => {\n return this.item.valuesFn(keyword, this.item.filter);\n };\n }\n}\nAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: AutocompleteComponent, selector: \"filter-item-autocomplete\", usesInheritance: true, ngImport: i0, template: \"<fs-autocomplete\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [fetch]=\\\"fetch\\\"\\n [displayWith]=\\\"displayWith\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [placeholder]=\\\"label\\\"\\n [fetchOnFocus]=\\\"item.fetchOnFocus\\\"\\n [showClear]=\\\"item.showClear\\\"\\n name=\\\"item.name\\\">\\n <ng-template fsAutocompleteTemplate let-data=\\\"data\\\">\\n {{data.name}}\\n </ng-template>\\n</fs-autocomplete>\\n\", dependencies: [{ kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i4$2.FsAutocompleteComponent, selector: \"fs-autocomplete\", inputs: [\"fetch\", \"displayWith\", \"placeholder\", \"fetchOnFocus\", \"readonly\", \"required\", \"disabled\", \"formFieldClass\", \"appearance\", \"hint\", \"panelWidth\", \"panelClass\", \"showClear\"], outputs: [\"cleared\", \"opened\", \"closed\"] }, { kind: \"directive\", type: i4$2.FsAutocompleteTemplateDirective, selector: \"[fsAutocompleteTemplate]\" }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AutocompleteComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<fs-autocomplete\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [fetch]=\\\"fetch\\\"\\n [displayWith]=\\\"displayWith\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [placeholder]=\\\"label\\\"\\n [fetchOnFocus]=\\\"item.fetchOnFocus\\\"\\n [showClear]=\\\"item.showClear\\\"\\n name=\\\"item.name\\\">\\n <ng-template fsAutocompleteTemplate let-data=\\\"data\\\">\\n {{data.name}}\\n </ng-template>\\n</fs-autocomplete>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass AutocompletechipsComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.fetch = (keyword) => {\n return this.item.valuesFn(keyword, this.item.filter);\n };\n }\n addAutocompleteChipItem(event) {\n if (event.data && this.item.model.indexOf(event.data.value) === -1) {\n this.item.model.push(event.data);\n this.itemChange();\n }\n }\n removeAutocompleteChipItem(event) {\n remove(this.item.model, { value: event.data.value });\n this.itemChange();\n }\n clearAutocompleteChipItem() {\n this.item.clear();\n this.itemChange();\n }\n compareItems(item1, item2) {\n return (item1 === null || item1 === void 0 ? void 0 : item1.value) === (item2 === null || item2 === void 0 ? void 0 : item2.value);\n }\n}\nAutocompletechipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AutocompletechipsComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nAutocompletechipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: AutocompletechipsComponent, selector: \"filter-item-autocompletechips\", usesInheritance: true, ngImport: i0, template: \"<fs-autocomplete-chips\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [fetch]=\\\"fetch\\\"\\n [ngModel]=\\\"item.model\\\"\\n (selected)=\\\"addAutocompleteChipItem($event)\\\"\\n (removed)=\\\"removeAutocompleteChipItem($event)\\\"\\n (clear)=\\\"clearAutocompleteChipItem()\\\"\\n [allowText]=\\\"false\\\"\\n [fetchOnFocus]=\\\"item.fetchOnFocus\\\"\\n [placeholder]=\\\"label\\\"\\n [chipImage]=\\\"item.chipImage\\\"\\n [chipColor]=\\\"item.chipColor\\\"\\n [chipIconColor]=\\\"item.chipIcon\\\"\\n [chipBackground]=\\\"item.chipBackground\\\"\\n [chipIcon]=\\\"item.chipIcon\\\"\\n [chipClass]=\\\"item.chipClass\\\"\\n [allowClear]=\\\"item.showClear\\\"\\n [removable]=\\\"item.showClear\\\"\\n [compareWith]=\\\"compareItems\\\"\\n [panelWidth]=\\\"300\\\"\\n name=\\\"model\\\">\\n <ng-template fsAutocompleteObject let-object=\\\"object\\\">\\n {{ object.name }}\\n </ng-template>\\n</fs-autocomplete-chips>\\n\\n<!--<mat-form-field floatLabel=\\\"auto\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-chip-list #chipList>\\n <mat-chip *ngFor=\\\"let item of item.model\\\"\\n (removed)=\\\"removeAutocompleteChipItem(item)\\\">\\n {{ item.name }}\\n <mat-icon matChipRemove>cancel</mat-icon>\\n </mat-chip>\\n\\n <input #chipsInput\\n type=\\\"text\\\"\\n matInput\\n [(ngModel)]=\\\"item.selectedValue\\\"\\n (ngModelChange)=\\\"onAutocompleteChipsChange(chipsInput)\\\"\\n [name]=\\\"item.name\\\"\\n [matChipInputFor]=\\\"chipList\\\"\\n [matAutocomplete]=\\\"autocompleteChipsInput\\\">\\n </mat-chip-list>\\n\\n <mat-autocomplete #autocompleteChipsInput=\\\"matAutocomplete\\\"\\n (optionSelected)=\\\"addAutocompleteChipItem( $event)\\\"\\n >\\n <mat-option *ngFor=\\\"let item of item.values$ | async\\\" [value]=\\\"item\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-autocomplete>\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>-->\\n\", dependencies: [{ kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i5$1.FsAutocompleteChipsComponent, selector: \"fs-autocomplete-chips\", inputs: [\"fetch\", \"appearance\", \"readonly\", \"size\", \"placeholder\", \"chipImage\", \"chipBackground\", \"chipColor\", \"chipIcon\", \"chipIconColor\", \"chipClass\", \"hint\", \"allowText\", \"allowObject\", \"delay\", \"validateText\", \"removable\", \"allowClear\", \"color\", \"background\", \"orderable\", \"limit\", \"initOnClick\", \"fetchOnFocus\", \"multiple\", \"confirm\", \"disabled\", \"panelWidth\", \"panelClass\", \"compareWith\"], outputs: [\"selected\", \"removed\", \"reordered\", \"clear\"] }, { kind: \"directive\", type: i5$1.FsAutocompleteObjectDirective, selector: \"[fsAutocompleteObject],[fsAutocompleteChipsTemplate]\" }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: AutocompletechipsComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-autocompletechips', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<fs-autocomplete-chips\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [fetch]=\\\"fetch\\\"\\n [ngModel]=\\\"item.model\\\"\\n (selected)=\\\"addAutocompleteChipItem($event)\\\"\\n (removed)=\\\"removeAutocompleteChipItem($event)\\\"\\n (clear)=\\\"clearAutocompleteChipItem()\\\"\\n [allowText]=\\\"false\\\"\\n [fetchOnFocus]=\\\"item.fetchOnFocus\\\"\\n [placeholder]=\\\"label\\\"\\n [chipImage]=\\\"item.chipImage\\\"\\n [chipColor]=\\\"item.chipColor\\\"\\n [chipIconColor]=\\\"item.chipIcon\\\"\\n [chipBackground]=\\\"item.chipBackground\\\"\\n [chipIcon]=\\\"item.chipIcon\\\"\\n [chipClass]=\\\"item.chipClass\\\"\\n [allowClear]=\\\"item.showClear\\\"\\n [removable]=\\\"item.showClear\\\"\\n [compareWith]=\\\"compareItems\\\"\\n [panelWidth]=\\\"300\\\"\\n name=\\\"model\\\">\\n <ng-template fsAutocompleteObject let-object=\\\"object\\\">\\n {{ object.name }}\\n </ng-template>\\n</fs-autocomplete-chips>\\n\\n<!--<mat-form-field floatLabel=\\\"auto\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <mat-chip-list #chipList>\\n <mat-chip *ngFor=\\\"let item of item.model\\\"\\n (removed)=\\\"removeAutocompleteChipItem(item)\\\">\\n {{ item.name }}\\n <mat-icon matChipRemove>cancel</mat-icon>\\n </mat-chip>\\n\\n <input #chipsInput\\n type=\\\"text\\\"\\n matInput\\n [(ngModel)]=\\\"item.selectedValue\\\"\\n (ngModelChange)=\\\"onAutocompleteChipsChange(chipsInput)\\\"\\n [name]=\\\"item.name\\\"\\n [matChipInputFor]=\\\"chipList\\\"\\n [matAutocomplete]=\\\"autocompleteChipsInput\\\">\\n </mat-chip-list>\\n\\n <mat-autocomplete #autocompleteChipsInput=\\\"matAutocomplete\\\"\\n (optionSelected)=\\\"addAutocompleteChipItem( $event)\\\"\\n >\\n <mat-option *ngFor=\\\"let item of item.values$ | async\\\" [value]=\\\"item\\\">\\n {{ item.name }}\\n </mat-option>\\n </mat-autocomplete>\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>-->\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass DateComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.viewType = PickerViewType.Date;\n this.itemDateMode = ItemDateMode;\n this.showYear = true;\n this.showMonth = true;\n this.showDay = true;\n }\n ngOnInit() {\n if (this.item.type === ItemType.DateTime) {\n this.viewType = PickerViewType.DateTime;\n }\n else {\n this.viewType = PickerViewType.Date;\n }\n if (this.item.mode === ItemDateMode.ScrollMonthYear) {\n this.showDay = false;\n }\n }\n}\nDateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: DateComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: DateComponent, selector: \"filter-item-date\", usesInheritance: true, ngImport: i0, template: \"<mat-form-field *ngIf=\\\"item.mode===itemDateMode.Calendar; else elseMode\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDatePicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [maxYear]=\\\"item.maxYear\\\"\\n [view]=\\\"viewType\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>\\n\\n<ng-template #elseMode>\\n <mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDateScrollPicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [maxYear]=\\\"item.maxYear\\\"\\n [showMonth]=\\\"showMonth\\\"\\n [showDay]=\\\"showDay\\\"\\n [showYear]=\\\"showYear\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n </mat-form-field>\\n</ng-template>\\n\", dependencies: [{ kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i3.MatPlaceholder, selector: \"mat-placeholder\" }, { kind: \"directive\", type: i4.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: i3$3.FsDatePickerComponent, selector: \"[fsDatePicker]\", inputs: [\"minYear\", \"maxYear\", \"minDate\", \"maxDate\", \"startOfDay\", \"view\", \"format\", \"minutes\", \"weekStartsOn\"], outputs: [\"change\"] }, { kind: \"component\", type: i3$3.FsDateScrollPickerComponent, selector: \"[fsDateScrollPicker]\", inputs: [\"minYear\", \"maxYear\", \"minDate\", \"maxDate\", \"showMonth\", \"showYear\", \"showDay\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: DateComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-date', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field *ngIf=\\\"item.mode===itemDateMode.Calendar; else elseMode\\\">\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDatePicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [maxYear]=\\\"item.maxYear\\\"\\n [view]=\\\"viewType\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n</mat-form-field>\\n\\n<ng-template #elseMode>\\n <mat-form-field>\\n <mat-label>{{item.label}}</mat-label>\\n <input matInput\\n fsDateScrollPicker\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [(ngModel)]=\\\"item.model\\\"\\n [maxYear]=\\\"item.maxYear\\\"\\n [showMonth]=\\\"showMonth\\\"\\n [showDay]=\\\"showDay\\\"\\n [showYear]=\\\"showYear\\\"\\n [clear]=\\\"item.showClear\\\"\\n [name]=\\\"item.name\\\">\\n <mat-placeholder *ngIf=\\\"inline\\\">{{ item.label }}</mat-placeholder>\\n </mat-form-field>\\n</ng-template>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass DateRangeComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n this.viewType = PickerViewType.Date;\n }\n ngOnInit() {\n if (this.item.type === ItemType.DateTimeRange) {\n this.viewType = PickerViewType.DateTime;\n }\n else {\n this.viewType = PickerViewType.Date;\n }\n }\n}\nDateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: DateRangeComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: DateRangeComponent, selector: \"filter-item-date-range\", usesInheritance: true, ngImport: i0, template: \"<mat-form-field>\\n <mat-label>{{item.label[0]}}</mat-label>\\n <input\\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'from'\\\"\\n [fsDateRangeFrom]=\\\"item.name\\\"\\n [(ngModel)]=\\\"item.model.from\\\"\\n (ngModelChange)=\\\"itemChange()\\\"\\n [clear]=\\\"item.showClear\\\"\\n [view]=\\\"viewType\\\"\\n name=\\\"date_from\\\">\\n</mat-form-field>\\n\\n<mat-form-field>\\n <mat-label>{{item.label[1]}}</mat-label>\\n <input\\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'to'\\\"\\n [fsDateRangeTo]=\\\"item.name\\\"\\n [(ngModel)]=\\\"item.model.to\\\"\\n (ngModelChange)=\\\"itemChange()\\\"\\n [clear]=\\\"item.showClear\\\"\\n [view]=\\\"viewType\\\"\\n name=\\\"date_to\\\">\\n</mat-form-field>\\n\", dependencies: [{ kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: i4.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: i3$3.DateRangePickerFromComponent, selector: \"[fsDateRangeFrom],[fsDateRangeFromPicker]\", inputs: [\"fsDateRangeFrom\", \"fsDateRangeFromPicker\"] }, { kind: \"component\", type: i3$3.DateRangePickerToComponent, selector: \"[fsDateRangeTo],[fsDateRangeToPicker]\", inputs: [\"fsDateRangeTo\", \"fsDateRangeToPicker\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: FocusToItemDirective, selector: \"[fsFilterFocusTrigger]\", inputs: [\"fsFilterFocusTrigger\", \"focusTargetType\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: DateRangeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-date-range', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<mat-form-field>\\n <mat-label>{{item.label[0]}}</mat-label>\\n <input\\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'from'\\\"\\n [fsDateRangeFrom]=\\\"item.name\\\"\\n [(ngModel)]=\\\"item.model.from\\\"\\n (ngModelChange)=\\\"itemChange()\\\"\\n [clear]=\\\"item.showClear\\\"\\n [view]=\\\"viewType\\\"\\n name=\\\"date_from\\\">\\n</mat-form-field>\\n\\n<mat-form-field>\\n <mat-label>{{item.label[1]}}</mat-label>\\n <input\\n matInput\\n [fsFilterFocusTrigger]=\\\"item\\\"\\n [focusTargetType]=\\\"'to'\\\"\\n [fsDateRangeTo]=\\\"item.name\\\"\\n [(ngModel)]=\\\"item.model.to\\\"\\n (ngModelChange)=\\\"itemChange()\\\"\\n [clear]=\\\"item.showClear\\\"\\n [view]=\\\"viewType\\\"\\n name=\\\"date_to\\\">\\n</mat-form-field>\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass CheckboxComponent extends BaseItemComponent {\n constructor(_kvDiffers, _cd) {\n super(_kvDiffers, _cd);\n this._kvDiffers = _kvDiffers;\n this._cd = _cd;\n }\n}\nCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: CheckboxComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: CheckboxComponent, selector: \"filter-item-checkbox\", usesInheritance: true, ngImport: i0, template: \"<fs-label-field>\\n <mat-checkbox [(ngModel)]=\\\"item.model\\\">\\n {{ item.label }}\\n </mat-checkbox>\\n</fs-label-field>\\n\", styles: [\"fs-label-field{margin:0}\\n\"], dependencies: [{ kind: \"directive\", type: i2$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i6$2.MatCheckbox, selector: \"mat-checkbox\", inputs: [\"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matCheckbox\"] }, { kind: \"component\", type: i4$3.FsLabelFieldComponent, selector: \"fs-label-field\", inputs: [\"bottomMargin\", \"topMargin\", \"labelMargin\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: CheckboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<fs-label-field>\\n <mat-checkbox [(ngModel)]=\\\"item.model\\\">\\n {{ item.label }}\\n </mat-checkbox>\\n</fs-label-field>\\n\", styles: [\"fs-label-field{margin:0}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; } });\n\nclass FilterItemComponent {\n constructor(_cdRef) {\n this._cdRef = _cdRef;\n this.itemType = ItemType;\n this._destroy$ = new Subject();\n }\n get textItem() {\n return this.item;\n }\n get chipsItem() {\n return this.item;\n }\n get baseSelectItem() {\n return this.item;\n }\n get rangeItem() {\n return this.item;\n }\n get autocompleteItem() {\n return this.item;\n }\n get autocompleteChipsItem() {\n return this.item;\n }\n get dateItem() {\n return this.item;\n }\n get dateRangeItem() {\n return this.item;\n }\n get dateTimeItem() {\n return this.item;\n }\n get dateTimeRangeItem() {\n return this.item;\n }\n get weekItem() {\n return this.item;\n }\n get checkboxItem() {\n return this.item;\n }\n ngOnInit() {\n this.item.value$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._cdRef.markForCheck();\n });\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\nFilterItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterItemComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nFilterItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FilterItemComponent, selector: \"filter-item\", inputs: { item: \"item\" }, ngImport: i0, template: \"<div class=\\\"filter filter-{{ item.type }}\\\">\\n\\n <ng-container [ngSwitch]=\\\"item.type\\\">\\n <filter-item-text \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Text\\\"\\n [item]=\\\"textItem\\\">\\n </filter-item-text>\\n\\n <filter-item-select \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Select\\\"\\n [item]=\\\"baseSelectItem\\\">\\n </filter-item-select>\\n\\n <filter-item-chips \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Chips\\\"\\n [item]=\\\"chipsItem\\\">\\n </filter-item-chips>\\n\\n <filter-item-range \\n class=\\\"interface interface-range\\\"\\n *ngSwitchCase=\\\"itemType.Range\\\"\\n [item]=\\\"rangeItem\\\">\\n </filter-item-range>\\n\\n <filter-item-autocomplete \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.AutoComplete\\\"\\n [item]=\\\"autocompleteItem\\\">\\n </filter-item-autocomplete>\\n\\n <filter-item-autocompletechips \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.AutoCompleteChips\\\"\\n [item]=\\\"autocompleteChipsItem\\\">\\n </filter-item-autocompletechips>\\n\\n <filter-item-date \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.Date\\\"\\n [item]=\\\"dateItem\\\">\\n </filter-item-date>\\n\\n <filter-item-date \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateTime\\\"\\n [item]=\\\"dateTimeItem\\\">\\n </filter-item-date>\\n\\n <filter-item-date-range \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateRange\\\"\\n [item]=\\\"dateRangeItem\\\">\\n </filter-item-date-range>\\n\\n <filter-item-date-range \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateTimeRange\\\"\\n [item]=\\\"dateTimeRangeItem\\\">\\n </filter-item-date-range>\\n\\n <filter-item-week \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Week\\\"\\n [item]=\\\"weekItem\\\">\\n </filter-item-week>\\n\\n <filter-item-checkbox \\n class=\\\"interface interface-checkbox\\\"\\n *ngSwitchCase=\\\"itemType.Checkbox\\\"\\n [item]=\\\"checkboxItem\\\">\\n </filter-item-checkbox>\\n </ng-container>\\n\\n</div>\\n\", styles: [\":host ::ng-deep mat-form-field .mat-form-field-prefix .text-prefix,:host ::ng-deep mat-form-field .mat-form-field-prefix .text-suffix,:host ::ng-deep mat-form-field .mat-form-field-suffix .text-prefix,:host ::ng-deep mat-form-field .mat-form-field-suffix .text-suffix{top:-.25em;position:relative}:host ::ng-deep mat-form-field:not(.mat-form-field-should-float) .mat-form-field-prefix .text-prefix,:host ::ng-deep mat-form-field:not(.mat-form-field-should-float) .mat-form-field-suffix .text-suffix{display:none}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { kind: \"directive\", type: i1$1.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { kind: \"component\", type: SelectComponent, selector: \"filter-item-select\" }, { kind: \"component\", type: ChipsComponent, selector: \"filter-item-chips\" }, { kind: \"component\", type: TextComponent, selector: \"filter-item-text\" }, { kind: \"component\", type: WeekComponent, selector: \"filter-item-week\" }, { kind: \"component\", type: RangeComponent, selector: \"filter-item-range\" }, { kind: \"component\", type: AutocompleteComponent, selector: \"filter-item-autocomplete\" }, { kind: \"component\", type: AutocompletechipsComponent, selector: \"filter-item-autocompletechips\" }, { kind: \"component\", type: DateComponent, selector: \"filter-item-date\" }, { kind: \"component\", type: DateRangeComponent, selector: \"filter-item-date-range\" }, { kind: \"component\", type: CheckboxComponent, selector: \"filter-item-checkbox\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"filter filter-{{ item.type }}\\\">\\n\\n <ng-container [ngSwitch]=\\\"item.type\\\">\\n <filter-item-text \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Text\\\"\\n [item]=\\\"textItem\\\">\\n </filter-item-text>\\n\\n <filter-item-select \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Select\\\"\\n [item]=\\\"baseSelectItem\\\">\\n </filter-item-select>\\n\\n <filter-item-chips \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Chips\\\"\\n [item]=\\\"chipsItem\\\">\\n </filter-item-chips>\\n\\n <filter-item-range \\n class=\\\"interface interface-range\\\"\\n *ngSwitchCase=\\\"itemType.Range\\\"\\n [item]=\\\"rangeItem\\\">\\n </filter-item-range>\\n\\n <filter-item-autocomplete \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.AutoComplete\\\"\\n [item]=\\\"autocompleteItem\\\">\\n </filter-item-autocomplete>\\n\\n <filter-item-autocompletechips \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.AutoCompleteChips\\\"\\n [item]=\\\"autocompleteChipsItem\\\">\\n </filter-item-autocompletechips>\\n\\n <filter-item-date \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.Date\\\"\\n [item]=\\\"dateItem\\\">\\n </filter-item-date>\\n\\n <filter-item-date \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateTime\\\"\\n [item]=\\\"dateTimeItem\\\">\\n </filter-item-date>\\n\\n <filter-item-date-range \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateRange\\\"\\n [item]=\\\"dateRangeItem\\\">\\n </filter-item-date-range>\\n\\n <filter-item-date-range \\n class=\\\"interface interface-date\\\"\\n *ngSwitchCase=\\\"itemType.DateTimeRange\\\"\\n [item]=\\\"dateTimeRangeItem\\\">\\n </filter-item-date-range>\\n\\n <filter-item-week \\n class=\\\"interface\\\"\\n *ngSwitchCase=\\\"itemType.Week\\\"\\n [item]=\\\"weekItem\\\">\\n </filter-item-week>\\n\\n <filter-item-checkbox \\n class=\\\"interface interface-checkbox\\\"\\n *ngSwitchCase=\\\"itemType.Checkbox\\\"\\n [item]=\\\"checkboxItem\\\">\\n </filter-item-checkbox>\\n </ng-container>\\n\\n</div>\\n\", styles: [\":host ::ng-deep mat-form-field .mat-form-field-prefix .text-prefix,:host ::ng-deep mat-form-field .mat-form-field-prefix .text-suffix,:host ::ng-deep mat-form-field .mat-form-field-suffix .text-prefix,:host ::ng-deep mat-form-field .mat-form-field-suffix .text-suffix{top:-.25em;position:relative}:host ::ng-deep mat-form-field:not(.mat-form-field-should-float) .mat-form-field-prefix .text-prefix,:host ::ng-deep mat-form-field:not(.mat-form-field-should-float) .mat-form-field-suffix .text-suffix{display:none}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{\n type: Input\n }] } });\n\nclass FilterDrawerComponent {\n constructor(_overlayRef, _data, externalParams, _cd, _itemsStore) {\n this._overlayRef = _overlayRef;\n this._data = _data;\n this.externalParams = externalParams;\n this._cd = _cd;\n this._itemsStore = _itemsStore;\n this.inline = false;\n this.windowDesktop = false;\n this._itemsStore.prepareItems();\n this._clear = this._data.clear;\n this._done = this._data.done;\n this.updateWindowWidth();\n }\n updateWindowWidth() {\n this.windowDesktop = window.innerWidth > 1200;\n }\n get items$() {\n return this._itemsStore.visibleItems$;\n }\n get sortItem() {\n return this._itemsStore.sortByItem;\n }\n get sortDirectionItem() {\n return this._itemsStore.sortDirectionItem;\n }\n clear() {\n this._clear();\n // this.overlayRef.detach();\n }\n done() {\n this._done();\n this._overlayRef.detach();\n }\n backdropClick() {\n this.done();\n }\n}\nFilterDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterDrawerComponent, deps: [{ token: FILTER_DRAWER_OVERLAY }, { token: FILTER_DRAWER_DATA }, { token: ExternalParamsController }, { token: i0.ChangeDetectorRef }, { token: FsFilterItemsStore }], target: i0.ɵɵFactoryTarget.Component });\nFilterDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FilterDrawerComponent, selector: \"ng-component\", inputs: { inline: \"inline\" }, host: { listeners: { \"window:resize\": \"updateWindowWidth()\" } }, ngImport: i0, template: \"<div class=\\\"filters\\\">\\n <div class=\\\"filters-wrap\\\">\\n\\n <div class=\\\"filter-by\\\">\\n <mat-icon>tune</mat-icon>\\n <span class=\\\"text\\\">Filters</span>\\n </div>\\n\\n <div class=\\\"overflow-shadow filter-items\\\">\\n <div class=\\\"overflow-shadow-content\\\">\\n <ng-container *fsSkeleton=\\\"(externalParams.pending$ | async) !== true\\\">\\n <filter-item \\n *ngFor=\\\"let filterItem of items$ | async\\\"\\n class=\\\"filter-group\\\"\\n [item]=\\\"filterItem\\\">\\n </filter-item>\\n\\n <ng-container *ngIf=\\\"sortItem && sortItem.values && sortItem.values.length > 0\\\">\\n <filter-item \\n class=\\\"filter-group sort\\\"\\n [item]=\\\"sortItem\\\">\\n </filter-item>\\n <filter-item \\n class=\\\"filter-group sort\\\"\\n [item]=\\\"sortDirectionItem\\\">\\n </filter-item>\\n </ng-container>\\n </ng-container>\\n </div>\\n </div>\\n\\n <fs-filter-drawer-actions \\n class=\\\"filter-actions\\\"\\n *ngIf=\\\"(externalParams.pending$ | async) !== true\\\"\\n (clear)=\\\"clear()\\\"\\n (done)=\\\"done()\\\">\\n </fs-filter-drawer-actions>\\n </div>\\n</div>\\n<div class=\\\"backdrop\\\" *ngIf=\\\"!windowDesktop\\\" (click)=\\\"backdropClick()\\\"></div>\\n\", styles: [\"@charset \\\"UTF-8\\\";@media (max-width: 599px){h1[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"]{margin-top:0}}.fs-delimit>*:not(:last-child):after{content:\\\",\\\\a0\\\"}:host ::ng-deep mat-form-field{width:100%}.filter-by{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 25px}.filter-by mat-icon{margin-right:8px}.filter-by .text{font-weight:400;font-size:19px}.filter-actions{display:block;box-sizing:border-box;padding:13px}.filter-actions button{margin-right:6px}.filter-actions button:last-child{margin-right:0}.filters{position:fixed;display:block;top:0;right:0;z-index:1002;bottom:0}.filters .filters-wrap{background:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;width:100vw;max-width:350px;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top);box-sizing:border-box;height:100%}.filters .filters-wrap .filter-items{overflow-y:auto;height:auto}.filters .filters-wrap .filter-items .overflow-shadow-content{padding:0 25px;box-sizing:border-box}.filters .filter-group{margin:10px 0 0}.filters .filter-group:first-child{margin:0}.filters .filter label{white-space:nowrap;color:#0000008a}.filters .filter .interface.interface-range input,.filters .filter .interface.interface-range .mat-input-wrapper,.filters .filter .interface.interface-range{text-align:center}.filters .filter .interface.interface-datetime fs-datetime.has-time .md-input{width:100%}.filters .filter .interface fs-datetime-range input{text-align:center}.filters .filter .filter-label{width:1%;white-space:nowrap;vertical-align:middle;padding-right:15px}.filters md-autocomplete-container md-input-container{margin:0}.filters .isolate{margin-top:-12px}.filters .isolate .interface{line-height:20px;padding-bottom:1.25em}.filters .isolate md-checkbox{margin:0 0 0 2px}.backdrop{position:fixed;inset:0;z-index:900;outline:none}@media (max-width: 599px){.filters .filters-wrap{max-width:none}}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"directive\", type: i5$2.FsSkeletonContentDirective, selector: \"[fsSkeleton]\", inputs: [\"fsSkeleton\", \"fsSkeletonPattern\"] }, { kind: \"component\", type: FilterItemComponent, selector: \"filter-item\", inputs: [\"item\"] }, { kind: \"component\", type: FsFilterDrawerActionsComponent, selector: \"fs-filter-drawer-actions\", outputs: [\"clear\", \"done\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterDrawerComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"filters\\\">\\n <div class=\\\"filters-wrap\\\">\\n\\n <div class=\\\"filter-by\\\">\\n <mat-icon>tune</mat-icon>\\n <span class=\\\"text\\\">Filters</span>\\n </div>\\n\\n <div class=\\\"overflow-shadow filter-items\\\">\\n <div class=\\\"overflow-shadow-content\\\">\\n <ng-container *fsSkeleton=\\\"(externalParams.pending$ | async) !== true\\\">\\n <filter-item \\n *ngFor=\\\"let filterItem of items$ | async\\\"\\n class=\\\"filter-group\\\"\\n [item]=\\\"filterItem\\\">\\n </filter-item>\\n\\n <ng-container *ngIf=\\\"sortItem && sortItem.values && sortItem.values.length > 0\\\">\\n <filter-item \\n class=\\\"filter-group sort\\\"\\n [item]=\\\"sortItem\\\">\\n </filter-item>\\n <filter-item \\n class=\\\"filter-group sort\\\"\\n [item]=\\\"sortDirectionItem\\\">\\n </filter-item>\\n </ng-container>\\n </ng-container>\\n </div>\\n </div>\\n\\n <fs-filter-drawer-actions \\n class=\\\"filter-actions\\\"\\n *ngIf=\\\"(externalParams.pending$ | async) !== true\\\"\\n (clear)=\\\"clear()\\\"\\n (done)=\\\"done()\\\">\\n </fs-filter-drawer-actions>\\n </div>\\n</div>\\n<div class=\\\"backdrop\\\" *ngIf=\\\"!windowDesktop\\\" (click)=\\\"backdropClick()\\\"></div>\\n\", styles: [\"@charset \\\"UTF-8\\\";@media (max-width: 599px){h1[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-xs*=fs-heading][fs\\\\.lt-xs*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1023px){h1[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-sm*=fs-heading][fs\\\\.lt-sm*=\\\".top-none\\\"]{margin-top:0}}@media (max-width: 1439px){h1[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h2[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"],h3[class*=\\\".top\\\"][fs\\\\.lt-md*=fs-heading][fs\\\\.lt-md*=\\\".top-none\\\"]{margin-top:0}}.fs-delimit>*:not(:last-child):after{content:\\\",\\\\a0\\\"}:host ::ng-deep mat-form-field{width:100%}.filter-by{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 25px}.filter-by mat-icon{margin-right:8px}.filter-by .text{font-weight:400;font-size:19px}.filter-actions{display:block;box-sizing:border-box;padding:13px}.filter-actions button{margin-right:6px}.filter-actions button:last-child{margin-right:0}.filters{position:fixed;display:block;top:0;right:0;z-index:1002;bottom:0}.filters .filters-wrap{background:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;width:100vw;max-width:350px;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top);box-sizing:border-box;height:100%}.filters .filters-wrap .filter-items{overflow-y:auto;height:auto}.filters .filters-wrap .filter-items .overflow-shadow-content{padding:0 25px;box-sizing:border-box}.filters .filter-group{margin:10px 0 0}.filters .filter-group:first-child{margin:0}.filters .filter label{white-space:nowrap;color:#0000008a}.filters .filter .interface.interface-range input,.filters .filter .interface.interface-range .mat-input-wrapper,.filters .filter .interface.interface-range{text-align:center}.filters .filter .interface.interface-datetime fs-datetime.has-time .md-input{width:100%}.filters .filter .interface fs-datetime-range input{text-align:center}.filters .filter .filter-label{width:1%;white-space:nowrap;vertical-align:middle;padding-right:15px}.filters md-autocomplete-container md-input-container{margin:0}.filters .isolate{margin-top:-12px}.filters .isolate .interface{line-height:20px;padding-bottom:1.25em}.filters .isolate md-checkbox{margin:0 0 0 2px}.backdrop{position:fixed;inset:0;z-index:900;outline:none}@media (max-width: 599px){.filters .filters-wrap{max-width:none}}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i1$3.OverlayRef, decorators: [{\n type: Inject,\n args: [FILTER_DRAWER_OVERLAY]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [FILTER_DRAWER_DATA]\n }] }, { type: ExternalParamsController }, { type: i0.ChangeDetectorRef }, { type: FsFilterItemsStore }];\n }, propDecorators: { inline: [{\n type: Input\n }], updateWindowWidth: [{\n type: HostListener,\n args: ['window:resize']\n }] } });\n\nclass ActionMenuItem {\n constructor(config = {}, _parent) {\n this._parent = _parent;\n this.items = [];\n this._isGroup = false;\n this._visible$ = new BehaviorSubject(true);\n this._disabled$ = new BehaviorSubject(false);\n this._init(config);\n }\n get isGroup() {\n return this._isGroup;\n }\n get visible() {\n return this._visible$.getValue();\n }\n get visible$() {\n return this._visible$.asObservable();\n }\n set disabled(value) {\n this._disabled$.next(value);\n }\n get disabled() {\n return this._disabled$.getValue();\n }\n get disabled$() {\n return this._disabled$.asObservable();\n }\n updateVisibility() {\n const visible = this._showFn ? this._showFn() : true;\n if (!visible || !this.isGroup) {\n this._visible$.next(visible);\n return;\n }\n const numberOfVisibleChildren = this.items\n .reduce((acc, item) => {\n item.updateVisibility();\n if (item.visible) {\n acc++;\n }\n return acc;\n }, 0);\n this._visible$.next(!!numberOfVisibleChildren);\n }\n _init(config) {\n this.label = config.label;\n this.icon = config.icon;\n this._showFn = config.show;\n if ('items' in config) {\n this._isGroup = true;\n if (Array.isArray(config.items)) {\n this.items = config\n .items\n .map((item) => new ActionMenuItem(item, this));\n }\n this.updateVisibility();\n }\n else {\n this.click = config.click;\n this.routerLink = config.link;\n if (!this._parent) {\n this.updateVisibility();\n }\n }\n }\n}\n\nclass Action {\n constructor(filterConfig, actionConfig = {}) {\n this.primary = true;\n this.isReorderAction = false;\n this.deselect = false;\n this.classArray = [];\n this.items = [];\n this._visible$ = new BehaviorSubject(true);\n this._disabled$ = new BehaviorSubject(false);\n this._init(filterConfig, actionConfig);\n }\n get visible() {\n return this._visible$.getValue();\n }\n get visible$() {\n return this._visible$.asObservable();\n }\n set disabled(value) {\n this._disabled$.next(value);\n }\n get disabled() {\n return this._disabled$.getValue();\n }\n get disabled$() {\n return this._disabled$.asObservable();\n }\n updateVisibility() {\n const visible = this._showFn ? this._showFn() : true;\n if (!visible || this.mode !== ActionMode.Menu) {\n this._visible$.next(visible);\n return;\n }\n const hasVisibleChildren = this.items.some((item) => item.visible);\n this._visible$.next(hasVisibleChildren);\n }\n updateDisabledState() {\n if (this._disabledFn) {\n this.disabled = this._disabledFn();\n }\n }\n _init(filterConfig, config = {}) {\n var _a, _b;\n config.mode = (_a = config.mode) !== null && _a !== void 0 ? _a : ActionMode.Button;\n this._initCore(filterConfig, config);\n switch (config.mode) {\n case ActionMode.Button:\n {\n this.customize = config.customize;\n this.click = (_b = config.click) !== null && _b !== void 0 ? _b : (() => {\n // do nothing\n });\n this._disabledFn = config.disabled;\n this.updateDisabledState();\n }\n break;\n case ActionMode.Menu:\n {\n if (config.items && Array.isArray(config.items)) {\n this.items = config.items.map((item) => new ActionMenuItem(item));\n }\n }\n break;\n case ActionMode.SelectButton:\n {\n this._initSelectButton(config);\n }\n break;\n case ActionMode.File:\n {\n this._initFile(config);\n }\n break;\n }\n this.updateVisibility();\n }\n _initCore(filterConfig, config) {\n var _a, _b, _c;\n this.primary = (_a = config.primary) !== null && _a !== void 0 ? _a : true;\n this.color = config.color;\n this.tooltip = config.tooltip;\n this.label = config.label;\n this.mode = config.mode;\n this.icon = config.icon;\n this.iconPlacement = config.iconPlacement;\n this._showFn = config.show;\n this.tabIndex = (_b = config.tabIndex) !== null && _b !== void 0 ? _b : 0;\n this.menu = config.menu;\n if (!this.type) {\n this.type = (config.type || ((_c = filterConfig.button) === null || _c === void 0 ? void 0 : _c.style) || ActionType.Raised);\n if (this.type === ActionType.Stroked && this.primary) {\n this.type = ActionType.Flat;\n }\n }\n if (config.className) {\n this.className = config.className;\n this.classArray = this.className\n .split(' ');\n }\n if (this.primary) {\n this.color = 'primary';\n }\n }\n _initSelectButton(config) {\n var _a;\n this.values = config.values;\n this.value = config.default;\n this.change = config.change;\n this.deselect = (_a = config.deselect) !== null && _a !== void 0 ? _a : false;\n }\n _initFile(config) {\n var _a;\n this.fileSelected = config.select;\n this.fileError = config.error;\n this.accept = config.accept;\n this.imageQuality = config.imageQuality;\n this.minWidth = config.minWidth;\n this.minHeight = config.minHeight;\n this.maxWidth = config.maxWidth;\n this.maxHeight = config.maxHeight;\n this.click = (_a = config.click) !== null && _a !== void 0 ? _a : (() => {\n //\n });\n this._disabledFn = config.disabled;\n if ((config).multiple !== undefined) {\n this.multiple = (config).multiple;\n }\n this.updateDisabledState();\n }\n}\n\nclass ActionsController {\n constructor(_breakpointObserver) {\n this._breakpointObserver = _breakpointObserver;\n this._visible$ = new BehaviorSubject(false);\n this._actions$ = new BehaviorSubject([]);\n this._menuActions$ = new BehaviorSubject([]);\n this._destroy$ = new Subject();\n this._mobileMedia = '(max-width: 799px)';\n this._allActions = [];\n this._listenMobileMedia();\n }\n get menuActions() {\n return this._menuActions$.value;\n }\n get actions() {\n return this._actions$.value;\n }\n get actions$() {\n return this._actions$.asObservable();\n }\n get menuActions$() {\n return this._menuActions$.asObservable();\n }\n get visible$() {\n return this._visible$.asObservable();\n }\n get mobileMode() {\n return this._breakpointObserver.isMatched(this._mobileMedia);\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n setConfig(config) {\n this._config = config;\n this.initActions(config.actions);\n }\n initActions(rawActions) {\n if (!rawActions || !Array.isArray(rawActions)) {\n return;\n }\n this.show();\n this._allActions = rawActions\n .map((action) => new Action(this._config, action));\n if (this._reorderAction) {\n this._allActions.unshift(this._reorderAction);\n }\n this._classifyActions();\n }\n show() {\n this._visible$.next(true);\n }\n hide() {\n this._visible$.next(false);\n }\n addReorderAction(action) {\n this._allActions.unshift(action);\n action.isReorderAction = true;\n this._classifyAction(action);\n this._reorderAction = action;\n }\n clearActions() {\n this._allActions = [];\n this._setActions([]);\n this._setKebabActions([]);\n }\n updateActionsVisibility() {\n this._allActions.forEach((action) => action.updateVisibility());\n this._classifyActions();\n }\n updateDisabledState() {\n this.actions.forEach((action) => action.updateDisabledState());\n }\n _setKebabActions(actions) {\n this._menuActions$.next(actions);\n }\n _setActions(actions) {\n this._actions$.next(actions);\n }\n _classifyActions() {\n const kebabActions = [];\n const actions = [];\n const mobileMode = this.mobileMode;\n this._allActions\n .filter((action) => {\n return action.visible;\n })\n .forEach((action) => {\n if (action.menu !== false && (action.menu || mobileMode)) {\n kebabActions.push(action);\n }\n else {\n actions.push(action);\n }\n });\n this._setKebabActions(kebabActions);\n this._setActions(actions);\n }\n _classifyAction(action) {\n if (action.menu) {\n this._setKebabActions([...this.menuActions, action]);\n }\n else {\n this._setActions([...this.actions, action]);\n }\n }\n _listenMobileMedia() {\n this._breakpointObserver.observe(this._mobileMedia)\n .pipe(skip(1), takeUntil(this._destroy$))\n .subscribe(() => {\n this._classifyActions();\n });\n }\n}\nActionsController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ActionsController, deps: [{ token: i1$4.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });\nActionsController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ActionsController });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: ActionsController, decorators: [{\n type: Injectable\n }], ctorParameters: function () { return [{ type: i1$4.BreakpointObserver }]; } });\n\nconst FS_FILTER_META = new InjectionToken('fs.filter.meta', {\n providedIn: 'root',\n factory: () => {\n return {\n openedFilters: 0,\n };\n }\n});\n\nclass FsFilterOverlayService {\n constructor(_filterMeta, _injector, _overlay, _focusController, _htmlClassRenderer) {\n this._filterMeta = _filterMeta;\n this._injector = _injector;\n this._overlay = _overlay;\n this._focusController = _focusController;\n this._htmlClassRenderer = _htmlClassRenderer;\n this.detach$ = new Subject();\n this.attach$ = new Subject();\n this._destroy$ = new Subject();\n this._openWhenChipClicked();\n }\n get isOpened() {\n return !!this._overlayRef;\n }\n setClearFn(fn) {\n this._clearFn = fn;\n }\n setDoneFn(fn) {\n this._doneFn = fn;\n }\n close() {\n if (this._overlayRef) {\n this._overlayRef.detach();\n this._overlayRef = null;\n this._removeFilterClass();\n }\n }\n open() {\n this._overlayRef = this._createOverlay();\n this._overlayRef.backdropClick()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this._overlayRef.detach();\n });\n this._overlayRef.detachments()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.detach$.next();\n });\n this._overlayRef.attachments()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.attach$.next();\n });\n this._addFilterClass();\n return this._openPortalPreview();\n }\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n _createOverlay() {\n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'fs-filter-backdrop',\n });\n return this._overlay.create(overlayConfig);\n }\n _openPortalPreview() {\n const data = {\n done: this._doneFn,\n clear: this._clearFn,\n };\n const injector = this._createInjector(this._injector, data, this._overlayRef);\n const containerPortal = new ComponentPortal(FilterDrawerComponent, undefined, injector);\n const containerRef = this._overlayRef.attach(containerPortal);\n return containerRef.instance;\n }\n _createInjector(parentInjector, data, overlayRef) {\n const injectionTokens = new WeakMap([\n [FILTER_DRAWER_DATA, data],\n [FILTER_DRAWER_OVERLAY, overlayRef],\n ]);\n return new PortalInjector(parentInjector, injectionTokens);\n }\n _removeFilterClass() {\n this._filterMeta.openedFilters--;\n if (this._filterMeta.openedFilters === 0) {\n this._htmlClassRenderer.removeClass('fs-filter-open');\n }\n }\n _addFilterClass() {\n this._filterMeta.openedFilters++;\n if (this._filterMeta.openedFilters === 1) {\n this._htmlClassRenderer.addClass('fs-filter-open');\n }\n }\n _openWhenChipClicked() {\n this._focusController.focusOn$\n .pipe(filter$1((v) => !!v), takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.isOpened) {\n this.open();\n }\n });\n }\n}\nFsFilterOverlayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterOverlayService, deps: [{ token: FS_FILTER_META }, { token: i0.Injector }, { token: i1$3.Overlay }, { token: FocusControllerService }, { token: i3$4.HtmlClassRenderer }], target: i0.ɵɵFactoryTarget.Injectable });\nFsFilterOverlayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterOverlayService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterOverlayService, decorators: [{\n type: Injectable\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [FS_FILTER_META]\n }] }, { type: i0.Injector }, { type: i1$3.Overlay }, { type: FocusControllerService }, { type: i3$4.HtmlClassRenderer }];\n } });\n\nclass FilterStatusBarDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFilterStatusBarDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterStatusBarDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nFilterStatusBarDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FilterStatusBarDirective, selector: \"[fsFilterStatusBar]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterStatusBarDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fsFilterStatusBar]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nconst FS_FILTER_CONFIG = new InjectionToken('fs.filter-config');\n\nclass FilterComponent {\n constructor(_defaultConfig, _filterOverlay, _zone, _externalParams, _filterItems, _actions, _savedFiltersController, _externalParamsController) {\n this._defaultConfig = _defaultConfig;\n this._filterOverlay = _filterOverlay;\n this._zone = _zone;\n this._externalParams = _externalParams;\n this._filterItems = _filterItems;\n this._actions = _actions;\n this._savedFiltersController = _savedFiltersController;\n this._externalParamsController = _externalParamsController;\n this.showSortBy = true;\n this.showFilterInput = true;\n this.closed = new EventEmitter();\n this.opened = new EventEmitter();\n this.ready = new EventEmitter();\n this.showFilterMenu = false;\n this.windowDesktop = false;\n this.fsFilterClass = true;\n this.searchPlaceholder = 'Search';\n this.keyword = '';\n this.autoReload = true;\n this._config = null;\n this._filtersBtnVisible$ = new BehaviorSubject(true);\n this._keywordVisible$ = new BehaviorSubject(true);\n this._hasFilterChips$ = new BehaviorSubject(false);\n this._keyword$ = new Subject();\n this._destroy$ = new Subject();\n this._filterItems.filter = this;\n this._listenWhenFilterReady();\n this._updateWindowWidth();\n this._filterOverlay.attach$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.showFilterMenu = true;\n });\n this._filterOverlay.detach$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.showFilterMenu = false;\n });\n this._listenWindowResize();\n }\n set setConfig(config) {\n this._initFilterWithConfig(config);\n }\n set setFilter(config) {\n this._initFilterWithConfig(config);\n }\n get hasKeyword() {\n return this._filterItems.hasKeyword;\n }\n get config() {\n return this._config;\n }\n get filterParams() {\n return this._filterItems.values();\n }\n get filterParamsQuery() {\n return this._filterItems.valuesAsQuery();\n }\n get items() {\n return this._filterItems.items;\n }\n get visibleItems() {\n return this._filterItems.visibleItems;\n }\n get keywordItem() {\n return this._filterItems.keywordItem;\n }\n get itemsReady$() {\n return this._filterItems.ready$;\n }\n get hasFilterChips$() {\n return this._hasFilterChips$.asObservable();\n }\n get hasVisibleItemOrSorting() {\n return this.visibleItems.length > 0 || !!this._filterItems.sortByItem;\n }\n get filtersBtnVisible$() {\n return this._filtersBtnVisible$.asObservable();\n }\n get keywordVisible$() {\n return this._keywordVisible$.asObservable();\n }\n get actionsVisible$() {\n return this._actions.visible$;\n }\n get actions$() {\n return this._actions.actions$;\n }\n get menuActions$() {\n return this._actions.menuActions$;\n }\n set activeSavedFilter(savedFilter) {\n this._externalParams.setActiveSavedFilter(savedFilter);\n }\n get activeSavedFilter() {\n return this._savedFiltersController.activeFilter;\n }\n get savedFilters() {\n return this._savedFiltersController.savedFilters;\n }\n ngOnInit() {\n // Avoid ngChanges error\n setTimeout(() => {\n if (this.config.autofocus) {\n this.focus();\n }\n });\n this._initAutoReload();\n this._listenInputChanges();\n this._listenInternalItemsChange();\n this._initOverlay();\n }\n ngOnDestroy() {\n this._destroyFilterDrawer();\n this._destroy$.next();\n this._destroy$.complete();\n }\n focus() {\n var _a;\n (_a = this.keywordMatInput) === null || _a === void 0 ? void 0 : _a.focus();\n }\n updateSort(sort) {\n this._filterItems.updateSort(sort);\n }\n /**\n *\n * Do update value of some field\n *\n * @param values - values for update\n *\n * To update text value just pass new text value\n *\n * public updateSelectValue(val) {\n * this.filterEl.updateValues({ keyword: val });\n * }\n *\n * To update select or observable select you could pass suitable value\n *\n * public updateSelectValue(val: number) {\n * this.filterEl.updateValues({ simple_select: val }, { observable_select: val });\n * }\n *\n * To update checkbox value just pass true/false as value\n *\n * public updateCheckox(val: boolean) {\n * this.filterEl.updateValues({ checkbox: val });\n * }\n *\n * To update range value just pass object with min&max object or just with one of targets\n *\n * Ex.: { min: 10, max 15 }, { min: 5 }, { max 5 }\n *\n * public updateRange(val) {\n * this.filterEl.updateValues({ range: val });\n * }\n *\n * To update autocomplete just pass object with name/value fields\n *\n * Ex.: { name: 'John Doe', value: 1 }\n *\n * public updateAutocomplete(val) {\n * this.filterEl.updateValues({ autocomplete_user_id: val });\n * }\n *\n * To update autocompletechips just pass:\n *\n * 1) object with name/value fields - will be appended to existing set of values\n *\n * { name: 'John Doe', value: 1 }\n *\n * 2) array of objects - will be appended to existing set of values\n *\n * [{ name: 'John Doe', value: 1 }, { name: 'Darya Filipova', value: 2 }]\n *\n * 3) null - clear existing set of values\n *\n * public updateAutocomplete(val) {\n * this.filterEl.updateValues({ autocompletechips_user_id: val });\n * }\n *\n */\n updateValues(values) {\n Object.keys(values).forEach((key) => {\n const filterItem = this.items\n .find((item) => item.name === key);\n if (!filterItem) {\n return;\n }\n filterItem.model = values[key];\n });\n }\n hide() {\n this.changeVisibility(false);\n }\n show() {\n this.changeVisibility(true);\n }\n changeVisibilityClick(value, event = null) {\n if (event) {\n event.stopPropagation();\n }\n this.changeVisibility(value);\n }\n get itemValues() {\n return this.items\n .map((item) => item.value);\n }\n get nonEmptyItemValues() {\n return this.items\n .filter((item) => item.value !== undefined)\n .map((item) => item.value);\n }\n get hasItemValues() {\n return this.items\n .some((item) => item.value !== undefined);\n }\n getItemValue(name) {\n const item = this.items\n .find((_item) => _item.name === name);\n return item === null || item === void 0 ? void 0 : item.value;\n }\n showItem(name) {\n const item = this.getItem(name);\n if (item) {\n item.hide = false;\n this._filterItems.updateItemsVisiblity();\n }\n }\n hideItem(name) {\n const item = this.getItem(name);\n if (!item) {\n return;\n }\n item.hide = true;\n this._filterItems.updateItemsVisiblity();\n }\n clearItem(name) {\n const item = this.getItem(name);\n if (!item) {\n return;\n }\n item.clear();\n }\n updateItemConfig(name, params) {\n var _a, _b;\n const item = this.getItem(name);\n if (!item) {\n return;\n }\n item.label = (_a = params.label) !== null && _a !== void 0 ? _a : item.label;\n item.chipLabel = (_b = params.chipLabel) !== null && _b !== void 0 ? _b : item.chipLabel;\n this._filterItems.updateItemsVisiblity();\n }\n getItemValueChange$(name) {\n const item = this.items.find((i) => i.name === name);\n if (item) {\n return item.value$\n .pipe(map(() => {\n return item.model;\n }));\n }\n return null;\n }\n changeVisibility(state) {\n if (state === this.showFilterMenu) {\n return;\n }\n if (!state) {\n this.closed.emit();\n return this._destroyFilterDrawer();\n }\n if (!this.hasVisibleItemOrSorting) {\n return;\n }\n this._listenEscButton();\n this.opened.emit();\n this._filterOverlay.open();\n }\n init() {\n const data = this._filterItems.valuesAsQuery();\n this._sort = this._filterItems.getSort();\n if (this.config.init) {\n this.config.init(data, this._sort, this);\n }\n this._updateChipsVisibility();\n this.items\n .forEach((item) => {\n item.init(item, this);\n });\n }\n clear(event = null) {\n if (event) {\n event.stopPropagation();\n }\n this._filterItems.filtersClear();\n if (this.config.clear) {\n this.config.clear();\n }\n this.keyword = '';\n }\n /**\n * Close filter window and do change callback\n */\n search(event) {\n this.changeVisibilityClick(false, event);\n }\n reload(event = null) {\n var _a;\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n const data = this._filterItems.valuesAsQuery();\n const el = (_a = this.reloadEl) === null || _a === void 0 ? void 0 : _a.nativeElement;\n if (el) {\n el.style.transition = 'all 0.75s 0.0s';\n el.style.transform = 'rotate(360deg)';\n setTimeout(() => {\n el.style.transition = null;\n el.style.transform = null;\n }, 1000);\n }\n if (this.config.reload) {\n this.config.reload(data, this._filterItems.getSort());\n }\n }\n getItem(name) {\n return this.items\n .find((item) => item.name === name);\n }\n fetchQueryParams() {\n this._externalParams.fetchQueryParams();\n }\n /**\n * Call change callback and apply new filter values\n */\n change() {\n const data = this._filterItems.valuesAsQuery();\n const sort = this._filterItems.getSort();\n const sortingChanged = ((!sort || !this._sort) && sort !== this._sort)\n || (sort && this._sort && !objectsAreEquals(this._sort, sort));\n if (sortingChanged) {\n this._sort = sort;\n if (this.config.sortChange) {\n this.config.sortChange(data, sort);\n }\n }\n if (this.config.change) {\n this.config.change(data, sort);\n }\n this._updateChipsVisibility();\n // visibility for actions can depend on filters state\n this._actions.updateActionsVisibility();\n }\n /**\n * Update filter actions config\n *\n * @param actions\n */\n updateActions(actions) {\n this._actions.initActions(actions);\n }\n /**\n * Show \"Filters\" button\n */\n showFiltersBtn() {\n this._filtersBtnVisible$.next(true);\n }\n /**\n * Hide \"Filters\" button\n */\n hideFiltersBtn() {\n this._filtersBtnVisible$.next(false);\n }\n /**\n * Show \"Keyword\" field if it present\n */\n showKeywordField() {\n this._keywordVisible$.next(true);\n }\n /**\n * Hide \"Keyword\" field if it present\n */\n hideKeywordField() {\n this._keywordVisible$.next(false);\n }\n /**\n * Go through actions and check show() callback and update visible actions\n */\n updateActionsVisibility() {\n this._actions.updateActionsVisibility();\n }\n /**\n * Go through actions and check disabled() callback and update disabled state\n */\n updateDisabledState() {\n this._actions.updateDisabledState();\n }\n setItems(items) {\n this._filterItems.destroyItems();\n this.config.items = items;\n this._filterItems.setConfig(this._config);\n this._externalParams.initItems();\n this._syncSearchInputWithKeyword();\n }\n keywordChange(keyword) {\n this._keyword$.next(keyword);\n }\n updateSortings(items) {\n this._filterItems.updateSortingItemsValues(items);\n }\n _initFilterWithConfig(config) {\n if (this.config) {\n this._filterItems.destroyItems();\n }\n config = Object.assign(Object.assign({}, (this._defaultConfig || {})), config);\n this._config = new FsFilterConfig(config);\n this._actions.setConfig(this._config);\n this._filterItems.setConfig(this._config);\n this._externalParams.setConfig(this._config);\n this._syncSearchInputWithKeyword();\n if (this.config.reloadWhenConfigChanged) {\n this.change();\n }\n }\n _destroyFilterDrawer() {\n this._filterOverlay.close();\n }\n _updateWindowWidth() {\n this.windowDesktop = window.innerWidth > 1200;\n }\n _listenEscButton() {\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'keyup')\n .pipe(filter$1((event) => event.code === 'Escape'), takeUntil(this.closed), takeUntil(this._destroy$))\n .subscribe(() => {\n this._zone.run(() => {\n this.changeVisibility(false);\n });\n });\n });\n }\n _listenWindowResize() {\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(debounceTime(100), takeUntil(this._destroy$))\n .subscribe(() => {\n this._zone.run(() => {\n this._updateWindowWidth();\n });\n });\n });\n }\n _initAutoReload() {\n if (this.config.autoReload) {\n interval(this.config.autoReload.seconds * 1000)\n .pipe(filter$1(() => this.autoReload), takeUntil(this._destroy$))\n .subscribe(() => {\n this.reload(null);\n });\n }\n }\n _listenInputChanges() {\n this._keyword$\n .pipe(debounceTime(200), distinctUntilChanged(), takeUntil(this._destroy$))\n .subscribe((value) => {\n const keywordItem = this._filterItems.keywordItem;\n keywordItem.model = value;\n this.change();\n });\n }\n _syncSearchInputWithKeyword() {\n const keywordItem = this._filterItems.keywordItem;\n if (keywordItem) {\n this.keyword = keywordItem.model;\n this.searchPlaceholder = keywordItem.label || 'Search';\n }\n }\n _listenInternalItemsChange() {\n this._filterItems\n .itemsChange$\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n this.change();\n });\n }\n _initOverlay() {\n this._filterOverlay.setClearFn(this.clear.bind(this));\n this._filterOverlay.setDoneFn(this.hide.bind(this));\n }\n // We may need some time to recieve external params and after that ready can be emitted\n _listenWhenFilterReady() {\n combineLatest([\n this._externalParams.pending$,\n this.itemsReady$,\n ])\n .pipe(filter$1(([pendingParams, itemsReady]) => !pendingParams && itemsReady), takeUntil(this._destroy$))\n .subscribe(() => {\n this.init();\n this._syncSearchInputWithKeyword();\n this.ready.emit();\n });\n }\n _updateChipsVisibility() {\n const hasFilterChips = this._filterItems.items\n .some((item) => {\n return item.isChipVisible;\n });\n this._hasFilterChips$.next(hasFilterChips);\n }\n}\nFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterComponent, deps: [{ token: FS_FILTER_CONFIG, optional: true }, { token: FsFilterOverlayService }, { token: i0.NgZone }, { token: ExternalParamsController }, { token: FsFilterItemsStore }, { token: ActionsController }, { token: SavedFiltersController }, { token: ExternalParamsController }], target: i0.ɵɵFactoryTarget.Component });\nFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FilterComponent, selector: \"fs-filter\", inputs: { setConfig: [\"config\", \"setConfig\"], setFilter: [\"filter\", \"setFilter\"], showSortBy: \"showSortBy\", showFilterInput: \"showFilterInput\" }, outputs: { closed: \"closed\", opened: \"opened\", ready: \"ready\" }, host: { properties: { \"class.filters-open\": \"this.showFilterMenu\", \"class.window-desktop\": \"this.windowDesktop\", \"class.fs-filter\": \"this.fsFilterClass\", \"class.has-keyword\": \"this.hasKeyword\" } }, providers: [\n FsFilterOverlayService,\n ExternalParamsController,\n PersistanceParamsController,\n QueryParamsController,\n FocusControllerService,\n FsFilterItemsStore,\n SavedFiltersController,\n ActionsController,\n ], queries: [{ propertyName: \"statusBar\", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: \"keywordMatInput\", first: true, predicate: [\"keywordMatInput\"], descendants: true, read: MatInput }, { propertyName: \"reloadEl\", first: true, predicate: [\"reloadEl\"], descendants: true, read: ElementRef }], ngImport: i0, template: \"<div class=\\\"filter-container\\\">\\n <div class=\\\"filter-inner-container\\\">\\n <ng-container *ngIf=\\\"!hasKeyword; else filterKeyword\\\">\\n <div>\\n <ng-container *ngTemplateOutlet=\\\"filterStatusBarChips\\\"></ng-container>\\n </div>\\n </ng-container>\\n\\n <ng-container [ngTemplateOutlet]=\\\"filterToolbar\\\"></ng-container>\\n <ng-container [ngTemplateOutlet]=\\\"filterActions\\\"></ng-container>\\n </div>\\n\\n <ng-container *ngIf=\\\"hasKeyword\\\">\\n <ng-container *ngTemplateOutlet=\\\"filterStatusBarChips\\\"></ng-container>\\n </ng-container>\\n</div>\\n\\n<ng-template #filterStatusBarChips>\\n <ng-container *ngIf=\\\"statusBar\\\">\\n <div class=\\\"filter-status-container\\\" [ngClass]=\\\"{ 'has-status': !!filterStatus.textContent }\\\">\\n <div class=\\\"filter-status\\\" #filterStatus>\\n <ng-container *ngTemplateOutlet=\\\"statusBar.templateRef\\\"></ng-container>\\n </div>\\n </div>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"config.chips && hasFilterChips$ | async\\\">\\n <fs-filter-chips\\n class=\\\"filter-chips\\\"\\n [filters]=\\\"items\\\">\\n </fs-filter-chips>\\n </ng-container>\\n</ng-template>\\n\\n<ng-template #filterKeyword>\\n <div class=\\\"filter-keyword\\\">\\n <ng-container *ngIf=\\\"(keywordVisible$ | async) && !keywordItem?.hide \\\">\\n <mat-form-field\\n [floatLabel]=\\\"'never'\\\"\\n class=\\\"form-field-padless\\\"\\n [ngClass]=\\\"search\\\"\\n appearance=\\\"outline\\\">\\n <span matPrefix>\\n <mat-icon matPrefix>search</mat-icon>\\n </span>\\n <input\\n #keywordMatInput\\n matInput\\n [(ngModel)]=\\\"keyword\\\"\\n (ngModelChange)=\\\"keywordChange($event)\\\"\\n name=\\\"filter-input\\\"\\n [fsClear]=\\\"true\\\"\\n [placeholder]=\\\"searchPlaceholder\\\">\\n </mat-form-field>\\n </ng-container>\\n </div>\\n</ng-template>\\n\\n<ng-template #filterActions>\\n <div class=\\\"filter-actions\\\">\\n <fs-filter-actions\\n *ngIf=\\\"actionsVisible$ | async\\\"\\n [actions]=\\\"actions$ | async\\\"\\n [kebabActions]=\\\"menuActions$ | async\\\">\\n </fs-filter-actions>\\n </div>\\n</ng-template>\\n\\n<ng-template #filterToolbar>\\n <div class=\\\"filter-toobar\\\">\\n <ng-container *ngIf=\\\"filtersBtnVisible$ | async\\\">\\n <ng-container *ngIf=\\\"hasVisibleItemOrSorting\\\">\\n <a\\n mat-button\\n class=\\\"filters-button\\\"\\n [ngClass]=\\\"{\\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\\n 'mat-button': config.button.style === 'basic' && config.button.label,\\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label\\n }\\\"\\n (click)=\\\"changeVisibilityClick(!showFilterMenu, $event)\\\"\\n [color]=\\\"config.button.color\\\">\\n <mat-icon *ngIf=\\\"config.button.icon\\\">{{config.button.icon}}</mat-icon>\\n {{ config.button.label }}\\n </a>\\n </ng-container>\\n </ng-container> \\n <ng-container *ngIf=\\\"config.reload\\\">\\n <a\\n mat-icon-button\\n (click)=\\\"reload($event)\\\"\\n class=\\\"reload\\\">\\n <mat-icon #reloadEl>refresh</mat-icon>\\n </a>\\n </ng-container>\\n <ng-container *ngIf=\\\"config.autoReload\\\">\\n <mat-slide-toggle \\n name=\\\"autoReload\\\" \\n class=\\\"auto-reload\\\"\\n [(ngModel)]=\\\"autoReload\\\">\\n Auto refresh\\n </mat-slide-toggle>\\n </ng-container>\\n </div>\\n</ng-template>\\n\", styles: [\":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toobar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:17px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.filter-inner-container .filter-keyword mat-form-field{max-width:100%;min-width:100px;margin-right:6px}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-wrapper{margin-bottom:0}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix .mat-icon{font-size:22px;color:#626262}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-infix{width:250px}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix,.filter-inner-container .filter-keyword mat-form-field .mat-form-field-suffix{top:.45em}.filter-inner-container .filter-keyword .mat-form-field-suffix{display:flex}.filter-inner-container .filter-keyword .mat-form-field-suffix .mat-icon-button{height:24px;width:24px}.filter-actions{display:flex;align-items:center}.filter-toobar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toobar .reload{margin-left:-6px}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin-top:4px;display:block}@media screen and (min-width: 599px){.filter-actions{margin-left:10px}.filters-button+fs-filter-actions:not(:empty){margin-left:5px}}@media screen and (max-width: 600px){.filter-actions{margin-left:5px}.filter-actions .filters-button{font-size:0;padding:0;min-width:unset;width:36px;height:36px;border-radius:50%;box-shadow:unset!important}}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}.fs-filter-backdrop{display:none}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"directive\", type: i1$1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i2$1.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$1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2$1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i2$2.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: i3.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: i3.MatPrefix, selector: \"[matPrefix]\" }, { kind: \"directive\", type: i4.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: i3$1.MatAnchor, selector: \"a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matButton\", \"matAnchor\"] }, { kind: \"component\", type: i12.MatSlideToggle, selector: \"mat-slide-toggle\", inputs: [\"disabled\", \"disableRipple\", \"color\", \"tabIndex\"], exportAs: [\"matSlideToggle\"] }, { kind: \"directive\", type: i9.FsFormNoFsValidatorsDirective, selector: \"[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])\" }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }, { kind: \"component\", type: i14.FsClearComponent, selector: \"[fsClear]\", inputs: [\"ngModel\", \"fsClear\"], outputs: [\"ngModelChange\", \"cleared\"] }, { kind: \"component\", type: FsFilterChipsComponent, selector: \"fs-filter-chips\", inputs: [\"filters\"] }, { kind: \"component\", type: FsFilterActionsComponent, selector: \"fs-filter-actions\", inputs: [\"kebabActions\", \"actions\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FilterComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter', providers: [\n FsFilterOverlayService,\n ExternalParamsController,\n PersistanceParamsController,\n QueryParamsController,\n FocusControllerService,\n FsFilterItemsStore,\n SavedFiltersController,\n ActionsController,\n ], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"filter-container\\\">\\n <div class=\\\"filter-inner-container\\\">\\n <ng-container *ngIf=\\\"!hasKeyword; else filterKeyword\\\">\\n <div>\\n <ng-container *ngTemplateOutlet=\\\"filterStatusBarChips\\\"></ng-container>\\n </div>\\n </ng-container>\\n\\n <ng-container [ngTemplateOutlet]=\\\"filterToolbar\\\"></ng-container>\\n <ng-container [ngTemplateOutlet]=\\\"filterActions\\\"></ng-container>\\n </div>\\n\\n <ng-container *ngIf=\\\"hasKeyword\\\">\\n <ng-container *ngTemplateOutlet=\\\"filterStatusBarChips\\\"></ng-container>\\n </ng-container>\\n</div>\\n\\n<ng-template #filterStatusBarChips>\\n <ng-container *ngIf=\\\"statusBar\\\">\\n <div class=\\\"filter-status-container\\\" [ngClass]=\\\"{ 'has-status': !!filterStatus.textContent }\\\">\\n <div class=\\\"filter-status\\\" #filterStatus>\\n <ng-container *ngTemplateOutlet=\\\"statusBar.templateRef\\\"></ng-container>\\n </div>\\n </div>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"config.chips && hasFilterChips$ | async\\\">\\n <fs-filter-chips\\n class=\\\"filter-chips\\\"\\n [filters]=\\\"items\\\">\\n </fs-filter-chips>\\n </ng-container>\\n</ng-template>\\n\\n<ng-template #filterKeyword>\\n <div class=\\\"filter-keyword\\\">\\n <ng-container *ngIf=\\\"(keywordVisible$ | async) && !keywordItem?.hide \\\">\\n <mat-form-field\\n [floatLabel]=\\\"'never'\\\"\\n class=\\\"form-field-padless\\\"\\n [ngClass]=\\\"search\\\"\\n appearance=\\\"outline\\\">\\n <span matPrefix>\\n <mat-icon matPrefix>search</mat-icon>\\n </span>\\n <input\\n #keywordMatInput\\n matInput\\n [(ngModel)]=\\\"keyword\\\"\\n (ngModelChange)=\\\"keywordChange($event)\\\"\\n name=\\\"filter-input\\\"\\n [fsClear]=\\\"true\\\"\\n [placeholder]=\\\"searchPlaceholder\\\">\\n </mat-form-field>\\n </ng-container>\\n </div>\\n</ng-template>\\n\\n<ng-template #filterActions>\\n <div class=\\\"filter-actions\\\">\\n <fs-filter-actions\\n *ngIf=\\\"actionsVisible$ | async\\\"\\n [actions]=\\\"actions$ | async\\\"\\n [kebabActions]=\\\"menuActions$ | async\\\">\\n </fs-filter-actions>\\n </div>\\n</ng-template>\\n\\n<ng-template #filterToolbar>\\n <div class=\\\"filter-toobar\\\">\\n <ng-container *ngIf=\\\"filtersBtnVisible$ | async\\\">\\n <ng-container *ngIf=\\\"hasVisibleItemOrSorting\\\">\\n <a\\n mat-button\\n class=\\\"filters-button\\\"\\n [ngClass]=\\\"{\\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\\n 'mat-button': config.button.style === 'basic' && config.button.label,\\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label\\n }\\\"\\n (click)=\\\"changeVisibilityClick(!showFilterMenu, $event)\\\"\\n [color]=\\\"config.button.color\\\">\\n <mat-icon *ngIf=\\\"config.button.icon\\\">{{config.button.icon}}</mat-icon>\\n {{ config.button.label }}\\n </a>\\n </ng-container>\\n </ng-container> \\n <ng-container *ngIf=\\\"config.reload\\\">\\n <a\\n mat-icon-button\\n (click)=\\\"reload($event)\\\"\\n class=\\\"reload\\\">\\n <mat-icon #reloadEl>refresh</mat-icon>\\n </a>\\n </ng-container>\\n <ng-container *ngIf=\\\"config.autoReload\\\">\\n <mat-slide-toggle \\n name=\\\"autoReload\\\" \\n class=\\\"auto-reload\\\"\\n [(ngModel)]=\\\"autoReload\\\">\\n Auto refresh\\n </mat-slide-toggle>\\n </ng-container>\\n </div>\\n</ng-template>\\n\", styles: [\":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toobar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:17px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.filter-inner-container .filter-keyword mat-form-field{max-width:100%;min-width:100px;margin-right:6px}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-wrapper{margin-bottom:0}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix .mat-icon{font-size:22px;color:#626262}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-infix{width:250px}.filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix,.filter-inner-container .filter-keyword mat-form-field .mat-form-field-suffix{top:.45em}.filter-inner-container .filter-keyword .mat-form-field-suffix{display:flex}.filter-inner-container .filter-keyword .mat-form-field-suffix .mat-icon-button{height:24px;width:24px}.filter-actions{display:flex;align-items:center}.filter-toobar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toobar .reload{margin-left:-6px}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin-top:4px;display:block}@media screen and (min-width: 599px){.filter-actions{margin-left:10px}.filters-button+fs-filter-actions:not(:empty){margin-left:5px}}@media screen and (max-width: 600px){.filter-actions{margin-left:5px}.filter-actions .filters-button{font-size:0;padding:0;min-width:unset;width:36px;height:36px;border-radius:50%;box-shadow:unset!important}}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}.fs-filter-backdrop{display:none}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: FsFilterConfig, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [FS_FILTER_CONFIG]\n }] }, { type: FsFilterOverlayService }, { type: i0.NgZone }, { type: ExternalParamsController }, { type: FsFilterItemsStore }, { type: ActionsController }, { type: SavedFiltersController }, { type: ExternalParamsController }];\n }, propDecorators: { setConfig: [{\n type: Input,\n args: ['config']\n }], setFilter: [{\n type: Input,\n args: ['filter']\n }], showSortBy: [{\n type: Input\n }], showFilterInput: [{\n type: Input\n }], closed: [{\n type: Output\n }], opened: [{\n type: Output\n }], ready: [{\n type: Output\n }], statusBar: [{\n type: ContentChild,\n args: [FilterStatusBarDirective]\n }], keywordMatInput: [{\n type: ViewChild,\n args: ['keywordMatInput', { read: MatInput }]\n }], reloadEl: [{\n type: ViewChild,\n args: ['reloadEl', { read: ElementRef }]\n }], showFilterMenu: [{\n type: HostBinding,\n args: ['class.filters-open']\n }], windowDesktop: [{\n type: HostBinding,\n args: ['class.window-desktop']\n }], fsFilterClass: [{\n type: HostBinding,\n args: ['class.fs-filter']\n }], hasKeyword: [{\n type: HostBinding,\n args: ['class.has-keyword']\n }] } });\n\nclass SelectBackdropComponent {\n constructor() { }\n}\nSelectBackdropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectBackdropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nSelectBackdropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: SelectBackdropComponent, selector: \"filter-item-select-backdrop\", ngImport: i0, template: \"\", styles: [\":host{position:absolute;z-index:1002;inset:0}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: SelectBackdropComponent, decorators: [{\n type: Component,\n args: [{ selector: 'filter-item-select-backdrop', changeDetection: ChangeDetectionStrategy.OnPush, template: \"\", styles: [\":host{position:absolute;z-index:1002;inset:0}\\n\"] }]\n }], ctorParameters: function () { return []; } });\n\nclass FsFilterSavedFilterManageComponent {\n constructor(data, _cdRef) {\n this.data = data;\n this._cdRef = _cdRef;\n this._savedFiltersController = this.data.savedFiltersController;\n this.savedFilters = [...this._savedFiltersController.savedFilters];\n }\n remove(savedFilter) {\n this._savedFiltersController.delete(savedFilter)\n .subscribe(() => {\n this.savedFilters = [...this._savedFiltersController.savedFilters];\n this._cdRef.markForCheck();\n });\n }\n drop(event) {\n moveItemInArray(this.savedFilters, event.previousIndex, event.currentIndex);\n this._savedFiltersController.order(this.savedFilters)\n .subscribe();\n }\n}\nFsFilterSavedFilterManageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterSavedFilterManageComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nFsFilterSavedFilterManageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsFilterSavedFilterManageComponent, selector: \"ng-component\", ngImport: i0, template: \"<h1 mat-dialog-title>\\n Manage saved filters\\n</h1>\\n<div mat-dialog-content>\\n <div\\n cdkDropList \\n [cdkDropListData]=\\\"savedFilters\\\"\\n cdkDropListOrientation=\\\"vertical\\\"\\n (cdkDropListDropped)=\\\"drop($event)\\\"> \\n <ng-container \\n *ngFor=\\\"let savedFilter of savedFilters\\\">\\n <div class=\\\"chip-container\\\">\\n <fs-chip \\n cdkDrag\\n (removed)=\\\"remove(savedFilter)\\\">\\n {{savedFilter.name}}\\n </fs-chip>\\n </div>\\n </ng-container>\\n </div>\\n</div>\\n<div mat-dialog-actions>\\n <button \\n mat-button\\n type=\\\"button\\\"\\n [mat-dialog-close]=\\\"null\\\">\\n Done\\n </button>\\n</div>\\n\", styles: [\".chip-container{padding:5px 0}.chip-container fs-chip{cursor:move}.cdk-drag-preview{box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i2$3.CdkDropList, selector: \"[cdkDropList], cdk-drop-list\", inputs: [\"cdkDropListConnectedTo\", \"cdkDropListData\", \"cdkDropListOrientation\", \"id\", \"cdkDropListLockAxis\", \"cdkDropListDisabled\", \"cdkDropListSortingDisabled\", \"cdkDropListEnterPredicate\", \"cdkDropListSortPredicate\", \"cdkDropListAutoScrollDisabled\", \"cdkDropListAutoScrollStep\"], outputs: [\"cdkDropListDropped\", \"cdkDropListEntered\", \"cdkDropListExited\", \"cdkDropListSorted\"], exportAs: [\"cdkDropList\"] }, { kind: \"directive\", type: i2$3.CdkDrag, selector: \"[cdkDrag]\", inputs: [\"cdkDragData\", \"cdkDragLockAxis\", \"cdkDragRootElement\", \"cdkDragBoundary\", \"cdkDragStartDelay\", \"cdkDragFreeDragPosition\", \"cdkDragDisabled\", \"cdkDragConstrainPosition\", \"cdkDragPreviewClass\", \"cdkDragPreviewContainer\"], outputs: [\"cdkDragStarted\", \"cdkDragReleased\", \"cdkDragEnded\", \"cdkDragEntered\", \"cdkDragExited\", \"cdkDragDropped\", \"cdkDragMoved\"], exportAs: [\"cdkDrag\"] }, { kind: \"component\", type: i3$1.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }, { kind: \"directive\", type: i1$2.MatDialogClose, selector: \"[mat-dialog-close], [matDialogClose]\", inputs: [\"aria-label\", \"type\", \"mat-dialog-close\", \"matDialogClose\"], exportAs: [\"matDialogClose\"] }, { kind: \"directive\", type: i1$2.MatDialogTitle, selector: \"[mat-dialog-title], [matDialogTitle]\", inputs: [\"id\"], exportAs: [\"matDialogTitle\"] }, { kind: \"directive\", type: i1$2.MatDialogContent, selector: \"[mat-dialog-content], mat-dialog-content, [matDialogContent]\" }, { kind: \"directive\", type: i1$2.MatDialogActions, selector: \"[mat-dialog-actions], mat-dialog-actions, [matDialogActions]\", inputs: [\"align\"] }, { kind: \"component\", type: i3$2.FsChipComponent, selector: \"fs-chip\", inputs: [\"selectable\", \"removable\", \"value\", \"icon\", \"image\", \"selected\", \"size\", \"backgroundColor\", \"borderColor\", \"color\", \"outlined\"], outputs: [\"selectedToggled\", \"removed\"] }, { kind: \"directive\", type: i9.FsButtonDirective, selector: \"[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]\", inputs: [\"name\", \"dirtySubmit\", \"form\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterSavedFilterManageComponent, decorators: [{\n type: Component,\n args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: \"<h1 mat-dialog-title>\\n Manage saved filters\\n</h1>\\n<div mat-dialog-content>\\n <div\\n cdkDropList \\n [cdkDropListData]=\\\"savedFilters\\\"\\n cdkDropListOrientation=\\\"vertical\\\"\\n (cdkDropListDropped)=\\\"drop($event)\\\"> \\n <ng-container \\n *ngFor=\\\"let savedFilter of savedFilters\\\">\\n <div class=\\\"chip-container\\\">\\n <fs-chip \\n cdkDrag\\n (removed)=\\\"remove(savedFilter)\\\">\\n {{savedFilter.name}}\\n </fs-chip>\\n </div>\\n </ng-container>\\n </div>\\n</div>\\n<div mat-dialog-actions>\\n <button \\n mat-button\\n type=\\\"button\\\"\\n [mat-dialog-close]=\\\"null\\\">\\n Done\\n </button>\\n</div>\\n\", styles: [\".chip-container{padding:5px 0}.chip-container fs-chip{cursor:move}.cdk-drag-preview{box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DIALOG_DATA]\n }] }, { type: i0.ChangeDetectorRef }];\n } });\n\nclass FsSavedFiltersMenuComponent {\n constructor(_itemsStore, _externalParams, _savedFilters, _dialog) {\n this._itemsStore = _itemsStore;\n this._externalParams = _externalParams;\n this._savedFilters = _savedFilters;\n this._dialog = _dialog;\n this.clear = new EventEmitter();\n }\n get filters$() {\n return this._savedFilters.savedFilters$;\n }\n get activeFilter$() {\n return this._savedFilters.activeFilter$;\n }\n selectFilter(savedFilter) {\n this._externalParams.setActiveSavedFilter(savedFilter);\n }\n removeActiveFilter() {\n this._itemsStore.filtersClear();\n this._externalParams.setActiveSavedFilter(null);\n this.clear.emit();\n }\n manageFilters() {\n this._dialog.open(FsFilterSavedFilterManageComponent, {\n data: {\n savedFiltersController: this._savedFilters,\n },\n });\n }\n}\nFsSavedFiltersMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsSavedFiltersMenuComponent, deps: [{ token: FsFilterItemsStore }, { token: ExternalParamsController }, { token: SavedFiltersController }, { token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });\nFsSavedFiltersMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"14.3.0\", type: FsSavedFiltersMenuComponent, selector: \"fs-filter-saved-filters-menu\", outputs: { clear: \"clear\" }, ngImport: i0, template: \"<a [fsMenuTriggerFor]=\\\"menu\\\" class=\\\"selector\\\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\\n\\n<fs-menu #menu>\\n <ng-container *ngIf=\\\"activeFilter$ | async\\\">\\n <ng-template fs-menu-item (click)=\\\"removeActiveFilter()\\\">\\n None\\n </ng-template>\\n </ng-container>\\n <ng-container *ngIf=\\\"(filters$ | async).length !==0\\\">\\n <ng-container *ngFor=\\\"let filter of filters$ | async\\\">\\n <ng-template fs-menu-item (click)=\\\"selectFilter(filter)\\\">\\n {{ filter.name }}\\n </ng-template>\\n </ng-container>\\n <ng-template fs-menu-divider-item></ng-template>\\n </ng-container>\\n <ng-template \\n fs-menu-item \\n class=\\\"saved-filter-last-item\\\" \\n (click)=\\\"manageFilters()\\\">\\n Manage\\n </ng-template>\\n</fs-menu>\\n\", styles: [\":host ::ng-deep .selector{cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: i1$1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1$1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: i6$1.FsMenuComponent, selector: \"fs-menu\", inputs: [\"class\", \"buttonClass\", \"buttonType\", \"buttonColor\"], outputs: [\"opened\", \"closed\"] }, { kind: \"directive\", type: i6$1.FsMenuItemDirective, selector: \"fs-menu-group,[fs-menu-item]\" }, { kind: \"directive\", type: i6$1.FsMenuTriggerDirective, selector: \"[fsMenuTriggerFor]\", inputs: [\"fsMenuTriggerFor\"] }, { kind: \"pipe\", type: i1$1.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsSavedFiltersMenuComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fs-filter-saved-filters-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<a [fsMenuTriggerFor]=\\\"menu\\\" class=\\\"selector\\\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\\n\\n<fs-menu #menu>\\n <ng-container *ngIf=\\\"activeFilter$ | async\\\">\\n <ng-template fs-menu-item (click)=\\\"removeActiveFilter()\\\">\\n None\\n </ng-template>\\n </ng-container>\\n <ng-container *ngIf=\\\"(filters$ | async).length !==0\\\">\\n <ng-container *ngFor=\\\"let filter of filters$ | async\\\">\\n <ng-template fs-menu-item (click)=\\\"selectFilter(filter)\\\">\\n {{ filter.name }}\\n </ng-template>\\n </ng-container>\\n <ng-template fs-menu-divider-item></ng-template>\\n </ng-container>\\n <ng-template \\n fs-menu-item \\n class=\\\"saved-filter-last-item\\\" \\n (click)=\\\"manageFilters()\\\">\\n Manage\\n </ng-template>\\n</fs-menu>\\n\", styles: [\":host ::ng-deep .selector{cursor:pointer}\\n\"] }]\n }], ctorParameters: function () { return [{ type: FsFilterItemsStore }, { type: ExternalParamsController }, { type: SavedFiltersController }, { type: i1$2.MatDialog }]; }, propDecorators: { clear: [{\n type: Output\n }] } });\n\nclass FsFilterModule {\n static forRoot(config = {}) {\n return {\n ngModule: FsFilterModule,\n providers: [\n {\n provide: FS_FILTER_CONFIG,\n useValue: Object.assign({ button: {\n label: '',\n } }, config),\n },\n ],\n };\n }\n}\nFsFilterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nFsFilterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterModule, declarations: [BaseItemComponent,\n FilterComponent,\n FilterItemComponent,\n FsFilterChipsComponent,\n SelectComponent,\n SelectGroupsComponent,\n SelectSimpleComponent,\n SelectMultipleComponent,\n ChipsComponent,\n TextComponent,\n WeekComponent,\n RangeComponent,\n AutocompleteComponent,\n AutocompletechipsComponent,\n DateComponent,\n DateRangeComponent,\n CheckboxComponent,\n FilterDrawerComponent,\n SelectBackdropComponent,\n FsFilterChipComponent,\n FsFilterChipContentComponent,\n FsFilterDrawerActionsComponent,\n FsFilterSavedFilterEditComponent,\n FsSavedFiltersMenuComponent,\n FsFilterActionsComponent,\n FsFilterActionButtonComponent,\n FsFilterActionKebabActionsComponent,\n FsFilterSavedFilterManageComponent,\n FilterStatusBarDirective,\n FocusToItemDirective,\n // Pipes\n FsFilterIsolateValues], imports: [CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n DragDropModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatChipsModule,\n MatCheckboxModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatDialogModule,\n MatTooltipModule,\n MatSlideToggleModule,\n FsChipModule,\n FsCommonModule,\n FsStoreModule,\n FsDatePickerModule,\n FsLabelModule,\n FsAutocompleteModule,\n FsAutocompleteChipsModule,\n FsScrollModule,\n FsMenuModule,\n FsSkeletonModule,\n FsFormModule,\n FsFileModule,\n FsSelectButtonModule,\n FsClearModule,\n FsPopoverModule,\n PortalModule], exports: [FilterComponent,\n FilterStatusBarDirective,\n FsSavedFiltersMenuComponent] });\nFsFilterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterModule, providers: [\n FsStore,\n ], imports: [CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n DragDropModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatChipsModule,\n MatCheckboxModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatDialogModule,\n MatTooltipModule,\n MatSlideToggleModule,\n FsChipModule,\n FsCommonModule,\n FsStoreModule,\n FsDatePickerModule,\n FsLabelModule,\n FsAutocompleteModule,\n FsAutocompleteChipsModule,\n FsScrollModule,\n FsMenuModule,\n FsSkeletonModule,\n FsFormModule,\n FsFileModule,\n FsSelectButtonModule,\n FsClearModule,\n FsPopoverModule,\n PortalModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"14.3.0\", ngImport: i0, type: FsFilterModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n DragDropModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatChipsModule,\n MatCheckboxModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatDialogModule,\n MatTooltipModule,\n MatSlideToggleModule,\n FsChipModule,\n FsCommonModule,\n FsStoreModule,\n FsDatePickerModule,\n FsLabelModule,\n FsAutocompleteModule,\n FsAutocompleteChipsModule,\n FsScrollModule,\n FsMenuModule,\n FsSkeletonModule,\n FsFormModule,\n FsFileModule,\n FsSelectButtonModule,\n FsClearModule,\n FsPopoverModule,\n PortalModule,\n ],\n declarations: [\n BaseItemComponent,\n FilterComponent,\n FilterItemComponent,\n FsFilterChipsComponent,\n SelectComponent,\n SelectGroupsComponent,\n SelectSimpleComponent,\n SelectMultipleComponent,\n ChipsComponent,\n TextComponent,\n WeekComponent,\n RangeComponent,\n AutocompleteComponent,\n AutocompletechipsComponent,\n DateComponent,\n DateRangeComponent,\n CheckboxComponent,\n FilterDrawerComponent,\n SelectBackdropComponent,\n FsFilterChipComponent,\n FsFilterChipContentComponent,\n FsFilterDrawerActionsComponent,\n FsFilterSavedFilterEditComponent,\n FsSavedFiltersMenuComponent,\n FsFilterActionsComponent,\n FsFilterActionButtonComponent,\n FsFilterActionKebabActionsComponent,\n FsFilterSavedFilterManageComponent,\n FilterStatusBarDirective,\n FocusToItemDirective,\n // Pipes\n FsFilterIsolateValues,\n ],\n providers: [\n FsStore,\n ],\n exports: [\n FilterComponent,\n FilterStatusBarDirective,\n FsSavedFiltersMenuComponent,\n ],\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ActionMode, ActionType, AutocompleteChipsItem, AutocompleteItem, BaseItem, ButtonStyle, CheckboxItem, ChipsItem, DateItem, DateRangeItem, DateTimeItem, DateTimeRangeItem, ExternalParamsController, FS_FILTER_CONFIG, FilterComponent, FilterItemComponent, FilterStatusBarDirective, FsFilterModule, FsSavedFiltersMenuComponent, ItemDateMode, ItemType, QUERY_PARAM_DELIMITER, RangeItem, SavedFiltersController, SelectItem, TextItem, buildQueryParams, filterFromQueryParam, filterToQueryParam };\n//# sourceMappingURL=firestitch-filter.mjs.map\n","map":{"version":3,"file":"firestitch-filter.mjs","sources":["../../src/app/helpers/compare.ts","../../src/app/enums/item-type.enum.ts","../../src/app/models/items/base-item.ts","../../src/app/models/items/select/base-select-item.ts","../../src/app/models/items/select/multiple-select-item.ts","../../src/app/consts/query-param-delimiter.ts","../../src/app/helpers/query-param-transformers.ts","../../src/app/helpers/build-query-params.ts","../../src/app/models/items/autocomplete/base-autocomplete-item.ts","../../src/app/models/items/autocomplete-chips-item.ts","../../src/app/models/items/autocomplete-item.ts","../../src/app/models/items/checkbox-item.ts","../../src/app/models/items/chips-item.ts","../../src/app/enums/item-date-mode.enum.ts","../../src/app/models/items/date/base-date-item.ts","../../src/app/models/items/date-item.ts","../../src/app/helpers/get-range-name.ts","../../src/app/models/items/date-range/base-date-range-item.ts","../../src/app/models/items/date-range-item.ts","../../src/app/models/items/date-time-item.ts","../../src/app/models/items/date-time-range-item.ts","../../src/app/models/items/range-item.ts","../../src/app/helpers/find-value.ts","../../src/app/models/items/select/simple-select-item.ts","../../src/app/models/items/select-item.ts","../../src/app/models/items/text-item.ts","../../src/app/helpers/parse-date.ts","../../src/app/models/items/week-item.ts","../../src/app/helpers/create-filter-item.ts","../../src/app/enums/action-mode.enum.ts","../../src/app/enums/action-type.enum.ts","../../src/app/enums/button-style.ts","../../src/app/enums/picker-view-type.enum.ts","../../src/app/models/filter-config.ts","../../src/app/services/items-store.service.ts","../../src/app/helpers/parse-item-value-from-stored.ts","../../src/app/helpers/restore-items.ts","../../src/app/services/external-params/persistance-params-controller.service.ts","../../src/app/services/external-params/query-params-controller.service.ts","../../src/app/components/saved-filter/saved-filter-edit/saved-filter-edit.component.ts","../../src/app/components/saved-filter/saved-filter-edit/saved-filter-edit.component.html","../../src/app/services/external-params/saved-filters-controller.service.ts","../../src/app/services/external-params-controller.service.ts","../../src/app/components/action-button/action-button.component.ts","../../src/app/components/action-button/action-button.component.html","../../src/app/components/action-kebab-actions/action-kebab-actions.component.ts","../../src/app/components/action-kebab-actions/action-kebab-actions.component.html","../../src/app/components/actions/actions.component.ts","../../src/app/components/actions/actions.component.html","../../src/app/components/filter-chip-content/filter-chip-content.component.ts","../../src/app/components/filter-chip-content/filter-chip-content.component.html","../../src/app/services/focus-controller.service.ts","../../src/app/components/filter-chip/filter-chip.component.ts","../../src/app/components/filter-chip/filter-chip.component.html","../../src/app/components/filter-chips/filter-chips.component.ts","../../src/app/components/filter-chips/filter-chips.component.html","../../src/app/components/filter-drawer-actions/filter-drawer-actions.component.ts","../../src/app/components/filter-drawer-actions/filter-drawer-actions.component.html","../../src/app/injectors/filter-drawer-data.ts","../../src/app/injectors/filter-drawer-overlay.ts","../../src/app/components/filters-item/base-item/base-item.component.ts","../../src/app/directives/focus-to-item/focus-to-item.directive.ts","../../src/app/components/filters-item/select/groups/groups.component.ts","../../src/app/components/filters-item/select/groups/groups.component.html","../../src/app/pipes/remove-isolate-value.pipe.ts","../../src/app/components/filters-item/select/simple/simple.component.ts","../../src/app/components/filters-item/select/simple/simple.component.html","../../src/app/components/filters-item/select/multiple/multiple.component.ts","../../src/app/components/filters-item/select/multiple/multiple.component.html","../../src/app/components/filters-item/select/select.component.ts","../../src/app/components/filters-item/select/select.component.html","../../src/app/components/filters-item/chips/chips.component.ts","../../src/app/components/filters-item/chips/chips.component.html","../../src/app/components/filters-item/text/text.component.ts","../../src/app/components/filters-item/text/text.component.html","../../src/app/components/filters-item/week/week.component.ts","../../src/app/components/filters-item/week/week.component.html","../../src/app/components/filters-item/range/range.component.ts","../../src/app/components/filters-item/range/range.component.html","../../src/app/components/filters-item/autocomplete/autocomplete.component.ts","../../src/app/components/filters-item/autocomplete/autocomplete.component.html","../../src/app/components/filters-item/autocompletechips/autocompletechips.component.ts","../../src/app/components/filters-item/autocompletechips/autocompletechips.component.html","../../src/app/components/filters-item/date/date.component.ts","../../src/app/components/filters-item/date/date.component.html","../../src/app/components/filters-item/date-range/date-range.component.ts","../../src/app/components/filters-item/date-range/date-range.component.html","../../src/app/components/filters-item/checkbox/checkbox.component.ts","../../src/app/components/filters-item/checkbox/checkbox.component.html","../../src/app/components/filters-item/filter-item.component.ts","../../src/app/components/filters-item/filter-item.component.html","../../src/app/components/filter-drawer/filter-drawer.component.ts","../../src/app/components/filter-drawer/filter-drawer.component.html","../../src/app/models/action-menu-item.model.ts","../../src/app/models/action.model.ts","../../src/app/classes/actions-controller.ts","../../src/app/providers/filter-meta.ts","../../src/app/services/filter-overlay.service.ts","../../src/app/directives/status-bar/status-bar.directive.ts","../../src/app/injectors/filter-config.ts","../../src/app/components/filter/filter.component.ts","../../src/app/components/filter/filter.component.html","../../src/app/components/filters-item/select/backdrop/backdrop.component.ts","../../src/app/components/filters-item/select/backdrop/backdrop.component.html","../../src/app/components/saved-filter/saved-filter-manage/saved-filter-manage.component.ts","../../src/app/components/saved-filter/saved-filter-manage/saved-filter-manage.component.html","../../src/app/components/saved-filter/saved-filters-menu/saved-filters-menu.component.ts","../../src/app/components/saved-filter/saved-filters-menu/saved-filters-menu.component.html","../../src/app/fs-filter.module.ts","../../src/firestitch-filter.ts"],"sourcesContent":["import { isObject } from 'lodash-es';\n\n\nexport function objectsAreEquals(obj1, obj2) {\n const oldKeys = Object.keys(obj1);\n const currKeys = Object.keys(obj2);\n\n if (oldKeys.length !== currKeys.length) {\n return false;\n }\n\n for (const key in obj1) {\n if (obj1.hasOwnProperty(key)) {\n const oldItem = obj1[key];\n const currItem = obj2[key];\n const isArrays = Array.isArray(oldItem) && Array.isArray(currItem);\n const isObjects = isObject(oldItem) && isObject(currItem);\n\n if (isArrays && !arraysAreEquals(oldItem, currItem)) {\n return false;\n } else if (isObjects && !objectsAreEquals(oldItem, currItem)) {\n return false;\n } else if (!isArrays && !isObjects && oldItem !== currItem) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nexport function arraysAreEquals(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (const el of arr1) {\n if (arr2.indexOf(el) === -1) {\n return false;\n }\n }\n\n return true;\n}\n","export enum ItemType {\n Text = 'text',\n Select = 'select',\n Range = 'range',\n Date = 'date',\n DateTime = 'datetime',\n DateRange = 'daterange',\n Week = 'week',\n DateTimeRange = 'datetimerange',\n AutoComplete = 'autocomplete',\n AutoCompleteChips = 'autocompletechips',\n Checkbox = 'checkbox',\n Chips = 'chips',\n Keyword = 'keyword',\n}\n","\nimport { BehaviorSubject, isObservable, Observable, Subject } from 'rxjs';\nimport {\n finalize,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nimport { isFunction } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { ItemType } from '../../enums/item-type.enum';\nimport { IFilterConfigItem } from '../../interfaces/config.interface';\nimport { IFilterDefaultFn } from '../../interfaces/items/base.interface';\nimport { IFilterItemDefaultRange } from '../../interfaces/items/range.interface';\n\n\nexport abstract class BaseItem<T extends IFilterConfigItem> {\n\n public name: string;\n public label: string | string[];\n public chipLabel: string | string[];\n public hide: boolean;\n public defaultValue: any | IFilterItemDefaultRange;\n public defaultValueFn: IFilterDefaultFn;\n public persistedValue: unknown;\n public showClear: boolean;\n public persistanceDisabled: boolean;\n public queryParamsDisabled: boolean;\n public change: (item: BaseItem<T>, filter: FilterComponent) => void;\n public init: (item: BaseItem<T>, filter?) => void;\n\n protected readonly _type: T['type'];\n\n protected _model: any;\n protected _pendingValues = false;\n protected _pendingDefaultValue = false;\n protected _initializedValues = false;\n protected _loading$ = new BehaviorSubject(false);\n protected _value$ = new BehaviorSubject(null);\n protected _valueChange$ = new Subject<void>();\n protected _values$ = new BehaviorSubject(null);\n protected _valuesFn: (keyword?: string, filter?: FilterComponent) => Observable<any> | any;\n\n protected _destroy$ = new Subject<void>();\n\n private _clear$ = new Subject<unknown>();\n\n constructor(\n itemConfig: T,\n protected _additionalConfig: unknown,\n protected _filter: FilterComponent,\n ) {\n this._type = itemConfig.type;\n this._parseConfig(itemConfig);\n }\n\n public abstract get value();\n\n public get filter(): FilterComponent {\n return this._filter;\n }\n\n public get isTypeAutocomplete() {\n return this.type === ItemType.AutoComplete;\n }\n\n public get isTypeAutocompleteChips() {\n return this.type === ItemType.AutoCompleteChips;\n }\n\n public get isTypeChips() {\n return this.type === ItemType.Chips;\n }\n\n public get isTypeCheckbox() {\n return this.type === ItemType.Checkbox;\n }\n\n public get isTypeSelect() {\n return this.type === ItemType.Select;\n }\n\n public get isTypeDate() {\n return this.type === ItemType.Date;\n }\n\n public get isTypeDateRange() {\n return this.type === ItemType.DateRange;\n }\n\n public get isTypeRange() {\n return this.type === ItemType.Range;\n }\n\n public get isTypeDateTimeRange() {\n return this.type === ItemType.DateTimeRange;\n }\n\n public get isTypeDateTime() {\n return this.type === ItemType.DateTime;\n }\n\n public get isTypeKeyword() {\n return this.type === ItemType.Keyword;\n }\n\n public get isChipVisible(): boolean {\n return !!this.model;\n }\n\n public get destroy$() {\n return this._destroy$.asObservable();\n }\n\n public get type(): T['type'] {\n return this._type;\n }\n\n public get hasPendingValues(): boolean {\n return this._pendingValues;\n }\n\n public get hasPendingDefaultValue(): boolean {\n return this._pendingDefaultValue;\n }\n\n public get model() {\n return this._model;\n }\n\n public set model(value) {\n this._setModel(value);\n this.valueChanged();\n }\n\n public set values(values) {\n this._values$.next(values);\n }\n\n public get values() {\n return this._values$.getValue();\n }\n\n public get values$(): Observable<unknown> {\n return this._values$.asObservable();\n }\n\n public get valueChange$() {\n return this._valueChange$.asObservable();\n }\n\n public get value$() {\n return this._value$.asObservable();\n }\n\n public get clear$() {\n return this._clear$.asObservable();\n }\n\n public get initialized() {\n return this._initialized;\n }\n\n public get loading$(): Observable<boolean> {\n return this._loading$.asObservable();\n }\n\n public get loading(): boolean {\n return this._loading$.getValue();\n }\n\n public set loading(value: boolean) {\n this._loading$.next(value);\n }\n\n protected get _initialized(): boolean {\n return !this._pendingDefaultValue && !this._pendingValues && this._initializedValues;\n }\n\n public valueChanged() {\n this._value$.next(this.value);\n\n if (this.change) {\n this.change(this, this._filter);\n }\n\n if (this.initialized) {\n this._valueChange$.next();\n }\n }\n\n public get queryObject(): Record<string, unknown> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n if (Array.isArray(value)) {\n params[this.name] = value.join(',');\n } else {\n params[name] = value;\n }\n\n return params;\n }\n\n public get persistanceObject(): Record<string, unknown> {\n return this.queryObject;\n }\n\n public loadDefaultValue(): Observable<any> {\n this._pendingDefaultValue = true;\n\n return this.defaultValueFn()\n .pipe(\n tap((value) => {\n this.defaultValue = value;\n\n this._initDefaultModel();\n }),\n finalize(() => {\n this._pendingDefaultValue = false;\n }),\n );\n }\n\n public initValues(persistedValue: unknown) {\n this._initializedValues = false;\n this.persistedValue = persistedValue;\n this._initDefaultModel();\n\n const isAutocomplete = this.type === ItemType.AutoComplete || this.type === ItemType.AutoCompleteChips;\n\n if (this._valuesFn && !isAutocomplete) {\n const valuesResult = this._valuesFn(null, this._filter);\n\n if (isObservable(valuesResult)) {\n this._pendingValues = true;\n } else {\n this.values = valuesResult;\n this._init();\n this._initializedValues = true;\n }\n\n } else {\n this._init();\n this._initializedValues = true;\n }\n }\n\n public loadAsyncValues(reload = true) {\n if (reload || (!this.loading && this.hasPendingValues)) {\n this.loading = true;\n\n (this._valuesFn(null, this._filter) as Observable<unknown>)\n .pipe(\n take(1),\n takeUntil(this._destroy$),\n )\n .subscribe((values) => {\n this.values = values;\n this._pendingValues = false;\n this.loading = false;\n this._init();\n this._validateModel();\n this._initializedValues = true;\n });\n\n }\n }\n\n public clear(defaultValue: unknown = undefined) {\n if (this.isTypeRange || this.isTypeDateRange || this.isTypeDateTimeRange) {\n console.warn(`\n Filter ${this.name} can not be cleared with .clear() method!\n Use special .clearRange() or clearDateRange() instead.\n `);\n }\n\n this._clear$.next(defaultValue);\n this._clearValue(defaultValue);\n }\n\n public getChipsContent(type): string {\n return '';\n }\n\n\n public destroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n protected _setModel(value) {\n this._model = value;\n }\n\n protected _parseConfig(item: T) {\n this.name = item.name;\n this.label = item.label;\n this.chipLabel = item.chipLabel;\n\n if (typeof item.default === 'function') {\n this.defaultValueFn = item.default as IFilterDefaultFn;\n } else {\n this.defaultValue = item.default;\n }\n\n this.change = item.change;\n this.init = item.init || ((_) => {\n //\n });\n this.hide = item.hide;\n this.showClear = item.clear ?? true;\n this.persistanceDisabled = item.disablePersist ?? false;\n this.queryParamsDisabled = item.disableQueryParams ?? false;\n\n if (isFunction(item.values)) {\n this._valuesFn = item.values;\n } else {\n this.values = item.values;\n }\n }\n\n protected _initDefaultModel() {\n const model = this.persistedValue ?? this.defaultValue;\n\n if (model !== undefined) {\n this._setModel(model);\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n }\n\n protected abstract _init();\n protected abstract _validateModel();\n}\n","import { BaseItem } from '../base-item';\nimport {\n IFilterConfigSelectIsolate,\n IFilterConfigSelectItem\n} from '../../../interfaces/items/select.interface';\n\nexport interface IFilterIsolate extends IFilterConfigSelectIsolate {\n enabled: boolean;\n}\n\nexport abstract class BaseSelectItem extends BaseItem<IFilterConfigSelectItem> {\n\n public children: string;\n public multiple: boolean;\n public isolate: IFilterIsolate;\n\n protected _parseConfig(item: IFilterConfigSelectItem) {\n this.multiple = item.multiple;\n this.children = item.children;\n\n // TODO nullish\n if (item.isolate) {\n this.isolate = {\n ...item.isolate,\n enabled: false,\n };\n }\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!Array.isArray(this.values)) {\n this.values = [];\n }\n\n // TODO Refactor\n if (this.isolate) {\n this.values = this.values.filter((item) => {\n if (Array.isArray(this.isolate.value)) {\n return (this.isolate.value as unknown[]).indexOf(item.value) === -1;\n } else {\n return item.value !== this.isolate.value;\n }\n });\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n if (this.isolate) {\n this.isolate.enabled = false;\n }\n }\n\n}\n","import { filter, isArrayEqual } from '@firestitch/common';\n\nimport { clone } from 'lodash-es';\n\nimport type { FilterComponent } from '../../../components/filter/filter.component';\nimport { arraysAreEquals } from '../../../helpers/compare';\nimport { IFilterConfigSelectItem } from '../../../interfaces/items/select.interface';\n\nimport { BaseSelectItem } from './base-select-item';\n\n\nexport class MultipleSelectItem extends BaseSelectItem {\n\n constructor(\n itemConfig: IFilterConfigSelectItem,\n _persistedValues: any,\n _filter: FilterComponent,\n ) {\n super(itemConfig, _persistedValues, _filter);\n }\n\n public get value() {\n let value = clone(this.model);\n\n if (this.isolateOptionNotSelected) {\n value = this.values?.map((v) => v.value);\n } else if (!Array.isArray(value) || value.length === 0 || value.indexOf('__all') > -1) {\n value = undefined;\n }\n\n return value;\n }\n\n public get isChipVisible(): boolean {\n return Array.isArray(this.model) && this.model.length > 0;\n }\n\n public get isolateOptionNotSelected() {\n const modelValue = this.model;\n const isolate = this.isolate;\n\n return isolate && !isolate.enabled && modelValue?.length === 0;\n }\n\n public getChipsContent(type = null): string {\n const options = this.model.reduce((acc, key) => {\n const itemValue = this.values.find((val) => val.value === key);\n let itemLabel: string;\n\n if (itemValue) {\n itemLabel = itemValue.name;\n } else if (this.isolate && this.isolate.enabled) {\n itemLabel = this.isolate.label;\n }\n\n if (!acc.includes(itemLabel)) {\n acc.push(itemLabel);\n }\n\n return acc;\n }, []);\n\n return options.join(', ');\n }\n\n protected _init() {\n super._init();\n\n const values = this.values.map((itemv) => itemv.value);\n const wrongDefaultValue = !this.model && !Array.isArray(this.defaultValue);\n\n /**\n * When multiple select is in isolate mode and have no options selected\n * it should send to the server all it's possible values,\n * but should not show them as selected in interfaces as well as in query params & persistance\n *\n * Code below prevents filling model with values from query params if query params contain all possible values\n */\n const isolate = !wrongDefaultValue\n && !this.isolateOptionNotSelected\n && arraysAreEquals(this.model, values);\n\n if (wrongDefaultValue || isolate) {\n this.model = [];\n }\n }\n protected _setModel(value) {\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (isNaN(val)) {\n return val;\n }\n\n return +val;\n\n });\n }\n\n super._setModel(value);\n }\n\n protected _validateModel() {\n const possibleValues = filter(this.model || [], (item) => {\n return this.values.find((value) => {\n return value.value === item;\n });\n });\n\n if (!isArrayEqual(this.model, possibleValues)) {\n this.model = possibleValues;\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n super._clearValue(defaultValue);\n\n this.model = defaultValue ?? [];\n }\n}\n","export const QUERY_PARAM_DELIMITER = ':';\n","import { QUERY_PARAM_DELIMITER } from '../consts/query-param-delimiter';\n\nexport function filterToQueryParam(value, name): string {\n return `${encodeURIComponent(value)}${QUERY_PARAM_DELIMITER}${encodeURIComponent(name)}`;\n}\n\nexport function filterFromQueryParam(param: string): string[] {\n const parts = param.split(QUERY_PARAM_DELIMITER);\n\n return [decodeURIComponent(parts[0]), decodeURIComponent(parts[1])];\n}\n\n","import { list as arrayList } from '@firestitch/common';\n\nimport { isObject } from 'lodash-es';\n\nimport { IFilterConfigItem } from '../interfaces/config.interface';\nimport { BaseItem } from '../models/items/base-item';\nimport { MultipleSelectItem } from '../models/items/select/multiple-select-item';\nimport { arraysAreEquals } from './compare';\nimport { filterToQueryParam } from './query-param-transformers';\n\n\nexport function buildQueryParams(flattenedParams: Record<string, unknown>, items: BaseItem<IFilterConfigItem>[]) {\n items\n .forEach((filterItem) => {\n if (filterItem instanceof MultipleSelectItem && filterItem.isolate) {\n if (filterItem.multiple && filterItem.value) {\n const isolated = arrayList(filterItem.values, 'value').sort();\n const value = filterItem.value.sort();\n\n if (arraysAreEquals(value, isolated)) {\n flattenedParams[filterItem.name] = null;\n }\n }\n }\n\n if (filterItem.isTypeAutocomplete) {\n if (isObject(filterItem.model)) {\n flattenedParams[filterItem.name] = filterToQueryParam(filterItem.model.value, filterItem.model.name);\n }\n } else if (filterItem.isTypeAutocompleteChips || filterItem.isTypeChips) {\n if (Array.isArray(filterItem.model) && filterItem.model.length) {\n flattenedParams[filterItem.name] = filterItem.model.map((item) => {\n return filterToQueryParam(item.value, item.name);\n }).join(',');\n }\n }\n });\n\n return flattenedParams;\n}\n","import { IFilterConfigAutocompleteChipsItem } from '../../../interfaces/items/autocomplete-chips.interface';\nimport { IFilterConfigAutocompleteItem } from '../../../interfaces/items/autocomplete.interface';\nimport { BaseItem } from '../base-item';\n\ntype AutoCompleteItem = IFilterConfigAutocompleteItem | IFilterConfigAutocompleteChipsItem;\n\nexport abstract class BaseAutocompleteItem<T extends AutoCompleteItem> extends BaseItem<T> {\n\n public search: string;\n\n public fetchOnFocus: boolean;\n\n public get valuesFn() {\n return this._valuesFn;\n }\n\n protected _validateModel() {\n //\n }\n\n protected _parseConfig(item: T) {\n this.fetchOnFocus = item.fetchOnFocus ?? true;\n\n super._parseConfig(item);\n }\n}\n","import { clone } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigAutocompleteChipsItem } from '../../interfaces/items/autocomplete-chips.interface';\n\nimport { BaseAutocompleteItem } from './autocomplete/base-autocomplete-item';\n\n\nexport class AutocompleteChipsItem\n extends BaseAutocompleteItem<IFilterConfigAutocompleteChipsItem> {\n\n public chipImage: string;\n public chipIcon: string;\n public chipColor: string;\n public chipIconColor: string;\n public chipBackground: string;\n public chipClass: string;\n\n public static create(config: IFilterConfigAutocompleteChipsItem, filter: FilterComponent) {\n return new AutocompleteChipsItem(config, null, filter);\n }\n\n public get value() {\n if (Array.isArray(this.model) && this.model.length === 0) {\n return undefined;\n }\n\n return clone(this.model);\n }\n\n public get queryObject(): Record<string, unknown> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n if (Array.isArray(value)) {\n params[this.name] = value\n .filter((item) => !!item.value)\n .map((item) => item.value)\n .join(',');\n } else {\n params[name] = value;\n }\n\n return params;\n }\n\n public get isChipVisible(): boolean {\n return Array.isArray(this.model) && this.model.length > 0;\n }\n\n public getChipsContent() {\n return this.model\n .reduce((acc, i) => {\n acc.push(i.name);\n\n return acc;\n }, [])\n .join(', ');\n }\n\n protected _init() {\n if (this.model === undefined) {\n this._model = [];\n }\n }\n\n protected _parseConfig(item: IFilterConfigAutocompleteChipsItem) {\n this.chipImage = item.chipImage ?? 'image';\n this.chipIcon = item.chipIcon;\n this.chipIconColor = item.chipIconColor;\n this.chipColor = item.chipColor;\n this.chipBackground = item.chipBackground;\n this.chipClass = item.chipClass;\n\n super._parseConfig(item);\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? [];\n this.search = '';\n }\n\n protected _setModel(value) {\n super._setModel(value || []);\n }\n\n}\n","\nimport { clone } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigAutocompleteItem } from '../../interfaces/items/autocomplete.interface';\n\nimport { BaseAutocompleteItem } from './autocomplete/base-autocomplete-item';\n\n\nexport class AutocompleteItem extends BaseAutocompleteItem<IFilterConfigAutocompleteItem> {\n\n public static create(config: IFilterConfigAutocompleteItem, filter: FilterComponent) {\n return new AutocompleteItem(config, null, filter);\n }\n\n public get value() {\n let value = clone(this.model);\n\n if (!this.model || this.model.value === undefined) {\n return undefined;\n }\n\n value = this.model.value;\n\n return value;\n }\n\n public get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n params[name] = value;\n\n return params;\n }\n\n public getChipsContent() {\n return this.model ? this.model.name : '';\n }\n\n protected _init() {\n //\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n this.search = '';\n }\n}\n","import { toString } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigCheckboxItem } from '../../interfaces/items/checkbox.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class CheckboxItem extends BaseItem<IFilterConfigCheckboxItem> {\n\n public checked: unknown;\n public unchecked: unknown;\n\n public static create(config: IFilterConfigCheckboxItem, filter: FilterComponent) {\n return new CheckboxItem(config, null, filter);\n }\n\n public get isTypeCheckbox(): boolean {\n return true;\n }\n\n public get isChipVisible() {\n return this.value === (this as any).checked;\n }\n\n public get value() {\n const value = this.model ? this.checked : this.unchecked;\n\n if (!value) {\n return undefined;\n }\n\n return value;\n }\n\n public get queryObject(): Record<string, unknown> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n params[name] = this.model ? value : undefined;\n\n return params;\n }\n\n public getChipsContent(type = null): string {\n return this.label as string;\n }\n\n protected _validateModel() {\n //\n }\n\n protected _parseConfig(item: IFilterConfigCheckboxItem) {\n this.checked = item.checked;\n this.unchecked = item.unchecked;\n\n this.checked = item.checked ? toString(item.checked) : true;\n this.unchecked = item.unchecked ? toString(item.unchecked) : false;\n this.defaultValue = item.default === undefined ? this.unchecked : toString(this.defaultValue);\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (this.model === undefined) {\n this._model = this.checked === this.defaultValue;\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? false;\n }\n\n}\n","import { clone } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigChipsItem } from '../../interfaces/items/chips.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class ChipsItem extends BaseItem<IFilterConfigChipsItem> {\n\n public multiple: boolean;\n\n public static create(config: IFilterConfigChipsItem, filter: FilterComponent) {\n return new ChipsItem(config, null, filter);\n }\n\n public get isTypeChips(): boolean {\n return true;\n }\n\n public get value() {\n const value = clone(this.model);\n\n if (Array.isArray(value) && value.length === 0) {\n return undefined;\n }\n\n return value;\n }\n\n public get isChipVisible(): boolean {\n return !!this.value;\n }\n\n public get queryObject(): Record<string, unknown> {\n if(!this.value) {\n return {};\n }\n\n const value = this.value\n .map((item) => item.value)\n .join(',');\n \n const name = this.name;\n\n return {\n [name]: value,\n };\n }\n\n public get persistanceObject(): Record<string, string> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n if (Array.isArray(value)) {\n params[name] = value.join(',');\n } else {\n params[name] = undefined;\n }\n\n return params;\n }\n\n public getChipsContent() {\n return this.model\n .reduce((acc, i) => {\n acc.push(i.name);\n\n return acc;\n }, [])\n .join(', ');\n }\n\n protected _validateModel() {\n //\n }\n\n protected _setModel(value) {\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (isNaN(val)) {\n return val;\n }\n\n return +val;\n\n });\n }\n\n this._model = value;\n }\n\n protected _parseConfig(item: IFilterConfigChipsItem) {\n this.multiple = item.multiple ?? true;\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!Array.isArray(this.values)) {\n this.values = [];\n }\n\n if (this.model && Array.isArray(this.model) && this.values.length) {\n if (Number.isInteger(this.model[0])) {\n this._model = this.model.map((id) => {\n return this.values.find((value) => value.value === id);\n });\n }\n }\n\n if (this.model === undefined) {\n this._model = [];\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? [];\n }\n\n}\n","export enum ItemDateMode {\n Calendar = 'calendar',\n ScrollMonthYear = 'monthyear',\n ScrollMonthDayYear = 'monthdayyear'\n}\n","import { isDate, isValid, parseISO } from 'date-fns';\nimport { clone } from 'lodash-es';\n\nimport { BaseItem } from '../base-item';\nimport { IFilterConfigDateItem } from '../../../interfaces/items/date.interface';\nimport { ItemDateMode } from '../../../enums/item-date-mode.enum';\nimport { simpleFormat } from '@firestitch/date';\n\n\nexport abstract class BaseDateItem extends BaseItem<IFilterConfigDateItem> {\n\n public maxYear: number;\n public mode: ItemDateMode\n\n public get value() {\n const value = clone(this.model);\n\n if (!value || !isValid(value) || !isDate(value)) {\n return undefined;\n }\n\n return value;\n }\n\n public get queryObject(): Record<string, Date> {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n params[name] = value;\n\n return params;\n }\n\n public get persistanceObject(): Record<string, string> {\n const value = this.queryObject[this.name];\n\n return {\n [this.name]: value ? simpleFormat(value) : undefined,\n }\n }\n\n protected _validateModel() {\n }\n\n protected _setModel(value) {\n if (value) {\n if (!isDate(value) || !isValid(value)) {\n value = parseISO(value);\n }\n }\n\n super._setModel(value);\n }\n\n protected _parseConfig(item: IFilterConfigDateItem) {\n this.maxYear = item.maxYear;\n this.mode = item.mode || ItemDateMode.Calendar;\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!this.label) {\n this.label = ['Min', 'Max'];\n }\n }\n\n}\n","import { format } from '@firestitch/date';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { ItemDateMode } from '../../enums/item-date-mode.enum';\nimport { IFilterConfigDateItem } from '../../interfaces/items/date.interface';\n\nimport { BaseDateItem } from './date/base-date-item';\n\n\nexport class DateItem extends BaseDateItem {\n\n public static create(config: IFilterConfigDateItem, filter: FilterComponent) {\n return new DateItem(config, null, filter);\n }\n\n public getChipsContent(type = null): string {\n let dateFormat = 'date';\n\n if (this.mode === ItemDateMode.ScrollMonthYear) {\n dateFormat = 'full-date-dayless';\n }\n\n return format(this.model, dateFormat);\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n","export function getRangeName(configCase: 'snake' | 'camel', name: string, range: string) {\n if (configCase === 'snake') {\n return name.concat('_').concat(range);\n }\n\n if (configCase === 'camel') {\n return name.concat(range.charAt(0).toUpperCase()).concat(range.slice(1));\n }\n}\n","import { isEmpty } from '@firestitch/common';\nimport { format, simpleFormat } from '@firestitch/date';\nimport { ItemType } from '../../../enums/item-type.enum';\n\nimport { isDate, isValid, parseISO } from 'date-fns';\n\nimport { clone, isObject, isString } from 'lodash-es';\nimport { BaseItem } from '../base-item';\nimport { getRangeName } from '../../../helpers/get-range-name';\nimport {\n IFilterConfigDateRangeItem,\n IFilterItemDefaultDateRange,\n} from '../../../interfaces/items/date-range.interface';\n\n\nexport abstract class BaseDateRangeItem extends BaseItem<IFilterConfigDateRangeItem> {\n\n public case: 'snake' | 'camel';\n\n protected readonly _additionalConfig: { case: 'camel' | 'snake' }\n\n public get isTypeDateRange(): boolean {\n return this.type === ItemType.DateRange;\n }\n\n public get isTypeDateTimeRange(): boolean {\n return this.type === ItemType.DateTimeRange;\n }\n\n public get isChipVisible(): boolean {\n return this.model && (this.model.from !== undefined || this.model.to !== undefined);\n }\n\n public get value() {\n let value = clone(this.model);\n\n if (!isObject(this.model) ||\n (isEmpty(this.model.from, { zero: true }) && isEmpty(this.model.to, { zero: true }))) {\n value = undefined;\n }\n\n if (isEmpty(value, { zero: true })) {\n return undefined;\n }\n\n let from = value.from;\n let to = value.to;\n\n value = {};\n\n if (from) {\n if (isString(from)) {\n from = parseISO(from);\n }\n\n if (isValid(from) && isDate(from)) {\n value.from = from;\n }\n }\n\n if (to) {\n if (isString(to)) {\n to = parseISO(to);\n }\n\n if (isValid(to) && isDate(to)) {\n value.to = to;\n }\n }\n\n return value;\n }\n\n public get queryObject(): Record<string, Date> {\n const value = this.value || {};\n const name = this.name;\n const paramFromName = getRangeName(this.case, name, 'from');\n const paramToName = getRangeName(this.case, name, 'to');\n\n return {\n [paramFromName]: value.from || undefined,\n [paramToName]: value.to || undefined,\n };\n }\n\n public get persistanceObject(): Record<string, string> {\n const query = this.queryObject;\n\n return Object.keys(this.queryObject)\n .reduce((acc, key) => {\n if (!!query[key]) {\n acc[key] = simpleFormat(query[key]);\n } else {\n acc[key] = query[key];\n }\n\n return acc;\n }, {});\n }\n\n public getChipsContent(type = null): string {\n const formatTo = this.type === ItemType.DateRange ? 'date' : 'date-time';\n\n if (type === 'from') {\n const from = this.model.from;\n return `${format(from, formatTo)}`;\n } else if (type === 'to') {\n const to = this.model.to;\n return `${format(to, formatTo)}`;\n }\n }\n\n public clearDateRange(type: 'from' | 'to' = null, defaultValue: IFilterItemDefaultDateRange = undefined) {\n if (type === 'from') {\n delete this.model.from;\n\n if (defaultValue?.from) {\n this.model.from = defaultValue.from;\n }\n\n this.model = { ...this.model };\n } else if (type === 'to') {\n delete this.model.to;\n\n if (defaultValue?.to) {\n this.model.to = defaultValue.to;\n }\n\n this.model = { ...this.model };\n } else {\n if (defaultValue) {\n this.model = { ...defaultValue };\n } else {\n this.model = {};\n }\n }\n }\n\n protected _validateModel() {\n }\n\n protected _setModel(value) {\n if (value) {\n if (value.from && (!isDate(value.from) || !isValid(value.from))) {\n value.from = parseISO(value.from);\n }\n if (value.to && (!isDate(value.to) || !isValid(value.to))) {\n value.to = parseISO(value.to);\n }\n }\n\n super._setModel(value);\n }\n\n protected _parseConfig(item: IFilterConfigDateRangeItem) {\n this.case = this._additionalConfig?.case ?? 'camel';\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!this.label) {\n this.label = ['Date From', 'Date To'];\n }\n\n if (!this.model) {\n this.model = this.defaultValue || {};\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = this.defaultValue ?? {};\n }\n\n}\n","import type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigDateRangeItem } from '../../interfaces/items/date-range.interface';\n\nimport { BaseDateRangeItem } from './date-range/base-date-range-item';\n\n\nexport class DateRangeItem extends BaseDateRangeItem {\n\n public static create(config: IFilterConfigDateRangeItem, filter: FilterComponent) {\n return new DateRangeItem(config, null, filter);\n }\n\n}\n","import type { FilterComponent } from '../../components/filter/filter.component';\nimport {\n IFilterConfigDateItem,\n} from '../../interfaces/items/date.interface';\n\nimport { BaseDateItem } from './date/base-date-item';\n\n\nexport class DateTimeItem extends BaseDateItem {\n\n public static create(config: IFilterConfigDateItem, filter: FilterComponent) {\n return new DateTimeItem(config, null, filter);\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n","import type { FilterComponent } from '../../components/filter/filter.component';\nimport { IFilterConfigDateRangeItem } from '../../interfaces/items/date-range.interface';\n\nimport { BaseDateRangeItem } from './date-range/base-date-range-item';\n\n\nexport class DateTimeRangeItem extends BaseDateRangeItem {\n\n public static create(config: IFilterConfigDateRangeItem, filter: FilterComponent) {\n return new DateTimeRangeItem(config, null, filter);\n }\n\n}\n","import { isEmpty } from '@firestitch/common';\n\nimport { clone, isObject } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { getRangeName } from '../../helpers/get-range-name';\nimport {\n IFilterConfigRangeItem,\n IFilterItemDefaultRange,\n} from '../../interfaces/items/range.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class RangeItem extends BaseItem<IFilterConfigRangeItem> {\n\n public static create(config: IFilterConfigRangeItem, additionalConfig: unknown, filter: FilterComponent) {\n return new RangeItem(config, additionalConfig, filter);\n }\n\n public case: 'snake' | 'camel';\n public options: { scale?: number };\n public prefix: string;\n public suffix: string;\n\n protected readonly _additionalConfig: { case: 'camel' | 'snake' };\n\n public get value() {\n let value = clone(this.model);\n\n if (!isObject(this.model) ||\n (isEmpty(this.model.max, { zero: true }) && isEmpty(this.model.min, { zero: true }))) {\n value = undefined;\n }\n\n return value;\n }\n\n public get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n const paramMinName = getRangeName(this.case, name, 'min');\n const paramMaxName = getRangeName(this.case, name, 'max');\n\n if (isObject(value)) {\n params[paramMinName] = value.min || undefined;\n params[paramMaxName] = value.max || undefined;\n } else {\n params[paramMinName] = undefined;\n params[paramMaxName] = undefined;\n }\n\n return params;\n }\n\n public get isChipVisible(): boolean {\n return this.model && (this.model.min !== undefined || this.model.max !== undefined);\n }\n\n public getChipsContent(type): string {\n if (type === 'from') {\n const min = this.model.min;\n\n return `${min}`;\n } else if (type === 'to') {\n const max = this.model.max;\n\n return `${max}`;\n }\n }\n\n public clearRange(type: 'from' | 'to' = null, defaultValue: IFilterItemDefaultRange = undefined) {\n if (type === 'from') {\n delete this.model.min;\n\n if (defaultValue?.min) {\n this.model.min = defaultValue.min;\n }\n\n this.model = { ...this.model };\n } else if (type === 'to') {\n delete this.model.max;\n\n if (defaultValue?.max) {\n this.model.max = defaultValue.max;\n }\n\n this.model = { ...this.model };\n } else {\n this.model = defaultValue ? { ...defaultValue } : {};\n }\n }\n\n protected _validateModel() {\n }\n\n protected _parseConfig(item: IFilterConfigRangeItem) {\n this.options = item.options;\n this.prefix = item.prefix;\n this.suffix = item.suffix;\n this.case = this._additionalConfig?.case ?? 'camel';\n\n super._parseConfig(item);\n }\n\n protected _init() {\n if (!this.label) {\n this.label = ['Min', 'Max'];\n }\n\n if (!this.model) {\n this.model = this.defaultValue || {};\n }\n }\n}\n","export function findValue(values, value, children) {\n for (let i = 0; i < values.length; i++) {\n const val = values[i];\n\n if (val[children]) {\n return findValue(val[children], value, children);\n }\n\n if (val.value === value) {\n return val;\n }\n }\n\n return undefined;\n}\n","import type { FilterComponent } from '../../../components/filter/filter.component';\nimport { findValue } from '../../../helpers/find-value';\nimport { IFilterConfigSelectItem } from '../../../interfaces/items/select.interface';\n\nimport { BaseSelectItem } from './base-select-item';\n\n\nexport class SimpleSelectItem extends BaseSelectItem {\n\n constructor(\n itemConfig: IFilterConfigSelectItem,\n _persistedValues: any,\n _filter: FilterComponent,\n ) {\n super(itemConfig, _persistedValues, _filter);\n }\n\n public get value() {\n let value = this.model;\n\n if (value === '__all' || value === undefined) {\n value = undefined;\n }\n\n return value;\n }\n\n public getChipsContent(type = null): string {\n if (this.children) {\n const itemValue = findValue(this.values, this.model, this.children);\n\n return itemValue && itemValue.name;\n }\n const itemValue = this.values.find((val) => val.value === this.model);\n\n if (itemValue) {\n return itemValue.name;\n } else if (this.isolate) {\n return this.isolate.label;\n }\n\n }\n\n public get isChipVisible(): boolean {\n return this.model !== '__all' && this.model !== undefined;\n }\n\n protected _init() {\n super._init();\n\n if (this.model === undefined && this.defaultValue === undefined) {\n this._model = '__all';\n }\n }\n\n protected get isolateOptionNotSelected() {\n const modelValue = this.model;\n const isolate = this.isolate;\n\n return isolate && !isolate.enabled && modelValue?.length === 0;\n }\n\n protected _setModel(value): void {\n if (value) {\n if (!isNaN(value)) {\n value = +value;\n }\n }\n\n super._setModel(value);\n }\n\n protected _validateModel() {\n const item = this.values.find((value) => {\n return value.value == this.model;\n });\n\n const value = item ? item.value : '__all';\n\n if (this._model !== value) {\n this.model = value;\n }\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n super._clearValue(defaultValue);\n\n const value = Array.isArray(this.values) && this.values.some((val) => val.value === '__all')\n ? '__all'\n : undefined;\n\n this.model = defaultValue ?? value;\n }\n}\n","\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { ItemType } from '../../enums/item-type.enum';\n\nimport { MultipleSelectItem } from './select/multiple-select-item';\nimport { SimpleSelectItem } from './select/simple-select-item';\n\n\nexport class SelectItem {\n\n public readonly type: ItemType.Select;\n\n public static create(config, filter: FilterComponent): SimpleSelectItem | MultipleSelectItem {\n if (config.multiple) {\n return new MultipleSelectItem(config, null, filter);\n }\n\n return new SimpleSelectItem(config, null, filter);\n\n }\n}\n","\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport {\n IFilterConfigTextItem,\n} from '../../interfaces/items/text.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class TextItem extends BaseItem<IFilterConfigTextItem> {\n\n public prefix: string;\n public suffix: string;\n\n public static create(config: IFilterConfigTextItem, filter: FilterComponent) {\n return new TextItem(config, null, filter);\n }\n\n public get value() {\n return !!this.model ? this.model : undefined;\n }\n\n public get queryObject() {\n const value = this.value;\n const name = this.name;\n const params = {};\n\n params[name] = value;\n\n return params;\n }\n\n public getChipsContent() {\n return this.model;\n }\n\n protected _validateModel() {\n //\n }\n\n protected _parseConfig(item: IFilterConfigTextItem) {\n this.prefix = item.prefix;\n this.suffix = item.suffix;\n\n super._parseConfig(item);\n }\n\n protected _init() {\n //\n }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? '';\n }\n}\n","import { isDate, isValid, parseISO } from 'date-fns';\n\nexport function parseDate(value: string) {\n if (value && (!isDate(value) || !isValid(value))) {\n return parseISO(value);\n }\n\n return value;\n}\n","import { isEmpty } from '@firestitch/common';\nimport { simpleFormat } from '@firestitch/date';\nimport { formatPeriodObject } from '@firestitch/datepicker';\n\nimport { isDate, isValid, parseISO } from 'date-fns';\nimport { clone, isObject, isString } from 'lodash-es';\n\nimport type { FilterComponent } from '../../components/filter/filter.component';\nimport { getRangeName } from '../../helpers/get-range-name';\nimport { parseDate } from '../../helpers/parse-date';\nimport { IFilterConfigWeekItem } from '../../interfaces/items/week.interface';\n\nimport { BaseItem } from './base-item';\n\n\nexport class WeekItem extends BaseItem<IFilterConfigWeekItem> {\n\n public seedDate: Date;\n\n public static create(config: IFilterConfigWeekItem, filter: FilterComponent) {\n return new WeekItem(config, null, filter);\n }\n\n public get value() {\n let value = clone(this.model);\n\n if (!isObject(this.model) ||\n (isEmpty(this.model.from, { zero: true }) && isEmpty(this.model.to, { zero: true }))) {\n value = undefined;\n }\n\n if (isEmpty(value, { zero: true })) {\n return undefined;\n }\n\n let from = value.from;\n let to = value.to;\n const period = value.period;\n\n value = {};\n\n if (from) {\n if (isString(from)) {\n from = parseISO(from);\n }\n\n if (isValid(from) && isDate(from)) {\n value.from = from;\n }\n }\n\n if (to) {\n if (isString(to)) {\n to = parseISO(to);\n }\n\n if (isValid(to) && isDate(to)) {\n value.to = to;\n }\n }\n\n if (period) {\n value.period = isString(period) ? parseInt(period, 10) : period;\n }\n\n\n return value;\n }\n\n public get queryObject() {\n const value = this.value;\n const name = this.name;\n const paramFromName = getRangeName('camel', name, 'from');\n const paramToName = getRangeName('camel', name, 'to');\n const paramPeriodName = `${name}Period`;\n\n return {\n [paramFromName]: value?.from || undefined,\n [paramToName]: value?.to || undefined,\n [paramPeriodName]: value?.period || undefined,\n };\n }\n\n public get persistanceObject(): Record<string, string> {\n const query = this.queryObject;\n const name = this.name;\n const paramFromName = getRangeName('camel', name, 'from');\n const paramFromValue = query[paramFromName] && simpleFormat(query[paramFromName]) || query[paramFromName];\n const paramToName = getRangeName('camel', name, 'to');\n const paramToValue = query[paramToName] && simpleFormat(query[paramToName]) || query[paramToName];\n const paramPeriodName = `${name}Period`;\n\n return {\n [paramFromName]: paramFromValue,\n [paramToName]: paramToValue,\n [paramPeriodName]: query[paramPeriodName],\n };\n }\n\n public getChipsContent(type = null): string {\n return formatPeriodObject(this.value);\n }\n\n protected _validateModel() { }\n\n protected _setModel(value) {\n if (value) {\n value.from = parseDate(value.from);\n value.to = parseDate(value.to);\n value.period = parseInt(value.period, 10) || undefined;\n }\n\n super._setModel(value);\n }\n\n protected _parseConfig(item: IFilterConfigWeekItem) {\n super._parseConfig(item);\n\n this.seedDate = item.seedDate;\n }\n\n protected _init() { }\n\n protected _clearValue(defaultValue: unknown = undefined) {\n this.model = defaultValue ?? undefined;\n }\n}\n","import type { FilterComponent } from '../components/filter/filter.component';\nimport { ItemType } from '../enums/item-type.enum';\nimport { IFilterConfigItem } from '../interfaces/config.interface';\nimport { IFilterConfigAutocompleteChipsItem } from '../interfaces/items/autocomplete-chips.interface';\nimport { IFilterConfigAutocompleteItem } from '../interfaces/items/autocomplete.interface';\nimport { IFilterConfigCheckboxItem } from '../interfaces/items/checkbox.interface';\nimport { IFilterConfigChipsItem } from '../interfaces/items/chips.interface';\nimport { IFilterConfigDateRangeItem } from '../interfaces/items/date-range.interface';\nimport { IFilterConfigDateItem } from '../interfaces/items/date.interface';\nimport { IFilterConfigRangeItem } from '../interfaces/items/range.interface';\nimport { IFilterConfigTextItem } from '../interfaces/items/text.interface';\nimport { IFilterConfigWeekItem } from '../interfaces/items/week.interface';\nimport { AutocompleteChipsItem } from '../models/items/autocomplete-chips-item';\nimport { AutocompleteItem } from '../models/items/autocomplete-item';\nimport { CheckboxItem } from '../models/items/checkbox-item';\nimport { ChipsItem } from '../models/items/chips-item';\nimport { DateItem } from '../models/items/date-item';\nimport { DateRangeItem } from '../models/items/date-range-item';\nimport { DateTimeItem } from '../models/items/date-time-item';\nimport { DateTimeRangeItem } from '../models/items/date-time-range-item';\nimport { RangeItem } from '../models/items/range-item';\nimport { SelectItem } from '../models/items/select-item';\nimport { TextItem } from '../models/items/text-item';\nimport { WeekItem } from '../models/items/week-item';\n\n\nexport function createFilterItem(item: IFilterConfigItem, config: any, filter: FilterComponent) {\n switch (item.type) {\n case ItemType.Select: {\n return SelectItem.create(item, filter);\n }\n\n case ItemType.Chips: {\n return ChipsItem.create(item as IFilterConfigChipsItem, filter);\n }\n\n case ItemType.Range: {\n return RangeItem.create(item as IFilterConfigRangeItem, config, filter);\n }\n\n case ItemType.DateRange: {\n return DateRangeItem.create(item as IFilterConfigDateRangeItem, filter);\n }\n\n case ItemType.DateTimeRange: {\n return DateTimeRangeItem.create(item as IFilterConfigDateRangeItem, filter);\n }\n\n case ItemType.Date: {\n return DateItem.create(item as IFilterConfigDateItem, filter);\n }\n\n case ItemType.Week: {\n return WeekItem.create(item as IFilterConfigWeekItem, filter);\n }\n\n case ItemType.DateTime: {\n return DateTimeItem.create(item as IFilterConfigDateItem, filter);\n }\n\n case ItemType.AutoComplete: {\n return AutocompleteItem.create(item as IFilterConfigAutocompleteItem, filter);\n }\n\n case ItemType.AutoCompleteChips: {\n return AutocompleteChipsItem.create(item as IFilterConfigAutocompleteChipsItem, filter);\n }\n\n case ItemType.Checkbox: {\n return CheckboxItem.create(item as IFilterConfigCheckboxItem, filter);\n }\n\n case ItemType.Keyword: case ItemType.Text: {\n return TextItem.create(item as IFilterConfigTextItem, filter);\n }\n }\n}\n","export enum ActionMode {\n Button = 'button',\n SelectButton = 'selectButton',\n Menu = 'menu',\n File = 'file',\n}\n","import { ButtonStyle } from './button-style';\n\nexport enum ActionType {\n Basic = ButtonStyle.Basic,\n Raised = ButtonStyle.Raised,\n Icon = ButtonStyle.Icon,\n Fab = ButtonStyle.Fab,\n MiniFab = ButtonStyle.MiniFab,\n Flat = ButtonStyle.Flat,\n Stroked = ButtonStyle.Stroked, \n}\n","export enum ButtonStyle {\n Basic = 'basic',\n Raised = 'raised',\n Icon = 'icon',\n Fab = 'fab',\n MiniFab = 'mini-fab',\n Flat = 'flat',\n Stroked = 'stroked',\n}\n","export enum PickerViewType {\n Date = \"date\",\n DateTime = \"datetime\",\n Time = \"time\",\n Week = \"week\",\n MonthRange = \"monthrange\"\n}\n","import { ButtonStyle } from '../enums';\nimport { FsFilterAction } from '../interfaces/action.interface';\nimport { ChangeFn, FilterSort, FsFilterAutoReload, Sort } from '../interfaces/config.interface';\nimport { IFilterSavedFiltersConfig } from '../interfaces/saved-filters.interface';\n\nimport {\n FilterButton,\n FilterConfig,\n FsFilterPersistance,\n IFilterConfigItem,\n} from './../interfaces/config.interface';\n\nexport const SORT_BY_FIELD = 'sortName';\nexport const SORT_DIRECTION_FIELD = 'sortDirection';\n\n\nexport class FsFilterConfig {\n\n public load = true;\n public persist: FsFilterPersistance = false;\n public savedFilters: IFilterSavedFiltersConfig;\n public inline = false;\n public autofocus = false;\n public chips = false;\n public sortValues: any[] = null;\n public sort: Sort = null;\n // public sortDirection = null;\n public queryParam = false;\n public init: (query?: any, sort?: FilterSort | null, filter?) => void;\n public change: ChangeFn;\n public reload: ChangeFn;\n public autoReload: FsFilterAutoReload;\n public clear: ChangeFn;\n public sortChange: ChangeFn;\n public case: 'snake' | 'camel' = 'camel';\n public reloadWhenConfigChanged: boolean;\n public button: FilterButton;\n public items: IFilterConfigItem[];\n public actions: FsFilterAction[];\n\n public namespace: string; // for persistance\n\n constructor(data: FilterConfig = {}) {\n this._init(data);\n }\n\n private _init(data: FilterConfig = {}) {\n this.load = data.load ?? true;\n this.persist = data.persist;\n this.savedFilters = data.savedFilters;\n this.inline = data.inline ?? false;\n this.autofocus = data.autofocus ?? false;\n this.chips = data.chips ?? false;\n this.sortValues = data.sorts;\n this.sort = data.sort;\n this.queryParam = data.queryParam ?? false;\n this.init = data.init;\n this.change = data.change;\n this.reload = data.reload;\n this.autoReload = data.autoReload;\n this.clear = data.clear;\n this.sortChange = data.sortChange;\n this.case = data.case ?? 'camel';\n this.reloadWhenConfigChanged = data.reloadWhenConfigChanged;\n this.button = data.button;\n this.items = data.items;\n this.actions = data.actions;\n this.case = data.case ?? 'camel';\n\n if (this.persist) {\n if (typeof this.persist === 'object') {\n if (this.persist.name) {\n this.namespace = this.persist.name;\n }\n }\n }\n\n if (!this.button) {\n this.button = {};\n }\n\n if (this.button.label === undefined) {\n this.button.label = 'Filters';\n }\n\n if (this.button.icon === undefined) {\n this.button.icon = 'tune';\n }\n\n if (this.button.style === undefined) {\n this.button.style = ButtonStyle.Raised;\n }\n\n if (this.button.color === undefined) {\n this.button.color = 'default';\n }\n\n if (this.clear === undefined) {\n this.clear = () => { };\n }\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, forkJoin, Observable, Subject } from 'rxjs';\nimport { debounceTime, filter, finalize, takeUntil } from 'rxjs/operators';\n\nimport { pickBy } from 'lodash-es';\n\nimport type { FilterComponent } from '../components/filter/filter.component';\nimport { ItemType } from '../enums/item-type.enum';\nimport { createFilterItem } from '../helpers/create-filter-item';\nimport {\n FilterSort,\n IFilterConfigItem,\n SortItem,\n} from '../interfaces/config.interface';\nimport { IFilterExternalParams } from '../interfaces/external-params.interface';\nimport { ISortingChangeEvent } from '../interfaces/filter.interface';\nimport { IFilterConfigSelectItem } from '../interfaces/items/select.interface';\nimport { FsFilterConfig, SORT_BY_FIELD, SORT_DIRECTION_FIELD } from '../models/filter-config';\nimport { BaseItem } from '../models/items/base-item';\nimport { BaseDateRangeItem } from '../models/items/date-range/base-date-range-item';\nimport { RangeItem } from '../models/items/range-item';\nimport { MultipleSelectItem } from '../models/items/select/multiple-select-item';\nimport { SimpleSelectItem } from '../models/items/select/simple-select-item';\nimport { TextItem } from '../models/items/text-item';\n\n\ninterface IValueAsQuery {\n onlyPresented?: boolean;\n items?: BaseItem<IFilterConfigItem>[];\n persisted?: boolean;\n}\n\n@Injectable()\nexport class FsFilterItemsStore implements OnDestroy {\n\n public sortByItem: BaseItem<IFilterConfigItem> = null;\n public sortDirectionItem: BaseItem<IFilterConfigItem> = null;\n public keywordItem: TextItem = null;\n public filter: FilterComponent;\n\n private _ready$ = new BehaviorSubject(false);\n private _items: BaseItem<IFilterConfigItem>[] = [];\n private _visibleItems$ = new BehaviorSubject<BaseItem<IFilterConfigItem>[]>([]);\n private _itemsByName = new Map<string, BaseItem<IFilterConfigItem>>();\n\n private _itemsValuesLoaded = false;\n private _hasKeyword = false;\n private _config: FsFilterConfig;\n\n private _itemsChange$ = new Subject();\n private _destroy$ = new Subject<void>();\n\n constructor(\n ) {\n this._lazyInit();\n }\n\n public get items(): BaseItem<IFilterConfigItem>[] {\n return this._items;\n }\n\n public get itemNames(): string[] {\n return this._items.map((item) => item.name);\n }\n\n public get visibleItems(): BaseItem<IFilterConfigItem>[] {\n return this._visibleItems$.getValue();\n }\n\n public set visibleItems(items: BaseItem<IFilterConfigItem>[]) {\n this._visibleItems$.next(items);\n }\n\n public get visibleItems$(): Observable<BaseItem<IFilterConfigItem>[]> {\n return this._visibleItems$.asObservable();\n }\n\n public get hasKeyword(): boolean {\n return this._hasKeyword;\n }\n\n public get itemsChange$() {\n return this._itemsChange$.pipe(debounceTime(30));\n }\n\n public get ready$() {\n return this._ready$.asObservable();\n }\n\n public ngOnDestroy() {\n this.destroyItems();\n\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public setConfig(config) {\n this._itemsByName.clear();\n this._config = config;\n this.initItems(config.items);\n }\n\n public getItemByName(name: string): BaseItem<IFilterConfigItem> {\n return this._itemsByName.get(name);\n }\n\n public initItems(items: IFilterConfigItem[]) {\n this._itemsValuesLoaded = false;\n if (Array.isArray(items)) {\n this._createItems(items);\n }\n }\n\n public filtersClear() {\n this.items.forEach((item) => {\n if (item instanceof RangeItem) {\n item.clearRange(null, item.defaultValue);\n } else if (item instanceof BaseDateRangeItem) {\n item.clearDateRange(null, item.defaultValue);\n } else {\n item.clear(item.defaultValue);\n }\n });\n\n if (this.sortByItem) {\n if (this._config.sort) {\n this.sortByItem.model = this._config.sort.value;\n } else {\n this.sortByItem.clear(this.sortByItem.defaultValue);\n }\n }\n\n if (this.sortDirectionItem) {\n if (this._config.sort) {\n this.sortDirectionItem.model = this._config.sort.direction;\n } else {\n this.sortDirectionItem.clear(this.sortDirectionItem.defaultValue);\n }\n }\n\n this.keywordItem?.clear();\n }\n\n public loadAsyncValues() {\n this.items\n .filter((item) => item.hasPendingValues)\n .forEach((item) => item.loadAsyncValues());\n }\n\n public loadAsyncDefaults(): void {\n // default values can be asynchronous, and we must load them if there is no persisted value instead\n const defaultValuesToBeLoaded = this.items\n .filter((item) => {\n return item.defaultValueFn\n && (item.persistedValue === null || item.persistedValue === undefined);\n });\n\n // special hack for isolate multiple select\n // values for this type of select must be preloaded\n // Read more in class MultipleSelectItem._init()\n const valuesToBeLoaded = this.items\n .filter((item) => {\n return (item instanceof MultipleSelectItem) && item.hasPendingValues && item.isolate;\n });\n\n if (defaultValuesToBeLoaded.length > 0 || valuesToBeLoaded.length > 0) {\n forkJoin(\n [\n ...defaultValuesToBeLoaded\n .map((item) => item.loadDefaultValue()),\n\n ...valuesToBeLoaded\n .map((item) => {\n item.loadAsyncValues();\n\n return item.loading$\n .pipe();\n }),\n ],\n )\n .pipe(\n finalize(() => {\n this._ready$.next(true);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n } else {\n this._ready$.next(true);\n }\n }\n\n public getSort(): FilterSort {\n let sortBy = this.getSortByValue();\n sortBy = sortBy === '__all' ? null : sortBy;\n\n let sortDirection = this.getSortDirectionValue();\n sortDirection = sortDirection === '__all' ? null : sortDirection;\n\n return {\n value: sortBy,\n direction: sortDirection,\n };\n }\n\n public getSortByValue() {\n return this.sortByItem ? this.sortByItem.model : null;\n }\n\n public getSortDirectionValue() {\n return this.sortDirectionItem ? this.sortDirectionItem.model : null;\n }\n\n public updateSort(sort: ISortingChangeEvent) {\n if (sort.sortBy) {\n this.sortByItem.model = sort.sortBy;\n }\n\n if (sort.sortDirection) {\n this.sortDirectionItem.model = sort.sortDirection;\n }\n }\n\n public values(onlyPresented = false): Record<string, unknown> {\n return this.items\n .reduce((acc, item) => {\n const value = item.value;\n\n if (!onlyPresented || value !== null) {\n acc[item.name] = value;\n }\n\n return acc;\n }, {});\n }\n\n public valuesAsQuery({\n onlyPresented = true,\n items = null,\n persisted = false,\n }: IValueAsQuery = {}): Record<string, unknown> {\n const params = {};\n\n (items || this.items)\n .forEach((filterItem: BaseItem<any>) => {\n const values = persisted\n ? filterItem.persistanceObject\n : filterItem.queryObject;\n\n Object.assign(params, values);\n });\n\n if (onlyPresented) {\n return pickBy(params, (val) => {\n return val !== void 0;\n });\n }\n\n return params;\n }\n\n public init(p: IFilterExternalParams) {\n this.items\n .forEach((item) => {\n item.initValues(p[item.name]);\n });\n\n this._initSortingItems(p);\n this.loadAsyncDefaults();\n this._subscribeToItemsChanges();\n }\n\n public updateItemsWithValues(values: IFilterExternalParams) {\n this.items\n .forEach((item) => {\n if (values[item.name]) {\n item.model = values[item.name];\n } else {\n if (item instanceof RangeItem) {\n item.clearRange(null, item.defaultValue);\n } else if (item instanceof BaseDateRangeItem) {\n item.clearDateRange(null, item.defaultValue);\n } else {\n item.clear();\n }\n }\n });\n\n if (this.sortByItem) {\n this.sortByItem.clear();\n }\n if (this.sortDirectionItem) {\n this.sortDirectionItem.clear();\n }\n }\n\n public updateSortingItemsValues(items: SortItem[]) {\n this.sortByItem.values = items;\n }\n\n public destroyItems() {\n this.items\n .forEach((item) => item.destroy());\n this.sortByItem?.destroy();\n this.sortDirectionItem?.destroy();\n\n this._items = [];\n this.sortByItem = null;\n this.sortDirectionItem = null;\n }\n\n /**\n * Some items might need to load async values before they will be shown\n */\n public prepareItems() {\n if (!this._itemsValuesLoaded) {\n this._itemsValuesLoaded = true;\n\n this.loadAsyncValues();\n }\n }\n\n public updateItemsVisiblity(): void {\n this.visibleItems = this.items\n .filter((item) => !item.isTypeKeyword && !item.hide);\n }\n\n private _createItems(items: IFilterConfigItem[]) {\n this._items = items\n .filter((item) => !item.disable)\n .filter((item) => {\n if (this._itemsByName.has(item.name)) {\n throw Error('Filter init error. Items name must be unique.');\n } else {\n this._itemsByName.set(item.name, null);\n\n return true;\n }\n })\n .map((item) => {\n const filterItem = createFilterItem(item, { case: this._config.case }, this.filter);\n\n if (filterItem.type === ItemType.Keyword) {\n this._hasKeyword = true;\n }\n\n this._itemsByName.set(item.name, filterItem);\n\n return filterItem;\n });\n\n this._createSortingItems();\n }\n\n private _subscribeToItemsChanges() {\n this.items\n .forEach((item) => {\n item.valueChange$\n .pipe(\n takeUntil(item.destroy$),\n )\n .subscribe(() => {\n this._itemsChange$.next(item);\n });\n });\n\n if (this._config.sortValues?.length) {\n this.sortByItem.valueChange$\n .pipe(\n takeUntil(this.sortByItem.destroy$),\n )\n .subscribe(() => {\n this._itemsChange$.next(this.sortByItem);\n });\n\n this.sortDirectionItem.valueChange$\n .pipe(\n takeUntil(this.sortDirectionItem.destroy$),\n )\n .subscribe(() => {\n this._itemsChange$.next(this.sortDirectionItem);\n });\n }\n }\n\n private _lazyInit(): void {\n this.ready$\n .pipe(\n filter((state) => state),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.updateItemsVisiblity();\n this._setKeywordItem();\n });\n }\n\n private _initSortingItems(p: IFilterExternalParams): void {\n if (this.sortByItem && this.sortDirectionItem) {\n this.sortByItem.initValues(p[this.sortByItem.name]);\n this.sortDirectionItem.initValues(p[this.sortDirectionItem.name]);\n }\n }\n\n private _createSortingItems(): void {\n if (this._config.sortValues?.length > 0) {\n const sortByItem = {\n name: SORT_BY_FIELD,\n type: ItemType.Select,\n label: 'Sort by',\n values: this._config.sortValues,\n } as IFilterConfigSelectItem;\n\n\n if (this._config.sort && this._config.sort.value) {\n sortByItem.default = this._config.sort.value;\n }\n\n this.sortByItem = new SimpleSelectItem(\n sortByItem,\n null,\n this.filter,\n );\n\n const sortDirectionItem = {\n name: SORT_DIRECTION_FIELD,\n type: ItemType.Select,\n label: 'Sort direction',\n values: [\n { name: 'Ascending', value: 'asc' },\n { name: 'Descending', value: 'desc' },\n ],\n } as IFilterConfigSelectItem;\n\n if (this._config.sort && this._config.sort.direction) {\n sortDirectionItem.default = this._config.sort.direction;\n }\n\n this.sortDirectionItem = new SimpleSelectItem(\n sortDirectionItem,\n null,\n this.filter,\n );\n }\n }\n\n private _setKeywordItem() {\n this.keywordItem = this\n .items\n .find((item) => item.isTypeKeyword) as TextItem;\n }\n}\n","import { ItemType } from '../enums/item-type.enum';\nimport { getRangeName } from './get-range-name';\nimport { filterFromQueryParam } from './query-param-transformers';\n\nexport function parseItemValueFromStored(item, params, paramCase: 'snake' | 'camel') {\n const param = params[item.name];\n\n switch (item.type) {\n case ItemType.Range: {\n const min = params[getRangeName(paramCase, item.name, 'min')];\n const max = params[getRangeName(paramCase, item.name, 'max')];\n\n return { min: min, max: max };\n }\n\n case ItemType.DateRange: case ItemType.DateTimeRange: {\n const from = params[getRangeName(item.case, item.name, 'from')];\n const to = params[getRangeName(item.case, item.name, 'to')];\n\n return { from: from, to: to };\n }\n\n case ItemType.Week: {\n const from = params[getRangeName('camel', item.name, 'from')];\n const to = params[getRangeName('camel', item.name, 'to')];\n const period = params[`${item.name}Period`]\n\n return { from, to, period };\n }\n\n case ItemType.Select: {\n if (item.multiple && !!param) {\n const values = param.split(',');\n\n if (item.isolate) {\n const isolatedValue = Array.isArray(item.isolate.value)\n ? item.isolate.value\n : [ item.isolate.value ];\n\n item.isolate.enabled = arraysHaveSameElements(isolatedValue, values);\n\n return item.isolate.enabled\n ? isolatedValue\n : values;\n }\n\n return values;\n } else {\n return param;\n }\n }\n\n case ItemType.Checkbox: {\n if (param === 'true') {\n return true === item.checked;\n } else {\n return param === item.checked;\n }\n }\n\n case ItemType.AutoComplete: {\n const filterParts = filterFromQueryParam(param);\n\n return {\n name: filterParts[1],\n value: filterParts[0]\n }\n }\n\n case ItemType.AutoCompleteChips: \n case ItemType.Chips: {\n const filterParts = param.split(',');\n\n return filterParts.reduce((arry, value) => {\n\n const chipParts = filterFromQueryParam(value);\n\n arry.push({\n name: chipParts[1],\n value: chipParts[0],\n });\n\n return arry;\n }, [])\n }\n\n default: {\n return param;\n }\n }\n}\n\nfunction arraysHaveSameElements(arr1: unknown[], arr2: unknown[]): boolean {\n\n arr1 = [ ...arr1 ].sort();\n arr2 = [ ...arr2 ].sort();\n\n return arr1.some((item) => {\n return arr2.includes(item);\n });\n}\n","import { DateRangeItem } from '../models/items/date-range-item';\nimport { DateTimeRangeItem } from '../models/items/date-time-range-item';\nimport { RangeItem } from '../models/items/range-item';\nimport { WeekItem } from '../models/items/week-item';\n\nimport { getRangeName } from './get-range-name';\nimport { parseItemValueFromStored } from './parse-item-value-from-stored';\n\n\n/**\n * We need this function because when we store persisted/query/remote filter values\n * it stores with different format, ex.: Range will be stored as RangeFrom && RangeTo\n * and in this case we don't know how to restroe those values.\n *\n * This function do convertation for those kinds of stored values\n *\n * @param params\n * @param items\n * @param paramsCase\n */\nexport function restoreItems(params, items, paramsCase) {\n const result = {};\n\n Object.keys(params)\n .forEach((name) => {\n const item = findItemWidthName(items, name);\n\n if (item) {\n result[item.name] = parseItemValueFromStored(item, params, paramsCase);\n }\n });\n\n return result;\n}\n\nfunction findItemWidthName(items, name) {\n return items\n .find((filterItem) => {\n if (filterItem instanceof RangeItem) {\n return name === getRangeName(filterItem.case, filterItem.name, 'min') ||\n name === getRangeName(filterItem.case, filterItem.name, 'max') ||\n name === filterItem.name;\n } else if (filterItem instanceof DateRangeItem || filterItem instanceof DateTimeRangeItem) {\n return name === getRangeName(filterItem.case, filterItem.name, 'from') ||\n name === getRangeName(filterItem.case, filterItem.name, 'to');\n } else if (filterItem instanceof WeekItem) {\n return name === getRangeName('camel', filterItem.name, 'from')\n || name === getRangeName('camel', filterItem.name, 'to')\n || name === `${filterItem.name}Period`;\n }\n\n return filterItem.name === name;\n });\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { DrawerRef } from '@firestitch/drawer';\nimport { FsPersistanceStore } from '@firestitch/store';\nimport { getNormalizedPath } from '@firestitch/common';\nimport { FsStore } from '@firestitch/store';\n\nimport { FsFilterPersistance } from '../../interfaces/config.interface';\nimport { restoreItems } from '../../helpers/restore-items';\nimport { FsFilterItemsStore } from '../items-store.service';\n\nconst FILTER_STORE_KEY = 'fs-filter-persist';\n\n\n@Injectable()\nexport class PersistanceParamsController extends FsPersistanceStore<FsFilterPersistance> {\n\n protected STORE_KEY = FILTER_STORE_KEY;\n protected _paramsCase: 'snake' | 'camel';\n\n constructor(\n _store: FsStore,\n _route: ActivatedRoute,\n private _location: Location,\n private _itemsStore: FsFilterItemsStore,\n @Optional() private _dialogRef: MatDialogRef<unknown>,\n @Optional() private _drawerRef: DrawerRef<unknown>,\n ) {\n super(_store, _route);\n }\n\n public init(\n persistanceConfig: FsFilterPersistance,\n namespace: string,\n paramsCase: 'snake' | 'camel',\n ): void {\n this._paramsCase = paramsCase;\n\n namespace = namespace ?? getNormalizedPath(this._location);\n const persistanceDisabled = !!this._dialogRef || !!this._drawerRef;\n\n this.setConfig(persistanceConfig, namespace, persistanceDisabled);\n }\n\n public restore(): void {\n if (!this.enabled) {\n return;\n }\n\n super.restore();\n\n const items = [\n ...this._itemsStore.items,\n this._itemsStore.sortByItem,\n this._itemsStore.sortDirectionItem,\n ].filter((item) => !!item);\n\n if (this._value) {\n this._value.data = restoreItems(\n this._value.data,\n items,\n this._paramsCase\n );\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { restoreItems } from '../../helpers/restore-items';\nimport { FsFilterItemsStore } from '../items-store.service';\n\n\n@Injectable()\nexport class QueryParamsController {\n\n private _enabled = false;\n private _paramsCase: 'snake' | 'camel';\n private _fetchedParams: Record<string, any>;\n\n constructor(\n private _route: ActivatedRoute,\n private _itemsStore: FsFilterItemsStore\n ) {}\n\n public get enabled(): boolean {\n return this._enabled;\n }\n\n public get fetchedParams() {\n return this._fetchedParams;\n }\n\n public init(enabled: boolean, paramsCase: 'snake' | 'camel') {\n this._enabled = enabled;\n this._paramsCase = paramsCase;\n\n if (this.enabled) {\n this.fetchFromQueryParams();\n }\n }\n\n public writeStateToQueryParams(params) {\n if (this._enabled) { \n this._replaceState(params);\n }\n }\n\n /**\n * Parse query and update filter values\n */\n public fetchFromQueryParams() {\n const items = [\n ...this._itemsStore.items,\n this._itemsStore.sortByItem,\n this._itemsStore.sortDirectionItem,\n ].filter((item) => !!item);\n\n this._fetchedParams = restoreItems(\n this._route.snapshot.queryParams,\n items,\n this._paramsCase\n );\n }\n\n private _replaceState(data) {\n const url = new URL(window.location.href);\n\n Object.keys(data)\n .forEach((name) => {\n if(data[name] === undefined || data[name] === null) {\n url.searchParams.delete(name);\n } else {\n url.searchParams.set(name,data[name]);\n }\n });\n\n history.replaceState({}, null, url.pathname + url.search);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\n\nimport { IFilterExternalParams } from '../../../interfaces/external-params.interface';\nimport {\n FilterRemoteSave,\n IFilterSavedFilter,\n} from '../../../interfaces/saved-filters.interface';\n\n\n@Component({\n templateUrl: './saved-filter-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterSavedFilterEditComponent {\n\n public filterParams: IFilterExternalParams;\n public saveAsFilter: IFilterSavedFilter | 'new' = 'new';\n public savedFilters: IFilterSavedFilter[];\n public savedFilterName = '';\n\n private _saveCallback: FilterRemoteSave;\n private _destroy$ = new Subject<void>();\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data,\n private _dialogRef: MatDialogRef<FsFilterSavedFilterEditComponent>,\n ) {\n this.savedFilters = this.data.savedFilters;\n this._saveCallback = this.data.saveCallback;\n }\n\n public save = () => {\n const savedFilter: IFilterSavedFilter = this.saveAsFilter === 'new' ? \n {\n name: this.savedFilterName,\n active: true,\n filters: this.data.params,\n } : {\n ...this.saveAsFilter,\n filters: this.data.params,\n };\n\n return this._saveCallback(savedFilter)\n .pipe(\n tap((filter) => {\n this._dialogRef.close(filter);\n }),\n takeUntil(this._destroy$),\n );\n };\n\n}\n","<form fsForm [submit]=\"save\">\n <h1 mat-dialog-title>\n Save filter\n </h1>\n <div mat-dialog-content>\n <mat-form-field>\n <mat-label>Save as</mat-label>\n <mat-select [(ngModel)]=\"saveAsFilter\" name=\"saveAs\">\n <mat-option value=\"new\">New filter</mat-option>\n <ng-container *ngIf=\"savedFilters.length\">\n <mat-optgroup label=\"Saved filters\">\n <ng-container *ngFor=\"let filter of savedFilters\">\n <mat-option [value]=\"filter\">{{ filter.name }}</mat-option>\n </ng-container>\n </mat-optgroup>\n </ng-container>\n </mat-select>\n </mat-form-field>\n <br>\n <mat-form-field *ngIf=\"saveAsFilter === 'new'\">\n <mat-label>Name</mat-label>\n <input matInput name=\"filter-name\" [(ngModel)]=\"savedFilterName\" required>\n </mat-form-field>\n </div>\n <div mat-dialog-actions>\n <button \n mat-button\n type=\"submit\"\n color=\"primary\">\n {{ saveAsFilter === 'new' ? 'Create' : 'Save' }}\n </button>\n\n <button \n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </div>\n</form>\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport {\n distinctUntilChanged,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nimport {\n FsFilterSavedFilterEditComponent,\n} from '../../components/saved-filter/saved-filter-edit/saved-filter-edit.component';\nimport { buildQueryParams } from '../../helpers/build-query-params';\nimport { restoreItems } from '../../helpers/restore-items';\nimport { IFilterExternalParams } from '../../interfaces/external-params.interface';\nimport {\n IFilterSavedFilter,\n IFilterSavedFiltersConfig,\n} from '../../interfaces/saved-filters.interface';\nimport { FsFilterItemsStore } from '../items-store.service';\n\n\n@Injectable()\nexport class SavedFiltersController implements OnDestroy {\n\n protected _config: IFilterSavedFiltersConfig;\n\n private _savedFilters$ = new BehaviorSubject<IFilterSavedFilter[]>([]);\n private _activeFilter$ = new BehaviorSubject<IFilterSavedFilter>(null);\n private _enabled$ = new BehaviorSubject<boolean>(false);\n private _paramsCase: 'snake' | 'camel';\n private _destroy$ = new Subject<void>();\n\n constructor(\n private _itemsStore: FsFilterItemsStore,\n private _dialog: MatDialog,\n ) {}\n\n public get enabled(): boolean {\n return this._enabled$.getValue();\n }\n\n public get enabled$(): Observable<boolean> {\n return this._enabled$\n .pipe(\n distinctUntilChanged(),\n );\n }\n\n public get savedFilters(): IFilterSavedFilter[] {\n return this._savedFilters$.getValue();\n }\n\n public set savedFilters(filters: IFilterSavedFilter[]) {\n this._savedFilters$.next(filters);\n }\n\n public get savedFilters$(): Observable<IFilterSavedFilter[]> {\n return this._savedFilters$\n .pipe(\n distinctUntilChanged(),\n );\n }\n\n public get activeFilter(): IFilterSavedFilter {\n return this._activeFilter$.getValue();\n }\n\n public get activeFilter$(): Observable<IFilterSavedFilter> {\n return this._activeFilter$\n .pipe(\n distinctUntilChanged(),\n );\n }\n\n public get activeFilterData(): IFilterExternalParams {\n return this._activeFilter$.getValue()?.filters;\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public init(\n remoteParamsConfig: IFilterSavedFiltersConfig,\n paramsCase: 'snake' | 'camel',\n ): void {\n if (!remoteParamsConfig) {\n this._setEnabledStatus(false);\n\n return;\n }\n this._setEnabledStatus(true);\n\n this._paramsCase = paramsCase;\n this._config = remoteParamsConfig;\n }\n\n public initSavedFilters(filters: IFilterSavedFilter[]): void {\n filters = [...filters];\n filters.forEach((savedFilter) => {\n savedFilter.filters = restoreItems(\n savedFilter.filters,\n this._itemsStore.items,\n this._paramsCase,\n );\n });\n\n this.savedFilters = filters;\n }\n\n public load(): Observable<IFilterSavedFilter[]> {\n return this._config.load()\n .pipe(\n tap((response) => {\n this.initSavedFilters(response);\n }),\n );\n }\n\n public save(savedFilter: IFilterSavedFilter): Observable<IFilterSavedFilter> {\n return this._config.save(savedFilter);\n }\n\n public order(savedFilters: IFilterSavedFilter[]): Observable<IFilterSavedFilter[]> {\n return this._config.order(savedFilters)\n .pipe(\n tap(() => {\n this.savedFilters = [\n ...savedFilters,\n ];\n }),\n );\n }\n\n public delete(savedFilter: IFilterSavedFilter): Observable<IFilterSavedFilter> {\n return this._config.delete(savedFilter)\n .pipe(\n tap(() => {\n this.savedFilters = this.savedFilters\n .filter((f) => f.id !== savedFilter.id);\n }),\n );\n }\n\n public setActiveFilter(savedFilter: IFilterSavedFilter): void {\n if (savedFilter) {\n const existingFilter = this.savedFilters\n .find((f) => f.id === savedFilter.id);\n\n if (!existingFilter) {\n throw new Error(`Saved filter cannot be activated, because it does not exists. Filter ID = ${savedFilter.id}`);\n }\n\n this._activeFilter$.next(existingFilter);\n } else {\n this._activeFilter$.next(null);\n }\n }\n\n public openSavedFilterEditDialog(): void {\n const params = buildQueryParams(\n this._itemsStore.valuesAsQuery(),\n this._itemsStore.items,\n );\n\n const dialogConfig = {\n data: {\n params: params,\n savedFilters: this.savedFilters,\n saveCallback: this.save.bind(this),\n },\n };\n\n this._dialog\n .open(FsFilterSavedFilterEditComponent, dialogConfig)\n .beforeClosed()\n .pipe(\n take(1),\n takeUntil(this._destroy$),\n )\n .subscribe((updatedFilter: IFilterSavedFilter | null) => {\n if (updatedFilter) {\n // get already saved related filter object\n const savedFilter = this.savedFilters\n .find((f) => f.id === updatedFilter.id);\n\n // restore values from query string\n updatedFilter.filters = restoreItems(\n updatedFilter.filters,\n this._itemsStore.items,\n this._paramsCase,\n );\n\n\n if (savedFilter) {\n Object.assign(savedFilter, updatedFilter);\n } else {\n this.resetActiveFilter();\n this.savedFilters = [\n ...this.savedFilters,\n updatedFilter,\n ];\n }\n\n this.updateActiveFilter();\n }\n });\n }\n\n public updateActiveFilter(): void {\n // Lookup active filter\n const acitveFilter = this.savedFilters\n .find((f) => f.active);\n\n if (acitveFilter) {\n this.setActiveFilter(acitveFilter);\n }\n }\n\n public resetActiveFilter(): void {\n // Reset all previously activated filters\n this.savedFilters.forEach((savedFilter) => {\n savedFilter.active = false;\n });\n\n this.setActiveFilter(null);\n }\n\n private _setEnabledStatus(value: boolean): void {\n this._enabled$.next(value);\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\nimport { filter, switchMap, take, takeUntil } from 'rxjs/operators';\n\nimport { buildQueryParams } from '../helpers/build-query-params';\nimport { IFilterExternalParams } from '../interfaces/external-params.interface';\nimport { IFilterSavedFilter } from '../interfaces/saved-filters.interface';\nimport { FsFilterConfig } from '../models/filter-config';\n\nimport { PersistanceParamsController } from './external-params/persistance-params-controller.service';\nimport { QueryParamsController } from './external-params/query-params-controller.service';\nimport { SavedFiltersController } from './external-params/saved-filters-controller.service';\nimport { FsFilterItemsStore } from './items-store.service';\n\n\n@Injectable()\nexport class ExternalParamsController implements OnDestroy {\n\n protected _init;\n\n private _pending$ = new BehaviorSubject(false);\n private _shouldResetSavedFilters = true;\n private _config: FsFilterConfig;\n private _destroy$ = new Subject<void>();\n\n constructor(\n private _itemsStore: FsFilterItemsStore,\n private _persistanceStore: PersistanceParamsController,\n private _queryParams: QueryParamsController,\n private _savedFilters: SavedFiltersController,\n ) { }\n\n public get params(): IFilterExternalParams {\n let result: IFilterExternalParams = {};\n\n if (this._persistanceStore.enabled) {\n result = {\n ...result, \n ...this._persistanceStore.value?.data,\n };\n }\n\n if (this._savedFilters.enabled && this._savedFilters.activeFilter) {\n const query = Object.keys(result)\n .filter((key) => !this._itemsStore.itemNames.includes(key))\n .reduce((acc, key) => {\n return {\n ...acc,\n [key]: result[key],\n };\n }, {});\n\n result = {\n ...query, \n ...this._savedFilters.activeFilterData,\n };\n } else if (this._queryParams.enabled) {\n result = {\n ...result, \n ...this._queryParams.fetchedParams,\n };\n }\n\n return result;\n }\n\n public get pending(): boolean {\n return this._pending$.getValue();\n }\n\n public get pending$(): Observable<boolean> {\n return this._pending$.asObservable();\n }\n\n public get savedFiltersController(): SavedFiltersController {\n return this._savedFilters;\n }\n\n public get savedFiltersEnabled(): boolean {\n return this._savedFilters.enabled;\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public setConfig(config) {\n this._config = config;\n\n this._initPersistance();\n this._initQueryParams();\n this._initSavedFilters();\n this.initItems();\n }\n\n public setActiveSavedFilter(savedFilter: IFilterSavedFilter) {\n this.savedFiltersController.setActiveFilter(savedFilter);\n\n if (savedFilter) {\n this.reloadFiltersWithValues(savedFilter.filters, false);\n }\n }\n\n public reloadFiltersWithValues(params: IFilterExternalParams, shouldResetSavedFilters = true) {\n this._shouldResetSavedFilters = shouldResetSavedFilters;\n this._itemsStore.updateItemsWithValues(params);\n\n this._saveQueryParams();\n this._savePersistedParams();\n }\n\n public initItems(): void {\n this._pending$.next(true);\n if (this._savedFilters.enabled) {\n this._savedFilters\n .load()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._savedFilters.updateActiveFilter();\n this._initItemsValues();\n this._listenAndResetSavedFilters();\n this._pending$.next(false);\n });\n } else {\n this._initItemsValues();\n this._pending$.next(false);\n }\n\n this._listenItemsChange();\n }\n\n public _initItemsValues() {\n this._itemsStore.init(this.params);\n this._saveQueryParams();\n this._savePersistedParams();\n }\n\n public fetchQueryParams(): void {\n this._initQueryParams();\n this._itemsStore.updateItemsWithValues(this.params);\n }\n\n private _initPersistance() {\n this._persistanceStore.init(\n this._config.persist,\n this._config.namespace,\n this._config.case,\n );\n }\n\n private _initQueryParams() {\n this._queryParams.init(this._config.queryParam, this._config.case);\n }\n\n private _initSavedFilters() {\n this._savedFilters.init(this._config.savedFilters, this._config.case);\n }\n\n private _listenItemsChange() {\n this._itemsStore.ready$\n .pipe(\n filter((v) => v),\n take(1),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._saveQueryParams();\n this._savePersistedParams();\n });\n\n this._itemsStore\n .itemsChange$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._saveQueryParams();\n this._savePersistedParams();\n });\n }\n\n private _listenAndResetSavedFilters(): void {\n this._itemsStore\n .itemsChange$\n .pipe(\n filter(() => !!this.savedFiltersController.activeFilter),\n switchMap(() => {\n const shouldReset = this._shouldResetSavedFilters;\n\n this._shouldResetSavedFilters = true;\n\n return of(shouldReset);\n }),\n filter((shouldReset) => shouldReset),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.savedFiltersController.resetActiveFilter();\n });\n }\n\n private _saveQueryParams() {\n const targetItems = this._itemsStore.items\n .filter((item) => !item.queryParamsDisabled);\n\n const params = buildQueryParams(\n this._itemsStore.valuesAsQuery({\n onlyPresented: false,\n items: targetItems,\n persisted: true,\n }),\n targetItems,\n );\n\n this._queryParams.writeStateToQueryParams(params);\n }\n\n private _savePersistedParams() {\n const targetItems = this._itemsStore.items\n .filter((item) => !item.persistanceDisabled);\n\n const params = buildQueryParams(\n this._itemsStore.valuesAsQuery({\n onlyPresented: false,\n items: targetItems,\n persisted: true,\n }),\n targetItems,\n );\n\n this._persistanceStore.save(params);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ActionType } from '../../enums/action-type.enum';\nimport { Action } from '../../models/action.model';\n\n\n@Component({\n selector: 'fs-filter-action-button',\n templateUrl: './action-button.component.html',\n host: { class: 'action-button' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterActionButtonComponent {\n\n public ActionType = ActionType;\n\n @Input()\n public action: Action;\n\n}\n","<ng-container [ngSwitch]=\"action.type\">\n <button\n type=\"button\"\n *ngSwitchCase=\"ActionType.Icon\"\n mat-icon-button\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <!-- Fab button -->\n <button \n type=\"button\"\n *ngSwitchCase=\"ActionType.Fab\"\n mat-fab\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <!-- Mini Fab button -->\n <button \n type=\"button\"\n *ngSwitchCase=\"ActionType.MiniFab\"\n mat-mini-fab\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [ngClass]=\"action.classArray\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <button \n type=\"button\"\n *ngSwitchDefault\n mat-button\n [ngClass]=\"{ \n 'mat-raised-button': action.type === ActionType.Raised,\n 'mat-flat-button': action.type === ActionType.Flat,\n 'mat-stroked-button': action.type === ActionType.Stroked,\n 'mat-button': action.type === ActionType.Basic,\n 'mat-icon-button': action.type === ActionType.Icon\n }\"\n (click)=\"action.click && action.click($event)\"\n [color]=\"action.color\"\n [class]=\"action.classArray.join(' ')\"\n [disabled]=\"action.disabled$ | async\"\n [tabIndex]=\"action.tabIndex\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n\n <ng-template #buttonContent>\n <ng-container *ngIf=\"!action.icon else withIcon\">\n {{action.label}}\n </ng-container>\n\n <ng-template #withIcon>\n <mat-icon *ngIf=\"!action.iconPlacement || action.iconPlacement === 'left'\">{{action.icon}}</mat-icon>\n {{action.label}}\n <mat-icon *ngIf=\"action.iconPlacement === 'right'\">{{action.icon}}</mat-icon>\n </ng-template>\n </ng-template>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Action } from '../../models/action.model';\n\n\n@Component({\n selector: 'fs-filter-action-kebab-actions',\n styleUrls: ['./action-kebab-actions.component.scss'],\n templateUrl: './action-kebab-actions.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterActionKebabActionsComponent {\n\n @Input()\n public kebabActions: Action[];\n\n}\n","<button \n type=\"button\"\n mat-icon-button\n class=\"menu-button\"\n [fsMenuTriggerFor]=\"kebabActionsMenu\">\n <mat-icon>more_vert</mat-icon>\n</button>\n<fs-menu #kebabActionsMenu>\n <ng-container *ngFor=\"let action of kebabActions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <!-- Case when actions was collapsed from action with mode = 'menu'-->\n <ng-container *ngSwitchCase=\"'menu'\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group>\n <ng-template fs-group-menu-item-template>\n {{ action.label }} <mat-icon style=\"margin: 0;\">arrow_right</mat-icon> {{childAction.label}}\n </ng-template>\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template \n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"!(subAction.visible$ | async)\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template \n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"!(childAction.visible$ | async)\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{ action.label }} <mat-icon style=\"margin: 0;\">arrow_right</mat-icon>{{ childAction.label }}\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-template \n fs-menu-file-item\n [fsClass]=\"action.classArray\"\n [multiple]=\"action.multiple\"\n [accept]=\"action.accept || '*'\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (error)=\"action.fileError($event)\"\n (select)=\"action.fileSelected($event)\"\n (click)=\"action.click($event)\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon> {{action.label}}\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-template \n fs-menu-item\n (click)=\"action.click($event)\"\n [fsClass]=\"action.classArray\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon> {{action.label}}\n </ng-template>\n </ng-container>\n\n </ng-container>\n </ng-container>\n</fs-menu>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n} from '@angular/core';\n\nimport { MatSelect } from '@angular/material/select';\n\nimport { ActionMode, ActionType } from '../../enums';\nimport { Action } from '../../models/action.model';\n\n\n@Component({\n selector: 'fs-filter-actions',\n templateUrl: './actions.component.html',\n styleUrls: ['./actions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterActionsComponent {\n\n @Input()\n public kebabActions: Action[] = [];\n\n @Input()\n public actions: Action[] = [];\n\n public ActionType = ActionType;\n public ActionMode = ActionMode;\n\n public actionChange(action: Action, value: any, selectButton: MatSelect): void {\n if(action.change) {\n action.change(value); \n\n if(action.deselect) {\n selectButton.writeValue(null);\n }\n }\n }\n\n}\n","<ng-container *ngFor=\"let action of actions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <ng-container *ngSwitchCase=\"ActionMode.Button\">\n <fs-filter-action-button\n [action]=\"action\"\n class=\"action\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.Menu\">\n <fs-filter-action-button\n class=\"action\"\n [action]=\"action\"\n [fsMenuTriggerFor]=\"someRef\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n\n <fs-menu #someRef class=\"action\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"childAction.label\">\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template\n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"(subAction.visible$ | async) === false\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template\n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"(childAction.visible$ | async) === false\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-template>\n </ng-container>\n </fs-menu>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.SelectButton\">\n <mat-select \n class=\"action\"\n [ngClass]=\"{ \n 'mat-stroked-button': action.type === ActionType.Stroked,\n 'mat-raised-button': action.type === ActionType.Raised,\n 'mat-flat-button': action.type === ActionType.Flat,\n 'mat-basic-button': action.type === ActionType.Basic\n }\"\n [placeholder]=\"action.label\"\n [(ngModel)]=\"action.value\" \n (ngModelChange)=\"actionChange(action, $event, selectButton)\"\n fsSelectButton\n #selectButton\n [deselectOnChange]=\"false\">\n <mat-option \n *ngFor=\"let item of action.values\" \n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.File\">\n <fs-file\n class=\"action action-button\"\n [accept]=\"action.accept || '*'\"\n [multiple]=\"action.multiple\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (select)=\"action.fileSelected($event)\"\n (error)=\"action.fileError($event)\"\n (clicked)=\"action.click($event)\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n <fs-filter-action-button \n [action]=\"action\">\n </fs-filter-action-button>\n </fs-file>\n </ng-container>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"kebabActions?.length\">\n <fs-filter-action-kebab-actions\n [kebabActions]=\"kebabActions\">\n </fs-filter-action-kebab-actions>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { BaseItem } from '../../models/items/base-item';\nimport { IFilterConfigItem } from '../../interfaces/config.interface';\n\n\n@Component({\n selector: 'fs-filter-chip-content',\n templateUrl: './filter-chip-content.component.html',\n styleUrls: ['./filter-chip-content.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterChipContentComponent implements OnInit, OnDestroy {\n\n @Input() public item: BaseItem<IFilterConfigItem>;\n @Input() public type: 'from' | 'to';\n\n public content;\n\n private _destroy$ = new Subject();\n\n constructor(private _cdRef: ChangeDetectorRef) {\n }\n\n public ngOnInit() {\n this.listenValueChangesForRanges();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public listenValueChangesForRanges() {\n this.item.value$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.content = this._getContent();\n this._cdRef.detectChanges();\n });\n }\n\n private _getContent() {\n const result = this.item.getChipsContent(this.type);\n\n if (this.item.chipLabel !== undefined) {\n if (this.item.chipLabel === '') {\n return `${result}`;\n } else {\n if (Array.isArray(this.item.chipLabel)) {\n const label = getLabelFromArray(this.item.chipLabel, this.type);\n return `${label}: ${result}`;\n } else {\n return `${this.item.chipLabel}: ${result}`;\n }\n }\n } else {\n if (Array.isArray(this.item.label)) {\n const label = getLabelFromArray(this.item.label, this.type);\n return `${label}: ${result}`;\n } else {\n if (this.item.isTypeCheckbox) {\n return result;\n } else {\n return `${this.item.label}: ${result}`;\n }\n }\n }\n }\n}\n\nfunction getLabelFromArray(labelArr, type) {\n if (type === 'from' && labelArr[0]) {\n return `${labelArr[0]}`;\n } else if (type === 'to' && labelArr[1]) {\n return `${labelArr[1]}`;\n } else {\n return '';\n }\n}\n","{{ content }}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { BaseItem } from '../models/items/base-item';\n\n\n@Injectable()\nexport class FocusControllerService {\n\n private _focusOn = new BehaviorSubject<{ item: BaseItem<any>, type: 'from' | 'to'}>(null);\n\n constructor() {}\n\n public get focusOn$() {\n return this._focusOn.asObservable();\n }\n\n public click(item: BaseItem<any>, type: 'from' | 'to' = null) {\n this._focusOn.next({ item, type })\n }\n\n public listenFocusFor$(targetItem: BaseItem<any>, targetType: 'from' | 'to' = null) {\n return this._focusOn\n .pipe(\n filter((event) => !!event),\n filter(({ item, type }) => {\n return targetItem === item && targetType === type;\n }),\n tap(() => this.clearFocus()),\n )\n }\n\n public clearFocus() {\n this._focusOn.next(null);\n }\n}\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component,\n Input, OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { combineLatest, Observable, Subject, timer } from 'rxjs';\nimport { distinctUntilChanged, map, mapTo, startWith, take, takeUntil } from 'rxjs/operators';\n\nimport { IFilterConfigItem } from '../../interfaces/config.interface';\nimport { BaseItem } from '../../models/items/base-item';\nimport { DateRangeItem } from '../../models/items/date-range-item';\nimport { DateTimeRangeItem } from '../../models/items/date-time-range-item';\nimport { RangeItem } from '../../models/items/range-item';\nimport { FocusControllerService } from '../../services/focus-controller.service';\n\n\n@Component({\n selector: 'fs-filter-chip',\n templateUrl: './filter-chip.component.html',\n styleUrls: ['./filter-chip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterChipComponent implements OnInit, OnDestroy {\n\n @Input() public item: BaseItem<IFilterConfigItem>;\n\n public itemVisible: boolean;\n public rangeItem: boolean;\n\n public chipDelayedRender$: Observable<boolean>;\n\n private _chipRenderTimer$ = timer(500)\n .pipe(\n mapTo(true),\n );\n\n private _destroy$ = new Subject();\n\n constructor(\n private _cdRef: ChangeDetectorRef,\n private _focusController: FocusControllerService,\n ) {\n }\n\n public ngOnInit() {\n this.rangeItem = this.item.isTypeDateRange\n || this.item.isTypeRange\n || this.item.isTypeDateTimeRange;\n\n this.listenValueChangesForRanges();\n this._updateVisibility();\n\n if (this.item.hasPendingValues) {\n this.item.loadAsyncValues(false);\n\n this.item.values$\n .pipe(\n take(2),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateVisibility();\n this._cdRef.markForCheck();\n });\n\n this._initDelayRender();\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public focusOnItem(type = null) {\n this._focusController.click(this.item, type);\n }\n\n public removeItem(event: MouseEvent, type = null) {\n if (this.item instanceof RangeItem) {\n this.item.clearRange(type);\n } else if (this.item instanceof DateRangeItem || this.item instanceof DateTimeRangeItem) {\n this.item.clearDateRange(type);\n } else {\n this.item.clear();\n }\n }\n\n public listenValueChangesForRanges() {\n this.item.value$\n .pipe(\n distinctUntilChanged(),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateVisibility();\n this._cdRef.markForCheck();\n });\n }\n\n private _updateVisibility() {\n this.itemVisible = this.item.isChipVisible;\n }\n\n private _initDelayRender() {\n this.chipDelayedRender$ = combineLatest([\n this.item.values$,\n this._chipRenderTimer$.pipe(startWith(false)),\n ])\n .pipe(\n map(([values, timerValue]) => {\n return !!values || timerValue;\n }),\n );\n }\n}\n","<ng-container *ngIf=\"!item.hasPendingValues || (chipDelayedRender$ | async)\">\n <ng-container *ngIf=\"rangeItem; else defaultChip\">\n <fs-chip\n *ngIf=\"item.model?.min || item.model?.from\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem('from')\"\n (removed)=\"removeItem($event, 'from')\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item, type: 'from' }\">\n </ng-template>\n </fs-chip>\n\n <fs-chip\n *ngIf=\"item.model?.max || item.model?.to\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem('to')\"\n (removed)=\"removeItem($event, 'to')\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item, type: 'to' }\">\n </ng-template>\n </fs-chip>\n\n </ng-container>\n\n <ng-template #defaultChip>\n <fs-chip\n *ngIf=\"itemVisible\"\n [value]=\"item\"\n [selectable]=\"false\"\n [removable]=\"item.showClear\"\n size=\"small\"\n (click)=\"focusOnItem()\"\n (removed)=\"removeItem($event)\">\n <ng-template\n [ngTemplateOutlet]=\"chipContent\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </fs-chip>\n </ng-template>\n\n <ng-template #chipContent let-item=\"item\" let-type=\"type\">\n <ng-container *ngIf=\"!item.hasPendingValues && !item.loading; else lodaingValues\">\n <fs-filter-chip-content [item]=\"item\" [type]=\"type\"></fs-filter-chip-content>\n </ng-container>\n\n <ng-template #lodaingValues>\n Loading...\n </ng-template>\n </ng-template>\n</ng-container>\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { ItemType } from '../../enums';\nimport { BaseItem } from '../../models/items/base-item';\n\n\n@Component({\n selector: 'fs-filter-chips',\n templateUrl: './filter-chips.component.html',\n styleUrls: ['./filter-chips.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterChipsComponent {\n\n @Input() public filters: BaseItem<any>[];\n\n public ItemType = ItemType;\n}\n","<ng-container *ngFor=\"let item of filters\">\n <ng-container *ngIf=\"(item.value$ | async) !== undefined && item.type !== ItemType.Keyword\">\n <fs-filter-chip [item]=\"item\"></fs-filter-chip>\n </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\n\nimport { ExternalParamsController } from '../../services/external-params-controller.service';\nimport { SavedFiltersController } from '../../services/external-params/saved-filters-controller.service';\n\n\n@Component({\n selector: 'fs-filter-drawer-actions',\n templateUrl: './filter-drawer-actions.component.html',\n styleUrls: ['./filter-drawer-actions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterDrawerActionsComponent {\n\n @Output('clear')\n private _clear = new EventEmitter<void>();\n\n @Output('done')\n private _done = new EventEmitter<void>();\n\n constructor(public externalParams: ExternalParamsController) { }\n\n public get savedFilters(): SavedFiltersController {\n return this.externalParams.savedFiltersController;\n }\n\n public done(): void {\n this._done.emit();\n }\n\n public clear(): void {\n this._clear.emit();\n }\n\n public saveFilters() {\n this.externalParams\n .savedFiltersController\n .openSavedFilterEditDialog();\n }\n}\n","<a mat-button color=\"primary\" (click)=\"done()\">Done</a>\n<a mat-button (click)=\"clear()\">Clear</a>\n<ng-container *ngIf=\"savedFilters.enabled$ | async\">\n <a mat-button (click)=\"saveFilters()\">Save</a>\n</ng-container>\n\n","import { InjectionToken } from '@angular/core';\n\nexport const FILTER_DRAWER_DATA = new InjectionToken<any>('fs.filter-drawer-data');\n","import { InjectionToken } from '@angular/core';\n\nexport const FILTER_DRAWER_OVERLAY = new InjectionToken<any>('fs.filter-drawer-overlay');\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n Input,\n KeyValueDiffer,\n KeyValueDiffers, OnChanges, OnDestroy,\n SimpleChanges,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\n\nimport { IFilterConfigItem } from '../../../interfaces/config.interface';\nimport { BaseItem } from '../../../models/items/base-item';\n\n\n@Component({\n selector: 'base-item',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BaseItemComponent<T extends BaseItem<IFilterConfigItem>>\nimplements DoCheck, OnChanges, OnDestroy {\n\n @Input()\n public set item(value: T) {\n this._item = value;\n }\n\n public get item(): T {\n return this._item;\n }\n\n @Input()\n public inline = false;\n\n public label!: string;\n\n protected _item: T;\n protected _kvDiffer: KeyValueDiffer<string, any>;\n protected _destroy$ = new Subject();\n\n private _debouncer$ = new Subject();\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef,\n ) {\n this._kvDiffer = this._kvDiffers.find(this.item || {}).create();\n this.listenWithDebounce();\n }\n public ngDoCheck(): void {\n if (this._kvDiffer) {\n const changes = this._kvDiffer.diff(this.item);\n\n if (changes) {\n this._cd.detectChanges();\n }\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.item) {\n this.label = Array.isArray(this.item.label) ? this.item.label[0] : this.item.label;\n }\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public listenWithDebounce() {\n this._debouncer$\n .pipe(\n debounceTime(150),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.item.valueChanged();\n });\n }\n\n public itemChange() {\n this._debouncer$.next();\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit, Optional, Self,\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\n\nimport {\n DateRangePickerFromComponent, DateRangePickerToComponent,\n FsDatePickerComponent,\n FsDateScrollPickerComponent\n} from '@firestitch/datepicker';\nimport { FsAutocompleteComponent } from '@firestitch/autocomplete';\nimport { FsAutocompleteChipsComponent } from '@firestitch/autocomplete-chips';\n\nimport { Subject } from 'rxjs';\nimport { delay, takeUntil } from 'rxjs/operators';\n\nimport { FocusControllerService } from '../../services/focus-controller.service';\nimport { ItemType } from '../../enums/item-type.enum';\nimport { ItemDateMode } from '../../enums/item-date-mode.enum';\n\n\n@Directive({\n selector: '[fsFilterFocusTrigger]',\n})\nexport class FocusToItemDirective implements OnInit, OnDestroy {\n\n @Input('fsFilterFocusTrigger')\n private _item;\n\n @Input('focusTargetType')\n private _focusTargetType;\n\n private _destroy$ = new Subject<void>();\n\n constructor(\n private _el: ElementRef,\n private _focusController: FocusControllerService,\n @Optional() @Self() private _targetSelect: MatSelect,\n @Optional() @Self() private _targetDate: FsDatePickerComponent,\n @Optional() @Self() private _targetDateScroll: FsDateScrollPickerComponent,\n @Optional() @Self() private _targetDateRangeFrom: DateRangePickerFromComponent,\n @Optional() @Self() private _targetDateRangeTo: DateRangePickerToComponent,\n @Optional() @Self() private _targetAutocomplete: FsAutocompleteComponent,\n @Optional() @Self() private _targetAutocompleteChips: FsAutocompleteChipsComponent,\n ) {}\n\n public ngOnInit(): void {\n this._focusController\n .listenFocusFor$(this._item, this._focusTargetType)\n .pipe(\n delay(500),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._focus();\n })\n }\n\n public ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n private _focus() {\n switch (this._item.type) {\n case ItemType.Select: {\n this._targetSelect.open();\n } break;\n\n case ItemType.Text: case ItemType.Range: {\n this._el.nativeElement.focus();\n } break;\n\n case ItemType.Date: {\n if (this._item.mode === ItemDateMode.Calendar) {\n this._targetDate.open();\n } else {\n this._targetDateScroll.open();\n }\n } break;\n case ItemType.DateRange: {\n if (this._focusTargetType === 'from') {\n this._targetDateRangeFrom.open();\n } else {\n this._targetDateRangeTo.open();\n }\n } break;\n\n case ItemType.AutoComplete: {\n this._targetAutocomplete.focus();\n } break;\n\n case ItemType.AutoCompleteChips: {\n this._targetAutocompleteChips.focus();\n } break;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\n\n@Component({\n selector: 'filter-item-select-groups',\n templateUrl: './groups.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectGroupsComponent {\n\n @ViewChild('select', { static: true }) select: MatSelect;\n @Input() public item;\n\n constructor(public cd: ChangeDetectorRef) {}\n\n public compare(o1, o2) {\n return o1 == o2;\n }\n}\n","<mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [compareWith]=\"compare\">\n <ng-container *ngFor=\"let selectItem of item.values\">\n <ng-container *ngIf=\"selectItem[item.children]; else simpleOption\">\n <mat-optgroup [label]=\"selectItem.name\">\n <mat-option *ngFor=\"let subItem of selectItem[item.children]\"\n [value]=\"subItem.value\"\n [ngStyle]=\"selectItem.style\">\n {{ subItem.name }}\n </mat-option>\n </mat-optgroup>\n </ng-container>\n\n <ng-template #simpleOption>\n <mat-option\n [value]=\"selectItem.value\"\n [ngStyle]=\"selectItem.style\">\n {{ selectItem.name }}\n </mat-option>\n </ng-template>\n </ng-container>\n </mat-select>\n</mat-form-field>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { BaseItem } from '../models/items/base-item';\n\n\n@Pipe({\n name: 'fsFilterIsolateValues',\n})\nexport class FsFilterIsolateValues implements PipeTransform {\n transform(values: BaseItem<any>[], isolate) {\n if (!isolate) {\n return values;\n }\n\n return values.filter((value) => {\n return value.value !== isolate.value;\n });\n\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n ViewChild,\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\nimport { SimpleSelectItem } from '../../../../models/items/select/simple-select-item';\n\n\n@Component({\n selector: 'filter-item-select-simple',\n templateUrl: './simple.component.html',\n styleUrls: ['./simple.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectSimpleComponent {\n\n @Input() public item: SimpleSelectItem;\n\n @ViewChild('select', { static: true }) select: MatSelect;\n\n constructor(public cd: ChangeDetectorRef) {}\n\n public changed() {\n if (this.item.isolate) {\n this.item.isolate.enabled = false;\n }\n }\n\n public isolateChange(filter) {\n\n if (filter.isolate.enabled) {\n filter.model = filter.isolate.value;\n } else {\n filter.model = null;\n }\n }\n}\n","<mat-form-field [ngClass]=\"{ isolate: item.isolate }\">\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n (ngModelChange)=\"changed()\">\n <mat-option *ngFor=\"let item of item.values | fsFilterIsolateValues: item.isolate\"\n [value]=\"item.value\"\n >\n {{ item.name }}\n </mat-option>\n </mat-select>\n\n <mat-hint>\n <div *ngIf=\"item.isolate\">\n <mat-checkbox (change)=\"isolateChange(item)\" [(ngModel)]=\"item.isolate.enabled\">\n <span class=\"checkbox-label\">{{ item.isolate.label }}</span>\n </mat-checkbox>\n </div>\n </mat-hint>\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n ViewChild\n} from '@angular/core';\nimport { MatSelect } from '@angular/material/select';\n\nimport { MultipleSelectItem } from '../../../../models/items/select/multiple-select-item';\n\n\n@Component({\n selector: 'filter-item-select-multiple',\n templateUrl: './multiple.component.html',\n styleUrls: ['./multiple.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectMultipleComponent {\n\n @Input()\n public item: MultipleSelectItem;\n\n @ViewChild('select', { static: true })\n public select: MatSelect;\n\n constructor(public cd: ChangeDetectorRef) {}\n\n public changed() {\n\n if (this.item.isolate) {\n\n this.item.isolate.enabled = false;\n\n if (this.item.multiple && Array.isArray(this.item.model)) {\n const index = this.item.model.indexOf(this.item.isolate.value);\n\n if (index > -1) {\n this.item.model.splice(index, 1);\n }\n }\n }\n }\n\n public close() {\n this.select.close();\n }\n\n public isolateChange(filter) {\n if (filter.isolate.enabled) {\n filter.model = filter.multiple ? [filter.isolate.value] : filter.isolate.value;\n } else {\n if (filter.multiple) {\n filter.model = filter.defaultValue ? filter.defaultValue : [];\n } else {\n filter.model = filter.defaultValue ? filter.defaultValue : null;\n }\n }\n }\n}\n","<mat-form-field [ngClass]=\"{ isolate: item.isolate }\">\n <mat-label>{{item.label}}</mat-label>\n <mat-select\n #select\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n (ngModelChange)=\"changed()\"\n [multiple]=\"item.multiple\">\n <mat-option\n *ngFor=\"let item of item.values | fsFilterIsolateValues: item.isolate\"\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n\n <mat-hint>\n <div *ngIf=\"item.isolate\">\n <mat-checkbox (change)=\"isolateChange(item)\" [(ngModel)]=\"item.isolate.enabled\">\n <span class=\"checkbox-label\">{{ item.isolate.label }}</span>\n </mat-checkbox>\n </div>\n </mat-hint>\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n KeyValueDiffers,\n Component,\n ViewChild,\n DoCheck,\n SimpleChanges,\n} from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { SelectSimpleComponent } from './simple/simple.component';\nimport { SelectMultipleComponent } from './multiple/multiple.component';\nimport { BaseSelectItem } from '../../../models/items/select/base-select-item';\nimport { MultipleSelectItem } from '../../../models/items/select/multiple-select-item';\nimport { SimpleSelectItem } from '../../../models/items/select/simple-select-item';\n\n@Component({\n selector: 'filter-item-select',\n templateUrl: './select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectComponent extends BaseItemComponent<BaseSelectItem> implements DoCheck {\n\n @ViewChild('selectItem')\n public selectedItem: SelectSimpleComponent | SelectMultipleComponent;\n // For case when we have multiple selection with __all option\n // If _all has been selected than we must disable all other items\n public allItemsOptionSelected = false;\n\n public get multipleSelectItem(): MultipleSelectItem {\n return this.item as MultipleSelectItem;\n }\n\n public get simpleSelectItem(): SimpleSelectItem {\n return this.item as SimpleSelectItem;\n }\n\n public values$: Observable<unknown[]>;\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n \n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.item) {\n this.values$ = this.item.values$ as Observable<unknown[]>;\n }\n }\n\n public ngDoCheck() {\n if (this._kvDiffer) {\n const changes = this._kvDiffer.diff(this.item);\n\n if (changes) {\n this._cd.markForCheck();\n\n if (this.selectedItem) {\n this.selectedItem.cd.markForCheck();\n }\n }\n }\n }\n}\n","<ng-container *ngIf=\"(item.loading$ | async) else itemSelect\">\n <mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <mat-select disabled></mat-select>\n </mat-form-field>\n</ng-container>\n\n<ng-template #itemSelect>\n <ng-container *ngIf=\"(values$ | async)?.length\">\n <ng-container *ngIf=\"item.multiple && !item.children\">\n <filter-item-select-multiple\n [item]=\"multipleSelectItem\"\n #selectItem>\n </filter-item-select-multiple>\n </ng-container>\n\n <ng-container *ngIf=\"!item.multiple && !item.children\">\n <filter-item-select-simple\n [item]=\"simpleSelectItem\"\n #selectItem>\n </filter-item-select-simple>\n </ng-container>\n\n <ng-container *ngIf=\"item.children\">\n <filter-item-select-groups\n [item]=\"item\"\n #selectItem>\n </filter-item-select-groups>\n </ng-container>\n </ng-container>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers\n} from '@angular/core';\n\nimport { ChipsItem } from '../../../models/items/chips-item';\nimport { BaseItemComponent } from '../base-item/base-item.component';\n\n\n@Component({\n selector: 'filter-item-chips',\n templateUrl: './chips.component.html',\n styleUrls: [ './chips.component.scss' ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChipsComponent extends BaseItemComponent<ChipsItem> {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public modelChange() {\n this.itemChange();\n }\n\n public compareFn(modelValue, chipValue) {\n return String(modelValue.value) === String(chipValue.value);\n }\n}\n","<ng-template [ngIf]=\"item.values?.length\">\n <fs-label-field>\n <fs-label>{{item.label}}</fs-label>\n <fs-chips \n [(ngModel)]=\"item.model\"\n [compare]=\"compareFn\"\n [multiple]=\"item.multiple\">\n <fs-chip \n *ngFor=\"let value of item.values\"\n [value]=\"value\"\n [selectable]=\"true\">\n {{ value.name }}\n </fs-chip>\n </fs-chips>\n </fs-label-field>\n</ng-template>\n\n<ng-template [ngIf]=\"item.loading\">{{ item.label }} loading...</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\n\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil, debounceTime } from 'rxjs/operators';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { TextItem } from '../../../models/items/text-item';\n\n\n@Component({\n selector: 'filter-item-text',\n templateUrl: './text.component.html',\n styleUrls: ['./text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextComponent extends BaseItemComponent<TextItem> implements OnInit, OnDestroy {\n\n public textControl = new UntypedFormControl();\n public destroy$ = new Subject();\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit(): void {\n this._listenControlValueChanges();\n this._listenModelChanges();\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private _listenControlValueChanges(): void {\n this.textControl.valueChanges\n .pipe(\n distinctUntilChanged(),\n debounceTime(200),\n takeUntil(this.destroy$),\n )\n .subscribe((value) => {\n this.item.model = value;\n });\n }\n\n private _listenModelChanges(): void {\n this._item.value$\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this.textControl.setValue(this.item.model, { emitEvent: false });\n })\n }\n\n}\n","<mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <span matPrefix *ngIf=\"item.prefix\" [innerHtml]=\"item.prefix\"></span>\n <input matInput [formControl]=\"textControl\" [fsFilterFocusTrigger]=\"item\">\n <span matSuffix *ngIf=\"item.suffix\" [innerHtml]=\"item.suffix\"></span>\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n OnInit\n} from '@angular/core';\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { WeekItem } from '../../../models/items/week-item';\n\n\n@Component({\n selector: 'filter-item-week',\n templateUrl: './week.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WeekComponent extends BaseItemComponent<WeekItem> implements OnInit {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit() {}\n}\n","<mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDateWeekPicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [seedDate]=\"item.seedDate\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component, ElementRef,\n KeyValueDiffers, OnInit, ViewChild\n} from '@angular/core';\nimport { fromEvent, merge } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { RangeItem } from '../../../models/items/range-item';\n\n\n@Component({\n selector: 'filter-item-range',\n templateUrl: './range.component.html',\n styleUrls: ['./range.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RangeComponent extends BaseItemComponent<RangeItem> implements OnInit {\n\n @ViewChild('from', { static: true })\n public from: ElementRef;\n\n @ViewChild('to', { static: true })\n public to;\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit(): void {\n this.listenChanges();\n }\n\n public listenChanges() {\n const fromListener = fromEvent(this.from.nativeElement, 'keyup')\n .pipe(\n distinctUntilChanged()\n );\n\n const toListener = fromEvent(this.to.nativeElement, 'keyup')\n .pipe(\n distinctUntilChanged()\n );\n\n merge(fromListener, toListener)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.itemChange();\n })\n }\n}\n","<div class=\"form-field\">\n <mat-form-field class=\"filter-range-min\">\n <mat-label>{{item.label[0]}}</mat-label>\n <span \n matPrefix \n class=\"text-prefix\"\n *ngIf=\"item.prefix\"\n [innerHtml]=\"item.prefix\">\n </span>\n <input \n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'from'\"\n type=\"text\"\n inputmode=\"decimal\"\n [(ngModel)]=\"item.model.min\"\n #from>\n <span \n matSuffix \n class=\"text-suffix\"\n *ngIf=\"item.suffix\" \n [innerHtml]=\"item.suffix\">\n </span>\n </mat-form-field>\n\n <mat-form-field class=\"filter-range-max\">\n <mat-label>{{item.label[1]}}</mat-label>\n <span \n matPrefix \n class=\"text-prefix\"\n *ngIf=\"item.prefix\"\n [innerHtml]=\"item.prefix\">\n </span>\n <input \n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'to'\"\n type=\"text\"\n inputmode=\"decimal\"\n [(ngModel)]=\"item.model.max\"\n #to>\n <span \n matSuffix \n class=\"text-suffix\"\n *ngIf=\"item.suffix\"\n [innerHtml]=\"item.suffix\">\n </span>\n </mat-form-field>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n} from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { AutocompleteItem } from '../../../models/items/autocomplete-item';\nimport { BaseItemComponent } from '../base-item/base-item.component';\n\n\n@Component({\n selector: 'filter-item-autocomplete',\n templateUrl: './autocomplete.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AutocompleteComponent extends BaseItemComponent<AutocompleteItem> {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef,\n ) {\n super(_kvDiffers, _cd);\n }\n\n public displayWith = (data) => {\n return data ? data.name : data;\n };\n\n public fetch = (keyword): Observable<any> => {\n return this.item.valuesFn(keyword, this.item.filter);\n };\n}\n","<fs-autocomplete\n [fsFilterFocusTrigger]=\"item\"\n [fetch]=\"fetch\"\n [displayWith]=\"displayWith\"\n [(ngModel)]=\"item.model\"\n [placeholder]=\"label\"\n [fetchOnFocus]=\"item.fetchOnFocus\"\n [showClear]=\"item.showClear\"\n name=\"item.name\">\n <ng-template fsAutocompleteTemplate let-data=\"data\">\n {{data.name}}\n </ng-template>\n</fs-autocomplete>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n} from '@angular/core';\n\nimport { remove as arrayRemove } from '@firestitch/common';\n\nimport { AutocompleteChipsItem } from '../../../models/items/autocomplete-chips-item';\nimport { BaseItemComponent } from '../base-item/base-item.component';\n\n\n@Component({\n selector: 'filter-item-autocompletechips',\n templateUrl: './autocompletechips.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AutocompletechipsComponent extends BaseItemComponent<AutocompleteChipsItem> {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef,\n ) {\n super(_kvDiffers, _cd);\n }\n\n public addAutocompleteChipItem(event) {\n if (event.data && this.item.model.indexOf(event.data.value) === -1) {\n this.item.model.push(event.data);\n this.itemChange();\n }\n }\n\n public removeAutocompleteChipItem(event) {\n arrayRemove(this.item.model, { value: event.data.value });\n this.itemChange();\n }\n\n public clearAutocompleteChipItem() {\n this.item.clear();\n this.itemChange();\n }\n\n public fetch = (keyword) => {\n return this.item.valuesFn(keyword, this.item.filter);\n };\n\n public compareItems(item1, item2): boolean {\n return item1?.value === item2?.value;\n }\n}\n","<fs-autocomplete-chips\n [fsFilterFocusTrigger]=\"item\"\n [fetch]=\"fetch\"\n [ngModel]=\"item.model\"\n (selected)=\"addAutocompleteChipItem($event)\"\n (removed)=\"removeAutocompleteChipItem($event)\"\n (clear)=\"clearAutocompleteChipItem()\"\n [allowText]=\"false\"\n [fetchOnFocus]=\"item.fetchOnFocus\"\n [placeholder]=\"label\"\n [chipImage]=\"item.chipImage\"\n [chipColor]=\"item.chipColor\"\n [chipIconColor]=\"item.chipIcon\"\n [chipBackground]=\"item.chipBackground\"\n [chipIcon]=\"item.chipIcon\"\n [chipClass]=\"item.chipClass\"\n [allowClear]=\"item.showClear\"\n [removable]=\"item.showClear\"\n [compareWith]=\"compareItems\"\n [panelWidth]=\"300\"\n name=\"model\">\n <ng-template fsAutocompleteObject let-object=\"object\">\n {{ object.name }}\n </ng-template>\n</fs-autocomplete-chips>\n\n<!--<mat-form-field floatLabel=\"auto\">\n <mat-label>{{item.label}}</mat-label>\n <mat-chip-list #chipList>\n <mat-chip *ngFor=\"let item of item.model\"\n (removed)=\"removeAutocompleteChipItem(item)\">\n {{ item.name }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n\n <input #chipsInput\n type=\"text\"\n matInput\n [(ngModel)]=\"item.selectedValue\"\n (ngModelChange)=\"onAutocompleteChipsChange(chipsInput)\"\n [name]=\"item.name\"\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"autocompleteChipsInput\">\n </mat-chip-list>\n\n <mat-autocomplete #autocompleteChipsInput=\"matAutocomplete\"\n (optionSelected)=\"addAutocompleteChipItem( $event)\"\n >\n <mat-option *ngFor=\"let item of item.values$ | async\" [value]=\"item\">\n {{ item.name }}\n </mat-option>\n </mat-autocomplete>\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>-->\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers,\n OnInit\n} from '@angular/core';\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { ItemType } from '../../../enums/item-type.enum';\nimport { ItemDateMode } from '../../../enums/item-date-mode.enum';\nimport { BaseDateItem } from '../../../models/items/date/base-date-item';\nimport { DateItem } from '../../../models/items/date-item';\nimport { DateTimeItem } from '../../../models/items/date-time-item';\nimport { PickerViewType } from '../../../enums/picker-view-type.enum';\n\n\n@Component({\n selector: 'filter-item-date',\n templateUrl: './date.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateComponent extends BaseItemComponent<DateItem | DateTimeItem> implements OnInit {\n\n public viewType = PickerViewType.Date;\n\n public itemDateMode = ItemDateMode;\n public showYear = true;\n public showMonth = true;\n public showDay = true;\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit() {\n if (this.item.type === ItemType.DateTime) {\n this.viewType = PickerViewType.DateTime;\n } else {\n this.viewType = PickerViewType.Date;\n }\n\n if ((this.item as BaseDateItem).mode === ItemDateMode.ScrollMonthYear) {\n this.showDay = false;\n }\n }\n}\n","<mat-form-field *ngIf=\"item.mode===itemDateMode.Calendar; else elseMode\">\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDatePicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [maxYear]=\"item.maxYear\"\n [view]=\"viewType\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n</mat-form-field>\n\n<ng-template #elseMode>\n <mat-form-field>\n <mat-label>{{item.label}}</mat-label>\n <input matInput\n fsDateScrollPicker\n [fsFilterFocusTrigger]=\"item\"\n [(ngModel)]=\"item.model\"\n [maxYear]=\"item.maxYear\"\n [showMonth]=\"showMonth\"\n [showDay]=\"showDay\"\n [showYear]=\"showYear\"\n [clear]=\"item.showClear\"\n [name]=\"item.name\">\n <mat-placeholder *ngIf=\"inline\">{{ item.label }}</mat-placeholder>\n </mat-form-field>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers, OnInit\n} from '@angular/core';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { ItemType } from '../../../enums/item-type.enum';\nimport { DateRangeItem } from '../../../models/items/date-range-item';\nimport { DateTimeRangeItem } from '../../../models/items/date-time-range-item';\nimport { PickerViewType } from '../../../enums/picker-view-type.enum';\n\n\n@Component({\n selector: 'filter-item-date-range',\n templateUrl: './date-range.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateRangeComponent extends BaseItemComponent<DateRangeItem | DateTimeRangeItem> implements OnInit {\n\n public viewType = PickerViewType.Date;\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n\n public ngOnInit() {\n if (this.item.type === ItemType.DateTimeRange) {\n this.viewType = PickerViewType.DateTime;\n } else {\n this.viewType = PickerViewType.Date;\n }\n }\n}\n","<mat-form-field>\n <mat-label>{{item.label[0]}}</mat-label>\n <input\n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'from'\"\n [fsDateRangeFrom]=\"item.name\"\n [(ngModel)]=\"item.model.from\"\n (ngModelChange)=\"itemChange()\"\n [clear]=\"item.showClear\"\n [view]=\"viewType\"\n name=\"date_from\">\n</mat-form-field>\n\n<mat-form-field>\n <mat-label>{{item.label[1]}}</mat-label>\n <input\n matInput\n [fsFilterFocusTrigger]=\"item\"\n [focusTargetType]=\"'to'\"\n [fsDateRangeTo]=\"item.name\"\n [(ngModel)]=\"item.model.to\"\n (ngModelChange)=\"itemChange()\"\n [clear]=\"item.showClear\"\n [view]=\"viewType\"\n name=\"date_to\">\n</mat-form-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n KeyValueDiffers\n} from '@angular/core';\n\nimport { BaseItemComponent } from '../base-item/base-item.component';\nimport { CheckboxItem } from '../../../models/items/checkbox-item';\n\n\n@Component({\n selector: 'filter-item-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent extends BaseItemComponent<CheckboxItem> {\n\n constructor(\n protected _kvDiffers: KeyValueDiffers,\n protected _cd: ChangeDetectorRef\n ) {\n super(_kvDiffers, _cd);\n }\n}\n","<fs-label-field>\n <mat-checkbox [(ngModel)]=\"item.model\">\n {{ item.label }}\n </mat-checkbox>\n</fs-label-field>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { ItemType } from '../../enums/item-type.enum';\nimport { AutocompleteChipsItem } from '../../models/items/autocomplete-chips-item';\nimport { AutocompleteItem } from '../../models/items/autocomplete-item';\nimport { BaseItem } from '../../models/items/base-item';\nimport { CheckboxItem } from '../../models/items/checkbox-item';\nimport { ChipsItem } from '../../models/items/chips-item';\nimport { DateItem } from '../../models/items/date-item';\nimport { DateRangeItem } from '../../models/items/date-range-item';\nimport { DateTimeItem } from '../../models/items/date-time-item';\nimport { DateTimeRangeItem } from '../../models/items/date-time-range-item';\nimport { RangeItem } from '../../models/items/range-item';\nimport { BaseSelectItem } from '../../models/items/select/base-select-item';\nimport { TextItem } from '../../models/items/text-item';\nimport { WeekItem } from '../../models/items/week-item';\n\n\n@Component({\n selector: 'filter-item',\n templateUrl: './filter-item.component.html',\n styleUrls: ['./filter-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterItemComponent implements OnInit, OnDestroy {\n\n @Input() public item: BaseItem<any>;\n\n public itemType = ItemType;\n\n public get textItem(): TextItem {\n return this.item as TextItem;\n }\n\n public get chipsItem(): ChipsItem {\n return this.item as ChipsItem;\n }\n\n public get baseSelectItem(): BaseSelectItem {\n return this.item as BaseSelectItem;\n }\n\n public get rangeItem(): RangeItem {\n return this.item as RangeItem;\n }\n\n public get autocompleteItem(): AutocompleteItem {\n return this.item as AutocompleteItem;\n }\n\n public get autocompleteChipsItem(): AutocompleteChipsItem {\n return this.item as AutocompleteChipsItem;\n }\n\n public get dateItem(): DateItem {\n return this.item as DateItem;\n }\n\n public get dateRangeItem(): DateRangeItem {\n return this.item as DateRangeItem;\n }\n\n public get dateTimeItem(): DateTimeItem {\n return this.item as DateTimeItem;\n }\n\n public get dateTimeRangeItem(): DateTimeRangeItem {\n return this.item as DateTimeRangeItem;\n }\n\n public get weekItem(): WeekItem {\n return this.item as WeekItem;\n }\n\n public get checkboxItem(): CheckboxItem {\n return this.item as CheckboxItem;\n }\n\n private _destroy$ = new Subject<void>();\n\n constructor(private _cdRef: ChangeDetectorRef) { }\n\n public ngOnInit(): void {\n this.item.value$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n}\n","<div class=\"filter filter-{{ item.type }}\">\n\n <ng-container [ngSwitch]=\"item.type\">\n <filter-item-text \n class=\"interface\"\n *ngSwitchCase=\"itemType.Text\"\n [item]=\"textItem\">\n </filter-item-text>\n\n <filter-item-select \n class=\"interface\"\n *ngSwitchCase=\"itemType.Select\"\n [item]=\"baseSelectItem\">\n </filter-item-select>\n\n <filter-item-chips \n class=\"interface\"\n *ngSwitchCase=\"itemType.Chips\"\n [item]=\"chipsItem\">\n </filter-item-chips>\n\n <filter-item-range \n class=\"interface interface-range\"\n *ngSwitchCase=\"itemType.Range\"\n [item]=\"rangeItem\">\n </filter-item-range>\n\n <filter-item-autocomplete \n class=\"interface\"\n *ngSwitchCase=\"itemType.AutoComplete\"\n [item]=\"autocompleteItem\">\n </filter-item-autocomplete>\n\n <filter-item-autocompletechips \n class=\"interface\"\n *ngSwitchCase=\"itemType.AutoCompleteChips\"\n [item]=\"autocompleteChipsItem\">\n </filter-item-autocompletechips>\n\n <filter-item-date \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.Date\"\n [item]=\"dateItem\">\n </filter-item-date>\n\n <filter-item-date \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateTime\"\n [item]=\"dateTimeItem\">\n </filter-item-date>\n\n <filter-item-date-range \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateRange\"\n [item]=\"dateRangeItem\">\n </filter-item-date-range>\n\n <filter-item-date-range \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateTimeRange\"\n [item]=\"dateTimeRangeItem\">\n </filter-item-date-range>\n\n <filter-item-week \n class=\"interface\"\n *ngSwitchCase=\"itemType.Week\"\n [item]=\"weekItem\">\n </filter-item-week>\n\n <filter-item-checkbox \n class=\"interface interface-checkbox\"\n *ngSwitchCase=\"itemType.Checkbox\"\n [item]=\"checkboxItem\">\n </filter-item-checkbox>\n </ng-container>\n\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostListener,\n Inject,\n Input,\n} from '@angular/core';\n\nimport { OverlayRef } from '@angular/cdk/overlay';\n\nimport { Observable } from 'rxjs';\n\nimport { FILTER_DRAWER_DATA } from '../../injectors/filter-drawer-data';\nimport { FILTER_DRAWER_OVERLAY } from '../../injectors/filter-drawer-overlay';\nimport { BaseItem } from '../../models/items/base-item';\nimport { ExternalParamsController } from '../../services/external-params-controller.service';\nimport { FsFilterItemsStore } from '../../services/items-store.service';\n\ntype Item = BaseItem<any>;\n\n@Component({\n templateUrl: './filter-drawer.component.html',\n styleUrls: ['./filter-drawer.component.scss'],\n // Commented out because filter items are not updating with a delayed observable. Need to figure this out.\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterDrawerComponent {\n\n @Input() public inline = false;\n\n public windowDesktop = false;\n\n protected _clear: Function;\n protected _done: Function;\n\n constructor(\n @Inject(FILTER_DRAWER_OVERLAY) private _overlayRef: OverlayRef,\n @Inject(FILTER_DRAWER_DATA) private _data,\n public externalParams: ExternalParamsController,\n protected _cd: ChangeDetectorRef,\n protected _itemsStore: FsFilterItemsStore,\n ) {\n this._itemsStore.prepareItems();\n\n this._clear = this._data.clear;\n this._done = this._data.done;\n\n this.updateWindowWidth();\n }\n\n @HostListener('window:resize')\n public updateWindowWidth() {\n this.windowDesktop = window.innerWidth > 1200;\n }\n\n public get items$(): Observable<Item[]> {\n return this._itemsStore.visibleItems$;\n }\n\n public get sortItem(): Item {\n return this._itemsStore.sortByItem;\n }\n\n public get sortDirectionItem(): Item {\n return this._itemsStore.sortDirectionItem;\n }\n\n public clear() {\n this._clear();\n // this.overlayRef.detach();\n }\n\n public done() {\n this._done();\n this._overlayRef.detach();\n }\n\n public backdropClick() {\n this.done();\n }\n}\n","<div class=\"filters\">\n <div class=\"filters-wrap\">\n\n <div class=\"filter-by\">\n <mat-icon>tune</mat-icon>\n <span class=\"text\">Filters</span>\n </div>\n\n <div class=\"overflow-shadow filter-items\">\n <div class=\"overflow-shadow-content\">\n <ng-container *fsSkeleton=\"(externalParams.pending$ | async) !== true\">\n <filter-item \n *ngFor=\"let filterItem of items$ | async\"\n class=\"filter-group\"\n [item]=\"filterItem\">\n </filter-item>\n\n <ng-container *ngIf=\"sortItem && sortItem.values && sortItem.values.length > 0\">\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortItem\">\n </filter-item>\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortDirectionItem\">\n </filter-item>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <fs-filter-drawer-actions \n class=\"filter-actions\"\n *ngIf=\"(externalParams.pending$ | async) !== true\"\n (clear)=\"clear()\"\n (done)=\"done()\">\n </fs-filter-drawer-actions>\n </div>\n</div>\n<div class=\"backdrop\" *ngIf=\"!windowDesktop\" (click)=\"backdropClick()\"></div>\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nimport {\n FsFilterAction, FsFilterActionClickFn, FsFilterActionShowFn,\n IFsFilterMenuActionGroupItem,\n IFsFilterMenuActionItem, IFsFilterMenuActionLink,\n} from '../interfaces/action.interface';\n\n\nexport class ActionMenuItem {\n\n public icon: string;\n public label: string;\n public click: FsFilterActionClickFn;\n public routerLink: IFsFilterMenuActionLink;\n public items: ActionMenuItem[] = [];\n\n private _isGroup = false;\n private _showFn: FsFilterActionShowFn;\n private _visible$ = new BehaviorSubject<boolean>(true);\n private _disabled$ = new BehaviorSubject<boolean>(false);\n\n constructor(\n config: FsFilterAction = {},\n private _parent?: ActionMenuItem,\n ) {\n this._init(config);\n }\n\n public get isGroup(): boolean {\n return this._isGroup;\n }\n\n public get visible(): boolean {\n return this._visible$.getValue();\n }\n\n public get visible$(): Observable<boolean> {\n return this._visible$.asObservable();\n }\n\n public set disabled(value: boolean) {\n this._disabled$.next(value);\n }\n\n public get disabled(): boolean {\n return this._disabled$.getValue();\n }\n\n public get disabled$(): Observable<boolean> {\n return this._disabled$.asObservable();\n }\n\n public updateVisibility(): void {\n const visible = this._showFn ? this._showFn() : true;\n\n if (!visible || !this.isGroup) {\n this._visible$.next(visible);\n\n return;\n }\n\n const numberOfVisibleChildren = this.items\n .reduce((acc, item) => {\n item.updateVisibility();\n\n if (item.visible) {\n acc++;\n }\n\n return acc;\n }, 0);\n\n this._visible$.next(!!numberOfVisibleChildren);\n }\n\n private _init(config: IFsFilterMenuActionGroupItem | IFsFilterMenuActionItem) {\n this.label = config.label;\n this.icon = config.icon;\n this._showFn = config.show;\n\n if ('items' in config) {\n this._isGroup = true;\n\n if (Array.isArray(config.items)) {\n this.items = config\n .items\n .map((item) => new ActionMenuItem(item, this));\n }\n\n this.updateVisibility();\n } else {\n this.click = config.click;\n this.routerLink = config.link;\n\n if (!this._parent) {\n this.updateVisibility();\n }\n }\n }\n}\n","import { ThemePalette } from '@angular/material/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { ActionMode } from '../enums/action-mode.enum';\nimport { ActionType } from '../enums/action-type.enum';\nimport {\n FsFilterAction,\n FsFilterActionClickFn,\n FsFilterActionDisabledFn,\n FsFilterActionShowFn,\n FsFilterFileActionErrorFn,\n FsFilterFileActionSelectFn,\n IFsFilterFileAction,\n IFsFilterSelectButtonAction,\n} from '../interfaces/action.interface';\n\nimport { ActionMenuItem } from './action-menu-item.model';\nimport { FsFilterConfig } from './filter-config';\n\n\nexport class Action {\n\n public primary = true;\n public icon: string;\n public iconPlacement: 'left' | 'right';\n public label: string;\n public value: any;\n public menu: boolean;\n public color: ThemePalette;\n public customize: boolean;\n public className: string;\n public click: FsFilterActionClickFn;\n public type: ActionType;\n public tabIndex: number;\n public fileSelected: FsFilterFileActionSelectFn;\n public fileError: FsFilterFileActionErrorFn;\n public multiple: boolean;\n public accept: string;\n public tooltip: string;\n public minWidth: number;\n public minHeight: number;\n public maxWidth: number;\n public maxHeight: number;\n public imageQuality: number;\n public change: (value: any) => void;\n public values: any[];\n public mode: ActionMode;\n public isReorderAction = false;\n public deselect = false;\n public classArray: string[] = [];\n public items: ActionMenuItem[] = [];\n\n private _visible$ = new BehaviorSubject<boolean>(true);\n private _disabled$ = new BehaviorSubject<boolean>(false);\n private _showFn: FsFilterActionShowFn;\n private _disabledFn: FsFilterActionDisabledFn;\n\n constructor(filterConfig: FsFilterConfig, actionConfig: FsFilterAction = {}) {\n this._init(filterConfig, actionConfig);\n }\n\n public get visible(): boolean {\n return this._visible$.getValue();\n }\n\n public get visible$(): Observable<boolean> {\n return this._visible$.asObservable();\n }\n\n public set disabled(value: boolean) {\n this._disabled$.next(value);\n }\n\n public get disabled(): boolean {\n return this._disabled$.getValue();\n }\n\n public get disabled$(): Observable<boolean> {\n return this._disabled$.asObservable();\n }\n\n public updateVisibility(): void {\n const visible = this._showFn ? this._showFn() : true;\n\n if (!visible || this.mode !== ActionMode.Menu) {\n this._visible$.next(visible);\n\n return;\n }\n\n const hasVisibleChildren = this.items.some((item) => item.visible);\n this._visible$.next(hasVisibleChildren);\n }\n\n public updateDisabledState(): void {\n if (this._disabledFn) {\n this.disabled = this._disabledFn();\n }\n }\n\n private _init(filterConfig: FsFilterConfig, config: FsFilterAction = {}): void {\n config.mode = config.mode ?? ActionMode.Button;\n this._initCore(filterConfig, config);\n \n switch (config.mode) {\n case ActionMode.Button: {\n this.customize = config.customize;\n this.click = config.click ?? (() => { \n // do nothing\n });\n this._disabledFn = config.disabled;\n\n this.updateDisabledState();\n } break;\n\n case ActionMode.Menu: {\n if (config.items && Array.isArray(config.items)) {\n this.items = config.items.map((item) => new ActionMenuItem(item));\n }\n } break;\n\n case ActionMode.SelectButton: {\n this._initSelectButton(config);\n } break;\n\n case ActionMode.File: {\n this._initFile(config);\n } break;\n }\n\n this.updateVisibility();\n }\n\n private _initCore(filterConfig: FsFilterConfig, config: FsFilterAction): void {\n this.primary = config.primary ?? true;\n this.color = config.color;\n this.tooltip = config.tooltip;\n this.label = config.label;\n this.mode = config.mode;\n this.icon = config.icon;\n this.iconPlacement = config.iconPlacement;\n this._showFn = config.show;\n this.tabIndex = config.tabIndex ?? 0;\n this.menu = config.menu;\n\n if (!this.type) {\n this.type = (config.type || (filterConfig.button?.style as any) || ActionType.Raised);\n\n if (this.type === ActionType.Stroked && this.primary) {\n this.type = ActionType.Flat;\n }\n }\n\n if (config.className) {\n this.className = config.className;\n this.classArray = this.className\n .split(' ');\n }\n\n if (this.primary) {\n this.color = 'primary';\n }\n\n }\n\n private _initSelectButton(config: IFsFilterSelectButtonAction): void {\n this.values = config.values;\n this.value = config.default;\n this.change = config.change;\n this.deselect = config.deselect ?? false;\n }\n\n private _initFile(config: IFsFilterFileAction): void {\n this.fileSelected = config.select;\n this.fileError = config.error;\n this.accept = config.accept;\n this.imageQuality = config.imageQuality;\n this.minWidth = config.minWidth;\n this.minHeight = config.minHeight;\n this.maxWidth = config.maxWidth;\n this.maxHeight = config.maxHeight;\n this.click = config.click ?? (() => { \n //\n });\n this._disabledFn = config.disabled;\n\n if ((config).multiple !== undefined) {\n this.multiple = (config).multiple;\n }\n\n this.updateDisabledState();\n }\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { skip, takeUntil } from 'rxjs/operators';\n\nimport { FsFilterAction } from '../interfaces/action.interface';\nimport { Action } from '../models/action.model';\nimport { FsFilterConfig } from '../models/filter-config';\n\n\n@Injectable()\nexport class ActionsController implements OnDestroy {\n\n private _visible$ = new BehaviorSubject(false);\n private _actions$ = new BehaviorSubject<Action[]>([]);\n private _menuActions$ = new BehaviorSubject<Action[]>([]);\n private _destroy$ = new Subject<void>();\n private _config: FsFilterConfig;\n\n private readonly _mobileMedia = '(max-width: 799px)';\n private _allActions: Action[] = [];\n private _reorderAction: Action;\n\n constructor(\n private _breakpointObserver: BreakpointObserver,\n ) {\n this._listenMobileMedia();\n }\n\n public get menuActions(): Action[] {\n return this._menuActions$.value;\n }\n\n public get actions(): Action[] {\n return this._actions$.value;\n }\n\n public get actions$(): Observable<Action[]> {\n return this._actions$.asObservable();\n }\n\n public get menuActions$(): Observable<Action[]> {\n return this._menuActions$.asObservable();\n }\n\n public get visible$(): Observable<boolean> {\n return this._visible$.asObservable();\n }\n\n public get mobileMode(): boolean {\n return this._breakpointObserver.isMatched(this._mobileMedia);\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public setConfig(config: FsFilterConfig) {\n this._config = config;\n this.initActions(config.actions);\n }\n\n public initActions(rawActions: FsFilterAction[]) {\n if (!rawActions || !Array.isArray(rawActions)) {\n return;\n }\n\n this.show();\n\n this._allActions = rawActions\n .map((action) => new Action(this._config, action));\n\n if (this._reorderAction) {\n this._allActions.unshift(this._reorderAction);\n }\n\n this._classifyActions();\n }\n\n public show() {\n this._visible$.next(true);\n }\n\n public hide() {\n this._visible$.next(false);\n }\n\n public addReorderAction(action: Action) {\n this._allActions.unshift(action);\n\n action.isReorderAction = true;\n\n this._classifyAction(action);\n this._reorderAction = action;\n }\n\n public clearActions() {\n this._allActions = [];\n this._setActions([]);\n this._setKebabActions([]);\n }\n\n public updateActionsVisibility() {\n this._allActions.forEach((action) => action.updateVisibility());\n this._classifyActions();\n }\n\n public updateDisabledState() {\n this.actions.forEach((action) => action.updateDisabledState())\n }\n\n private _setKebabActions(actions: Action[]) {\n this._menuActions$.next(actions);\n }\n\n private _setActions(actions: Action[]) {\n this._actions$.next(actions);\n }\n\n private _classifyActions() {\n const kebabActions = [];\n const actions = [];\n const mobileMode = this.mobileMode;\n\n this._allActions\n .filter((action) => {\n return action.visible;\n })\n .forEach((action) => {\n if (action.menu !== false && (action.menu || mobileMode)) {\n kebabActions.push(action);\n } else {\n actions.push(action);\n }\n });\n\n this._setKebabActions(kebabActions);\n this._setActions(actions);\n }\n\n private _classifyAction(action: Action) {\n if (action.menu) {\n this._setKebabActions([...this.menuActions, action]);\n } else {\n this._setActions([...this.actions, action]);\n }\n }\n\n private _listenMobileMedia() {\n this._breakpointObserver.observe(this._mobileMedia)\n .pipe(\n skip(1),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._classifyActions();\n })\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface FsFilterMeta {\n openedFilters: number;\n}\n\nexport const FS_FILTER_META =\n new InjectionToken<FsFilterMeta>('fs.filter.meta',\n {\n providedIn: 'root',\n factory: () => {\n return {\n openedFilters: 0,\n };\n }\n }\n );\n","import { Inject, Injectable, Injector, OnDestroy } from '@angular/core';\n\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, PortalInjector } from '@angular/cdk/portal';\n\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { HtmlClassRenderer } from '@firestitch/html';\n\nimport { FilterDrawerComponent } from '../components/filter-drawer/filter-drawer.component';\nimport { FILTER_DRAWER_DATA } from '../injectors/filter-drawer-data';\nimport { FILTER_DRAWER_OVERLAY } from '../injectors/filter-drawer-overlay';\nimport { FS_FILTER_META, FsFilterMeta } from '../providers/filter-meta';\n\nimport { FocusControllerService } from './focus-controller.service';\n\n\n@Injectable()\nexport class FsFilterOverlayService implements OnDestroy {\n\n public detach$ = new Subject();\n public attach$ = new Subject();\n\n private _clearFn: Function;\n private _doneFn: Function;\n\n private _destroy$ = new Subject();\n private _overlayRef: OverlayRef;\n\n constructor(\n @Inject(FS_FILTER_META) private _filterMeta: FsFilterMeta,\n private _injector: Injector,\n private _overlay: Overlay,\n private _focusController: FocusControllerService,\n private _htmlClassRenderer: HtmlClassRenderer,\n ) {\n this._openWhenChipClicked();\n }\n\n public get isOpened() {\n return !!this._overlayRef;\n }\n\n public setClearFn(fn: Function) {\n this._clearFn = fn;\n }\n\n public setDoneFn(fn: Function) {\n this._doneFn = fn;\n }\n\n public close() {\n if (this._overlayRef) {\n this._overlayRef.detach();\n this._overlayRef = null;\n\n this._removeFilterClass();\n }\n }\n\n public open() {\n this._overlayRef = this._createOverlay();\n\n this._overlayRef.backdropClick()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._overlayRef.detach();\n });\n\n this._overlayRef.detachments()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.detach$.next();\n });\n\n this._overlayRef.attachments()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.attach$.next();\n });\n\n this._addFilterClass();\n\n return this._openPortalPreview();\n }\n\n public ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n private _createOverlay() {\n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'fs-filter-backdrop',\n });\n\n return this._overlay.create(overlayConfig);\n }\n\n private _openPortalPreview() {\n const data = {\n done: this._doneFn,\n clear: this._clearFn,\n };\n const injector = this._createInjector(this._injector, data, this._overlayRef);\n const containerPortal = new ComponentPortal(FilterDrawerComponent, undefined, injector);\n const containerRef = this._overlayRef.attach<FilterDrawerComponent>(containerPortal);\n\n return containerRef.instance;\n }\n\n private _createInjector(parentInjector, data, overlayRef) {\n const injectionTokens = new WeakMap<any, any>([\n [FILTER_DRAWER_DATA, data],\n [FILTER_DRAWER_OVERLAY, overlayRef],\n ]);\n\n return new PortalInjector(parentInjector, injectionTokens);\n }\n\n private _removeFilterClass() {\n this._filterMeta.openedFilters--;\n\n if (this._filterMeta.openedFilters === 0) {\n this._htmlClassRenderer.removeClass('fs-filter-open');\n }\n }\n\n private _addFilterClass() {\n this._filterMeta.openedFilters++;\n\n if (this._filterMeta.openedFilters === 1) {\n this._htmlClassRenderer.addClass('fs-filter-open');\n }\n }\n\n private _openWhenChipClicked(): void {\n this._focusController.focusOn$\n .pipe(\n filter((v) => !!v),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n if (!this.isOpened) {\n this.open();\n }\n });\n }\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n\n@Directive({\n selector: '[fsFilterStatusBar]',\n})\nexport class FilterStatusBarDirective {\n\n public constructor(\n public templateRef: TemplateRef<any>,\n ) { }\n\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_FILTER_CONFIG = new InjectionToken<any>('fs.filter-config');\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { MatInput } from '@angular/material/input';\n\nimport { BehaviorSubject, combineLatest, fromEvent, interval, Observable, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';\n\nimport { ActionsController } from '../../classes/actions-controller';\nimport { objectsAreEquals } from '../../helpers/compare';\nimport { IFilterSavedFilter, ISortingChangeEvent } from '../../interfaces';\nimport { FsFilterAction } from '../../interfaces/action.interface';\nimport { FilterConfig, FilterSort, IFilterConfigItem, SortItem } from '../../interfaces/config.interface';\nimport { IUpdateFilterItemConfig } from '../../interfaces/update-filter-item.interface';\nimport { FsFilterConfig } from '../../models/filter-config';\nimport { BaseItem } from '../../models/items/base-item';\nimport { TextItem } from '../../models/items/text-item';\nimport { ExternalParamsController } from '../../services/external-params-controller.service';\nimport { PersistanceParamsController } from '../../services/external-params/persistance-params-controller.service';\nimport { QueryParamsController } from '../../services/external-params/query-params-controller.service';\nimport { SavedFiltersController } from '../../services/external-params/saved-filters-controller.service';\nimport { FsFilterOverlayService } from '../../services/filter-overlay.service';\nimport { FocusControllerService } from '../../services/focus-controller.service';\nimport { FsFilterItemsStore } from '../../services/items-store.service';\n\nimport { FilterStatusBarDirective } from './../../directives/status-bar/status-bar.directive';\nimport { FS_FILTER_CONFIG } from './../../injectors/filter-config';\n\n\n@Component({\n selector: 'fs-filter',\n styleUrls: ['./filter.component.scss'],\n templateUrl: './filter.component.html',\n providers: [\n FsFilterOverlayService,\n ExternalParamsController,\n PersistanceParamsController,\n QueryParamsController,\n FocusControllerService,\n FsFilterItemsStore,\n SavedFiltersController,\n ActionsController,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterComponent implements OnInit, OnDestroy {\n\n @Input('config')\n public set setConfig(config) {\n this._initFilterWithConfig(config);\n }\n\n @Input('filter')\n public set setFilter(config) {\n this._initFilterWithConfig(config);\n }\n\n @Input() public showSortBy: any = true;\n @Input() public showFilterInput = true;\n @Output() public closed = new EventEmitter<any>();\n @Output() public opened = new EventEmitter<any>();\n @Output() public ready = new EventEmitter<void>();\n\n @ContentChild(FilterStatusBarDirective)\n public statusBar: FilterStatusBarDirective;\n\n @ViewChild('keywordMatInput', { read: MatInput })\n public keywordMatInput: MatInput;\n\n @ViewChild('reloadEl', { read: ElementRef })\n public reloadEl: ElementRef;\n\n @HostBinding('class.filters-open')\n public showFilterMenu = false;\n\n @HostBinding('class.window-desktop')\n public windowDesktop = false;\n\n @HostBinding('class.fs-filter')\n public fsFilterClass = true;\n\n @HostBinding('class.has-keyword')\n public get hasKeyword() {\n return this._filterItems.hasKeyword;\n }\n\n public searchPlaceholder = 'Search';\n public keyword = '';\n public autoReload = true;\n\n protected _config: FsFilterConfig = null;\n\n private _sort: FilterSort;\n private _filtersBtnVisible$ = new BehaviorSubject(true);\n private _keywordVisible$ = new BehaviorSubject(true);\n private _hasFilterChips$ = new BehaviorSubject(false);\n private _keyword$ = new Subject();\n private _destroy$ = new Subject<void>();\n\n constructor(\n @Optional() @Inject(FS_FILTER_CONFIG) private _defaultConfig: FsFilterConfig,\n private _filterOverlay: FsFilterOverlayService,\n private _zone: NgZone,\n private _externalParams: ExternalParamsController,\n private _filterItems: FsFilterItemsStore,\n private _actions: ActionsController,\n private _savedFiltersController: SavedFiltersController,\n private _externalParamsController: ExternalParamsController,\n ) {\n this._filterItems.filter = this;\n this._listenWhenFilterReady();\n this._updateWindowWidth();\n\n this._filterOverlay.attach$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.showFilterMenu = true;\n });\n\n this._filterOverlay.detach$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.showFilterMenu = false;\n });\n\n this._listenWindowResize();\n }\n\n public get config(): FsFilterConfig {\n return this._config;\n }\n\n public get filterParams() {\n return this._filterItems.values();\n }\n\n public get filterParamsQuery(): Record<string, unknown> {\n return this._filterItems.valuesAsQuery();\n }\n\n public get items() {\n return this._filterItems.items;\n }\n\n public get visibleItems() {\n return this._filterItems.visibleItems;\n }\n\n public get keywordItem(): TextItem | null {\n return this._filterItems.keywordItem;\n }\n\n public get itemsReady$(): Observable<boolean> {\n return this._filterItems.ready$;\n }\n\n public get hasFilterChips$(): Observable<boolean> {\n return this._hasFilterChips$.asObservable();\n }\n\n public get hasVisibleItemOrSorting(): boolean {\n return this.visibleItems.length > 0 || !!this._filterItems.sortByItem;\n }\n\n public get filtersBtnVisible$(): Observable<boolean> {\n return this._filtersBtnVisible$.asObservable();\n }\n\n public get keywordVisible$(): Observable<boolean> {\n return this._keywordVisible$.asObservable();\n }\n\n public get actionsVisible$() {\n return this._actions.visible$;\n }\n\n public get actions$() {\n return this._actions.actions$;\n }\n\n public get menuActions$() {\n return this._actions.menuActions$;\n }\n\n public set activeSavedFilter(savedFilter: IFilterSavedFilter) {\n this._externalParams.setActiveSavedFilter(savedFilter);\n }\n\n public get activeSavedFilter(): IFilterSavedFilter {\n return this._savedFiltersController.activeFilter;\n }\n\n public get savedFilters(): IFilterSavedFilter[] {\n return this._savedFiltersController.savedFilters;\n }\n\n public ngOnInit() {\n // Avoid ngChanges error\n setTimeout(() => {\n if (this.config.autofocus) {\n this.focus();\n }\n });\n\n this._initAutoReload();\n this._listenInputChanges();\n this._listenInternalItemsChange();\n this._initOverlay();\n }\n\n public ngOnDestroy() {\n this._destroyFilterDrawer();\n\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public focus() {\n this.keywordMatInput?.focus();\n }\n\n public updateSort(sort: ISortingChangeEvent) {\n this._filterItems.updateSort(sort);\n }\n\n /**\n *\n * Do update value of some field\n *\n * @param values - values for update\n *\n * To update text value just pass new text value\n *\n * public updateSelectValue(val) {\n * this.filterEl.updateValues({ keyword: val });\n * }\n *\n * To update select or observable select you could pass suitable value\n *\n * public updateSelectValue(val: number) {\n * this.filterEl.updateValues({ simple_select: val }, { observable_select: val });\n * }\n *\n * To update checkbox value just pass true/false as value\n *\n * public updateCheckox(val: boolean) {\n * this.filterEl.updateValues({ checkbox: val });\n * }\n *\n * To update range value just pass object with min&max object or just with one of targets\n *\n * Ex.: { min: 10, max 15 }, { min: 5 }, { max 5 }\n *\n * public updateRange(val) {\n * this.filterEl.updateValues({ range: val });\n * }\n *\n * To update autocomplete just pass object with name/value fields\n *\n * Ex.: { name: 'John Doe', value: 1 }\n *\n * public updateAutocomplete(val) {\n * this.filterEl.updateValues({ autocomplete_user_id: val });\n * }\n *\n * To update autocompletechips just pass:\n *\n * 1) object with name/value fields - will be appended to existing set of values\n *\n * { name: 'John Doe', value: 1 }\n *\n * 2) array of objects - will be appended to existing set of values\n *\n * [{ name: 'John Doe', value: 1 }, { name: 'Darya Filipova', value: 2 }]\n *\n * 3) null - clear existing set of values\n *\n * public updateAutocomplete(val) {\n * this.filterEl.updateValues({ autocompletechips_user_id: val });\n * }\n *\n */\n public updateValues(values) {\n Object.keys(values).forEach((key) => {\n const filterItem = this.items\n .find((item) => item.name === key);\n\n if (!filterItem) {\n return;\n }\n\n filterItem.model = values[key];\n });\n }\n\n public hide() {\n this.changeVisibility(false);\n }\n\n public show() {\n this.changeVisibility(true);\n }\n\n public changeVisibilityClick(value, event = null) {\n\n if (event) {\n event.stopPropagation();\n }\n\n this.changeVisibility(value);\n }\n\n public get itemValues(): any[] {\n return this.items\n .map((item) => item.value);\n }\n\n public get nonEmptyItemValues(): any[] {\n return this.items\n .filter((item) => item.value !== undefined)\n .map((item) => item.value);\n }\n\n public get hasItemValues(): boolean {\n return this.items\n .some((item) => item.value !== undefined);\n }\n\n public getItemValue(name: string) {\n const item = this.items\n .find((_item) => _item.name === name);\n\n return item?.value;\n }\n\n public showItem(name: string) {\n const item = this.getItem(name);\n\n if (item) {\n item.hide = false;\n\n this._filterItems.updateItemsVisiblity();\n }\n }\n\n public hideItem(name: string) {\n const item = this.getItem(name);\n\n if (!item) {\n return;\n }\n\n item.hide = true;\n\n this._filterItems.updateItemsVisiblity();\n }\n\n public clearItem(name: string) {\n const item = this.getItem(name);\n\n if (!item) {\n return;\n }\n\n item.clear();\n }\n\n public updateItemConfig(\n name: string,\n params: IUpdateFilterItemConfig,\n ): void {\n const item = this.getItem(name);\n\n if (!item) {\n return;\n }\n\n item.label = params.label ?? item.label;\n item.chipLabel = params.chipLabel ?? item.chipLabel;\n\n this._filterItems.updateItemsVisiblity();\n }\n\n public getItemValueChange$(name: string): Observable<any> | null {\n const item = this.items.find((i) => i.name === name);\n\n if (item) {\n return item.value$\n .pipe(\n map(() => {\n return item.model;\n }),\n );\n }\n\n return null;\n\n }\n\n public changeVisibility(state: boolean) {\n if (state === this.showFilterMenu) {\n return;\n }\n\n if (!state) {\n this.closed.emit();\n\n return this._destroyFilterDrawer();\n }\n\n if (!this.hasVisibleItemOrSorting) {\n return;\n }\n\n this._listenEscButton();\n\n this.opened.emit();\n\n this._filterOverlay.open();\n }\n\n public init() {\n const data = this._filterItems.valuesAsQuery();\n this._sort = this._filterItems.getSort();\n\n if (this.config.init) {\n this.config.init(data, this._sort, this);\n }\n\n this._updateChipsVisibility();\n\n this.items\n .forEach((item) => {\n item.init(item, this);\n });\n }\n\n public clear(event = null) {\n if (event) {\n event.stopPropagation();\n }\n\n this._filterItems.filtersClear();\n\n if (this.config.clear) {\n this.config.clear();\n }\n\n this.keyword = '';\n }\n\n /**\n * Close filter window and do change callback\n */\n public search(event) {\n this.changeVisibilityClick(false, event);\n }\n\n public reload(event = null) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const data = this._filterItems.valuesAsQuery();\n const el = this.reloadEl?.nativeElement;\n\n if(el) {\n el.style.transition = 'all 0.75s 0.0s';\n el.style.transform = 'rotate(360deg)';\n\n setTimeout(() => {\n el.style.transition = null;\n el.style.transform = null;\n }, 1000);\n }\n\n if (this.config.reload) {\n this.config.reload(data, this._filterItems.getSort());\n }\n }\n\n public getItem(name): BaseItem<any> {\n return this.items\n .find((item) => item.name === name);\n }\n\n public fetchQueryParams(): void {\n this._externalParams.fetchQueryParams();\n }\n\n /**\n * Call change callback and apply new filter values\n */\n public change() {\n const data = this._filterItems.valuesAsQuery();\n const sort = this._filterItems.getSort();\n\n const sortingChanged = ((!sort || !this._sort) && sort !== this._sort)\n || (sort && this._sort && !objectsAreEquals(this._sort, sort));\n\n if (sortingChanged) {\n this._sort = sort;\n\n if (this.config.sortChange) {\n this.config.sortChange(data, sort);\n }\n }\n\n if (this.config.change) {\n this.config.change(data, sort);\n }\n\n this._updateChipsVisibility();\n\n // visibility for actions can depend on filters state\n this._actions.updateActionsVisibility();\n }\n\n /**\n * Update filter actions config\n *\n * @param actions\n */\n public updateActions(actions: FsFilterAction[]): void {\n this._actions.initActions(actions);\n }\n\n /**\n * Show \"Filters\" button\n */\n public showFiltersBtn(): void {\n this._filtersBtnVisible$.next(true);\n }\n\n /**\n * Hide \"Filters\" button\n */\n public hideFiltersBtn(): void {\n this._filtersBtnVisible$.next(false);\n }\n\n /**\n * Show \"Keyword\" field if it present\n */\n public showKeywordField(): void {\n this._keywordVisible$.next(true);\n }\n\n /**\n * Hide \"Keyword\" field if it present\n */\n public hideKeywordField(): void {\n this._keywordVisible$.next(false);\n }\n\n /**\n * Go through actions and check show() callback and update visible actions\n */\n public updateActionsVisibility(): void {\n this._actions.updateActionsVisibility();\n }\n\n /**\n * Go through actions and check disabled() callback and update disabled state\n */\n public updateDisabledState(): void {\n this._actions.updateDisabledState();\n }\n\n public setItems(items: IFilterConfigItem[]) {\n this._filterItems.destroyItems();\n\n this.config.items = items;\n this._filterItems.setConfig(this._config);\n this._externalParams.initItems();\n\n this._syncSearchInputWithKeyword();\n }\n\n public keywordChange(keyword) {\n this._keyword$.next(keyword);\n }\n\n public updateSortings(items: SortItem[]): void {\n this._filterItems.updateSortingItemsValues(items);\n }\n\n private _initFilterWithConfig(config: FilterConfig) {\n if (this.config) {\n this._filterItems.destroyItems();\n }\n\n config = {\n ...(this._defaultConfig || {}),\n ...config,\n };\n\n this._config = new FsFilterConfig(config);\n this._actions.setConfig(this._config);\n this._filterItems.setConfig(this._config);\n this._externalParams.setConfig(this._config);\n\n this._syncSearchInputWithKeyword();\n\n if (this.config.reloadWhenConfigChanged) {\n this.change();\n }\n }\n\n private _destroyFilterDrawer() {\n this._filterOverlay.close();\n }\n\n private _updateWindowWidth() {\n this.windowDesktop = window.innerWidth > 1200;\n }\n\n private _listenEscButton() {\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'keyup')\n .pipe(\n filter((event: KeyboardEvent) => event.code === 'Escape'),\n takeUntil(this.closed),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._zone.run(() => {\n this.changeVisibility(false);\n });\n });\n });\n }\n\n private _listenWindowResize() {\n this._zone.runOutsideAngular(() => {\n fromEvent(window, 'resize')\n .pipe(\n debounceTime(100),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._zone.run(() => {\n this._updateWindowWidth();\n });\n });\n });\n }\n\n private _initAutoReload() {\n if(this.config.autoReload) {\n interval(this.config.autoReload.seconds * 1000)\n .pipe(\n filter(() => this.autoReload),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.reload(null);\n });\n }\n }\n\n private _listenInputChanges() {\n this._keyword$\n .pipe(\n debounceTime(200),\n distinctUntilChanged(),\n takeUntil(this._destroy$),\n )\n .subscribe((value) => {\n const keywordItem = this._filterItems.keywordItem;\n keywordItem.model = value;\n this.change();\n });\n }\n\n private _syncSearchInputWithKeyword(): void {\n const keywordItem = this._filterItems.keywordItem;\n if (keywordItem) {\n this.keyword = keywordItem.model;\n this.searchPlaceholder = keywordItem.label as string || 'Search';\n }\n }\n\n private _listenInternalItemsChange() {\n this._filterItems\n .itemsChange$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.change();\n });\n }\n\n private _initOverlay() {\n this._filterOverlay.setClearFn(this.clear.bind(this));\n this._filterOverlay.setDoneFn(this.hide.bind(this));\n }\n\n // We may need some time to recieve external params and after that ready can be emitted\n private _listenWhenFilterReady() {\n combineLatest(\n [\n this._externalParams.pending$,\n this.itemsReady$,\n ])\n .pipe(\n filter(([pendingParams, itemsReady]) => !pendingParams && itemsReady),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.init();\n this._syncSearchInputWithKeyword();\n\n this.ready.emit();\n });\n }\n\n private _updateChipsVisibility() {\n const hasFilterChips = this._filterItems.items\n .some((item: BaseItem<any>) => {\n return item.isChipVisible;\n });\n\n this._hasFilterChips$.next(hasFilterChips);\n }\n}\n","<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"statusBar\">\n <div class=\"filter-status-container\" [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div class=\"filter-status\" #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async) && !keywordItem?.hide \">\n <mat-form-field\n [floatLabel]=\"'never'\"\n class=\"form-field-padless\"\n [ngClass]=\"search\"\n appearance=\"outline\">\n <span matPrefix>\n <mat-icon matPrefix>search</mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n\n<ng-template #filterToolbar>\n <div class=\"filter-toobar\">\n <ng-container *ngIf=\"filtersBtnVisible$ | async\">\n <ng-container *ngIf=\"hasVisibleItemOrSorting\">\n <a\n mat-button\n class=\"filters-button\"\n [ngClass]=\"{\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\n 'mat-button': config.button.style === 'basic' && config.button.label,\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label\n }\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n <mat-icon *ngIf=\"config.button.icon\">{{config.button.icon}}</mat-icon>\n {{ config.button.label }}\n </a>\n </ng-container>\n </ng-container> \n <ng-container *ngIf=\"config.reload\">\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"reload\">\n <mat-icon #reloadEl>refresh</mat-icon>\n </a>\n </ng-container>\n <ng-container *ngIf=\"config.autoReload\">\n <mat-slide-toggle \n name=\"autoReload\" \n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n Auto refresh\n </mat-slide-toggle>\n </ng-container>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, } from '@angular/core';\n\n@Component({\n selector: 'filter-item-select-backdrop',\n styleUrls: ['./backdrop.component.scss'],\n templateUrl: './backdrop.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectBackdropComponent {\n constructor() {}\n}\n","","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n} from '@angular/core';\n\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nimport { FilterRemoteOrder, IFilterSavedFilter } from '../../../interfaces/saved-filters.interface';\nimport { SavedFiltersController } from '../../../services/external-params/saved-filters-controller.service';\n\n\n@Component({\n templateUrl: './saved-filter-manage.component.html',\n styleUrls: ['./saved-filter-manage.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsFilterSavedFilterManageComponent {\n\n public savedFilters: IFilterSavedFilter[];\n\n private _savedFiltersController: SavedFiltersController;\n private _filterRemoteOrder: FilterRemoteOrder;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data,\n private _cdRef: ChangeDetectorRef,\n ) {\n this._savedFiltersController = this.data.savedFiltersController;\n this.savedFilters = [...this._savedFiltersController.savedFilters];\n }\n\n public remove(savedFilter: IFilterSavedFilter) {\n this._savedFiltersController.delete(savedFilter)\n .subscribe(() => {\n this.savedFilters = [...this._savedFiltersController.savedFilters];\n this._cdRef.markForCheck();\n });\n }\n\n public drop(event: CdkDragDrop<any[]>) {\n moveItemInArray(this.savedFilters, event.previousIndex, event.currentIndex);\n\n this._savedFiltersController.order(this.savedFilters)\n .subscribe();\n }\n\n}\n","<h1 mat-dialog-title>\n Manage saved filters\n</h1>\n<div mat-dialog-content>\n <div\n cdkDropList \n [cdkDropListData]=\"savedFilters\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"drop($event)\"> \n <ng-container \n *ngFor=\"let savedFilter of savedFilters\">\n <div class=\"chip-container\">\n <fs-chip \n cdkDrag\n (removed)=\"remove(savedFilter)\">\n {{savedFilter.name}}\n </fs-chip>\n </div>\n </ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button \n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Output,\n} from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { Observable } from 'rxjs';\n\nimport { IFilterSavedFilter } from '../../../interfaces/saved-filters.interface';\nimport { ExternalParamsController } from '../../../services/external-params-controller.service';\nimport { SavedFiltersController } from '../../../services/external-params/saved-filters-controller.service';\nimport { FsFilterItemsStore } from '../../../services/items-store.service';\nimport { FsFilterSavedFilterManageComponent } from '../saved-filter-manage';\n\n\n@Component({\n selector: 'fs-filter-saved-filters-menu',\n templateUrl: './saved-filters-menu.component.html',\n styleUrls: ['./saved-filters-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsSavedFiltersMenuComponent {\n\n @Output()\n public clear = new EventEmitter<void>();\n\n constructor(\n private _itemsStore: FsFilterItemsStore,\n private _externalParams: ExternalParamsController,\n private _savedFilters: SavedFiltersController,\n private _dialog: MatDialog,\n ) {}\n\n public get filters$(): Observable<IFilterSavedFilter[]> {\n return this._savedFilters.savedFilters$;\n }\n\n public get activeFilter$(): Observable<IFilterSavedFilter> {\n return this._savedFilters.activeFilter$;\n }\n\n public selectFilter(savedFilter: IFilterSavedFilter): void {\n this._externalParams.setActiveSavedFilter(savedFilter);\n }\n\n public removeActiveFilter(): void {\n this._itemsStore.filtersClear();\n this._externalParams.setActiveSavedFilter(null);\n\n this.clear.emit();\n }\n\n public manageFilters(): void {\n this._dialog.open(FsFilterSavedFilterManageComponent, {\n data: {\n savedFiltersController: this._savedFilters,\n },\n });\n }\n}\n","<a [fsMenuTriggerFor]=\"menu\" class=\"selector\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\n\n<fs-menu #menu>\n <ng-container *ngIf=\"activeFilter$ | async\">\n <ng-template fs-menu-item (click)=\"removeActiveFilter()\">\n None\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"(filters$ | async).length !==0\">\n <ng-container *ngFor=\"let filter of filters$ | async\">\n <ng-template fs-menu-item (click)=\"selectFilter(filter)\">\n {{ filter.name }}\n </ng-template>\n </ng-container>\n <ng-template fs-menu-divider-item></ng-template>\n </ng-container>\n <ng-template \n fs-menu-item \n class=\"saved-filter-last-item\" \n (click)=\"manageFilters()\">\n Manage\n </ng-template>\n</fs-menu>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { FsAutocompleteModule } from '@firestitch/autocomplete';\nimport { FsAutocompleteChipsModule } from '@firestitch/autocomplete-chips';\nimport { FsChipModule } from '@firestitch/chip';\nimport { FsClearModule } from '@firestitch/clear';\nimport { FsCommonModule } from '@firestitch/common';\nimport { FsDatePickerModule } from '@firestitch/datepicker';\nimport { FsFileModule } from '@firestitch/file';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsMenuModule } from '@firestitch/menu';\nimport { FsPopoverModule } from '@firestitch/popover';\nimport { FsScrollModule } from '@firestitch/scroll';\nimport { FsSelectButtonModule } from '@firestitch/selectbutton';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsStore, FsStoreModule } from '@firestitch/store';\n\nimport { FsFilterActionButtonComponent } from './components/action-button/action-button.component';\nimport { FsFilterActionKebabActionsComponent } from './components/action-kebab-actions/action-kebab-actions.component';\nimport { FsFilterActionsComponent } from './components/actions/actions.component';\nimport { FsFilterChipContentComponent } from './components/filter-chip-content/filter-chip-content.component';\nimport { FsFilterChipComponent } from './components/filter-chip/filter-chip.component';\nimport { FsFilterChipsComponent } from './components/filter-chips/filter-chips.component';\nimport { FsFilterDrawerActionsComponent } from './components/filter-drawer-actions/filter-drawer-actions.component';\nimport { FilterDrawerComponent } from './components/filter-drawer/filter-drawer.component';\nimport { FilterComponent } from './components/filter/filter.component';\nimport { AutocompleteComponent } from './components/filters-item/autocomplete/autocomplete.component';\nimport { AutocompletechipsComponent } from './components/filters-item/autocompletechips/autocompletechips.component';\nimport { BaseItemComponent } from './components/filters-item/base-item/base-item.component';\nimport { CheckboxComponent } from './components/filters-item/checkbox/checkbox.component';\nimport { ChipsComponent } from './components/filters-item/chips/chips.component';\nimport { DateRangeComponent } from './components/filters-item/date-range/date-range.component';\nimport { DateComponent } from './components/filters-item/date/date.component';\nimport { FilterItemComponent } from './components/filters-item/filter-item.component';\nimport { RangeComponent } from './components/filters-item/range/range.component';\nimport { SelectBackdropComponent } from './components/filters-item/select/backdrop/backdrop.component';\nimport { SelectGroupsComponent } from './components/filters-item/select/groups/groups.component';\nimport { SelectMultipleComponent } from './components/filters-item/select/multiple/multiple.component';\nimport { SelectComponent } from './components/filters-item/select/select.component';\nimport { SelectSimpleComponent } from './components/filters-item/select/simple/simple.component';\nimport { TextComponent } from './components/filters-item/text/text.component';\nimport { WeekComponent } from './components/filters-item/week/week.component';\nimport { FsFilterSavedFilterManageComponent } from './components/saved-filter';\nimport { FsFilterSavedFilterEditComponent } from './components/saved-filter/saved-filter-edit/saved-filter-edit.component';\nimport { FsSavedFiltersMenuComponent } from './components/saved-filter/saved-filters-menu/saved-filters-menu.component';\nimport { FocusToItemDirective } from './directives/focus-to-item/focus-to-item.directive';\nimport { FilterStatusBarDirective } from './directives/status-bar/status-bar.directive';\nimport { FS_FILTER_CONFIG } from './injectors/filter-config';\nimport { FilterConfig } from './interfaces/config.interface';\nimport { FsFilterIsolateValues } from './pipes/remove-isolate-value.pipe';\n\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n \n DragDropModule,\n \n MatIconModule,\n MatInputModule,\n MatSelectModule,\n MatChipsModule,\n MatCheckboxModule,\n MatAutocompleteModule,\n MatButtonModule,\n MatDialogModule,\n MatTooltipModule,\n MatSlideToggleModule,\n\n FsChipModule,\n FsCommonModule,\n FsStoreModule,\n FsDatePickerModule,\n FsLabelModule,\n FsAutocompleteModule,\n FsAutocompleteChipsModule,\n FsScrollModule,\n FsMenuModule,\n FsSkeletonModule,\n FsFormModule,\n FsFileModule,\n FsSelectButtonModule,\n FsClearModule,\n FsPopoverModule,\n\n PortalModule,\n ],\n declarations: [\n BaseItemComponent,\n FilterComponent,\n FilterItemComponent,\n FsFilterChipsComponent,\n SelectComponent,\n SelectGroupsComponent,\n SelectSimpleComponent,\n SelectMultipleComponent,\n ChipsComponent,\n TextComponent,\n WeekComponent,\n RangeComponent,\n AutocompleteComponent,\n AutocompletechipsComponent,\n DateComponent,\n DateRangeComponent,\n CheckboxComponent,\n FilterDrawerComponent,\n SelectBackdropComponent,\n FsFilterChipComponent,\n FsFilterChipContentComponent,\n FsFilterDrawerActionsComponent,\n FsFilterSavedFilterEditComponent,\n FsSavedFiltersMenuComponent,\n FsFilterActionsComponent,\n FsFilterActionButtonComponent,\n FsFilterActionKebabActionsComponent,\n FsFilterSavedFilterManageComponent,\n\n FilterStatusBarDirective,\n FocusToItemDirective,\n\n // Pipes\n FsFilterIsolateValues,\n ],\n providers: [\n FsStore,\n ],\n exports: [\n FilterComponent,\n FilterStatusBarDirective,\n FsSavedFiltersMenuComponent,\n ],\n})\nexport class FsFilterModule {\n public static forRoot(config: FilterConfig = {}): ModuleWithProviders<FsFilterModule> {\n return {\n ngModule: FsFilterModule,\n providers: [\n {\n provide: FS_FILTER_CONFIG,\n useValue: {\n button: {\n label: '',\n },\n ...config,\n } as FilterConfig,\n },\n ],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["arrayList","filter","i3","i4.FsFilterItemsStore","i5","i1","i2.FsFilterItemsStore","i2","i4","i6","i7","i8","i1.FsFilterItemsStore","i2.PersistanceParamsController","i3.QueryParamsController","i4.SavedFiltersController","i9","i11.FsFilterActionButtonComponent","i12.FsFilterActionKebabActionsComponent","i1.FocusControllerService","i4.FsFilterChipContentComponent","i2.FsFilterChipComponent","i1.ExternalParamsController","i7.FocusToItemDirective","i8.FocusToItemDirective","i9.FsFilterIsolateValues","i4.SelectGroupsComponent","i5.SelectSimpleComponent","i6.SelectMultipleComponent","i5.FocusToItemDirective","i6.FocusToItemDirective","i4.FocusToItemDirective","arrayRemove","i2.SelectComponent","i3.ChipsComponent","i4.TextComponent","i5.WeekComponent","i6.RangeComponent","i7.AutocompleteComponent","i8.AutocompletechipsComponent","i9.DateComponent","i10.DateRangeComponent","i11.CheckboxComponent","i6.FilterItemComponent","i7.FsFilterDrawerActionsComponent","i2.FocusControllerService","i1.FsFilterOverlayService","i2.ExternalParamsController","i3.FsFilterItemsStore","i4.ActionsController","i5.SavedFiltersController","i10","i11","i13","i15.FsFilterChipsComponent","i16.FsFilterActionsComponent","i3.SavedFiltersController"],"mappings":"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"}}}