@elementar-rt/components 0.6.56 → 0.6.57

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 (344) hide show
  1. package/README.md +49 -49
  2. package/badge/index.d.ts +18 -0
  3. package/bottom-sheet/index.d.ts +32 -0
  4. package/button-toggle/index.d.ts +33 -0
  5. package/calendar/index.d.ts +44 -0
  6. package/card/index.d.ts +32 -0
  7. package/chips/index.d.ts +23 -0
  8. package/clipboard-copy/index.d.ts +28 -0
  9. package/code-highlighter/index.d.ts +5 -1
  10. package/combobox/index.d.ts +38 -0
  11. package/content-editor/index.d.ts +18 -0
  12. package/dashboard/index.d.ts +1 -1
  13. package/data-grid/index.d.ts +64 -0
  14. package/datepicker/index.d.ts +32 -0
  15. package/dialog/index.d.ts +48 -0
  16. package/digit-roller/index.d.ts +18 -0
  17. package/empty-state/index.d.ts +17 -0
  18. package/expansion-panel/index.d.ts +12 -0
  19. package/fesm2022/elementar-rt-components-action-required.mjs +4 -4
  20. package/fesm2022/elementar-rt-components-action-required.mjs.map +1 -1
  21. package/fesm2022/elementar-rt-components-alert.mjs +17 -17
  22. package/fesm2022/elementar-rt-components-alert.mjs.map +1 -1
  23. package/fesm2022/elementar-rt-components-announcement.mjs +8 -8
  24. package/fesm2022/elementar-rt-components-announcement.mjs.map +1 -1
  25. package/fesm2022/elementar-rt-components-avatar.mjs +22 -22
  26. package/fesm2022/elementar-rt-components-avatar.mjs.map +1 -1
  27. package/fesm2022/elementar-rt-components-badge.mjs +38 -0
  28. package/fesm2022/elementar-rt-components-badge.mjs.map +1 -0
  29. package/fesm2022/elementar-rt-components-block-loader.mjs +7 -7
  30. package/fesm2022/elementar-rt-components-block-loader.mjs.map +1 -1
  31. package/fesm2022/elementar-rt-components-block-state.mjs +24 -24
  32. package/fesm2022/elementar-rt-components-block-state.mjs.map +1 -1
  33. package/fesm2022/elementar-rt-components-bottom-sheet.mjs +71 -0
  34. package/fesm2022/elementar-rt-components-bottom-sheet.mjs.map +1 -0
  35. package/fesm2022/elementar-rt-components-brand-colors.mjs +5 -5
  36. package/fesm2022/elementar-rt-components-brand-colors.mjs.map +1 -1
  37. package/fesm2022/elementar-rt-components-breadcrumbs.mjs +41 -41
  38. package/fesm2022/elementar-rt-components-breadcrumbs.mjs.map +1 -1
  39. package/fesm2022/elementar-rt-components-button-toggle.mjs +89 -0
  40. package/fesm2022/elementar-rt-components-button-toggle.mjs.map +1 -0
  41. package/fesm2022/elementar-rt-components-calendar.mjs +130 -0
  42. package/fesm2022/elementar-rt-components-calendar.mjs.map +1 -0
  43. package/fesm2022/elementar-rt-components-card-overlay.mjs +7 -7
  44. package/fesm2022/elementar-rt-components-card-overlay.mjs.map +1 -1
  45. package/fesm2022/elementar-rt-components-card.mjs +60 -0
  46. package/fesm2022/elementar-rt-components-card.mjs.map +1 -0
  47. package/fesm2022/elementar-rt-components-carousel.mjs +22 -22
  48. package/fesm2022/elementar-rt-components-carousel.mjs.map +1 -1
  49. package/fesm2022/elementar-rt-components-chips.mjs +54 -0
  50. package/fesm2022/elementar-rt-components-chips.mjs.map +1 -0
  51. package/fesm2022/elementar-rt-components-clipboard-copy.mjs +115 -0
  52. package/fesm2022/elementar-rt-components-clipboard-copy.mjs.map +1 -0
  53. package/fesm2022/elementar-rt-components-code-highlighter.mjs +19 -6
  54. package/fesm2022/elementar-rt-components-code-highlighter.mjs.map +1 -1
  55. package/fesm2022/elementar-rt-components-color-picker.mjs +27 -27
  56. package/fesm2022/elementar-rt-components-color-picker.mjs.map +1 -1
  57. package/fesm2022/elementar-rt-components-color-scheme.mjs +10 -10
  58. package/fesm2022/elementar-rt-components-color-scheme.mjs.map +1 -1
  59. package/fesm2022/elementar-rt-components-combobox.mjs +70 -0
  60. package/fesm2022/elementar-rt-components-combobox.mjs.map +1 -0
  61. package/fesm2022/elementar-rt-components-command-bar.mjs +12 -12
  62. package/fesm2022/elementar-rt-components-command-bar.mjs.map +1 -1
  63. package/fesm2022/elementar-rt-components-comment-editor.mjs +82 -82
  64. package/fesm2022/elementar-rt-components-comment-editor.mjs.map +1 -1
  65. package/fesm2022/elementar-rt-components-comparison-slider.mjs +10 -10
  66. package/fesm2022/elementar-rt-components-comparison-slider.mjs.map +1 -1
  67. package/fesm2022/elementar-rt-components-confirm.mjs +7 -7
  68. package/fesm2022/elementar-rt-components-confirm.mjs.map +1 -1
  69. package/fesm2022/elementar-rt-components-content-editor.mjs +121 -0
  70. package/fesm2022/elementar-rt-components-content-editor.mjs.map +1 -0
  71. package/fesm2022/elementar-rt-components-content-fade.mjs +4 -4
  72. package/fesm2022/elementar-rt-components-content-fade.mjs.map +1 -1
  73. package/fesm2022/elementar-rt-components-cookie-popup.mjs +13 -13
  74. package/fesm2022/elementar-rt-components-cookie-popup.mjs.map +1 -1
  75. package/fesm2022/elementar-rt-components-core.mjs +64 -64
  76. package/fesm2022/elementar-rt-components-core.mjs.map +1 -1
  77. package/fesm2022/elementar-rt-components-country-select.mjs +5 -5
  78. package/fesm2022/elementar-rt-components-country-select.mjs.map +1 -1
  79. package/fesm2022/elementar-rt-components-crop.mjs +4 -4
  80. package/fesm2022/elementar-rt-components-crop.mjs.map +1 -1
  81. package/fesm2022/elementar-rt-components-currency-select.mjs +5 -5
  82. package/fesm2022/elementar-rt-components-currency-select.mjs.map +1 -1
  83. package/fesm2022/elementar-rt-components-dashboard.mjs +9 -9
  84. package/fesm2022/elementar-rt-components-dashboard.mjs.map +1 -1
  85. package/fesm2022/elementar-rt-components-data-grid.mjs +120 -0
  86. package/fesm2022/elementar-rt-components-data-grid.mjs.map +1 -0
  87. package/fesm2022/elementar-rt-components-data-view.mjs +17 -17
  88. package/fesm2022/elementar-rt-components-data-view.mjs.map +1 -1
  89. package/fesm2022/elementar-rt-components-date-format-select.mjs +5 -5
  90. package/fesm2022/elementar-rt-components-date-format-select.mjs.map +1 -1
  91. package/fesm2022/elementar-rt-components-datepicker.mjs +81 -0
  92. package/fesm2022/elementar-rt-components-datepicker.mjs.map +1 -0
  93. package/fesm2022/elementar-rt-components-dialog.mjs +97 -0
  94. package/fesm2022/elementar-rt-components-dialog.mjs.map +1 -0
  95. package/fesm2022/elementar-rt-components-digit-roller.mjs +41 -0
  96. package/fesm2022/elementar-rt-components-digit-roller.mjs.map +1 -0
  97. package/fesm2022/elementar-rt-components-divider.mjs +8 -8
  98. package/fesm2022/elementar-rt-components-divider.mjs.map +1 -1
  99. package/fesm2022/elementar-rt-components-drawer.mjs +8 -8
  100. package/fesm2022/elementar-rt-components-drawer.mjs.map +1 -1
  101. package/fesm2022/elementar-rt-components-emoji-picker.mjs +7 -7
  102. package/fesm2022/elementar-rt-components-emoji-picker.mjs.map +1 -1
  103. package/fesm2022/elementar-rt-components-empty-state.mjs +35 -0
  104. package/fesm2022/elementar-rt-components-empty-state.mjs.map +1 -0
  105. package/fesm2022/elementar-rt-components-expand.mjs +4 -4
  106. package/fesm2022/elementar-rt-components-expand.mjs.map +1 -1
  107. package/fesm2022/elementar-rt-components-expansion-panel.mjs +32 -0
  108. package/fesm2022/elementar-rt-components-expansion-panel.mjs.map +1 -0
  109. package/fesm2022/elementar-rt-components-filter-builder.mjs +13 -13
  110. package/fesm2022/elementar-rt-components-filter-builder.mjs.map +1 -1
  111. package/fesm2022/elementar-rt-components-filter-select.mjs +126 -0
  112. package/fesm2022/elementar-rt-components-filter-select.mjs.map +1 -0
  113. package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-C2Ai6F2X.mjs +123 -0
  114. package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-C2Ai6F2X.mjs.map +1 -0
  115. package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-a0XAs0-_.mjs +22 -0
  116. package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-a0XAs0-_.mjs.map +1 -0
  117. package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-CTVrrf43.mjs +40 -0
  118. package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-CTVrrf43.mjs.map +1 -0
  119. package/fesm2022/{elementar-rt-components-form-renderer-divider-content.component-CjlGcU3B.mjs → elementar-rt-components-form-renderer-divider-content.component-CkYa0MOQ.mjs} +5 -5
  120. package/fesm2022/elementar-rt-components-form-renderer-divider-content.component-CkYa0MOQ.mjs.map +1 -0
  121. package/fesm2022/{elementar-rt-components-form-renderer-image-content.component-0pL2Fk0H.mjs → elementar-rt-components-form-renderer-image-content.component-B5uj3hoV.mjs} +5 -5
  122. package/fesm2022/elementar-rt-components-form-renderer-image-content.component-B5uj3hoV.mjs.map +1 -0
  123. package/fesm2022/elementar-rt-components-form-renderer-input-field.component-DnaWJIK9.mjs +33 -0
  124. package/fesm2022/elementar-rt-components-form-renderer-input-field.component-DnaWJIK9.mjs.map +1 -0
  125. package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-9BLv1MsP.mjs +38 -0
  126. package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-9BLv1MsP.mjs.map +1 -0
  127. package/fesm2022/elementar-rt-components-form-renderer-select-field.component-C97pIEdh.mjs +39 -0
  128. package/fesm2022/elementar-rt-components-form-renderer-select-field.component-C97pIEdh.mjs.map +1 -0
  129. package/fesm2022/{elementar-rt-components-form-renderer-text-content.component-BmFyUG06.mjs → elementar-rt-components-form-renderer-text-content.component-CJxCc5vX.mjs} +5 -5
  130. package/fesm2022/elementar-rt-components-form-renderer-text-content.component-CJxCc5vX.mjs.map +1 -0
  131. package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-CCtWiJOk.mjs +37 -0
  132. package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-CCtWiJOk.mjs.map +1 -0
  133. package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-GvZgdvUX.mjs +35 -0
  134. package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-GvZgdvUX.mjs.map +1 -0
  135. package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-DBiIiV-9.mjs +22 -0
  136. package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-DBiIiV-9.mjs.map +1 -0
  137. package/fesm2022/elementar-rt-components-form-renderer.mjs +29 -29
  138. package/fesm2022/elementar-rt-components-form-renderer.mjs.map +1 -1
  139. package/fesm2022/elementar-rt-components-gauge.mjs +8 -8
  140. package/fesm2022/elementar-rt-components-gauge.mjs.map +1 -1
  141. package/fesm2022/elementar-rt-components-grid.mjs +37 -0
  142. package/fesm2022/elementar-rt-components-grid.mjs.map +1 -0
  143. package/fesm2022/elementar-rt-components-guided-tour.mjs +161 -0
  144. package/fesm2022/elementar-rt-components-guided-tour.mjs.map +1 -0
  145. package/fesm2022/elementar-rt-components-headless-stepper.mjs +72 -0
  146. package/fesm2022/elementar-rt-components-headless-stepper.mjs.map +1 -0
  147. package/fesm2022/elementar-rt-components-icon.mjs +4 -4
  148. package/fesm2022/elementar-rt-components-icon.mjs.map +1 -1
  149. package/fesm2022/elementar-rt-components-image-placeholder.mjs +30 -0
  150. package/fesm2022/elementar-rt-components-image-placeholder.mjs.map +1 -0
  151. package/fesm2022/elementar-rt-components-image-resizer.mjs +10 -10
  152. package/fesm2022/elementar-rt-components-image-resizer.mjs.map +1 -1
  153. package/fesm2022/elementar-rt-components-image-viewer.mjs +19 -19
  154. package/fesm2022/elementar-rt-components-image-viewer.mjs.map +1 -1
  155. package/fesm2022/elementar-rt-components-image-zoom-viewer.mjs +97 -0
  156. package/fesm2022/elementar-rt-components-image-zoom-viewer.mjs.map +1 -0
  157. package/fesm2022/elementar-rt-components-incidents.mjs +49 -49
  158. package/fesm2022/elementar-rt-components-incidents.mjs.map +1 -1
  159. package/fesm2022/elementar-rt-components-inline-text-edit.mjs +4 -4
  160. package/fesm2022/elementar-rt-components-inline-text-edit.mjs.map +1 -1
  161. package/fesm2022/elementar-rt-components-input-mask.mjs +9 -9
  162. package/fesm2022/elementar-rt-components-input-mask.mjs.map +1 -1
  163. package/fesm2022/elementar-rt-components-input-validator.mjs.map +1 -1
  164. package/fesm2022/elementar-rt-components-kanban-board.mjs +7 -7
  165. package/fesm2022/elementar-rt-components-kanban-board.mjs.map +1 -1
  166. package/fesm2022/elementar-rt-components-keyboard.mjs +63 -0
  167. package/fesm2022/elementar-rt-components-keyboard.mjs.map +1 -0
  168. package/fesm2022/elementar-rt-components-layout.mjs +32 -32
  169. package/fesm2022/elementar-rt-components-layout.mjs.map +1 -1
  170. package/fesm2022/elementar-rt-components-list.mjs +43 -0
  171. package/fesm2022/elementar-rt-components-list.mjs.map +1 -0
  172. package/fesm2022/elementar-rt-components-logo.mjs +12 -12
  173. package/fesm2022/elementar-rt-components-logo.mjs.map +1 -1
  174. package/fesm2022/elementar-rt-components-marquee.mjs +7 -7
  175. package/fesm2022/elementar-rt-components-marquee.mjs.map +1 -1
  176. package/fesm2022/elementar-rt-components-menu.mjs +94 -0
  177. package/fesm2022/elementar-rt-components-menu.mjs.map +1 -0
  178. package/fesm2022/elementar-rt-components-micro-chart.mjs +24 -24
  179. package/fesm2022/elementar-rt-components-micro-chart.mjs.map +1 -1
  180. package/fesm2022/elementar-rt-components-multi-select.mjs +66 -0
  181. package/fesm2022/elementar-rt-components-multi-select.mjs.map +1 -0
  182. package/fesm2022/elementar-rt-components-navigation.mjs +39 -39
  183. package/fesm2022/elementar-rt-components-navigation.mjs.map +1 -1
  184. package/fesm2022/elementar-rt-components-notifications.mjs +40 -40
  185. package/fesm2022/elementar-rt-components-notifications.mjs.map +1 -1
  186. package/fesm2022/elementar-rt-components-number-input.mjs +17 -17
  187. package/fesm2022/elementar-rt-components-number-input.mjs.map +1 -1
  188. package/fesm2022/elementar-rt-components-overlay-scrollbar.mjs +4 -4
  189. package/fesm2022/elementar-rt-components-overlay-scrollbar.mjs.map +1 -1
  190. package/fesm2022/elementar-rt-components-overlay.mjs.map +1 -1
  191. package/fesm2022/elementar-rt-components-page-loading-bar.mjs +4 -4
  192. package/fesm2022/elementar-rt-components-page-loading-bar.mjs.map +1 -1
  193. package/fesm2022/elementar-rt-components-paginator.mjs +50 -0
  194. package/fesm2022/elementar-rt-components-paginator.mjs.map +1 -0
  195. package/fesm2022/elementar-rt-components-panel.mjs +24 -24
  196. package/fesm2022/elementar-rt-components-panel.mjs.map +1 -1
  197. package/fesm2022/elementar-rt-components-password-strength.mjs +13 -13
  198. package/fesm2022/elementar-rt-components-password-strength.mjs.map +1 -1
  199. package/fesm2022/elementar-rt-components-phone-input.mjs +11 -11
  200. package/fesm2022/elementar-rt-components-phone-input.mjs.map +1 -1
  201. package/fesm2022/elementar-rt-components-pin-input.mjs +8 -8
  202. package/fesm2022/elementar-rt-components-pin-input.mjs.map +1 -1
  203. package/fesm2022/elementar-rt-components-popover.mjs +10 -10
  204. package/fesm2022/elementar-rt-components-popover.mjs.map +1 -1
  205. package/fesm2022/elementar-rt-components-progress-bar.mjs +32 -0
  206. package/fesm2022/elementar-rt-components-progress-bar.mjs.map +1 -0
  207. package/fesm2022/elementar-rt-components-progress-spinner.mjs +94 -0
  208. package/fesm2022/elementar-rt-components-progress-spinner.mjs.map +1 -0
  209. package/fesm2022/elementar-rt-components-radio-card.mjs +17 -17
  210. package/fesm2022/elementar-rt-components-radio-card.mjs.map +1 -1
  211. package/fesm2022/elementar-rt-components-rail-nav.mjs +12 -12
  212. package/fesm2022/elementar-rt-components-rail-nav.mjs.map +1 -1
  213. package/fesm2022/elementar-rt-components-rating.mjs +84 -0
  214. package/fesm2022/elementar-rt-components-rating.mjs.map +1 -0
  215. package/fesm2022/elementar-rt-components-resizable-container.mjs +4 -4
  216. package/fesm2022/elementar-rt-components-resizable-container.mjs.map +1 -1
  217. package/fesm2022/elementar-rt-components-screen-loader.mjs +4 -4
  218. package/fesm2022/elementar-rt-components-screen-loader.mjs.map +1 -1
  219. package/fesm2022/elementar-rt-components-scroll-spy.mjs +16 -16
  220. package/fesm2022/elementar-rt-components-scroll-spy.mjs.map +1 -1
  221. package/fesm2022/elementar-rt-components-segmented.mjs +12 -12
  222. package/fesm2022/elementar-rt-components-segmented.mjs.map +1 -1
  223. package/fesm2022/elementar-rt-components-side-panel.mjs +8 -8
  224. package/fesm2022/elementar-rt-components-side-panel.mjs.map +1 -1
  225. package/fesm2022/elementar-rt-components-sidebar.mjs +61 -61
  226. package/fesm2022/elementar-rt-components-sidebar.mjs.map +1 -1
  227. package/fesm2022/elementar-rt-components-sidenav.mjs +72 -0
  228. package/fesm2022/elementar-rt-components-sidenav.mjs.map +1 -0
  229. package/fesm2022/elementar-rt-components-signature-pad.mjs +4 -4
  230. package/fesm2022/elementar-rt-components-signature-pad.mjs.map +1 -1
  231. package/fesm2022/elementar-rt-components-skeleton.mjs +16 -16
  232. package/fesm2022/elementar-rt-components-skeleton.mjs.map +1 -1
  233. package/fesm2022/elementar-rt-components-slider.mjs +64 -0
  234. package/fesm2022/elementar-rt-components-slider.mjs.map +1 -0
  235. package/fesm2022/elementar-rt-components-snackbar.mjs +81 -0
  236. package/fesm2022/elementar-rt-components-snackbar.mjs.map +1 -0
  237. package/fesm2022/elementar-rt-components-sort.mjs +69 -0
  238. package/fesm2022/elementar-rt-components-sort.mjs.map +1 -0
  239. package/fesm2022/elementar-rt-components-splash-screen.mjs +4 -4
  240. package/fesm2022/elementar-rt-components-splash-screen.mjs.map +1 -1
  241. package/fesm2022/elementar-rt-components-split-pane.mjs +70 -0
  242. package/fesm2022/elementar-rt-components-split-pane.mjs.map +1 -0
  243. package/fesm2022/elementar-rt-components-stat-card.mjs +27 -0
  244. package/fesm2022/elementar-rt-components-stat-card.mjs.map +1 -0
  245. package/fesm2022/elementar-rt-components-step-tracker.mjs +30 -0
  246. package/fesm2022/elementar-rt-components-step-tracker.mjs.map +1 -0
  247. package/fesm2022/elementar-rt-components-stepper.mjs +6 -6
  248. package/fesm2022/elementar-rt-components-stepper.mjs.map +1 -1
  249. package/fesm2022/elementar-rt-components-suggestions.mjs +18 -18
  250. package/fesm2022/elementar-rt-components-suggestions.mjs.map +1 -1
  251. package/fesm2022/elementar-rt-components-tab-panel.mjs +48 -48
  252. package/fesm2022/elementar-rt-components-tab-panel.mjs.map +1 -1
  253. package/fesm2022/elementar-rt-components-table.mjs +84 -0
  254. package/fesm2022/elementar-rt-components-table.mjs.map +1 -0
  255. package/fesm2022/elementar-rt-components-tabs.mjs +59 -0
  256. package/fesm2022/elementar-rt-components-tabs.mjs.map +1 -0
  257. package/fesm2022/elementar-rt-components-tag.mjs +28 -0
  258. package/fesm2022/elementar-rt-components-tag.mjs.map +1 -0
  259. package/fesm2022/elementar-rt-components-text-editor.mjs +85 -85
  260. package/fesm2022/elementar-rt-components-text-editor.mjs.map +1 -1
  261. package/fesm2022/elementar-rt-components-thumbnail-maker.mjs +7 -7
  262. package/fesm2022/elementar-rt-components-thumbnail-maker.mjs.map +1 -1
  263. package/fesm2022/elementar-rt-components-tiles.mjs +35 -0
  264. package/fesm2022/elementar-rt-components-tiles.mjs.map +1 -0
  265. package/fesm2022/elementar-rt-components-timeline.mjs +39 -39
  266. package/fesm2022/elementar-rt-components-timeline.mjs.map +1 -1
  267. package/fesm2022/elementar-rt-components-timepicker.mjs +75 -0
  268. package/fesm2022/elementar-rt-components-timepicker.mjs.map +1 -0
  269. package/fesm2022/elementar-rt-components-timezone-select.mjs +8 -8
  270. package/fesm2022/elementar-rt-components-timezone-select.mjs.map +1 -1
  271. package/fesm2022/elementar-rt-components-toast.mjs +98 -0
  272. package/fesm2022/elementar-rt-components-toast.mjs.map +1 -0
  273. package/fesm2022/elementar-rt-components-toolbar.mjs +24 -0
  274. package/fesm2022/elementar-rt-components-toolbar.mjs.map +1 -0
  275. package/fesm2022/elementar-rt-components-tooltip.mjs +119 -0
  276. package/fesm2022/elementar-rt-components-tooltip.mjs.map +1 -0
  277. package/fesm2022/elementar-rt-components-tree.mjs +77 -0
  278. package/fesm2022/elementar-rt-components-tree.mjs.map +1 -0
  279. package/fesm2022/elementar-rt-components-upload.mjs +57 -57
  280. package/fesm2022/elementar-rt-components-upload.mjs.map +1 -1
  281. package/fesm2022/elementar-rt-components-video-player.mjs +144 -0
  282. package/fesm2022/elementar-rt-components-video-player.mjs.map +1 -0
  283. package/fesm2022/elementar-rt-components-video-viewer.mjs +98 -0
  284. package/fesm2022/elementar-rt-components-video-viewer.mjs.map +1 -0
  285. package/fesm2022/elementar-rt-components.mjs.map +1 -1
  286. package/filter-select/index.d.ts +40 -0
  287. package/grid/index.d.ts +24 -0
  288. package/guided-tour/index.d.ts +45 -0
  289. package/headless-stepper/index.d.ts +30 -0
  290. package/image-placeholder/index.d.ts +18 -0
  291. package/image-zoom-viewer/index.d.ts +33 -0
  292. package/keyboard/index.d.ts +13 -0
  293. package/list/index.d.ts +18 -0
  294. package/menu/index.d.ts +38 -0
  295. package/multi-select/index.d.ts +36 -0
  296. package/package.json +225 -33
  297. package/paginator/index.d.ts +26 -0
  298. package/progress-bar/index.d.ts +17 -0
  299. package/progress-spinner/index.d.ts +19 -0
  300. package/rating/index.d.ts +30 -0
  301. package/sidenav/index.d.ts +31 -0
  302. package/slider/index.d.ts +26 -0
  303. package/snackbar/index.d.ts +36 -0
  304. package/sort/index.d.ts +27 -0
  305. package/split-pane/index.d.ts +25 -0
  306. package/stat-card/index.d.ts +16 -0
  307. package/step-tracker/index.d.ts +21 -0
  308. package/styles/_common.scss +777 -776
  309. package/styles/themes/cyan-orange.scss +41 -41
  310. package/styles/themes/default.scss +5 -5
  311. package/styles/themes/magenta-violet.scss +41 -41
  312. package/styles/themes/rose-red.scss +41 -41
  313. package/table/index.d.ts +44 -0
  314. package/tabs/index.d.ts +26 -0
  315. package/tag/index.d.ts +17 -0
  316. package/tiles/index.d.ts +14 -0
  317. package/timepicker/index.d.ts +29 -0
  318. package/toast/index.d.ts +48 -0
  319. package/toolbar/index.d.ts +10 -0
  320. package/tooltip/index.d.ts +30 -0
  321. package/tree/index.d.ts +42 -0
  322. package/video-player/index.d.ts +49 -0
  323. package/video-viewer/index.d.ts +33 -0
  324. package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-AqEghjO_.mjs +0 -123
  325. package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-AqEghjO_.mjs.map +0 -1
  326. package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-CUKmZGFq.mjs +0 -22
  327. package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-CUKmZGFq.mjs.map +0 -1
  328. package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-DihIRWMt.mjs +0 -40
  329. package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-DihIRWMt.mjs.map +0 -1
  330. package/fesm2022/elementar-rt-components-form-renderer-divider-content.component-CjlGcU3B.mjs.map +0 -1
  331. package/fesm2022/elementar-rt-components-form-renderer-image-content.component-0pL2Fk0H.mjs.map +0 -1
  332. package/fesm2022/elementar-rt-components-form-renderer-input-field.component-X2sKvj6J.mjs +0 -33
  333. package/fesm2022/elementar-rt-components-form-renderer-input-field.component-X2sKvj6J.mjs.map +0 -1
  334. package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-DWXZAA3F.mjs +0 -38
  335. package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-DWXZAA3F.mjs.map +0 -1
  336. package/fesm2022/elementar-rt-components-form-renderer-select-field.component-Cx9DZoD6.mjs +0 -39
  337. package/fesm2022/elementar-rt-components-form-renderer-select-field.component-Cx9DZoD6.mjs.map +0 -1
  338. package/fesm2022/elementar-rt-components-form-renderer-text-content.component-BmFyUG06.mjs.map +0 -1
  339. package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-D9KmE049.mjs +0 -37
  340. package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-D9KmE049.mjs.map +0 -1
  341. package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-BroP_Q4P.mjs +0 -35
  342. package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-BroP_Q4P.mjs.map +0 -1
  343. package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-nGbtVi1_.mjs +0 -22
  344. package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-nGbtVi1_.mjs.map +0 -1
