@updevs/components 1.0.0-alpha.10 → 1.0.0-alpha.100

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 (736) hide show
  1. package/README.md +1 -8
  2. package/assets/styles/_core.scss +9 -0
  3. package/assets/styles/_debug.scss +49 -0
  4. package/assets/styles/_props.scss +91 -0
  5. package/assets/styles/_updevs.scss +12 -0
  6. package/assets/styles/_utilities-marketing.scss +209 -0
  7. package/assets/styles/_utilities.scss +127 -92
  8. package/assets/styles/_variables-dark.scss +8 -6
  9. package/assets/styles/_variables.scss +326 -257
  10. package/assets/styles/helpers/_index.scss +143 -0
  11. package/assets/styles/layout/_core.scss +3 -2
  12. package/assets/styles/layout/_dark.scss +40 -35
  13. package/assets/styles/layout/_footer.scss +1 -1
  14. package/assets/styles/layout/_navbar.scss +31 -19
  15. package/assets/styles/layout/_page.scss +6 -5
  16. package/assets/styles/layout/_root.scss +26 -34
  17. package/assets/styles/marketing/_browser.scss +67 -0
  18. package/assets/styles/marketing/_core.scss +8 -0
  19. package/assets/styles/marketing/_filters.scss +0 -0
  20. package/assets/styles/marketing/_hero.scss +70 -0
  21. package/assets/styles/marketing/_pricing.scss +111 -0
  22. package/assets/styles/marketing/_sections.scss +124 -0
  23. package/assets/styles/marketing/_shape.scss +31 -0
  24. package/assets/styles/mixins/_functions.scss +53 -0
  25. package/assets/styles/mixins/_mixins.scss +9 -9
  26. package/assets/styles/ui/_accordion.scss +165 -11
  27. package/assets/styles/ui/_alerts.scss +80 -38
  28. package/assets/styles/ui/_avatars.scss +36 -9
  29. package/assets/styles/ui/_badges.scss +47 -13
  30. package/assets/styles/ui/_button-group.scss +1 -1
  31. package/assets/styles/ui/_buttons.scss +33 -37
  32. package/assets/styles/ui/_calendars.scss +2 -2
  33. package/assets/styles/ui/_cards.scss +9 -0
  34. package/assets/styles/ui/_carousel.scss +1 -1
  35. package/assets/styles/ui/_charts.scss +1 -1
  36. package/assets/styles/ui/_chat.scss +38 -0
  37. package/assets/styles/ui/_close.scss +54 -1
  38. package/assets/styles/ui/_datagrid.scss +1 -1
  39. package/assets/styles/ui/_dropdowns.scss +3 -0
  40. package/assets/styles/ui/_empty.scss +0 -5
  41. package/assets/styles/ui/_flags.scss +2 -2
  42. package/assets/styles/ui/_forms.scss +33 -7
  43. package/assets/styles/ui/_grid.scss +1 -1
  44. package/assets/styles/ui/_icons.scss +1 -1
  45. package/assets/styles/ui/_images.scss +4 -0
  46. package/assets/styles/ui/_lists.scss +12 -16
  47. package/assets/styles/ui/_loaders.scss +1 -1
  48. package/assets/styles/ui/_markdown.scss +15 -4
  49. package/assets/styles/ui/_modals.scss +2 -2
  50. package/assets/styles/ui/_nav.scss +17 -3
  51. package/assets/styles/ui/_offcanvas.scss +2 -2
  52. package/assets/styles/ui/_pagination.scss +2 -0
  53. package/assets/styles/ui/_payments.scss +1 -1
  54. package/assets/styles/ui/_placeholder.scss +1 -1
  55. package/assets/styles/ui/_progress.scss +1 -1
  56. package/assets/styles/ui/_ribbons.scss +1 -0
  57. package/assets/styles/ui/_segmented.scss +101 -0
  58. package/assets/styles/ui/_signature.scss +15 -0
  59. package/assets/styles/ui/_social.scss +52 -0
  60. package/assets/styles/ui/_status.scss +1 -1
  61. package/assets/styles/ui/_steps.scss +5 -1
  62. package/assets/styles/ui/_switch-icon.scss +1 -1
  63. package/assets/styles/ui/_tables.scss +27 -1
  64. package/assets/styles/ui/_tags.scss +1 -1
  65. package/assets/styles/ui/_timeline.scss +1 -1
  66. package/assets/styles/ui/_toasts.scss +0 -1
  67. package/assets/styles/ui/_tracking.scss +1 -1
  68. package/assets/styles/ui/_type.scss +169 -8
  69. package/assets/styles/ui/forms/_form-check.scss +1 -1
  70. package/assets/styles/ui/forms/_form-colorinput.scss +1 -1
  71. package/assets/styles/ui/forms/_form-custom.scss +1 -1
  72. package/assets/styles/ui/forms/_form-imagecheck.scss +6 -5
  73. package/assets/styles/ui/forms/_form-selectgroup.scss +2 -2
  74. package/assets/styles/ui/typo/_hr.scss +4 -2
  75. package/assets/styles/utils/_colors.scss +72 -11
  76. package/assets/styles/utils/_opacity.scss +1 -1
  77. package/assets/styles/utils/_scroll.scss +0 -2
  78. package/assets/styles/utils/_sizing.scss +1 -1
  79. package/assets/styles/utils/_text.scss +1 -2
  80. package/assets/styles/vendor/_apexcharts.scss +52 -0
  81. package/assets/styles/vendor/_coloris.scss +72 -0
  82. package/assets/styles/vendor/_dropzone.scss +27 -0
  83. package/assets/styles/vendor/_fslightbox.scss +13 -0
  84. package/assets/styles/vendor/_jsvectormap.scss +47 -0
  85. package/assets/styles/vendor/_litepicker.scss +69 -0
  86. package/assets/styles/vendor/_nouislider.scss +49 -0
  87. package/assets/styles/vendor/_plyr.scss +3 -0
  88. package/assets/styles/vendor/_stars-rating.scss +22 -0
  89. package/assets/styles/vendor/_tom-select.scss +81 -0
  90. package/assets/styles/vendor/_turbo.scss +3 -0
  91. package/assets/styles/vendor/_typed.scss +4 -0
  92. package/assets/styles/vendor/_wysiwyg.scss +46 -0
  93. package/fesm2022/updevs-components-badge.mjs +29 -31
  94. package/fesm2022/updevs-components-badge.mjs.map +1 -1
  95. package/fesm2022/updevs-components-button.mjs +41 -41
  96. package/fesm2022/updevs-components-button.mjs.map +1 -1
  97. package/fesm2022/updevs-components-calendar.mjs +327 -1456
  98. package/fesm2022/updevs-components-calendar.mjs.map +1 -1
  99. package/fesm2022/updevs-components-card.mjs +25 -21
  100. package/fesm2022/updevs-components-card.mjs.map +1 -1
  101. package/fesm2022/updevs-components-drag-and-drop.mjs +17 -17
  102. package/fesm2022/updevs-components-drag-and-drop.mjs.map +1 -1
  103. package/fesm2022/updevs-components-dropdown.mjs +41 -20
  104. package/fesm2022/updevs-components-dropdown.mjs.map +1 -1
  105. package/fesm2022/updevs-components-form-controls-abstractions.mjs +77 -18
  106. package/fesm2022/updevs-components-form-controls-abstractions.mjs.map +1 -1
  107. package/fesm2022/updevs-components-form-controls-checkbox.mjs +31 -21
  108. package/fesm2022/updevs-components-form-controls-checkbox.mjs.map +1 -1
  109. package/fesm2022/updevs-components-form-controls-date-picker.mjs +51 -66
  110. package/fesm2022/updevs-components-form-controls-date-picker.mjs.map +1 -1
  111. package/fesm2022/updevs-components-form-controls-file-upload.mjs +272 -0
  112. package/fesm2022/updevs-components-form-controls-file-upload.mjs.map +1 -0
  113. package/fesm2022/updevs-components-form-controls-input.mjs +46 -28
  114. package/fesm2022/updevs-components-form-controls-input.mjs.map +1 -1
  115. package/fesm2022/updevs-components-form-controls-radio.mjs +20 -14
  116. package/fesm2022/updevs-components-form-controls-radio.mjs.map +1 -1
  117. package/fesm2022/updevs-components-form-controls-select.mjs +288 -111
  118. package/fesm2022/updevs-components-form-controls-select.mjs.map +1 -1
  119. package/fesm2022/updevs-components-form-controls-textarea.mjs +25 -20
  120. package/fesm2022/updevs-components-form-controls-textarea.mjs.map +1 -1
  121. package/fesm2022/updevs-components-form-controls-time-picker.mjs +14 -13
  122. package/fesm2022/updevs-components-form-controls-time-picker.mjs.map +1 -1
  123. package/fesm2022/updevs-components-form.mjs +255 -71
  124. package/fesm2022/updevs-components-form.mjs.map +1 -1
  125. package/fesm2022/updevs-components-layout.mjs +597 -330
  126. package/fesm2022/updevs-components-layout.mjs.map +1 -1
  127. package/fesm2022/updevs-components-link.mjs +9 -9
  128. package/fesm2022/updevs-components-link.mjs.map +1 -1
  129. package/fesm2022/updevs-components-list.mjs +20 -10
  130. package/fesm2022/updevs-components-list.mjs.map +1 -1
  131. package/fesm2022/updevs-components-modal.mjs +27 -25
  132. package/fesm2022/updevs-components-modal.mjs.map +1 -1
  133. package/fesm2022/updevs-components-paginator.mjs +38 -37
  134. package/fesm2022/updevs-components-paginator.mjs.map +1 -1
  135. package/fesm2022/updevs-components-popover.mjs +32 -40
  136. package/fesm2022/updevs-components-popover.mjs.map +1 -1
  137. package/fesm2022/updevs-components-pricing.mjs +130 -0
  138. package/fesm2022/updevs-components-pricing.mjs.map +1 -0
  139. package/fesm2022/updevs-components-table.mjs +678 -333
  140. package/fesm2022/updevs-components-table.mjs.map +1 -1
  141. package/fesm2022/updevs-components.mjs +5 -5
  142. package/fesm2022/updevs-components.mjs.map +1 -1
  143. package/package.json +70 -101
  144. package/types/updevs-components-badge.d.ts +44 -0
  145. package/types/updevs-components-button.d.ts +75 -0
  146. package/types/updevs-components-calendar.d.ts +175 -0
  147. package/{card/card.component.d.ts → types/updevs-components-card.d.ts} +52 -14
  148. package/types/updevs-components-drag-and-drop.d.ts +74 -0
  149. package/{dropdown/dropdown.component.d.ts → types/updevs-components-dropdown.d.ts} +56 -8
  150. package/types/updevs-components-form-controls-abstractions.d.ts +49 -0
  151. package/types/updevs-components-form-controls-checkbox.d.ts +33 -0
  152. package/types/updevs-components-form-controls-date-picker.d.ts +80 -0
  153. package/types/updevs-components-form-controls-file-upload.d.ts +69 -0
  154. package/types/updevs-components-form-controls-input.d.ts +95 -0
  155. package/types/updevs-components-form-controls-radio.d.ts +32 -0
  156. package/types/updevs-components-form-controls-select.d.ts +200 -0
  157. package/types/updevs-components-form-controls-textarea.d.ts +31 -0
  158. package/types/updevs-components-form-controls-time-picker.d.ts +164 -0
  159. package/types/updevs-components-form.d.ts +356 -0
  160. package/types/updevs-components-layout.d.ts +490 -0
  161. package/{link/link.component.d.ts → types/updevs-components-link.d.ts} +16 -4
  162. package/types/updevs-components-list.d.ts +107 -0
  163. package/types/updevs-components-modal.d.ts +155 -0
  164. package/types/updevs-components-paginator.d.ts +58 -0
  165. package/types/updevs-components-popover.d.ts +63 -0
  166. package/types/updevs-components-pricing.d.ts +91 -0
  167. package/types/updevs-components-table.d.ts +619 -0
  168. package/types/updevs-components.d.ts +44 -0
  169. package/badge/badge-config.model.d.ts +0 -14
  170. package/badge/badge.component.d.ts +0 -24
  171. package/badge/badge.config.d.ts +0 -12
  172. package/badge/index.d.ts +0 -1
  173. package/badge/public-api.d.ts +0 -3
  174. package/badge/upd-badge.module.d.ts +0 -8
  175. package/button/button.component.d.ts +0 -61
  176. package/button/index.d.ts +0 -1
  177. package/button/public-api.d.ts +0 -2
  178. package/button/upd-button.module.d.ts +0 -10
  179. package/calendar/calendar.component.d.ts +0 -127
  180. package/calendar/components/calendar-body/calendar-body.component.d.ts +0 -263
  181. package/calendar/components/calendar-header/calendar-header.component.d.ts +0 -57
  182. package/calendar/components/calendar-month-view/calendar-month-view.component.d.ts +0 -151
  183. package/calendar/components/calendar-multi-year-view/calendar-multi-year-view.component.d.ts +0 -10
  184. package/calendar/components/calendar-year-view/calendar-year-view.component.d.ts +0 -9
  185. package/calendar/index.d.ts +0 -1
  186. package/calendar/models/calendar-cell.model.d.ts +0 -16
  187. package/calendar/models/calendar-user-event.model.d.ts +0 -4
  188. package/calendar/models/date-range.model.d.ts +0 -26
  189. package/calendar/models/public-api.d.ts +0 -2
  190. package/calendar/public-api.d.ts +0 -5
  191. package/calendar/services/calendar-range-strategy.service.d.ts +0 -35
  192. package/calendar/services/calendar-signals.service.d.ts +0 -24
  193. package/calendar/services/calendar.service.d.ts +0 -15
  194. package/calendar/services/public-api.d.ts +0 -1
  195. package/calendar/tools/events-options.d.ts +0 -12
  196. package/calendar/tools/keyboard-tools.d.ts +0 -9
  197. package/calendar/tools/passive-listeners.d.ts +0 -16
  198. package/calendar/types/calendar-cell-class-function.type.d.ts +0 -3
  199. package/calendar/types/calendar-cell-css-classes.type.d.ts +0 -3
  200. package/calendar/types/calendar-view.type.d.ts +0 -1
  201. package/calendar/types/modifier-key.type.d.ts +0 -1
  202. package/calendar/types/public-api.d.ts +0 -1
  203. package/calendar/upd-calendar.module.d.ts +0 -18
  204. package/card/directives/card-actions.directive.d.ts +0 -7
  205. package/card/directives/card-footer.directive.d.ts +0 -7
  206. package/card/directives/card-header.directive.d.ts +0 -7
  207. package/card/directives/card-image.directive.d.ts +0 -7
  208. package/card/directives/public-api.d.ts +0 -4
  209. package/card/index.d.ts +0 -1
  210. package/card/public-api.d.ts +0 -3
  211. package/card/types/card-state.type.d.ts +0 -1
  212. package/card/types/card-style.type.d.ts +0 -1
  213. package/card/types/hover-effect.type.d.ts +0 -1
  214. package/card/types/ribbon-style.type.d.ts +0 -1
  215. package/card/types/status-position.type.d.ts +0 -1
  216. package/card/upd-card.module.d.ts +0 -14
  217. package/drag-and-drop/drag-and-drop.component.d.ts +0 -26
  218. package/drag-and-drop/index.d.ts +0 -1
  219. package/drag-and-drop/models/drag-and-drop-column.config.d.ts +0 -8
  220. package/drag-and-drop/models/drag-and-drop-column.model.d.ts +0 -10
  221. package/drag-and-drop/models/drag-and-drop-item.d.ts +0 -7
  222. package/drag-and-drop/models/drag-and-drop-item.model.d.ts +0 -13
  223. package/drag-and-drop/models/drag-and-drop.config.d.ts +0 -6
  224. package/drag-and-drop/models/public-api.d.ts +0 -4
  225. package/drag-and-drop/public-api.d.ts +0 -3
  226. package/drag-and-drop/upd-drag-and-drop.module.d.ts +0 -9
  227. package/dropdown/index.d.ts +0 -1
  228. package/dropdown/models/dropdown-action-clicked.model.d.ts +0 -6
  229. package/dropdown/models/dropdown-item.d.ts +0 -24
  230. package/dropdown/models/dropdown-item.type.d.ts +0 -1
  231. package/dropdown/models/public-api.d.ts +0 -4
  232. package/dropdown/models/toolbar.type.d.ts +0 -1
  233. package/dropdown/public-api.d.ts +0 -3
  234. package/dropdown/upd-dropdown.module.d.ts +0 -12
  235. package/esm2022/badge/badge-config.model.mjs +0 -14
  236. package/esm2022/badge/badge.component.mjs +0 -50
  237. package/esm2022/badge/badge.config.mjs +0 -2
  238. package/esm2022/badge/index.mjs +0 -2
  239. package/esm2022/badge/public-api.mjs +0 -4
  240. package/esm2022/badge/upd-badge.module.mjs +0 -24
  241. package/esm2022/badge/updevs-components-badge.mjs +0 -5
  242. package/esm2022/button/button.component.mjs +0 -157
  243. package/esm2022/button/index.mjs +0 -2
  244. package/esm2022/button/public-api.mjs +0 -3
  245. package/esm2022/button/upd-button.module.mjs +0 -32
  246. package/esm2022/button/updevs-components-button.mjs +0 -5
  247. package/esm2022/calendar/assets/i18n/en.json +0 -16
  248. package/esm2022/calendar/assets/i18n/pt.json +0 -16
  249. package/esm2022/calendar/calendar.component.mjs +0 -247
  250. package/esm2022/calendar/components/calendar-body/calendar-body.component.mjs +0 -515
  251. package/esm2022/calendar/components/calendar-header/calendar-header.component.mjs +0 -144
  252. package/esm2022/calendar/components/calendar-month-view/calendar-month-view.component.mjs +0 -423
  253. package/esm2022/calendar/components/calendar-multi-year-view/calendar-multi-year-view.component.mjs +0 -18
  254. package/esm2022/calendar/components/calendar-year-view/calendar-year-view.component.mjs +0 -17
  255. package/esm2022/calendar/index.mjs +0 -2
  256. package/esm2022/calendar/models/calendar-cell.model.mjs +0 -18
  257. package/esm2022/calendar/models/calendar-user-event.model.mjs +0 -2
  258. package/esm2022/calendar/models/date-range.model.mjs +0 -18
  259. package/esm2022/calendar/models/public-api.mjs +0 -3
  260. package/esm2022/calendar/public-api.mjs +0 -6
  261. package/esm2022/calendar/services/calendar-range-strategy.service.mjs +0 -99
  262. package/esm2022/calendar/services/calendar-signals.service.mjs +0 -47
  263. package/esm2022/calendar/services/calendar.service.mjs +0 -40
  264. package/esm2022/calendar/services/public-api.mjs +0 -2
  265. package/esm2022/calendar/tools/events-options.mjs +0 -14
  266. package/esm2022/calendar/tools/keyboard-tools.mjs +0 -14
  267. package/esm2022/calendar/tools/passive-listeners.mjs +0 -29
  268. package/esm2022/calendar/types/calendar-cell-class-function.type.mjs +0 -2
  269. package/esm2022/calendar/types/calendar-cell-css-classes.type.mjs +0 -2
  270. package/esm2022/calendar/types/calendar-view.type.mjs +0 -2
  271. package/esm2022/calendar/types/modifier-key.type.mjs +0 -2
  272. package/esm2022/calendar/types/public-api.mjs +0 -2
  273. package/esm2022/calendar/upd-calendar.module.mjs +0 -69
  274. package/esm2022/calendar/updevs-components-calendar.mjs +0 -5
  275. package/esm2022/card/card.component.mjs +0 -136
  276. package/esm2022/card/directives/card-actions.directive.mjs +0 -16
  277. package/esm2022/card/directives/card-footer.directive.mjs +0 -16
  278. package/esm2022/card/directives/card-header.directive.mjs +0 -16
  279. package/esm2022/card/directives/card-image.directive.mjs +0 -16
  280. package/esm2022/card/directives/public-api.mjs +0 -5
  281. package/esm2022/card/index.mjs +0 -2
  282. package/esm2022/card/public-api.mjs +0 -4
  283. package/esm2022/card/types/card-state.type.mjs +0 -2
  284. package/esm2022/card/types/card-style.type.mjs +0 -2
  285. package/esm2022/card/types/hover-effect.type.mjs +0 -2
  286. package/esm2022/card/types/ribbon-style.type.mjs +0 -2
  287. package/esm2022/card/types/status-position.type.mjs +0 -2
  288. package/esm2022/card/upd-card.module.mjs +0 -50
  289. package/esm2022/card/updevs-components-card.mjs +0 -5
  290. package/esm2022/drag-and-drop/drag-and-drop.component.mjs +0 -134
  291. package/esm2022/drag-and-drop/index.mjs +0 -2
  292. package/esm2022/drag-and-drop/models/drag-and-drop-column.config.mjs +0 -2
  293. package/esm2022/drag-and-drop/models/drag-and-drop-column.model.mjs +0 -9
  294. package/esm2022/drag-and-drop/models/drag-and-drop-item.mjs +0 -2
  295. package/esm2022/drag-and-drop/models/drag-and-drop-item.model.mjs +0 -14
  296. package/esm2022/drag-and-drop/models/drag-and-drop.config.mjs +0 -2
  297. package/esm2022/drag-and-drop/models/public-api.mjs +0 -5
  298. package/esm2022/drag-and-drop/public-api.mjs +0 -4
  299. package/esm2022/drag-and-drop/upd-drag-and-drop.module.mjs +0 -28
  300. package/esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs +0 -5
  301. package/esm2022/dropdown/dropdown.component.mjs +0 -182
  302. package/esm2022/dropdown/index.mjs +0 -2
  303. package/esm2022/dropdown/models/dropdown-action-clicked.model.mjs +0 -2
  304. package/esm2022/dropdown/models/dropdown-item.mjs +0 -2
  305. package/esm2022/dropdown/models/dropdown-item.type.mjs +0 -2
  306. package/esm2022/dropdown/models/public-api.mjs +0 -5
  307. package/esm2022/dropdown/models/toolbar.type.mjs +0 -2
  308. package/esm2022/dropdown/public-api.mjs +0 -4
  309. package/esm2022/dropdown/upd-dropdown.module.mjs +0 -40
  310. package/esm2022/dropdown/updevs-components-dropdown.mjs +0 -5
  311. package/esm2022/form/assets/i18n/en.json +0 -17
  312. package/esm2022/form/assets/i18n/pt.json +0 -17
  313. package/esm2022/form/components/dynamic-field/dynamic-field.component.mjs +0 -96
  314. package/esm2022/form/form.component.mjs +0 -102
  315. package/esm2022/form/index.mjs +0 -2
  316. package/esm2022/form/models/checkbox-field.model.mjs +0 -2
  317. package/esm2022/form/models/checkbox-group-field.model.mjs +0 -2
  318. package/esm2022/form/models/dynamic-field.model.mjs +0 -2
  319. package/esm2022/form/models/enums/dynamic-field.type.mjs +0 -14
  320. package/esm2022/form/models/enums/public-api.mjs +0 -2
  321. package/esm2022/form/models/form-row.model.mjs +0 -2
  322. package/esm2022/form/models/public-api.mjs +0 -6
  323. package/esm2022/form/models/radio-field.model.mjs +0 -2
  324. package/esm2022/form/models/radio-group-field.model.mjs +0 -2
  325. package/esm2022/form/models/select-field.model.mjs +0 -2
  326. package/esm2022/form/models/single-select-field.model.mjs +0 -2
  327. package/esm2022/form/models/textarea-field.model.mjs +0 -2
  328. package/esm2022/form/models/validator-config.mjs +0 -2
  329. package/esm2022/form/public-api.mjs +0 -4
  330. package/esm2022/form/tools/errors-helper.mjs +0 -54
  331. package/esm2022/form/upd-form.module.mjs +0 -75
  332. package/esm2022/form/updevs-components-form.mjs +0 -5
  333. package/esm2022/form-controls/abstractions/base-control.mjs +0 -40
  334. package/esm2022/form-controls/abstractions/index.mjs +0 -2
  335. package/esm2022/form-controls/abstractions/public-api.mjs +0 -2
  336. package/esm2022/form-controls/abstractions/updevs-components-form-controls-abstractions.mjs +0 -5
  337. package/esm2022/form-controls/checkbox/checkbox.component.mjs +0 -53
  338. package/esm2022/form-controls/checkbox/index.mjs +0 -2
  339. package/esm2022/form-controls/checkbox/public-api.mjs +0 -3
  340. package/esm2022/form-controls/checkbox/upd-checkbox.module.mjs +0 -32
  341. package/esm2022/form-controls/checkbox/updevs-components-form-controls-checkbox.mjs +0 -5
  342. package/esm2022/form-controls/date-picker/date-picker.component.mjs +0 -147
  343. package/esm2022/form-controls/date-picker/index.mjs +0 -2
  344. package/esm2022/form-controls/date-picker/public-api.mjs +0 -3
  345. package/esm2022/form-controls/date-picker/upd-date-picker.module.mjs +0 -40
  346. package/esm2022/form-controls/date-picker/updevs-components-form-controls-date-picker.mjs +0 -5
  347. package/esm2022/form-controls/input/directives/input-append.directive.mjs +0 -16
  348. package/esm2022/form-controls/input/directives/input-prepend.directive.mjs +0 -16
  349. package/esm2022/form-controls/input/directives/public-api.mjs +0 -3
  350. package/esm2022/form-controls/input/index.mjs +0 -2
  351. package/esm2022/form-controls/input/input.component.mjs +0 -189
  352. package/esm2022/form-controls/input/public-api.mjs +0 -5
  353. package/esm2022/form-controls/input/types/input.type.mjs +0 -2
  354. package/esm2022/form-controls/input/types/loader-position.type.mjs +0 -2
  355. package/esm2022/form-controls/input/types/public-api.mjs +0 -3
  356. package/esm2022/form-controls/input/upd-input.module.mjs +0 -46
  357. package/esm2022/form-controls/input/updevs-components-form-controls-input.mjs +0 -5
  358. package/esm2022/form-controls/radio/index.mjs +0 -2
  359. package/esm2022/form-controls/radio/public-api.mjs +0 -3
  360. package/esm2022/form-controls/radio/radio.component.mjs +0 -56
  361. package/esm2022/form-controls/radio/upd-radio.module.mjs +0 -32
  362. package/esm2022/form-controls/radio/updevs-components-form-controls-radio.mjs +0 -5
  363. package/esm2022/form-controls/select/components/multiple/select-multiple.component.mjs +0 -76
  364. package/esm2022/form-controls/select/components/single/select.component.mjs +0 -72
  365. package/esm2022/form-controls/select/index.mjs +0 -2
  366. package/esm2022/form-controls/select/models/abstractions/base-select.component.mjs +0 -221
  367. package/esm2022/form-controls/select/models/defaults.mjs +0 -8
  368. package/esm2022/form-controls/select/models/public-api.mjs +0 -3
  369. package/esm2022/form-controls/select/models/select-item.mjs +0 -2
  370. package/esm2022/form-controls/select/public-api.mjs +0 -5
  371. package/esm2022/form-controls/select/upd-select.module.mjs +0 -57
  372. package/esm2022/form-controls/select/updevs-components-form-controls-select.mjs +0 -5
  373. package/esm2022/form-controls/textarea/index.mjs +0 -2
  374. package/esm2022/form-controls/textarea/public-api.mjs +0 -3
  375. package/esm2022/form-controls/textarea/textarea.component.mjs +0 -46
  376. package/esm2022/form-controls/textarea/upd-textarea.module.mjs +0 -24
  377. package/esm2022/form-controls/textarea/updevs-components-form-controls-textarea.mjs +0 -5
  378. package/esm2022/form-controls/time-picker/assets/i18n/en.json +0 -5
  379. package/esm2022/form-controls/time-picker/assets/i18n/pt.json +0 -5
  380. package/esm2022/form-controls/time-picker/index.mjs +0 -2
  381. package/esm2022/form-controls/time-picker/public-api.mjs +0 -4
  382. package/esm2022/form-controls/time-picker/time-picker.component.mjs +0 -130
  383. package/esm2022/form-controls/time-picker/time-selector/time-selector.component.mjs +0 -124
  384. package/esm2022/form-controls/time-picker/upd-time-picker.module.mjs +0 -60
  385. package/esm2022/form-controls/time-picker/updevs-components-form-controls-time-picker.mjs +0 -5
  386. package/esm2022/index.mjs +0 -2
  387. package/esm2022/layout/abstractions/base-page.component.mjs +0 -23
  388. package/esm2022/layout/abstractions/base.layout.mjs +0 -31
  389. package/esm2022/layout/abstractions/public-api.mjs +0 -2
  390. package/esm2022/layout/assets/i18n/en.json +0 -20
  391. package/esm2022/layout/assets/i18n/pt.json +0 -20
  392. package/esm2022/layout/index.mjs +0 -2
  393. package/esm2022/layout/layouts/blank-layout/blank-layout.component.mjs +0 -11
  394. package/esm2022/layout/layouts/blank-layout/blank-layout.module.mjs +0 -24
  395. package/esm2022/layout/layouts/public-api.mjs +0 -5
  396. package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.mjs +0 -31
  397. package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.mjs +0 -80
  398. package/esm2022/layout/models/login-page-config.model.mjs +0 -20
  399. package/esm2022/layout/models/login-page.config.mjs +0 -2
  400. package/esm2022/layout/models/public-api.mjs +0 -3
  401. package/esm2022/layout/models/security-layout-config.model.mjs +0 -10
  402. package/esm2022/layout/models/security-layout.config.mjs +0 -2
  403. package/esm2022/layout/models/upd-layout-config.model.mjs +0 -24
  404. package/esm2022/layout/models/upd-layout.config.mjs +0 -2
  405. package/esm2022/layout/pages/auth-flow/auth-flow-routing.module.mjs +0 -28
  406. package/esm2022/layout/pages/auth-flow/auth-flow.module.mjs +0 -65
  407. package/esm2022/layout/pages/auth-flow/logged-out/logged-out.component.mjs +0 -11
  408. package/esm2022/layout/pages/auth-flow/login/login.component.mjs +0 -99
  409. package/esm2022/layout/pages/auth-flow/oauth-callback/oauth-callback.component.mjs +0 -11
  410. package/esm2022/layout/pages/auth-flow/public-api.mjs +0 -6
  411. package/esm2022/layout/pages/public-api.mjs +0 -2
  412. package/esm2022/layout/partials/footer/footer-copyright.directive.mjs +0 -13
  413. package/esm2022/layout/partials/footer/footer.component.mjs +0 -55
  414. package/esm2022/layout/partials/footer/public-api.mjs +0 -3
  415. package/esm2022/layout/partials/header/header-style.type.mjs +0 -2
  416. package/esm2022/layout/partials/header/header.component.mjs +0 -77
  417. package/esm2022/layout/partials/header/public-api.mjs +0 -3
  418. package/esm2022/layout/partials/page-header/page-header.component.mjs +0 -15
  419. package/esm2022/layout/partials/page-header/public-api.mjs +0 -2
  420. package/esm2022/layout/partials/public-api.mjs +0 -5
  421. package/esm2022/layout/partials/sidebar/public-api.mjs +0 -2
  422. package/esm2022/layout/partials/sidebar/sidebar.component.mjs +0 -112
  423. package/esm2022/layout/public-api.mjs +0 -8
  424. package/esm2022/layout/services/public-api.mjs +0 -2
  425. package/esm2022/layout/services/upd-layout-config.service.mjs +0 -21
  426. package/esm2022/layout/tools/layout.constants.mjs +0 -15
  427. package/esm2022/layout/upd-layout.module.mjs +0 -43
  428. package/esm2022/layout/updevs-components-layout.mjs +0 -5
  429. package/esm2022/lib/index.mjs +0 -2
  430. package/esm2022/lib/models/public-api.mjs +0 -2
  431. package/esm2022/lib/models/row-column-size.mjs +0 -2
  432. package/esm2022/lib/public-api.mjs +0 -5
  433. package/esm2022/lib/tools/column-size.helper.mjs +0 -12
  434. package/esm2022/lib/tools/public-api.mjs +0 -2
  435. package/esm2022/lib/types/component-size.type.mjs +0 -2
  436. package/esm2022/lib/types/horizontal-vertical.type.mjs +0 -2
  437. package/esm2022/lib/types/public-api.mjs +0 -4
  438. package/esm2022/lib/types/validation-status.type.mjs +0 -2
  439. package/esm2022/lib/upd-components.module.mjs +0 -14
  440. package/esm2022/link/index.mjs +0 -2
  441. package/esm2022/link/link.component.mjs +0 -51
  442. package/esm2022/link/public-api.mjs +0 -4
  443. package/esm2022/link/target.type.mjs +0 -2
  444. package/esm2022/link/upd-link.module.mjs +0 -24
  445. package/esm2022/link/updevs-components-link.mjs +0 -5
  446. package/esm2022/list/assets/i18n/en.json +0 -9
  447. package/esm2022/list/assets/i18n/pt.json +0 -9
  448. package/esm2022/list/index.mjs +0 -2
  449. package/esm2022/list/list.component.mjs +0 -113
  450. package/esm2022/list/models/badge-position.type.mjs +0 -2
  451. package/esm2022/list/models/list-item.mjs +0 -2
  452. package/esm2022/list/models/list-item.model.mjs +0 -15
  453. package/esm2022/list/models/public-api.mjs +0 -3
  454. package/esm2022/list/public-api.mjs +0 -4
  455. package/esm2022/list/upd-list.module.mjs +0 -43
  456. package/esm2022/list/updevs-components-list.mjs +0 -5
  457. package/esm2022/modal/assets/i18n/en.json +0 -17
  458. package/esm2022/modal/assets/i18n/pt.json +0 -17
  459. package/esm2022/modal/components/modal-container/modal-container.component.mjs +0 -216
  460. package/esm2022/modal/index.mjs +0 -2
  461. package/esm2022/modal/models/base.modal.mjs +0 -14
  462. package/esm2022/modal/models/modal-config.model.mjs +0 -20
  463. package/esm2022/modal/models/modal-ref.mjs +0 -2
  464. package/esm2022/modal/models/modal.config.mjs +0 -2
  465. package/esm2022/modal/models/public-api.mjs +0 -4
  466. package/esm2022/modal/public-api.mjs +0 -4
  467. package/esm2022/modal/services/modal-alert.service.mjs +0 -99
  468. package/esm2022/modal/services/modal.service.mjs +0 -30
  469. package/esm2022/modal/services/public-api.mjs +0 -3
  470. package/esm2022/modal/types/modal-footer-style.type.mjs +0 -2
  471. package/esm2022/modal/types/modal-size.type.mjs +0 -2
  472. package/esm2022/modal/upd-modal.module.mjs +0 -89
  473. package/esm2022/modal/updevs-components-modal.mjs +0 -5
  474. package/esm2022/paginator/assets/i18n/en.json +0 -15
  475. package/esm2022/paginator/assets/i18n/pt.json +0 -15
  476. package/esm2022/paginator/index.mjs +0 -2
  477. package/esm2022/paginator/paginator.component.mjs +0 -66
  478. package/esm2022/paginator/public-api.mjs +0 -3
  479. package/esm2022/paginator/upd-paginator.module.mjs +0 -46
  480. package/esm2022/paginator/updevs-components-paginator.mjs +0 -5
  481. package/esm2022/popover/index.mjs +0 -2
  482. package/esm2022/popover/popover.component.mjs +0 -65
  483. package/esm2022/popover/popover.directive.mjs +0 -129
  484. package/esm2022/popover/public-api.mjs +0 -4
  485. package/esm2022/popover/upd-popover.module.mjs +0 -29
  486. package/esm2022/popover/updevs-components-popover.mjs +0 -5
  487. package/esm2022/public-api.mjs +0 -2
  488. package/esm2022/table/abstractions/base-column.model.mjs +0 -52
  489. package/esm2022/table/abstractions/base.column.mjs +0 -98
  490. package/esm2022/table/abstractions/filters-operands.service.mjs +0 -3
  491. package/esm2022/table/abstractions/public-api.mjs +0 -3
  492. package/esm2022/table/assets/i18n/en.json +0 -74
  493. package/esm2022/table/assets/i18n/pt.json +0 -74
  494. package/esm2022/table/components/columns/boolean-column/boolean-column.component.mjs +0 -26
  495. package/esm2022/table/components/columns/date-time-column/date-time-column.component.mjs +0 -13
  496. package/esm2022/table/components/columns/number-column/number-column.component.mjs +0 -13
  497. package/esm2022/table/components/columns/text-column/text-column.component.mjs +0 -31
  498. package/esm2022/table/components/columns-manager/columns-manager.component.mjs +0 -36
  499. package/esm2022/table/components/filter-row/filter-row.component.mjs +0 -114
  500. package/esm2022/table/components/save-search/save-search.component.mjs +0 -72
  501. package/esm2022/table/components/search-section/search-section.component.mjs +0 -93
  502. package/esm2022/table/directives/public-api.mjs +0 -2
  503. package/esm2022/table/directives/table-column.directive.mjs +0 -51
  504. package/esm2022/table/index.mjs +0 -2
  505. package/esm2022/table/models/columns/boolean-column.model.mjs +0 -22
  506. package/esm2022/table/models/columns/date-time-column.model.mjs +0 -16
  507. package/esm2022/table/models/columns/guid-column.model.mjs +0 -13
  508. package/esm2022/table/models/columns/image-column.model.mjs +0 -11
  509. package/esm2022/table/models/columns/number-column.model.mjs +0 -17
  510. package/esm2022/table/models/columns/public-api.mjs +0 -7
  511. package/esm2022/table/models/columns/text-column.model.mjs +0 -11
  512. package/esm2022/table/models/enums/column-type.enum.mjs +0 -15
  513. package/esm2022/table/models/enums/public-api.mjs +0 -2
  514. package/esm2022/table/models/filter-item.model.mjs +0 -2
  515. package/esm2022/table/models/filter-operand.config.mjs +0 -2
  516. package/esm2022/table/models/operands-lists/boolean-filter-operands-list.model.mjs +0 -25
  517. package/esm2022/table/models/operands-lists/date-filter-operands-list.model.mjs +0 -25
  518. package/esm2022/table/models/operands-lists/date-or-number-operands-list.config.mjs +0 -31
  519. package/esm2022/table/models/operands-lists/filter-operands-list.config.mjs +0 -31
  520. package/esm2022/table/models/operands-lists/guid-filter-operands-list.model.mjs +0 -16
  521. package/esm2022/table/models/operands-lists/number-filter-operands-list.model.mjs +0 -25
  522. package/esm2022/table/models/operands-lists/string-filter-operands-list.model.mjs +0 -45
  523. package/esm2022/table/models/public-api.mjs +0 -5
  524. package/esm2022/table/models/saved-view.model.mjs +0 -2
  525. package/esm2022/table/models/table-config.model.mjs +0 -21
  526. package/esm2022/table/models/table.config.mjs +0 -2
  527. package/esm2022/table/models/upd-table-config.model.mjs +0 -9
  528. package/esm2022/table/models/upd-table.config.mjs +0 -2
  529. package/esm2022/table/public-api.mjs +0 -6
  530. package/esm2022/table/services/default-filters-operands.service.mjs +0 -60
  531. package/esm2022/table/services/storages/saved-views.storage.mjs +0 -63
  532. package/esm2022/table/services/stores/filters-operands.store.mjs +0 -19
  533. package/esm2022/table/services/upd-table-config.service.mjs +0 -18
  534. package/esm2022/table/table.component.mjs +0 -382
  535. package/esm2022/table/tools/filters.tools.mjs +0 -48
  536. package/esm2022/table/tools/table.constants.mjs +0 -15
  537. package/esm2022/table/upd-table.module.mjs +0 -149
  538. package/esm2022/table/updevs-components-table.mjs +0 -5
  539. package/esm2022/updevs-components.mjs +0 -5
  540. package/form/components/dynamic-field/dynamic-field.component.d.ts +0 -45
  541. package/form/form.component.d.ts +0 -60
  542. package/form/index.d.ts +0 -1
  543. package/form/models/checkbox-field.model.d.ts +0 -4
  544. package/form/models/checkbox-group-field.model.d.ts +0 -6
  545. package/form/models/dynamic-field.model.d.ts +0 -30
  546. package/form/models/enums/dynamic-field.type.d.ts +0 -12
  547. package/form/models/enums/public-api.d.ts +0 -1
  548. package/form/models/form-row.model.d.ts +0 -8
  549. package/form/models/public-api.d.ts +0 -5
  550. package/form/models/radio-field.model.d.ts +0 -4
  551. package/form/models/radio-group-field.model.d.ts +0 -6
  552. package/form/models/select-field.model.d.ts +0 -28
  553. package/form/models/single-select-field.model.d.ts +0 -4
  554. package/form/models/textarea-field.model.d.ts +0 -10
  555. package/form/models/validator-config.d.ts +0 -5
  556. package/form/public-api.d.ts +0 -3
  557. package/form/tools/errors-helper.d.ts +0 -11
  558. package/form/upd-form.module.d.ts +0 -20
  559. package/form-controls/abstractions/base-control.d.ts +0 -24
  560. package/form-controls/abstractions/index.d.ts +0 -2
  561. package/form-controls/abstractions/public-api.d.ts +0 -2
  562. package/form-controls/checkbox/checkbox.component.d.ts +0 -21
  563. package/form-controls/checkbox/index.d.ts +0 -1
  564. package/form-controls/checkbox/public-api.d.ts +0 -2
  565. package/form-controls/checkbox/upd-checkbox.module.d.ts +0 -10
  566. package/form-controls/date-picker/date-picker.component.d.ts +0 -87
  567. package/form-controls/date-picker/index.d.ts +0 -1
  568. package/form-controls/date-picker/public-api.d.ts +0 -2
  569. package/form-controls/date-picker/upd-date-picker.module.d.ts +0 -12
  570. package/form-controls/input/directives/input-append.directive.d.ts +0 -7
  571. package/form-controls/input/directives/input-prepend.directive.d.ts +0 -7
  572. package/form-controls/input/directives/public-api.d.ts +0 -2
  573. package/form-controls/input/index.d.ts +0 -1
  574. package/form-controls/input/input.component.d.ts +0 -66
  575. package/form-controls/input/public-api.d.ts +0 -4
  576. package/form-controls/input/types/input.type.d.ts +0 -1
  577. package/form-controls/input/types/loader-position.type.d.ts +0 -1
  578. package/form-controls/input/types/public-api.d.ts +0 -2
  579. package/form-controls/input/upd-input.module.d.ts +0 -13
  580. package/form-controls/radio/index.d.ts +0 -1
  581. package/form-controls/radio/public-api.d.ts +0 -2
  582. package/form-controls/radio/radio.component.d.ts +0 -19
  583. package/form-controls/radio/upd-radio.module.d.ts +0 -10
  584. package/form-controls/select/components/multiple/select-multiple.component.d.ts +0 -25
  585. package/form-controls/select/components/single/select.component.d.ts +0 -26
  586. package/form-controls/select/index.d.ts +0 -1
  587. package/form-controls/select/models/abstractions/base-select.component.d.ts +0 -83
  588. package/form-controls/select/models/defaults.d.ts +0 -8
  589. package/form-controls/select/models/public-api.d.ts +0 -2
  590. package/form-controls/select/models/select-item.d.ts +0 -25
  591. package/form-controls/select/public-api.d.ts +0 -4
  592. package/form-controls/select/upd-select.module.d.ts +0 -16
  593. package/form-controls/textarea/index.d.ts +0 -1
  594. package/form-controls/textarea/public-api.d.ts +0 -2
  595. package/form-controls/textarea/textarea.component.d.ts +0 -21
  596. package/form-controls/textarea/upd-textarea.module.d.ts +0 -8
  597. package/form-controls/time-picker/index.d.ts +0 -1
  598. package/form-controls/time-picker/public-api.d.ts +0 -3
  599. package/form-controls/time-picker/time-picker.component.d.ts +0 -78
  600. package/form-controls/time-picker/time-selector/time-selector.component.d.ts +0 -69
  601. package/form-controls/time-picker/upd-time-picker.module.d.ts +0 -17
  602. package/index.d.ts +0 -2
  603. package/layout/abstractions/base-page.component.d.ts +0 -12
  604. package/layout/abstractions/base.layout.d.ts +0 -15
  605. package/layout/abstractions/public-api.d.ts +0 -1
  606. package/layout/index.d.ts +0 -1
  607. package/layout/layouts/blank-layout/blank-layout.component.d.ts +0 -5
  608. package/layout/layouts/blank-layout/blank-layout.module.d.ts +0 -8
  609. package/layout/layouts/public-api.d.ts +0 -4
  610. package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.d.ts +0 -12
  611. package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.d.ts +0 -21
  612. package/layout/models/login-page-config.model.d.ts +0 -37
  613. package/layout/models/login-page.config.d.ts +0 -35
  614. package/layout/models/public-api.d.ts +0 -2
  615. package/layout/models/security-layout-config.model.d.ts +0 -12
  616. package/layout/models/security-layout.config.d.ts +0 -10
  617. package/layout/models/upd-layout-config.model.d.ts +0 -48
  618. package/layout/models/upd-layout.config.d.ts +0 -46
  619. package/layout/pages/auth-flow/auth-flow-routing.module.d.ts +0 -12
  620. package/layout/pages/auth-flow/auth-flow.module.d.ts +0 -18
  621. package/layout/pages/auth-flow/logged-out/logged-out.component.d.ts +0 -5
  622. package/layout/pages/auth-flow/login/login.component.d.ts +0 -23
  623. package/layout/pages/auth-flow/oauth-callback/oauth-callback.component.d.ts +0 -5
  624. package/layout/pages/auth-flow/public-api.d.ts +0 -5
  625. package/layout/pages/public-api.d.ts +0 -1
  626. package/layout/partials/footer/footer-copyright.directive.d.ts +0 -5
  627. package/layout/partials/footer/footer.component.d.ts +0 -34
  628. package/layout/partials/footer/public-api.d.ts +0 -2
  629. package/layout/partials/header/header-style.type.d.ts +0 -1
  630. package/layout/partials/header/header.component.d.ts +0 -31
  631. package/layout/partials/header/public-api.d.ts +0 -2
  632. package/layout/partials/page-header/page-header.component.d.ts +0 -7
  633. package/layout/partials/page-header/public-api.d.ts +0 -1
  634. package/layout/partials/public-api.d.ts +0 -4
  635. package/layout/partials/sidebar/public-api.d.ts +0 -1
  636. package/layout/partials/sidebar/sidebar.component.d.ts +0 -22
  637. package/layout/public-api.d.ts +0 -7
  638. package/layout/services/public-api.d.ts +0 -1
  639. package/layout/services/upd-layout-config.service.d.ts +0 -15
  640. package/layout/tools/layout.constants.d.ts +0 -15
  641. package/layout/upd-layout.module.d.ts +0 -18
  642. package/lib/index.d.ts +0 -2
  643. package/lib/models/public-api.d.ts +0 -2
  644. package/lib/models/row-column-size.d.ts +0 -6
  645. package/lib/public-api.d.ts +0 -5
  646. package/lib/tools/column-size.helper.d.ts +0 -6
  647. package/lib/tools/public-api.d.ts +0 -2
  648. package/lib/types/component-size.type.d.ts +0 -2
  649. package/lib/types/horizontal-vertical.type.d.ts +0 -2
  650. package/lib/types/public-api.d.ts +0 -4
  651. package/lib/types/validation-status.type.d.ts +0 -2
  652. package/lib/upd-components.module.d.ts +0 -7
  653. package/link/index.d.ts +0 -1
  654. package/link/public-api.d.ts +0 -3
  655. package/link/target.type.d.ts +0 -1
  656. package/link/upd-link.module.d.ts +0 -8
  657. package/list/index.d.ts +0 -1
  658. package/list/list.component.d.ts +0 -46
  659. package/list/models/badge-position.type.d.ts +0 -1
  660. package/list/models/list-item.d.ts +0 -20
  661. package/list/models/list-item.model.d.ts +0 -25
  662. package/list/models/public-api.d.ts +0 -2
  663. package/list/public-api.d.ts +0 -3
  664. package/list/upd-list.module.d.ts +0 -13
  665. package/modal/components/modal-container/modal-container.component.d.ts +0 -74
  666. package/modal/index.d.ts +0 -1
  667. package/modal/models/base.modal.d.ts +0 -8
  668. package/modal/models/modal-config.model.d.ts +0 -32
  669. package/modal/models/modal-ref.d.ts +0 -6
  670. package/modal/models/modal.config.d.ts +0 -30
  671. package/modal/models/public-api.d.ts +0 -3
  672. package/modal/public-api.d.ts +0 -3
  673. package/modal/services/modal-alert.service.d.ts +0 -22
  674. package/modal/services/modal.service.d.ts +0 -12
  675. package/modal/services/public-api.d.ts +0 -2
  676. package/modal/types/modal-footer-style.type.d.ts +0 -1
  677. package/modal/types/modal-size.type.d.ts +0 -1
  678. package/modal/upd-modal.module.d.ts +0 -18
  679. package/paginator/index.d.ts +0 -1
  680. package/paginator/paginator.component.d.ts +0 -42
  681. package/paginator/public-api.d.ts +0 -2
  682. package/paginator/upd-paginator.module.d.ts +0 -14
  683. package/popover/index.d.ts +0 -1
  684. package/popover/popover.component.d.ts +0 -22
  685. package/popover/popover.directive.d.ts +0 -33
  686. package/popover/public-api.d.ts +0 -3
  687. package/popover/upd-popover.module.d.ts +0 -9
  688. package/public-api.d.ts +0 -2
  689. package/table/abstractions/base-column.model.d.ts +0 -31
  690. package/table/abstractions/base.column.d.ts +0 -22
  691. package/table/abstractions/filters-operands.service.d.ts +0 -8
  692. package/table/abstractions/public-api.d.ts +0 -2
  693. package/table/components/columns/boolean-column/boolean-column.component.d.ts +0 -9
  694. package/table/components/columns/date-time-column/date-time-column.component.d.ts +0 -7
  695. package/table/components/columns/number-column/number-column.component.d.ts +0 -7
  696. package/table/components/columns/text-column/text-column.component.d.ts +0 -9
  697. package/table/components/columns-manager/columns-manager.component.d.ts +0 -15
  698. package/table/components/filter-row/filter-row.component.d.ts +0 -40
  699. package/table/components/save-search/save-search.component.d.ts +0 -17
  700. package/table/components/search-section/search-section.component.d.ts +0 -36
  701. package/table/directives/public-api.d.ts +0 -1
  702. package/table/directives/table-column.directive.d.ts +0 -14
  703. package/table/index.d.ts +0 -1
  704. package/table/models/columns/boolean-column.model.d.ts +0 -15
  705. package/table/models/columns/date-time-column.model.d.ts +0 -8
  706. package/table/models/columns/guid-column.model.d.ts +0 -4
  707. package/table/models/columns/image-column.model.d.ts +0 -6
  708. package/table/models/columns/number-column.model.d.ts +0 -8
  709. package/table/models/columns/public-api.d.ts +0 -6
  710. package/table/models/columns/text-column.model.d.ts +0 -6
  711. package/table/models/enums/column-type.enum.d.ts +0 -13
  712. package/table/models/enums/public-api.d.ts +0 -1
  713. package/table/models/filter-item.model.d.ts +0 -6
  714. package/table/models/filter-operand.config.d.ts +0 -9
  715. package/table/models/operands-lists/boolean-filter-operands-list.model.d.ts +0 -6
  716. package/table/models/operands-lists/date-filter-operands-list.model.d.ts +0 -6
  717. package/table/models/operands-lists/date-or-number-operands-list.config.d.ts +0 -5
  718. package/table/models/operands-lists/filter-operands-list.config.d.ts +0 -5
  719. package/table/models/operands-lists/guid-filter-operands-list.model.d.ts +0 -6
  720. package/table/models/operands-lists/number-filter-operands-list.model.d.ts +0 -6
  721. package/table/models/operands-lists/string-filter-operands-list.model.d.ts +0 -6
  722. package/table/models/public-api.d.ts +0 -4
  723. package/table/models/saved-view.model.d.ts +0 -11
  724. package/table/models/table-config.model.d.ts +0 -24
  725. package/table/models/table.config.d.ts +0 -22
  726. package/table/models/upd-table-config.model.d.ts +0 -6
  727. package/table/models/upd-table.config.d.ts +0 -6
  728. package/table/public-api.d.ts +0 -5
  729. package/table/services/default-filters-operands.service.d.ts +0 -17
  730. package/table/services/storages/saved-views.storage.d.ts +0 -22
  731. package/table/services/stores/filters-operands.store.d.ts +0 -11
  732. package/table/services/upd-table-config.service.d.ts +0 -12
  733. package/table/table.component.d.ts +0 -78
  734. package/table/tools/filters.tools.d.ts +0 -9
  735. package/table/tools/table.constants.d.ts +0 -15
  736. package/table/upd-table.module.d.ts +0 -40