@@ -12,10 +12,10 @@ import { MenuOptionGroupDirective, AutoFocusDirective, FocusElementDirective } f
12
12
 
13
13
  class FilterBuilderOperationNameDirective {
14
14
  templateRef = inject(TemplateRef);
15
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: FilterBuilderOperationNameDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
16
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.10", type: FilterBuilderOperationNameDirective, isStandalone: true, selector: "[emrFilterBuilderOperationName]", ngImport: i0 });
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterBuilderOperationNameDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
16
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.25", type: FilterBuilderOperationNameDirective, isStandalone: true, selector: "[emrFilterBuilderOperationName]", ngImport: i0 });
17
17
  }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: FilterBuilderOperationNameDirective, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterBuilderOperationNameDirective, decorators: [{
19
19
  type: Directive,
20
20
  args: [{
21
21
  selector: '[emrFilterBuilderOperationName]'
@@ -24,10 +24,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImpo
24
24
 
25
25
  class FilterBuilderOperationIconDirective {
26
26
  templateRef = inject(TemplateRef);
27
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: FilterBuilderOperationIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.10", type: FilterBuilderOperationIconDirective, isStandalone: true, selector: "[emrFilterBuilderOperationIcon]", ngImport: i0 });
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterBuilderOperationIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.25", type: FilterBuilderOperationIconDirective, isStandalone: true, selector: "[emrFilterBuilderOperationIcon]", ngImport: i0 });
29
29
  }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: FilterBuilderOperationIconDirective, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterBuilderOperationIconDirective, decorators: [{
31
31
  type: Directive,
32
32
  args: [{
33
33
  selector: '[emrFilterBuilderOperationIcon]'
@@ -41,10 +41,10 @@ class FilterBuilderOperationDefDirective {
41
41
  allowedDataTypes = input([], ...(ngDevMode ? [{ debugName: "allowedDataTypes" }] : []));
42
42
  operationName = contentChild(FilterBuilderOperationNameDirective, ...(ngDevMode ? [{ debugName: "operationName" }] : []));
43
43
  operationIcon = contentChild(FilterBuilderOperationIconDirective, ...(ngDevMode ? [{ debugName: "operationIcon" }] : []));
44
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: FilterBuilderOperationDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
45
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.10", type: FilterBuilderOperationDefDirective, isStandalone: true, selector: "[emrFilterBuilderOperationDef]", inputs: { id: { classPropertyName: "id", publicName: "emrFilterBuilderOperationDef", isSignal: true, isRequired: false, transformFunction: null }, allowedDataTypes: { classPropertyName: "allowedDataTypes", publicName: "allowedDataTypes", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "operationName", first: true, predicate: FilterBuilderOperationNameDirective, descendants: true, isSignal: true }, { propertyName: "operationIcon", first: true, predicate: FilterBuilderOperationIconDirective, descendants: true, isSignal: true }], ngImport: i0 });
44
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterBuilderOperationDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
45
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.25", type: FilterBuilderOperationDefDirective, isStandalone: true, selector: "[emrFilterBuilderOperationDef]", inputs: { id: { classPropertyName: "id", publicName: "emrFilterBuilderOperationDef", isSignal: true, isRequired: false, transformFunction: null }, allowedDataTypes: { classPropertyName: "allowedDataTypes", publicName: "allowedDataTypes", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "operationName", first: true, predicate: FilterBuilderOperationNameDirective, descendants: true, isSignal: true }, { propertyName: "operationIcon", first: true, predicate: FilterBuilderOperationIconDirective, descendants: true, isSignal: true }], ngImport: i0 });
46
46
  }
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: FilterBuilderOperationDefDirective, decorators: [{
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterBuilderOperationDefDirective, decorators: [{
48
48
  type: Directive,
49
49
  args: [{
50
50
  selector: '[emrFilterBuilderOperationDef]'
@@ -299,10 +299,10 @@ class FilterBuilderComponent {
299
299
  });
300
300
  return result;
301
301
  }
302
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: FilterBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
303
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", type: FilterBuilderComponent, isStandalone: true, selector: "emr-filter-builder", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, fieldDefs: { classPropertyName: "fieldDefs", publicName: "fieldDefs", isSignal: true, isRequired: false, transformFunction: null }, categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: false, transformFunction: null }, groupOperations: { classPropertyName: "groupOperations", publicName: "groupOperations", isSignal: true, isRequired: false, transformFunction: null }, customOperations: { classPropertyName: "customOperations", publicName: "customOperations", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, host: { classAttribute: "emr-filter-builder" }, queries: [{ propertyName: "_customOperationDefs", predicate: FilterBuilderOperationDefDirective, isSignal: true }], viewQueries: [{ propertyName: "_prebuiltOperationDefs", predicate: FilterBuilderOperationDefDirective, descendants: true, isSignal: true }], exportAs: ["emrFilterBuilder"], ngImport: i0, template: "@if (_isServer) {\r\n <ng-content/>\r\n}\r\n\r\n<ng-template #itemsTpl let-items>\r\n <div class=\"group\">\r\n @for (item of items; track item; let index = $index) {\r\n @if (_isGroup(item)) {\r\n <div class=\"flex items-center group-operations\">\r\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\r\n <mat-icon class=\"font-icon\">close</mat-icon>\r\n </div>\r\n <button [matMenuTriggerFor]=\"nestedGroupOperationsMenu\" class=\"group-operation\">\r\n {{ getSelectedGroupOperationName(item) }}\r\n </button>\r\n <div [matMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\r\n <mat-icon class=\"font-icon\">add</mat-icon>\r\n </div>\r\n <mat-menu #nestedGroupOperationsMenu>\r\n <div emrMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\r\n @for (groupOperation of groupOperations(); track groupOperation.id) {\r\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\r\n }\r\n </div>\r\n </mat-menu>\r\n <mat-menu #addGroupMenu>\r\n <button mat-menu-item (click)=\"addCondition(item)\">Add Condition</button>\r\n <button mat-menu-item (click)=\"addGroup(item)\">Add Group</button>\r\n </mat-menu>\r\n </div>\r\n @if (item['value'].length > 0) {\r\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"></ng-container>\r\n }\r\n } @else if (_isCondition(item)) {\r\n <div class=\"condition\">\r\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\r\n <mat-icon class=\"font-icon\">close</mat-icon>\r\n </div>\r\n <button class=\"condition-field\"\r\n [matMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}</button>\r\n <button class=\"condition-operation\"\r\n [matMenuTriggerFor]=\"operationsMenu\">\r\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"></ng-template>\r\n </button>\r\n <div class=\"relative\">\r\n @if (editItem && editItem === item) {\r\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\r\n @switch (getFieldType(editItem)) {\r\n @case ('array') {\r\n @switch (editItem['value'][1]) {\r\n @case ('equals') {\r\n <mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Select...\"\r\n emrAutoFocus\r\n (blur)=\"selectBlur($event)\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n @for (option of getOptions(editItem); track option.id) {\r\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n\r\n @case ('isAnyOf') {\r\n <mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Select...\" multiple\r\n emrAutoFocus\r\n (blur)=\"selectBlur($event)\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (closed)=\"selectClosed()\">\r\n @for (option of getOptions(editItem); track option.id) {\r\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n }\r\n }\r\n\r\n @case ('number') {\r\n @switch (editItem['value'][1]) {\r\n @case ('isBetween') {\r\n <div class=\"flex gap-2 items-center\"\r\n emrFocusElement (elementBlurred)=\"cancelEdit()\">\r\n <mat-form-field class=\"form-field-number\">\r\n <input type=\"number\" matInput emrAutoFocus\r\n [(ngModel)]=\"item['value'][2][0]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n <div class=\"text-neutral-500\">&ndash;</div>\r\n <mat-form-field class=\"form-field-number\">\r\n <input type=\"number\" matInput\r\n [(ngModel)]=\"item['value'][2][1]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n </div>\r\n }\r\n @default {\r\n <mat-form-field class=\"form-field-number\">\r\n <input type=\"number\" matInput emrAutoFocus\r\n (blur)=\"cancelEdit()\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n }\r\n }\r\n }\r\n\r\n @default {\r\n <mat-form-field class=\"form-field\">\r\n <input type=\"text\" matInput emrAutoFocus\r\n (blur)=\"cancelEdit()\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n }\r\n }\r\n </div>\r\n } @else {\r\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\r\n @if (isValueNotEmpty(item)) {\r\n @if (getFieldType(item) === 'array') {\r\n @if (item['value'][1] === 'equals') {\r\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\r\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\r\n </button>\r\n } @else {\r\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\r\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\r\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\r\n @if (!last) {\r\n <span class=\"text-neutral-500\">|</span>\r\n }\r\n }\r\n </button>\r\n }\r\n } @else {\r\n @if (item['value'][1] === 'isBetween') {\r\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\r\n <span>{{ item['value'][2][0] }}</span>\r\n <span class=\"text-neutral-500\">&ndash;</span>\r\n <span>{{ item['value'][2][1] }}</span>\r\n </button>\r\n } @else {\r\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\r\n <span>{{ item['value'][2] }}</span>\r\n </button>\r\n }\r\n }\r\n } @else {\r\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\r\n <span i18n>&lt;enter a value&gt;</span>\r\n </button>\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n <mat-menu #fieldsMenu>\r\n <div emrMenuOptionGroup [(ngModel)]=\"item['value'][0]\">\r\n @for (fieldDef of fieldDefs(); track fieldDef) {\r\n <mat-option [value]=\"fieldDef.dataField\"\r\n (click)=\"selectConditionField(item, fieldDef)\">{{ fieldDef.name }}</mat-option>\r\n }\r\n </div>\r\n </mat-menu>\r\n <mat-menu #operationsMenu>\r\n <div emrMenuOptionGroup [ngModel]=\"item['value'][1]\">\r\n @for (operation of _operationDefs; track operation.id()) {\r\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\r\n <mat-option [value]=\"operation.id()\" (click)=\"operationChanged(item, operation.id())\">\r\n <div class=\"flex items-center gap-3\">\r\n @if (operation.operationIcon()) {\r\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"></ng-template>\r\n }\r\n <div>\r\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"></ng-template>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </div>\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<div class=\"group\">\r\n <div class=\"flex items-center group-operations\">\r\n <button [matMenuTriggerFor]=\"groupOperationsMenu\" class=\"group-operation\">\r\n {{ getSelectedGroupOperationName() }}\r\n </button>\r\n <div [matMenuTriggerFor]=\"addMenu\" class=\"add\">\r\n <mat-icon class=\"font-icon\">add</mat-icon>\r\n </div>\r\n </div>\r\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"></ng-container>\r\n</div>\r\n\r\n<mat-menu #groupOperationsMenu>\r\n <div emrMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\r\n @for (groupOperation of groupOperations(); track groupOperation.id) {\r\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\r\n }\r\n </div>\r\n</mat-menu>\r\n<mat-menu #addMenu>\r\n <button mat-menu-item (click)=\"addCondition()\">Add Condition</button>\r\n <button mat-menu-item (click)=\"addGroup()\">Add Group</button>\r\n</mat-menu>\r\n\r\n<ng-container emrFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Contains</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Does not contain</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Starts with</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Ends with</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\r\n <ng-template emrFilterBuilderOperationName>Equals</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\r\n <ng-template emrFilterBuilderOperationName>Not equals</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is less then</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is less then or equal to</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is greater then</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is greater then or equal to</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Is blank</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Is not blank</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is between</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\r\n <ng-template emrFilterBuilderOperationName>Is any of</ng-template>\r\n</ng-container>\r\n", styles: [":host{--emr-filter-builder-group-operations-gap: calc(var(--spacing) * 2);--emr-filter-builder-group-operation-font-size: var(--text-tiny);--emr-filter-builder-group-operation-color: var(--color-neutral-800);--emr-filter-builder-group-operation-bg: transparent;--emr-filter-builder-group-operation-font-weight: 400;--emr-filter-builder-group-operation-border-radius: .5rem;--emr-filter-builder-group-operation-bpadding: 0 calc(var(--spacing) * 2);--emr-filter-builder-group-operation-height: calc(var(--spacing) * 7);--emr-filter-builder-group-operation-hover-color: var(--color-neutral-800);--emr-filter-builder-group-operation-hover-bg: var(--color-neutral-200);--emr-filter-builder-group-operation-active-color: var(--color-neutral-900);--emr-filter-builder-group-operation-active-bg: var(--color-neutral-300);--emr-filter-builder-group-operation-border: 1px solid var(--color-neutral-500);--emr-filter-builder-group-add-color: var(--color-primary);--emr-filter-builder-group-add-hover-color: var(--color-primary);--emr-filter-builder-group-margin: 0;--emr-filter-builder-group-padding: 0;--emr-filter-builder-group-gap: calc(var(--spacing) * 4);--emr-filter-builder-condition-gap: calc(var(--spacing) * 2);--emr-filter-builder-condition-field-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-field-font-size: var(--text-tiny);--emr-filter-builder-condition-field-color: var(--color-neutral-800);--emr-filter-builder-condition-field-bg: var(--color-primary-300);--emr-filter-builder-condition-field-font-weight: 400;--emr-filter-builder-condition-field-border-radius: .5rem;--emr-filter-builder-condition-field-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-field-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-field-hover-bg: var(--color-primary-400);--emr-filter-builder-condition-field-active-color: white;--emr-filter-builder-condition-field-active-bg: var(--color-primary-500);--emr-filter-builder-condition-operation-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-operation-font-size: var(--text-tiny);--emr-filter-builder-condition-operation-color: var(--color-neutral-800);--emr-filter-builder-condition-operation-bg: var(--color-tertiary-300);--emr-filter-builder-condition-operation-font-weight: 400;--emr-filter-builder-condition-operation-border-radius: .5rem;--emr-filter-builder-condition-operation-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-operation-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-operation-hover-bg: var(--color-tertiary-400);--emr-filter-builder-condition-operation-active-color: white;--emr-filter-builder-condition-operation-active-bg: var(--color-tertiary-500);--emr-filter-builder-condition-value-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-value-font-size: var(--text-tiny);--emr-filter-builder-condition-value-color: var(--color-neutral-800);--emr-filter-builder-condition-value-bg: var(--color-neutral-200);--emr-filter-builder-condition-value-font-weight: 400;--emr-filter-builder-condition-value-border-radius: .5rem;--emr-filter-builder-condition-value-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-value-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-value-hover-bg: var(--color-neutral-300);--emr-filter-builder-condition-remove-color: oklch(63.7% .237 25.331);--emr-filter-builder-condition-remove-hover-color: oklch(57.7% .245 27.325);display:block}:host ::ng-deep .mat-mdc-form-field-infix{--mat-form-field-container-height: 46px !important;--mat-form-field-container-vertical-padding: 12px !important}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host .form-field{width:200px}:host .form-field-number{width:140px}:host .group-operations{gap:var(--emr-filter-builder-group-operations-gap)}:host .group{margin:var(--emr-filter-builder-group-margin);padding:var(--emr-filter-builder-group-padding);display:flex;flex-direction:column;gap:var(--emr-filter-builder-group-gap)}:host .group .group{margin-left:calc(var(--spacing) * 4)}:host .icon:empty{display:none}:host .group-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-group-operation-height);font-size:var(--emr-filter-builder-group-operation-font-size);font-weight:var(--emr-filter-builder-group-operation-font-weight);color:var(--emr-filter-builder-group-operation-color);background:var(--emr-filter-builder-group-operation-bg);border:var(--emr-filter-builder-group-operation-border);border-radius:var(--emr-filter-builder-group-operation-border-radius);padding:var(--emr-filter-builder-group-operation-bpadding)}:host .group-operation:hover{color:var(--emr-filter-builder-group-operation-hover-color);background:var(--emr-filter-builder-group-operation-hover-bg)}:host .group-operation:active,:host .group-operation.active{color:var(--emr-filter-builder-group-operation-active-color);background:var(--emr-filter-builder-group-operation-active-bg)}:host .condition{display:flex;align-items:center;gap:var(--emr-filter-builder-condition-gap)}:host .condition-field{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-field-height);font-size:var(--emr-filter-builder-condition-field-font-size);font-weight:var(--emr-filter-builder-condition-field-font-weight);color:var(--emr-filter-builder-condition-field-color);background:var(--emr-filter-builder-condition-field-bg);border-radius:var(--emr-filter-builder-condition-field-border-radius);padding:var(--emr-filter-builder-condition-field-bpadding)}:host .condition-field:hover{color:var(--emr-filter-builder-condition-field-hover-color);background:var(--emr-filter-builder-condition-field-hover-bg)}:host .add{line-height:0;color:var(--emr-filter-builder-group-add-color);cursor:pointer}:host .add:hover{color:var(--emr-filter-builder-group-add-hover-color)}:host .remove{line-height:0;color:var(--emr-filter-builder-condition-remove-color);cursor:pointer}:host .remove:hover{color:var(--emr-filter-builder-condition-remove-hover-color)}:host .condition-field:active,:host .condition-field.active{color:var(--emr-filter-builder-condition-field-active-color);background:var(--emr-filter-builder-condition-field-active-bg)}:host .condition-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-operation-height);font-size:var(--emr-filter-builder-condition-operation-font-size);font-weight:var(--emr-filter-builder-condition-operation-font-weight);color:var(--emr-filter-builder-condition-operation-color);background:var(--emr-filter-builder-condition-operation-bg);border-radius:var(--emr-filter-builder-condition-operation-border-radius);padding:var(--emr-filter-builder-condition-operation-bpadding)}:host .condition-operation:hover{color:var(--emr-filter-builder-condition-operation-hover-color);background:var(--emr-filter-builder-condition-operation-hover-bg)}:host .condition-operation:active,:host .condition-operation.active{color:var(--emr-filter-builder-condition-operation-active-color);background:var(--emr-filter-builder-condition-operation-active-bg)}:host .condition-value{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-value-height);font-size:var(--emr-filter-builder-condition-value-font-size);font-weight:var(--emr-filter-builder-condition-value-font-weight);color:var(--emr-filter-builder-condition-value-color);background:var(--emr-filter-builder-condition-value-bg);border-radius:var(--emr-filter-builder-condition-value-border-radius);padding:var(--emr-filter-builder-condition-value-bpadding)}:host .condition-value:hover{color:var(--emr-filter-builder-condition-value-hover-color);background:var(--emr-filter-builder-condition-value-hover-bg)}:host-context(html.dark){--emr-filter-builder-group-operation-color: var(--color-neutral-200);--emr-filter-builder-group-operation-hover-bg: var(--color-neutral-600);--emr-filter-builder-group-operation-active-bg: var(--color-neutral-650);--emr-filter-builder-group-operation-hover-color: var(--color-neutral-100);--emr-filter-builder-group-operation-active-color: var(--color-neutral-50)}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: MenuOptionGroupDirective, selector: "[emrMenuOptionGroup]", outputs: ["valueChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: AutoFocusDirective, selector: "[emrAutoFocus]", exportAs: ["emrAutoFocus"] }, { kind: "directive", type: FocusElementDirective, selector: "[emrFocusElement]", inputs: ["checkChildren"], outputs: ["elementFocused", "elementBlurred"], exportAs: ["emrFocusElement"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: FilterBuilderOperationDefDirective, selector: "[emrFilterBuilderOperationDef]", inputs: ["emrFilterBuilderOperationDef", "allowedDataTypes"] }, { kind: "directive", type: FilterBuilderOperationNameDirective, selector: "[emrFilterBuilderOperationName]" }] });
302
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
303
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: FilterBuilderComponent, isStandalone: true, selector: "emr-filter-builder", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, fieldDefs: { classPropertyName: "fieldDefs", publicName: "fieldDefs", isSignal: true, isRequired: false, transformFunction: null }, categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: false, transformFunction: null }, groupOperations: { classPropertyName: "groupOperations", publicName: "groupOperations", isSignal: true, isRequired: false, transformFunction: null }, customOperations: { classPropertyName: "customOperations", publicName: "customOperations", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, host: { classAttribute: "emr-filter-builder" }, queries: [{ propertyName: "_customOperationDefs", predicate: FilterBuilderOperationDefDirective, isSignal: true }], viewQueries: [{ propertyName: "_prebuiltOperationDefs", predicate: FilterBuilderOperationDefDirective, descendants: true, isSignal: true }], exportAs: ["emrFilterBuilder"], ngImport: i0, template: "@if (_isServer) {\n <ng-content/>\n}\n\n<ng-template #itemsTpl let-items>\n <div class=\"group\">\n @for (item of items; track item; let index = $index) {\n @if (_isGroup(item)) {\n <div class=\"flex items-center group-operations\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <mat-icon class=\"font-icon\">close</mat-icon>\n </div>\n <button [matMenuTriggerFor]=\"nestedGroupOperationsMenu\" class=\"group-operation\">\n {{ getSelectedGroupOperationName(item) }}\n </button>\n <div [matMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\n <mat-icon class=\"font-icon\">add</mat-icon>\n </div>\n <mat-menu #nestedGroupOperationsMenu>\n <div emrMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\n }\n </div>\n </mat-menu>\n <mat-menu #addGroupMenu>\n <button mat-menu-item (click)=\"addCondition(item)\">Add Condition</button>\n <button mat-menu-item (click)=\"addGroup(item)\">Add Group</button>\n </mat-menu>\n </div>\n @if (item['value'].length > 0) {\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"></ng-container>\n }\n } @else if (_isCondition(item)) {\n <div class=\"condition\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <mat-icon class=\"font-icon\">close</mat-icon>\n </div>\n <button class=\"condition-field\"\n [matMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}</button>\n <button class=\"condition-operation\"\n [matMenuTriggerFor]=\"operationsMenu\">\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"></ng-template>\n </button>\n <div class=\"relative\">\n @if (editItem && editItem === item) {\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\n @switch (getFieldType(editItem)) {\n @case ('array') {\n @switch (editItem['value'][1]) {\n @case ('equals') {\n <mat-form-field class=\"form-field\">\n <mat-select placeholder=\"Select...\"\n emrAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n @for (option of getOptions(editItem); track option.id) {\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n\n @case ('isAnyOf') {\n <mat-form-field class=\"form-field\">\n <mat-select placeholder=\"Select...\" multiple\n emrAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (closed)=\"selectClosed()\">\n @for (option of getOptions(editItem); track option.id) {\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n }\n }\n\n @case ('number') {\n @switch (editItem['value'][1]) {\n @case ('isBetween') {\n <div class=\"flex gap-2 items-center\"\n emrFocusElement (elementBlurred)=\"cancelEdit()\">\n <mat-form-field class=\"form-field-number\">\n <input type=\"number\" matInput emrAutoFocus\n [(ngModel)]=\"item['value'][2][0]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n <div class=\"text-neutral-500\">&ndash;</div>\n <mat-form-field class=\"form-field-number\">\n <input type=\"number\" matInput\n [(ngModel)]=\"item['value'][2][1]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n </div>\n }\n @default {\n <mat-form-field class=\"form-field-number\">\n <input type=\"number\" matInput emrAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n }\n }\n }\n\n @default {\n <mat-form-field class=\"form-field\">\n <input type=\"text\" matInput emrAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n }\n }\n </div>\n } @else {\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\n @if (isValueNotEmpty(item)) {\n @if (getFieldType(item) === 'array') {\n @if (item['value'][1] === 'equals') {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\n </button>\n } @else {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\n @if (!last) {\n <span class=\"text-neutral-500\">|</span>\n }\n }\n </button>\n }\n } @else {\n @if (item['value'][1] === 'isBetween') {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2][0] }}</span>\n <span class=\"text-neutral-500\">&ndash;</span>\n <span>{{ item['value'][2][1] }}</span>\n </button>\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2] }}</span>\n </button>\n }\n }\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span i18n>&lt;enter a value&gt;</span>\n </button>\n }\n }\n }\n </div>\n </div>\n <mat-menu #fieldsMenu>\n <div emrMenuOptionGroup [(ngModel)]=\"item['value'][0]\">\n @for (fieldDef of fieldDefs(); track fieldDef) {\n <mat-option [value]=\"fieldDef.dataField\"\n (click)=\"selectConditionField(item, fieldDef)\">{{ fieldDef.name }}</mat-option>\n }\n </div>\n </mat-menu>\n <mat-menu #operationsMenu>\n <div emrMenuOptionGroup [ngModel]=\"item['value'][1]\">\n @for (operation of _operationDefs; track operation.id()) {\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\n <mat-option [value]=\"operation.id()\" (click)=\"operationChanged(item, operation.id())\">\n <div class=\"flex items-center gap-3\">\n @if (operation.operationIcon()) {\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"></ng-template>\n }\n <div>\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"></ng-template>\n </div>\n </div>\n </mat-option>\n </div>\n }\n </div>\n </mat-menu>\n }\n }\n </div>\n</ng-template>\n\n<div class=\"group\">\n <div class=\"flex items-center group-operations\">\n <button [matMenuTriggerFor]=\"groupOperationsMenu\" class=\"group-operation\">\n {{ getSelectedGroupOperationName() }}\n </button>\n <div [matMenuTriggerFor]=\"addMenu\" class=\"add\">\n <mat-icon class=\"font-icon\">add</mat-icon>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"></ng-container>\n</div>\n\n<mat-menu #groupOperationsMenu>\n <div emrMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\n }\n </div>\n</mat-menu>\n<mat-menu #addMenu>\n <button mat-menu-item (click)=\"addCondition()\">Add Condition</button>\n <button mat-menu-item (click)=\"addGroup()\">Add Group</button>\n</mat-menu>\n\n<ng-container emrFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Contains</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Does not contain</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Starts with</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Ends with</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\n <ng-template emrFilterBuilderOperationName>Equals</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\n <ng-template emrFilterBuilderOperationName>Not equals</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is less then</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is less then or equal to</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is greater then</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is greater then or equal to</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Is blank</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Is not blank</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is between</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\n <ng-template emrFilterBuilderOperationName>Is any of</ng-template>\n</ng-container>\n", styles: [":host{--emr-filter-builder-group-operations-gap: calc(var(--spacing) * 2);--emr-filter-builder-group-operation-font-size: var(--text-tiny);--emr-filter-builder-group-operation-color: var(--color-neutral-800);--emr-filter-builder-group-operation-bg: transparent;--emr-filter-builder-group-operation-font-weight: 400;--emr-filter-builder-group-operation-border-radius: .5rem;--emr-filter-builder-group-operation-bpadding: 0 calc(var(--spacing) * 2);--emr-filter-builder-group-operation-height: calc(var(--spacing) * 7);--emr-filter-builder-group-operation-hover-color: var(--color-neutral-800);--emr-filter-builder-group-operation-hover-bg: var(--color-neutral-200);--emr-filter-builder-group-operation-active-color: var(--color-neutral-900);--emr-filter-builder-group-operation-active-bg: var(--color-neutral-300);--emr-filter-builder-group-operation-border: 1px solid var(--color-neutral-500);--emr-filter-builder-group-add-color: var(--color-primary);--emr-filter-builder-group-add-hover-color: var(--color-primary);--emr-filter-builder-group-margin: 0;--emr-filter-builder-group-padding: 0;--emr-filter-builder-group-gap: calc(var(--spacing) * 4);--emr-filter-builder-condition-gap: calc(var(--spacing) * 2);--emr-filter-builder-condition-field-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-field-font-size: var(--text-tiny);--emr-filter-builder-condition-field-color: var(--color-neutral-800);--emr-filter-builder-condition-field-bg: var(--color-primary-300);--emr-filter-builder-condition-field-font-weight: 400;--emr-filter-builder-condition-field-border-radius: .5rem;--emr-filter-builder-condition-field-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-field-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-field-hover-bg: var(--color-primary-400);--emr-filter-builder-condition-field-active-color: white;--emr-filter-builder-condition-field-active-bg: var(--color-primary-500);--emr-filter-builder-condition-operation-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-operation-font-size: var(--text-tiny);--emr-filter-builder-condition-operation-color: var(--color-neutral-800);--emr-filter-builder-condition-operation-bg: var(--color-tertiary-300);--emr-filter-builder-condition-operation-font-weight: 400;--emr-filter-builder-condition-operation-border-radius: .5rem;--emr-filter-builder-condition-operation-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-operation-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-operation-hover-bg: var(--color-tertiary-400);--emr-filter-builder-condition-operation-active-color: white;--emr-filter-builder-condition-operation-active-bg: var(--color-tertiary-500);--emr-filter-builder-condition-value-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-value-font-size: var(--text-tiny);--emr-filter-builder-condition-value-color: var(--color-neutral-800);--emr-filter-builder-condition-value-bg: var(--color-neutral-200);--emr-filter-builder-condition-value-font-weight: 400;--emr-filter-builder-condition-value-border-radius: .5rem;--emr-filter-builder-condition-value-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-value-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-value-hover-bg: var(--color-neutral-300);--emr-filter-builder-condition-remove-color: oklch(63.7% .237 25.331);--emr-filter-builder-condition-remove-hover-color: oklch(57.7% .245 27.325);display:block}:host ::ng-deep .mat-mdc-form-field-infix{--mat-form-field-container-height: 46px !important;--mat-form-field-container-vertical-padding: 12px !important}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host .form-field{width:200px}:host .form-field-number{width:140px}:host .group-operations{gap:var(--emr-filter-builder-group-operations-gap)}:host .group{margin:var(--emr-filter-builder-group-margin);padding:var(--emr-filter-builder-group-padding);display:flex;flex-direction:column;gap:var(--emr-filter-builder-group-gap)}:host .group .group{margin-left:calc(var(--spacing) * 4)}:host .icon:empty{display:none}:host .group-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-group-operation-height);font-size:var(--emr-filter-builder-group-operation-font-size);font-weight:var(--emr-filter-builder-group-operation-font-weight);color:var(--emr-filter-builder-group-operation-color);background:var(--emr-filter-builder-group-operation-bg);border:var(--emr-filter-builder-group-operation-border);border-radius:var(--emr-filter-builder-group-operation-border-radius);padding:var(--emr-filter-builder-group-operation-bpadding)}:host .group-operation:hover{color:var(--emr-filter-builder-group-operation-hover-color);background:var(--emr-filter-builder-group-operation-hover-bg)}:host .group-operation:active,:host .group-operation.active{color:var(--emr-filter-builder-group-operation-active-color);background:var(--emr-filter-builder-group-operation-active-bg)}:host .condition{display:flex;align-items:center;gap:var(--emr-filter-builder-condition-gap)}:host .condition-field{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-field-height);font-size:var(--emr-filter-builder-condition-field-font-size);font-weight:var(--emr-filter-builder-condition-field-font-weight);color:var(--emr-filter-builder-condition-field-color);background:var(--emr-filter-builder-condition-field-bg);border-radius:var(--emr-filter-builder-condition-field-border-radius);padding:var(--emr-filter-builder-condition-field-bpadding)}:host .condition-field:hover{color:var(--emr-filter-builder-condition-field-hover-color);background:var(--emr-filter-builder-condition-field-hover-bg)}:host .add{line-height:0;color:var(--emr-filter-builder-group-add-color);cursor:pointer}:host .add:hover{color:var(--emr-filter-builder-group-add-hover-color)}:host .remove{line-height:0;color:var(--emr-filter-builder-condition-remove-color);cursor:pointer}:host .remove:hover{color:var(--emr-filter-builder-condition-remove-hover-color)}:host .condition-field:active,:host .condition-field.active{color:var(--emr-filter-builder-condition-field-active-color);background:var(--emr-filter-builder-condition-field-active-bg)}:host .condition-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-operation-height);font-size:var(--emr-filter-builder-condition-operation-font-size);font-weight:var(--emr-filter-builder-condition-operation-font-weight);color:var(--emr-filter-builder-condition-operation-color);background:var(--emr-filter-builder-condition-operation-bg);border-radius:var(--emr-filter-builder-condition-operation-border-radius);padding:var(--emr-filter-builder-condition-operation-bpadding)}:host .condition-operation:hover{color:var(--emr-filter-builder-condition-operation-hover-color);background:var(--emr-filter-builder-condition-operation-hover-bg)}:host .condition-operation:active,:host .condition-operation.active{color:var(--emr-filter-builder-condition-operation-active-color);background:var(--emr-filter-builder-condition-operation-active-bg)}:host .condition-value{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-value-height);font-size:var(--emr-filter-builder-condition-value-font-size);font-weight:var(--emr-filter-builder-condition-value-font-weight);color:var(--emr-filter-builder-condition-value-color);background:var(--emr-filter-builder-condition-value-bg);border-radius:var(--emr-filter-builder-condition-value-border-radius);padding:var(--emr-filter-builder-condition-value-bpadding)}:host .condition-value:hover{color:var(--emr-filter-builder-condition-value-hover-color);background:var(--emr-filter-builder-condition-value-hover-bg)}:host-context(html.dark){--emr-filter-builder-group-operation-color: var(--color-neutral-200);--emr-filter-builder-group-operation-hover-bg: var(--color-neutral-600);--emr-filter-builder-group-operation-active-bg: var(--color-neutral-650);--emr-filter-builder-group-operation-hover-color: var(--color-neutral-100);--emr-filter-builder-group-operation-active-color: var(--color-neutral-50)}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: MenuOptionGroupDirective, selector: "[emrMenuOptionGroup]", outputs: ["valueChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: AutoFocusDirective, selector: "[emrAutoFocus]", exportAs: ["emrAutoFocus"] }, { kind: "directive", type: FocusElementDirective, selector: "[emrFocusElement]", inputs: ["checkChildren"], outputs: ["elementFocused", "elementBlurred"], exportAs: ["emrFocusElement"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: FilterBuilderOperationDefDirective, selector: "[emrFilterBuilderOperationDef]", inputs: ["emrFilterBuilderOperationDef", "allowedDataTypes"] }, { kind: "directive", type: FilterBuilderOperationNameDirective, selector: "[emrFilterBuilderOperationName]" }] });
304
304
  }
305
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: FilterBuilderComponent, decorators: [{
305
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: FilterBuilderComponent, decorators: [{
306
306
  type: Component,
307
307
  args: [{ selector: 'emr-filter-builder', exportAs: 'emrFilterBuilder', imports: [
308
308
  MatIcon,
@@ -322,7 +322,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImpo
322
322
  FilterBuilderOperationNameDirective
323
323
  ], host: {
324
324
  'class': 'emr-filter-builder'
325
- }, template: "@if (_isServer) {\r\n <ng-content/>\r\n}\r\n\r\n<ng-template #itemsTpl let-items>\r\n <div class=\"group\">\r\n @for (item of items; track item; let index = $index) {\r\n @if (_isGroup(item)) {\r\n <div class=\"flex items-center group-operations\">\r\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\r\n <mat-icon class=\"font-icon\">close</mat-icon>\r\n </div>\r\n <button [matMenuTriggerFor]=\"nestedGroupOperationsMenu\" class=\"group-operation\">\r\n {{ getSelectedGroupOperationName(item) }}\r\n </button>\r\n <div [matMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\r\n <mat-icon class=\"font-icon\">add</mat-icon>\r\n </div>\r\n <mat-menu #nestedGroupOperationsMenu>\r\n <div emrMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\r\n @for (groupOperation of groupOperations(); track groupOperation.id) {\r\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\r\n }\r\n </div>\r\n </mat-menu>\r\n <mat-menu #addGroupMenu>\r\n <button mat-menu-item (click)=\"addCondition(item)\">Add Condition</button>\r\n <button mat-menu-item (click)=\"addGroup(item)\">Add Group</button>\r\n </mat-menu>\r\n </div>\r\n @if (item['value'].length > 0) {\r\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"></ng-container>\r\n }\r\n } @else if (_isCondition(item)) {\r\n <div class=\"condition\">\r\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\r\n <mat-icon class=\"font-icon\">close</mat-icon>\r\n </div>\r\n <button class=\"condition-field\"\r\n [matMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}</button>\r\n <button class=\"condition-operation\"\r\n [matMenuTriggerFor]=\"operationsMenu\">\r\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"></ng-template>\r\n </button>\r\n <div class=\"relative\">\r\n @if (editItem && editItem === item) {\r\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\r\n @switch (getFieldType(editItem)) {\r\n @case ('array') {\r\n @switch (editItem['value'][1]) {\r\n @case ('equals') {\r\n <mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Select...\"\r\n emrAutoFocus\r\n (blur)=\"selectBlur($event)\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n @for (option of getOptions(editItem); track option.id) {\r\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n\r\n @case ('isAnyOf') {\r\n <mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Select...\" multiple\r\n emrAutoFocus\r\n (blur)=\"selectBlur($event)\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (closed)=\"selectClosed()\">\r\n @for (option of getOptions(editItem); track option.id) {\r\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n }\r\n }\r\n\r\n @case ('number') {\r\n @switch (editItem['value'][1]) {\r\n @case ('isBetween') {\r\n <div class=\"flex gap-2 items-center\"\r\n emrFocusElement (elementBlurred)=\"cancelEdit()\">\r\n <mat-form-field class=\"form-field-number\">\r\n <input type=\"number\" matInput emrAutoFocus\r\n [(ngModel)]=\"item['value'][2][0]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n <div class=\"text-neutral-500\">&ndash;</div>\r\n <mat-form-field class=\"form-field-number\">\r\n <input type=\"number\" matInput\r\n [(ngModel)]=\"item['value'][2][1]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n </div>\r\n }\r\n @default {\r\n <mat-form-field class=\"form-field-number\">\r\n <input type=\"number\" matInput emrAutoFocus\r\n (blur)=\"cancelEdit()\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n }\r\n }\r\n }\r\n\r\n @default {\r\n <mat-form-field class=\"form-field\">\r\n <input type=\"text\" matInput emrAutoFocus\r\n (blur)=\"cancelEdit()\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n }\r\n }\r\n </div>\r\n } @else {\r\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\r\n @if (isValueNotEmpty(item)) {\r\n @if (getFieldType(item) === 'array') {\r\n @if (item['value'][1] === 'equals') {\r\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\r\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\r\n </button>\r\n } @else {\r\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\r\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\r\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\r\n @if (!last) {\r\n <span class=\"text-neutral-500\">|</span>\r\n }\r\n }\r\n </button>\r\n }\r\n } @else {\r\n @if (item['value'][1] === 'isBetween') {\r\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\r\n <span>{{ item['value'][2][0] }}</span>\r\n <span class=\"text-neutral-500\">&ndash;</span>\r\n <span>{{ item['value'][2][1] }}</span>\r\n </button>\r\n } @else {\r\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\r\n <span>{{ item['value'][2] }}</span>\r\n </button>\r\n }\r\n }\r\n } @else {\r\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\r\n <span i18n>&lt;enter a value&gt;</span>\r\n </button>\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n <mat-menu #fieldsMenu>\r\n <div emrMenuOptionGroup [(ngModel)]=\"item['value'][0]\">\r\n @for (fieldDef of fieldDefs(); track fieldDef) {\r\n <mat-option [value]=\"fieldDef.dataField\"\r\n (click)=\"selectConditionField(item, fieldDef)\">{{ fieldDef.name }}</mat-option>\r\n }\r\n </div>\r\n </mat-menu>\r\n <mat-menu #operationsMenu>\r\n <div emrMenuOptionGroup [ngModel]=\"item['value'][1]\">\r\n @for (operation of _operationDefs; track operation.id()) {\r\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\r\n <mat-option [value]=\"operation.id()\" (click)=\"operationChanged(item, operation.id())\">\r\n <div class=\"flex items-center gap-3\">\r\n @if (operation.operationIcon()) {\r\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"></ng-template>\r\n }\r\n <div>\r\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"></ng-template>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </div>\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<div class=\"group\">\r\n <div class=\"flex items-center group-operations\">\r\n <button [matMenuTriggerFor]=\"groupOperationsMenu\" class=\"group-operation\">\r\n {{ getSelectedGroupOperationName() }}\r\n </button>\r\n <div [matMenuTriggerFor]=\"addMenu\" class=\"add\">\r\n <mat-icon class=\"font-icon\">add</mat-icon>\r\n </div>\r\n </div>\r\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"></ng-container>\r\n</div>\r\n\r\n<mat-menu #groupOperationsMenu>\r\n <div emrMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\r\n @for (groupOperation of groupOperations(); track groupOperation.id) {\r\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\r\n }\r\n </div>\r\n</mat-menu>\r\n<mat-menu #addMenu>\r\n <button mat-menu-item (click)=\"addCondition()\">Add Condition</button>\r\n <button mat-menu-item (click)=\"addGroup()\">Add Group</button>\r\n</mat-menu>\r\n\r\n<ng-container emrFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Contains</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Does not contain</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Starts with</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Ends with</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\r\n <ng-template emrFilterBuilderOperationName>Equals</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\r\n <ng-template emrFilterBuilderOperationName>Not equals</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is less then</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is less then or equal to</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is greater then</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is greater then or equal to</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Is blank</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Is not blank</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is between</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\r\n <ng-template emrFilterBuilderOperationName>Is any of</ng-template>\r\n</ng-container>\r\n", styles: [":host{--emr-filter-builder-group-operations-gap: calc(var(--spacing) * 2);--emr-filter-builder-group-operation-font-size: var(--text-tiny);--emr-filter-builder-group-operation-color: var(--color-neutral-800);--emr-filter-builder-group-operation-bg: transparent;--emr-filter-builder-group-operation-font-weight: 400;--emr-filter-builder-group-operation-border-radius: .5rem;--emr-filter-builder-group-operation-bpadding: 0 calc(var(--spacing) * 2);--emr-filter-builder-group-operation-height: calc(var(--spacing) * 7);--emr-filter-builder-group-operation-hover-color: var(--color-neutral-800);--emr-filter-builder-group-operation-hover-bg: var(--color-neutral-200);--emr-filter-builder-group-operation-active-color: var(--color-neutral-900);--emr-filter-builder-group-operation-active-bg: var(--color-neutral-300);--emr-filter-builder-group-operation-border: 1px solid var(--color-neutral-500);--emr-filter-builder-group-add-color: var(--color-primary);--emr-filter-builder-group-add-hover-color: var(--color-primary);--emr-filter-builder-group-margin: 0;--emr-filter-builder-group-padding: 0;--emr-filter-builder-group-gap: calc(var(--spacing) * 4);--emr-filter-builder-condition-gap: calc(var(--spacing) * 2);--emr-filter-builder-condition-field-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-field-font-size: var(--text-tiny);--emr-filter-builder-condition-field-color: var(--color-neutral-800);--emr-filter-builder-condition-field-bg: var(--color-primary-300);--emr-filter-builder-condition-field-font-weight: 400;--emr-filter-builder-condition-field-border-radius: .5rem;--emr-filter-builder-condition-field-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-field-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-field-hover-bg: var(--color-primary-400);--emr-filter-builder-condition-field-active-color: white;--emr-filter-builder-condition-field-active-bg: var(--color-primary-500);--emr-filter-builder-condition-operation-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-operation-font-size: var(--text-tiny);--emr-filter-builder-condition-operation-color: var(--color-neutral-800);--emr-filter-builder-condition-operation-bg: var(--color-tertiary-300);--emr-filter-builder-condition-operation-font-weight: 400;--emr-filter-builder-condition-operation-border-radius: .5rem;--emr-filter-builder-condition-operation-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-operation-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-operation-hover-bg: var(--color-tertiary-400);--emr-filter-builder-condition-operation-active-color: white;--emr-filter-builder-condition-operation-active-bg: var(--color-tertiary-500);--emr-filter-builder-condition-value-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-value-font-size: var(--text-tiny);--emr-filter-builder-condition-value-color: var(--color-neutral-800);--emr-filter-builder-condition-value-bg: var(--color-neutral-200);--emr-filter-builder-condition-value-font-weight: 400;--emr-filter-builder-condition-value-border-radius: .5rem;--emr-filter-builder-condition-value-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-value-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-value-hover-bg: var(--color-neutral-300);--emr-filter-builder-condition-remove-color: oklch(63.7% .237 25.331);--emr-filter-builder-condition-remove-hover-color: oklch(57.7% .245 27.325);display:block}:host ::ng-deep .mat-mdc-form-field-infix{--mat-form-field-container-height: 46px !important;--mat-form-field-container-vertical-padding: 12px !important}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host .form-field{width:200px}:host .form-field-number{width:140px}:host .group-operations{gap:var(--emr-filter-builder-group-operations-gap)}:host .group{margin:var(--emr-filter-builder-group-margin);padding:var(--emr-filter-builder-group-padding);display:flex;flex-direction:column;gap:var(--emr-filter-builder-group-gap)}:host .group .group{margin-left:calc(var(--spacing) * 4)}:host .icon:empty{display:none}:host .group-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-group-operation-height);font-size:var(--emr-filter-builder-group-operation-font-size);font-weight:var(--emr-filter-builder-group-operation-font-weight);color:var(--emr-filter-builder-group-operation-color);background:var(--emr-filter-builder-group-operation-bg);border:var(--emr-filter-builder-group-operation-border);border-radius:var(--emr-filter-builder-group-operation-border-radius);padding:var(--emr-filter-builder-group-operation-bpadding)}:host .group-operation:hover{color:var(--emr-filter-builder-group-operation-hover-color);background:var(--emr-filter-builder-group-operation-hover-bg)}:host .group-operation:active,:host .group-operation.active{color:var(--emr-filter-builder-group-operation-active-color);background:var(--emr-filter-builder-group-operation-active-bg)}:host .condition{display:flex;align-items:center;gap:var(--emr-filter-builder-condition-gap)}:host .condition-field{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-field-height);font-size:var(--emr-filter-builder-condition-field-font-size);font-weight:var(--emr-filter-builder-condition-field-font-weight);color:var(--emr-filter-builder-condition-field-color);background:var(--emr-filter-builder-condition-field-bg);border-radius:var(--emr-filter-builder-condition-field-border-radius);padding:var(--emr-filter-builder-condition-field-bpadding)}:host .condition-field:hover{color:var(--emr-filter-builder-condition-field-hover-color);background:var(--emr-filter-builder-condition-field-hover-bg)}:host .add{line-height:0;color:var(--emr-filter-builder-group-add-color);cursor:pointer}:host .add:hover{color:var(--emr-filter-builder-group-add-hover-color)}:host .remove{line-height:0;color:var(--emr-filter-builder-condition-remove-color);cursor:pointer}:host .remove:hover{color:var(--emr-filter-builder-condition-remove-hover-color)}:host .condition-field:active,:host .condition-field.active{color:var(--emr-filter-builder-condition-field-active-color);background:var(--emr-filter-builder-condition-field-active-bg)}:host .condition-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-operation-height);font-size:var(--emr-filter-builder-condition-operation-font-size);font-weight:var(--emr-filter-builder-condition-operation-font-weight);color:var(--emr-filter-builder-condition-operation-color);background:var(--emr-filter-builder-condition-operation-bg);border-radius:var(--emr-filter-builder-condition-operation-border-radius);padding:var(--emr-filter-builder-condition-operation-bpadding)}:host .condition-operation:hover{color:var(--emr-filter-builder-condition-operation-hover-color);background:var(--emr-filter-builder-condition-operation-hover-bg)}:host .condition-operation:active,:host .condition-operation.active{color:var(--emr-filter-builder-condition-operation-active-color);background:var(--emr-filter-builder-condition-operation-active-bg)}:host .condition-value{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-value-height);font-size:var(--emr-filter-builder-condition-value-font-size);font-weight:var(--emr-filter-builder-condition-value-font-weight);color:var(--emr-filter-builder-condition-value-color);background:var(--emr-filter-builder-condition-value-bg);border-radius:var(--emr-filter-builder-condition-value-border-radius);padding:var(--emr-filter-builder-condition-value-bpadding)}:host .condition-value:hover{color:var(--emr-filter-builder-condition-value-hover-color);background:var(--emr-filter-builder-condition-value-hover-bg)}:host-context(html.dark){--emr-filter-builder-group-operation-color: var(--color-neutral-200);--emr-filter-builder-group-operation-hover-bg: var(--color-neutral-600);--emr-filter-builder-group-operation-active-bg: var(--color-neutral-650);--emr-filter-builder-group-operation-hover-color: var(--color-neutral-100);--emr-filter-builder-group-operation-active-color: var(--color-neutral-50)}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"] }]
325
+ }, template: "@if (_isServer) {\n <ng-content/>\n}\n\n<ng-template #itemsTpl let-items>\n <div class=\"group\">\n @for (item of items; track item; let index = $index) {\n @if (_isGroup(item)) {\n <div class=\"flex items-center group-operations\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <mat-icon class=\"font-icon\">close</mat-icon>\n </div>\n <button [matMenuTriggerFor]=\"nestedGroupOperationsMenu\" class=\"group-operation\">\n {{ getSelectedGroupOperationName(item) }}\n </button>\n <div [matMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\n <mat-icon class=\"font-icon\">add</mat-icon>\n </div>\n <mat-menu #nestedGroupOperationsMenu>\n <div emrMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\n }\n </div>\n </mat-menu>\n <mat-menu #addGroupMenu>\n <button mat-menu-item (click)=\"addCondition(item)\">Add Condition</button>\n <button mat-menu-item (click)=\"addGroup(item)\">Add Group</button>\n </mat-menu>\n </div>\n @if (item['value'].length > 0) {\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"></ng-container>\n }\n } @else if (_isCondition(item)) {\n <div class=\"condition\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <mat-icon class=\"font-icon\">close</mat-icon>\n </div>\n <button class=\"condition-field\"\n [matMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}</button>\n <button class=\"condition-operation\"\n [matMenuTriggerFor]=\"operationsMenu\">\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"></ng-template>\n </button>\n <div class=\"relative\">\n @if (editItem && editItem === item) {\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\n @switch (getFieldType(editItem)) {\n @case ('array') {\n @switch (editItem['value'][1]) {\n @case ('equals') {\n <mat-form-field class=\"form-field\">\n <mat-select placeholder=\"Select...\"\n emrAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n @for (option of getOptions(editItem); track option.id) {\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n\n @case ('isAnyOf') {\n <mat-form-field class=\"form-field\">\n <mat-select placeholder=\"Select...\" multiple\n emrAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (closed)=\"selectClosed()\">\n @for (option of getOptions(editItem); track option.id) {\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n }\n }\n\n @case ('number') {\n @switch (editItem['value'][1]) {\n @case ('isBetween') {\n <div class=\"flex gap-2 items-center\"\n emrFocusElement (elementBlurred)=\"cancelEdit()\">\n <mat-form-field class=\"form-field-number\">\n <input type=\"number\" matInput emrAutoFocus\n [(ngModel)]=\"item['value'][2][0]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n <div class=\"text-neutral-500\">&ndash;</div>\n <mat-form-field class=\"form-field-number\">\n <input type=\"number\" matInput\n [(ngModel)]=\"item['value'][2][1]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n </div>\n }\n @default {\n <mat-form-field class=\"form-field-number\">\n <input type=\"number\" matInput emrAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n }\n }\n }\n\n @default {\n <mat-form-field class=\"form-field\">\n <input type=\"text\" matInput emrAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n }\n }\n </div>\n } @else {\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\n @if (isValueNotEmpty(item)) {\n @if (getFieldType(item) === 'array') {\n @if (item['value'][1] === 'equals') {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\n </button>\n } @else {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\n @if (!last) {\n <span class=\"text-neutral-500\">|</span>\n }\n }\n </button>\n }\n } @else {\n @if (item['value'][1] === 'isBetween') {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2][0] }}</span>\n <span class=\"text-neutral-500\">&ndash;</span>\n <span>{{ item['value'][2][1] }}</span>\n </button>\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2] }}</span>\n </button>\n }\n }\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span i18n>&lt;enter a value&gt;</span>\n </button>\n }\n }\n }\n </div>\n </div>\n <mat-menu #fieldsMenu>\n <div emrMenuOptionGroup [(ngModel)]=\"item['value'][0]\">\n @for (fieldDef of fieldDefs(); track fieldDef) {\n <mat-option [value]=\"fieldDef.dataField\"\n (click)=\"selectConditionField(item, fieldDef)\">{{ fieldDef.name }}</mat-option>\n }\n </div>\n </mat-menu>\n <mat-menu #operationsMenu>\n <div emrMenuOptionGroup [ngModel]=\"item['value'][1]\">\n @for (operation of _operationDefs; track operation.id()) {\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\n <mat-option [value]=\"operation.id()\" (click)=\"operationChanged(item, operation.id())\">\n <div class=\"flex items-center gap-3\">\n @if (operation.operationIcon()) {\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"></ng-template>\n }\n <div>\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"></ng-template>\n </div>\n </div>\n </mat-option>\n </div>\n }\n </div>\n </mat-menu>\n }\n }\n </div>\n</ng-template>\n\n<div class=\"group\">\n <div class=\"flex items-center group-operations\">\n <button [matMenuTriggerFor]=\"groupOperationsMenu\" class=\"group-operation\">\n {{ getSelectedGroupOperationName() }}\n </button>\n <div [matMenuTriggerFor]=\"addMenu\" class=\"add\">\n <mat-icon class=\"font-icon\">add</mat-icon>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"></ng-container>\n</div>\n\n<mat-menu #groupOperationsMenu>\n <div emrMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\n }\n </div>\n</mat-menu>\n<mat-menu #addMenu>\n <button mat-menu-item (click)=\"addCondition()\">Add Condition</button>\n <button mat-menu-item (click)=\"addGroup()\">Add Group</button>\n</mat-menu>\n\n<ng-container emrFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Contains</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Does not contain</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Starts with</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Ends with</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\n <ng-template emrFilterBuilderOperationName>Equals</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\n <ng-template emrFilterBuilderOperationName>Not equals</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is less then</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is less then or equal to</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is greater then</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is greater then or equal to</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Is blank</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Is not blank</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is between</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\n <ng-template emrFilterBuilderOperationName>Is any of</ng-template>\n</ng-container>\n", styles: [":host{--emr-filter-builder-group-operations-gap: calc(var(--spacing) * 2);--emr-filter-builder-group-operation-font-size: var(--text-tiny);--emr-filter-builder-group-operation-color: var(--color-neutral-800);--emr-filter-builder-group-operation-bg: transparent;--emr-filter-builder-group-operation-font-weight: 400;--emr-filter-builder-group-operation-border-radius: .5rem;--emr-filter-builder-group-operation-bpadding: 0 calc(var(--spacing) * 2);--emr-filter-builder-group-operation-height: calc(var(--spacing) * 7);--emr-filter-builder-group-operation-hover-color: var(--color-neutral-800);--emr-filter-builder-group-operation-hover-bg: var(--color-neutral-200);--emr-filter-builder-group-operation-active-color: var(--color-neutral-900);--emr-filter-builder-group-operation-active-bg: var(--color-neutral-300);--emr-filter-builder-group-operation-border: 1px solid var(--color-neutral-500);--emr-filter-builder-group-add-color: var(--color-primary);--emr-filter-builder-group-add-hover-color: var(--color-primary);--emr-filter-builder-group-margin: 0;--emr-filter-builder-group-padding: 0;--emr-filter-builder-group-gap: calc(var(--spacing) * 4);--emr-filter-builder-condition-gap: calc(var(--spacing) * 2);--emr-filter-builder-condition-field-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-field-font-size: var(--text-tiny);--emr-filter-builder-condition-field-color: var(--color-neutral-800);--emr-filter-builder-condition-field-bg: var(--color-primary-300);--emr-filter-builder-condition-field-font-weight: 400;--emr-filter-builder-condition-field-border-radius: .5rem;--emr-filter-builder-condition-field-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-field-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-field-hover-bg: var(--color-primary-400);--emr-filter-builder-condition-field-active-color: white;--emr-filter-builder-condition-field-active-bg: var(--color-primary-500);--emr-filter-builder-condition-operation-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-operation-font-size: var(--text-tiny);--emr-filter-builder-condition-operation-color: var(--color-neutral-800);--emr-filter-builder-condition-operation-bg: var(--color-tertiary-300);--emr-filter-builder-condition-operation-font-weight: 400;--emr-filter-builder-condition-operation-border-radius: .5rem;--emr-filter-builder-condition-operation-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-operation-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-operation-hover-bg: var(--color-tertiary-400);--emr-filter-builder-condition-operation-active-color: white;--emr-filter-builder-condition-operation-active-bg: var(--color-tertiary-500);--emr-filter-builder-condition-value-height: calc(var(--spacing) * 7);--emr-filter-builder-condition-value-font-size: var(--text-tiny);--emr-filter-builder-condition-value-color: var(--color-neutral-800);--emr-filter-builder-condition-value-bg: var(--color-neutral-200);--emr-filter-builder-condition-value-font-weight: 400;--emr-filter-builder-condition-value-border-radius: .5rem;--emr-filter-builder-condition-value-bpadding: calc(var(--spacing) * .5) calc(var(--spacing) * 2);--emr-filter-builder-condition-value-hover-color: var(--color-neutral-800);--emr-filter-builder-condition-value-hover-bg: var(--color-neutral-300);--emr-filter-builder-condition-remove-color: oklch(63.7% .237 25.331);--emr-filter-builder-condition-remove-hover-color: oklch(57.7% .245 27.325);display:block}:host ::ng-deep .mat-mdc-form-field-infix{--mat-form-field-container-height: 46px !important;--mat-form-field-container-vertical-padding: 12px !important}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host .form-field{width:200px}:host .form-field-number{width:140px}:host .group-operations{gap:var(--emr-filter-builder-group-operations-gap)}:host .group{margin:var(--emr-filter-builder-group-margin);padding:var(--emr-filter-builder-group-padding);display:flex;flex-direction:column;gap:var(--emr-filter-builder-group-gap)}:host .group .group{margin-left:calc(var(--spacing) * 4)}:host .icon:empty{display:none}:host .group-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-group-operation-height);font-size:var(--emr-filter-builder-group-operation-font-size);font-weight:var(--emr-filter-builder-group-operation-font-weight);color:var(--emr-filter-builder-group-operation-color);background:var(--emr-filter-builder-group-operation-bg);border:var(--emr-filter-builder-group-operation-border);border-radius:var(--emr-filter-builder-group-operation-border-radius);padding:var(--emr-filter-builder-group-operation-bpadding)}:host .group-operation:hover{color:var(--emr-filter-builder-group-operation-hover-color);background:var(--emr-filter-builder-group-operation-hover-bg)}:host .group-operation:active,:host .group-operation.active{color:var(--emr-filter-builder-group-operation-active-color);background:var(--emr-filter-builder-group-operation-active-bg)}:host .condition{display:flex;align-items:center;gap:var(--emr-filter-builder-condition-gap)}:host .condition-field{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-field-height);font-size:var(--emr-filter-builder-condition-field-font-size);font-weight:var(--emr-filter-builder-condition-field-font-weight);color:var(--emr-filter-builder-condition-field-color);background:var(--emr-filter-builder-condition-field-bg);border-radius:var(--emr-filter-builder-condition-field-border-radius);padding:var(--emr-filter-builder-condition-field-bpadding)}:host .condition-field:hover{color:var(--emr-filter-builder-condition-field-hover-color);background:var(--emr-filter-builder-condition-field-hover-bg)}:host .add{line-height:0;color:var(--emr-filter-builder-group-add-color);cursor:pointer}:host .add:hover{color:var(--emr-filter-builder-group-add-hover-color)}:host .remove{line-height:0;color:var(--emr-filter-builder-condition-remove-color);cursor:pointer}:host .remove:hover{color:var(--emr-filter-builder-condition-remove-hover-color)}:host .condition-field:active,:host .condition-field.active{color:var(--emr-filter-builder-condition-field-active-color);background:var(--emr-filter-builder-condition-field-active-bg)}:host .condition-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-operation-height);font-size:var(--emr-filter-builder-condition-operation-font-size);font-weight:var(--emr-filter-builder-condition-operation-font-weight);color:var(--emr-filter-builder-condition-operation-color);background:var(--emr-filter-builder-condition-operation-bg);border-radius:var(--emr-filter-builder-condition-operation-border-radius);padding:var(--emr-filter-builder-condition-operation-bpadding)}:host .condition-operation:hover{color:var(--emr-filter-builder-condition-operation-hover-color);background:var(--emr-filter-builder-condition-operation-hover-bg)}:host .condition-operation:active,:host .condition-operation.active{color:var(--emr-filter-builder-condition-operation-active-color);background:var(--emr-filter-builder-condition-operation-active-bg)}:host .condition-value{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--emr-filter-builder-condition-value-height);font-size:var(--emr-filter-builder-condition-value-font-size);font-weight:var(--emr-filter-builder-condition-value-font-weight);color:var(--emr-filter-builder-condition-value-color);background:var(--emr-filter-builder-condition-value-bg);border-radius:var(--emr-filter-builder-condition-value-border-radius);padding:var(--emr-filter-builder-condition-value-bpadding)}:host .condition-value:hover{color:var(--emr-filter-builder-condition-value-hover-color);background:var(--emr-filter-builder-condition-value-hover-bg)}:host-context(html.dark){--emr-filter-builder-group-operation-color: var(--color-neutral-200);--emr-filter-builder-group-operation-hover-bg: var(--color-neutral-600);--emr-filter-builder-group-operation-active-bg: var(--color-neutral-650);--emr-filter-builder-group-operation-hover-color: var(--color-neutral-100);--emr-filter-builder-group-operation-active-color: var(--color-neutral-50)}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
326
326
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], fieldDefs: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldDefs", required: false }] }], categories: [{ type: i0.Input, args: [{ isSignal: true, alias: "categories", required: false }] }], groupOperations: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupOperations", required: false }] }], customOperations: [{ type: i0.Input, args: [{ isSignal: true, alias: "customOperations", required: false }] }], _prebuiltOperationDefs: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => FilterBuilderOperationDefDirective), { isSignal: true }] }], _customOperationDefs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => FilterBuilderOperationDefDirective), { isSignal: true }] }], valueChanged: [{ type: i0.Output, args: ["valueChanged"] }] } });
327
327
 
328
328
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"elementar-rt-components-filter-builder.mjs","sources":["../../../projects/components/filter-builder/src/filter-builder-operation-name.directive.ts","../../../projects/components/filter-builder/src/filter-builder-operation-icon.directive.ts","../../../projects/components/filter-builder/src/filter-builder-operation-def.directive.ts","../../../projects/components/filter-builder/src/filter-builder/filter-builder.component.ts","../../../projects/components/filter-builder/src/filter-builder/filter-builder.component.html","../../../projects/components/filter-builder/elementar-rt-components-filter-builder.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[emrFilterBuilderOperationName]'\r\n})\r\nexport class FilterBuilderOperationNameDirective {\r\n readonly templateRef = inject(TemplateRef);\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[emrFilterBuilderOperationIcon]'\r\n})\r\nexport class FilterBuilderOperationIconDirective {\r\n readonly templateRef = inject(TemplateRef);\r\n}\r\n","import { Directive, contentChild, input } from '@angular/core';\r\nimport { FilterBuilderOperationNameDirective } from './filter-builder-operation-name.directive';\r\nimport { FilterBuilderOperationIconDirective } from './filter-builder-operation-icon.directive';\r\n\r\n@Directive({\r\n selector: '[emrFilterBuilderOperationDef]'\r\n})\r\nexport class FilterBuilderOperationDefDirective {\r\n id = input('', {\r\n alias: 'emrFilterBuilderOperationDef'\r\n });\r\n allowedDataTypes = input<string[]>([]);\r\n readonly operationName = contentChild(FilterBuilderOperationNameDirective);\r\n readonly operationIcon = contentChild(FilterBuilderOperationIconDirective);\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n inject,\r\n Input,\r\n OnInit,\r\n output,\r\n PLATFORM_ID,\r\n viewChildren,\r\n contentChildren, TemplateRef, input\r\n} from '@angular/core';\r\nimport { isPlatformServer, NgTemplateOutlet } from '@angular/common';\r\nimport { FilterBuilderOperationDefDirective } from '../filter-builder-operation-def.directive';\r\nimport {\r\n FilterBuilderCondition,\r\n FilterBuilderFieldDataSourceItem,\r\n FilterBuilderFieldDef,\r\n FilterBuilderGroup,\r\n FilterBuilderItemType\r\n} from '../types';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenuTrigger, MatMenu, MatMenuItem } from '@angular/material/menu';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatOption } from '@angular/material/autocomplete';\r\nimport { MatFormField, MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { FilterBuilderOperationNameDirective } from '../filter-builder-operation-name.directive';\r\nimport { AutoFocusDirective, FocusElementDirective, MenuOptionGroupDirective } from '@elementar-rt/components/core';\r\n\r\n@Component({\r\n selector: 'emr-filter-builder',\r\n exportAs: 'emrFilterBuilder',\r\n imports: [\r\n MatIcon,\r\n MatMenuTrigger,\r\n MatMenu,\r\n MenuOptionGroupDirective,\r\n FormsModule,\r\n MatOption,\r\n MatMenuItem,\r\n NgTemplateOutlet,\r\n MatFormField,\r\n MatSelect,\r\n AutoFocusDirective,\r\n FocusElementDirective,\r\n MatInput,\r\n FilterBuilderOperationDefDirective,\r\n FilterBuilderOperationNameDirective\r\n ],\r\n templateUrl: './filter-builder.component.html',\r\n styleUrl: './filter-builder.component.scss',\r\n host: {\r\n 'class': 'emr-filter-builder'\r\n },\r\n})\r\nexport class FilterBuilderComponent implements OnInit, AfterViewInit {\r\n protected _cdr = inject(ChangeDetectorRef);\r\n protected _platformId = inject(PLATFORM_ID);\r\n protected _isServer = isPlatformServer(this._platformId);\r\n protected _operationAllowedTypesMap: Map<string, string[]> = new Map();\r\n private _resetMethodMap: { [prop: string]: (condition: FilterBuilderCondition) => void } = {\r\n '_resetStringValue': this._resetStringValue,\r\n '_resetBooleanValue': this._resetBooleanValue,\r\n '_resetArrayValue': this._resetArrayValue,\r\n '_resetNumberValue': this._resetNumberValue,\r\n };\r\n\r\n value = input<FilterBuilderGroup[]>([]);\r\n fieldDefs = input<FilterBuilderFieldDef[]>([]);\r\n categories = input([]);\r\n groupOperations = input([\r\n {\r\n id: 'and',\r\n name: 'And'\r\n },\r\n {\r\n id: 'or',\r\n name: 'Or'\r\n }\r\n ]);\r\n customOperations = input([]);\r\n\r\n protected _logicalOperator = this.groupOperations()[0].id;\r\n readonly _prebuiltOperationDefs = viewChildren(FilterBuilderOperationDefDirective);\r\n readonly _customOperationDefs = contentChildren(FilterBuilderOperationDefDirective);\r\n protected _operationDefs: FilterBuilderOperationDefDirective[] = [];\r\n\r\n readonly valueChanged = output<FilterBuilderGroup[]>();\r\n\r\n protected _value: FilterBuilderGroup[] = [];\r\n protected _operations: any[] = [];\r\n protected editItem: FilterBuilderCondition | undefined;\r\n\r\n ngOnInit() {\r\n if (this.value().length) {\r\n if (!this._isGroup(this.value()[0])) {\r\n throw new Error('Invalid filter value, first element should be a filter group');\r\n }\r\n\r\n this._logicalOperator = this.value()[0]['logicalOperator'] as string;\r\n this._value = JSON.parse(JSON.stringify(this.value()[0]['value']));\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this._operationDefs = [...this._prebuiltOperationDefs(), ...this._customOperationDefs()];\r\n this._operationDefs.forEach(operationDef => {\r\n this._operations.push({\r\n id: operationDef.id(),\r\n name: operationDef.operationName()?.templateRef\r\n });\r\n operationDef.allowedDataTypes().forEach((allowedType: string) => {\r\n if (!this._operationAllowedTypesMap.has(allowedType)) {\r\n this._operationAllowedTypesMap.set(allowedType, []);\r\n }\r\n\r\n const allowedTypeValue = this._operationAllowedTypesMap.get(allowedType) as string[];\r\n allowedTypeValue.push(operationDef.id());\r\n this._operationAllowedTypesMap.set(allowedType, allowedTypeValue);\r\n });\r\n });\r\n this._cdr.detectChanges();\r\n }\r\n\r\n addCondition(targetGroup?: FilterBuilderGroup) {\r\n const value = !targetGroup ? this._value : targetGroup.value;\r\n value.push(\r\n {\r\n value: [this.fieldDefs()[0].dataField, this._operations[0].id, '']\r\n }\r\n );\r\n }\r\n\r\n addGroup(targetGroup?: FilterBuilderGroup) {\r\n const value = !targetGroup ? this._value : targetGroup.value;\r\n value.push(\r\n {\r\n logicalOperator: this.groupOperations()[0].id,\r\n value: []\r\n }\r\n );\r\n }\r\n\r\n getConditionField(dataField: string): FilterBuilderFieldDef | undefined {\r\n return this.fieldDefs().find(field => field.dataField === dataField);\r\n }\r\n\r\n getConditionOperation(id: string) {\r\n return this._operations.find(operation => operation.id === id);\r\n }\r\n\r\n getSelectedGroupOperationName(targetGroup?: FilterBuilderGroup): string {\r\n const groupLogicalOperatorId = targetGroup ? targetGroup.logicalOperator : this._logicalOperator\r\n return this.groupOperations().find(groupOperator => groupOperator.id === groupLogicalOperatorId)?.name || '';\r\n }\r\n\r\n selectConditionField(item: FilterBuilderCondition, field: FilterBuilderFieldDef): void {\r\n this.editItem = undefined;\r\n let allowedTypes = this._operationAllowedTypesMap.get(field.dataType) as string[];\r\n item['value'][1] = allowedTypes[0];\r\n this._resetValue(field, item);\r\n this._emitChangeEvent();\r\n }\r\n\r\n operationChanged(item: FilterBuilderCondition, operation: string): void {\r\n this.editItem = undefined;\r\n const oldOperation = item['value'][1];\r\n\r\n if (oldOperation === 'equals' && operation === 'isAnyOf') {\r\n item['value'][2] = [];\r\n } else if (oldOperation === 'isAnyOf' && operation === 'equals') {\r\n item['value'][2] = null;\r\n }\r\n\r\n if (oldOperation === 'isBetween' && operation !== 'isBetween') {\r\n item['value'][2] = null;\r\n } else if (oldOperation !== 'isBetween' && operation === 'isBetween') {\r\n item['value'][2] = [];\r\n }\r\n\r\n if (['isNotBlank', 'isBlank'].includes(operation)) {\r\n item['value'][2] = null;\r\n }\r\n\r\n item['value'][1] = operation;\r\n this._emitChangeEvent();\r\n }\r\n\r\n removeCondition(index: number, items: FilterBuilderItemType[]): void {\r\n items.splice(index, 1);\r\n this._emitChangeEvent();\r\n }\r\n\r\n isOperationAllowedForCondition(dataField: string, operationId: string): boolean {\r\n const fieldDef = this.fieldDefs().find(f =>\r\n f.dataField === dataField\r\n ) as FilterBuilderFieldDef;\r\n\r\n let allowedTypes = this._operationAllowedTypesMap.get(fieldDef.dataType);\r\n\r\n if (!allowedTypes) {\r\n throw new Error('There are not operations for the datatype: ' + fieldDef.dataType);\r\n }\r\n\r\n return allowedTypes.includes(operationId);\r\n }\r\n\r\n modifyValue(item: FilterBuilderCondition): void {\r\n this.editItem = item;\r\n }\r\n\r\n getFieldType(item: FilterBuilderCondition): string {\r\n return (this.fieldDefs().find(f =>\r\n f.dataField === item['value'][0]\r\n ) as FilterBuilderFieldDef).dataType;\r\n }\r\n\r\n isValueNotEmpty(item: FilterBuilderCondition): boolean {\r\n if (this.getFieldType(item) === 'array') {\r\n if (item['value'][1] === 'equals') {\r\n return item['value'][2] !== null && item['value'][2] !== '';\r\n } else {\r\n return item['value'][2].length > 0;\r\n }\r\n }\r\n\r\n if (item['value'][1] === 'isBetween') {\r\n return item['value'][2].length === 2 && item['value'][2][0] !== null && item['value'][2][1] !== null;\r\n }\r\n\r\n return item['value'][2] !== null && item['value'][2] !== '';\r\n }\r\n\r\n cancelEdit(delay = 0): void {\r\n setTimeout(() => {\r\n this.editItem = undefined;\r\n this._cdr.detectChanges();\r\n }, delay);\r\n }\r\n\r\n getOptions(item: FilterBuilderCondition): FilterBuilderFieldDataSourceItem[] {\r\n const fieldDef = this._getFieldDef(item);\r\n return fieldDef.lookup?.dataSource as FilterBuilderFieldDataSourceItem[];\r\n }\r\n\r\n getDataSourceItemNameById(item: FilterBuilderCondition, dataSourceItemId: string): string {\r\n const fieldDef = this._getFieldDef(item);\r\n return (fieldDef.lookup?.dataSource as FilterBuilderFieldDataSourceItem[]).find(\r\n item => item.id === dataSourceItemId\r\n )?.name || '';\r\n }\r\n\r\n selectBlur(event: FocusEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const select = event.target as HTMLElement;\r\n\r\n setTimeout(() => {\r\n const formField = select.closest('.mat-mdc-form-field');\r\n\r\n if (formField) {\r\n if (!formField.classList.contains('mat-focused')) {\r\n this.cancelEdit();\r\n }\r\n }\r\n }, 25);\r\n }\r\n\r\n selectClosed(): void {\r\n this.cancelEdit();\r\n this._emitChangeEvent();\r\n }\r\n\r\n protected operationIconTemplateRef(operation: FilterBuilderOperationDefDirective): TemplateRef<any> {\r\n return operation.operationIcon()?.templateRef as TemplateRef<any>;\r\n }\r\n\r\n protected operationNameTemplateRef(operation: FilterBuilderOperationDefDirective): TemplateRef<any> {\r\n return operation.operationName()?.templateRef as TemplateRef<any>;\r\n }\r\n\r\n protected _isGroup(item: FilterBuilderItemType): item is FilterBuilderGroup {\r\n return 'logicalOperator' in item;\r\n }\r\n\r\n protected _isCondition(item: FilterBuilderItemType): item is FilterBuilderCondition {\r\n return !('logicalOperator' in item);\r\n }\r\n\r\n protected _emitChangeEvent(): void {\r\n const value = this._normalizeValue(this._value);\r\n\r\n if (value.length > 0) {\r\n this.valueChanged.emit([\r\n {\r\n logicalOperator: this._logicalOperator,\r\n value: value\r\n }\r\n ]);\r\n } else {\r\n this.valueChanged.emit([]);\r\n }\r\n }\r\n\r\n private _getFieldDef(condition: FilterBuilderCondition): FilterBuilderFieldDef {\r\n return this.fieldDefs().find(f =>\r\n f.dataField === condition['value'][0]\r\n ) as FilterBuilderFieldDef;\r\n }\r\n\r\n private _resetValue(field: FilterBuilderFieldDef, condition: FilterBuilderCondition): void {\r\n const fieldDef = this.fieldDefs().find(f =>\r\n f.dataField === field.dataField\r\n ) as FilterBuilderFieldDef;\r\n const resetMethod = '_reset' + this._capitalizeFirstLetter(fieldDef.dataType) + 'Value';\r\n this._resetMethodMap[resetMethod](condition);\r\n }\r\n\r\n private _resetStringValue(condition: FilterBuilderCondition): void {\r\n condition['value'][2] = '';\r\n }\r\n\r\n private _resetNumberValue(condition: FilterBuilderCondition): void {\r\n condition['value'][2] = null;\r\n }\r\n\r\n private _resetArrayValue(condition: FilterBuilderCondition): void {\r\n if (condition['value'][1] === 'equals') {\r\n condition['value'][2] = null;\r\n } else {\r\n condition['value'][2] = [];\r\n }\r\n }\r\n\r\n private _resetBooleanValue(condition: FilterBuilderCondition): void {\r\n condition['value'][2] = false;\r\n }\r\n\r\n private _capitalizeFirstLetter(value: string) {\r\n return value.charAt(0).toUpperCase() + value.slice(1);\r\n }\r\n\r\n private _normalizeValue(value: FilterBuilderItemType[]): FilterBuilderItemType[] {\r\n let result: FilterBuilderItemType[] = [];\r\n value.forEach(item => {\r\n if (this._isGroup(item)) {\r\n const groupValue = this._normalizeValue(item.value);\r\n\r\n if (groupValue.length > 0) {\r\n result = [...result, {\r\n logicalOperator: item.logicalOperator,\r\n value: groupValue\r\n }];\r\n }\r\n } else {\r\n if (this.isValueNotEmpty(item)) {\r\n result.push(item);\r\n }\r\n }\r\n });\r\n return result;\r\n }\r\n}\r\n","@if (_isServer) {\r\n <ng-content/>\r\n}\r\n\r\n<ng-template #itemsTpl let-items>\r\n <div class=\"group\">\r\n @for (item of items; track item; let index = $index) {\r\n @if (_isGroup(item)) {\r\n <div class=\"flex items-center group-operations\">\r\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\r\n <mat-icon class=\"font-icon\">close</mat-icon>\r\n </div>\r\n <button [matMenuTriggerFor]=\"nestedGroupOperationsMenu\" class=\"group-operation\">\r\n {{ getSelectedGroupOperationName(item) }}\r\n </button>\r\n <div [matMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\r\n <mat-icon class=\"font-icon\">add</mat-icon>\r\n </div>\r\n <mat-menu #nestedGroupOperationsMenu>\r\n <div emrMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\r\n @for (groupOperation of groupOperations(); track groupOperation.id) {\r\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\r\n }\r\n </div>\r\n </mat-menu>\r\n <mat-menu #addGroupMenu>\r\n <button mat-menu-item (click)=\"addCondition(item)\">Add Condition</button>\r\n <button mat-menu-item (click)=\"addGroup(item)\">Add Group</button>\r\n </mat-menu>\r\n </div>\r\n @if (item['value'].length > 0) {\r\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"></ng-container>\r\n }\r\n } @else if (_isCondition(item)) {\r\n <div class=\"condition\">\r\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\r\n <mat-icon class=\"font-icon\">close</mat-icon>\r\n </div>\r\n <button class=\"condition-field\"\r\n [matMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}</button>\r\n <button class=\"condition-operation\"\r\n [matMenuTriggerFor]=\"operationsMenu\">\r\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"></ng-template>\r\n </button>\r\n <div class=\"relative\">\r\n @if (editItem && editItem === item) {\r\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\r\n @switch (getFieldType(editItem)) {\r\n @case ('array') {\r\n @switch (editItem['value'][1]) {\r\n @case ('equals') {\r\n <mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Select...\"\r\n emrAutoFocus\r\n (blur)=\"selectBlur($event)\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n @for (option of getOptions(editItem); track option.id) {\r\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n\r\n @case ('isAnyOf') {\r\n <mat-form-field class=\"form-field\">\r\n <mat-select placeholder=\"Select...\" multiple\r\n emrAutoFocus\r\n (blur)=\"selectBlur($event)\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (closed)=\"selectClosed()\">\r\n @for (option of getOptions(editItem); track option.id) {\r\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n }\r\n }\r\n\r\n @case ('number') {\r\n @switch (editItem['value'][1]) {\r\n @case ('isBetween') {\r\n <div class=\"flex gap-2 items-center\"\r\n emrFocusElement (elementBlurred)=\"cancelEdit()\">\r\n <mat-form-field class=\"form-field-number\">\r\n <input type=\"number\" matInput emrAutoFocus\r\n [(ngModel)]=\"item['value'][2][0]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n <div class=\"text-neutral-500\">&ndash;</div>\r\n <mat-form-field class=\"form-field-number\">\r\n <input type=\"number\" matInput\r\n [(ngModel)]=\"item['value'][2][1]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n </div>\r\n }\r\n @default {\r\n <mat-form-field class=\"form-field-number\">\r\n <input type=\"number\" matInput emrAutoFocus\r\n (blur)=\"cancelEdit()\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n }\r\n }\r\n }\r\n\r\n @default {\r\n <mat-form-field class=\"form-field\">\r\n <input type=\"text\" matInput emrAutoFocus\r\n (blur)=\"cancelEdit()\"\r\n [(ngModel)]=\"item['value'][2]\"\r\n (ngModelChange)=\"_emitChangeEvent()\">\r\n </mat-form-field>\r\n }\r\n }\r\n </div>\r\n } @else {\r\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\r\n @if (isValueNotEmpty(item)) {\r\n @if (getFieldType(item) === 'array') {\r\n @if (item['value'][1] === 'equals') {\r\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\r\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\r\n </button>\r\n } @else {\r\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\r\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\r\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\r\n @if (!last) {\r\n <span class=\"text-neutral-500\">|</span>\r\n }\r\n }\r\n </button>\r\n }\r\n } @else {\r\n @if (item['value'][1] === 'isBetween') {\r\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\r\n <span>{{ item['value'][2][0] }}</span>\r\n <span class=\"text-neutral-500\">&ndash;</span>\r\n <span>{{ item['value'][2][1] }}</span>\r\n </button>\r\n } @else {\r\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\r\n <span>{{ item['value'][2] }}</span>\r\n </button>\r\n }\r\n }\r\n } @else {\r\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\r\n <span i18n>&lt;enter a value&gt;</span>\r\n </button>\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n <mat-menu #fieldsMenu>\r\n <div emrMenuOptionGroup [(ngModel)]=\"item['value'][0]\">\r\n @for (fieldDef of fieldDefs(); track fieldDef) {\r\n <mat-option [value]=\"fieldDef.dataField\"\r\n (click)=\"selectConditionField(item, fieldDef)\">{{ fieldDef.name }}</mat-option>\r\n }\r\n </div>\r\n </mat-menu>\r\n <mat-menu #operationsMenu>\r\n <div emrMenuOptionGroup [ngModel]=\"item['value'][1]\">\r\n @for (operation of _operationDefs; track operation.id()) {\r\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\r\n <mat-option [value]=\"operation.id()\" (click)=\"operationChanged(item, operation.id())\">\r\n <div class=\"flex items-center gap-3\">\r\n @if (operation.operationIcon()) {\r\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"></ng-template>\r\n }\r\n <div>\r\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"></ng-template>\r\n </div>\r\n </div>\r\n </mat-option>\r\n </div>\r\n }\r\n </div>\r\n </mat-menu>\r\n }\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<div class=\"group\">\r\n <div class=\"flex items-center group-operations\">\r\n <button [matMenuTriggerFor]=\"groupOperationsMenu\" class=\"group-operation\">\r\n {{ getSelectedGroupOperationName() }}\r\n </button>\r\n <div [matMenuTriggerFor]=\"addMenu\" class=\"add\">\r\n <mat-icon class=\"font-icon\">add</mat-icon>\r\n </div>\r\n </div>\r\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"></ng-container>\r\n</div>\r\n\r\n<mat-menu #groupOperationsMenu>\r\n <div emrMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\r\n @for (groupOperation of groupOperations(); track groupOperation.id) {\r\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\r\n }\r\n </div>\r\n</mat-menu>\r\n<mat-menu #addMenu>\r\n <button mat-menu-item (click)=\"addCondition()\">Add Condition</button>\r\n <button mat-menu-item (click)=\"addGroup()\">Add Group</button>\r\n</mat-menu>\r\n\r\n<ng-container emrFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Contains</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Does not contain</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Starts with</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Ends with</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\r\n <ng-template emrFilterBuilderOperationName>Equals</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\r\n <ng-template emrFilterBuilderOperationName>Not equals</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is less then</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is less then or equal to</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is greater then</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is greater then or equal to</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Is blank</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\r\n <ng-template emrFilterBuilderOperationName>Is not blank</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\r\n <ng-template emrFilterBuilderOperationName>Is between</ng-template>\r\n</ng-container>\r\n<ng-container emrFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\r\n <ng-template emrFilterBuilderOperationName>Is any of</ng-template>\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elementar-rt-components-filter-builder.mjs","sources":["../../../projects/components/filter-builder/src/filter-builder-operation-name.directive.ts","../../../projects/components/filter-builder/src/filter-builder-operation-icon.directive.ts","../../../projects/components/filter-builder/src/filter-builder-operation-def.directive.ts","../../../projects/components/filter-builder/src/filter-builder/filter-builder.component.ts","../../../projects/components/filter-builder/src/filter-builder/filter-builder.component.html","../../../projects/components/filter-builder/elementar-rt-components-filter-builder.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[emrFilterBuilderOperationName]'\n})\nexport class FilterBuilderOperationNameDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[emrFilterBuilderOperationIcon]'\n})\nexport class FilterBuilderOperationIconDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, contentChild, input } from '@angular/core';\nimport { FilterBuilderOperationNameDirective } from './filter-builder-operation-name.directive';\nimport { FilterBuilderOperationIconDirective } from './filter-builder-operation-icon.directive';\n\n@Directive({\n selector: '[emrFilterBuilderOperationDef]'\n})\nexport class FilterBuilderOperationDefDirective {\n id = input('', {\n alias: 'emrFilterBuilderOperationDef'\n });\n allowedDataTypes = input<string[]>([]);\n readonly operationName = contentChild(FilterBuilderOperationNameDirective);\n readonly operationIcon = contentChild(FilterBuilderOperationIconDirective);\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnInit,\n output,\n PLATFORM_ID,\n viewChildren,\n contentChildren, TemplateRef, input\n} from '@angular/core';\nimport { isPlatformServer, NgTemplateOutlet } from '@angular/common';\nimport { FilterBuilderOperationDefDirective } from '../filter-builder-operation-def.directive';\nimport {\n FilterBuilderCondition,\n FilterBuilderFieldDataSourceItem,\n FilterBuilderFieldDef,\n FilterBuilderGroup,\n FilterBuilderItemType\n} from '../types';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuTrigger, MatMenu, MatMenuItem } from '@angular/material/menu';\nimport { FormsModule } from '@angular/forms';\nimport { MatOption } from '@angular/material/autocomplete';\nimport { MatFormField, MatInput } from '@angular/material/input';\nimport { MatSelect } from '@angular/material/select';\nimport { FilterBuilderOperationNameDirective } from '../filter-builder-operation-name.directive';\nimport { AutoFocusDirective, FocusElementDirective, MenuOptionGroupDirective } from '@elementar-rt/components/core';\n\n@Component({\n selector: 'emr-filter-builder',\n exportAs: 'emrFilterBuilder',\n imports: [\n MatIcon,\n MatMenuTrigger,\n MatMenu,\n MenuOptionGroupDirective,\n FormsModule,\n MatOption,\n MatMenuItem,\n NgTemplateOutlet,\n MatFormField,\n MatSelect,\n AutoFocusDirective,\n FocusElementDirective,\n MatInput,\n FilterBuilderOperationDefDirective,\n FilterBuilderOperationNameDirective\n ],\n templateUrl: './filter-builder.component.html',\n styleUrl: './filter-builder.component.scss',\n host: {\n 'class': 'emr-filter-builder'\n },\n})\nexport class FilterBuilderComponent implements OnInit, AfterViewInit {\n protected _cdr = inject(ChangeDetectorRef);\n protected _platformId = inject(PLATFORM_ID);\n protected _isServer = isPlatformServer(this._platformId);\n protected _operationAllowedTypesMap: Map<string, string[]> = new Map();\n private _resetMethodMap: { [prop: string]: (condition: FilterBuilderCondition) => void } = {\n '_resetStringValue': this._resetStringValue,\n '_resetBooleanValue': this._resetBooleanValue,\n '_resetArrayValue': this._resetArrayValue,\n '_resetNumberValue': this._resetNumberValue,\n };\n\n value = input<FilterBuilderGroup[]>([]);\n fieldDefs = input<FilterBuilderFieldDef[]>([]);\n categories = input([]);\n groupOperations = input([\n {\n id: 'and',\n name: 'And'\n },\n {\n id: 'or',\n name: 'Or'\n }\n ]);\n customOperations = input([]);\n\n protected _logicalOperator = this.groupOperations()[0].id;\n readonly _prebuiltOperationDefs = viewChildren(FilterBuilderOperationDefDirective);\n readonly _customOperationDefs = contentChildren(FilterBuilderOperationDefDirective);\n protected _operationDefs: FilterBuilderOperationDefDirective[] = [];\n\n readonly valueChanged = output<FilterBuilderGroup[]>();\n\n protected _value: FilterBuilderGroup[] = [];\n protected _operations: any[] = [];\n protected editItem: FilterBuilderCondition | undefined;\n\n ngOnInit() {\n if (this.value().length) {\n if (!this._isGroup(this.value()[0])) {\n throw new Error('Invalid filter value, first element should be a filter group');\n }\n\n this._logicalOperator = this.value()[0]['logicalOperator'] as string;\n this._value = JSON.parse(JSON.stringify(this.value()[0]['value']));\n }\n }\n\n ngAfterViewInit(): void {\n this._operationDefs = [...this._prebuiltOperationDefs(), ...this._customOperationDefs()];\n this._operationDefs.forEach(operationDef => {\n this._operations.push({\n id: operationDef.id(),\n name: operationDef.operationName()?.templateRef\n });\n operationDef.allowedDataTypes().forEach((allowedType: string) => {\n if (!this._operationAllowedTypesMap.has(allowedType)) {\n this._operationAllowedTypesMap.set(allowedType, []);\n }\n\n const allowedTypeValue = this._operationAllowedTypesMap.get(allowedType) as string[];\n allowedTypeValue.push(operationDef.id());\n this._operationAllowedTypesMap.set(allowedType, allowedTypeValue);\n });\n });\n this._cdr.detectChanges();\n }\n\n addCondition(targetGroup?: FilterBuilderGroup) {\n const value = !targetGroup ? this._value : targetGroup.value;\n value.push(\n {\n value: [this.fieldDefs()[0].dataField, this._operations[0].id, '']\n }\n );\n }\n\n addGroup(targetGroup?: FilterBuilderGroup) {\n const value = !targetGroup ? this._value : targetGroup.value;\n value.push(\n {\n logicalOperator: this.groupOperations()[0].id,\n value: []\n }\n );\n }\n\n getConditionField(dataField: string): FilterBuilderFieldDef | undefined {\n return this.fieldDefs().find(field => field.dataField === dataField);\n }\n\n getConditionOperation(id: string) {\n return this._operations.find(operation => operation.id === id);\n }\n\n getSelectedGroupOperationName(targetGroup?: FilterBuilderGroup): string {\n const groupLogicalOperatorId = targetGroup ? targetGroup.logicalOperator : this._logicalOperator\n return this.groupOperations().find(groupOperator => groupOperator.id === groupLogicalOperatorId)?.name || '';\n }\n\n selectConditionField(item: FilterBuilderCondition, field: FilterBuilderFieldDef): void {\n this.editItem = undefined;\n let allowedTypes = this._operationAllowedTypesMap.get(field.dataType) as string[];\n item['value'][1] = allowedTypes[0];\n this._resetValue(field, item);\n this._emitChangeEvent();\n }\n\n operationChanged(item: FilterBuilderCondition, operation: string): void {\n this.editItem = undefined;\n const oldOperation = item['value'][1];\n\n if (oldOperation === 'equals' && operation === 'isAnyOf') {\n item['value'][2] = [];\n } else if (oldOperation === 'isAnyOf' && operation === 'equals') {\n item['value'][2] = null;\n }\n\n if (oldOperation === 'isBetween' && operation !== 'isBetween') {\n item['value'][2] = null;\n } else if (oldOperation !== 'isBetween' && operation === 'isBetween') {\n item['value'][2] = [];\n }\n\n if (['isNotBlank', 'isBlank'].includes(operation)) {\n item['value'][2] = null;\n }\n\n item['value'][1] = operation;\n this._emitChangeEvent();\n }\n\n removeCondition(index: number, items: FilterBuilderItemType[]): void {\n items.splice(index, 1);\n this._emitChangeEvent();\n }\n\n isOperationAllowedForCondition(dataField: string, operationId: string): boolean {\n const fieldDef = this.fieldDefs().find(f =>\n f.dataField === dataField\n ) as FilterBuilderFieldDef;\n\n let allowedTypes = this._operationAllowedTypesMap.get(fieldDef.dataType);\n\n if (!allowedTypes) {\n throw new Error('There are not operations for the datatype: ' + fieldDef.dataType);\n }\n\n return allowedTypes.includes(operationId);\n }\n\n modifyValue(item: FilterBuilderCondition): void {\n this.editItem = item;\n }\n\n getFieldType(item: FilterBuilderCondition): string {\n return (this.fieldDefs().find(f =>\n f.dataField === item['value'][0]\n ) as FilterBuilderFieldDef).dataType;\n }\n\n isValueNotEmpty(item: FilterBuilderCondition): boolean {\n if (this.getFieldType(item) === 'array') {\n if (item['value'][1] === 'equals') {\n return item['value'][2] !== null && item['value'][2] !== '';\n } else {\n return item['value'][2].length > 0;\n }\n }\n\n if (item['value'][1] === 'isBetween') {\n return item['value'][2].length === 2 && item['value'][2][0] !== null && item['value'][2][1] !== null;\n }\n\n return item['value'][2] !== null && item['value'][2] !== '';\n }\n\n cancelEdit(delay = 0): void {\n setTimeout(() => {\n this.editItem = undefined;\n this._cdr.detectChanges();\n }, delay);\n }\n\n getOptions(item: FilterBuilderCondition): FilterBuilderFieldDataSourceItem[] {\n const fieldDef = this._getFieldDef(item);\n return fieldDef.lookup?.dataSource as FilterBuilderFieldDataSourceItem[];\n }\n\n getDataSourceItemNameById(item: FilterBuilderCondition, dataSourceItemId: string): string {\n const fieldDef = this._getFieldDef(item);\n return (fieldDef.lookup?.dataSource as FilterBuilderFieldDataSourceItem[]).find(\n item => item.id === dataSourceItemId\n )?.name || '';\n }\n\n selectBlur(event: FocusEvent): void {\n event.preventDefault();\n event.stopPropagation();\n const select = event.target as HTMLElement;\n\n setTimeout(() => {\n const formField = select.closest('.mat-mdc-form-field');\n\n if (formField) {\n if (!formField.classList.contains('mat-focused')) {\n this.cancelEdit();\n }\n }\n }, 25);\n }\n\n selectClosed(): void {\n this.cancelEdit();\n this._emitChangeEvent();\n }\n\n protected operationIconTemplateRef(operation: FilterBuilderOperationDefDirective): TemplateRef<any> {\n return operation.operationIcon()?.templateRef as TemplateRef<any>;\n }\n\n protected operationNameTemplateRef(operation: FilterBuilderOperationDefDirective): TemplateRef<any> {\n return operation.operationName()?.templateRef as TemplateRef<any>;\n }\n\n protected _isGroup(item: FilterBuilderItemType): item is FilterBuilderGroup {\n return 'logicalOperator' in item;\n }\n\n protected _isCondition(item: FilterBuilderItemType): item is FilterBuilderCondition {\n return !('logicalOperator' in item);\n }\n\n protected _emitChangeEvent(): void {\n const value = this._normalizeValue(this._value);\n\n if (value.length > 0) {\n this.valueChanged.emit([\n {\n logicalOperator: this._logicalOperator,\n value: value\n }\n ]);\n } else {\n this.valueChanged.emit([]);\n }\n }\n\n private _getFieldDef(condition: FilterBuilderCondition): FilterBuilderFieldDef {\n return this.fieldDefs().find(f =>\n f.dataField === condition['value'][0]\n ) as FilterBuilderFieldDef;\n }\n\n private _resetValue(field: FilterBuilderFieldDef, condition: FilterBuilderCondition): void {\n const fieldDef = this.fieldDefs().find(f =>\n f.dataField === field.dataField\n ) as FilterBuilderFieldDef;\n const resetMethod = '_reset' + this._capitalizeFirstLetter(fieldDef.dataType) + 'Value';\n this._resetMethodMap[resetMethod](condition);\n }\n\n private _resetStringValue(condition: FilterBuilderCondition): void {\n condition['value'][2] = '';\n }\n\n private _resetNumberValue(condition: FilterBuilderCondition): void {\n condition['value'][2] = null;\n }\n\n private _resetArrayValue(condition: FilterBuilderCondition): void {\n if (condition['value'][1] === 'equals') {\n condition['value'][2] = null;\n } else {\n condition['value'][2] = [];\n }\n }\n\n private _resetBooleanValue(condition: FilterBuilderCondition): void {\n condition['value'][2] = false;\n }\n\n private _capitalizeFirstLetter(value: string) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n\n private _normalizeValue(value: FilterBuilderItemType[]): FilterBuilderItemType[] {\n let result: FilterBuilderItemType[] = [];\n value.forEach(item => {\n if (this._isGroup(item)) {\n const groupValue = this._normalizeValue(item.value);\n\n if (groupValue.length > 0) {\n result = [...result, {\n logicalOperator: item.logicalOperator,\n value: groupValue\n }];\n }\n } else {\n if (this.isValueNotEmpty(item)) {\n result.push(item);\n }\n }\n });\n return result;\n }\n}\n","@if (_isServer) {\n <ng-content/>\n}\n\n<ng-template #itemsTpl let-items>\n <div class=\"group\">\n @for (item of items; track item; let index = $index) {\n @if (_isGroup(item)) {\n <div class=\"flex items-center group-operations\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <mat-icon class=\"font-icon\">close</mat-icon>\n </div>\n <button [matMenuTriggerFor]=\"nestedGroupOperationsMenu\" class=\"group-operation\">\n {{ getSelectedGroupOperationName(item) }}\n </button>\n <div [matMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\n <mat-icon class=\"font-icon\">add</mat-icon>\n </div>\n <mat-menu #nestedGroupOperationsMenu>\n <div emrMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\n }\n </div>\n </mat-menu>\n <mat-menu #addGroupMenu>\n <button mat-menu-item (click)=\"addCondition(item)\">Add Condition</button>\n <button mat-menu-item (click)=\"addGroup(item)\">Add Group</button>\n </mat-menu>\n </div>\n @if (item['value'].length > 0) {\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"></ng-container>\n }\n } @else if (_isCondition(item)) {\n <div class=\"condition\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <mat-icon class=\"font-icon\">close</mat-icon>\n </div>\n <button class=\"condition-field\"\n [matMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}</button>\n <button class=\"condition-operation\"\n [matMenuTriggerFor]=\"operationsMenu\">\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"></ng-template>\n </button>\n <div class=\"relative\">\n @if (editItem && editItem === item) {\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\n @switch (getFieldType(editItem)) {\n @case ('array') {\n @switch (editItem['value'][1]) {\n @case ('equals') {\n <mat-form-field class=\"form-field\">\n <mat-select placeholder=\"Select...\"\n emrAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n @for (option of getOptions(editItem); track option.id) {\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n\n @case ('isAnyOf') {\n <mat-form-field class=\"form-field\">\n <mat-select placeholder=\"Select...\" multiple\n emrAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (closed)=\"selectClosed()\">\n @for (option of getOptions(editItem); track option.id) {\n <mat-option [value]=\"option.id\">{{ option.name }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n }\n }\n\n @case ('number') {\n @switch (editItem['value'][1]) {\n @case ('isBetween') {\n <div class=\"flex gap-2 items-center\"\n emrFocusElement (elementBlurred)=\"cancelEdit()\">\n <mat-form-field class=\"form-field-number\">\n <input type=\"number\" matInput emrAutoFocus\n [(ngModel)]=\"item['value'][2][0]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n <div class=\"text-neutral-500\">&ndash;</div>\n <mat-form-field class=\"form-field-number\">\n <input type=\"number\" matInput\n [(ngModel)]=\"item['value'][2][1]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n </div>\n }\n @default {\n <mat-form-field class=\"form-field-number\">\n <input type=\"number\" matInput emrAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n }\n }\n }\n\n @default {\n <mat-form-field class=\"form-field\">\n <input type=\"text\" matInput emrAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </mat-form-field>\n }\n }\n </div>\n } @else {\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\n @if (isValueNotEmpty(item)) {\n @if (getFieldType(item) === 'array') {\n @if (item['value'][1] === 'equals') {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\n </button>\n } @else {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\n @if (!last) {\n <span class=\"text-neutral-500\">|</span>\n }\n }\n </button>\n }\n } @else {\n @if (item['value'][1] === 'isBetween') {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2][0] }}</span>\n <span class=\"text-neutral-500\">&ndash;</span>\n <span>{{ item['value'][2][1] }}</span>\n </button>\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2] }}</span>\n </button>\n }\n }\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span i18n>&lt;enter a value&gt;</span>\n </button>\n }\n }\n }\n </div>\n </div>\n <mat-menu #fieldsMenu>\n <div emrMenuOptionGroup [(ngModel)]=\"item['value'][0]\">\n @for (fieldDef of fieldDefs(); track fieldDef) {\n <mat-option [value]=\"fieldDef.dataField\"\n (click)=\"selectConditionField(item, fieldDef)\">{{ fieldDef.name }}</mat-option>\n }\n </div>\n </mat-menu>\n <mat-menu #operationsMenu>\n <div emrMenuOptionGroup [ngModel]=\"item['value'][1]\">\n @for (operation of _operationDefs; track operation.id()) {\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\n <mat-option [value]=\"operation.id()\" (click)=\"operationChanged(item, operation.id())\">\n <div class=\"flex items-center gap-3\">\n @if (operation.operationIcon()) {\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"></ng-template>\n }\n <div>\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"></ng-template>\n </div>\n </div>\n </mat-option>\n </div>\n }\n </div>\n </mat-menu>\n }\n }\n </div>\n</ng-template>\n\n<div class=\"group\">\n <div class=\"flex items-center group-operations\">\n <button [matMenuTriggerFor]=\"groupOperationsMenu\" class=\"group-operation\">\n {{ getSelectedGroupOperationName() }}\n </button>\n <div [matMenuTriggerFor]=\"addMenu\" class=\"add\">\n <mat-icon class=\"font-icon\">add</mat-icon>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"></ng-container>\n</div>\n\n<mat-menu #groupOperationsMenu>\n <div emrMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <mat-option [value]=\"groupOperation.id\">{{ groupOperation.name }}</mat-option>\n }\n </div>\n</mat-menu>\n<mat-menu #addMenu>\n <button mat-menu-item (click)=\"addCondition()\">Add Condition</button>\n <button mat-menu-item (click)=\"addGroup()\">Add Group</button>\n</mat-menu>\n\n<ng-container emrFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Contains</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Does not contain</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Starts with</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Ends with</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\n <ng-template emrFilterBuilderOperationName>Equals</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\n <ng-template emrFilterBuilderOperationName>Not equals</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is less then</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is less then or equal to</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is greater then</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is greater then or equal to</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Is blank</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template emrFilterBuilderOperationName>Is not blank</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\n <ng-template emrFilterBuilderOperationName>Is between</ng-template>\n</ng-container>\n<ng-container emrFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\n <ng-template emrFilterBuilderOperationName>Is any of</ng-template>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}