@@ -1,13 +1,13 @@
1
- import { DataTypeEnum, StringColumnFilter, GuidColumnFilter, NumberColumnFilter, DateColumnFilter, BooleanColumnFilter, ColumnSort, SortDirectionEnum, BaseStore, FilterOperandEnum, FilterDateOperandEnum, FilterNumberOperandEnum, FilterBooleanOperandEnum, FilterGuidOperandEnum } from '@updevs/sdk/stores';
2
1
  import * as i0 from '@angular/core';
3
- import { inject, Directive, Component, input, ViewContainerRef, effect, computed, signal, Injectable, model, InjectionToken, Inject, EventEmitter, HostBinding, Output, viewChild, ElementRef, NgModule } from '@angular/core';
4
- import { DynamicComponentLoaderService, BaseComponent, ButtonModel } from '@updevs/sdk/layout';
2
+ import { inject, Directive, Component, input, ViewContainerRef, effect, computed, signal, Injectable, model, InjectionToken, Inject, EventEmitter, Output, HostBinding, viewChild, ElementRef, NgModule } from '@angular/core';
5
3
  import { TextService } from '@updevs/sdk';
4
+ import { DataTypeEnum, StringColumnFilter, FilterTypeEnum, GuidColumnFilter, SelectColumnFilter, NumberColumnFilter, DateColumnFilter, BooleanColumnFilter, SortDirectionEnum, ColumnSort, BaseStore, FilterOperandEnum, FilterDateOperandEnum, FilterNumberOperandEnum, FilterBooleanOperandEnum, FilterGuidOperandEnum } from '@updevs/sdk/stores';
5
+ import { DynamicComponentLoaderService, BaseComponent, ButtonModel } from '@updevs/sdk/layout';
6
6
  import * as i1 from '@angular/common';
7
7
  import { CommonModule } from '@angular/common';
8
8
  import * as i3 from '@updevs/icons';
9
9
  import { UpdIconsModule } from '@updevs/icons';
10
- import { DateTimeFormatEnum, BaseSignalStorage, Tools, SelectionModel, ServerResponseService } from '@updevs/sdk/core';
10
+ import { DateTimeFormatEnum, Tools, SelectionModel, ServerResponseService } from '@updevs/sdk/core';
11
11
  import { BaseModal, ModalService, ModalAlertService, UpdModalModule } from '@updevs/components/modal';
12
12
  import { Subject, distinctUntilChanged, debounceTime, tap, switchMap, catchError, of, finalize, forkJoin } from 'rxjs';
13
13
  import * as i1$1 from '@jsverse/transloco';
@@ -17,7 +17,7 @@ import { UpdDragAndDropModule } from '@updevs/components/drag-and-drop';
17
17
  import { FormGroup, Validators } from '@angular/forms';
18
18
  import * as i3$1 from '@updevs/components/form';
19
19
  import { DynamicFieldType, UpdFormModule } from '@updevs/components/form';
20
- import { SecurityStorage } from '@updevs/sdk/security';
20
+ import { BaseByUserSignalStorage } from '@updevs/sdk/security';
21
21
  import * as i4 from '@updevs/components/button';
22
22
  import { UpdButtonModule } from '@updevs/components/button';
23
23
  import * as i5$1 from '@updevs/components/paginator';
@@ -50,6 +50,87 @@ var ColumnTypeEnum;
50
50
  ColumnTypeEnum[ColumnTypeEnum["Guid"] = 11] = "Guid";
51
51
  })(ColumnTypeEnum || (ColumnTypeEnum = {}));
52
52
 
53
+ class BaseColumn {
54
+ constructor() {
55
+ this.textService = inject(TextService);
56
+ }
57
+ static { this.alignmentClassMap = {
58
+ justify: { text: 'text-justify', nonText: 'justify-content-between' },
59
+ center: { text: 'text-center', nonText: 'justify-content-center' },
60
+ right: { text: 'text-end', nonText: 'justify-content-end' },
61
+ left: { text: 'text-start', nonText: 'justify-content-start' }
62
+ }; }
63
+ static { this.overflowClassMap = {
64
+ 'no-wrap': 'text-nowrap',
65
+ wrap: 'text-wrap',
66
+ 'word-break': 'text-break',
67
+ truncate: 'text-truncate'
68
+ }; }
69
+ static { this.decorationClassMap = {
70
+ underline: 'text-decoration-underline',
71
+ strikethrough: 'text-decoration-line-through',
72
+ none: 'text-decoration-none'
73
+ }; }
74
+ static { this.weightClassMap = {
75
+ bold: 'fw-bold',
76
+ bolder: 'fw-bolder',
77
+ light: 'fw-light',
78
+ lighter: 'fw-lighter',
79
+ normal: 'fw-normal'
80
+ }; }
81
+ get value() {
82
+ return this.record[this.config.name];
83
+ }
84
+ get isTextType() {
85
+ return this.config.type !== ColumnTypeEnum.Boolean
86
+ && this.config.type !== ColumnTypeEnum.Image
87
+ && this.config.type !== ColumnTypeEnum.Custom;
88
+ }
89
+ get prefix() {
90
+ return this.textService.getText(this.config.prefix);
91
+ }
92
+ get suffix() {
93
+ return this.textService.getText(this.config.suffix);
94
+ }
95
+ get prefixSpace() {
96
+ return !!this.prefix && this.config.shouldSpaceAfterPrefix ? ' ' : '';
97
+ }
98
+ get suffixSpace() {
99
+ return !!this.suffix && this.config.shouldSpaceBeforeSuffix ? ' ' : '';
100
+ }
101
+ get alignmentClass() {
102
+ const map = BaseColumn.alignmentClassMap[this.config.alignment] || BaseColumn.alignmentClassMap['left'];
103
+ return this.isTextType ? map.text : map.nonText;
104
+ }
105
+ get overflowClass() {
106
+ return BaseColumn.overflowClassMap[this.config.overflowStrategy] || 'text-truncate';
107
+ }
108
+ get decorationClass() {
109
+ return this.config.decoration ? BaseColumn.decorationClassMap[this.config.decoration] : '';
110
+ }
111
+ get weightClass() {
112
+ return BaseColumn.weightClassMap[this.config.weight] || 'fw-normal';
113
+ }
114
+ getRecordAs() {
115
+ return this.record;
116
+ }
117
+ getClasses() {
118
+ return [
119
+ this.alignmentClass,
120
+ this.overflowClass,
121
+ this.decorationClass,
122
+ this.weightClass,
123
+ this.config.isItalic ? 'fst-italic' : ''
124
+ ];
125
+ }
126
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: BaseColumn, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
127
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.4", type: BaseColumn, isStandalone: false, ngImport: i0 }); }
128
+ }
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: BaseColumn, decorators: [{
130
+ type: Directive,
131
+ args: [{ standalone: false }]
132
+ }] });
133
+
53
134
  class BaseColumnModel {
54
135
  get dataType() {
55
136
  switch (this.type) {
@@ -103,100 +184,6 @@ class BaseColumnModel {
103
184
  class FiltersOperandsService {
104
185
  }
105
186
 
106
- class BaseColumn {
107
- constructor() {
108
- this.textService = inject(TextService);
109
- }
110
- get value() {
111
- return this.record[this.config.name];
112
- }
113
- get isTextType() {
114
- return this.config.type !== ColumnTypeEnum.Boolean
115
- && this.config.type !== ColumnTypeEnum.Image
116
- && this.config.type !== ColumnTypeEnum.Custom;
117
- }
118
- get prefix() {
119
- return this.textService.getText(this.config.prefix);
120
- }
121
- get suffix() {
122
- return this.textService.getText(this.config.suffix);
123
- }
124
- get prefixSpace() {
125
- return !!this.prefix && this.config.shouldSpaceAfterPrefix ? ' ' : '';
126
- }
127
- get suffixSpace() {
128
- return !!this.suffix && this.config.shouldSpaceBeforeSuffix ? ' ' : '';
129
- }
130
- get alignmentClass() {
131
- const prefix = this.isTextType ? 'text' : 'justify-content';
132
- switch (this.config.alignment) {
133
- case 'justify':
134
- return `${prefix}-${(this.isTextType ? 'justify' : 'between')}`;
135
- case 'center':
136
- return `${prefix}-center`;
137
- case 'right':
138
- return `${prefix}-end`;
139
- default:
140
- return `${prefix}-start`;
141
- }
142
- }
143
- get overflowClass() {
144
- switch (this.config.overflowStrategy) {
145
- case 'no-wrap':
146
- return 'text-nowrap';
147
- case 'wrap':
148
- return 'text-wrap';
149
- case 'word-break':
150
- return 'text-break';
151
- default:
152
- return 'text-truncate';
153
- }
154
- }
155
- get decorationClass() {
156
- switch (this.config.decoration) {
157
- case 'underline':
158
- return 'text-decoration-underline';
159
- case 'strikethrough':
160
- return 'text-decoration-line-through';
161
- case 'none':
162
- return 'text-decoration-none';
163
- default:
164
- return '';
165
- }
166
- }
167
- get weightClass() {
168
- switch (this.config.weight) {
169
- case 'bold':
170
- return 'fw-bold';
171
- case 'bolder':
172
- return 'fw-bolder';
173
- case 'light':
174
- return 'fw-light';
175
- case 'lighter':
176
- return 'fw-lighter';
177
- default:
178
- return 'fw-normal';
179
- }
180
- }
181
- getRecordAs() {
182
- return this.record;
183
- }
184
- getClasses() {
185
- return [
186
- this.alignmentClass,
187
- this.overflowClass,
188
- this.decorationClass,
189
- this.weightClass,
190
- this.config.isItalic ? 'fst-italic' : ''
191
- ];
192
- }
193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BaseColumn, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
194
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: BaseColumn, ngImport: i0 }); }
195
- }
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BaseColumn, decorators: [{
197
- type: Directive
198
- }] });
199
-
200
187
  class TextColumnComponent extends BaseColumn {
201
188
  getClasses() {
202
189
  return [
@@ -216,21 +203,21 @@ class TextColumnComponent extends BaseColumn {
216
203
  return '';
217
204
  }
218
205
  }
219
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TextColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
220
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: TextColumnComponent, selector: "upd-text-column", usesInheritance: true, ngImport: i0, template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value }}{{ suffixSpace }}{{ suffix }}</span>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
206
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: TextColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
207
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: TextColumnComponent, isStandalone: false, selector: "upd-text-column", usesInheritance: true, ngImport: i0, template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value }}{{ suffixSpace }}{{ suffix }}</span>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
221
208
  }
222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TextColumnComponent, decorators: [{
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: TextColumnComponent, decorators: [{
223
210
  type: Component,
224
- args: [{ selector: 'upd-text-column', template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value }}{{ suffixSpace }}{{ suffix }}</span>\n" }]
211
+ args: [{ standalone: false, selector: 'upd-text-column', template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value }}{{ suffixSpace }}{{ suffix }}</span>\n" }]
225
212
  }] });
226
213
 
227
214
  class NumberColumnComponent extends BaseColumn {
228
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NumberColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
229
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: NumberColumnComponent, selector: "upd-number-column", usesInheritance: true, ngImport: i0, template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value | number:config.numberFormat }}{{ suffixSpace }}{{ suffix }}</span>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] }); }
215
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NumberColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
216
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: NumberColumnComponent, isStandalone: false, selector: "upd-number-column", usesInheritance: true, ngImport: i0, template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value | number:config.numberFormat }}{{ suffixSpace }}{{ suffix }}</span>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] }); }
230
217
  }
231
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NumberColumnComponent, decorators: [{
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NumberColumnComponent, decorators: [{
232
219
  type: Component,
233
- args: [{ selector: 'upd-number-column', template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value | number:config.numberFormat }}{{ suffixSpace }}{{ suffix }}</span>\n" }]
220
+ args: [{ standalone: false, selector: 'upd-number-column', template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value | number:config.numberFormat }}{{ suffixSpace }}{{ suffix }}</span>\n" }]
234
221
  }] });
235
222
 
236
223
  class BooleanColumnComponent extends BaseColumn {
@@ -246,27 +233,27 @@ class BooleanColumnComponent extends BaseColumn {
246
233
  }
247
234
  return `text-${(!!this.value ? this.config.trueColor : this.config.falseColor)}`;
248
235
  }
249
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BooleanColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
250
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: BooleanColumnComponent, selector: "upd-boolean-column", usesInheritance: true, ngImport: i0, template: "<div [ngClass]=\"getClasses()\">\n @switch (config.displayType) {\n @case ('text') {\n {{ prefix }}{{ prefixSpace }}{{ !!value ? textService.getText(config.trueText) : textService.getText(config.falseText) }}{{ suffixSpace }}{{ suffix }}\n }\n @case ('toggle') {\n {{ prefix }}{{ prefixSpace }}\n <upd-icon [tablerIcon]=\"!!value ? 'toggle-right' : 'toggle-left'\"></upd-icon>{{ suffixSpace }}{{ suffix }}\n }\n @case ('icon') {\n {{ prefix }}{{ prefixSpace }}\n <upd-icon [model]=\"!!value ? config.trueIcon : config.falseIcon\"></upd-icon>{{ suffixSpace }}{{ suffix }}\n }\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }] }); }
236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: BooleanColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
237
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: BooleanColumnComponent, isStandalone: false, selector: "upd-boolean-column", usesInheritance: true, ngImport: i0, template: "<div [ngClass]=\"getClasses()\">\n @switch (config.displayType) {\n @case ('text') {\n {{ prefix }}{{ prefixSpace }}{{ !!value ? textService.getText(config.trueText) : textService.getText(config.falseText) }}{{ suffixSpace }}{{ suffix }}\n }\n @case ('toggle') {\n {{ prefix }}{{ prefixSpace }}\n <upd-icon [tablerIcon]=\"!!value ? 'toggle-right' : 'toggle-left'\"></upd-icon>{{ suffixSpace }}{{ suffix }}\n }\n @case ('icon') {\n {{ prefix }}{{ prefixSpace }}\n <upd-icon [model]=\"!!value ? config.trueIcon : config.falseIcon\"></upd-icon>{{ suffixSpace }}{{ suffix }}\n }\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }] }); }
251
238
  }
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BooleanColumnComponent, decorators: [{
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: BooleanColumnComponent, decorators: [{
253
240
  type: Component,
254
- args: [{ selector: 'upd-boolean-column', template: "<div [ngClass]=\"getClasses()\">\n @switch (config.displayType) {\n @case ('text') {\n {{ prefix }}{{ prefixSpace }}{{ !!value ? textService.getText(config.trueText) : textService.getText(config.falseText) }}{{ suffixSpace }}{{ suffix }}\n }\n @case ('toggle') {\n {{ prefix }}{{ prefixSpace }}\n <upd-icon [tablerIcon]=\"!!value ? 'toggle-right' : 'toggle-left'\"></upd-icon>{{ suffixSpace }}{{ suffix }}\n }\n @case ('icon') {\n {{ prefix }}{{ prefixSpace }}\n <upd-icon [model]=\"!!value ? config.trueIcon : config.falseIcon\"></upd-icon>{{ suffixSpace }}{{ suffix }}\n }\n }\n</div>\n" }]
241
+ args: [{ standalone: false, selector: 'upd-boolean-column', template: "<div [ngClass]=\"getClasses()\">\n @switch (config.displayType) {\n @case ('text') {\n {{ prefix }}{{ prefixSpace }}{{ !!value ? textService.getText(config.trueText) : textService.getText(config.falseText) }}{{ suffixSpace }}{{ suffix }}\n }\n @case ('toggle') {\n {{ prefix }}{{ prefixSpace }}\n <upd-icon [tablerIcon]=\"!!value ? 'toggle-right' : 'toggle-left'\"></upd-icon>{{ suffixSpace }}{{ suffix }}\n }\n @case ('icon') {\n {{ prefix }}{{ prefixSpace }}\n <upd-icon [model]=\"!!value ? config.trueIcon : config.falseIcon\"></upd-icon>{{ suffixSpace }}{{ suffix }}\n }\n }\n</div>\n" }]
255
242
  }] });
256
243
 
257
244
  class DateTimeColumnComponent extends BaseColumn {
258
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DateTimeColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
259
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: DateTimeColumnComponent, selector: "upd-date-time-column", usesInheritance: true, ngImport: i0, template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value | date:config.dateTimeFormat }}{{ suffixSpace }}{{ suffix }}</span>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] }); }
245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DateTimeColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
246
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: DateTimeColumnComponent, isStandalone: false, selector: "upd-date-time-column", usesInheritance: true, ngImport: i0, template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value | date:config.dateTimeFormat }}{{ suffixSpace }}{{ suffix }}</span>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] }); }
260
247
  }
261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DateTimeColumnComponent, decorators: [{
248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DateTimeColumnComponent, decorators: [{
262
249
  type: Component,
263
- args: [{ selector: 'upd-date-time-column', template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value | date:config.dateTimeFormat }}{{ suffixSpace }}{{ suffix }}</span>\n" }]
250
+ args: [{ standalone: false, selector: 'upd-date-time-column', template: "<span [ngClass]=\"getClasses()\">{{ prefix }}{{ prefixSpace }}{{ value | date:config.dateTimeFormat }}{{ suffixSpace }}{{ suffix }}</span>\n" }]
264
251
  }] });
265
252
 
266
253
  class TableColumnDirective {
267
254
  constructor() {
268
- this.record = input.required();
269
- this.config = input.required();
255
+ this.record = input.required(...(ngDevMode ? [{ debugName: "record" }] : []));
256
+ this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
270
257
  this.viewContainerRef = inject(ViewContainerRef);
271
258
  this.dynamicLoaderService = inject(DynamicComponentLoaderService);
272
259
  effect(() => {
@@ -287,24 +274,28 @@ class TableColumnDirective {
287
274
  // @ts-ignore
288
275
  return BooleanColumnComponent;
289
276
  case ColumnTypeEnum.Date:
277
+ case ColumnTypeEnum.DateTime:
290
278
  // @ts-ignore
291
279
  return DateTimeColumnComponent;
292
280
  case ColumnTypeEnum.Guid:
293
281
  // @ts-ignore
294
282
  return TextColumnComponent;
283
+ case ColumnTypeEnum.Custom:
284
+ return this.config().component;
295
285
  default:
296
286
  throw Error();
297
287
  }
298
288
  }
299
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TableColumnDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
300
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.0", type: TableColumnDirective, selector: "[updTableColumn]", inputs: { record: { classPropertyName: "record", publicName: "record", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
289
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: TableColumnDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
290
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.4", type: TableColumnDirective, isStandalone: false, selector: "[updTableColumn]", inputs: { record: { classPropertyName: "record", publicName: "record", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
301
291
  }
302
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TableColumnDirective, decorators: [{
292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: TableColumnDirective, decorators: [{
303
293
  type: Directive,
304
294
  args: [{
295
+ standalone: false,
305
296
  selector: '[updTableColumn]'
306
297
  }]
307
- }], ctorParameters: () => [] });
298
+ }], ctorParameters: () => [], propDecorators: { record: [{ type: i0.Input, args: [{ isSignal: true, alias: "record", required: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }] } });
308
299
 
309
300
  class BooleanColumnModel extends BaseColumnModel {
310
301
  constructor(init) {
@@ -326,6 +317,15 @@ class BooleanColumnModel extends BaseColumnModel {
326
317
  }
327
318
  }
328
319
 
320
+ class CustomColumnModel extends BaseColumnModel {
321
+ constructor(init) {
322
+ super(ColumnTypeEnum.Custom, init);
323
+ if (!!init) {
324
+ Object.assign(this, init);
325
+ }
326
+ }
327
+ }
328
+
329
329
  class DateTimeColumnModel extends BaseColumnModel {
330
330
  get dateTimeFormat() {
331
331
  return this.customFormat || this.format;
@@ -397,6 +397,24 @@ class TableConfigModel {
397
397
  this.data = [];
398
398
  this.preSelectedItems = [];
399
399
  this.searchInputDebounceTime = 300;
400
+ /**
401
+ * Actions added to each record row as a group of buttons.
402
+ */
403
+ this.customActions = [];
404
+ /**
405
+ * Actions added to the header of the table as regular buttons.
406
+ */
407
+ this.customHeaderActions = [];
408
+ /**
409
+ * Define custom filterable fields.
410
+ * If not provided and useColumnsAsFilters is true, filters will be auto-generated from columns.
411
+ */
412
+ this.filterFields = [];
413
+ /**
414
+ * Whether to use columns as filters.
415
+ * If false, filterFields must be provided.
416
+ */
417
+ this.useColumnsAsFilters = false;
400
418
  this.getIdFunction = (item) => item.id;
401
419
  if (!!init) {
402
420
  Object.assign(this, init);
@@ -407,8 +425,8 @@ class TableConfigModel {
407
425
  class ColumnsManagerComponent extends BaseModal {
408
426
  constructor() {
409
427
  super(...arguments);
410
- this.config = computed(() => ({ columns: [this.visibleColumn(), this.hiddenColumn()], canReorder: true }));
411
- this.columns = signal([]);
428
+ this.config = computed(() => ({ columns: [this.visibleColumn(), this.hiddenColumn()], canReorder: true }), ...(ngDevMode ? [{ debugName: "config" }] : []));
429
+ this.columns = signal([], ...(ngDevMode ? [{ debugName: "columns" }] : []));
412
430
  this.visibleColumn = computed(() => ({
413
431
  name: 'visible',
414
432
  title: { text: 'UpDevs.Table.VisibleColumns', isTranslated: false },
@@ -417,7 +435,7 @@ class ColumnsManagerComponent extends BaseModal {
417
435
  name: c.name,
418
436
  text: c.title || { text: 'UpDevs.Table.ColumnTitleNotSet', isTranslated: false }
419
437
  }))
420
- }));
438
+ }), ...(ngDevMode ? [{ debugName: "visibleColumn" }] : []));
421
439
  this.hiddenColumn = computed(() => ({
422
440
  name: 'hidden',
423
441
  title: { text: 'UpDevs.Table.HiddenColumns', isTranslated: false },
@@ -425,42 +443,38 @@ class ColumnsManagerComponent extends BaseModal {
425
443
  name: c.name,
426
444
  text: c.title || { text: 'UpDevs.Table.ColumnTitleNotSet', isTranslated: false }
427
445
  }))
428
- }));
446
+ }), ...(ngDevMode ? [{ debugName: "hiddenColumn" }] : []));
429
447
  }
430
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ColumnsManagerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
431
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ColumnsManagerComponent, selector: "upd-columns-manager", usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table.ColumnsManager'\">\n <upd-drag-and-drop [config]=\"config()\" [(columns)]=\"columns\"></upd-drag-and-drop>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i2.DragAndDropComponent, selector: "upd-drag-and-drop", inputs: ["config", "columns"], outputs: ["columnsChange"] }] }); }
448
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: ColumnsManagerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
449
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: ColumnsManagerComponent, isStandalone: false, selector: "upd-columns-manager", usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table.ColumnsManager'\">\n <upd-drag-and-drop [config]=\"config()\" [(columns)]=\"columns\"></upd-drag-and-drop>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i2.DragAndDropComponent, selector: "upd-drag-and-drop", inputs: ["config", "columns"], outputs: ["columnsChange"] }] }); }
432
450
  }
433
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ColumnsManagerComponent, decorators: [{
451
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: ColumnsManagerComponent, decorators: [{
434
452
  type: Component,
435
- args: [{ selector: 'upd-columns-manager', template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table.ColumnsManager'\">\n <upd-drag-and-drop [config]=\"config()\" [(columns)]=\"columns\"></upd-drag-and-drop>\n</ng-container>\n" }]
453
+ args: [{ standalone: false, selector: 'upd-columns-manager', template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table.ColumnsManager'\">\n <upd-drag-and-drop [config]=\"config()\" [(columns)]=\"columns\"></upd-drag-and-drop>\n</ng-container>\n" }]
436
454
  }] });
437
455
 
438
- class SavedViewsStorage extends BaseSignalStorage {
439
- get loggedUserId() {
440
- return this.securityStorage.getUserInfo()?.id || 'nl';
441
- }
456
+ class SavedViewsStorage extends BaseByUserSignalStorage {
442
457
  constructor() {
443
458
  super('saved-views');
444
- this.securityStorage = inject(SecurityStorage);
445
459
  this.lastStateKey = 'last-state';
446
460
  }
447
461
  saveView(data) {
448
462
  data.id = data.id || Tools.Guid.generate();
449
- data.userId = this.loggedUserId;
450
- this.save(data, this.getUserKey(data.id, data.tableName));
463
+ data.userId = this._loggedUserId;
464
+ this.save(data, this._getUserKey(data.id, data.tableName));
451
465
  }
452
466
  saveLastState(data) {
453
467
  data.id = this.lastStateKey;
454
468
  this.saveView(data);
455
469
  }
456
470
  getById(tableName, id) {
457
- return this.get(this.getUserKey(id, tableName));
471
+ return this.get(this._getUserKey(id, tableName));
458
472
  }
459
473
  getAll(tableName) {
460
474
  return computed(() => {
461
475
  const records = this.getAllItems();
462
476
  return records().filter(sv => sv.tableName.toLowerCase() === tableName.toLowerCase()
463
- && sv.userId === this.loggedUserId
477
+ && sv.userId === this._loggedUserId
464
478
  && sv.id !== this.lastStateKey);
465
479
  });
466
480
  }
@@ -475,29 +489,26 @@ class SavedViewsStorage extends BaseSignalStorage {
475
489
  });
476
490
  }
477
491
  removeViews(tableName, ...keys) {
478
- super.remove(...keys.map(k => this.getUserKey(k, tableName)));
492
+ super.remove(...keys.map(k => this._getUserKey(k, tableName)));
479
493
  }
480
494
  getByName(tableName, name) {
481
495
  const records = this.getAllItems();
482
496
  return records().find(sv => sv.tableName.toLowerCase() === tableName.toLowerCase()
483
- && sv.userId === this.loggedUserId
497
+ && sv.userId === this._loggedUserId
484
498
  && sv.name?.toLowerCase() === name?.toLowerCase()
485
499
  && sv.id !== this.lastStateKey);
486
500
  }
487
- getUserKey(key, tableName) {
488
- return `${this.loggedUserId}${this._separator}${tableName}${this._separator}${key}`;
489
- }
490
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SavedViewsStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
491
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SavedViewsStorage }); }
501
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SavedViewsStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
502
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SavedViewsStorage }); }
492
503
  }
493
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SavedViewsStorage, decorators: [{
504
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SavedViewsStorage, decorators: [{
494
505
  type: Injectable
495
506
  }], ctorParameters: () => [] });
496
507
 
497
508
  class SaveSearchComponent extends BaseModal {
498
509
  constructor() {
499
510
  super(...arguments);
500
- this.formGroup = model(new FormGroup({}));
511
+ this.formGroup = model(new FormGroup({}), ...(ngDevMode ? [{ debugName: "formGroup" }] : []));
501
512
  this.formRows = [];
502
513
  this.savedViewsStorage = inject(SavedViewsStorage);
503
514
  this.uniqueNameValidator = () => (control) => {
@@ -549,12 +560,263 @@ class SaveSearchComponent extends BaseModal {
549
560
  this.savedViewsStorage.saveView(data);
550
561
  this.modalRef().close();
551
562
  }
552
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SaveSearchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
553
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: SaveSearchComponent, selector: "upd-save-search", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { formGroup: "formGroupChange" }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table.SaveSearch'\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{ t('Title') }}</h5>\n </div>\n <div class=\"modal-body py-4\">\n <upd-form [rows]=\"formRows\" [hasActionsSection]=\"false\" [(formGroup)]=\"formGroup\"></upd-form>\n </div>\n <div class=\"modal-footer\">\n <upd-button colorStyle=\"secondary\" [isLink]=\"true\" (clicked)=\"cancel()\">\n {{ t('Cancel') }}\n </upd-button>\n <upd-button colorStyle=\"primary\" [iconModel]=\"{tablerIcon:'device-floppy'}\" (clicked)=\"save()\" [isDisabled]=\"!formGroup().valid\">\n {{ t('Save') }}\n </upd-button>\n </div>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i4.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i3$1.FormComponent, selector: "upd-form", inputs: ["rows", "layout", "title", "hasActionsSection", "isCard", "isDisabled", "isLoading", "isSaving", "formData", "formGroup"], outputs: ["initialized", "dataLoaded", "submitted", "formDataChange", "formGroupChange"] }] }); }
563
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SaveSearchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
564
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: SaveSearchComponent, isStandalone: false, selector: "upd-save-search", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { formGroup: "formGroupChange" }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table.SaveSearch'\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{ t('Title') }}</h5>\n </div>\n <div class=\"modal-body py-4\">\n <upd-form [rows]=\"formRows\" [hasActionsSection]=\"false\" [(formGroup)]=\"formGroup\"></upd-form>\n </div>\n <div class=\"modal-footer\">\n <upd-button colorStyle=\"secondary\" [isLink]=\"true\" (clicked)=\"cancel()\">\n {{ t('Cancel') }}\n </upd-button>\n <upd-button colorStyle=\"primary\" [iconModel]=\"{tablerIcon:'device-floppy'}\" (clicked)=\"save()\" [isDisabled]=\"!formGroup().valid\">\n {{ t('Save') }}\n </upd-button>\n </div>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i4.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title", "stopPropagation"], outputs: ["clicked"] }, { kind: "component", type: i3$1.FormComponent, selector: "upd-form", inputs: ["rows", "layout", "title", "hasActionsSection", "isCard", "isDisabled", "isLoading", "isSaving", "formData", "formGroup"], outputs: ["initialized", "dataLoaded", "submitted", "formDataChange", "formGroupChange"] }] }); }
554
565
  }
555
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SaveSearchComponent, decorators: [{
566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SaveSearchComponent, decorators: [{
556
567
  type: Component,
557
- args: [{ selector: 'upd-save-search', template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table.SaveSearch'\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{ t('Title') }}</h5>\n </div>\n <div class=\"modal-body py-4\">\n <upd-form [rows]=\"formRows\" [hasActionsSection]=\"false\" [(formGroup)]=\"formGroup\"></upd-form>\n </div>\n <div class=\"modal-footer\">\n <upd-button colorStyle=\"secondary\" [isLink]=\"true\" (clicked)=\"cancel()\">\n {{ t('Cancel') }}\n </upd-button>\n <upd-button colorStyle=\"primary\" [iconModel]=\"{tablerIcon:'device-floppy'}\" (clicked)=\"save()\" [isDisabled]=\"!formGroup().valid\">\n {{ t('Save') }}\n </upd-button>\n </div>\n</ng-container>\n" }]
568
+ args: [{ standalone: false, selector: 'upd-save-search', template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table.SaveSearch'\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">{{ t('Title') }}</h5>\n </div>\n <div class=\"modal-body py-4\">\n <upd-form [rows]=\"formRows\" [hasActionsSection]=\"false\" [(formGroup)]=\"formGroup\"></upd-form>\n </div>\n <div class=\"modal-footer\">\n <upd-button colorStyle=\"secondary\" [isLink]=\"true\" (clicked)=\"cancel()\">\n {{ t('Cancel') }}\n </upd-button>\n <upd-button colorStyle=\"primary\" [iconModel]=\"{tablerIcon:'device-floppy'}\" (clicked)=\"save()\" [isDisabled]=\"!formGroup().valid\">\n {{ t('Save') }}\n </upd-button>\n </div>\n</ng-container>\n" }]
569
+ }], propDecorators: { formGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "formGroup", required: false }] }, { type: i0.Output, args: ["formGroupChange"] }] } });
570
+
571
+ /**
572
+ * Service to manage the current search request state across table components.
573
+ * Uses Angular signals for reactive state management, eliminating the need for prop drilling.
574
+ * Should be provided at the table component level so each table instance has its own state.
575
+ */
576
+ class CurrentSearchRequestService {
577
+ constructor() {
578
+ this._searchRequest = signal({}, ...(ngDevMode ? [{ debugName: "_searchRequest" }] : []));
579
+ this._isSearching = signal(false, ...(ngDevMode ? [{ debugName: "_isSearching" }] : []));
580
+ this._hasChanges = signal(false, ...(ngDevMode ? [{ debugName: "_hasChanges" }] : []));
581
+ /**
582
+ * Read-only signal for the current search request
583
+ */
584
+ this.searchRequest = this._searchRequest.asReadonly();
585
+ /**
586
+ * Read-only signal for the searching state
587
+ */
588
+ this.isSearching = this._isSearching.asReadonly();
589
+ /**
590
+ * Read-only signal indicating if the search request has changed from default
591
+ */
592
+ this.hasChanges = this._hasChanges.asReadonly();
593
+ /**
594
+ * Subject to trigger search operations
595
+ */
596
+ this.searchRequestSubject = new Subject();
597
+ /**
598
+ * Count of active filters (non-hidden)
599
+ */
600
+ this.activeFilterCount = computed(() => this.searchRequest().filters?.filter(f => !f.isHidden).length || 0, ...(ngDevMode ? [{ debugName: "activeFilterCount" }] : []));
601
+ /**
602
+ * Whether there are any active filters
603
+ */
604
+ this.hasFilters = computed(() => (this.searchRequest().filters?.length || 0) > 0, ...(ngDevMode ? [{ debugName: "hasFilters" }] : []));
605
+ /**
606
+ * Count of visible (non-hidden) filters
607
+ */
608
+ this.visibleFilterCount = computed(() => this.searchRequest().filters?.filter(f => !f.isHidden).length || 0, ...(ngDevMode ? [{ debugName: "visibleFilterCount" }] : []));
609
+ /**
610
+ * Whether there's a search description/text query
611
+ */
612
+ this.hasDescription = computed(() => !!this.searchRequest().description && this.searchRequest().description.length > 0, ...(ngDevMode ? [{ debugName: "hasDescription" }] : []));
613
+ /**
614
+ * Whether there are any sortings applied
615
+ */
616
+ this.hasSorting = computed(() => (this.searchRequest().sortings?.length || 0) > 0, ...(ngDevMode ? [{ debugName: "hasSorting" }] : []));
617
+ /**
618
+ * The current sorting (first one if multiple exist)
619
+ */
620
+ this.currentSorting = computed(() => this.hasSorting() ? this.searchRequest().sortings[0] : undefined, ...(ngDevMode ? [{ debugName: "currentSorting" }] : []));
621
+ /**
622
+ * Whether any search criteria is active (filters, description, or sorting)
623
+ */
624
+ this.hasAnySearchCriteria = computed(() => this.hasFilters() || this.hasDescription() || this.hasSorting(), ...(ngDevMode ? [{ debugName: "hasAnySearchCriteria" }] : []));
625
+ /**
626
+ * Current page number (1-indexed for display)
627
+ */
628
+ this.currentPageNumber = computed(() => (this.searchRequest().pageIndex || 0) + 1, ...(ngDevMode ? [{ debugName: "currentPageNumber" }] : []));
629
+ /**
630
+ * Whether pagination is configured
631
+ */
632
+ this.hasPagination = computed(() => !!this.searchRequest().pageSize && this.searchRequest().pageSize > 0, ...(ngDevMode ? [{ debugName: "hasPagination" }] : []));
633
+ }
634
+ /**
635
+ * Updates the entire search request
636
+ * @param request The new search request
637
+ */
638
+ updateSearchRequest(request) {
639
+ const previousRequest = this._searchRequest();
640
+ this._searchRequest.set(request);
641
+ // Only mark as changed if the new request is actually different from previous
642
+ if (!this.areSearchRequestsEqual(previousRequest, request)) {
643
+ this._hasChanges.set(true);
644
+ }
645
+ }
646
+ /**
647
+ * Partially updates the search request
648
+ * @param partial Partial search request properties to update
649
+ */
650
+ patchSearchRequest(partial) {
651
+ const previousRequest = this._searchRequest();
652
+ const newRequest = { ...previousRequest, ...partial };
653
+ this._searchRequest.set(newRequest);
654
+ // Only mark as changed if the patch actually changed something
655
+ if (!this.areSearchRequestsEqual(previousRequest, newRequest)) {
656
+ this._hasChanges.set(true);
657
+ }
658
+ }
659
+ /**
660
+ * Sets the searching state
661
+ * @param isSearching Whether a search is in progress
662
+ */
663
+ setSearching(isSearching) {
664
+ this._isSearching.set(isSearching);
665
+ }
666
+ /**
667
+ * Resets the search request to default state
668
+ */
669
+ reset() {
670
+ this._searchRequest.set({});
671
+ this._isSearching.set(false);
672
+ this._hasChanges.set(false);
673
+ }
674
+ /**
675
+ * Triggers a search operation by emitting on the searchRequestSubject
676
+ */
677
+ triggerSearch() {
678
+ this.searchRequestSubject.next(this._searchRequest());
679
+ }
680
+ /**
681
+ * Manually sets the hasChanges flag
682
+ * Useful for changes that aren't part of the search request but should enable Save View
683
+ * (e.g., column visibility changes)
684
+ * @param hasChanges Whether there are changes
685
+ */
686
+ setHasChanges(hasChanges) {
687
+ this._hasChanges.set(hasChanges);
688
+ }
689
+ /**
690
+ * Adds a filter to the search request
691
+ * @param filter The filter to add
692
+ */
693
+ addFilter(filter) {
694
+ const currentFilters = this.searchRequest().filters || [];
695
+ this.patchSearchRequest({ filters: [...currentFilters, filter] });
696
+ }
697
+ /**
698
+ * Removes a filter by name
699
+ * @param filterName The name of the filter column to remove
700
+ */
701
+ removeFilter(filterName) {
702
+ const currentFilters = this.searchRequest().filters || [];
703
+ this.patchSearchRequest({ filters: currentFilters.filter(f => f.column !== filterName) });
704
+ }
705
+ /**
706
+ * Removes a filter by index
707
+ * @param index The index of the filter to remove
708
+ */
709
+ removeFilterByIndex(index) {
710
+ const currentFilters = this.searchRequest().filters || [];
711
+ this.patchSearchRequest({ filters: currentFilters.filter((_, i) => i !== index) });
712
+ }
713
+ /**
714
+ * Updates a specific filter by column name
715
+ * @param columnName The column name of the filter to update
716
+ * @param newData Partial filter properties to update
717
+ */
718
+ updateFilter(columnName, newData) {
719
+ const currentFilters = this.searchRequest().filters || [];
720
+ this.patchSearchRequest({ filters: currentFilters.map(f => f.column === columnName ? { ...f, ...newData } : f) });
721
+ }
722
+ /**
723
+ * Updates a filter by its index position
724
+ * @param index The index of the filter to update
725
+ * @param newData Partial filter properties to update
726
+ */
727
+ updateFilterByIndex(index, newData) {
728
+ const currentFilters = this.searchRequest().filters || [];
729
+ if (index >= 0 && index < currentFilters.length) {
730
+ this.patchSearchRequest({ filters: currentFilters.map((f, i) => i === index ? { ...f, ...newData } : f) });
731
+ }
732
+ }
733
+ /**
734
+ * Clears all filters
735
+ */
736
+ clearFilters() {
737
+ this.patchSearchRequest({ filters: [] });
738
+ }
739
+ /**
740
+ * Sets the sorting (replaces existing sortings)
741
+ * @param column The column name to sort by
742
+ * @param direction The sort direction
743
+ */
744
+ setSorting(column, direction) {
745
+ this.patchSearchRequest({ sortings: [{ column, direction }] });
746
+ }
747
+ /**
748
+ * Clears all sorting
749
+ */
750
+ clearSorting() {
751
+ this.patchSearchRequest({ sortings: [] });
752
+ }
753
+ /**
754
+ * Sets the search description/text query
755
+ * @param description The search text
756
+ */
757
+ setDescription(description) {
758
+ this.patchSearchRequest({ description });
759
+ }
760
+ /**
761
+ * Clears the search description
762
+ */
763
+ clearDescription() {
764
+ this.patchSearchRequest({ description: '' });
765
+ }
766
+ /**
767
+ * Clears ALL search criteria (filters, description, sorting)
768
+ * Note: Does not reset pagination - use reset() for that
769
+ */
770
+ clearAll() {
771
+ this.patchSearchRequest({ filters: [], description: '', sortings: [] });
772
+ }
773
+ /**
774
+ * Clears all search criteria except pagination
775
+ * Useful when you want to reset search but maintain current page
776
+ */
777
+ clearAllExceptPagination() {
778
+ this.clearAll();
779
+ }
780
+ /**
781
+ * Deep comparison of two search requests
782
+ * @param a First search request
783
+ * @param b Second search request
784
+ * @returns true if they are equal, false otherwise
785
+ */
786
+ areSearchRequestsEqual(a, b) {
787
+ if ((a.description || '') !== (b.description || '')) {
788
+ return false;
789
+ }
790
+ const aFilters = a.filters || [];
791
+ const bFilters = b.filters || [];
792
+ if (aFilters.length !== bFilters.length) {
793
+ return false;
794
+ }
795
+ for (let i = 0; i < aFilters.length; i++) {
796
+ if (JSON.stringify(aFilters[i]) !== JSON.stringify(bFilters[i])) {
797
+ return false;
798
+ }
799
+ }
800
+ const aSortings = a.sortings || [];
801
+ const bSortings = b.sortings || [];
802
+ if (aSortings.length !== bSortings.length) {
803
+ return false;
804
+ }
805
+ for (let i = 0; i < aSortings.length; i++) {
806
+ if (JSON.stringify(aSortings[i]) !== JSON.stringify(bSortings[i])) {
807
+ return false;
808
+ }
809
+ }
810
+ if (a.pageSize !== b.pageSize || a.pageIndex !== b.pageIndex) {
811
+ return false;
812
+ }
813
+ return true;
814
+ }
815
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CurrentSearchRequestService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
816
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CurrentSearchRequestService }); }
817
+ }
818
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CurrentSearchRequestService, decorators: [{
819
+ type: Injectable
558
820
  }] });
559
821
 
560
822
  class FilterTools {
@@ -562,42 +824,64 @@ class FilterTools {
562
824
  return filters.map(f => ({
563
825
  name: f.column,
564
826
  value: f.value,
565
- operandConfig: operands[f.dataType].find(op => op.operand === f.operand)
827
+ operandConfig: f.type && operands[f.type] ? operands[f.type].find(op => op.operand === f.operand) : undefined,
828
+ isHidden: f.isHidden,
829
+ type: f.type
566
830
  }));
567
831
  }
568
- static convertToRequestFilter(filters, columns) {
832
+ static convertToRequestFilter(filters, filtersConfigs = [], columns = []) {
569
833
  return filters.map(af => {
570
- const col = columns.find(c => c.name === af.name);
571
- switch (col?.dataType) {
572
- case DataTypeEnum.Boolean:
834
+ const filterType = filtersConfigs.length > 0
835
+ ? filtersConfigs.find(c => c.name === af.name).type
836
+ : columns.find(c => c.name === af.name).filterType;
837
+ switch (filterType) {
838
+ case FilterTypeEnum.Boolean:
573
839
  return new BooleanColumnFilter({
574
840
  column: af.name,
575
841
  value: af.value,
576
- operand: !!af.operandConfig ? af.operandConfig.operand : undefined
842
+ operand: !!af.operandConfig ? af.operandConfig.operand : undefined,
843
+ isHidden: af.isHidden,
844
+ type: filterType
577
845
  });
578
- case DataTypeEnum.Date:
846
+ case FilterTypeEnum.Date:
579
847
  return new DateColumnFilter({
580
848
  column: af.name,
581
849
  value: af.value,
582
- operand: !!af.operandConfig ? af.operandConfig.operand : undefined
850
+ operand: !!af.operandConfig ? af.operandConfig.operand : undefined,
851
+ isHidden: af.isHidden,
852
+ type: filterType
583
853
  });
584
- case DataTypeEnum.Number:
854
+ case FilterTypeEnum.Number:
585
855
  return new NumberColumnFilter({
586
856
  column: af.name,
587
857
  value: af.value,
588
- operand: !!af.operandConfig ? af.operandConfig.operand : undefined
858
+ operand: !!af.operandConfig ? af.operandConfig.operand : undefined,
859
+ isHidden: af.isHidden,
860
+ type: filterType
589
861
  });
590
- case DataTypeEnum.Guid:
862
+ case FilterTypeEnum.Select:
863
+ return new SelectColumnFilter({
864
+ column: af.name,
865
+ value: af.value,
866
+ operand: !!af.operandConfig ? af.operandConfig.operand : undefined,
867
+ isHidden: af.isHidden,
868
+ type: filterType
869
+ });
870
+ case FilterTypeEnum.Guid:
591
871
  return new GuidColumnFilter({
592
872
  column: af.name,
593
873
  value: af.value,
594
- operand: !!af.operandConfig ? af.operandConfig.operand : undefined
874
+ operand: !!af.operandConfig ? af.operandConfig.operand : undefined,
875
+ isHidden: af.isHidden,
876
+ type: filterType
595
877
  });
596
878
  default:
597
879
  return new StringColumnFilter({
598
880
  column: af.name,
599
881
  value: af.value,
600
- operand: !!af.operandConfig ? af.operandConfig.operand : undefined
882
+ operand: !!af.operandConfig ? af.operandConfig.operand : undefined,
883
+ isHidden: af.isHidden,
884
+ type: filterType
601
885
  });
602
886
  }
603
887
  });
@@ -631,10 +915,10 @@ class UpdTableConfigService {
631
915
  constructor(layoutConfig) {
632
916
  this.config = new UpdTableConfigModel(layoutConfig);
633
917
  }
634
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdTableConfigService, deps: [{ token: TableConstants.defaultOptionsInjectionToken }], target: i0.ɵɵFactoryTarget.Injectable }); }
635
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdTableConfigService }); }
918
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: UpdTableConfigService, deps: [{ token: TableConstants.defaultOptionsInjectionToken }], target: i0.ɵɵFactoryTarget.Injectable }); }
919
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: UpdTableConfigService }); }
636
920
  }
637
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdTableConfigService, decorators: [{
921
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: UpdTableConfigService, decorators: [{
638
922
  type: Injectable
639
923
  }], ctorParameters: () => [{ type: undefined, decorators: [{
640
924
  type: Inject,
@@ -646,25 +930,27 @@ class FilterRowComponent extends BaseComponent {
646
930
  super(...arguments);
647
931
  this.wrapperClasses = 'd-flex gap-2';
648
932
  this.removed = new EventEmitter();
649
- this.DataTypeEnum = DataTypeEnum;
650
- this.activeFilters = model.required();
651
- this.rowIndex = input.required();
652
- this.columns = input.required();
653
- this.isDisabled = input.required();
654
- this.store = input();
655
- this.currentFilter = input();
656
- this.currentField = signal(undefined);
657
- this.currentOperand = signal(undefined);
658
- this.fieldsOptions = signal([]);
659
- this.comparisonOperatorOptions = signal([]);
660
- this.isValueSectionEnabled = signal(true);
933
+ this.FilterTypeEnum = FilterTypeEnum;
934
+ this.rowIndex = input.required(...(ngDevMode ? [{ debugName: "rowIndex" }] : []));
935
+ this.columns = input.required(...(ngDevMode ? [{ debugName: "columns" }] : []));
936
+ this.isDisabled = input.required(...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
937
+ this.store = input(...(ngDevMode ? [undefined, { debugName: "store" }] : []));
938
+ this.filterFields = input(...(ngDevMode ? [undefined, { debugName: "filterFields" }] : []));
939
+ this.currentFilter = input(...(ngDevMode ? [undefined, { debugName: "currentFilter" }] : []));
940
+ this.currentField = signal(undefined, ...(ngDevMode ? [{ debugName: "currentField" }] : []));
941
+ this.currentOperand = signal(undefined, ...(ngDevMode ? [{ debugName: "currentOperand" }] : []));
942
+ this.fieldsOptions = signal([], ...(ngDevMode ? [{ debugName: "fieldsOptions" }] : []));
943
+ this.comparisonOperatorOptions = signal([], ...(ngDevMode ? [{ debugName: "comparisonOperatorOptions" }] : []));
944
+ this.fieldAllowedValues = signal([], ...(ngDevMode ? [{ debugName: "fieldAllowedValues" }] : []));
945
+ this.isValueSectionEnabled = signal(true, ...(ngDevMode ? [{ debugName: "isValueSectionEnabled" }] : []));
661
946
  this.currentOperands = [];
662
947
  this.configService = inject(UpdTableConfigService);
663
948
  this.filtersOperandsService = inject(FiltersOperandsService);
664
949
  this.textService = inject(TextService);
950
+ this.currentSearchRequestService = inject(CurrentSearchRequestService);
665
951
  }
666
952
  get fieldType() {
667
- return this.currentField()?.objectData || DataTypeEnum.String;
953
+ return this.currentField()?.objectData || FilterTypeEnum.Text;
668
954
  }
669
955
  get selectedField() {
670
956
  const currentFilter = this.currentFilter();
@@ -683,17 +969,38 @@ class FilterRowComponent extends BaseComponent {
683
969
  return !!currentFilter?.name ? currentFilter.value : undefined;
684
970
  }
685
971
  ngOnInit() {
686
- if (!!this.store() && this.configService.config.shouldLoadFieldsFromServer) {
687
- this.store().getFilterableFields().subscribe(fields => this.fieldsOptions.set(fields.map(f => ({ value: f.name, text: f.description, objectData: f.type }))));
972
+ // Priority 1: User-defined filter fields
973
+ if (!!this.filterFields() && this.filterFields().length > 0) {
974
+ this.fieldsOptions.set(this.filterFields().map(f => ({
975
+ value: f.name,
976
+ text: this.textService.getText(f.label),
977
+ objectData: f.type
978
+ })));
688
979
  }
980
+ // Priority 2: Server-loaded fields
981
+ else if (!!this.store() && this.configService.config.shouldLoadFieldsFromServer) {
982
+ this.store().getFilterableFields().subscribe(fields => this.fieldsOptions.set(fields.map(f => ({
983
+ value: f.name,
984
+ text: f.description,
985
+ objectData: f.type
986
+ }))));
987
+ }
988
+ // Priority 3: Fallback to columns
689
989
  else {
690
- this.fieldsOptions.set(this.columns().filter(c => !!c.title).map(c => ({ value: c.name, text: this.textService.getText(c.title), objectData: c.dataType })));
990
+ this.fieldsOptions.set(this.columns().filter(c => !!c.title).map(c => ({
991
+ value: c.name,
992
+ text: this.textService.getText(c.title),
993
+ objectData: c.dataType
994
+ })));
691
995
  }
692
996
  if (!!this.selectedField) {
997
+ this.onSelectField(this.selectedField);
693
998
  if (!!this.selectedOperand) {
694
999
  this.onSelectOperand(this.selectedOperand);
695
1000
  }
696
- this.onSelectField(this.selectedField);
1001
+ if (!!this.selectedValue) {
1002
+ this.updateValue(this.selectedValue);
1003
+ }
697
1004
  }
698
1005
  }
699
1006
  onSelectField(item) {
@@ -706,78 +1013,68 @@ class FilterRowComponent extends BaseComponent {
706
1013
  else {
707
1014
  this.comparisonOperatorOptions.set([]);
708
1015
  }
709
- this.activeFilters.update(curr => {
710
- curr[this.rowIndex()].name = this.currentField()?.value;
711
- return [...curr];
1016
+ this.currentSearchRequestService.updateFilterByIndex(this.rowIndex(), {
1017
+ column: this.currentField()?.value,
1018
+ type: this.fieldType,
1019
+ dataType: dataType
712
1020
  });
713
1021
  }
714
1022
  onSelectOperand(item) {
715
1023
  this.currentOperand.set(this.currentOperands.find(co => co.operand === item?.value));
716
1024
  this.isValueSectionEnabled.set(!!this.currentOperand()?.requiresValue);
717
- this.activeFilters.update(curr => {
718
- curr[this.rowIndex()].operandConfig = this.currentOperand();
719
- return [...curr];
720
- });
1025
+ this.currentSearchRequestService.updateFilterByIndex(this.rowIndex(), { operand: this.currentOperand()?.operand });
1026
+ if (this.fieldType === FilterTypeEnum.Select) {
1027
+ const values = this.filterFields()?.find(f => f.name === this.currentField()?.value)?.allowedValues || [];
1028
+ this.fieldAllowedValues.set(values.map(v => ({ value: v.key, text: v.value })));
1029
+ }
721
1030
  }
722
1031
  updateValue(value) {
723
- this.activeFilters.update(curr => {
724
- curr[this.rowIndex()].value = value;
725
- return [...curr];
726
- });
1032
+ this.currentSearchRequestService.updateFilterByIndex(this.rowIndex(), { value });
727
1033
  }
728
1034
  removeFilterItem() {
729
- this.activeFilters.update(curr => {
730
- curr.splice(this.rowIndex(), 1);
731
- return [...curr];
732
- });
1035
+ this.currentSearchRequestService.removeFilterByIndex(this.rowIndex());
733
1036
  this.removed.emit();
734
1037
  }
735
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FilterRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
736
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: FilterRowComponent, selector: "upd-filter-row", inputs: { activeFilters: { classPropertyName: "activeFilters", publicName: "activeFilters", isSignal: true, isRequired: true, transformFunction: null }, rowIndex: { classPropertyName: "rowIndex", publicName: "rowIndex", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: true, transformFunction: null }, store: { classPropertyName: "store", publicName: "store", isSignal: true, isRequired: false, transformFunction: null }, currentFilter: { classPropertyName: "currentFilter", publicName: "currentFilter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed", activeFilters: "activeFiltersChange" }, host: { properties: { "class": "this.wrapperClasses" } }, usesInheritance: true, ngImport: i0, template: "<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"fieldsOptions()\" (selectedItem)=\"onSelectField($event)\"\n [selected]=\"selectedField\">\n</upd-select>\n<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"comparisonOperatorOptions()\" (selectedItem)=\"onSelectOperand($event)\"\n [selected]=\"selectedOperand\">\n</upd-select>\n\n@if (isValueSectionEnabled()) {\n @switch (fieldType) {\n @case (DataTypeEnum.Number) {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"number\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n @case (DataTypeEnum.Date) {\n\n }\n @default {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"text\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n }\n} @else {\n <div class=\"w-100\">\n <input type=\"text\" class=\"form-control h-100\" disabled>\n </div>\n}\n\n<upd-button class=\"flex-shrink-1\" colorStyle=\"danger\" [isDisabled]=\"isDisabled()\" [isOutline]=\"true\" [isIcon]=\"true\"\n [iconModel]=\"{tablerIcon:'x'}\" (clicked)=\"removeFilterItem()\"></upd-button>\n", styles: [""], dependencies: [{ kind: "component", type: i4.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i5.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "name", "maxLength", "isDisabled", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "isRequired", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout", "labelColSize"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "component", type: i3$2.SelectComponent, selector: "upd-select", inputs: ["useSystemStyle", "shouldShowClearButton", "isCompact", "selected"], outputs: ["selectedItem"] }] }); }
1038
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: FilterRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1039
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: FilterRowComponent, isStandalone: false, selector: "upd-filter-row", inputs: { rowIndex: { classPropertyName: "rowIndex", publicName: "rowIndex", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: true, transformFunction: null }, store: { classPropertyName: "store", publicName: "store", isSignal: true, isRequired: false, transformFunction: null }, filterFields: { classPropertyName: "filterFields", publicName: "filterFields", isSignal: true, isRequired: false, transformFunction: null }, currentFilter: { classPropertyName: "currentFilter", publicName: "currentFilter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed" }, host: { properties: { "class": "this.wrapperClasses" } }, usesInheritance: true, ngImport: i0, template: "<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"fieldsOptions()\" (selectedItem)=\"onSelectField($event)\"\n [value]=\"selectedField?.value\">\n</upd-select>\n<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"comparisonOperatorOptions()\"\n (selectedItem)=\"onSelectOperand($event)\" [value]=\"selectedOperand?.value\">\n</upd-select>\n\n@if (isValueSectionEnabled()) {\n @switch (fieldType) {\n @case (FilterTypeEnum.Number) {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"number\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n @case (FilterTypeEnum.Date) {\n\n }\n @case (FilterTypeEnum.Select) {\n <upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"fieldAllowedValues()\"\n (selectedItem)=\"updateValue($event?.value)\" [value]=\"selectedValue\">\n </upd-select>\n }\n @default {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"text\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n }\n} @else {\n <div class=\"w-100\">\n <input type=\"text\" class=\"form-control h-100\" disabled>\n </div>\n}\n\n<upd-button class=\"flex-shrink-1\" colorStyle=\"danger\" [isDisabled]=\"isDisabled()\" [isOutline]=\"true\" [isIcon]=\"true\"\n [iconModel]=\"{tablerIcon:'x'}\" (clicked)=\"removeFilterItem()\"></upd-button>", styles: [""], dependencies: [{ kind: "component", type: i4.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title", "stopPropagation"], outputs: ["clicked"] }, { kind: "component", type: i5.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "component", type: i3$2.SelectComponent, selector: "upd-select", inputs: ["useSystemStyle", "shouldShowClearButton", "shouldTruncateSelectedText", "isCompact", "value"], outputs: ["valueChange", "selectedItem"] }] }); }
737
1040
  }
738
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FilterRowComponent, decorators: [{
1041
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: FilterRowComponent, decorators: [{
739
1042
  type: Component,
740
- args: [{ selector: 'upd-filter-row', template: "<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"fieldsOptions()\" (selectedItem)=\"onSelectField($event)\"\n [selected]=\"selectedField\">\n</upd-select>\n<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"comparisonOperatorOptions()\" (selectedItem)=\"onSelectOperand($event)\"\n [selected]=\"selectedOperand\">\n</upd-select>\n\n@if (isValueSectionEnabled()) {\n @switch (fieldType) {\n @case (DataTypeEnum.Number) {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"number\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n @case (DataTypeEnum.Date) {\n\n }\n @default {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"text\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n }\n} @else {\n <div class=\"w-100\">\n <input type=\"text\" class=\"form-control h-100\" disabled>\n </div>\n}\n\n<upd-button class=\"flex-shrink-1\" colorStyle=\"danger\" [isDisabled]=\"isDisabled()\" [isOutline]=\"true\" [isIcon]=\"true\"\n [iconModel]=\"{tablerIcon:'x'}\" (clicked)=\"removeFilterItem()\"></upd-button>\n" }]
1043
+ args: [{ standalone: false, selector: 'upd-filter-row', template: "<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"fieldsOptions()\" (selectedItem)=\"onSelectField($event)\"\n [value]=\"selectedField?.value\">\n</upd-select>\n<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"comparisonOperatorOptions()\"\n (selectedItem)=\"onSelectOperand($event)\" [value]=\"selectedOperand?.value\">\n</upd-select>\n\n@if (isValueSectionEnabled()) {\n @switch (fieldType) {\n @case (FilterTypeEnum.Number) {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"number\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n @case (FilterTypeEnum.Date) {\n\n }\n @case (FilterTypeEnum.Select) {\n <upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"fieldAllowedValues()\"\n (selectedItem)=\"updateValue($event?.value)\" [value]=\"selectedValue\">\n </upd-select>\n }\n @default {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"text\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n }\n} @else {\n <div class=\"w-100\">\n <input type=\"text\" class=\"form-control h-100\" disabled>\n </div>\n}\n\n<upd-button class=\"flex-shrink-1\" colorStyle=\"danger\" [isDisabled]=\"isDisabled()\" [isOutline]=\"true\" [isIcon]=\"true\"\n [iconModel]=\"{tablerIcon:'x'}\" (clicked)=\"removeFilterItem()\"></upd-button>" }]
741
1044
  }], propDecorators: { wrapperClasses: [{
742
1045
  type: HostBinding,
743
1046
  args: ['class']
744
1047
  }], removed: [{
745
1048
  type: Output
746
- }] } });
1049
+ }], rowIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowIndex", required: true }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: true }] }], isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisabled", required: true }] }], store: [{ type: i0.Input, args: [{ isSignal: true, alias: "store", required: false }] }], filterFields: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterFields", required: false }] }], currentFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentFilter", required: false }] }] } });
747
1050
 
748
1051
  class SearchSectionComponent extends BaseComponent {
749
1052
  constructor() {
750
1053
  super();
751
1054
  this.wrapperClass = 'card-body border-bottom py-3 d-flex flex-column gap-2';
752
- this.searchRequest = model.required();
753
- this.hasChanges = model.required();
754
- this.columns = input.required();
755
- this.isSearching = input.required();
756
- this.searchRequestSubject = input.required();
757
- this.config = input.required();
758
- this.actionsTpl = input();
759
- this.activeFilters = signal([]);
760
- this.isFilterSectionOpen = signal(false);
1055
+ this.columns = input.required(...(ngDevMode ? [{ debugName: "columns" }] : []));
1056
+ this.config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
1057
+ this.actionsTpl = input(...(ngDevMode ? [undefined, { debugName: "actionsTpl" }] : []));
1058
+ this.activeFilters = computed(() => FilterTools.convertToFilterItem(this.currentSearchRequestService.searchRequest().filters?.filter(af => !af.isHidden) || [], this.filtersOperandsService.getAllOperands()), ...(ngDevMode ? [{ debugName: "activeFilters" }] : []));
1059
+ this.isFilterSectionOpen = signal(false, ...(ngDevMode ? [{ debugName: "isFilterSectionOpen" }] : []));
761
1060
  this.canApplyFilters = computed(() => this.activeFilters().length > 0
762
- && this.activeFilters().every(af => !!af.name && !!af.operandConfig?.operand && (!af.operandConfig?.requiresValue || !!af.value)));
763
- this.canPerformActions = computed(() => this.canApplyFilters() && !this.isSearching());
764
- this.badgeConfig = computed(() => (this.searchRequest().filters?.length || 0) > 0
1061
+ && this.activeFilters().every(af => !af.isHidden && !!af.name && !!af.operandConfig?.operand && (!af.operandConfig?.requiresValue || !!af.value)), ...(ngDevMode ? [{ debugName: "canApplyFilters" }] : []));
1062
+ this.canPerformActions = computed(() => this.canApplyFilters() && !this.currentSearchRequestService.isSearching(), ...(ngDevMode ? [{ debugName: "canPerformActions" }] : []));
1063
+ this.badgeConfig = computed(() => this.currentSearchRequestService.visibleFilterCount() > 0
765
1064
  ? ({
766
1065
  isNotification: true,
767
1066
  isPill: true,
768
1067
  bgColor: 'primary-lt',
769
- text: { text: this.searchRequest().filters.length.toString(), isTranslated: true }
1068
+ text: { text: this.currentSearchRequestService.visibleFilterCount().toString(), isTranslated: true }
770
1069
  })
771
- : undefined);
772
- this.filterSectionBtnColor = computed(() => this.isFilterSectionOpen() ? 'primary' : undefined);
1070
+ : undefined, ...(ngDevMode ? [{ debugName: "badgeConfig" }] : []));
1071
+ this.filterSectionBtnColor = computed(() => this.isFilterSectionOpen() ? 'primary' : undefined, ...(ngDevMode ? [{ debugName: "filterSectionBtnColor" }] : []));
773
1072
  this.searchSubject = new Subject();
774
1073
  this.filtersOperandsService = inject(FiltersOperandsService);
1074
+ this.currentSearchRequestService = inject(CurrentSearchRequestService);
775
1075
  effect(() => {
776
- if ((this.searchRequest().filters?.length || 0) > 0) {
777
- this.activeFilters.set([...FilterTools.convertToFilterItem(this.searchRequest().filters || [], this.filtersOperandsService.getAllOperands())]);
778
- }
779
- else {
780
- this.activeFilters.set([]);
1076
+ // Auto-close filter section when all filters are removed
1077
+ if (this.currentSearchRequestService.visibleFilterCount() === 0 && this.isFilterSectionOpen()) {
781
1078
  this.isFilterSectionOpen.set(false);
782
1079
  }
783
1080
  }, { allowSignalWrites: true });
@@ -785,17 +1082,14 @@ class SearchSectionComponent extends BaseComponent {
785
1082
  ngOnInit() {
786
1083
  const searchSub = this.searchSubject
787
1084
  .pipe(distinctUntilChanged(), debounceTime(this.config().searchInputDebounceTime))
788
- .subscribe(term => this.searchRequestSubject().next({
789
- ...this.searchRequest(),
790
- description: term
791
- }));
1085
+ .subscribe(term => this.currentSearchRequestService.setDescription(term));
792
1086
  this.addSubscriptions(searchSub);
793
1087
  }
794
1088
  search() {
795
- this.searchRequestSubject().next({
796
- ...this.searchRequest(),
797
- filters: FilterTools.convertToRequestFilter(this.activeFilters(), this.config().columns)
1089
+ this.currentSearchRequestService.patchSearchRequest({
1090
+ filters: FilterTools.convertToRequestFilter(this.activeFilters(), this.config().filterFields, this.config().columns)
798
1091
  });
1092
+ this.currentSearchRequestService.triggerSearch();
799
1093
  }
800
1094
  toggleFilterSection() {
801
1095
  if (this.activeFilters().length === 0) {
@@ -810,26 +1104,26 @@ class SearchSectionComponent extends BaseComponent {
810
1104
  this.search();
811
1105
  }
812
1106
  addEmptyFilterRow() {
813
- this.activeFilters.update(curr => {
814
- curr.push({});
815
- return [...curr];
816
- });
1107
+ this.currentSearchRequestService.addFilter({});
817
1108
  }
818
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SearchSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
819
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SearchSectionComponent, selector: "upd-search-section", inputs: { searchRequest: { classPropertyName: "searchRequest", publicName: "searchRequest", isSignal: true, isRequired: true, transformFunction: null }, hasChanges: { classPropertyName: "hasChanges", publicName: "hasChanges", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, isSearching: { classPropertyName: "isSearching", publicName: "isSearching", isSignal: true, isRequired: true, transformFunction: null }, searchRequestSubject: { classPropertyName: "searchRequestSubject", publicName: "searchRequestSubject", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, actionsTpl: { classPropertyName: "actionsTpl", publicName: "actionsTpl", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchRequest: "searchRequestChange", hasChanges: "hasChangesChange" }, host: { properties: { "class": "this.wrapperClass" } }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table'\">\n @if (!!actionsTpl()) {\n <ng-template [ngTemplateOutlet]=\"actionsTpl()!\"></ng-template>\n }\n\n <div class=\"d-flex align-items-center gap-2\">\n <upd-input wrapperClasses=\"w-100\" [placeholder]=\"{text:'UpDevs.Table.Search', isTranslated:false}\" [isAppendButton]=\"true\"\n (valueChange)=\"searchSubject.next($event)\" [value]=\"searchRequest().description\">\n <ng-template updInputAppend>\n <upd-button [isIcon]=\"true\" [colorStyle]=\"filterSectionBtnColor()\" (clicked)=\"toggleFilterSection()\"\n [badgeConfig]=\"badgeConfig()\">\n <upd-icon [tablerIcon]=\"isFilterSectionOpen() ? 'filter-up' : 'filter-down'\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n </ng-template>\n </upd-input>\n </div>\n\n @if (isFilterSectionOpen()) {\n @for (row of activeFilters(); track row; let i = $index) {\n <upd-filter-row [store]=\"config().store\" [currentFilter]=\"row\" [(activeFilters)]=\"activeFilters\" [columns]=\"columns()\"\n [rowIndex]=\"i\" (removed)=\"onRowRemoved()\" [isDisabled]=\"isSearching()\">\n </upd-filter-row>\n }\n\n <div class=\"ms-auto d-flex gap-2\">\n <upd-button customClasses=\"gap-2\" colorStyle=\"primary\" [isOutline]=\"true\" (clicked)=\"addEmptyFilterRow()\"\n [isDisabled]=\"!canPerformActions()\">\n <upd-icon tablerIcon=\"plus\" tablerIconWeight=\"bold\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('AddNewFilter') }}\n </upd-button>\n <upd-button customClasses=\"gap-2\" colorStyle=\"success\" [isDisabled]=\"!canPerformActions()\" (clicked)=\"search()\">\n <upd-icon tablerIcon=\"checks\" tablerIconWeight=\"bold\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('ApplyFilters') }}\n </upd-button>\n </div>\n }\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i3.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i4.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i5.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "name", "maxLength", "isDisabled", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "isRequired", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout", "labelColSize"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "directive", type: i5.InputAppendDirective, selector: "ng-template[updInputAppend]" }, { kind: "component", type: FilterRowComponent, selector: "upd-filter-row", inputs: ["activeFilters", "rowIndex", "columns", "isDisabled", "store", "currentFilter"], outputs: ["removed", "activeFiltersChange"] }] }); }
1109
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SearchSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1110
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: SearchSectionComponent, isStandalone: false, selector: "upd-search-section", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, actionsTpl: { classPropertyName: "actionsTpl", publicName: "actionsTpl", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.wrapperClass" } }, usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table'\">\n @if (!!actionsTpl()) {\n <ng-template [ngTemplateOutlet]=\"actionsTpl()!\"></ng-template>\n }\n\n <div class=\"d-flex align-items-center gap-2\">\n <upd-input wrapperClasses=\"w-100\" [placeholder]=\"{text:'UpDevs.Table.Search', isTranslated:false}\"\n [isAppendButton]=\"true\" (valueChange)=\"searchSubject.next($event)\"\n [value]=\"currentSearchRequestService.searchRequest().description\">\n <ng-template updInputAppend>\n <upd-button [isIcon]=\"true\" [colorStyle]=\"filterSectionBtnColor()\" (clicked)=\"toggleFilterSection()\"\n [badgeConfig]=\"badgeConfig()\">\n <upd-icon [tablerIcon]=\"isFilterSectionOpen() ? 'filter-up' : 'filter-down'\"\n [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n </ng-template>\n </upd-input>\n </div>\n\n @if (isFilterSectionOpen()) {\n @for (row of activeFilters(); track row.name; let i = $index) {\n <upd-filter-row [store]=\"config().store\" [currentFilter]=\"row\" [columns]=\"columns()\" [rowIndex]=\"i\"\n (removed)=\"onRowRemoved()\" [isDisabled]=\"currentSearchRequestService.isSearching()\"\n [filterFields]=\"config().filterFields\">\n </upd-filter-row>\n }\n\n <div class=\"ms-auto d-flex gap-2\">\n <upd-button customClasses=\"gap-2\" colorStyle=\"primary\" [isOutline]=\"true\" (clicked)=\"addEmptyFilterRow()\"\n [isDisabled]=\"!canPerformActions()\">\n <upd-icon tablerIcon=\"plus\" tablerIconWeight=\"bold\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('AddNewFilter') }}\n </upd-button>\n <upd-button customClasses=\"gap-2\" colorStyle=\"success\" [isDisabled]=\"!canPerformActions()\"\n (clicked)=\"search()\">\n <upd-icon tablerIcon=\"checks\" tablerIconWeight=\"bold\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('ApplyFilters') }}\n </upd-button>\n </div>\n }\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i3.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i4.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title", "stopPropagation"], outputs: ["clicked"] }, { kind: "component", type: i5.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "directive", type: i5.InputAppendDirective, selector: "ng-template[updInputAppend]" }, { kind: "component", type: FilterRowComponent, selector: "upd-filter-row", inputs: ["rowIndex", "columns", "isDisabled", "store", "filterFields", "currentFilter"], outputs: ["removed"] }] }); }
820
1111
  }
821
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SearchSectionComponent, decorators: [{
1112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SearchSectionComponent, decorators: [{
822
1113
  type: Component,
823
- args: [{ selector: 'upd-search-section', template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table'\">\n @if (!!actionsTpl()) {\n <ng-template [ngTemplateOutlet]=\"actionsTpl()!\"></ng-template>\n }\n\n <div class=\"d-flex align-items-center gap-2\">\n <upd-input wrapperClasses=\"w-100\" [placeholder]=\"{text:'UpDevs.Table.Search', isTranslated:false}\" [isAppendButton]=\"true\"\n (valueChange)=\"searchSubject.next($event)\" [value]=\"searchRequest().description\">\n <ng-template updInputAppend>\n <upd-button [isIcon]=\"true\" [colorStyle]=\"filterSectionBtnColor()\" (clicked)=\"toggleFilterSection()\"\n [badgeConfig]=\"badgeConfig()\">\n <upd-icon [tablerIcon]=\"isFilterSectionOpen() ? 'filter-up' : 'filter-down'\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n </ng-template>\n </upd-input>\n </div>\n\n @if (isFilterSectionOpen()) {\n @for (row of activeFilters(); track row; let i = $index) {\n <upd-filter-row [store]=\"config().store\" [currentFilter]=\"row\" [(activeFilters)]=\"activeFilters\" [columns]=\"columns()\"\n [rowIndex]=\"i\" (removed)=\"onRowRemoved()\" [isDisabled]=\"isSearching()\">\n </upd-filter-row>\n }\n\n <div class=\"ms-auto d-flex gap-2\">\n <upd-button customClasses=\"gap-2\" colorStyle=\"primary\" [isOutline]=\"true\" (clicked)=\"addEmptyFilterRow()\"\n [isDisabled]=\"!canPerformActions()\">\n <upd-icon tablerIcon=\"plus\" tablerIconWeight=\"bold\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('AddNewFilter') }}\n </upd-button>\n <upd-button customClasses=\"gap-2\" colorStyle=\"success\" [isDisabled]=\"!canPerformActions()\" (clicked)=\"search()\">\n <upd-icon tablerIcon=\"checks\" tablerIconWeight=\"bold\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('ApplyFilters') }}\n </upd-button>\n </div>\n }\n</ng-container>\n" }]
1114
+ args: [{ standalone: false, selector: 'upd-search-section', template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table'\">\n @if (!!actionsTpl()) {\n <ng-template [ngTemplateOutlet]=\"actionsTpl()!\"></ng-template>\n }\n\n <div class=\"d-flex align-items-center gap-2\">\n <upd-input wrapperClasses=\"w-100\" [placeholder]=\"{text:'UpDevs.Table.Search', isTranslated:false}\"\n [isAppendButton]=\"true\" (valueChange)=\"searchSubject.next($event)\"\n [value]=\"currentSearchRequestService.searchRequest().description\">\n <ng-template updInputAppend>\n <upd-button [isIcon]=\"true\" [colorStyle]=\"filterSectionBtnColor()\" (clicked)=\"toggleFilterSection()\"\n [badgeConfig]=\"badgeConfig()\">\n <upd-icon [tablerIcon]=\"isFilterSectionOpen() ? 'filter-up' : 'filter-down'\"\n [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n </ng-template>\n </upd-input>\n </div>\n\n @if (isFilterSectionOpen()) {\n @for (row of activeFilters(); track row.name; let i = $index) {\n <upd-filter-row [store]=\"config().store\" [currentFilter]=\"row\" [columns]=\"columns()\" [rowIndex]=\"i\"\n (removed)=\"onRowRemoved()\" [isDisabled]=\"currentSearchRequestService.isSearching()\"\n [filterFields]=\"config().filterFields\">\n </upd-filter-row>\n }\n\n <div class=\"ms-auto d-flex gap-2\">\n <upd-button customClasses=\"gap-2\" colorStyle=\"primary\" [isOutline]=\"true\" (clicked)=\"addEmptyFilterRow()\"\n [isDisabled]=\"!canPerformActions()\">\n <upd-icon tablerIcon=\"plus\" tablerIconWeight=\"bold\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('AddNewFilter') }}\n </upd-button>\n <upd-button customClasses=\"gap-2\" colorStyle=\"success\" [isDisabled]=\"!canPerformActions()\"\n (clicked)=\"search()\">\n <upd-icon tablerIcon=\"checks\" tablerIconWeight=\"bold\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('ApplyFilters') }}\n </upd-button>\n </div>\n }\n</ng-container>" }]
824
1115
  }], ctorParameters: () => [], propDecorators: { wrapperClass: [{
825
1116
  type: HostBinding,
826
1117
  args: ['class']
827
- }] } });
1118
+ }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], actionsTpl: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionsTpl", required: false }] }] } });
828
1119
 
829
1120
  var Utils = Tools.Utils;
830
1121
  class TableComponent extends BaseComponent {
831
1122
  get numberOfColumns() {
832
- return this.columns().length + (this.configModel().hasCheckboxColumn ? 1 : 0) + (!!this.pendingWidthColClass ? 1 : 0);
1123
+ return this.columns().length
1124
+ + (this.configModel().hasCheckboxColumn ? 1 : 0)
1125
+ + (this.configModel().customActions.length > 0 ? 1 : 0)
1126
+ + (!!this.pendingWidthColClass ? 1 : 0);
833
1127
  }
834
1128
  get hasWidth() {
835
1129
  return this.columns().some(rec => !!rec.width);
@@ -841,6 +1135,7 @@ class TableComponent extends BaseComponent {
841
1135
  const isGrid = this.columns().some(rec => !!rec.width?.gridColumn);
842
1136
  const total = isGrid ? 12 : 100;
843
1137
  const remainingSize = total - this.columns().reduce((acc, item) => acc + item.widthSize, 0);
1138
+ // TODO: add spaces of checkbox and customactions columns
844
1139
  return remainingSize > 0 ? `${(isGrid ? 'col' : 'w')}-${remainingSize}` : '';
845
1140
  }
846
1141
  get isWidthInPixels() {
@@ -854,39 +1149,35 @@ class TableComponent extends BaseComponent {
854
1149
  }
855
1150
  constructor() {
856
1151
  super();
857
- this.savedViewsRef = viewChild('savedViewsBtn', { read: ElementRef });
858
- this.config = model.required();
859
- this.isSearching = signal(false);
860
- this.selectedItems = computed(() => this.selectionModel().selected());
861
- this.activeSavedView = signal(undefined);
1152
+ this.savedViewsRef = viewChild('savedViewsBtn', { ...(ngDevMode ? { debugName: "savedViewsRef" } : {}), read: ElementRef });
1153
+ this.config = model.required(...(ngDevMode ? [{ debugName: "config" }] : []));
1154
+ this.selectedItems = computed(() => this.selectionModel().selected(), ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
1155
+ this.activeSavedView = signal(undefined, ...(ngDevMode ? [{ debugName: "activeSavedView" }] : []));
862
1156
  this.isMainCheckboxChecked = false;
863
1157
  this.isMainCheckboxIndeterminate = false;
864
1158
  this.isSavedViewsDropdownOpen = false;
865
- this.searchRequest = model({});
866
- this.activeFilters = model([]);
867
- this.hasSearchChanged = signal(false);
868
- this.currentPage = model(1);
869
- this.totalRecords = signal(0);
870
- this.pageSize = model(0);
871
- this.configModel = computed(() => new TableConfigModel(this.config()));
872
- this.data = computed(() => this.configModel().data.length > 0 ? this.configModel().data : this.currentData());
873
- this.selectionModel = computed(() => new SelectionModel(this.configModel().getIdFunction));
874
- this.currentSorting = signal(undefined);
875
- this.hiddenColumns = computed(() => this.configModel().canManageColumns ? this.configModel().columns.filter(c => c.isHidden).length : 0);
876
- this.columns = signal([]);
877
- this.searchRequestSubject = new Subject();
1159
+ this.currentPage = model(1, ...(ngDevMode ? [{ debugName: "currentPage" }] : []));
1160
+ this.pageSize = model(0, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
1161
+ this.totalRecords = signal(0, ...(ngDevMode ? [{ debugName: "totalRecords" }] : []));
1162
+ this.configModel = computed(() => new TableConfigModel(this.config()), ...(ngDevMode ? [{ debugName: "configModel" }] : []));
1163
+ this.data = computed(() => this.configModel().data.length > 0 ? this.configModel().data : this.currentData(), ...(ngDevMode ? [{ debugName: "data" }] : []));
1164
+ this.selectionModel = computed(() => new SelectionModel(this.configModel().getIdFunction), ...(ngDevMode ? [{ debugName: "selectionModel" }] : []));
1165
+ this.currentSorting = signal(undefined, ...(ngDevMode ? [{ debugName: "currentSorting" }] : []));
1166
+ this.hiddenColumns = computed(() => this.configModel().canManageColumns ? this.configModel().columns.filter(c => c.isHidden).length : 0, ...(ngDevMode ? [{ debugName: "hiddenColumns" }] : []));
1167
+ this.columns = signal([], ...(ngDevMode ? [{ debugName: "columns" }] : []));
878
1168
  this.textService = inject(TextService);
1169
+ this.currentSearchRequestService = inject(CurrentSearchRequestService);
879
1170
  this.savedViewsOptions = computed(() => {
880
1171
  const allSavedViewsOptions = [];
881
1172
  this.allSavedViews().forEach(sv => allSavedViewsOptions.push(this.getSavedViewOption(sv)));
882
1173
  return allSavedViewsOptions;
883
- });
1174
+ }, ...(ngDevMode ? [{ debugName: "savedViewsOptions" }] : []));
884
1175
  this.shouldForceSearch = false;
885
1176
  this.columnsBackup = [];
886
- this.currentData = signal([]);
887
- this.currentFavoriteButtons = computed(() => this.favoriteButtons);
888
- this.smallSizeSignal = signal('small');
889
- this.allSavedViews = computed(() => this.savedViewsStorage.getAll(this.configModel().name)());
1177
+ this.currentData = signal([], ...(ngDevMode ? [{ debugName: "currentData" }] : []));
1178
+ this.currentFavoriteButtons = computed(() => this.favoriteButtons, ...(ngDevMode ? [{ debugName: "currentFavoriteButtons" }] : []));
1179
+ this.smallSizeSignal = signal('small', ...(ngDevMode ? [{ debugName: "smallSizeSignal" }] : []));
1180
+ this.allSavedViews = computed(() => this.savedViewsStorage.getAll(this.configModel().name)(), ...(ngDevMode ? [{ debugName: "allSavedViews" }] : []));
890
1181
  this.favoriteButtons = [];
891
1182
  this.serverResponseService = inject(ServerResponseService);
892
1183
  this.savedViewsStorage = inject(SavedViewsStorage);
@@ -914,27 +1205,22 @@ class TableComponent extends BaseComponent {
914
1205
  }
915
1206
  ngOnInit() {
916
1207
  this.columnsBackup = [...this.config().columns];
917
- const searchSubjectSub = this.searchRequestSubject
918
- .pipe(distinctUntilChanged((prev, curr) => !this.shouldForceSearch || Utils.areEqual(prev, curr)), tap((request) => {
919
- this.isSearching.set(true);
1208
+ const searchSubjectSub = this.currentSearchRequestService.searchRequestSubject
1209
+ .pipe(distinctUntilChanged((prev, curr) => !this.shouldForceSearch ? Utils.areEqual(prev, curr) : false), tap((request) => {
1210
+ this.currentSearchRequestService.setSearching(true);
920
1211
  this.currentData.set([]);
921
- this.searchRequest.set(request);
922
- if ((request.filters?.length || 0) > 0
923
- || (request.description || '').length > 0
924
- || (request.sortings?.length || 0) > 0) {
925
- this.hasSearchChanged.set(true);
926
- }
927
- }), switchMap(() => this.store.search(this.searchRequest()).pipe(catchError(() => of()) // Already handled by the ServerResponseService.
1212
+ this.currentSearchRequestService.updateSearchRequest(request);
1213
+ }), switchMap(() => this.store.search(this.currentSearchRequestService.searchRequest()).pipe(catchError(() => of()) // Already handled by the ServerResponseService.
928
1214
  )), finalize(() => this.shouldForceSearch = false))
929
1215
  .subscribe(resp => this.setupSearchResults(resp));
930
1216
  const serverResponseSub = this.serverResponseService.onError.subscribe(error => {
931
1217
  if (!!error) {
932
- this.isSearching.set(false);
1218
+ this.currentSearchRequestService.setSearching(false);
933
1219
  }
934
1220
  });
935
1221
  if (this.configModel().shouldAutoSearch && this.isRemote) {
936
1222
  this.shouldForceSearch = true;
937
- this.searchRequestSubject.next({});
1223
+ this.currentSearchRequestService.searchRequestSubject.next({});
938
1224
  }
939
1225
  this.updateColumns(this.configModel().columns);
940
1226
  this.addSubscriptions(searchSubjectSub, serverResponseSub);
@@ -959,23 +1245,17 @@ class TableComponent extends BaseComponent {
959
1245
  return this.getColumnByName(columnName).allowSort;
960
1246
  }
961
1247
  sortByColumn(columnName) {
962
- if (!this.currentSorting()) {
963
- this.currentSorting.set(new ColumnSort({ column: columnName }));
964
- }
965
- else {
966
- this.currentSorting.set(new ColumnSort({
967
- column: columnName,
968
- direction: this.currentSorting().column === columnName
969
- ? (this.currentSorting().direction === SortDirectionEnum.Asc ? SortDirectionEnum.Desc : SortDirectionEnum.Asc)
970
- : SortDirectionEnum.Asc
971
- }));
972
- }
1248
+ const currentSort = this.currentSorting();
1249
+ const nextDirection = (currentSort?.column === columnName && currentSort.direction === SortDirectionEnum.Asc)
1250
+ ? SortDirectionEnum.Desc
1251
+ : SortDirectionEnum.Asc;
1252
+ this.currentSorting.set(new ColumnSort({
1253
+ column: columnName,
1254
+ direction: nextDirection
1255
+ }));
973
1256
  if (this.isRemote) {
974
- this.searchRequest.set({
975
- ...this.searchRequest(),
976
- sortings: [this.currentSorting()]
977
- });
978
- this.searchRequestSubject.next(this.searchRequest());
1257
+ this.currentSearchRequestService.setSorting(columnName, nextDirection);
1258
+ this.currentSearchRequestService.triggerSearch();
979
1259
  }
980
1260
  else {
981
1261
  const col = this.getColumnByName(columnName);
@@ -988,12 +1268,11 @@ class TableComponent extends BaseComponent {
988
1268
  : 'arrows-sort';
989
1269
  }
990
1270
  onPageSettingsChanged() {
991
- this.searchRequest.set({
992
- ...this.searchRequest(),
1271
+ this.currentSearchRequestService.patchSearchRequest({
993
1272
  pageSize: this.pageSize(),
994
1273
  pageIndex: this.currentPage()
995
1274
  });
996
- this.searchRequestSubject.next(this.searchRequest());
1275
+ this.currentSearchRequestService.searchRequestSubject.next(this.currentSearchRequestService.searchRequest());
997
1276
  }
998
1277
  getRecordId(record) {
999
1278
  return this.configModel().getIdFunction(record);
@@ -1036,9 +1315,11 @@ class TableComponent extends BaseComponent {
1036
1315
  });
1037
1316
  this.updateColumns(newColumns);
1038
1317
  const newVisibleColumnsOrder = newColumns.map(c => c.name);
1318
+ // Column visibility changes should enable "Save View" button since views include column config
1039
1319
  if (previousVisibleColumnsOrder.length !== newVisibleColumnsOrder.length
1040
1320
  || !previousVisibleColumnsOrder.every((v, i) => v === newVisibleColumnsOrder[i])) {
1041
- this.hasSearchChanged.set(true);
1321
+ // Manually trigger hasChanges since column visibility isn't part of search request
1322
+ this.currentSearchRequestService.setHasChanges(true);
1042
1323
  }
1043
1324
  }
1044
1325
  };
@@ -1046,7 +1327,7 @@ class TableComponent extends BaseComponent {
1046
1327
  openSaveSearchModal(data) {
1047
1328
  data = data || {
1048
1329
  tableName: this.configModel().name,
1049
- request: this.searchRequest(),
1330
+ request: this.currentSearchRequestService.searchRequest(),
1050
1331
  columns: this.configModel().columns
1051
1332
  };
1052
1333
  this.modalService.open(SaveSearchComponent, { showCloseButton: false, data });
@@ -1061,7 +1342,7 @@ class TableComponent extends BaseComponent {
1061
1342
  return { ...curr };
1062
1343
  });
1063
1344
  this.activeSavedView.set(savedView);
1064
- this.searchRequestSubject.next({ ...savedView.request });
1345
+ this.currentSearchRequestService.searchRequestSubject.next({ ...savedView.request });
1065
1346
  }
1066
1347
  }
1067
1348
  resetViewState() {
@@ -1071,10 +1352,59 @@ class TableComponent extends BaseComponent {
1071
1352
  curr.columns = this.columnsBackup;
1072
1353
  return { ...curr };
1073
1354
  });
1074
- this.searchRequestSubject.next({});
1355
+ this.currentSearchRequestService.searchRequestSubject.next({});
1356
+ }
1357
+ reload() {
1358
+ this.shouldForceSearch = true;
1359
+ this.currentSearchRequestService.searchRequestSubject.next({});
1360
+ }
1361
+ adaptCustomAction(btn, item) {
1362
+ const newBtn = new ButtonModel({
1363
+ id: btn.id,
1364
+ iconModel: btn.iconModel,
1365
+ title: btn.title,
1366
+ isIcon: signal(true),
1367
+ isLink: signal(true),
1368
+ size: signal('small'),
1369
+ text: undefined,
1370
+ colorStyle: btn.colorStyle,
1371
+ isOutline: btn.isOutline
1372
+ });
1373
+ const defaultFunction = btn.clickFunction;
1374
+ newBtn.clickFunction = (evt) => {
1375
+ evt.event?.preventDefault();
1376
+ evt.event?.stopPropagation();
1377
+ if (!!defaultFunction) {
1378
+ defaultFunction({ event: evt.event, data: item });
1379
+ }
1380
+ };
1381
+ return newBtn;
1075
1382
  }
1076
1383
  updateColumns(columns) {
1077
- this.columns.set(columns.filter(c => !c.isHidden).map(c => new BaseColumnModel(c.type, { ...c })));
1384
+ this.columns.set(columns.filter(c => !c.isHidden).map(c => this.createColumnModel(c)));
1385
+ }
1386
+ createColumnModel(data) {
1387
+ switch (data.type) {
1388
+ case ColumnTypeEnum.Text:
1389
+ return new TextColumnModel({ ...data });
1390
+ case ColumnTypeEnum.Number:
1391
+ return new NumberColumnModel({ ...data });
1392
+ case ColumnTypeEnum.Boolean:
1393
+ return new BooleanColumnModel({ ...data });
1394
+ case ColumnTypeEnum.DateTime:
1395
+ case ColumnTypeEnum.Date:
1396
+ case ColumnTypeEnum.Time:
1397
+ return new DateTimeColumnModel({ ...data });
1398
+ case ColumnTypeEnum.Image:
1399
+ return new ImageColumnModel({ ...data });
1400
+ case ColumnTypeEnum.Guid:
1401
+ return new GuidColumnModel({ ...data });
1402
+ case ColumnTypeEnum.Masked:
1403
+ case ColumnTypeEnum.Custom:
1404
+ case ColumnTypeEnum.Currency:
1405
+ default:
1406
+ return new BaseColumnModel(data.type, { ...data });
1407
+ }
1078
1408
  }
1079
1409
  getColumnByName(columnName) {
1080
1410
  const col = this.columns().find(c => c.name === columnName);
@@ -1092,7 +1422,8 @@ class TableComponent extends BaseComponent {
1092
1422
  });
1093
1423
  }
1094
1424
  setupSearchResults(resp) {
1095
- this.isSearching.set(false);
1425
+ this.currentSearchRequestService.setSearching(false);
1426
+ this.currentSearchRequestService.setHasChanges(false);
1096
1427
  this.currentData.set(resp.records);
1097
1428
  this.totalRecords.set(resp.totalRecords || 0);
1098
1429
  this.currentPage.set(resp.pageIndex || 0);
@@ -1171,19 +1502,19 @@ class TableComponent extends BaseComponent {
1171
1502
  return {
1172
1503
  id: savedView.id,
1173
1504
  type: 'with-toolbar',
1174
- text: { text: savedView.name },
1505
+ text: { text: savedView.name, isTranslated: true },
1175
1506
  toolbarType: 'spaced',
1176
1507
  isActive: this.activeSavedView()?.id === savedView.id,
1177
1508
  actionButtons
1178
1509
  };
1179
1510
  }
1180
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1181
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: TableComponent, selector: "upd-table", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, searchRequest: { classPropertyName: "searchRequest", publicName: "searchRequest", isSignal: true, isRequired: false, transformFunction: null }, activeFilters: { classPropertyName: "activeFilters", publicName: "activeFilters", isSignal: true, isRequired: false, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { config: "configChange", searchRequest: "searchRequestChange", activeFilters: "activeFiltersChange", currentPage: "currentPageChange", pageSize: "pageSizeChange" }, viewQueries: [{ propertyName: "savedViewsRef", first: true, predicate: ["savedViewsBtn"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table'\">\n <div class=\"card\">\n @if (!!configModel().title || !configModel().canSearch) {\n <div class=\"card-header\">\n @if (!!configModel().title) {\n <h3 class=\"card-title\">{{ textService.getText(configModel().title) }}</h3>\n }\n <ng-template [ngTemplateOutlet]=\"actionsTpl\"></ng-template>\n </div>\n }\n\n @if (configModel().canSearch) {\n <upd-search-section [actionsTpl]=\"!configModel().title ? actionsTpl : undefined\" [isSearching]=\"isSearching()\"\n [(searchRequest)]=\"searchRequest\" [searchRequestSubject]=\"searchRequestSubject\" [config]=\"configModel()\"\n [(hasChanges)]=\"hasSearchChanged\" [columns]=\"columns()\">\n </upd-search-section>\n }\n\n <div [class.table-responsive]=\"configModel().isResponsive\">\n <!-- TODO: implement pixel sized table - complex... -->\n <table class=\"table card-table table-vcenter table-nowrap\" [class.fixed]=\"hasWidth\"\n [class.pixel-sized]=\"isWidthInPixels\">\n <thead [class.sticky-top]=\"configModel().hasStickyHeader\">\n <tr>\n @if (configModel().hasCheckboxColumn) {\n <th class=\"checkbox-selector\">\n <upd-checkbox customClasses=\"m-0 ps-0\" (changed)=\"toggleAllSelection($event)\"\n [(isChecked)]=\"isMainCheckboxChecked\" [(isIndeterminate)]=\"isMainCheckboxIndeterminate\"></upd-checkbox>\n </th>\n }\n\n @for (col of columns(); track col) {\n <th [ngClass]=\"col.widthClass\" [style.width.px]=\"col.pixelsSize\">\n {{ textService.getText(col.title) }}\n @if (canSortColumn(col.name)) {\n <upd-icon [tablerIcon]=\"getSortingIcon(col.name)\" tablerIconWeight=\"bold\" colorClass=\"text-body-tertiary\"\n [tablerIconSize]=\"16\" (click)=\"sortByColumn(col.name)\">\n </upd-icon>\n }\n </th>\n }\n\n @if (!!pendingWidthColClass) {\n <th [ngClass]=\"pendingWidthColClass\"></th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (isSearching()) {\n <tr>\n <td [colSpan]=\"numberOfColumns\">\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ t('Loading') }}...</h1>\n <div class=\"progress progress-sm w-25\">\n <div class=\"progress-bar progress-bar-indeterminate bg-body-tertiary\"></div>\n </div>\n </div>\n </td>\n </tr>\n } @else {\n @for (record of data(); track record) {\n <tr>\n @if (configModel().hasCheckboxColumn) {\n <td>\n <upd-checkbox customClasses=\"m-0 ps-0\" (changed)=\"toggleItemSelection(record)\"\n [isChecked]=\"selectionModel().isSelected(record)\"></upd-checkbox>\n </td>\n }\n\n @for (col of columns(); track col) {\n <td>\n <ng-container updTableColumn [record]=\"record\" [config]=\"col\"></ng-container>\n </td>\n }\n\n @if (!!pendingWidthColClass) {\n <td></td>\n }\n </tr>\n } @empty {\n <tr>\n <td [colSpan]=\"numberOfColumns\">\n <div class=\"empty\">\n <p class=\"empty-title\">{{ t('NoRecordsFoundTitle') }}</p>\n <p class=\"empty-subtitle text-secondary\">{{ t('NoRecordsFoundSubtitle') }}</p>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n <upd-paginator wrapperClasses=\"card-footer\" [shouldDisplayPreviousText]=\"false\" [shouldDisplayNextText]=\"false\"\n [(pageSize)]=\"pageSize\" [shouldDisplayFirstText]=\"false\" [shouldDisplayLastText]=\"false\" [(currentPage)]=\"currentPage\"\n [totalRecords]=\"totalRecords()\" (changed)=\"onPageSettingsChanged()\">\n </upd-paginator>\n </div>\n\n <ng-template #actionsTpl>\n <div class=\"ms-auto d-flex gap-2\">\n @if (!!activeSavedView()) {\n @if (activeSavedView()!.isDefault) {\n <div class=\"ribbon ribbon-top ribbon-start\">\n <upd-icon tablerIcon=\"heart\" [tablerIconSize]=\"20\"></upd-icon>\n </div>\n }\n <div class=\"tag align-self-center py-3 text-primary bg-primary-lt border-primary\" updPopover=\"{{ t('CurrentSavedView') }}\"\n [updPopoverActAsTooltip]=\"true\">\n <upd-icon tablerIcon=\"list-details\" [tablerIconSize]=\"20\"></upd-icon>\n <span class=\"me-1\">{{ activeSavedView()!.name }}</span>\n </div>\n }\n @if (hiddenColumns() > 0) {\n <div class=\"tag align-self-center py-3 text-orange bg-orange-lt border-orange\" updPopover=\"{{ t('HiddenColumnsTooltip') }}\"\n [updPopoverActAsTooltip]=\"true\">\n <upd-icon tablerIcon=\"eye-off\" [tablerIconSize]=\"20\"></upd-icon>\n <span class=\"me-1\">{{ hiddenColumns() }}</span>\n </div>\n }\n @if (!!activeSavedView() || hiddenColumns() > 0) {\n <upd-button (clicked)=\"resetViewState()\" colorStyle=\"danger\" updPopover=\"{{ t('ResetView') }}\"\n [updPopoverActAsTooltip]=\"true\" [isIcon]=\"true\" [isOutline]=\"true\">\n <upd-icon tablerIcon=\"restore\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n }\n @if (configModel().canSaveViews) {\n <upd-button customClasses=\"gap-2\" [isDisabled]=\"!hasSearchChanged()\" (clicked)=\"openSaveSearchModal()\"\n updPopover=\"{{ t('SaveCurrentView') }}\" [updPopoverActAsTooltip]=\"true\" [isIcon]=\"true\">\n <upd-icon tablerIcon=\"device-floppy\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n }\n @if (configModel().canManageColumns) {\n <upd-button customClasses=\"gap-2\" (clicked)=\"openColumnsManagerModal()\">\n <upd-icon tablerIcon=\"columns\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('ColumnsManagerButton') }}\n </upd-button>\n }\n @if (configModel().canSaveViews || configModel().canLoadSavedViews) {\n <upd-button customClasses=\"gap-2\" (clicked)=\"isSavedViewsDropdownOpen = true\" #savedViewsBtn>\n <upd-icon tablerIcon=\"folders\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('SavedViews.ButtonTitle') }}\n </upd-button>\n <upd-dropdown wrapperClasses=\"overflow-x-hidden mt-1\" [isOpen]=\"isSavedViewsDropdownOpen\"\n [dropdownReference]=\"savedViewsRef()\" [items]=\"savedViewsOptions()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isSavedViewsDropdownOpen = $event\" [minWidth]=\"350\" (selectedItem)=\"selectSavedView($event)\">\n @if (savedViewsOptions().length < 1) {\n <span class=\"m-2\">{{ t('NoSavedViews') }}</span>\n }\n </upd-dropdown>\n }\n </div>\n </ng-template>\n</ng-container>\n", styles: [".fixed{table-layout:fixed!important}.fixed td,.fixed th{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.checkbox-selector{width:52px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i3.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i4.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i5$1.PaginatorComponent, selector: "upd-paginator", inputs: ["startPageIndex", "currentPage", "wrapperClasses", "availablePageSizes", "defaultInitPageSize", "pageSize", "shouldDisplayFirstIcon", "shouldDisplayFirstText", "shouldDisplayPreviousIcon", "shouldDisplayPreviousText", "shouldDisplayNextIcon", "shouldDisplayNextText", "shouldDisplayLastIcon", "shouldDisplayLastText", "previousDescription", "nextDescription", "totalRecords"], outputs: ["changed", "currentPageChange", "pageSizeChange"] }, { kind: "component", type: i6.CheckboxComponent, selector: "upd-checkbox", inputs: ["wrapperClasses", "value", "customClasses", "name", "isDisabled", "isChecked", "isInline", "isSwitch", "isIndeterminate"], outputs: ["changed", "isCheckedChange", "isIndeterminateChange"] }, { kind: "component", type: i7.DropdownComponent, selector: "upd-dropdown", inputs: ["items", "header", "isOpen", "shouldCloseOnOutsideClick", "arrowType", "wrapperClasses", "elementsExcludedFromOutsideClick", "minHeight", "maxHeight", "minWidth", "maxWidth", "dropdownReference", "dropdownReferencePosition", "textOverflowStrategy"], outputs: ["isOpenChange", "selectedItem", "checkboxChanged"] }, { kind: "directive", type: i8.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }, { kind: "component", type: SearchSectionComponent, selector: "upd-search-section", inputs: ["searchRequest", "hasChanges", "columns", "isSearching", "searchRequestSubject", "config", "actionsTpl"], outputs: ["searchRequestChange", "hasChangesChange"] }, { kind: "directive", type: TableColumnDirective, selector: "[updTableColumn]", inputs: ["record", "config"] }] }); }
1511
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1512
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: TableComponent, isStandalone: false, selector: "upd-table", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { config: "configChange", currentPage: "currentPageChange", pageSize: "pageSizeChange" }, providers: [CurrentSearchRequestService], viewQueries: [{ propertyName: "savedViewsRef", first: true, predicate: ["savedViewsBtn"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table'\">\n <div class=\"card\">\n @if (!!configModel().title || !configModel().canSearch) {\n <div class=\"card-header\">\n @if (!!configModel().title) {\n <h3 class=\"card-title\">{{ textService.getText(configModel().title) }}</h3>\n }\n <ng-template [ngTemplateOutlet]=\"actionsTpl\"></ng-template>\n </div>\n }\n\n @if (configModel().customHeaderActions.length > 0) {\n <div class=\"card-body py-3 d-flex flex-column gap-2\">\n <div class=\"ms-auto d-flex gap-2\">\n @for (btn of configModel().customHeaderActions; track btn) {\n <upd-button customClasses=\"gap-2\" [model]=\"btn\"></upd-button>\n }\n </div>\n </div>\n }\n\n @if (configModel().canSearch) {\n <upd-search-section [actionsTpl]=\"!configModel().title ? actionsTpl : undefined\" [config]=\"configModel()\"\n [columns]=\"columns()\">\n </upd-search-section>\n }\n\n <div [class.table-responsive]=\"configModel().isResponsive\">\n <!-- TODO: implement pixel sized table -->\n <table class=\"table card-table table-vcenter table-nowrap\" [class.fixed]=\"hasWidth\"\n [class.pixel-sized]=\"isWidthInPixels\">\n <thead [class.sticky-top]=\"configModel().hasStickyHeader\">\n <tr>\n @if (configModel().hasCheckboxColumn) {\n <th class=\"checkbox-selector\">\n <upd-checkbox customClasses=\"m-0 ps-0\" (changed)=\"toggleAllSelection($event)\"\n [(isChecked)]=\"isMainCheckboxChecked\"\n [(isIndeterminate)]=\"isMainCheckboxIndeterminate\"></upd-checkbox>\n </th>\n }\n\n @for (col of columns(); track col) {\n <th [ngClass]=\"col.widthClass\" [style.width.px]=\"col.pixelsSize\">\n {{ textService.getText(col.title) }}\n @if (canSortColumn(col.name)) {\n <upd-icon [tablerIcon]=\"getSortingIcon(col.name)\" tablerIconWeight=\"bold\"\n colorClass=\"text-body-tertiary\" [tablerIconSize]=\"16\"\n (click)=\"sortByColumn(col.name)\">\n </upd-icon>\n }\n </th>\n }\n\n @if (!!pendingWidthColClass) {\n <th [ngClass]=\"pendingWidthColClass\"></th>\n }\n\n @if (configModel().customActions.length > 0) {\n <th class=\"custom-actions\"></th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (currentSearchRequestService.isSearching()) {\n <tr>\n <td [colSpan]=\"numberOfColumns\">\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ t('Loading') }}...</h1>\n <div class=\"progress progress-sm w-25\">\n <div class=\"progress-bar progress-bar-indeterminate bg-body-tertiary\"></div>\n </div>\n </div>\n </td>\n </tr>\n } @else {\n @for (record of data(); track record) {\n <tr>\n @if (configModel().hasCheckboxColumn) {\n <td class=\"checkbox-selector\">\n <upd-checkbox customClasses=\"m-0 ps-0\" (changed)=\"toggleItemSelection(record)\"\n [isChecked]=\"selectionModel().isSelected(record)\"></upd-checkbox>\n </td>\n }\n\n @for (col of columns(); track col) {\n <td [style.width.px]=\"col.pixelsSize\">\n <ng-container updTableColumn [record]=\"record\" [config]=\"col\"></ng-container>\n </td>\n }\n\n @if (!!pendingWidthColClass) {\n <td></td>\n }\n\n @if (configModel().customActions.length > 0) {\n <td style=\"overflow: unset\">\n <div class=\"grow-left d-flex\">\n @if (configModel().customActions.length > 1) {\n <upd-button customClasses=\"ca-item\" [iconModel]=\"{tablerIcon:'dots'}\"\n [isIcon]=\"true\" [isLink]=\"true\" size=\"small\"></upd-button>\n\n <div class=\"ca-dropdown-content rounded shadow-sm\">\n @for (btn of configModel().customActions; track btn) {\n <upd-button\n [model]=\"adaptCustomAction(btn, record)\"></upd-button>\n }\n </div>\n } @else {\n <upd-button\n [model]=\"adaptCustomAction(configModel().customActions[0], record)\">\n </upd-button>\n }\n </div>\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td [colSpan]=\"numberOfColumns\">\n <div class=\"empty\">\n <p class=\"empty-title\">{{ t('NoRecordsFoundTitle') }}</p>\n <p class=\"empty-subtitle text-secondary\">{{ t('NoRecordsFoundSubtitle') }}</p>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n <upd-paginator wrapperClasses=\"card-footer\" [shouldDisplayPreviousText]=\"false\" [shouldDisplayNextText]=\"false\"\n [(pageSize)]=\"pageSize\" [shouldDisplayFirstText]=\"false\" [shouldDisplayLastText]=\"false\"\n [(currentPage)]=\"currentPage\" [totalRecords]=\"totalRecords()\" (changed)=\"onPageSettingsChanged()\">\n </upd-paginator>\n </div>\n\n <ng-template #actionsTpl>\n <div class=\"ms-auto d-flex gap-2\">\n @if (!!activeSavedView()) {\n @if (activeSavedView()!.isDefault) {\n <div class=\"ribbon ribbon-top ribbon-start\">\n <upd-icon tablerIcon=\"heart\" [tablerIconSize]=\"20\"></upd-icon>\n </div>\n }\n <div class=\"tag align-self-center py-3 text-primary bg-primary-lt border-primary\"\n updPopover=\"{{ t('CurrentSavedView') }}\" [updPopoverActAsTooltip]=\"true\">\n <upd-icon tablerIcon=\"list-details\" [tablerIconSize]=\"20\"></upd-icon>\n <span class=\"me-1\">{{ activeSavedView()!.name }}</span>\n </div>\n }\n @if (hiddenColumns() > 0) {\n <div class=\"tag align-self-center py-3 text-orange bg-orange-lt border-orange\"\n updPopover=\"{{ t('HiddenColumnsTooltip') }}\" [updPopoverActAsTooltip]=\"true\">\n <upd-icon tablerIcon=\"eye-off\" [tablerIconSize]=\"20\"></upd-icon>\n <span class=\"me-1\">{{ hiddenColumns() }}</span>\n </div>\n }\n @if (!!activeSavedView() || hiddenColumns() > 0) {\n <upd-button (clicked)=\"resetViewState()\" colorStyle=\"danger\" updPopover=\"{{ t('ResetView') }}\"\n [updPopoverActAsTooltip]=\"true\" [isIcon]=\"true\" [isOutline]=\"true\">\n <upd-icon tablerIcon=\"restore\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n }\n @if (configModel().canSaveViews) {\n <upd-button customClasses=\"gap-2\" [isDisabled]=\"!currentSearchRequestService.hasChanges()\"\n (clicked)=\"openSaveSearchModal()\" updPopover=\"{{ t('SaveCurrentView') }}\"\n [updPopoverActAsTooltip]=\"true\" [isIcon]=\"true\">\n <upd-icon tablerIcon=\"device-floppy\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n }\n @if (configModel().canManageColumns) {\n <upd-button customClasses=\"gap-2\" (clicked)=\"openColumnsManagerModal()\">\n <upd-icon tablerIcon=\"columns\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('ColumnsManagerButton') }}\n </upd-button>\n }\n @if (configModel().canSaveViews || configModel().canLoadSavedViews) {\n <upd-button customClasses=\"gap-2\" (clicked)=\"isSavedViewsDropdownOpen = true\" #savedViewsBtn>\n <upd-icon tablerIcon=\"folders\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('SavedViews.ButtonTitle') }}\n </upd-button>\n <upd-dropdown wrapperClasses=\"overflow-x-hidden mt-1\" [isOpen]=\"isSavedViewsDropdownOpen\"\n [dropdownReference]=\"savedViewsRef()\" [items]=\"savedViewsOptions()\"\n [shouldCloseOnOutsideClick]=\"true\" (isOpenChange)=\"isSavedViewsDropdownOpen = $event\"\n [minWidth]=\"350\" (selectedItem)=\"selectSavedView($event)\">\n @if (savedViewsOptions().length < 1) {\n <span class=\"m-2\">{{ t('NoSavedViews') }}</span>\n }\n </upd-dropdown>\n }\n </div>\n </ng-template>\n</ng-container>", styles: [".fixed{table-layout:fixed!important}.fixed td,.fixed th{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.checkbox-selector{width:52px!important}.custom-actions{width:56px!important}.ca-item{transition:all,.5s}.ca-item:hover{width:400px}.grow-left{direction:rtl}.ca-dropdown-content{display:none;background:var(--upd-secondary-lt)}.grow-left:hover .ca-dropdown-content{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i3.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i4.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title", "stopPropagation"], outputs: ["clicked"] }, { kind: "component", type: i5$1.PaginatorComponent, selector: "upd-paginator", inputs: ["startPageIndex", "currentPage", "wrapperClasses", "availablePageSizes", "defaultInitPageSize", "pageSize", "shouldDisplayFirstIcon", "shouldDisplayFirstText", "shouldDisplayPreviousIcon", "shouldDisplayPreviousText", "shouldDisplayNextIcon", "shouldDisplayNextText", "shouldDisplayLastIcon", "shouldDisplayLastText", "previousDescription", "nextDescription", "totalRecords"], outputs: ["changed", "currentPageChange", "pageSizeChange"] }, { kind: "component", type: i6.CheckboxComponent, selector: "upd-checkbox", inputs: ["wrapperClasses", "value", "customClasses", "isChecked", "isInline", "isSwitch", "isIndeterminate"], outputs: ["changed", "isCheckedChange", "isIndeterminateChange"] }, { kind: "component", type: i7.DropdownComponent, selector: "upd-dropdown", inputs: ["items", "header", "isOpen", "shouldCloseOnOutsideClick", "arrowType", "wrapperClasses", "elementsExcludedFromOutsideClick", "minHeight", "maxHeight", "minWidth", "maxWidth", "dropdownReference", "dropdownReferencePosition", "textOverflowStrategy"], outputs: ["isOpenChange", "selectedItem", "checkboxChanged"] }, { kind: "directive", type: i8.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }, { kind: "component", type: SearchSectionComponent, selector: "upd-search-section", inputs: ["columns", "config", "actionsTpl"] }, { kind: "directive", type: TableColumnDirective, selector: "[updTableColumn]", inputs: ["record", "config"] }] }); }
1182
1513
  }
1183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: TableComponent, decorators: [{
1514
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: TableComponent, decorators: [{
1184
1515
  type: Component,
1185
- args: [{ selector: 'upd-table', template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table'\">\n <div class=\"card\">\n @if (!!configModel().title || !configModel().canSearch) {\n <div class=\"card-header\">\n @if (!!configModel().title) {\n <h3 class=\"card-title\">{{ textService.getText(configModel().title) }}</h3>\n }\n <ng-template [ngTemplateOutlet]=\"actionsTpl\"></ng-template>\n </div>\n }\n\n @if (configModel().canSearch) {\n <upd-search-section [actionsTpl]=\"!configModel().title ? actionsTpl : undefined\" [isSearching]=\"isSearching()\"\n [(searchRequest)]=\"searchRequest\" [searchRequestSubject]=\"searchRequestSubject\" [config]=\"configModel()\"\n [(hasChanges)]=\"hasSearchChanged\" [columns]=\"columns()\">\n </upd-search-section>\n }\n\n <div [class.table-responsive]=\"configModel().isResponsive\">\n <!-- TODO: implement pixel sized table - complex... -->\n <table class=\"table card-table table-vcenter table-nowrap\" [class.fixed]=\"hasWidth\"\n [class.pixel-sized]=\"isWidthInPixels\">\n <thead [class.sticky-top]=\"configModel().hasStickyHeader\">\n <tr>\n @if (configModel().hasCheckboxColumn) {\n <th class=\"checkbox-selector\">\n <upd-checkbox customClasses=\"m-0 ps-0\" (changed)=\"toggleAllSelection($event)\"\n [(isChecked)]=\"isMainCheckboxChecked\" [(isIndeterminate)]=\"isMainCheckboxIndeterminate\"></upd-checkbox>\n </th>\n }\n\n @for (col of columns(); track col) {\n <th [ngClass]=\"col.widthClass\" [style.width.px]=\"col.pixelsSize\">\n {{ textService.getText(col.title) }}\n @if (canSortColumn(col.name)) {\n <upd-icon [tablerIcon]=\"getSortingIcon(col.name)\" tablerIconWeight=\"bold\" colorClass=\"text-body-tertiary\"\n [tablerIconSize]=\"16\" (click)=\"sortByColumn(col.name)\">\n </upd-icon>\n }\n </th>\n }\n\n @if (!!pendingWidthColClass) {\n <th [ngClass]=\"pendingWidthColClass\"></th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (isSearching()) {\n <tr>\n <td [colSpan]=\"numberOfColumns\">\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ t('Loading') }}...</h1>\n <div class=\"progress progress-sm w-25\">\n <div class=\"progress-bar progress-bar-indeterminate bg-body-tertiary\"></div>\n </div>\n </div>\n </td>\n </tr>\n } @else {\n @for (record of data(); track record) {\n <tr>\n @if (configModel().hasCheckboxColumn) {\n <td>\n <upd-checkbox customClasses=\"m-0 ps-0\" (changed)=\"toggleItemSelection(record)\"\n [isChecked]=\"selectionModel().isSelected(record)\"></upd-checkbox>\n </td>\n }\n\n @for (col of columns(); track col) {\n <td>\n <ng-container updTableColumn [record]=\"record\" [config]=\"col\"></ng-container>\n </td>\n }\n\n @if (!!pendingWidthColClass) {\n <td></td>\n }\n </tr>\n } @empty {\n <tr>\n <td [colSpan]=\"numberOfColumns\">\n <div class=\"empty\">\n <p class=\"empty-title\">{{ t('NoRecordsFoundTitle') }}</p>\n <p class=\"empty-subtitle text-secondary\">{{ t('NoRecordsFoundSubtitle') }}</p>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n <upd-paginator wrapperClasses=\"card-footer\" [shouldDisplayPreviousText]=\"false\" [shouldDisplayNextText]=\"false\"\n [(pageSize)]=\"pageSize\" [shouldDisplayFirstText]=\"false\" [shouldDisplayLastText]=\"false\" [(currentPage)]=\"currentPage\"\n [totalRecords]=\"totalRecords()\" (changed)=\"onPageSettingsChanged()\">\n </upd-paginator>\n </div>\n\n <ng-template #actionsTpl>\n <div class=\"ms-auto d-flex gap-2\">\n @if (!!activeSavedView()) {\n @if (activeSavedView()!.isDefault) {\n <div class=\"ribbon ribbon-top ribbon-start\">\n <upd-icon tablerIcon=\"heart\" [tablerIconSize]=\"20\"></upd-icon>\n </div>\n }\n <div class=\"tag align-self-center py-3 text-primary bg-primary-lt border-primary\" updPopover=\"{{ t('CurrentSavedView') }}\"\n [updPopoverActAsTooltip]=\"true\">\n <upd-icon tablerIcon=\"list-details\" [tablerIconSize]=\"20\"></upd-icon>\n <span class=\"me-1\">{{ activeSavedView()!.name }}</span>\n </div>\n }\n @if (hiddenColumns() > 0) {\n <div class=\"tag align-self-center py-3 text-orange bg-orange-lt border-orange\" updPopover=\"{{ t('HiddenColumnsTooltip') }}\"\n [updPopoverActAsTooltip]=\"true\">\n <upd-icon tablerIcon=\"eye-off\" [tablerIconSize]=\"20\"></upd-icon>\n <span class=\"me-1\">{{ hiddenColumns() }}</span>\n </div>\n }\n @if (!!activeSavedView() || hiddenColumns() > 0) {\n <upd-button (clicked)=\"resetViewState()\" colorStyle=\"danger\" updPopover=\"{{ t('ResetView') }}\"\n [updPopoverActAsTooltip]=\"true\" [isIcon]=\"true\" [isOutline]=\"true\">\n <upd-icon tablerIcon=\"restore\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n }\n @if (configModel().canSaveViews) {\n <upd-button customClasses=\"gap-2\" [isDisabled]=\"!hasSearchChanged()\" (clicked)=\"openSaveSearchModal()\"\n updPopover=\"{{ t('SaveCurrentView') }}\" [updPopoverActAsTooltip]=\"true\" [isIcon]=\"true\">\n <upd-icon tablerIcon=\"device-floppy\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n }\n @if (configModel().canManageColumns) {\n <upd-button customClasses=\"gap-2\" (clicked)=\"openColumnsManagerModal()\">\n <upd-icon tablerIcon=\"columns\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('ColumnsManagerButton') }}\n </upd-button>\n }\n @if (configModel().canSaveViews || configModel().canLoadSavedViews) {\n <upd-button customClasses=\"gap-2\" (clicked)=\"isSavedViewsDropdownOpen = true\" #savedViewsBtn>\n <upd-icon tablerIcon=\"folders\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('SavedViews.ButtonTitle') }}\n </upd-button>\n <upd-dropdown wrapperClasses=\"overflow-x-hidden mt-1\" [isOpen]=\"isSavedViewsDropdownOpen\"\n [dropdownReference]=\"savedViewsRef()\" [items]=\"savedViewsOptions()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isSavedViewsDropdownOpen = $event\" [minWidth]=\"350\" (selectedItem)=\"selectSavedView($event)\">\n @if (savedViewsOptions().length < 1) {\n <span class=\"m-2\">{{ t('NoSavedViews') }}</span>\n }\n </upd-dropdown>\n }\n </div>\n </ng-template>\n</ng-container>\n", styles: [".fixed{table-layout:fixed!important}.fixed td,.fixed th{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.checkbox-selector{width:52px!important}\n"] }]
1186
- }], ctorParameters: () => [] });
1516
+ args: [{ standalone: false, selector: 'upd-table', providers: [CurrentSearchRequestService], template: "<ng-container *transloco=\"let t; prefix: 'UpDevs.Table'\">\n <div class=\"card\">\n @if (!!configModel().title || !configModel().canSearch) {\n <div class=\"card-header\">\n @if (!!configModel().title) {\n <h3 class=\"card-title\">{{ textService.getText(configModel().title) }}</h3>\n }\n <ng-template [ngTemplateOutlet]=\"actionsTpl\"></ng-template>\n </div>\n }\n\n @if (configModel().customHeaderActions.length > 0) {\n <div class=\"card-body py-3 d-flex flex-column gap-2\">\n <div class=\"ms-auto d-flex gap-2\">\n @for (btn of configModel().customHeaderActions; track btn) {\n <upd-button customClasses=\"gap-2\" [model]=\"btn\"></upd-button>\n }\n </div>\n </div>\n }\n\n @if (configModel().canSearch) {\n <upd-search-section [actionsTpl]=\"!configModel().title ? actionsTpl : undefined\" [config]=\"configModel()\"\n [columns]=\"columns()\">\n </upd-search-section>\n }\n\n <div [class.table-responsive]=\"configModel().isResponsive\">\n <!-- TODO: implement pixel sized table -->\n <table class=\"table card-table table-vcenter table-nowrap\" [class.fixed]=\"hasWidth\"\n [class.pixel-sized]=\"isWidthInPixels\">\n <thead [class.sticky-top]=\"configModel().hasStickyHeader\">\n <tr>\n @if (configModel().hasCheckboxColumn) {\n <th class=\"checkbox-selector\">\n <upd-checkbox customClasses=\"m-0 ps-0\" (changed)=\"toggleAllSelection($event)\"\n [(isChecked)]=\"isMainCheckboxChecked\"\n [(isIndeterminate)]=\"isMainCheckboxIndeterminate\"></upd-checkbox>\n </th>\n }\n\n @for (col of columns(); track col) {\n <th [ngClass]=\"col.widthClass\" [style.width.px]=\"col.pixelsSize\">\n {{ textService.getText(col.title) }}\n @if (canSortColumn(col.name)) {\n <upd-icon [tablerIcon]=\"getSortingIcon(col.name)\" tablerIconWeight=\"bold\"\n colorClass=\"text-body-tertiary\" [tablerIconSize]=\"16\"\n (click)=\"sortByColumn(col.name)\">\n </upd-icon>\n }\n </th>\n }\n\n @if (!!pendingWidthColClass) {\n <th [ngClass]=\"pendingWidthColClass\"></th>\n }\n\n @if (configModel().customActions.length > 0) {\n <th class=\"custom-actions\"></th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (currentSearchRequestService.isSearching()) {\n <tr>\n <td [colSpan]=\"numberOfColumns\">\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ t('Loading') }}...</h1>\n <div class=\"progress progress-sm w-25\">\n <div class=\"progress-bar progress-bar-indeterminate bg-body-tertiary\"></div>\n </div>\n </div>\n </td>\n </tr>\n } @else {\n @for (record of data(); track record) {\n <tr>\n @if (configModel().hasCheckboxColumn) {\n <td class=\"checkbox-selector\">\n <upd-checkbox customClasses=\"m-0 ps-0\" (changed)=\"toggleItemSelection(record)\"\n [isChecked]=\"selectionModel().isSelected(record)\"></upd-checkbox>\n </td>\n }\n\n @for (col of columns(); track col) {\n <td [style.width.px]=\"col.pixelsSize\">\n <ng-container updTableColumn [record]=\"record\" [config]=\"col\"></ng-container>\n </td>\n }\n\n @if (!!pendingWidthColClass) {\n <td></td>\n }\n\n @if (configModel().customActions.length > 0) {\n <td style=\"overflow: unset\">\n <div class=\"grow-left d-flex\">\n @if (configModel().customActions.length > 1) {\n <upd-button customClasses=\"ca-item\" [iconModel]=\"{tablerIcon:'dots'}\"\n [isIcon]=\"true\" [isLink]=\"true\" size=\"small\"></upd-button>\n\n <div class=\"ca-dropdown-content rounded shadow-sm\">\n @for (btn of configModel().customActions; track btn) {\n <upd-button\n [model]=\"adaptCustomAction(btn, record)\"></upd-button>\n }\n </div>\n } @else {\n <upd-button\n [model]=\"adaptCustomAction(configModel().customActions[0], record)\">\n </upd-button>\n }\n </div>\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td [colSpan]=\"numberOfColumns\">\n <div class=\"empty\">\n <p class=\"empty-title\">{{ t('NoRecordsFoundTitle') }}</p>\n <p class=\"empty-subtitle text-secondary\">{{ t('NoRecordsFoundSubtitle') }}</p>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n <upd-paginator wrapperClasses=\"card-footer\" [shouldDisplayPreviousText]=\"false\" [shouldDisplayNextText]=\"false\"\n [(pageSize)]=\"pageSize\" [shouldDisplayFirstText]=\"false\" [shouldDisplayLastText]=\"false\"\n [(currentPage)]=\"currentPage\" [totalRecords]=\"totalRecords()\" (changed)=\"onPageSettingsChanged()\">\n </upd-paginator>\n </div>\n\n <ng-template #actionsTpl>\n <div class=\"ms-auto d-flex gap-2\">\n @if (!!activeSavedView()) {\n @if (activeSavedView()!.isDefault) {\n <div class=\"ribbon ribbon-top ribbon-start\">\n <upd-icon tablerIcon=\"heart\" [tablerIconSize]=\"20\"></upd-icon>\n </div>\n }\n <div class=\"tag align-self-center py-3 text-primary bg-primary-lt border-primary\"\n updPopover=\"{{ t('CurrentSavedView') }}\" [updPopoverActAsTooltip]=\"true\">\n <upd-icon tablerIcon=\"list-details\" [tablerIconSize]=\"20\"></upd-icon>\n <span class=\"me-1\">{{ activeSavedView()!.name }}</span>\n </div>\n }\n @if (hiddenColumns() > 0) {\n <div class=\"tag align-self-center py-3 text-orange bg-orange-lt border-orange\"\n updPopover=\"{{ t('HiddenColumnsTooltip') }}\" [updPopoverActAsTooltip]=\"true\">\n <upd-icon tablerIcon=\"eye-off\" [tablerIconSize]=\"20\"></upd-icon>\n <span class=\"me-1\">{{ hiddenColumns() }}</span>\n </div>\n }\n @if (!!activeSavedView() || hiddenColumns() > 0) {\n <upd-button (clicked)=\"resetViewState()\" colorStyle=\"danger\" updPopover=\"{{ t('ResetView') }}\"\n [updPopoverActAsTooltip]=\"true\" [isIcon]=\"true\" [isOutline]=\"true\">\n <upd-icon tablerIcon=\"restore\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n }\n @if (configModel().canSaveViews) {\n <upd-button customClasses=\"gap-2\" [isDisabled]=\"!currentSearchRequestService.hasChanges()\"\n (clicked)=\"openSaveSearchModal()\" updPopover=\"{{ t('SaveCurrentView') }}\"\n [updPopoverActAsTooltip]=\"true\" [isIcon]=\"true\">\n <upd-icon tablerIcon=\"device-floppy\" [tablerIconSize]=\"20\"></upd-icon>\n </upd-button>\n }\n @if (configModel().canManageColumns) {\n <upd-button customClasses=\"gap-2\" (clicked)=\"openColumnsManagerModal()\">\n <upd-icon tablerIcon=\"columns\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('ColumnsManagerButton') }}\n </upd-button>\n }\n @if (configModel().canSaveViews || configModel().canLoadSavedViews) {\n <upd-button customClasses=\"gap-2\" (clicked)=\"isSavedViewsDropdownOpen = true\" #savedViewsBtn>\n <upd-icon tablerIcon=\"folders\" [tablerIconSize]=\"20\"></upd-icon>\n {{ t('SavedViews.ButtonTitle') }}\n </upd-button>\n <upd-dropdown wrapperClasses=\"overflow-x-hidden mt-1\" [isOpen]=\"isSavedViewsDropdownOpen\"\n [dropdownReference]=\"savedViewsRef()\" [items]=\"savedViewsOptions()\"\n [shouldCloseOnOutsideClick]=\"true\" (isOpenChange)=\"isSavedViewsDropdownOpen = $event\"\n [minWidth]=\"350\" (selectedItem)=\"selectSavedView($event)\">\n @if (savedViewsOptions().length < 1) {\n <span class=\"m-2\">{{ t('NoSavedViews') }}</span>\n }\n </upd-dropdown>\n }\n </div>\n </ng-template>\n</ng-container>", styles: [".fixed{table-layout:fixed!important}.fixed td,.fixed th{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.checkbox-selector{width:52px!important}.custom-actions{width:56px!important}.ca-item{transition:all,.5s}.ca-item:hover{width:400px}.grow-left{direction:rtl}.ca-dropdown-content{display:none;background:var(--upd-secondary-lt)}.grow-left:hover .ca-dropdown-content{display:block}\n"] }]
1517
+ }], ctorParameters: () => [], propDecorators: { savedViewsRef: [{ type: i0.ViewChild, args: ['savedViewsBtn', { ...{ read: ElementRef }, isSignal: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }, { type: i0.Output, args: ["configChange"] }], currentPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPage", required: false }] }, { type: i0.Output, args: ["currentPageChange"] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }, { type: i0.Output, args: ["pageSizeChange"] }] } });
1187
1518
 
1188
1519
  var UpDevs$1 = {
1189
1520
  Table: {
@@ -1356,10 +1687,10 @@ class FiltersOperandsStore extends BaseStore {
1356
1687
  load(fieldType) {
1357
1688
  return this._requestService.makeGet(this.getRequestModel(fieldType.toString()));
1358
1689
  }
1359
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FiltersOperandsStore, deps: [{ token: UpdTableConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1360
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FiltersOperandsStore }); }
1690
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: FiltersOperandsStore, deps: [{ token: UpdTableConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1691
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: FiltersOperandsStore }); }
1361
1692
  }
1362
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FiltersOperandsStore, decorators: [{
1693
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: FiltersOperandsStore, decorators: [{
1363
1694
  type: Injectable
1364
1695
  }], ctorParameters: () => [{ type: UpdTableConfigService }] });
1365
1696
 
@@ -1546,6 +1877,16 @@ class GuidFilterOperandsListModel {
1546
1877
  }
1547
1878
  }
1548
1879
 
1880
+ class SelectFilterOperandsListModel {
1881
+ static { this.options = {
1882
+ [FilterOperandEnum.Equals]: FilterOperandsListConfig.options[FilterOperandEnum.Equals],
1883
+ [FilterOperandEnum.NotEquals]: FilterOperandsListConfig.options[FilterOperandEnum.NotEquals]
1884
+ }; }
1885
+ static get optionsAsList() {
1886
+ return (Object.values(this.options) || []);
1887
+ }
1888
+ }
1889
+
1549
1890
  class DefaultFiltersOperandsService extends FiltersOperandsService {
1550
1891
  get isLoaded() {
1551
1892
  return this._isLoaded;
@@ -1558,26 +1899,29 @@ class DefaultFiltersOperandsService extends FiltersOperandsService {
1558
1899
  this.cachedData = {};
1559
1900
  if (!!this.configService.config.urlToLoadOperandsFromServer) {
1560
1901
  forkJoin({
1561
- guidOps: this.filterOperandsStore.load(DataTypeEnum.Guid),
1562
- stringOps: this.filterOperandsStore.load(DataTypeEnum.String),
1563
- numberOps: this.filterOperandsStore.load(DataTypeEnum.Number),
1564
- dateOps: this.filterOperandsStore.load(DataTypeEnum.Date),
1565
- booleanOps: this.filterOperandsStore.load(DataTypeEnum.Boolean)
1902
+ guidOps: this.filterOperandsStore.load(FilterTypeEnum.Guid),
1903
+ stringOps: this.filterOperandsStore.load(FilterTypeEnum.Text),
1904
+ numberOps: this.filterOperandsStore.load(FilterTypeEnum.Number),
1905
+ dateOps: this.filterOperandsStore.load(FilterTypeEnum.Date),
1906
+ booleanOps: this.filterOperandsStore.load(FilterTypeEnum.Boolean),
1907
+ selectOps: this.filterOperandsStore.load(FilterTypeEnum.Select)
1566
1908
  }).subscribe(resp => {
1567
- this.cachedData[DataTypeEnum.Guid] = resp.guidOps;
1568
- this.cachedData[DataTypeEnum.String] = resp.stringOps;
1569
- this.cachedData[DataTypeEnum.Number] = resp.numberOps;
1570
- this.cachedData[DataTypeEnum.Date] = resp.dateOps;
1571
- this.cachedData[DataTypeEnum.Boolean] = resp.booleanOps;
1909
+ this.cachedData[FilterTypeEnum.Guid] = resp.guidOps;
1910
+ this.cachedData[FilterTypeEnum.Text] = resp.stringOps;
1911
+ this.cachedData[FilterTypeEnum.Number] = resp.numberOps;
1912
+ this.cachedData[FilterTypeEnum.Date] = resp.dateOps;
1913
+ this.cachedData[FilterTypeEnum.Boolean] = resp.booleanOps;
1914
+ this.cachedData[FilterTypeEnum.Select] = resp.selectOps;
1572
1915
  this._isLoaded = true;
1573
1916
  });
1574
1917
  }
1575
1918
  else {
1576
- this.cachedData[DataTypeEnum.Guid] = GuidFilterOperandsListModel.optionsAsList;
1577
- this.cachedData[DataTypeEnum.String] = StringFilterOperandsListModel.optionsAsList;
1578
- this.cachedData[DataTypeEnum.Number] = NumberFilterOperandsListModel.optionsAsList;
1579
- this.cachedData[DataTypeEnum.Date] = DateFilterOperandsListModel.optionsAsList;
1580
- this.cachedData[DataTypeEnum.Boolean] = BooleanFilterOperandsListModel.optionsAsList;
1919
+ this.cachedData[FilterTypeEnum.Guid] = GuidFilterOperandsListModel.optionsAsList;
1920
+ this.cachedData[FilterTypeEnum.Text] = StringFilterOperandsListModel.optionsAsList;
1921
+ this.cachedData[FilterTypeEnum.Number] = NumberFilterOperandsListModel.optionsAsList;
1922
+ this.cachedData[FilterTypeEnum.Date] = DateFilterOperandsListModel.optionsAsList;
1923
+ this.cachedData[FilterTypeEnum.Boolean] = BooleanFilterOperandsListModel.optionsAsList;
1924
+ this.cachedData[FilterTypeEnum.Select] = SelectFilterOperandsListModel.optionsAsList;
1581
1925
  this._isLoaded = true;
1582
1926
  }
1583
1927
  }
@@ -1587,15 +1931,16 @@ class DefaultFiltersOperandsService extends FiltersOperandsService {
1587
1931
  getAllOperands() {
1588
1932
  return this.cachedData;
1589
1933
  }
1590
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DefaultFiltersOperandsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1591
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DefaultFiltersOperandsService }); }
1934
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DefaultFiltersOperandsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1935
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DefaultFiltersOperandsService }); }
1592
1936
  }
1593
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DefaultFiltersOperandsService, decorators: [{
1937
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DefaultFiltersOperandsService, decorators: [{
1594
1938
  type: Injectable
1595
1939
  }], ctorParameters: () => [] });
1596
1940
 
1597
1941
  class UpdTableModule {
1598
1942
  constructor(translocoService) {
1943
+ translocoService.setFallbackLangForMissingTranslation({ fallbackLang: 'en' });
1599
1944
  translocoService.setTranslation(en$1, 'en');
1600
1945
  translocoService.setTranslation(pt$1, 'pt');
1601
1946
  }
@@ -1618,8 +1963,8 @@ class UpdTableModule {
1618
1963
  ]
1619
1964
  };
1620
1965
  }
1621
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdTableModule, deps: [{ token: i1$1.TranslocoService }], target: i0.ɵɵFactoryTarget.NgModule }); }
1622
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: UpdTableModule, declarations: [TableComponent,
1966
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: UpdTableModule, deps: [{ token: i1$1.TranslocoService }], target: i0.ɵɵFactoryTarget.NgModule }); }
1967
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.4", ngImport: i0, type: UpdTableModule, declarations: [TableComponent,
1623
1968
  SearchSectionComponent,
1624
1969
  FilterRowComponent,
1625
1970
  TableColumnDirective,
@@ -1644,7 +1989,7 @@ class UpdTableModule {
1644
1989
  UpdBadgeModule,
1645
1990
  UpdPopoverModule], exports: [TableComponent,
1646
1991
  TableColumnDirective] }); }
1647
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdTableModule, providers: [
1992
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: UpdTableModule, providers: [
1648
1993
  UpdTableConfigService,
1649
1994
  FiltersOperandsStore,
1650
1995
  SavedViewsStorage
@@ -1663,7 +2008,7 @@ class UpdTableModule {
1663
2008
  UpdBadgeModule,
1664
2009
  UpdPopoverModule] }); }
1665
2010
  }
1666
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdTableModule, decorators: [{
2011
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: UpdTableModule, decorators: [{
1667
2012
  type: NgModule,
1668
2013
  args: [{
1669
2014
  imports: [
@@ -1711,5 +2056,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
1711
2056
  * Generated bundle index. Do not edit.
1712
2057
  */
1713
2058
 
1714
- export { BaseColumnModel, BooleanColumnModel, ColumnTypeEnum, DateTimeColumnModel, FiltersOperandsService, GuidColumnModel, ImageColumnModel, NumberColumnModel, TableColumnDirective, TableComponent, TextColumnModel, UpdTableModule };
2059
+ export { BaseColumn, BaseColumnModel, BooleanColumnModel, ColumnTypeEnum, CustomColumnModel, DateTimeColumnModel, FiltersOperandsService, GuidColumnModel, ImageColumnModel, NumberColumnModel, TableColumnDirective, TableComponent, TextColumnModel, UpdTableModule };
1715
2060
  //# sourceMappingURL=updevs-components-table.mjs.map