aril 1.1.71 → 1.1.73

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 (1372) hide show
  1. package/.eslintrc.json +41 -0
  2. package/README.md +62 -62
  3. package/boot/config/api/ng-package.json +6 -0
  4. package/boot/config/api/src/api.sample.json +8 -0
  5. package/boot/config/api/src/api.service.ts +91 -0
  6. package/boot/config/api/src/interfaces.ts +65 -0
  7. package/boot/config/apps/ng-package.json +6 -0
  8. package/boot/config/apps/src/apps.service.ts +62 -0
  9. package/boot/config/apps/src/auth.guard.ts +22 -0
  10. package/boot/config/apps/src/interfaces.ts +58 -0
  11. package/boot/config/apps/src/reuse-strategy.ts +10 -0
  12. package/boot/config/apps/src/showdowDOMWrapper.ts +28 -0
  13. package/boot/config/plugins/ng-package.json +6 -0
  14. package/boot/config/plugins/src/getNgZone.ts +7 -0
  15. package/boot/config/plugins/src/interfaces.ts +75 -0
  16. package/boot/config/plugins/src/plugins.service.ts +110 -0
  17. package/boot/config/translate/constants.ts +4 -0
  18. package/boot/config/translate/ng-package.json +6 -0
  19. package/boot/config/translate/primeng/i18n/tr.ts +59 -0
  20. package/boot/host/ng-package.json +6 -0
  21. package/boot/host/src/app.component.ts +51 -0
  22. package/boot/host/src/bootstrap.ts +87 -0
  23. package/boot/index.ts +1 -0
  24. package/boot/mfe/ng-package.json +6 -0
  25. package/boot/mfe/src/app.component.ts +63 -0
  26. package/boot/mfe/src/appComponentLoader.ts +4 -0
  27. package/boot/mfe/src/bootstrap.ts +97 -0
  28. package/boot/mfe/src/loadStyles.ts +42 -0
  29. package/boot/mfe/src/monaco.config.ts +266 -0
  30. package/boot/ng-package.json +6 -0
  31. package/http/index.ts +13 -0
  32. package/http/lib/enums.ts +31 -0
  33. package/http/lib/interfaces.ts +46 -0
  34. package/http/ng-package.json +6 -0
  35. package/http/src/httpBackend.ts +12 -0
  36. package/http/src/httpClient.ts +20 -0
  37. package/http/src/interceptor/accept-language.interceptor.ts +32 -0
  38. package/http/src/serviceBase.ts +175 -0
  39. package/http/src/serviceMockBase.ts +12 -0
  40. package/http/src/serviceRequest.ts +28 -0
  41. package/http/src/serviceStateMethods.ts +211 -0
  42. package/i18n/ng-package.json +6 -0
  43. package/i18n/src/folder-name-token.ts +3 -0
  44. package/i18n/src/i18n.module.ts +11 -0
  45. package/i18n/src/loader.ts +13 -0
  46. package/i18n/src/provideI18n.ts +18 -0
  47. package/i18n/src/provideScope.ts +20 -0
  48. package/keycloak/index.ts +1 -0
  49. package/keycloak/ng-package.json +6 -0
  50. package/keycloak/src/auth.interceptor.ts +103 -0
  51. package/ng-package.json +16 -0
  52. package/package.json +43 -534
  53. package/project.json +39 -0
  54. package/provider/ng-package.json +6 -0
  55. package/provider/src/index.ts +5 -0
  56. package/provider/src/prodiveHost.ts +15 -0
  57. package/provider/src/prodiveHostRouter.ts +21 -0
  58. package/provider/src/provideHostKeycloak.ts +34 -0
  59. package/provider/src/provideLocaleId.ts +22 -0
  60. package/theme/index.ts +1 -1
  61. package/theme/layout/app/breadcrumb/app.breadcrumb.component.html +8 -8
  62. package/theme/layout/app/breadcrumb/app.breadcrumb.component.ts +126 -126
  63. package/theme/layout/app/chatbot/app.chatbot.component.html +108 -108
  64. package/theme/layout/app/chatbot/app.chatbot.component.scss +34 -34
  65. package/theme/layout/app/chatbot/app.chatbot.component.ts +151 -151
  66. package/theme/layout/app/config/app.config.component.html +146 -146
  67. package/theme/layout/app/config/app.config.component.ts +143 -143
  68. package/theme/layout/app/expandableMenu/expandable-menu.component.html +89 -89
  69. package/theme/layout/app/expandableMenu/expandable-menu.component.ts +295 -295
  70. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.html +110 -110
  71. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.scss +181 -181
  72. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.ts +260 -260
  73. package/theme/layout/app/favorite-pages/favorite-pages.service.ts +95 -95
  74. package/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.html +27 -27
  75. package/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.ts +165 -165
  76. package/theme/layout/app/general-search/general-search.component.html +57 -57
  77. package/theme/layout/app/general-search/general-search.component.scss +27 -27
  78. package/theme/layout/app/general-search/general-search.component.ts +93 -93
  79. package/theme/layout/app/general-search/helpers.spec.ts +527 -527
  80. package/theme/layout/app/general-search/helpers.ts +106 -106
  81. package/theme/layout/app/general-search/models.ts +142 -142
  82. package/theme/layout/app/history/history-sidebar.component.html +87 -87
  83. package/theme/layout/app/history/history-sidebar.component.scss +182 -182
  84. package/theme/layout/app/history/history-sidebar.component.ts +143 -143
  85. package/theme/layout/app/history/history.service.ts +154 -154
  86. package/theme/layout/app/layout/app.layout.component.html +27 -27
  87. package/theme/layout/app/layout/app.layout.component.ts +171 -171
  88. package/theme/layout/app/layout/mfe.layout.component.ts +59 -59
  89. package/theme/layout/app/notifications/notifications-sidebar.component.html +104 -104
  90. package/theme/layout/app/notifications/notifications-sidebar.component.scss +237 -237
  91. package/theme/layout/app/notifications/notifications-sidebar.component.ts +221 -221
  92. package/theme/layout/app/profileSidebar/app.profilesidebar.component.html +122 -122
  93. package/theme/layout/app/profileSidebar/app.profilesidebar.component.scss +151 -151
  94. package/theme/layout/app/profileSidebar/app.profilesidebar.component.ts +141 -141
  95. package/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.html +48 -48
  96. package/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.scss +27 -27
  97. package/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.ts +178 -178
  98. package/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.html +71 -71
  99. package/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.ts +251 -251
  100. package/theme/layout/app/profileSidebar/profile.service.ts +116 -116
  101. package/theme/layout/app/site-map/site-map-sidebar.component.html +121 -121
  102. package/theme/layout/app/site-map/site-map-sidebar.component.scss +178 -178
  103. package/theme/layout/app/site-map/site-map-sidebar.component.ts +193 -193
  104. package/theme/layout/app/static-sidebar/static-sidebar.component.html +123 -123
  105. package/theme/layout/app/static-sidebar/static-sidebar.component.scss +411 -408
  106. package/theme/layout/app/static-sidebar/static-sidebar.component.ts +276 -276
  107. package/theme/layout/app/topbar/app.topbar.component.html +85 -85
  108. package/theme/layout/app/topbar/app.topbar.component.scss +193 -193
  109. package/theme/layout/app/topbar/app.topbar.component.ts +172 -172
  110. package/theme/layout/index.ts +7 -7
  111. package/theme/layout/ng-package.json +6 -6
  112. package/theme/layout/service/app.layout.service.ts +307 -307
  113. package/theme/layout/service/app.menu.service.ts +53 -53
  114. package/theme/layout/service/breadcrumb.service.ts +14 -14
  115. package/theme/layout/service/interfaces/enum.ts +13 -13
  116. package/theme/layout/service/interfaces/interfaces.ts +150 -150
  117. package/theme/layout/service/menuchangeevent.ts +4 -4
  118. package/theme/layout/service/notifications.service.ts +26 -26
  119. package/theme/layout/service/search.service.ts +22 -22
  120. package/theme/layout/service/selection-group.service.ts +73 -73
  121. package/theme/ng-package.json +6 -6
  122. package/theme/styles/layout/_animation.scss +53 -53
  123. package/theme/styles/layout/_breadcrumb.scss +31 -31
  124. package/theme/styles/layout/_config.scss +42 -42
  125. package/theme/styles/layout/_content.scss +61 -61
  126. package/theme/styles/layout/_expanded_sidebar.scss +486 -486
  127. package/theme/styles/layout/_fonts.scss +93 -93
  128. package/theme/styles/layout/_layout_dark.scss +5 -5
  129. package/theme/styles/layout/_layout_dim.scss +5 -5
  130. package/theme/styles/layout/_layout_light.scss +5 -5
  131. package/theme/styles/layout/_main.scss +28 -28
  132. package/theme/styles/layout/_profile.scss +10 -10
  133. package/theme/styles/layout/_responsive.scss +153 -153
  134. package/theme/styles/layout/_sidebar_drawer.scss +234 -234
  135. package/theme/styles/layout/_sidebar_horizontal.scss +163 -163
  136. package/theme/styles/layout/_sidebar_reveal.scss +201 -201
  137. package/theme/styles/layout/_sidebar_slim.scss +144 -144
  138. package/theme/styles/layout/_sidebar_slim_plus.scss +168 -168
  139. package/theme/styles/layout/_sidebar_vertical.scss +156 -156
  140. package/theme/styles/layout/_topbar.scss +140 -140
  141. package/theme/styles/layout/_typography.scss +68 -68
  142. package/theme/styles/layout/_utils.scss +24 -24
  143. package/theme/styles/layout/layout.scss +25 -25
  144. package/theme/styles/layout/menutheme/_colorscheme.scss +11 -11
  145. package/theme/styles/layout/menutheme/_menutheme.scss +3 -3
  146. package/theme/styles/layout/menutheme/_primarycolor.scss +16 -16
  147. package/theme/styles/layout/menutheme/_transparent.scss +26 -26
  148. package/theme/styles/layout/preloading.scss +84 -84
  149. package/theme/styles/theme/base/_colors.scss +17 -17
  150. package/theme/styles/theme/base/_common.scss +89 -89
  151. package/theme/styles/theme/base/_components.scss +108 -108
  152. package/theme/styles/theme/base/_mixins.scss +337 -337
  153. package/theme/styles/theme/base/components/button/_button.scss +576 -576
  154. package/theme/styles/theme/base/components/button/_speeddial.scss +96 -96
  155. package/theme/styles/theme/base/components/button/_splitbutton.scss +348 -348
  156. package/theme/styles/theme/base/components/data/_carousel.scss +37 -37
  157. package/theme/styles/theme/base/components/data/_datatable.scss +338 -338
  158. package/theme/styles/theme/base/components/data/_dataview.scss +46 -46
  159. package/theme/styles/theme/base/components/data/_filter.scss +137 -137
  160. package/theme/styles/theme/base/components/data/_orderlist.scss +114 -114
  161. package/theme/styles/theme/base/components/data/_organizationchart.scss +50 -50
  162. package/theme/styles/theme/base/components/data/_paginator.scss +92 -92
  163. package/theme/styles/theme/base/components/data/_picklist.scss +114 -114
  164. package/theme/styles/theme/base/components/data/_table.scss +16 -16
  165. package/theme/styles/theme/base/components/data/_timeline.scss +35 -35
  166. package/theme/styles/theme/base/components/data/_tree.scss +150 -150
  167. package/theme/styles/theme/base/components/data/_treetable.scss +255 -255
  168. package/theme/styles/theme/base/components/data/_virtualscroller.scss +28 -28
  169. package/theme/styles/theme/base/components/file/_fileupload.scss +64 -64
  170. package/theme/styles/theme/base/components/input/_autocomplete.scss +141 -141
  171. package/theme/styles/theme/base/components/input/_calendar.scss +267 -267
  172. package/theme/styles/theme/base/components/input/_cascadeselect.scss +135 -135
  173. package/theme/styles/theme/base/components/input/_checkbox.scss +99 -99
  174. package/theme/styles/theme/base/components/input/_chips.scss +67 -67
  175. package/theme/styles/theme/base/components/input/_colorpicker.scss +19 -19
  176. package/theme/styles/theme/base/components/input/_dropdown.scss +151 -151
  177. package/theme/styles/theme/base/components/input/_editor.scss +122 -122
  178. package/theme/styles/theme/base/components/input/_inputgroup.scss +75 -75
  179. package/theme/styles/theme/base/components/input/_inputmask.scss +16 -16
  180. package/theme/styles/theme/base/components/input/_inputnumber.scss +28 -28
  181. package/theme/styles/theme/base/components/input/_inputswitch.scss +60 -60
  182. package/theme/styles/theme/base/components/input/_inputtext.scss +100 -100
  183. package/theme/styles/theme/base/components/input/_listbox.scss +97 -97
  184. package/theme/styles/theme/base/components/input/_multiselect.scss +177 -177
  185. package/theme/styles/theme/base/components/input/_password.scss +52 -52
  186. package/theme/styles/theme/base/components/input/_radiobutton.scss +78 -78
  187. package/theme/styles/theme/base/components/input/_rating.scss +60 -60
  188. package/theme/styles/theme/base/components/input/_selectbutton.scss +50 -50
  189. package/theme/styles/theme/base/components/input/_slider.scss +75 -75
  190. package/theme/styles/theme/base/components/input/_togglebutton.scss +48 -48
  191. package/theme/styles/theme/base/components/input/_treeselect.scss +139 -139
  192. package/theme/styles/theme/base/components/menu/_breadcrumb.scss +43 -43
  193. package/theme/styles/theme/base/components/menu/_contextmenu.scss +39 -39
  194. package/theme/styles/theme/base/components/menu/_dock.scss +95 -95
  195. package/theme/styles/theme/base/components/menu/_megamenu.scss +55 -55
  196. package/theme/styles/theme/base/components/menu/_menu.scss +37 -37
  197. package/theme/styles/theme/base/components/menu/_menubar.scss +140 -140
  198. package/theme/styles/theme/base/components/menu/_panelmenu.scss +153 -153
  199. package/theme/styles/theme/base/components/menu/_slidemenu.scss +59 -59
  200. package/theme/styles/theme/base/components/menu/_steps.scss +56 -56
  201. package/theme/styles/theme/base/components/menu/_tabmenu.scss +73 -73
  202. package/theme/styles/theme/base/components/menu/_tieredmenu.scss +43 -43
  203. package/theme/styles/theme/base/components/messages/_inlinemessage.scss +69 -69
  204. package/theme/styles/theme/base/components/messages/_message.scss +107 -107
  205. package/theme/styles/theme/base/components/messages/_toast.scss +99 -99
  206. package/theme/styles/theme/base/components/misc/_avatar.scss +30 -30
  207. package/theme/styles/theme/base/components/misc/_badge.scss +48 -48
  208. package/theme/styles/theme/base/components/misc/_chip.scss +42 -42
  209. package/theme/styles/theme/base/components/misc/_inplace.scss +16 -16
  210. package/theme/styles/theme/base/components/misc/_progressbar.scss +17 -17
  211. package/theme/styles/theme/base/components/misc/_scrolltop.scss +25 -25
  212. package/theme/styles/theme/base/components/misc/_skeleton.scss +8 -8
  213. package/theme/styles/theme/base/components/misc/_tag.scss +45 -45
  214. package/theme/styles/theme/base/components/misc/_terminal.scss +12 -12
  215. package/theme/styles/theme/base/components/multimedia/_galleria.scss +155 -155
  216. package/theme/styles/theme/base/components/multimedia/_image.scss +49 -49
  217. package/theme/styles/theme/base/components/overlay/_confirmpopup.scss +70 -70
  218. package/theme/styles/theme/base/components/overlay/_dialog.scss +69 -69
  219. package/theme/styles/theme/base/components/overlay/_overlaypanel.scss +62 -62
  220. package/theme/styles/theme/base/components/overlay/_sidebar.scss +28 -28
  221. package/theme/styles/theme/base/components/overlay/_tooltip.scss +33 -33
  222. package/theme/styles/theme/base/components/panel/_accordion.scss +119 -119
  223. package/theme/styles/theme/base/components/panel/_card.scss +30 -30
  224. package/theme/styles/theme/base/components/panel/_divider.scss +31 -31
  225. package/theme/styles/theme/base/components/panel/_fieldset.scss +47 -47
  226. package/theme/styles/theme/base/components/panel/_panel.scss +77 -77
  227. package/theme/styles/theme/base/components/panel/_scrollpanel.scss +6 -6
  228. package/theme/styles/theme/base/components/panel/_splitter.scss +19 -19
  229. package/theme/styles/theme/base/components/panel/_stepper.scss +200 -200
  230. package/theme/styles/theme/base/components/panel/_tabview.scss +91 -91
  231. package/theme/styles/theme/base/components/panel/_toolbar.scss +11 -11
  232. package/theme/styles/theme/dark/_extensions.scss +134 -134
  233. package/theme/styles/theme/dark/_variables.scss +933 -933
  234. package/theme/styles/theme/dark/indigo/theme.scss +14 -14
  235. package/theme/styles/theme/light/_extensions.scss +116 -116
  236. package/theme/styles/theme/light/_variables.scss +940 -940
  237. package/theme/styles/theme/light/custom/theme.scss +16 -16
  238. package/theme/styles/theme/light/indigo/theme.scss +14 -14
  239. package/tsconfig.lib.json +12 -0
  240. package/tsconfig.lib.prod.json +10 -0
  241. package/tsconfig.spec.json +9 -0
  242. package/ui/autoComplete/ng-package.json +6 -0
  243. package/ui/autoComplete/src/auto-complete.component.html +14 -0
  244. package/ui/autoComplete/src/auto-complete.component.ts +130 -0
  245. package/ui/autoComplete/src/interfaces.ts +35 -0
  246. package/ui/badge/ng-package.json +6 -0
  247. package/ui/badge/src/badge.component.html +11 -0
  248. package/ui/badge/src/badge.component.ts +63 -0
  249. package/ui/button/ng-package.json +6 -0
  250. package/ui/button/src/button.component.html +12 -0
  251. package/ui/button/src/button.component.ts +47 -0
  252. package/ui/button/src/split-button.component.html +2 -0
  253. package/ui/button/src/split-button.component.ts +17 -0
  254. package/ui/calendar/ng-package.json +6 -0
  255. package/ui/calendar/src/calendar.component.html +48 -0
  256. package/ui/calendar/src/calendar.component.ts +257 -0
  257. package/ui/charts/index.ts +13 -0
  258. package/ui/charts/ng-package.json +6 -0
  259. package/ui/charts/src/amCharts/column/column-chart.component.ts +144 -0
  260. package/ui/charts/src/amCharts/line/line-chart.component.ts +194 -0
  261. package/ui/charts/src/amCharts/pie/pie-chart.component.ts +132 -0
  262. package/ui/charts/src/highCharts/area/area-chart.component.ts +112 -0
  263. package/ui/charts/src/highCharts/bar/bar-chart.component.ts +100 -0
  264. package/ui/charts/src/highCharts/bar/bar-chart.components.scss +50 -0
  265. package/ui/charts/src/highCharts/column/column-chart.component copy.ts +50 -0
  266. package/ui/charts/src/highCharts/column/column-chart.component.ts +125 -0
  267. package/ui/charts/src/highCharts/column/column-chart.components.scss +50 -0
  268. package/ui/charts/src/highCharts/gauge/solid-gauge.component.ts +199 -0
  269. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.ts +279 -0
  270. package/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.ts +185 -0
  271. package/ui/charts/src/highCharts/line/line-chart-series.component.ts +92 -0
  272. package/ui/charts/src/highCharts/line/line-chart.component.ts +85 -0
  273. package/ui/charts/src/highCharts/pie/pie-chart.component.ts +139 -0
  274. package/ui/charts/src/theme/theme.ts +55 -0
  275. package/ui/checkbox/ng-package.json +6 -0
  276. package/ui/checkbox/src/check-box.component.html +15 -0
  277. package/ui/checkbox/src/check-box.component.ts +24 -0
  278. package/ui/checkbox/src/tri-state-checkbox.component.html +7 -0
  279. package/ui/checkbox/src/tri-state-checkbox.component.ts +20 -0
  280. package/ui/chip/index.ts +1 -0
  281. package/ui/chip/ng-package.json +6 -0
  282. package/ui/chip/src/chip.component.html +33 -0
  283. package/ui/chip/src/chip.component.ts +144 -0
  284. package/ui/collapse-reorder-list/index.ts +1 -0
  285. package/ui/collapse-reorder-list/ng-package.json +6 -0
  286. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.html +42 -0
  287. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.scss +24 -0
  288. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.ts +56 -0
  289. package/ui/dxEditor/ng-package.json +6 -0
  290. package/ui/dxEditor/src/dx-editor.component.html +67 -0
  291. package/ui/dxEditor/src/dx-editor.component.ts +19 -0
  292. package/ui/dxField/ng-package.json +6 -0
  293. package/ui/dxField/src/dx-field.component.html +15 -0
  294. package/ui/dxField/src/dx-field.component.ts +17 -0
  295. package/ui/editor/ng-package.json +6 -0
  296. package/ui/editor/src/aril-editor.component.html +16 -0
  297. package/ui/editor/src/aril-editor.component.scss +18 -0
  298. package/ui/editor/src/aril-editor.component.ts +176 -0
  299. package/ui/editor/src/types.ts +24 -0
  300. package/ui/field/ng-package.json +6 -0
  301. package/ui/field/src/field.component.html +27 -0
  302. package/ui/field/src/field.component.ts +53 -0
  303. package/ui/fileUpload/ng-package.json +6 -0
  304. package/ui/fileUpload/src/file-upload.component.html +76 -0
  305. package/ui/fileUpload/src/file-upload.component.ts +90 -0
  306. package/ui/form/index.ts +18 -0
  307. package/ui/form/ng-package.json +6 -0
  308. package/ui/form/src/form-submit-button.component.html +12 -0
  309. package/ui/form/src/form-submit-button.component.ts +36 -0
  310. package/ui/form/src/form.component.ts +20 -0
  311. package/ui/img-viewer/index.ts +2 -0
  312. package/ui/img-viewer/ng-package.json +6 -0
  313. package/ui/img-viewer/src/img-viewer.component.html +12 -0
  314. package/ui/img-viewer/src/img-viewer.component.scss +8 -0
  315. package/ui/img-viewer/src/img-viewer.component.ts +59 -0
  316. package/ui/index.ts +1 -0
  317. package/ui/json-diff-comparison/ng-package.json +6 -0
  318. package/ui/json-diff-comparison/src/json-diff.component.html +5 -0
  319. package/ui/json-diff-comparison/src/json-diff.component.ts +45 -0
  320. package/ui/lib/index.ts +17 -0
  321. package/ui/lib/ng-package.json +6 -0
  322. package/ui/lib/src/form/form-error-message.component.ts +25 -0
  323. package/ui/lib/src/form/form-error-message.directive.ts +32 -0
  324. package/ui/lib/src/form/form-field-builder.ts +31 -0
  325. package/ui/lib/src/form/form-validation.ts +14 -0
  326. package/ui/lib/src/grid/enum-color-picker.pipe.ts +33 -0
  327. package/ui/lib/src/grid/flex-grid.directive.ts +10 -0
  328. package/ui/lib/src/input/baseInput.ts +30 -0
  329. package/ui/lib/src/input/common-input-validators.service.ts +57 -0
  330. package/ui/lib/src/input/dx-input-error-message.pipe.ts +16 -0
  331. package/ui/lib/src/input/input-disabled.directive.ts +15 -0
  332. package/ui/lib/src/input/input-error-message.pipe.ts +71 -0
  333. package/ui/lib/src/input/input-transforms.ts +11 -0
  334. package/ui/lib/src/input/value-accessor.directive.ts +31 -0
  335. package/ui/loader/ng-package.json +6 -0
  336. package/ui/loader/src/loader.component.html +7 -0
  337. package/ui/loader/src/loader.component.scss +6 -0
  338. package/ui/loader/src/loader.component.ts +14 -0
  339. package/ui/mask/ng-package.json +6 -0
  340. package/ui/mask/src/mask.component.css +23 -0
  341. package/ui/mask/src/mask.component.html +17 -0
  342. package/ui/mask/src/mask.component.ts +34 -0
  343. package/ui/multiSelect/ng-package.json +6 -0
  344. package/ui/multiSelect/src/interfaces.ts +41 -0
  345. package/ui/multiSelect/src/multi-select.component.html +14 -0
  346. package/ui/multiSelect/src/multi-select.component.ts +66 -0
  347. package/ui/ng-package.json +6 -0
  348. package/ui/number/ng-package.json +6 -0
  349. package/ui/number/src/number.component.html +26 -0
  350. package/ui/number/src/number.component.ts +36 -0
  351. package/ui/operation-types-dialog/ng-package.json +6 -0
  352. package/ui/operation-types-dialog/src/operation-types-dialog.component.ts +98 -0
  353. package/ui/overlayPanel/ng-package.json +6 -0
  354. package/ui/overlayPanel/src/overlay-panel.component.html +5 -0
  355. package/ui/overlayPanel/src/overlay-panel.component.ts +16 -0
  356. package/ui/panel/ng-package.json +6 -0
  357. package/ui/panel/src/panel.component.css +38 -0
  358. package/ui/panel/src/panel.component.html +44 -0
  359. package/ui/panel/src/panel.component.ts +31 -0
  360. package/ui/password/ng-package.json +6 -0
  361. package/ui/password/src/password.component.html +25 -0
  362. package/ui/password/src/password.component.ts +22 -0
  363. package/ui/pdf-viewer/ng-package.json +6 -0
  364. package/ui/pdf-viewer/src/pdf-viewer.component.html +16 -0
  365. package/ui/pdf-viewer/src/pdf-viewer.component.scss +8 -0
  366. package/ui/pdf-viewer/src/pdf-viewer.component.ts +28 -0
  367. package/ui/progressbar/dist/index.js +13 -0
  368. package/ui/progressbar/ng-package.json +6 -0
  369. package/ui/progressbar/src/dist/progressbar.component.js +28 -0
  370. package/ui/progressbar/src/progressbar.component.html +1 -0
  371. package/ui/progressbar/src/progressbar.component.ts +18 -0
  372. package/ui/radioButton/ng-package.json +6 -0
  373. package/ui/radioButton/src/radio-button.component.html +23 -0
  374. package/ui/radioButton/src/radio-button.component.scss +17 -0
  375. package/ui/radioButton/src/radio-button.component.ts +39 -0
  376. package/ui/relativeDateSelector/index.ts +1 -0
  377. package/ui/relativeDateSelector/ng-package.json +6 -0
  378. package/ui/relativeDateSelector/src/enum.ts +29 -0
  379. package/ui/relativeDateSelector/src/relative-date-selector.component.html +118 -0
  380. package/ui/relativeDateSelector/src/relative-date-selector.component.scss +154 -0
  381. package/ui/relativeDateSelector/src/relative-date-selector.component.ts +291 -0
  382. package/ui/selectBox/ng-package.json +6 -0
  383. package/ui/selectBox/src/interfaces.ts +41 -0
  384. package/ui/selectBox/src/select-box.component.html +19 -0
  385. package/ui/selectBox/src/select-box.component.ts +79 -0
  386. package/ui/styles/ui.common.scss +42 -0
  387. package/ui/switch/ng-package.json +6 -0
  388. package/ui/switch/src/switch.component.html +7 -0
  389. package/ui/switch/src/switch.component.ts +18 -0
  390. package/ui/table/index.ts +76 -0
  391. package/ui/table/ng-package.json +6 -0
  392. package/ui/table/src/export-overlay-panel.component.ts +330 -0
  393. package/ui/table/src/interfaces.ts +162 -0
  394. package/ui/table/src/table-column.component.ts +22 -0
  395. package/ui/table/src/table.component.html +404 -0
  396. package/ui/table/src/table.component.scss +15 -0
  397. package/ui/table/src/table.component.ts +368 -0
  398. package/ui/table-expand/index.ts +41 -0
  399. package/ui/table-expand/ng-package.json +6 -0
  400. package/ui/table-expand/src/table-column.component.ts +32 -0
  401. package/ui/table-expand/src/table-expand-area.component.ts +18 -0
  402. package/ui/table-expand/src/table.component.html +101 -0
  403. package/ui/table-expand/src/table.component.ts +92 -0
  404. package/ui/tag/index.ts +1 -0
  405. package/ui/tag/ng-package.json +6 -0
  406. package/ui/tag/src/interface.ts +1 -0
  407. package/ui/tag/src/tag.component.html +9 -0
  408. package/ui/tag/src/tag.component.ts +17 -0
  409. package/ui/tagBox/ng-package.json +6 -0
  410. package/ui/tagBox/src/tag-box.component.html +26 -0
  411. package/ui/tagBox/src/tag-box.component.ts +56 -0
  412. package/ui/text/ng-package.json +6 -0
  413. package/ui/text/src/text.component.html +21 -0
  414. package/ui/text/src/text.component.ts +55 -0
  415. package/ui/textArea/ng-package.json +6 -0
  416. package/ui/textArea/src/text-area.component.html +12 -0
  417. package/ui/textArea/src/text-area.component.ts +22 -0
  418. package/ui/toggle-button/index.ts +1 -0
  419. package/ui/toggle-button/ng-package.json +6 -0
  420. package/ui/toggle-button/src/toggle-button.component.html +13 -0
  421. package/ui/toggle-button/src/toggle-button.component.scss +19 -0
  422. package/ui/toggle-button/src/toggle-button.component.ts +22 -0
  423. package/ui/tooltip/ng-package.json +6 -0
  424. package/ui/tooltip/src/tooltip-component.html +10 -0
  425. package/ui/tooltip/src/tooltip-component.ts +20 -0
  426. package/ui/translate-input/ng-package.json +6 -0
  427. package/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.html +46 -0
  428. package/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.scss +9 -0
  429. package/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.ts +74 -0
  430. package/ui/translate-input/src/aril-lang-modal/constants.ts +16 -0
  431. package/ui/translate-input/src/aril-translate-input.component.ts +152 -0
  432. package/ui/translate-input/src/interface.ts +14 -0
  433. package/ui/tree/ng-package.json +6 -0
  434. package/ui/tree/src/tree.component.html +17 -0
  435. package/ui/tree/src/tree.component.ts +65 -0
  436. package/ui/treeSelect/ng-package.json +6 -0
  437. package/ui/treeSelect/src/treeSelect.component.html +18 -0
  438. package/ui/treeSelect/src/treeSelect.component.ts +43 -0
  439. package/ui/treeTable/ng-package.json +6 -0
  440. package/ui/treeTable/src/tree-table.component.html +88 -0
  441. package/ui/treeTable/src/tree-table.component.ts +57 -0
  442. package/ui/value/ng-package.json +6 -0
  443. package/ui/value/src/value.component.html +94 -0
  444. package/ui/value/src/value.component.scss +6 -0
  445. package/ui/value/src/value.component.ts +268 -0
  446. package/ui-business/assetPicker/index.ts +1 -0
  447. package/ui-business/assetPicker/ng-package.json +6 -0
  448. package/ui-business/assetPicker/src/asset-picker.component.html +29 -0
  449. package/ui-business/assetPicker/src/asset-picker.component.ts +259 -0
  450. package/ui-business/assetPicker/src/interface.ts +83 -0
  451. package/ui-business/detailed-overlay-panel/ng-package.json +6 -0
  452. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.html +52 -0
  453. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.scss +19 -0
  454. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.ts +66 -0
  455. package/ui-business/detailed-overlay-panel/src/interface.ts +62 -0
  456. package/ui-business/enumPicker/index.ts +1 -0
  457. package/ui-business/enumPicker/ng-package.json +6 -0
  458. package/ui-business/enumPicker/src/enum-picker.component.html +39 -0
  459. package/ui-business/enumPicker/src/enum-picker.component.ts +147 -0
  460. package/ui-business/enumPicker/src/interface.ts +44 -0
  461. package/ui-business/image-viewer/index.ts +1 -0
  462. package/ui-business/image-viewer/ng-package.json +6 -0
  463. package/ui-business/image-viewer/src/aril-image-viewer.component.ts +92 -0
  464. package/ui-business/index.ts +1 -0
  465. package/ui-business/multiple-ref-value/ng-package.json +6 -0
  466. package/ui-business/multiple-ref-value/src/multiple-ref-value.component.html +26 -0
  467. package/ui-business/multiple-ref-value/src/multiple-ref-value.component.ts +21 -0
  468. package/ui-business/ng-package.json +6 -0
  469. package/ui-business/notification-templates-dialog/ng-package.json +6 -0
  470. package/ui-business/notification-templates-dialog/src/interface.ts +18 -0
  471. package/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.html +31 -0
  472. package/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.ts +69 -0
  473. package/ui-business/operation-types-dialog/ng-package.json +6 -0
  474. package/ui-business/operation-types-dialog/src/operation-types-dialog.component.ts +78 -0
  475. package/ui-business/ref-value/ng-package.json +6 -0
  476. package/ui-business/ref-value/src/ref-value.component.html +29 -0
  477. package/ui-business/ref-value/src/ref-value.component.ts +41 -0
  478. package/ui-business/rolePicker/ng-package.json +6 -0
  479. package/ui-business/rolePicker/src/interface.ts +56 -0
  480. package/ui-business/rolePicker/src/role-picker.component.html +21 -0
  481. package/ui-business/rolePicker/src/role-picker.component.ts +88 -0
  482. package/ui-business/userPicker/index.ts +1 -0
  483. package/ui-business/userPicker/ng-package.json +6 -0
  484. package/ui-business/userPicker/src/interface.ts +27 -0
  485. package/ui-business/userPicker/src/user-picker.component.html +20 -0
  486. package/ui-business/userPicker/src/user-picker.component.ts +52 -0
  487. package/util/block/ng-package.json +6 -0
  488. package/util/block/src/block.ts +65 -0
  489. package/util/block/src/blockui.css +56 -0
  490. package/util/block/src/blockui.min.js +7 -0
  491. package/util/custom_pages/ng-package.json +6 -0
  492. package/util/custom_pages/src/notFound.component.ts +34 -0
  493. package/util/directives/ng-package.json +6 -0
  494. package/util/directives/src/detail-page-customization/detail-page-customization.directive.md +199 -0
  495. package/util/directives/src/detail-page-customization/detail-page-customization.directive.ts +343 -0
  496. package/util/directives/src/detail-page-customization/index.ts +2 -0
  497. package/util/directives/src/detail-page-customization/models.ts +61 -0
  498. package/util/directives/src/dialog-component/plugin-dialog.component.ts +22 -0
  499. package/util/directives/src/dialog-service/plugin-dialog.service.ts +12 -0
  500. package/util/index.ts +1 -0
  501. package/util/lib/ng-package.json +6 -0
  502. package/util/lib/src/interfaces.ts +44 -0
  503. package/util/lib/src/module-router.ts +9 -0
  504. package/util/lib/src/types.ts +61 -0
  505. package/util/lib/src/validators/iban.validator.ts +202 -0
  506. package/util/lib/src/validators/max-array-length.validator.ts +18 -0
  507. package/util/lib/src/validators/min-array-length.validator.ts +18 -0
  508. package/util/lib/src/validators/tckn.validator.ts +55 -0
  509. package/util/lib/src/validators/validators.ts +21 -0
  510. package/util/loaders/index.ts +1 -0
  511. package/util/loaders/ng-package.json +6 -0
  512. package/util/loaders/style/style.loader.service.ts +69 -0
  513. package/util/ng-package.json +6 -0
  514. package/util/pipes/ng-package.json +6 -0
  515. package/util/pipes/src/distance-to-now.pipe.ts +37 -0
  516. package/util/pipes/src/get-column-by-field.pipe.ts +11 -0
  517. package/util/pipes/src/parse.pipe.ts +15 -0
  518. package/util/pipes/src/round-number.pipe.ts +75 -0
  519. package/util/pipes/src/safe.pipe.ts +27 -0
  520. package/util/pipes/src/translate-json/index.ts +1 -0
  521. package/util/pipes/src/translate-json/translate-json.pipe.ts +34 -0
  522. package/util/primitive-extensions/ng-package.json +6 -0
  523. package/util/primitive-extensions/src/date.extensions.ts +135 -0
  524. package/util/primitive-extensions/src/number.extensions.ts +57 -0
  525. package/util/primitive-extensions/src/string.extensions.ts +39 -0
  526. package/util/pub-sub/ng-package.json +6 -0
  527. package/util/pub-sub/src/pub-sub.service.ts +35 -0
  528. package/util/sync-active-tab-route/ng-package.json +6 -0
  529. package/util/sync-active-tab-route/src/sync-active-tab-route.directive.ts +47 -0
  530. package/util/unwrap/ng-package.json +6 -0
  531. package/util/unwrap/src/unwrap-tag.directive.ts +18 -0
  532. package/boot/config/api/src/api.service.d.ts +0 -12
  533. package/boot/config/api/src/interfaces.d.ts +0 -39
  534. package/boot/config/api.sample.json +0 -8
  535. package/boot/config/apps/src/apps.service.d.ts +0 -13
  536. package/boot/config/apps/src/auth.guard.d.ts +0 -9
  537. package/boot/config/apps/src/interfaces.d.ts +0 -50
  538. package/boot/config/apps/src/reuse-strategy.d.ts +0 -4
  539. package/boot/config/apps/src/showdowDOMWrapper.d.ts +0 -10
  540. package/boot/config/plugins/src/getNgZone.d.ts +0 -5
  541. package/boot/config/plugins/src/interfaces.d.ts +0 -55
  542. package/boot/config/plugins/src/plugins.service.d.ts +0 -5
  543. package/boot/config/translate/constants.d.ts +0 -4
  544. package/boot/config/translate/primeng/i18n/tr.d.ts +0 -46
  545. package/boot/host/src/app.component.d.ts +0 -10
  546. package/boot/host/src/bootstrap.d.ts +0 -4
  547. package/boot/index.d.ts +0 -1
  548. package/boot/mfe/src/app.component.d.ts +0 -17
  549. package/boot/mfe/src/appComponentLoader.d.ts +0 -1
  550. package/boot/mfe/src/bootstrap.d.ts +0 -5
  551. package/boot/mfe/src/loadStyles.d.ts +0 -3
  552. package/boot/mfe/src/monaco.config.d.ts +0 -7
  553. package/esm2022/aril.mjs +0 -5
  554. package/esm2022/boot/aril-boot.mjs +0 -5
  555. package/esm2022/boot/config/api/aril-boot-config-api.mjs +0 -5
  556. package/esm2022/boot/config/api/index.mjs +0 -2
  557. package/esm2022/boot/config/api/src/api.service.mjs +0 -59
  558. package/esm2022/boot/config/api/src/interfaces.mjs +0 -61
  559. package/esm2022/boot/config/apps/aril-boot-config-apps.mjs +0 -5
  560. package/esm2022/boot/config/apps/index.mjs +0 -4
  561. package/esm2022/boot/config/apps/src/apps.service.mjs +0 -53
  562. package/esm2022/boot/config/apps/src/auth.guard.mjs +0 -22
  563. package/esm2022/boot/config/apps/src/interfaces.mjs +0 -21
  564. package/esm2022/boot/config/apps/src/reuse-strategy.mjs +0 -9
  565. package/esm2022/boot/config/apps/src/showdowDOMWrapper.mjs +0 -35
  566. package/esm2022/boot/config/plugins/aril-boot-config-plugins.mjs +0 -5
  567. package/esm2022/boot/config/plugins/index.mjs +0 -3
  568. package/esm2022/boot/config/plugins/src/getNgZone.mjs +0 -9
  569. package/esm2022/boot/config/plugins/src/interfaces.mjs +0 -62
  570. package/esm2022/boot/config/plugins/src/plugins.service.mjs +0 -84
  571. package/esm2022/boot/config/translate/aril-boot-config-translate.mjs +0 -5
  572. package/esm2022/boot/config/translate/constants.mjs +0 -6
  573. package/esm2022/boot/config/translate/index.mjs +0 -3
  574. package/esm2022/boot/config/translate/primeng/i18n/tr.mjs +0 -60
  575. package/esm2022/boot/host/aril-boot-host.mjs +0 -5
  576. package/esm2022/boot/host/index.mjs +0 -2
  577. package/esm2022/boot/host/src/app.component.mjs +0 -49
  578. package/esm2022/boot/host/src/bootstrap.mjs +0 -55
  579. package/esm2022/boot/index.mjs +0 -2
  580. package/esm2022/boot/mfe/aril-boot-mfe.mjs +0 -5
  581. package/esm2022/boot/mfe/index.mjs +0 -2
  582. package/esm2022/boot/mfe/src/app.component.mjs +0 -63
  583. package/esm2022/boot/mfe/src/appComponentLoader.mjs +0 -5
  584. package/esm2022/boot/mfe/src/bootstrap.mjs +0 -76
  585. package/esm2022/boot/mfe/src/loadStyles.mjs +0 -37
  586. package/esm2022/boot/mfe/src/monaco.config.mjs +0 -247
  587. package/esm2022/http/aril-http.mjs +0 -5
  588. package/esm2022/http/index.mjs +0 -12
  589. package/esm2022/http/lib/enums.mjs +0 -35
  590. package/esm2022/http/lib/interfaces.mjs +0 -16
  591. package/esm2022/http/src/httpBackend.mjs +0 -17
  592. package/esm2022/http/src/httpClient.mjs +0 -16
  593. package/esm2022/http/src/interceptor/accept-language.interceptor.mjs +0 -21
  594. package/esm2022/http/src/serviceBase.mjs +0 -140
  595. package/esm2022/http/src/serviceMockBase.mjs +0 -4
  596. package/esm2022/http/src/serviceRequest.mjs +0 -23
  597. package/esm2022/http/src/serviceStateMethods.mjs +0 -167
  598. package/esm2022/i18n/aril-i18n.mjs +0 -5
  599. package/esm2022/i18n/index.mjs +0 -6
  600. package/esm2022/i18n/src/folder-name-token.mjs +0 -3
  601. package/esm2022/i18n/src/i18n.module.mjs +0 -17
  602. package/esm2022/i18n/src/loader.mjs +0 -18
  603. package/esm2022/i18n/src/provideI18n.mjs +0 -16
  604. package/esm2022/i18n/src/provideScope.mjs +0 -18
  605. package/esm2022/keycloak/aril-keycloak.mjs +0 -5
  606. package/esm2022/keycloak/index.mjs +0 -2
  607. package/esm2022/keycloak/src/auth.interceptor.mjs +0 -92
  608. package/esm2022/provider/aril-provider.mjs +0 -5
  609. package/esm2022/provider/index.mjs +0 -2
  610. package/esm2022/provider/src/index.mjs +0 -5
  611. package/esm2022/provider/src/prodiveHost.mjs +0 -9
  612. package/esm2022/provider/src/prodiveHostRouter.mjs +0 -12
  613. package/esm2022/provider/src/provideHostKeycloak.mjs +0 -28
  614. package/esm2022/provider/src/provideLocaleId.mjs +0 -20
  615. package/esm2022/public-api.mjs +0 -3
  616. package/esm2022/theme/aril-theme.mjs +0 -5
  617. package/esm2022/theme/index.mjs +0 -2
  618. package/esm2022/theme/layout/app/breadcrumb/app.breadcrumb.component.mjs +0 -106
  619. package/esm2022/theme/layout/app/chatbot/app.chatbot.component.mjs +0 -140
  620. package/esm2022/theme/layout/app/expandableMenu/expandable-menu.component.mjs +0 -250
  621. package/esm2022/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.mjs +0 -217
  622. package/esm2022/theme/layout/app/favorite-pages/favorite-pages.service.mjs +0 -60
  623. package/esm2022/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.mjs +0 -129
  624. package/esm2022/theme/layout/app/general-search/general-search.component.mjs +0 -75
  625. package/esm2022/theme/layout/app/general-search/helpers.mjs +0 -92
  626. package/esm2022/theme/layout/app/general-search/models.mjs +0 -50
  627. package/esm2022/theme/layout/app/history/history-sidebar.component.mjs +0 -133
  628. package/esm2022/theme/layout/app/history/history.service.mjs +0 -131
  629. package/esm2022/theme/layout/app/layout/app.layout.component.mjs +0 -160
  630. package/esm2022/theme/layout/app/layout/mfe.layout.component.mjs +0 -64
  631. package/esm2022/theme/layout/app/notifications/notifications-sidebar.component.mjs +0 -191
  632. package/esm2022/theme/layout/app/profileSidebar/app.profilesidebar.component.mjs +0 -122
  633. package/esm2022/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.mjs +0 -142
  634. package/esm2022/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.mjs +0 -202
  635. package/esm2022/theme/layout/app/profileSidebar/profile.service.mjs +0 -66
  636. package/esm2022/theme/layout/app/site-map/site-map-sidebar.component.mjs +0 -166
  637. package/esm2022/theme/layout/app/static-sidebar/static-sidebar.component.mjs +0 -228
  638. package/esm2022/theme/layout/app/topbar/app.topbar.component.mjs +0 -155
  639. package/esm2022/theme/layout/aril-theme-layout.mjs +0 -5
  640. package/esm2022/theme/layout/index.mjs +0 -8
  641. package/esm2022/theme/layout/service/app.layout.service.mjs +0 -231
  642. package/esm2022/theme/layout/service/app.menu.service.mjs +0 -46
  643. package/esm2022/theme/layout/service/breadcrumb.service.mjs +0 -20
  644. package/esm2022/theme/layout/service/interfaces/enum.mjs +0 -16
  645. package/esm2022/theme/layout/service/interfaces/interfaces.mjs +0 -2
  646. package/esm2022/theme/layout/service/menuchangeevent.mjs +0 -2
  647. package/esm2022/theme/layout/service/notifications.service.mjs +0 -30
  648. package/esm2022/theme/layout/service/search.service.mjs +0 -25
  649. package/esm2022/theme/layout/service/selection-group.service.mjs +0 -65
  650. package/esm2022/ui/aril-ui.mjs +0 -5
  651. package/esm2022/ui/autoComplete/aril-ui-autoComplete.mjs +0 -5
  652. package/esm2022/ui/autoComplete/index.mjs +0 -2
  653. package/esm2022/ui/autoComplete/src/auto-complete.component.mjs +0 -109
  654. package/esm2022/ui/autoComplete/src/interfaces.mjs +0 -2
  655. package/esm2022/ui/badge/aril-ui-badge.mjs +0 -5
  656. package/esm2022/ui/badge/index.mjs +0 -2
  657. package/esm2022/ui/badge/src/badge.component.mjs +0 -59
  658. package/esm2022/ui/button/aril-ui-button.mjs +0 -5
  659. package/esm2022/ui/button/index.mjs +0 -3
  660. package/esm2022/ui/button/src/button.component.mjs +0 -40
  661. package/esm2022/ui/button/src/split-button.component.mjs +0 -18
  662. package/esm2022/ui/calendar/aril-ui-calendar.mjs +0 -5
  663. package/esm2022/ui/calendar/index.mjs +0 -2
  664. package/esm2022/ui/calendar/src/calendar.component.mjs +0 -224
  665. package/esm2022/ui/charts/aril-ui-charts.mjs +0 -5
  666. package/esm2022/ui/charts/index.mjs +0 -13
  667. package/esm2022/ui/charts/src/amCharts/column/column-chart.component.mjs +0 -124
  668. package/esm2022/ui/charts/src/amCharts/line/line-chart.component.mjs +0 -164
  669. package/esm2022/ui/charts/src/amCharts/pie/pie-chart.component.mjs +0 -116
  670. package/esm2022/ui/charts/src/highCharts/area/area-chart.component.mjs +0 -114
  671. package/esm2022/ui/charts/src/highCharts/bar/bar-chart.component.mjs +0 -100
  672. package/esm2022/ui/charts/src/highCharts/column/column-chart.component.mjs +0 -117
  673. package/esm2022/ui/charts/src/highCharts/gauge/solid-gauge.component.mjs +0 -180
  674. package/esm2022/ui/charts/src/highCharts/heatmap/heatMap-chart.component.mjs +0 -252
  675. package/esm2022/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.mjs +0 -187
  676. package/esm2022/ui/charts/src/highCharts/line/line-chart-series.component.mjs +0 -89
  677. package/esm2022/ui/charts/src/highCharts/line/line-chart.component.mjs +0 -82
  678. package/esm2022/ui/charts/src/highCharts/pie/pie-chart.component.mjs +0 -137
  679. package/esm2022/ui/charts/src/theme/theme.mjs +0 -54
  680. package/esm2022/ui/checkbox/aril-ui-checkbox.mjs +0 -5
  681. package/esm2022/ui/checkbox/index.mjs +0 -3
  682. package/esm2022/ui/checkbox/src/check-box.component.mjs +0 -27
  683. package/esm2022/ui/checkbox/src/tri-state-checkbox.component.mjs +0 -24
  684. package/esm2022/ui/chip/aril-ui-chip.mjs +0 -5
  685. package/esm2022/ui/chip/index.mjs +0 -2
  686. package/esm2022/ui/chip/src/chip.component.mjs +0 -129
  687. package/esm2022/ui/collapse-reorder-list/aril-ui-collapse-reorder-list.mjs +0 -5
  688. package/esm2022/ui/collapse-reorder-list/index.mjs +0 -2
  689. package/esm2022/ui/collapse-reorder-list/src/collapse-reorder-list.component.mjs +0 -53
  690. package/esm2022/ui/dxEditor/aril-ui-dxEditor.mjs +0 -5
  691. package/esm2022/ui/dxEditor/index.mjs +0 -2
  692. package/esm2022/ui/dxEditor/src/dx-editor.component.mjs +0 -26
  693. package/esm2022/ui/dxField/aril-ui-dxField.mjs +0 -5
  694. package/esm2022/ui/dxField/index.mjs +0 -2
  695. package/esm2022/ui/dxField/src/dx-field.component.mjs +0 -19
  696. package/esm2022/ui/editor/aril-ui-editor.mjs +0 -5
  697. package/esm2022/ui/editor/index.mjs +0 -3
  698. package/esm2022/ui/editor/src/aril-editor.component.mjs +0 -171
  699. package/esm2022/ui/editor/src/types.mjs +0 -26
  700. package/esm2022/ui/field/aril-ui-field.mjs +0 -5
  701. package/esm2022/ui/field/index.mjs +0 -2
  702. package/esm2022/ui/field/src/field.component.mjs +0 -45
  703. package/esm2022/ui/fileUpload/aril-ui-fileUpload.mjs +0 -5
  704. package/esm2022/ui/fileUpload/index.mjs +0 -2
  705. package/esm2022/ui/fileUpload/src/file-upload.component.mjs +0 -73
  706. package/esm2022/ui/form/aril-ui-form.mjs +0 -5
  707. package/esm2022/ui/form/index.mjs +0 -22
  708. package/esm2022/ui/form/src/form-submit-button.component.mjs +0 -40
  709. package/esm2022/ui/form/src/form.component.mjs +0 -27
  710. package/esm2022/ui/img-viewer/aril-ui-img-viewer.mjs +0 -5
  711. package/esm2022/ui/img-viewer/index.mjs +0 -2
  712. package/esm2022/ui/img-viewer/src/img-viewer.component.mjs +0 -57
  713. package/esm2022/ui/index.mjs +0 -2
  714. package/esm2022/ui/json-diff-comparison/aril-ui-json-diff-comparison.mjs +0 -5
  715. package/esm2022/ui/json-diff-comparison/index.mjs +0 -2
  716. package/esm2022/ui/json-diff-comparison/src/json-diff.component.mjs +0 -49
  717. package/esm2022/ui/lib/aril-ui-lib.mjs +0 -5
  718. package/esm2022/ui/lib/index.mjs +0 -16
  719. package/esm2022/ui/lib/src/form/form-error-message.component.mjs +0 -33
  720. package/esm2022/ui/lib/src/form/form-error-message.directive.mjs +0 -34
  721. package/esm2022/ui/lib/src/form/form-field-builder.mjs +0 -23
  722. package/esm2022/ui/lib/src/form/form-validation.mjs +0 -14
  723. package/esm2022/ui/lib/src/grid/enum-color-picker.pipe.mjs +0 -35
  724. package/esm2022/ui/lib/src/grid/flex-grid.directive.mjs +0 -21
  725. package/esm2022/ui/lib/src/input/baseInput.mjs +0 -24
  726. package/esm2022/ui/lib/src/input/common-input-validators.service.mjs +0 -49
  727. package/esm2022/ui/lib/src/input/dx-input-error-message.pipe.mjs +0 -22
  728. package/esm2022/ui/lib/src/input/input-disabled.directive.mjs +0 -25
  729. package/esm2022/ui/lib/src/input/input-error-message.pipe.mjs +0 -63
  730. package/esm2022/ui/lib/src/input/input-transforms.mjs +0 -8
  731. package/esm2022/ui/lib/src/input/value-accessor.directive.mjs +0 -38
  732. package/esm2022/ui/loader/aril-ui-loader.mjs +0 -5
  733. package/esm2022/ui/loader/index.mjs +0 -2
  734. package/esm2022/ui/loader/src/loader.component.mjs +0 -14
  735. package/esm2022/ui/mask/aril-ui-mask.mjs +0 -5
  736. package/esm2022/ui/mask/index.mjs +0 -2
  737. package/esm2022/ui/mask/src/mask.component.mjs +0 -35
  738. package/esm2022/ui/multiSelect/aril-ui-multiSelect.mjs +0 -5
  739. package/esm2022/ui/multiSelect/index.mjs +0 -2
  740. package/esm2022/ui/multiSelect/src/interfaces.mjs +0 -2
  741. package/esm2022/ui/multiSelect/src/multi-select.component.mjs +0 -57
  742. package/esm2022/ui/number/aril-ui-number.mjs +0 -5
  743. package/esm2022/ui/number/index.mjs +0 -2
  744. package/esm2022/ui/number/src/number.component.mjs +0 -38
  745. package/esm2022/ui/operation-types-dialog/aril-ui-operation-types-dialog.mjs +0 -5
  746. package/esm2022/ui/operation-types-dialog/index.mjs +0 -2
  747. package/esm2022/ui/operation-types-dialog/src/operation-types-dialog.component.mjs +0 -91
  748. package/esm2022/ui/overlayPanel/aril-ui-overlayPanel.mjs +0 -5
  749. package/esm2022/ui/overlayPanel/index.mjs +0 -2
  750. package/esm2022/ui/overlayPanel/src/overlay-panel.component.mjs +0 -20
  751. package/esm2022/ui/panel/aril-ui-panel.mjs +0 -5
  752. package/esm2022/ui/panel/index.mjs +0 -2
  753. package/esm2022/ui/panel/src/panel.component.mjs +0 -33
  754. package/esm2022/ui/password/aril-ui-password.mjs +0 -5
  755. package/esm2022/ui/password/index.mjs +0 -2
  756. package/esm2022/ui/password/src/password.component.mjs +0 -29
  757. package/esm2022/ui/pdf-viewer/aril-ui-pdf-viewer.mjs +0 -5
  758. package/esm2022/ui/pdf-viewer/index.mjs +0 -2
  759. package/esm2022/ui/pdf-viewer/src/pdf-viewer.component.mjs +0 -27
  760. package/esm2022/ui/progressbar/aril-ui-progressbar.mjs +0 -5
  761. package/esm2022/ui/progressbar/index.mjs +0 -2
  762. package/esm2022/ui/progressbar/src/progressbar.component.mjs +0 -18
  763. package/esm2022/ui/radioButton/aril-ui-radioButton.mjs +0 -5
  764. package/esm2022/ui/radioButton/index.mjs +0 -2
  765. package/esm2022/ui/radioButton/src/radio-button.component.mjs +0 -30
  766. package/esm2022/ui/relativeDateSelector/aril-ui-relativeDateSelector.mjs +0 -5
  767. package/esm2022/ui/relativeDateSelector/index.mjs +0 -2
  768. package/esm2022/ui/relativeDateSelector/src/enum.mjs +0 -31
  769. package/esm2022/ui/relativeDateSelector/src/relative-date-selector.component.mjs +0 -248
  770. package/esm2022/ui/selectBox/aril-ui-selectBox.mjs +0 -5
  771. package/esm2022/ui/selectBox/index.mjs +0 -2
  772. package/esm2022/ui/selectBox/src/interfaces.mjs +0 -2
  773. package/esm2022/ui/selectBox/src/select-box.component.mjs +0 -67
  774. package/esm2022/ui/switch/aril-ui-switch.mjs +0 -5
  775. package/esm2022/ui/switch/index.mjs +0 -2
  776. package/esm2022/ui/switch/src/switch.component.mjs +0 -23
  777. package/esm2022/ui/table/aril-ui-table.mjs +0 -5
  778. package/esm2022/ui/table/index.mjs +0 -131
  779. package/esm2022/ui/table/src/export-overlay-panel.component.mjs +0 -321
  780. package/esm2022/ui/table/src/interfaces.mjs +0 -44
  781. package/esm2022/ui/table/src/table-column.component.mjs +0 -31
  782. package/esm2022/ui/table/src/table.component.mjs +0 -334
  783. package/esm2022/ui/table-expand/aril-ui-table-expand.mjs +0 -5
  784. package/esm2022/ui/table-expand/index.mjs +0 -61
  785. package/esm2022/ui/table-expand/src/table-column.component.mjs +0 -25
  786. package/esm2022/ui/table-expand/src/table-expand-area.component.mjs +0 -17
  787. package/esm2022/ui/table-expand/src/table.component.mjs +0 -99
  788. package/esm2022/ui/tag/aril-ui-tag.mjs +0 -5
  789. package/esm2022/ui/tag/index.mjs +0 -2
  790. package/esm2022/ui/tag/src/interface.mjs +0 -2
  791. package/esm2022/ui/tag/src/tag.component.mjs +0 -20
  792. package/esm2022/ui/tagBox/aril-ui-tagBox.mjs +0 -5
  793. package/esm2022/ui/tagBox/index.mjs +0 -2
  794. package/esm2022/ui/tagBox/src/tag-box.component.mjs +0 -55
  795. package/esm2022/ui/text/aril-ui-text.mjs +0 -5
  796. package/esm2022/ui/text/index.mjs +0 -2
  797. package/esm2022/ui/text/src/text.component.mjs +0 -47
  798. package/esm2022/ui/textArea/aril-ui-textArea.mjs +0 -5
  799. package/esm2022/ui/textArea/index.mjs +0 -2
  800. package/esm2022/ui/textArea/src/text-area.component.mjs +0 -27
  801. package/esm2022/ui/toggle-button/aril-ui-toggle-button.mjs +0 -5
  802. package/esm2022/ui/toggle-button/index.mjs +0 -2
  803. package/esm2022/ui/toggle-button/src/toggle-button.component.mjs +0 -25
  804. package/esm2022/ui/tooltip/aril-ui-tooltip.mjs +0 -5
  805. package/esm2022/ui/tooltip/index.mjs +0 -2
  806. package/esm2022/ui/tooltip/src/tooltip-component.mjs +0 -23
  807. package/esm2022/ui/translate-input/aril-ui-translate-input.mjs +0 -5
  808. package/esm2022/ui/translate-input/index.mjs +0 -2
  809. package/esm2022/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.mjs +0 -64
  810. package/esm2022/ui/translate-input/src/aril-lang-modal/constants.mjs +0 -15
  811. package/esm2022/ui/translate-input/src/aril-translate-input.component.mjs +0 -128
  812. package/esm2022/ui/translate-input/src/interface.mjs +0 -2
  813. package/esm2022/ui/tree/aril-ui-tree.mjs +0 -5
  814. package/esm2022/ui/tree/index.mjs +0 -2
  815. package/esm2022/ui/tree/src/tree.component.mjs +0 -53
  816. package/esm2022/ui/treeSelect/aril-ui-treeSelect.mjs +0 -5
  817. package/esm2022/ui/treeSelect/index.mjs +0 -2
  818. package/esm2022/ui/treeSelect/src/treeSelect.component.mjs +0 -41
  819. package/esm2022/ui/treeTable/aril-ui-treeTable.mjs +0 -5
  820. package/esm2022/ui/treeTable/index.mjs +0 -2
  821. package/esm2022/ui/treeTable/src/tree-table.component.mjs +0 -55
  822. package/esm2022/ui/value/aril-ui-value.mjs +0 -5
  823. package/esm2022/ui/value/index.mjs +0 -2
  824. package/esm2022/ui/value/src/value.component.mjs +0 -207
  825. package/esm2022/ui-business/aril-ui-business.mjs +0 -5
  826. package/esm2022/ui-business/assetPicker/aril-ui-business-assetPicker.mjs +0 -5
  827. package/esm2022/ui-business/assetPicker/index.mjs +0 -2
  828. package/esm2022/ui-business/assetPicker/src/asset-picker.component.mjs +0 -182
  829. package/esm2022/ui-business/assetPicker/src/interface.mjs +0 -2
  830. package/esm2022/ui-business/detailed-overlay-panel/aril-ui-business-detailed-overlay-panel.mjs +0 -5
  831. package/esm2022/ui-business/detailed-overlay-panel/index.mjs +0 -2
  832. package/esm2022/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.mjs +0 -61
  833. package/esm2022/ui-business/detailed-overlay-panel/src/interface.mjs +0 -19
  834. package/esm2022/ui-business/enumPicker/aril-ui-business-enumPicker.mjs +0 -5
  835. package/esm2022/ui-business/enumPicker/index.mjs +0 -2
  836. package/esm2022/ui-business/enumPicker/src/enum-picker.component.mjs +0 -124
  837. package/esm2022/ui-business/enumPicker/src/interface.mjs +0 -2
  838. package/esm2022/ui-business/image-viewer/aril-ui-business-image-viewer.mjs +0 -5
  839. package/esm2022/ui-business/image-viewer/index.mjs +0 -2
  840. package/esm2022/ui-business/image-viewer/src/aril-image-viewer.component.mjs +0 -111
  841. package/esm2022/ui-business/index.mjs +0 -2
  842. package/esm2022/ui-business/multiple-ref-value/aril-ui-business-multiple-ref-value.mjs +0 -5
  843. package/esm2022/ui-business/multiple-ref-value/index.mjs +0 -2
  844. package/esm2022/ui-business/multiple-ref-value/src/multiple-ref-value.component.mjs +0 -23
  845. package/esm2022/ui-business/notification-templates-dialog/aril-ui-business-notification-templates-dialog.mjs +0 -5
  846. package/esm2022/ui-business/notification-templates-dialog/index.mjs +0 -2
  847. package/esm2022/ui-business/notification-templates-dialog/src/interface.mjs +0 -8
  848. package/esm2022/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.mjs +0 -56
  849. package/esm2022/ui-business/operation-types-dialog/aril-ui-business-operation-types-dialog.mjs +0 -5
  850. package/esm2022/ui-business/operation-types-dialog/index.mjs +0 -2
  851. package/esm2022/ui-business/operation-types-dialog/src/operation-types-dialog.component.mjs +0 -76
  852. package/esm2022/ui-business/ref-value/aril-ui-business-ref-value.mjs +0 -5
  853. package/esm2022/ui-business/ref-value/index.mjs +0 -2
  854. package/esm2022/ui-business/ref-value/src/ref-value.component.mjs +0 -39
  855. package/esm2022/ui-business/rolePicker/aril-ui-business-rolePicker.mjs +0 -5
  856. package/esm2022/ui-business/rolePicker/index.mjs +0 -2
  857. package/esm2022/ui-business/rolePicker/src/interface.mjs +0 -2
  858. package/esm2022/ui-business/rolePicker/src/role-picker.component.mjs +0 -71
  859. package/esm2022/ui-business/userPicker/aril-ui-business-userPicker.mjs +0 -5
  860. package/esm2022/ui-business/userPicker/index.mjs +0 -2
  861. package/esm2022/ui-business/userPicker/src/interface.mjs +0 -2
  862. package/esm2022/ui-business/userPicker/src/user-picker.component.mjs +0 -43
  863. package/esm2022/util/aril-util.mjs +0 -5
  864. package/esm2022/util/block/aril-util-block.mjs +0 -5
  865. package/esm2022/util/block/index.mjs +0 -2
  866. package/esm2022/util/block/src/block.mjs +0 -64
  867. package/esm2022/util/custom_pages/aril-util-custom_pages.mjs +0 -5
  868. package/esm2022/util/custom_pages/index.mjs +0 -2
  869. package/esm2022/util/custom_pages/src/notFound.component.mjs +0 -65
  870. package/esm2022/util/directives/aril-util-directives.mjs +0 -5
  871. package/esm2022/util/directives/index.mjs +0 -4
  872. package/esm2022/util/directives/src/detail-page-customization/detail-page-customization.directive.mjs +0 -298
  873. package/esm2022/util/directives/src/detail-page-customization/index.mjs +0 -3
  874. package/esm2022/util/directives/src/detail-page-customization/models.mjs +0 -4
  875. package/esm2022/util/directives/src/dialog-component/plugin-dialog.component.mjs +0 -26
  876. package/esm2022/util/directives/src/dialog-service/plugin-dialog.service.mjs +0 -16
  877. package/esm2022/util/index.mjs +0 -2
  878. package/esm2022/util/init-event/aril-util-init-event.mjs +0 -5
  879. package/esm2022/util/init-event/index.mjs +0 -2
  880. package/esm2022/util/init-event/src/init-event.directive.mjs +0 -22
  881. package/esm2022/util/lib/aril-util-lib.mjs +0 -5
  882. package/esm2022/util/lib/index.mjs +0 -5
  883. package/esm2022/util/lib/src/interfaces.mjs +0 -4
  884. package/esm2022/util/lib/src/module-router.mjs +0 -16
  885. package/esm2022/util/lib/src/types.mjs +0 -6
  886. package/esm2022/util/lib/src/validators/iban.validator.mjs +0 -189
  887. package/esm2022/util/lib/src/validators/index.mjs +0 -5
  888. package/esm2022/util/lib/src/validators/max-array-length.validator.mjs +0 -16
  889. package/esm2022/util/lib/src/validators/min-array-length.validator.mjs +0 -16
  890. package/esm2022/util/lib/src/validators/tckn.validator.mjs +0 -39
  891. package/esm2022/util/lib/src/validators/validators.mjs +0 -16
  892. package/esm2022/util/loaders/aril-util-loaders.mjs +0 -5
  893. package/esm2022/util/loaders/index.mjs +0 -3
  894. package/esm2022/util/loaders/script/script.loader.service.mjs +0 -61
  895. package/esm2022/util/loaders/style/style.loader.service.mjs +0 -61
  896. package/esm2022/util/pipes/aril-util-pipes.mjs +0 -5
  897. package/esm2022/util/pipes/index.mjs +0 -7
  898. package/esm2022/util/pipes/src/distance-to-now.pipe.mjs +0 -38
  899. package/esm2022/util/pipes/src/get-column-by-field.pipe.mjs +0 -17
  900. package/esm2022/util/pipes/src/parse.pipe.mjs +0 -22
  901. package/esm2022/util/pipes/src/round-number.pipe.mjs +0 -65
  902. package/esm2022/util/pipes/src/safe.pipe.mjs +0 -34
  903. package/esm2022/util/pipes/src/translate-json/index.mjs +0 -2
  904. package/esm2022/util/pipes/src/translate-json/translate-json.pipe.mjs +0 -41
  905. package/esm2022/util/primitive-extensions/aril-util-primitive-extensions.mjs +0 -5
  906. package/esm2022/util/primitive-extensions/index.mjs +0 -5
  907. package/esm2022/util/primitive-extensions/src/boolean.extensions.mjs +0 -2
  908. package/esm2022/util/primitive-extensions/src/date.extensions.mjs +0 -116
  909. package/esm2022/util/primitive-extensions/src/number.extensions.mjs +0 -39
  910. package/esm2022/util/primitive-extensions/src/string.extensions.mjs +0 -23
  911. package/esm2022/util/pub-sub/aril-util-pub-sub.mjs +0 -5
  912. package/esm2022/util/pub-sub/index.mjs +0 -2
  913. package/esm2022/util/pub-sub/src/pub-sub.service.mjs +0 -30
  914. package/esm2022/util/sync-active-tab-route/aril-util-sync-active-tab-route.mjs +0 -5
  915. package/esm2022/util/sync-active-tab-route/index.mjs +0 -2
  916. package/esm2022/util/sync-active-tab-route/src/sync-active-tab-route.directive.mjs +0 -45
  917. package/esm2022/util/unwrap/aril-util-unwrap.mjs +0 -5
  918. package/esm2022/util/unwrap/index.mjs +0 -2
  919. package/esm2022/util/unwrap/src/unwrap-tag.directive.mjs +0 -24
  920. package/fesm2022/aril-app.component-hxaLgwmC.mjs +0 -81
  921. package/fesm2022/aril-app.component-hxaLgwmC.mjs.map +0 -1
  922. package/fesm2022/aril-boot-config-api.mjs +0 -126
  923. package/fesm2022/aril-boot-config-api.mjs.map +0 -1
  924. package/fesm2022/aril-boot-config-apps.mjs +0 -138
  925. package/fesm2022/aril-boot-config-apps.mjs.map +0 -1
  926. package/fesm2022/aril-boot-config-plugins.mjs +0 -159
  927. package/fesm2022/aril-boot-config-plugins.mjs.map +0 -1
  928. package/fesm2022/aril-boot-config-translate.mjs +0 -72
  929. package/fesm2022/aril-boot-config-translate.mjs.map +0 -1
  930. package/fesm2022/aril-boot-host.mjs +0 -108
  931. package/fesm2022/aril-boot-host.mjs.map +0 -1
  932. package/fesm2022/aril-boot-mfe-app.component-s1a-tkOD.mjs +0 -80
  933. package/fesm2022/aril-boot-mfe-app.component-s1a-tkOD.mjs.map +0 -1
  934. package/fesm2022/aril-boot-mfe-aril-boot-mfe-wLTqwDtz.mjs +0 -369
  935. package/fesm2022/aril-boot-mfe-aril-boot-mfe-wLTqwDtz.mjs.map +0 -1
  936. package/fesm2022/aril-boot-mfe.mjs +0 -19
  937. package/fesm2022/aril-boot-mfe.mjs.map +0 -1
  938. package/fesm2022/aril-boot.mjs +0 -8
  939. package/fesm2022/aril-boot.mjs.map +0 -1
  940. package/fesm2022/aril-http.mjs +0 -437
  941. package/fesm2022/aril-http.mjs.map +0 -1
  942. package/fesm2022/aril-i18n.mjs +0 -71
  943. package/fesm2022/aril-i18n.mjs.map +0 -1
  944. package/fesm2022/aril-keycloak.mjs +0 -99
  945. package/fesm2022/aril-keycloak.mjs.map +0 -1
  946. package/fesm2022/aril-provider.mjs +0 -74
  947. package/fesm2022/aril-provider.mjs.map +0 -1
  948. package/fesm2022/aril-theme-layout.mjs +0 -3015
  949. package/fesm2022/aril-theme-layout.mjs.map +0 -1
  950. package/fesm2022/aril-theme.mjs +0 -8
  951. package/fesm2022/aril-theme.mjs.map +0 -1
  952. package/fesm2022/aril-ui-autoComplete.mjs +0 -116
  953. package/fesm2022/aril-ui-autoComplete.mjs.map +0 -1
  954. package/fesm2022/aril-ui-badge.mjs +0 -66
  955. package/fesm2022/aril-ui-badge.mjs.map +0 -1
  956. package/fesm2022/aril-ui-business-assetPicker.mjs +0 -189
  957. package/fesm2022/aril-ui-business-assetPicker.mjs.map +0 -1
  958. package/fesm2022/aril-ui-business-detailed-overlay-panel.mjs +0 -68
  959. package/fesm2022/aril-ui-business-detailed-overlay-panel.mjs.map +0 -1
  960. package/fesm2022/aril-ui-business-enumPicker.mjs +0 -131
  961. package/fesm2022/aril-ui-business-enumPicker.mjs.map +0 -1
  962. package/fesm2022/aril-ui-business-image-viewer.mjs +0 -118
  963. package/fesm2022/aril-ui-business-image-viewer.mjs.map +0 -1
  964. package/fesm2022/aril-ui-business-multiple-ref-value.mjs +0 -30
  965. package/fesm2022/aril-ui-business-multiple-ref-value.mjs.map +0 -1
  966. package/fesm2022/aril-ui-business-notification-templates-dialog.mjs +0 -70
  967. package/fesm2022/aril-ui-business-notification-templates-dialog.mjs.map +0 -1
  968. package/fesm2022/aril-ui-business-operation-types-dialog.mjs +0 -83
  969. package/fesm2022/aril-ui-business-operation-types-dialog.mjs.map +0 -1
  970. package/fesm2022/aril-ui-business-ref-value.mjs +0 -46
  971. package/fesm2022/aril-ui-business-ref-value.mjs.map +0 -1
  972. package/fesm2022/aril-ui-business-rolePicker.mjs +0 -78
  973. package/fesm2022/aril-ui-business-rolePicker.mjs.map +0 -1
  974. package/fesm2022/aril-ui-business-userPicker.mjs +0 -50
  975. package/fesm2022/aril-ui-business-userPicker.mjs.map +0 -1
  976. package/fesm2022/aril-ui-business.mjs +0 -8
  977. package/fesm2022/aril-ui-business.mjs.map +0 -1
  978. package/fesm2022/aril-ui-button.mjs +0 -62
  979. package/fesm2022/aril-ui-button.mjs.map +0 -1
  980. package/fesm2022/aril-ui-calendar.mjs +0 -231
  981. package/fesm2022/aril-ui-calendar.mjs.map +0 -1
  982. package/fesm2022/aril-ui-charts.mjs +0 -1666
  983. package/fesm2022/aril-ui-charts.mjs.map +0 -1
  984. package/fesm2022/aril-ui-checkbox.mjs +0 -50
  985. package/fesm2022/aril-ui-checkbox.mjs.map +0 -1
  986. package/fesm2022/aril-ui-chip.mjs +0 -136
  987. package/fesm2022/aril-ui-chip.mjs.map +0 -1
  988. package/fesm2022/aril-ui-collapse-reorder-list.mjs +0 -60
  989. package/fesm2022/aril-ui-collapse-reorder-list.mjs.map +0 -1
  990. package/fesm2022/aril-ui-dxEditor.mjs +0 -33
  991. package/fesm2022/aril-ui-dxEditor.mjs.map +0 -1
  992. package/fesm2022/aril-ui-dxField.mjs +0 -26
  993. package/fesm2022/aril-ui-dxField.mjs.map +0 -1
  994. package/fesm2022/aril-ui-editor.mjs +0 -203
  995. package/fesm2022/aril-ui-editor.mjs.map +0 -1
  996. package/fesm2022/aril-ui-field.mjs +0 -52
  997. package/fesm2022/aril-ui-field.mjs.map +0 -1
  998. package/fesm2022/aril-ui-fileUpload.mjs +0 -80
  999. package/fesm2022/aril-ui-fileUpload.mjs.map +0 -1
  1000. package/fesm2022/aril-ui-form.mjs +0 -86
  1001. package/fesm2022/aril-ui-form.mjs.map +0 -1
  1002. package/fesm2022/aril-ui-img-viewer.mjs +0 -64
  1003. package/fesm2022/aril-ui-img-viewer.mjs.map +0 -1
  1004. package/fesm2022/aril-ui-json-diff-comparison.mjs +0 -56
  1005. package/fesm2022/aril-ui-json-diff-comparison.mjs.map +0 -1
  1006. package/fesm2022/aril-ui-lib.mjs +0 -376
  1007. package/fesm2022/aril-ui-lib.mjs.map +0 -1
  1008. package/fesm2022/aril-ui-loader.mjs +0 -21
  1009. package/fesm2022/aril-ui-loader.mjs.map +0 -1
  1010. package/fesm2022/aril-ui-mask.mjs +0 -42
  1011. package/fesm2022/aril-ui-mask.mjs.map +0 -1
  1012. package/fesm2022/aril-ui-multiSelect.mjs +0 -64
  1013. package/fesm2022/aril-ui-multiSelect.mjs.map +0 -1
  1014. package/fesm2022/aril-ui-number.mjs +0 -45
  1015. package/fesm2022/aril-ui-number.mjs.map +0 -1
  1016. package/fesm2022/aril-ui-operation-types-dialog.mjs +0 -98
  1017. package/fesm2022/aril-ui-operation-types-dialog.mjs.map +0 -1
  1018. package/fesm2022/aril-ui-overlayPanel.mjs +0 -27
  1019. package/fesm2022/aril-ui-overlayPanel.mjs.map +0 -1
  1020. package/fesm2022/aril-ui-panel.mjs +0 -40
  1021. package/fesm2022/aril-ui-panel.mjs.map +0 -1
  1022. package/fesm2022/aril-ui-password.mjs +0 -36
  1023. package/fesm2022/aril-ui-password.mjs.map +0 -1
  1024. package/fesm2022/aril-ui-pdf-viewer.mjs +0 -34
  1025. package/fesm2022/aril-ui-pdf-viewer.mjs.map +0 -1
  1026. package/fesm2022/aril-ui-progressbar.mjs +0 -25
  1027. package/fesm2022/aril-ui-progressbar.mjs.map +0 -1
  1028. package/fesm2022/aril-ui-radioButton.mjs +0 -37
  1029. package/fesm2022/aril-ui-radioButton.mjs.map +0 -1
  1030. package/fesm2022/aril-ui-relativeDateSelector.mjs +0 -285
  1031. package/fesm2022/aril-ui-relativeDateSelector.mjs.map +0 -1
  1032. package/fesm2022/aril-ui-selectBox.mjs +0 -74
  1033. package/fesm2022/aril-ui-selectBox.mjs.map +0 -1
  1034. package/fesm2022/aril-ui-switch.mjs +0 -30
  1035. package/fesm2022/aril-ui-switch.mjs.map +0 -1
  1036. package/fesm2022/aril-ui-table-expand.mjs +0 -194
  1037. package/fesm2022/aril-ui-table-expand.mjs.map +0 -1
  1038. package/fesm2022/aril-ui-table.mjs +0 -833
  1039. package/fesm2022/aril-ui-table.mjs.map +0 -1
  1040. package/fesm2022/aril-ui-tag.mjs +0 -27
  1041. package/fesm2022/aril-ui-tag.mjs.map +0 -1
  1042. package/fesm2022/aril-ui-tagBox.mjs +0 -62
  1043. package/fesm2022/aril-ui-tagBox.mjs.map +0 -1
  1044. package/fesm2022/aril-ui-text.mjs +0 -54
  1045. package/fesm2022/aril-ui-text.mjs.map +0 -1
  1046. package/fesm2022/aril-ui-textArea.mjs +0 -34
  1047. package/fesm2022/aril-ui-textArea.mjs.map +0 -1
  1048. package/fesm2022/aril-ui-toggle-button.mjs +0 -32
  1049. package/fesm2022/aril-ui-toggle-button.mjs.map +0 -1
  1050. package/fesm2022/aril-ui-tooltip.mjs +0 -30
  1051. package/fesm2022/aril-ui-tooltip.mjs.map +0 -1
  1052. package/fesm2022/aril-ui-translate-input.mjs +0 -207
  1053. package/fesm2022/aril-ui-translate-input.mjs.map +0 -1
  1054. package/fesm2022/aril-ui-tree.mjs +0 -60
  1055. package/fesm2022/aril-ui-tree.mjs.map +0 -1
  1056. package/fesm2022/aril-ui-treeSelect.mjs +0 -48
  1057. package/fesm2022/aril-ui-treeSelect.mjs.map +0 -1
  1058. package/fesm2022/aril-ui-treeTable.mjs +0 -62
  1059. package/fesm2022/aril-ui-treeTable.mjs.map +0 -1
  1060. package/fesm2022/aril-ui-value.mjs +0 -214
  1061. package/fesm2022/aril-ui-value.mjs.map +0 -1
  1062. package/fesm2022/aril-ui.mjs +0 -8
  1063. package/fesm2022/aril-ui.mjs.map +0 -1
  1064. package/fesm2022/aril-util-block.mjs +0 -71
  1065. package/fesm2022/aril-util-block.mjs.map +0 -1
  1066. package/fesm2022/aril-util-custom_pages.mjs +0 -72
  1067. package/fesm2022/aril-util-custom_pages.mjs.map +0 -1
  1068. package/fesm2022/aril-util-directives.mjs +0 -344
  1069. package/fesm2022/aril-util-directives.mjs.map +0 -1
  1070. package/fesm2022/aril-util-init-event.mjs +0 -29
  1071. package/fesm2022/aril-util-init-event.mjs.map +0 -1
  1072. package/fesm2022/aril-util-lib.mjs +0 -307
  1073. package/fesm2022/aril-util-lib.mjs.map +0 -1
  1074. package/fesm2022/aril-util-loaders.mjs +0 -126
  1075. package/fesm2022/aril-util-loaders.mjs.map +0 -1
  1076. package/fesm2022/aril-util-pipes.mjs +0 -213
  1077. package/fesm2022/aril-util-pipes.mjs.map +0 -1
  1078. package/fesm2022/aril-util-primitive-extensions.mjs +0 -179
  1079. package/fesm2022/aril-util-primitive-extensions.mjs.map +0 -1
  1080. package/fesm2022/aril-util-pub-sub.mjs +0 -37
  1081. package/fesm2022/aril-util-pub-sub.mjs.map +0 -1
  1082. package/fesm2022/aril-util-sync-active-tab-route.mjs +0 -52
  1083. package/fesm2022/aril-util-sync-active-tab-route.mjs.map +0 -1
  1084. package/fesm2022/aril-util-unwrap.mjs +0 -31
  1085. package/fesm2022/aril-util-unwrap.mjs.map +0 -1
  1086. package/fesm2022/aril-util.mjs +0 -8
  1087. package/fesm2022/aril-util.mjs.map +0 -1
  1088. package/fesm2022/aril.mjs +0 -456
  1089. package/fesm2022/aril.mjs.map +0 -1
  1090. package/http/index.d.ts +0 -8
  1091. package/http/lib/enums.d.ts +0 -31
  1092. package/http/lib/interfaces.d.ts +0 -27
  1093. package/http/src/httpBackend.d.ts +0 -8
  1094. package/http/src/httpClient.d.ts +0 -9
  1095. package/http/src/interceptor/accept-language.interceptor.d.ts +0 -2
  1096. package/http/src/serviceBase.d.ts +0 -8
  1097. package/http/src/serviceMockBase.d.ts +0 -6
  1098. package/http/src/serviceRequest.d.ts +0 -4
  1099. package/http/src/serviceStateMethods.d.ts +0 -17
  1100. package/i18n/src/folder-name-token.d.ts +0 -2
  1101. package/i18n/src/i18n.module.d.ts +0 -7
  1102. package/i18n/src/loader.d.ts +0 -8
  1103. package/i18n/src/provideI18n.d.ts +0 -2
  1104. package/i18n/src/provideScope.d.ts +0 -5
  1105. package/index.d.ts +0 -5
  1106. package/keycloak/index.d.ts +0 -1
  1107. package/keycloak/src/auth.interceptor.d.ts +0 -3
  1108. package/provider/src/index.d.ts +0 -4
  1109. package/provider/src/prodiveHost.d.ts +0 -3
  1110. package/provider/src/prodiveHostRouter.d.ts +0 -2
  1111. package/provider/src/provideHostKeycloak.d.ts +0 -5
  1112. package/provider/src/provideLocaleId.d.ts +0 -2
  1113. package/scripts/util/blockui.min.js +0 -7
  1114. package/styles/ui/ui.common.scss +0 -42
  1115. package/styles/util/blockui.css +0 -56
  1116. package/theme/index.d.ts +0 -1
  1117. package/theme/layout/app/breadcrumb/app.breadcrumb.component.d.ts +0 -25
  1118. package/theme/layout/app/chatbot/app.chatbot.component.d.ts +0 -35
  1119. package/theme/layout/app/expandableMenu/expandable-menu.component.d.ts +0 -72
  1120. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.d.ts +0 -2031
  1121. package/theme/layout/app/favorite-pages/favorite-pages.service.d.ts +0 -56
  1122. package/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.d.ts +0 -36
  1123. package/theme/layout/app/general-search/general-search.component.d.ts +0 -22
  1124. package/theme/layout/app/general-search/helpers.d.ts +0 -7
  1125. package/theme/layout/app/general-search/models.d.ts +0 -131
  1126. package/theme/layout/app/history/history-sidebar.component.d.ts +0 -2018
  1127. package/theme/layout/app/history/history.service.d.ts +0 -36
  1128. package/theme/layout/app/layout/app.layout.component.d.ts +0 -47
  1129. package/theme/layout/app/layout/mfe.layout.component.d.ts +0 -10
  1130. package/theme/layout/app/menu/app.menu.component.html +0 -14
  1131. package/theme/layout/app/menu/app.menu.component.ts +0 -350
  1132. package/theme/layout/app/notifications/notifications-sidebar.component.d.ts +0 -2306
  1133. package/theme/layout/app/profileSidebar/app.profilesidebar.component.d.ts +0 -29
  1134. package/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.d.ts +0 -30
  1135. package/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.d.ts +0 -52
  1136. package/theme/layout/app/profileSidebar/profile.service.d.ts +0 -72
  1137. package/theme/layout/app/sidebar/app.sidebar.component.html +0 -24
  1138. package/theme/layout/app/sidebar/app.sidebar.component.ts +0 -44
  1139. package/theme/layout/app/site-map/site-map-sidebar.component.d.ts +0 -2025
  1140. package/theme/layout/app/static-sidebar/static-sidebar.component.d.ts +0 -57
  1141. package/theme/layout/app/topbar/app.topbar.component.d.ts +0 -35
  1142. package/theme/layout/index.d.ts +0 -7
  1143. package/theme/layout/service/app.layout.service.d.ts +0 -69
  1144. package/theme/layout/service/app.menu.service.d.ts +0 -22
  1145. package/theme/layout/service/breadcrumb.service.d.ts +0 -10
  1146. package/theme/layout/service/interfaces/enum.d.ts +0 -12
  1147. package/theme/layout/service/interfaces/interfaces.d.ts +0 -131
  1148. package/theme/layout/service/menuchangeevent.d.ts +0 -4
  1149. package/theme/layout/service/notifications.service.d.ts +0 -12
  1150. package/theme/layout/service/search.service.d.ts +0 -11
  1151. package/theme/layout/service/selection-group.service.d.ts +0 -17
  1152. package/theme/styles/theme/dark/blue/theme.scss +0 -14
  1153. package/theme/styles/theme/dark/lena/theme.scss +0 -14
  1154. package/theme/styles/theme/dark/orange/theme.scss +0 -14
  1155. package/theme/styles/theme/dark/thor/theme.scss +0 -14
  1156. package/theme/styles/theme/dark/yeap/theme.scss +0 -14
  1157. package/theme/styles/theme/light/blue/theme.scss +0 -14
  1158. package/theme/styles/theme/light/lena/theme.scss +0 -14
  1159. package/theme/styles/theme/light/orange/theme.scss +0 -14
  1160. package/theme/styles/theme/light/thor/theme.scss +0 -15
  1161. package/theme/styles/theme/light/yeap/theme.scss +0 -14
  1162. package/ui/autoComplete/src/auto-complete.component.d.ts +0 -31
  1163. package/ui/autoComplete/src/interfaces.d.ts +0 -28
  1164. package/ui/badge/src/badge.component.d.ts +0 -32
  1165. package/ui/button/src/button.component.d.ts +0 -28
  1166. package/ui/button/src/split-button.component.d.ts +0 -8
  1167. package/ui/calendar/src/calendar.component.d.ts +0 -63
  1168. package/ui/charts/index.d.ts +0 -12
  1169. package/ui/charts/src/amCharts/column/column-chart.component.d.ts +0 -25
  1170. package/ui/charts/src/amCharts/line/line-chart.component.d.ts +0 -26
  1171. package/ui/charts/src/amCharts/pie/pie-chart.component.d.ts +0 -24
  1172. package/ui/charts/src/highCharts/area/area-chart.component.d.ts +0 -20
  1173. package/ui/charts/src/highCharts/bar/bar-chart.component.d.ts +0 -26
  1174. package/ui/charts/src/highCharts/column/column-chart.component.d.ts +0 -28
  1175. package/ui/charts/src/highCharts/gauge/solid-gauge.component.d.ts +0 -38
  1176. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.d.ts +0 -32
  1177. package/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.d.ts +0 -24
  1178. package/ui/charts/src/highCharts/line/line-chart-series.component.d.ts +0 -21
  1179. package/ui/charts/src/highCharts/line/line-chart.component.d.ts +0 -21
  1180. package/ui/charts/src/highCharts/pie/pie-chart.component.d.ts +0 -27
  1181. package/ui/charts/src/theme/theme.d.ts +0 -5
  1182. package/ui/checkbox/src/check-box.component.d.ts +0 -12
  1183. package/ui/checkbox/src/tri-state-checkbox.component.d.ts +0 -9
  1184. package/ui/chip/index.d.ts +0 -1
  1185. package/ui/chip/src/chip.component.d.ts +0 -34
  1186. package/ui/collapse-reorder-list/index.d.ts +0 -1
  1187. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.d.ts +0 -21
  1188. package/ui/dxEditor/src/dx-editor.component.d.ts +0 -11
  1189. package/ui/dxField/src/dx-field.component.d.ts +0 -10
  1190. package/ui/editor/src/aril-editor.component.d.ts +0 -28
  1191. package/ui/editor/src/types.d.ts +0 -23
  1192. package/ui/field/src/field.component.d.ts +0 -30
  1193. package/ui/fileUpload/src/file-upload.component.d.ts +0 -49
  1194. package/ui/form/index.d.ts +0 -11
  1195. package/ui/form/src/form-submit-button.component.d.ts +0 -14
  1196. package/ui/form/src/form.component.d.ts +0 -8
  1197. package/ui/img-viewer/index.d.ts +0 -1
  1198. package/ui/img-viewer/src/img-viewer.component.d.ts +0 -13
  1199. package/ui/index.d.ts +0 -1
  1200. package/ui/json-diff-comparison/src/json-diff.component.d.ts +0 -13
  1201. package/ui/lib/index.d.ts +0 -12
  1202. package/ui/lib/src/form/form-error-message.component.d.ts +0 -9
  1203. package/ui/lib/src/form/form-error-message.directive.d.ts +0 -14
  1204. package/ui/lib/src/form/form-field-builder.d.ts +0 -8
  1205. package/ui/lib/src/form/form-validation.d.ts +0 -2
  1206. package/ui/lib/src/grid/enum-color-picker.pipe.d.ts +0 -9
  1207. package/ui/lib/src/grid/flex-grid.directive.d.ts +0 -6
  1208. package/ui/lib/src/input/baseInput.d.ts +0 -7
  1209. package/ui/lib/src/input/common-input-validators.service.d.ts +0 -20
  1210. package/ui/lib/src/input/dx-input-error-message.pipe.d.ts +0 -11
  1211. package/ui/lib/src/input/input-disabled.directive.d.ts +0 -9
  1212. package/ui/lib/src/input/input-error-message.pipe.d.ts +0 -10
  1213. package/ui/lib/src/input/input-transforms.d.ts +0 -5
  1214. package/ui/lib/src/input/value-accessor.directive.d.ts +0 -9
  1215. package/ui/loader/src/loader.component.d.ts +0 -5
  1216. package/ui/mask/src/mask.component.d.ts +0 -21
  1217. package/ui/multiSelect/src/interfaces.d.ts +0 -32
  1218. package/ui/multiSelect/src/multi-select.component.d.ts +0 -28
  1219. package/ui/number/src/number.component.d.ts +0 -29
  1220. package/ui/operation-types-dialog/src/operation-types-dialog.component.d.ts +0 -33
  1221. package/ui/overlayPanel/src/overlay-panel.component.d.ts +0 -8
  1222. package/ui/panel/src/panel.component.d.ts +0 -14
  1223. package/ui/password/src/password.component.d.ts +0 -11
  1224. package/ui/pdf-viewer/src/pdf-viewer.component.d.ts +0 -19
  1225. package/ui/progressbar/src/progressbar.component.d.ts +0 -8
  1226. package/ui/radioButton/src/radio-button.component.d.ts +0 -22
  1227. package/ui/relativeDateSelector/index.d.ts +0 -1
  1228. package/ui/relativeDateSelector/src/enum.d.ts +0 -26
  1229. package/ui/relativeDateSelector/src/relative-date-selector.component.d.ts +0 -61
  1230. package/ui/selectBox/src/interfaces.d.ts +0 -32
  1231. package/ui/selectBox/src/select-box.component.d.ts +0 -30
  1232. package/ui/switch/src/switch.component.d.ts +0 -8
  1233. package/ui/table/index.d.ts +0 -35
  1234. package/ui/table/src/export-overlay-panel.component.d.ts +0 -39
  1235. package/ui/table/src/interfaces.d.ts +0 -145
  1236. package/ui/table/src/table-column.component.d.ts +0 -19
  1237. package/ui/table/src/table.component.d.ts +0 -107
  1238. package/ui/table-expand/index.d.ts +0 -20
  1239. package/ui/table-expand/src/table-column.component.d.ts +0 -28
  1240. package/ui/table-expand/src/table-expand-area.component.d.ts +0 -14
  1241. package/ui/table-expand/src/table.component.d.ts +0 -47
  1242. package/ui/tag/index.d.ts +0 -1
  1243. package/ui/tag/src/interface.d.ts +0 -1
  1244. package/ui/tag/src/tag.component.d.ts +0 -15
  1245. package/ui/tagBox/src/tag-box.component.d.ts +0 -17
  1246. package/ui/text/src/text.component.d.ts +0 -18
  1247. package/ui/textArea/src/text-area.component.d.ts +0 -12
  1248. package/ui/toggle-button/index.d.ts +0 -1
  1249. package/ui/toggle-button/src/toggle-button.component.d.ts +0 -10
  1250. package/ui/tooltip/src/tooltip-component.d.ts +0 -14
  1251. package/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.d.ts +0 -21
  1252. package/ui/translate-input/src/aril-lang-modal/constants.d.ts +0 -2
  1253. package/ui/translate-input/src/aril-translate-input.component.d.ts +0 -26
  1254. package/ui/translate-input/src/interface.d.ts +0 -12
  1255. package/ui/tree/src/tree.component.d.ts +0 -23
  1256. package/ui/treeSelect/src/treeSelect.component.d.ts +0 -23
  1257. package/ui/treeTable/src/tree-table.component.d.ts +0 -21
  1258. package/ui/value/src/value.component.d.ts +0 -43
  1259. package/ui-business/assetPicker/index.d.ts +0 -1
  1260. package/ui-business/assetPicker/src/asset-picker.component.d.ts +0 -48
  1261. package/ui-business/assetPicker/src/interface.d.ts +0 -74
  1262. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.d.ts +0 -31
  1263. package/ui-business/detailed-overlay-panel/src/interface.d.ts +0 -54
  1264. package/ui-business/enumPicker/index.d.ts +0 -1
  1265. package/ui-business/enumPicker/src/enum-picker.component.d.ts +0 -47
  1266. package/ui-business/enumPicker/src/interface.d.ts +0 -34
  1267. package/ui-business/image-viewer/index.d.ts +0 -1
  1268. package/ui-business/image-viewer/src/aril-image-viewer.component.d.ts +0 -20
  1269. package/ui-business/index.d.ts +0 -1
  1270. package/ui-business/multiple-ref-value/src/multiple-ref-value.component.d.ts +0 -16
  1271. package/ui-business/notification-templates-dialog/src/interface.d.ts +0 -17
  1272. package/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.d.ts +0 -18
  1273. package/ui-business/operation-types-dialog/src/operation-types-dialog.component.d.ts +0 -28
  1274. package/ui-business/ref-value/src/ref-value.component.d.ts +0 -20
  1275. package/ui-business/rolePicker/src/interface.d.ts +0 -44
  1276. package/ui-business/rolePicker/src/role-picker.component.d.ts +0 -25
  1277. package/ui-business/userPicker/index.d.ts +0 -1
  1278. package/ui-business/userPicker/src/interface.d.ts +0 -25
  1279. package/ui-business/userPicker/src/user-picker.component.d.ts +0 -18
  1280. package/util/block/src/block.d.ts +0 -28
  1281. package/util/custom_pages/src/notFound.component.d.ts +0 -5
  1282. package/util/directives/src/detail-page-customization/detail-page-customization.directive.d.ts +0 -26
  1283. package/util/directives/src/detail-page-customization/index.d.ts +0 -2
  1284. package/util/directives/src/detail-page-customization/models.d.ts +0 -53
  1285. package/util/directives/src/dialog-component/plugin-dialog.component.d.ts +0 -11
  1286. package/util/directives/src/dialog-service/plugin-dialog.service.d.ts +0 -7
  1287. package/util/index.d.ts +0 -1
  1288. package/util/init-event/index.d.ts +0 -1
  1289. package/util/init-event/src/init-event.directive.d.ts +0 -8
  1290. package/util/lib/src/interfaces.d.ts +0 -41
  1291. package/util/lib/src/module-router.d.ts +0 -5
  1292. package/util/lib/src/types.d.ts +0 -2290
  1293. package/util/lib/src/validators/iban.validator.d.ts +0 -7
  1294. package/util/lib/src/validators/max-array-length.validator.d.ts +0 -7
  1295. package/util/lib/src/validators/min-array-length.validator.d.ts +0 -7
  1296. package/util/lib/src/validators/tckn.validator.d.ts +0 -7
  1297. package/util/lib/src/validators/validators.d.ts +0 -7
  1298. package/util/loaders/index.d.ts +0 -2
  1299. package/util/loaders/script/script.loader.service.d.ts +0 -13
  1300. package/util/loaders/style/style.loader.service.d.ts +0 -13
  1301. package/util/pipes/src/distance-to-now.pipe.d.ts +0 -11
  1302. package/util/pipes/src/get-column-by-field.pipe.d.ts +0 -11
  1303. package/util/pipes/src/parse.pipe.d.ts +0 -7
  1304. package/util/pipes/src/round-number.pipe.d.ts +0 -11
  1305. package/util/pipes/src/safe.pipe.d.ts +0 -10
  1306. package/util/pipes/src/translate-json/index.d.ts +0 -1
  1307. package/util/pipes/src/translate-json/translate-json.pipe.d.ts +0 -10
  1308. package/util/primitive-extensions/src/date.extensions.d.ts +0 -8
  1309. package/util/primitive-extensions/src/number.extensions.d.ts +0 -12
  1310. package/util/primitive-extensions/src/string.extensions.d.ts +0 -11
  1311. package/util/pub-sub/src/pub-sub.service.d.ts +0 -21
  1312. package/util/sync-active-tab-route/src/sync-active-tab-route.directive.d.ts +0 -17
  1313. package/util/unwrap/src/unwrap-tag.directive.d.ts +0 -9
  1314. /package/boot/config/api/{index.d.ts → index.ts} +0 -0
  1315. /package/boot/config/apps/{index.d.ts → index.ts} +0 -0
  1316. /package/boot/config/plugins/{index.d.ts → index.ts} +0 -0
  1317. /package/boot/config/translate/{index.d.ts → index.ts} +0 -0
  1318. /package/boot/host/{index.d.ts → index.ts} +0 -0
  1319. /package/boot/mfe/{index.d.ts → index.ts} +0 -0
  1320. /package/i18n/{index.d.ts → index.ts} +0 -0
  1321. /package/provider/{index.d.ts → index.ts} +0 -0
  1322. /package/{public-api.d.ts → public-api.ts} +0 -0
  1323. /package/ui/autoComplete/{index.d.ts → index.ts} +0 -0
  1324. /package/ui/badge/{index.d.ts → index.ts} +0 -0
  1325. /package/ui/button/{index.d.ts → index.ts} +0 -0
  1326. /package/ui/calendar/{index.d.ts → index.ts} +0 -0
  1327. /package/ui/checkbox/{index.d.ts → index.ts} +0 -0
  1328. /package/ui/dxEditor/{index.d.ts → index.ts} +0 -0
  1329. /package/ui/dxField/{index.d.ts → index.ts} +0 -0
  1330. /package/ui/editor/{index.d.ts → index.ts} +0 -0
  1331. /package/ui/field/{index.d.ts → index.ts} +0 -0
  1332. /package/ui/fileUpload/{index.d.ts → index.ts} +0 -0
  1333. /package/ui/json-diff-comparison/{index.d.ts → index.ts} +0 -0
  1334. /package/ui/loader/{index.d.ts → index.ts} +0 -0
  1335. /package/ui/mask/{index.d.ts → index.ts} +0 -0
  1336. /package/ui/multiSelect/{index.d.ts → index.ts} +0 -0
  1337. /package/ui/number/{index.d.ts → index.ts} +0 -0
  1338. /package/ui/operation-types-dialog/{index.d.ts → index.ts} +0 -0
  1339. /package/ui/overlayPanel/{index.d.ts → index.ts} +0 -0
  1340. /package/ui/panel/{index.d.ts → index.ts} +0 -0
  1341. /package/ui/password/{index.d.ts → index.ts} +0 -0
  1342. /package/ui/pdf-viewer/{index.d.ts → index.ts} +0 -0
  1343. /package/ui/progressbar/{index.d.ts → index.ts} +0 -0
  1344. /package/ui/radioButton/{index.d.ts → index.ts} +0 -0
  1345. /package/ui/selectBox/{index.d.ts → index.ts} +0 -0
  1346. /package/ui/switch/{index.d.ts → index.ts} +0 -0
  1347. /package/ui/tagBox/{index.d.ts → index.ts} +0 -0
  1348. /package/ui/text/{index.d.ts → index.ts} +0 -0
  1349. /package/ui/textArea/{index.d.ts → index.ts} +0 -0
  1350. /package/ui/tooltip/{index.d.ts → index.ts} +0 -0
  1351. /package/ui/translate-input/{index.d.ts → index.ts} +0 -0
  1352. /package/ui/tree/{index.d.ts → index.ts} +0 -0
  1353. /package/ui/treeSelect/{index.d.ts → index.ts} +0 -0
  1354. /package/ui/treeTable/{index.d.ts → index.ts} +0 -0
  1355. /package/ui/value/{index.d.ts → index.ts} +0 -0
  1356. /package/ui-business/detailed-overlay-panel/{index.d.ts → index.ts} +0 -0
  1357. /package/ui-business/multiple-ref-value/{index.d.ts → index.ts} +0 -0
  1358. /package/ui-business/notification-templates-dialog/{index.d.ts → index.ts} +0 -0
  1359. /package/ui-business/operation-types-dialog/{index.d.ts → index.ts} +0 -0
  1360. /package/ui-business/ref-value/{index.d.ts → index.ts} +0 -0
  1361. /package/ui-business/rolePicker/{index.d.ts → index.ts} +0 -0
  1362. /package/util/block/{index.d.ts → index.ts} +0 -0
  1363. /package/util/custom_pages/{index.d.ts → index.ts} +0 -0
  1364. /package/util/directives/{index.d.ts → index.ts} +0 -0
  1365. /package/util/lib/{index.d.ts → index.ts} +0 -0
  1366. /package/util/lib/src/validators/{index.d.ts → index.ts} +0 -0
  1367. /package/util/pipes/{index.d.ts → index.ts} +0 -0
  1368. /package/util/primitive-extensions/{index.d.ts → index.ts} +0 -0
  1369. /package/util/primitive-extensions/src/{boolean.extensions.d.ts → boolean.extensions.ts} +0 -0
  1370. /package/util/pub-sub/{index.d.ts → index.ts} +0 -0
  1371. /package/util/sync-active-tab-route/{index.d.ts → index.ts} +0 -0
  1372. /package/util/unwrap/{index.d.ts → index.ts} +0 -0
@@ -1,3015 +0,0 @@
1
- import * as i3$1 from '@angular/common';
2
- import { CommonModule, UpperCasePipe, NgClass, NgTemplateOutlet } from '@angular/common';
3
- import * as i0 from '@angular/core';
4
- import { Injectable, effect, Component, signal, inject, computed, ViewChild, HostListener } from '@angular/core';
5
- import * as i1$1 from '@angular/router';
6
- import { Router, RouterModule, NavigationEnd, RouterLink, RouterOutlet, NavigationCancel, NavigationError, NavigationSkipped } from '@angular/router';
7
- import * as i8 from 'primeng/confirmdialog';
8
- import { ConfirmDialogModule } from 'primeng/confirmdialog';
9
- import * as i5$1 from 'primeng/confirmpopup';
10
- import { ConfirmPopupModule } from 'primeng/confirmpopup';
11
- import * as i6$4 from 'primeng/dialog';
12
- import { DialogModule } from 'primeng/dialog';
13
- import * as i7$3 from 'primeng/messages';
14
- import { MessagesModule } from 'primeng/messages';
15
- import * as i8$3 from 'primeng/toast';
16
- import { ToastModule } from 'primeng/toast';
17
- import { Observable, Subject, switchMap, BehaviorSubject, takeUntil, of, startWith, firstValueFrom, filter as filter$1, map as map$1, take } from 'rxjs';
18
- import { toSignal, toObservable } from '@angular/core/rxjs-interop';
19
- import { AvatarModule } from 'primeng/avatar';
20
- import * as i4 from 'primeng/button';
21
- import { ButtonModule } from 'primeng/button';
22
- import { ChipModule } from 'primeng/chip';
23
- import * as i2 from 'primeng/dynamicdialog';
24
- import { DialogService, DynamicDialogModule } from 'primeng/dynamicdialog';
25
- import * as i6$1 from 'primeng/sidebar';
26
- import { SidebarModule } from 'primeng/sidebar';
27
- import { SkeletonModule } from 'primeng/skeleton';
28
- import { TagModule } from 'primeng/tag';
29
- import * as i5 from '@ngneat/transloco';
30
- import { TranslocoModule, TranslocoService } from '@ngneat/transloco';
31
- import { ButtonComponent } from 'aril/ui/button';
32
- import * as i1 from '@angular/forms';
33
- import { FormControl, ReactiveFormsModule, FormsModule, Validators } from '@angular/forms';
34
- import * as i7 from 'primeng/password';
35
- import { PasswordModule } from 'primeng/password';
36
- import * as i9 from 'primeng/tooltip';
37
- import { TooltipModule } from 'primeng/tooltip';
38
- import { FieldComponent } from 'aril/ui/field';
39
- import * as i6 from 'aril/ui/form';
40
- import { ARiLFormModule } from 'aril/ui/form';
41
- import { __decorate } from 'tslib';
42
- import { Apps } from 'aril/boot/config/apps';
43
- import { RestClient, ServiceCall, HTTPMethods, ProxyTypes } from 'aril/http';
44
- import * as i3 from 'primeng/api';
45
- import { ConfirmationService, PrimeIcons } from 'primeng/api';
46
- import { TreeSelectModule } from 'primeng/treeselect';
47
- import { CheckboxComponent } from 'aril/ui/checkbox';
48
- import { MaskComponent } from 'aril/ui/mask';
49
- import { PasswordComponent } from 'aril/ui/password';
50
- import { SelectBoxComponent } from 'aril/ui/selectBox';
51
- import { TextComponent } from 'aril/ui/text';
52
- import { TextAreaComponent } from 'aril/ui/textArea';
53
- import { TreeSelectComponent } from 'aril/ui/treeSelect';
54
- import * as i2$1 from 'keycloak-angular';
55
- import * as i8$1 from 'primeng/badge';
56
- import { BadgeModule } from 'primeng/badge';
57
- import * as i6$3 from 'primeng/inputtext';
58
- import { InputTextModule } from 'primeng/inputtext';
59
- import * as i7$1 from 'primeng/scrollpanel';
60
- import { ScrollPanelModule } from 'primeng/scrollpanel';
61
- import * as i10 from '@fortawesome/angular-fontawesome';
62
- import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
63
- import { solidIcons, regularIcons } from 'aril/util/lib';
64
- import { Title } from '@angular/platform-browser';
65
- import * as i2$2 from 'aril/util/pub-sub';
66
- import { PubSubService } from 'aril/util/pub-sub';
67
- import * as i1$3 from 'aril/util/pipes';
68
- import { TranslateJsonPipe, SafePipe } from 'aril/util/pipes';
69
- import * as i9$1 from 'primeng/paginator';
70
- import { PaginatorModule } from 'primeng/paginator';
71
- import * as i7$2 from 'primeng/divider';
72
- import { DividerModule } from 'primeng/divider';
73
- import * as i9$2 from 'primeng/dropdown';
74
- import { DropdownModule } from 'primeng/dropdown';
75
- import { MenubarModule } from 'primeng/menubar';
76
- import * as i6$2 from 'primeng/autocomplete';
77
- import { AutoCompleteModule } from 'primeng/autocomplete';
78
- import { map, filter, distinctUntilChanged, switchMap as switchMap$1, catchError } from 'rxjs/operators';
79
- import { IconFieldModule } from 'primeng/iconfield';
80
- import { InputIconModule } from 'primeng/inputicon';
81
- import { RadioButtonModule } from 'primeng/radiobutton';
82
- import * as i8$2 from 'primeng/rating';
83
- import { RatingModule } from 'primeng/rating';
84
- import { API_CONFIGS } from 'aril/boot/config/api';
85
- import * as i1$2 from '@angular/common/http';
86
- import * as i4$1 from 'primeng/breadcrumb';
87
- import { BreadcrumbModule } from 'primeng/breadcrumb';
88
-
89
- const profileEndpoints = {
90
- getUser: 'user-management/users/get',
91
- updateUser: 'user-management/users/update',
92
- resetPassword: 'user-management/users/reset-password'
93
- };
94
- class ProfileService extends RestClient {
95
- constructor() {
96
- super(...arguments);
97
- this.states = {};
98
- }
99
- getUser(post) {
100
- return new Observable();
101
- }
102
- updateUser(post) {
103
- return new Observable();
104
- }
105
- resetPassword(post) {
106
- return new Observable();
107
- }
108
- getAllClientsList(post) {
109
- return new Observable();
110
- }
111
- getAllUserType(post) {
112
- return new Observable();
113
- }
114
- getAuthorityTree(request) {
115
- return new Observable();
116
- }
117
- getAllApp(post) {
118
- return new Observable();
119
- }
120
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ProfileService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
121
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ProfileService, providedIn: 'root' }); }
122
- }
123
- __decorate([
124
- ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, profileEndpoints.getUser, {}, Apps.MW)
125
- ], ProfileService.prototype, "getUser", null);
126
- __decorate([
127
- ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, profileEndpoints.updateUser, {}, Apps.MW)
128
- ], ProfileService.prototype, "updateUser", null);
129
- __decorate([
130
- ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, profileEndpoints.resetPassword, {}, Apps.MW)
131
- ], ProfileService.prototype, "resetPassword", null);
132
- __decorate([
133
- ServiceCall(HTTPMethods.POST, ProxyTypes.ServerSide, 'user-management/clients', {}, Apps.MW)
134
- ], ProfileService.prototype, "getAllClientsList", null);
135
- __decorate([
136
- ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, 'user-management/groups', {}, Apps.MW)
137
- ], ProfileService.prototype, "getAllUserType", null);
138
- __decorate([
139
- ServiceCall(HTTPMethods.GET, ProxyTypes.Native, 'authority-tree', {}, Apps.MW)
140
- ], ProfileService.prototype, "getAuthorityTree", null);
141
- __decorate([
142
- ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, 'user-management/clients', {}, Apps.MW)
143
- ], ProfileService.prototype, "getAllApp", null);
144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ProfileService, decorators: [{
145
- type: Injectable,
146
- args: [{ providedIn: 'root' }]
147
- }], propDecorators: { getUser: [], updateUser: [], resetPassword: [], getAllClientsList: [], getAllUserType: [], getAuthorityTree: [], getAllApp: [] } });
148
-
149
- class PasswordValidators {
150
- static { this.passwordMatchValidator = (passwordFormGroup) => {
151
- return (control) => {
152
- if (!control.value || !passwordFormGroup) {
153
- return null;
154
- }
155
- const passwordControl = passwordFormGroup.get('newPassword');
156
- const confirmPasswordValue = control.value;
157
- if (!passwordControl || !confirmPasswordValue) {
158
- return null;
159
- }
160
- const passwordsMatch = passwordControl.value === confirmPasswordValue;
161
- return passwordsMatch ? null : ({
162
- passwordMismatch: 'Şifreler eşleşmiyor. Lütfen aynı şifreyi giriniz.'
163
- });
164
- };
165
- }; }
166
- static minLength(length) {
167
- return (control) => {
168
- if (!control.value || control.value.length >= length) {
169
- return null;
170
- }
171
- return { minlength: `Şifre en az ${length} karakter olmalıdır.` };
172
- };
173
- }
174
- static required(control) {
175
- if (!control.value || control.value.trim() === '') {
176
- return { required: 'Bu alan zorunludur.' };
177
- }
178
- return null;
179
- }
180
- }
181
- class ChangePasswordModalComponent {
182
- constructor(formBuilder, dialogRef, dialogConfig, profileService, translocoService, messageService) {
183
- this.formBuilder = formBuilder;
184
- this.dialogRef = dialogRef;
185
- this.dialogConfig = dialogConfig;
186
- this.profileService = profileService;
187
- this.translocoService = translocoService;
188
- this.messageService = messageService;
189
- this.subjects = {
190
- resetPassword: new Subject()
191
- };
192
- this.resetPasswordService = toSignal(this.subjects.resetPassword.pipe(switchMap((data) => this.profileService.resetPassword(data))));
193
- this.userId = this.dialogConfig.data?.userId;
194
- effect(() => {
195
- const service = this.resetPasswordService();
196
- if (service?.response) {
197
- this.messageService.add({
198
- severity: 'success',
199
- summary: this.translocoService.translate('profileSidebar.changePasswordSuccess'),
200
- detail: this.translocoService.translate('profileSidebar.changePasswordSuccessDetail'),
201
- key: 'toast-root'
202
- });
203
- this.dialogRef.close({ status: 'success' });
204
- }
205
- }, { allowSignalWrites: true });
206
- this.initializeForm();
207
- if (!this.userId) {
208
- this.dialogRef.close('error');
209
- }
210
- }
211
- initializeForm() {
212
- this.passwordForm = this.formBuilder.group({
213
- newPassword: new FormControl('', [PasswordValidators.required, PasswordValidators.minLength(6)]),
214
- confirmPassword: new FormControl('', [PasswordValidators.required])
215
- });
216
- const confirmPasswordControl = this.passwordForm.get('confirmPassword');
217
- if (confirmPasswordControl) {
218
- confirmPasswordControl.setValidators([
219
- PasswordValidators.required,
220
- PasswordValidators.passwordMatchValidator(this.passwordForm)
221
- ]);
222
- }
223
- this.passwordForm.get('newPassword')?.valueChanges.subscribe(() => {
224
- confirmPasswordControl?.updateValueAndValidity({ emitEvent: false });
225
- });
226
- }
227
- getErrorMessage(controlName) {
228
- const control = this.passwordForm.get(controlName);
229
- if (control?.errors) {
230
- const errors = control.errors;
231
- const errorKeys = Object.keys(errors);
232
- if (errorKeys.length > 0) {
233
- return errors[errorKeys[0]];
234
- }
235
- }
236
- return '';
237
- }
238
- submit() {
239
- if (this.passwordForm.invalid) {
240
- this.passwordForm.markAllAsTouched();
241
- return;
242
- }
243
- const formValue = this.passwordForm.value;
244
- const resetRequest = {
245
- userId: this.userId,
246
- password: formValue.newPassword
247
- };
248
- this.subjects.resetPassword.next(resetRequest);
249
- }
250
- cancel() {
251
- this.dialogRef.close('cancel');
252
- }
253
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ChangePasswordModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: ProfileService }, { token: i5.TranslocoService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Component }); }
254
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: ChangePasswordModalComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div class=\"change-password-modal\" *transloco=\"let t; read: 'profileSidebar'\">\r\n\t<aril-form [formGroup]=\"passwordForm\">\r\n\t\t<aril-field [label]=\"t('newPassword')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<p-password \r\n\t\t\t\tformControlName=\"newPassword\"\r\n\t\t\t\t[placeholder]=\"t('newPassword')\"\r\n\t\t\t\t[feedback]=\"false\"\r\n\t\t\t\t[toggleMask]=\"true\"\r\n\t\t\t\tstyleClass=\"w-full\"\r\n\t\t\t\tautocomplete=\"new-password\"\r\n\t\t\t\t[pTooltip]=\"passwordForm.get('newPassword')?.invalid && passwordForm.get('newPassword')?.touched ? getErrorMessage('newPassword') : ''\"\r\n\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\ttooltipStyleClass=\"tooltipErrorMessage\">\r\n\t\t\t</p-password>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('confirmPassword')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<p-password \r\n\t\t\t\tformControlName=\"confirmPassword\"\r\n\t\t\t\t[placeholder]=\"t('confirmPassword')\"\r\n\t\t\t\t[feedback]=\"false\"\r\n\t\t\t\t[toggleMask]=\"true\"\r\n\t\t\t\tstyleClass=\"w-full\"\r\n\t\t\t\tautocomplete=\"new-password\"\r\n\t\t\t\t[pTooltip]=\"passwordForm.get('confirmPassword')?.invalid && passwordForm.get('confirmPassword')?.touched ? getErrorMessage('confirmPassword') : ''\"\r\n\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\ttooltipStyleClass=\"tooltipErrorMessage\">\r\n\t\t\t</p-password>\r\n\t\t</aril-field>\r\n\r\n\t\t<div class=\"col-12 flex justify-content-end mt-4 gap-2\">\r\n\t\t\t<aril-button\r\n\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t[label]=\"t('cancel')\"\r\n\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t(clickEvent)=\"cancel()\">\r\n\t\t\t</aril-button>\r\n\t\t\t<aril-button\r\n\t\t\t\tcolor=\"success\"\r\n\t\t\t\t[label]=\"t('save')\"\r\n\t\t\t\t[raised]=\"false\"\r\n\t\t\t\ticon=\"CHECK\"\r\n\t\t\t\t(clickEvent)=\"submit()\">\r\n\t\t\t</aril-button>\r\n\t\t</div>\r\n\t</aril-form>\r\n</div>\r\n", styles: [".change-password-modal :host ::ng-deep .p-password.ng-invalid.ng-touched .p-inputtext{border-color:var(--red-500, #ef4444);box-shadow:0 0 0 1px var(--red-500, #ef4444)}.change-password-modal :host ::ng-deep .p-password.ng-valid.ng-touched .p-inputtext{border-color:var(--green-500, #22c55e);box-shadow:0 0 0 1px var(--green-500, #22c55e)}.change-password-modal :host ::ng-deep .tooltipErrorMessage{background-color:var(--red-500, #ef4444)!important;color:#fff!important;font-size:.75rem!important;font-weight:500!important;border-radius:4px!important;padding:.5rem .75rem!important;box-shadow:0 2px 4px #0000001a!important}.change-password-modal :host ::ng-deep .tooltipErrorMessage .p-tooltip-arrow{border-top-color:var(--red-500, #ef4444)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ARiLFormModule }, { kind: "component", type: i6.FormComponent, selector: "aril-form", inputs: ["formGroup"] }, { kind: "component", type: FieldComponent, selector: "aril-field", inputs: ["label", "color", "labelWidth", "valueWidth", "labelPos", "markAsRequired", "cols", "infoData", "infoDataOverlayPanel"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "ngmodule", type: PasswordModule }, { kind: "component", type: i7.Password, selector: "p-password", inputs: ["ariaLabel", "ariaLabelledBy", "label", "disabled", "promptLabel", "mediumRegex", "strongRegex", "weakLabel", "mediumLabel", "maxLength", "strongLabel", "inputId", "feedback", "appendTo", "toggleMask", "inputStyleClass", "styleClass", "style", "inputStyle", "showTransitionOptions", "hideTransitionOptions", "autocomplete", "placeholder", "showClear", "autofocus", "variant"], outputs: ["onFocus", "onBlur", "onClear"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }] }); }
255
- }
256
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ChangePasswordModalComponent, decorators: [{
257
- type: Component,
258
- args: [{ standalone: true, imports: [
259
- CommonModule,
260
- ReactiveFormsModule,
261
- FormsModule,
262
- ARiLFormModule,
263
- FieldComponent,
264
- ButtonComponent,
265
- PasswordModule,
266
- TooltipModule,
267
- TranslocoModule
268
- ], template: "<div class=\"change-password-modal\" *transloco=\"let t; read: 'profileSidebar'\">\r\n\t<aril-form [formGroup]=\"passwordForm\">\r\n\t\t<aril-field [label]=\"t('newPassword')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<p-password \r\n\t\t\t\tformControlName=\"newPassword\"\r\n\t\t\t\t[placeholder]=\"t('newPassword')\"\r\n\t\t\t\t[feedback]=\"false\"\r\n\t\t\t\t[toggleMask]=\"true\"\r\n\t\t\t\tstyleClass=\"w-full\"\r\n\t\t\t\tautocomplete=\"new-password\"\r\n\t\t\t\t[pTooltip]=\"passwordForm.get('newPassword')?.invalid && passwordForm.get('newPassword')?.touched ? getErrorMessage('newPassword') : ''\"\r\n\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\ttooltipStyleClass=\"tooltipErrorMessage\">\r\n\t\t\t</p-password>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('confirmPassword')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<p-password \r\n\t\t\t\tformControlName=\"confirmPassword\"\r\n\t\t\t\t[placeholder]=\"t('confirmPassword')\"\r\n\t\t\t\t[feedback]=\"false\"\r\n\t\t\t\t[toggleMask]=\"true\"\r\n\t\t\t\tstyleClass=\"w-full\"\r\n\t\t\t\tautocomplete=\"new-password\"\r\n\t\t\t\t[pTooltip]=\"passwordForm.get('confirmPassword')?.invalid && passwordForm.get('confirmPassword')?.touched ? getErrorMessage('confirmPassword') : ''\"\r\n\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\ttooltipStyleClass=\"tooltipErrorMessage\">\r\n\t\t\t</p-password>\r\n\t\t</aril-field>\r\n\r\n\t\t<div class=\"col-12 flex justify-content-end mt-4 gap-2\">\r\n\t\t\t<aril-button\r\n\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t[label]=\"t('cancel')\"\r\n\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t(clickEvent)=\"cancel()\">\r\n\t\t\t</aril-button>\r\n\t\t\t<aril-button\r\n\t\t\t\tcolor=\"success\"\r\n\t\t\t\t[label]=\"t('save')\"\r\n\t\t\t\t[raised]=\"false\"\r\n\t\t\t\ticon=\"CHECK\"\r\n\t\t\t\t(clickEvent)=\"submit()\">\r\n\t\t\t</aril-button>\r\n\t\t</div>\r\n\t</aril-form>\r\n</div>\r\n", styles: [".change-password-modal :host ::ng-deep .p-password.ng-invalid.ng-touched .p-inputtext{border-color:var(--red-500, #ef4444);box-shadow:0 0 0 1px var(--red-500, #ef4444)}.change-password-modal :host ::ng-deep .p-password.ng-valid.ng-touched .p-inputtext{border-color:var(--green-500, #22c55e);box-shadow:0 0 0 1px var(--green-500, #22c55e)}.change-password-modal :host ::ng-deep .tooltipErrorMessage{background-color:var(--red-500, #ef4444)!important;color:#fff!important;font-size:.75rem!important;font-weight:500!important;border-radius:4px!important;padding:.5rem .75rem!important;box-shadow:0 2px 4px #0000001a!important}.change-password-modal :host ::ng-deep .tooltipErrorMessage .p-tooltip-arrow{border-top-color:var(--red-500, #ef4444)!important}\n"] }]
269
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }, { type: ProfileService }, { type: i5.TranslocoService }, { type: i3.MessageService }] });
270
-
271
- class EditProfileModalComponent {
272
- constructor(formBuilder, dialogRef, messageService, profileService, dialogConfig, translocoService) {
273
- this.formBuilder = formBuilder;
274
- this.dialogRef = dialogRef;
275
- this.messageService = messageService;
276
- this.profileService = profileService;
277
- this.dialogConfig = dialogConfig;
278
- this.translocoService = translocoService;
279
- this.subjects = {
280
- getTree: new Subject(),
281
- getUserType: new Subject(),
282
- getUserDetails: new Subject(),
283
- updateUser: new Subject(),
284
- getClientList: new Subject()
285
- };
286
- this.pageEdit = false;
287
- this.clientList = [];
288
- this.levelPairs = [];
289
- this.selectedUserTypeIds = [];
290
- this.updateUserService = toSignal(this.subjects.updateUser.pipe(switchMap((data) => this.profileService.updateUser(data))));
291
- this.getClientListService = toSignal(this.subjects.getClientList.pipe(switchMap((data) => this.profileService.getAllClientsList(data))));
292
- this.getUserDetailService = toSignal(this.subjects.getUserDetails.pipe(switchMap((data) => this.profileService.getUser(data))));
293
- this.getUserTypeService = toSignal(this.subjects.getUserType.pipe(switchMap((data) => this.profileService.getAllUserType(data))));
294
- this.getAuthorityTreeService = toSignal(this.subjects.getTree.pipe(switchMap((data) => this.profileService.getAuthorityTree(data))));
295
- this.userProfile = this.dialogConfig.data?.userProfile;
296
- this.initializeEffects();
297
- this.initializeForm();
298
- }
299
- initializeEffects() {
300
- this.subjects.getTree.next(0);
301
- this.subjects.getUserType.next({ first: 0, max: 100 });
302
- this.subjects.getClientList.next({ first: 0, max: 100 });
303
- if (this.dialogConfig?.data?.item?.id) {
304
- this.subjects.getUserDetails.next({ id: this.dialogConfig.data.item.id });
305
- }
306
- effect(() => {
307
- const service = this.updateUserService();
308
- if (service?.response) {
309
- this.messageService.add({
310
- severity: 'success',
311
- summary: this.translocoService.translate('profileSidebar.updateSuccess'),
312
- detail: this.translocoService.translate('profileSidebar.updateSuccessDetail'),
313
- key: 'toast-root'
314
- });
315
- this.dialogRef.close({ status: 'success', data: service.response });
316
- }
317
- }, { allowSignalWrites: true });
318
- effect(() => {
319
- if (this.getClientListService()?.response) {
320
- this.prepareClientListDropdown(this.getClientListService()?.response);
321
- }
322
- });
323
- effect(() => {
324
- if (this.getUserTypeService()?.response) {
325
- this.userTypeDatas = this.getUserTypeService()?.response;
326
- this.userTypeItems = this.userTypeDatas.map((item) => ({
327
- text: item.name,
328
- key: item.id
329
- }));
330
- this.initializeForm();
331
- }
332
- });
333
- effect(() => {
334
- if (this.getUserDetailService()?.response) {
335
- this.updateUserData = this.getUserDetailService()?.response;
336
- this.initializeForm();
337
- }
338
- });
339
- effect(() => {
340
- if (this.getAuthorityTreeService()?.response) {
341
- this.treeData = this.getAuthorityTreeService()?.response;
342
- this.treeItems = this.mapTreeData(this.treeData);
343
- }
344
- });
345
- }
346
- ngOnInit() {
347
- if (!this.userProfile) {
348
- this.dialogRef.close('error');
349
- }
350
- }
351
- initializeForm() {
352
- this.updateUserData = this.getUserDetailService()?.response;
353
- const userTypesFromResponse = this.userProfile?.userTypes || [];
354
- const userTypeDatas = this.userTypeDatas || [];
355
- this.selectedUserTypeIds = userTypeDatas
356
- .filter((type) => userTypesFromResponse.includes(type.name))
357
- .map((type) => type.id);
358
- this.userTypeItems = userTypeDatas.map((type) => ({
359
- label: type.name,
360
- value: type.id
361
- }));
362
- this.profileForm = this.formBuilder.group({
363
- id: new FormControl(this.userProfile?.id || null),
364
- systemUser: new FormControl({ value: this.userProfile?.systemUser ?? true, disabled: false }),
365
- clientOfSystemUser: new FormControl({ value: this.userProfile?.clientOfSystemUser || '', disabled: false }),
366
- userTypeId: new FormControl({ value: this.selectedUserTypeIds[0], disabled: false }),
367
- regions: new FormControl({ value: this.userProfile?.regions || '', disabled: false }),
368
- userName: new FormControl({ value: this.userProfile?.userName || '', disabled: true }, [Validators.required]),
369
- firstName: new FormControl(this.userProfile?.firstName || '', [Validators.required]),
370
- lastName: new FormControl(this.userProfile?.lastName || ''),
371
- email: new FormControl(this.userProfile?.email || '', [Validators.email, Validators.required]),
372
- phone: new FormControl(Array.isArray(this.userProfile?.phone) ? this.userProfile.phone[0] || '' : this.userProfile?.phone || ''),
373
- tckn: new FormControl(Array.isArray(this.userProfile?.tckn) ? this.userProfile.tckn[0] || '' : '', [Validators.required]),
374
- photoUrl: new FormControl(this.userProfile?.photoUrl || ''),
375
- enabled: new FormControl({ value: this.userProfile?.enabled ?? true, disabled: false }),
376
- emailVerified: new FormControl({ value: this.userProfile?.emailVerified ?? true, disabled: false }),
377
- notes: new FormControl(this.userProfile?.notes || ''),
378
- password: new FormControl(null)
379
- });
380
- }
381
- submit() {
382
- const rawValue = this.profileForm.getRawValue();
383
- const updateRequest = {
384
- ...rawValue,
385
- id: this.userProfile.id,
386
- phone: Array.isArray(rawValue.phone) ? rawValue.phone : [rawValue.phone],
387
- tckn: Array.isArray(rawValue.tckn) ? rawValue.tckn : [rawValue.tckn],
388
- regions: this.levelPairs,
389
- photoUrl: Array.isArray(rawValue.photoUrl) ? rawValue.photoUrl : [rawValue.photoUrl],
390
- notes: Array.isArray(rawValue.notes) ? rawValue.notes : [rawValue.notes]
391
- };
392
- this.subjects.updateUser.next(updateRequest);
393
- }
394
- cancel() {
395
- this.dialogRef.close('cancel');
396
- }
397
- prepareClientListDropdown(clientListParam) {
398
- this.clientList = clientListParam.map((clientItem) => ({
399
- key: clientItem.clientReferenceKey,
400
- text: clientItem.name
401
- }));
402
- }
403
- mapTreeData(treeData) {
404
- return treeData.map((item) => ({
405
- key: item.startLevel,
406
- label: item.name,
407
- value: item.id,
408
- children: item.children ? this.mapTreeData(item.children) : []
409
- }));
410
- }
411
- nodeSelect(event) {
412
- const { startLevel, endLevel } = event.node.data;
413
- const index = this.levelPairs.findIndex((pair) => pair.startLevel === startLevel && pair.endLevel === endLevel);
414
- index === -1 ? this.levelPairs.push({ startLevel, endLevel }) : this.levelPairs.splice(index, 1);
415
- }
416
- nodeUnselect(event) {
417
- const { startLevel, endLevel } = event.node.data;
418
- const index = this.levelPairs.findIndex((pair) => pair.startLevel === startLevel && pair.endLevel === endLevel);
419
- if (index !== -1)
420
- this.levelPairs.splice(index, 1);
421
- }
422
- clear() {
423
- this.levelPairs = [];
424
- }
425
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: EditProfileModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DynamicDialogRef }, { token: i3.MessageService }, { token: ProfileService }, { token: i2.DynamicDialogConfig }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
426
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: EditProfileModalComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div *transloco=\"let t; read: 'profileSidebar'\">\r\n\t<aril-form [formGroup]=\"profileForm\">\r\n\t\t<aril-field [label]=\"t('userStatus')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-checkbox [label]=\"' '\" formControlName=\"enabled\" [disabled]=\"true\"></aril-checkbox>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('systemUser')\" [cols]=\"{ xl: 6, lg: 6, md: 12, sm: 12 }\">\r\n\t\t\t<aril-checkbox [label]=\"' '\" formControlName=\"systemUser\" [disabled]=\"true\"></aril-checkbox>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('userType')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-select-box formControlName=\"userTypeId\" [items]=\"userTypeItems\" itemKey=\"value\" itemText=\"label\" [placeholder]=\"t('select')\"></aril-select-box>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('systemUserApp')\" [cols]=\"{ xl: 6, lg: 6, md: 12, sm: 12 }\">\r\n\t\t\t<aril-select-box formControlName=\"clientOfSystemUser\" [items]=\"clientList\" itemText=\"text\" itemKey=\"key\" [placeholder]=\"t('select')\"></aril-select-box>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('username')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-text formControlName=\"userName\" [disabled]=\"true\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('userPassword')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-password formControlName=\"password\" [placeholder]=\"'&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;'\"></aril-password>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('firstName')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-text formControlName=\"firstName\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('lastName')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-text formControlName=\"lastName\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('email')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-text formControlName=\"email\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('phone')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-mask mask=\"(999) 999 99 99\" [placeholder]=\"t('phoneExample')\" formControlName=\"phone\"></aril-mask>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('tcNumber')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-mask mask=\"99999999999\" formControlName=\"tckn\"></aril-mask>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('responsibleRegions')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-treeSelect\r\n\t\t\t\t[options]=\"treeItems\"\r\n\t\t\t\tformControlName=\"regions\"\r\n\t\t\t\t[placeholder]=\"t('select')\"\r\n\t\t\t\t(nodeSelect)=\"nodeSelect($event)\"\r\n\t\t\t\t(nodeUnselect)=\"nodeUnselect($event)\"\r\n\t\t\t\t(cleared)=\"clear()\">\r\n\t\t\t</aril-treeSelect>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('notes')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\">\r\n\t\t\t<aril-text-area [rows]=\"3\" [cols]=\"40\" formControlName=\"notes\"></aril-text-area>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('photoUrl')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-text formControlName=\"photoUrl\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<div class=\"col-12 flex justify-content-end mt-3 gap-1\">\r\n\t\t\t<aril-button color=\"danger\" [label]=\"t('cancel')\" [outlined]=\"true\" icon=\"TIMES\" (clickEvent)=\"cancel()\"></aril-button>\r\n\t\t\t<aril-form-submit [label]=\"t('save')\" color=\"success\" icon=\"CHECK\" [formGroup]=\"profileForm\" (validEvent)=\"submit()\"></aril-form-submit>\r\n\t\t</div>\r\n\t</aril-form>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ARiLFormModule }, { kind: "component", type: i6.FormComponent, selector: "aril-form", inputs: ["formGroup"] }, { kind: "component", type: i6.FormSubmitButtonComponent, selector: "aril-form-submit:not([click])", inputs: ["formGroup"], outputs: ["validEvent", "inValidEvent"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: TreeSelectModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }, { kind: "component", type: MaskComponent, selector: "aril-mask[ngModel], aril-mask[formControl], aril-mask[formControlName]", inputs: ["mask", "slotChar", "placeholder", "maxlength", "usageInGrid", "tabindex"] }, { kind: "component", type: FieldComponent, selector: "aril-field", inputs: ["label", "color", "labelWidth", "valueWidth", "labelPos", "markAsRequired", "cols", "infoData", "infoDataOverlayPanel"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "component", type: TextAreaComponent, selector: "aril-text-area[ngModel], aril-text-area[formControl], aril-text-area[formControlName]", inputs: ["rows", "cols", "isAutoResize", "tabindex", "placeholder"] }, { kind: "component", type: CheckboxComponent, selector: "aril-checkbox[ngModel], aril-checkbox[formControl], aril-checkbox[formControlName]", inputs: ["label", "labelAsYesNo", "tabindex"] }, { kind: "component", type: PasswordComponent, selector: "aril-password[ngModel], aril-password[formControl], aril-password[formControlName]", inputs: ["feedback", "passwordCriterias", "placeholder", "tabindex"] }, { kind: "component", type: SelectBoxComponent, selector: "aril-select-box[ngModel], aril-select-box[formControl], aril-select-box[formControlName]", inputs: ["itemKey", "itemText", "groupName", "parentSelectionKey", "tabindex", "items", "grouped", "showClearButton", "placeholder", "searchExpr"], outputs: ["onSelectionChanged"] }, { kind: "component", type: TreeSelectComponent, selector: "aril-treeSelect", inputs: ["options", "modelValue", "placeholder", "selectionMode", "display", "showClear", "filter", "filterPlaceholder", "propagateSelectionUp", "propagateSelectionDown", "metaKeySelection", "formControlName"], outputs: ["modelValueChange", "nodeSelect", "nodeUnselect", "cleared"] }] }); }
427
- }
428
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: EditProfileModalComponent, decorators: [{
429
- type: Component,
430
- args: [{ standalone: true, imports: [
431
- CommonModule,
432
- FormsModule,
433
- ARiLFormModule,
434
- TranslocoModule,
435
- TreeSelectModule,
436
- ReactiveFormsModule,
437
- TextComponent,
438
- MaskComponent,
439
- FieldComponent,
440
- ButtonComponent,
441
- TextAreaComponent,
442
- CheckboxComponent,
443
- PasswordComponent,
444
- SelectBoxComponent,
445
- TreeSelectComponent
446
- ], template: "<div *transloco=\"let t; read: 'profileSidebar'\">\r\n\t<aril-form [formGroup]=\"profileForm\">\r\n\t\t<aril-field [label]=\"t('userStatus')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-checkbox [label]=\"' '\" formControlName=\"enabled\" [disabled]=\"true\"></aril-checkbox>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('systemUser')\" [cols]=\"{ xl: 6, lg: 6, md: 12, sm: 12 }\">\r\n\t\t\t<aril-checkbox [label]=\"' '\" formControlName=\"systemUser\" [disabled]=\"true\"></aril-checkbox>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('userType')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-select-box formControlName=\"userTypeId\" [items]=\"userTypeItems\" itemKey=\"value\" itemText=\"label\" [placeholder]=\"t('select')\"></aril-select-box>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('systemUserApp')\" [cols]=\"{ xl: 6, lg: 6, md: 12, sm: 12 }\">\r\n\t\t\t<aril-select-box formControlName=\"clientOfSystemUser\" [items]=\"clientList\" itemText=\"text\" itemKey=\"key\" [placeholder]=\"t('select')\"></aril-select-box>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('username')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-text formControlName=\"userName\" [disabled]=\"true\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('userPassword')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-password formControlName=\"password\" [placeholder]=\"'&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;&#8728;'\"></aril-password>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('firstName')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-text formControlName=\"firstName\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('lastName')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-text formControlName=\"lastName\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('email')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-text formControlName=\"email\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('phone')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-mask mask=\"(999) 999 99 99\" [placeholder]=\"t('phoneExample')\" formControlName=\"phone\"></aril-mask>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('tcNumber')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-mask mask=\"99999999999\" formControlName=\"tckn\"></aril-mask>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('responsibleRegions')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-treeSelect\r\n\t\t\t\t[options]=\"treeItems\"\r\n\t\t\t\tformControlName=\"regions\"\r\n\t\t\t\t[placeholder]=\"t('select')\"\r\n\t\t\t\t(nodeSelect)=\"nodeSelect($event)\"\r\n\t\t\t\t(nodeUnselect)=\"nodeUnselect($event)\"\r\n\t\t\t\t(cleared)=\"clear()\">\r\n\t\t\t</aril-treeSelect>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('notes')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\">\r\n\t\t\t<aril-text-area [rows]=\"3\" [cols]=\"40\" formControlName=\"notes\"></aril-text-area>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('photoUrl')\" [cols]=\"{ xl: 6, lg: 6, md: 6, sm: 12 }\">\r\n\t\t\t<aril-text formControlName=\"photoUrl\"></aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<div class=\"col-12 flex justify-content-end mt-3 gap-1\">\r\n\t\t\t<aril-button color=\"danger\" [label]=\"t('cancel')\" [outlined]=\"true\" icon=\"TIMES\" (clickEvent)=\"cancel()\"></aril-button>\r\n\t\t\t<aril-form-submit [label]=\"t('save')\" color=\"success\" icon=\"CHECK\" [formGroup]=\"profileForm\" (validEvent)=\"submit()\"></aril-form-submit>\r\n\t\t</div>\r\n\t</aril-form>\r\n</div>\r\n" }]
447
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.DynamicDialogRef }, { type: i3.MessageService }, { type: ProfileService }, { type: i2.DynamicDialogConfig }, { type: i5.TranslocoService }] });
448
-
449
- class LayoutService {
450
- constructor() {
451
- this._config = {
452
- ripple: false,
453
- inputStyle: 'outlined',
454
- menuMode: localStorage.getItem('menu-mode') || 'static',
455
- colorScheme: 'light',
456
- theme: 'indigo',
457
- scale: 12,
458
- menuTheme: 'colorScheme'
459
- };
460
- // TODO: Set User Config
461
- this.config = signal(this._config);
462
- this.state = {
463
- // Static sidebar states
464
- staticSidebarVisible: true,
465
- staticSidebarCollapsed: false,
466
- staticMenuMobileActive: false,
467
- // Expandable menu states
468
- selectedMainItem: null,
469
- secondarySidebarExpanded: false,
470
- // Other sidebar states
471
- profileSidebarVisible: false,
472
- historySidebarVisible: false,
473
- siteMapSidebarVisible: false,
474
- favoritePagesSidebarVisible: false,
475
- notificationsSidebarVisible: false,
476
- // Notifications
477
- unreadNotificationCount: 0
478
- };
479
- this.configUpdate = new Subject();
480
- this.overlayOpen = new Subject();
481
- this.configUpdate$ = this.configUpdate.asObservable();
482
- this.overlayOpen$ = this.overlayOpen.asObservable();
483
- this.mfeAppItemClicked = signal(false);
484
- // Breakpoint for mobile/tablet detection
485
- this.MOBILE_BREAKPOINT = 992;
486
- effect(() => {
487
- const config = this.config();
488
- if (this.updateStyle(config)) {
489
- this.changeTheme();
490
- }
491
- this.changeScale(config.scale);
492
- this.onConfigUpdate();
493
- });
494
- this.initializeResponsiveBehavior();
495
- // Set initial state based on menu mode
496
- if (this.config().menuMode === 'expandable') {
497
- this.state.staticSidebarVisible = false;
498
- }
499
- }
500
- initializeResponsiveBehavior() {
501
- // Listen for window resize events
502
- window.addEventListener('resize', () => this.handleResize());
503
- this.handleResize();
504
- }
505
- handleResize() {
506
- const wasMobile = this.isMobile();
507
- // Recalculate mobile state
508
- const isMobileNow = window.innerWidth <= this.MOBILE_BREAKPOINT;
509
- // If switching from mobile to desktop or vice versa
510
- if (wasMobile !== isMobileNow) {
511
- if (isMobileNow) {
512
- // Switching to mobile: close any open desktop menus
513
- this.state.staticSidebarVisible = true;
514
- this.state.staticMenuMobileActive = false;
515
- // For expandable menu, keep secondary sidebar state but handle mobile behavior
516
- }
517
- else {
518
- // Switching to desktop: ensure proper desktop state
519
- this.state.staticMenuMobileActive = false;
520
- this.state.staticSidebarVisible = true;
521
- }
522
- }
523
- }
524
- updateStyle(config) {
525
- return config.theme !== this._config.theme || config.colorScheme !== this._config.colorScheme;
526
- }
527
- onMenuToggle() {
528
- if (this.isMobile()) {
529
- this.state.staticMenuMobileActive = !this.state.staticMenuMobileActive;
530
- if (this.state.staticMenuMobileActive) {
531
- this.overlayOpen.next(null);
532
- }
533
- }
534
- else {
535
- if (this.config().menuMode === 'static') {
536
- if (this.state.staticSidebarVisible && !this.state.staticSidebarCollapsed) {
537
- this.state.staticSidebarCollapsed = true;
538
- }
539
- else if (this.state.staticSidebarVisible && this.state.staticSidebarCollapsed) {
540
- this.state.staticSidebarCollapsed = false;
541
- }
542
- else {
543
- this.state.staticSidebarVisible = true;
544
- this.state.staticSidebarCollapsed = false;
545
- }
546
- }
547
- // For expandable mode, the toggle is handled by the expandable component itself
548
- }
549
- }
550
- onOverlaySubmenuOpen() {
551
- this.overlayOpen.next(null);
552
- }
553
- // Expandable menu methods
554
- setSelectedMainItem(index) {
555
- this.state.selectedMainItem = index;
556
- }
557
- toggleSecondarySidebar() {
558
- this.state.secondarySidebarExpanded = !this.state.secondarySidebarExpanded;
559
- }
560
- setSecondarySidebarExpanded(expanded) {
561
- this.state.secondarySidebarExpanded = expanded;
562
- }
563
- // Sidebar show methods
564
- showProfileSidebar() {
565
- this.state.profileSidebarVisible = true;
566
- }
567
- showHistorySidebar() {
568
- this.state.historySidebarVisible = true;
569
- }
570
- showSiteMapSidebar() {
571
- this.state.siteMapSidebarVisible = true;
572
- }
573
- showFavoritePagesSidebar() {
574
- this.state.favoritePagesSidebarVisible = true;
575
- }
576
- showNotificationsSidebar() {
577
- this.state.notificationsSidebarVisible = true;
578
- }
579
- setUnreadNotificationCount(count) {
580
- this.state.unreadNotificationCount = count;
581
- }
582
- getUnreadNotificationCount() {
583
- return this.state.unreadNotificationCount;
584
- }
585
- isDesktop() {
586
- return window.innerWidth > this.MOBILE_BREAKPOINT;
587
- }
588
- isMobile() {
589
- return window.innerWidth <= this.MOBILE_BREAKPOINT;
590
- }
591
- isStatic() {
592
- return this.config().menuMode === 'static';
593
- }
594
- isExpandable() {
595
- return this.config().menuMode === 'expandable';
596
- }
597
- // Helper method to determine if static sidebar should be shown
598
- shouldShowStaticSidebar() {
599
- if (this.config().menuMode !== 'static')
600
- return false;
601
- if (this.isDesktop()) {
602
- return this.state.staticSidebarVisible;
603
- }
604
- else {
605
- return this.state.staticMenuMobileActive;
606
- }
607
- }
608
- isStaticSidebarCollapsed() {
609
- return this.state.staticSidebarCollapsed;
610
- }
611
- shouldShowExpandableMenu() {
612
- return this.config().menuMode === 'expandable';
613
- }
614
- closeMobileMenu() {
615
- this.state.staticMenuMobileActive = false;
616
- }
617
- // Change menu mode programmatically
618
- changeMenuMode(mode) {
619
- this.config.update((config) => ({
620
- ...config,
621
- menuMode: mode
622
- }));
623
- // Update states based on new mode
624
- if (mode === 'static') {
625
- this.state.staticSidebarVisible = true;
626
- this.state.selectedMainItem = null;
627
- this.state.secondarySidebarExpanded = false;
628
- }
629
- else if (mode === 'expandable') {
630
- this.state.staticSidebarVisible = false;
631
- this.state.selectedMainItem = null;
632
- this.state.secondarySidebarExpanded = false;
633
- }
634
- this.state.staticMenuMobileActive = false;
635
- }
636
- onConfigUpdate() {
637
- this._config = { ...this.config() };
638
- this.configUpdate.next(this.config());
639
- }
640
- changeTheme() {
641
- const config = this.config();
642
- const themeLink = document.getElementById('theme-link');
643
- const themeLinkHref = themeLink.getAttribute('href');
644
- const newHref = themeLinkHref
645
- .split('/')
646
- .map((el) => el == this._config.theme ? (el = config.theme)
647
- : el == `theme-${this._config.colorScheme}` ? (el = `theme-${config.colorScheme}`)
648
- : el)
649
- .join('/');
650
- this.replaceThemeLink(newHref);
651
- }
652
- replaceThemeLink(href) {
653
- const id = 'theme-link';
654
- let themeLink = document.getElementById(id);
655
- const cloneLinkElement = themeLink.cloneNode(true);
656
- cloneLinkElement.setAttribute('href', href);
657
- cloneLinkElement.setAttribute('id', id + '-clone');
658
- themeLink.parentNode.insertBefore(cloneLinkElement, themeLink.nextSibling);
659
- cloneLinkElement.addEventListener('load', () => {
660
- themeLink.remove();
661
- cloneLinkElement.setAttribute('id', id);
662
- });
663
- }
664
- changeScale(value) {
665
- document.documentElement.style.fontSize = `${value}px`;
666
- }
667
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: LayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
668
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: LayoutService, providedIn: 'root' }); }
669
- }
670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: LayoutService, decorators: [{
671
- type: Injectable,
672
- args: [{
673
- providedIn: 'root'
674
- }]
675
- }], ctorParameters: () => [] });
676
-
677
- class AppProfileSidebarComponent {
678
- constructor(layoutService, keycloak, profileService, dialogService, translocoService) {
679
- this.layoutService = layoutService;
680
- this.keycloak = keycloak;
681
- this.profileService = profileService;
682
- this.dialogService = dialogService;
683
- this.translocoService = translocoService;
684
- this.userProfile = signal(null);
685
- this.subjects = {
686
- getUser: new Subject()
687
- };
688
- this.getUserService = toSignal(this.subjects.getUser.pipe(switchMap((data) => this.profileService.getUser(data))));
689
- this.username = this.keycloak.getUsername();
690
- this.initializeEffects();
691
- }
692
- ngOnInit() {
693
- this.loadUserProfile();
694
- }
695
- initializeEffects() {
696
- effect(() => {
697
- const service = this.getUserService();
698
- if (service?.response) {
699
- this.userProfile.set(service.response);
700
- }
701
- }, { allowSignalWrites: true });
702
- }
703
- loadUserProfile() {
704
- const userId = this.keycloak.getKeycloakInstance().idTokenParsed?.sub;
705
- if (userId) {
706
- this.subjects.getUser.next({ id: userId });
707
- }
708
- }
709
- get visible() {
710
- return this.layoutService.state.profileSidebarVisible;
711
- }
712
- set visible(_val) {
713
- this.layoutService.state.profileSidebarVisible = _val;
714
- if (_val && !this.userProfile()) {
715
- this.loadUserProfile();
716
- }
717
- }
718
- logout() {
719
- this.keycloak.logout();
720
- }
721
- editProfile() {
722
- if (!this.userProfile())
723
- return;
724
- const ref = this.dialogService.open(EditProfileModalComponent, {
725
- header: this.translocoService.translate('profileSidebar.editProfile'),
726
- width: '40%',
727
- height: 'auto',
728
- modal: true,
729
- maximizable: false,
730
- closable: true,
731
- data: {
732
- userProfile: this.userProfile()
733
- }
734
- });
735
- ref.onClose.subscribe((result) => {
736
- if (result?.status === 'success') {
737
- this.loadUserProfile();
738
- }
739
- });
740
- }
741
- changePassword() {
742
- const userId = this.keycloak.getKeycloakInstance().idTokenParsed?.sub;
743
- if (!userId)
744
- return;
745
- const ref = this.dialogService.open(ChangePasswordModalComponent, {
746
- header: this.translocoService.translate('profileSidebar.changePassword'),
747
- width: '500px',
748
- height: 'auto',
749
- modal: true,
750
- maximizable: false,
751
- closable: true,
752
- data: {
753
- userId: userId
754
- }
755
- });
756
- ref.onClose.subscribe();
757
- }
758
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppProfileSidebarComponent, deps: [{ token: LayoutService }, { token: i2$1.KeycloakService }, { token: ProfileService }, { token: i2.DialogService }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
759
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: AppProfileSidebarComponent, isStandalone: true, selector: "app-profilemenu", providers: [DialogService], ngImport: i0, template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-profile-sidebar w-full sm:w-30rem\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center gap-2\" *transloco=\"let t; read: 'profileSidebar'\">\r\n\t\t\t<span class=\"font-bold\">{{ t('personalInfo') }}</span>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t@if (userProfile()) {\r\n\t\t<div class=\"profile-content\" *transloco=\"let t; read: 'profileSidebar'\">\r\n\t\t\t<!-- Personal Information -->\r\n\t\t\t<div class=\"info-section\">\r\n\t\t\t\t<div class=\"info-items\">\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-user info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('fullName') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.firstName }} {{ userProfile()?.lastName }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-id-card info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('tcNumber') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.tckn || '' }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-envelope info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('email') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.email || '' }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-phone info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('phone') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.phone || '' }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-at info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('username') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.userName }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-check-circle info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('accountStatus') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value status\" [class.active]=\"userProfile()?.enabled\">\r\n\t\t\t\t\t\t\t\t{{ userProfile()?.enabled ? t('active') : t('inactive') }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-user info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('systemUser') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value status\" [class.active]=\"userProfile()?.systemUser\">\r\n\t\t\t\t\t\t\t\t{{ userProfile()?.systemUser ? t('yes') : t('no') }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-building info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('clientSystemUser') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.clientOfSystemUser }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t}\r\n\r\n\t<!-- Fixed Action Buttons -->\r\n\t@if (userProfile()) {\r\n\t\t<div class=\"action-buttons-container grid p-fluid\" *transloco=\"let t; read: 'profileSidebar'\">\r\n\t\t\t<div class=\"col-12 flex justify-content-between align-items-center\">\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('editProfile')\"\r\n\t\t\t\t\ticon=\"USER_EDIT\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\tclass=\"col-6\"\r\n\t\t\t\t\t(clickEvent)=\"editProfile()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('changePassword')\"\r\n\t\t\t\t\ticon=\"KEY\"\r\n\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\tclass=\"col-6\"\r\n\t\t\t\t\t(clickEvent)=\"changePassword()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t</div>\r\n\t\t\t<aril-button\r\n\t\t\t\t[label]=\"t('logout')\"\r\n\t\t\t\ticon=\"SIGN_OUT\"\r\n\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t[outlined]=\"false\"\r\n\t\t\t\tsize=\"sm\"\r\n\t\t\t\tclass=\"col-12\"\r\n\t\t\t\t(clickEvent)=\"logout()\">\r\n\t\t\t</aril-button>\r\n\t\t</div>\r\n\t}\r\n</p-sidebar>\r\n", styles: [":host .layout-profile-sidebar .p-sidebar-content{padding:0;background:var(--surface-0, #ffffff);color:var(--text-color, #333);height:100vh;overflow-y:auto;position:relative}:host .profile-content{padding:1rem .75rem 12rem;display:flex;flex-direction:column;gap:1.25rem}:host .action-buttons-container{width:100%;position:absolute;bottom:0;left:0;right:0;background:var(--surface-0, #ffffff);border-top:1px solid var(--surface-border, #e2e8f0);padding:1rem .75rem;z-index:300}:host .info-section .section-title{font-size:1.25rem;font-weight:500;color:var(--text-color-secondary, #64748b);margin:0 0 1rem;padding-bottom:.5rem;border-bottom:1px solid var(--surface-border, #e2e8f0);display:flex;align-items:center;gap:.5rem;text-transform:uppercase;letter-spacing:.5px}:host .info-section .section-title i{color:var(--text-color-secondary, #64748b);font-size:1rem}:host .info-section .info-items{display:flex;flex-direction:column;gap:0}:host .info-section .info-item{display:flex;align-items:center;gap:.75rem;padding:.75rem 0;border-bottom:1px solid var(--surface-border, #f1f5f9)}:host .info-section .info-item:last-child{border-bottom:none}:host .info-section .info-item .info-icon{color:var(--text-color-secondary, #64748b);font-size:1rem;flex-shrink:0;width:1.25rem;text-align:center}:host .info-section .info-item .info-content{flex:1;display:flex;flex-direction:column;gap:.25rem}:host .info-section .info-item .info-content .info-label{font-size:.95rem;color:var(--text-color-secondary, #64748b);font-weight:500;line-height:1}:host .info-section .info-item .info-content .info-value{font-size:.95rem;color:var(--text-color, #1e293b);font-weight:400;line-height:1.3}:host .info-section .info-item .info-content .info-value.status{display:inline-flex;align-items:center;padding:.25rem .75rem;border-radius:16px;font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em;width:fit-content;background:var(--red-100, #fee2e2);color:var(--red-700, #b91c1c);border:1px solid var(--red-200, #fecaca)}:host .info-section .info-item .info-content .info-value.status.active{background:var(--green-100, #dcfce7);color:var(--green-700, #15803d);border:1px solid var(--green-200, #bbf7d0)}@media (max-width: 768px){:host .profile-content{padding:.875rem .65rem 11rem;gap:1rem}:host .action-buttons-container{padding:.875rem .65rem}:host .action-buttons-container .action-buttons-vertical{gap:.65rem}:host .action-buttons-container .action-buttons-horizontal{gap:.4rem}:host .info-item{padding:.65rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i6$1.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: SkeletonModule }, { kind: "ngmodule", type: AvatarModule }, { kind: "ngmodule", type: ChipModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }] }); }
760
- }
761
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppProfileSidebarComponent, decorators: [{
762
- type: Component,
763
- args: [{ standalone: true, selector: 'app-profilemenu', imports: [
764
- CommonModule,
765
- SidebarModule,
766
- TagModule,
767
- ButtonModule,
768
- SkeletonModule,
769
- AvatarModule,
770
- ChipModule,
771
- TranslocoModule,
772
- ButtonComponent
773
- ], providers: [DialogService], template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-profile-sidebar w-full sm:w-30rem\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center gap-2\" *transloco=\"let t; read: 'profileSidebar'\">\r\n\t\t\t<span class=\"font-bold\">{{ t('personalInfo') }}</span>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t@if (userProfile()) {\r\n\t\t<div class=\"profile-content\" *transloco=\"let t; read: 'profileSidebar'\">\r\n\t\t\t<!-- Personal Information -->\r\n\t\t\t<div class=\"info-section\">\r\n\t\t\t\t<div class=\"info-items\">\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-user info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('fullName') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.firstName }} {{ userProfile()?.lastName }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-id-card info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('tcNumber') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.tckn || '' }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-envelope info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('email') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.email || '' }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-phone info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('phone') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.phone || '' }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-at info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('username') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.userName }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-check-circle info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('accountStatus') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value status\" [class.active]=\"userProfile()?.enabled\">\r\n\t\t\t\t\t\t\t\t{{ userProfile()?.enabled ? t('active') : t('inactive') }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-user info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('systemUser') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value status\" [class.active]=\"userProfile()?.systemUser\">\r\n\t\t\t\t\t\t\t\t{{ userProfile()?.systemUser ? t('yes') : t('no') }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"info-item\">\r\n\t\t\t\t\t\t<i class=\"pi pi-building info-icon\"></i>\r\n\t\t\t\t\t\t<div class=\"info-content\">\r\n\t\t\t\t\t\t\t<span class=\"info-label\">{{ t('clientSystemUser') }}</span>\r\n\t\t\t\t\t\t\t<span class=\"info-value\">{{ userProfile()?.clientOfSystemUser }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t}\r\n\r\n\t<!-- Fixed Action Buttons -->\r\n\t@if (userProfile()) {\r\n\t\t<div class=\"action-buttons-container grid p-fluid\" *transloco=\"let t; read: 'profileSidebar'\">\r\n\t\t\t<div class=\"col-12 flex justify-content-between align-items-center\">\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('editProfile')\"\r\n\t\t\t\t\ticon=\"USER_EDIT\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\tclass=\"col-6\"\r\n\t\t\t\t\t(clickEvent)=\"editProfile()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('changePassword')\"\r\n\t\t\t\t\ticon=\"KEY\"\r\n\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\tclass=\"col-6\"\r\n\t\t\t\t\t(clickEvent)=\"changePassword()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t</div>\r\n\t\t\t<aril-button\r\n\t\t\t\t[label]=\"t('logout')\"\r\n\t\t\t\ticon=\"SIGN_OUT\"\r\n\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t[outlined]=\"false\"\r\n\t\t\t\tsize=\"sm\"\r\n\t\t\t\tclass=\"col-12\"\r\n\t\t\t\t(clickEvent)=\"logout()\">\r\n\t\t\t</aril-button>\r\n\t\t</div>\r\n\t}\r\n</p-sidebar>\r\n", styles: [":host .layout-profile-sidebar .p-sidebar-content{padding:0;background:var(--surface-0, #ffffff);color:var(--text-color, #333);height:100vh;overflow-y:auto;position:relative}:host .profile-content{padding:1rem .75rem 12rem;display:flex;flex-direction:column;gap:1.25rem}:host .action-buttons-container{width:100%;position:absolute;bottom:0;left:0;right:0;background:var(--surface-0, #ffffff);border-top:1px solid var(--surface-border, #e2e8f0);padding:1rem .75rem;z-index:300}:host .info-section .section-title{font-size:1.25rem;font-weight:500;color:var(--text-color-secondary, #64748b);margin:0 0 1rem;padding-bottom:.5rem;border-bottom:1px solid var(--surface-border, #e2e8f0);display:flex;align-items:center;gap:.5rem;text-transform:uppercase;letter-spacing:.5px}:host .info-section .section-title i{color:var(--text-color-secondary, #64748b);font-size:1rem}:host .info-section .info-items{display:flex;flex-direction:column;gap:0}:host .info-section .info-item{display:flex;align-items:center;gap:.75rem;padding:.75rem 0;border-bottom:1px solid var(--surface-border, #f1f5f9)}:host .info-section .info-item:last-child{border-bottom:none}:host .info-section .info-item .info-icon{color:var(--text-color-secondary, #64748b);font-size:1rem;flex-shrink:0;width:1.25rem;text-align:center}:host .info-section .info-item .info-content{flex:1;display:flex;flex-direction:column;gap:.25rem}:host .info-section .info-item .info-content .info-label{font-size:.95rem;color:var(--text-color-secondary, #64748b);font-weight:500;line-height:1}:host .info-section .info-item .info-content .info-value{font-size:.95rem;color:var(--text-color, #1e293b);font-weight:400;line-height:1.3}:host .info-section .info-item .info-content .info-value.status{display:inline-flex;align-items:center;padding:.25rem .75rem;border-radius:16px;font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em;width:fit-content;background:var(--red-100, #fee2e2);color:var(--red-700, #b91c1c);border:1px solid var(--red-200, #fecaca)}:host .info-section .info-item .info-content .info-value.status.active{background:var(--green-100, #dcfce7);color:var(--green-700, #15803d);border:1px solid var(--green-200, #bbf7d0)}@media (max-width: 768px){:host .profile-content{padding:.875rem .65rem 11rem;gap:1rem}:host .action-buttons-container{padding:.875rem .65rem}:host .action-buttons-container .action-buttons-vertical{gap:.65rem}:host .action-buttons-container .action-buttons-horizontal{gap:.4rem}:host .info-item{padding:.65rem 0}}\n"] }]
774
- }], ctorParameters: () => [{ type: LayoutService }, { type: i2$1.KeycloakService }, { type: ProfileService }, { type: i2.DialogService }, { type: i5.TranslocoService }] });
775
-
776
- class HistoryService {
777
- ;
778
- constructor() {
779
- this.STORAGE_KEY = 'page_history';
780
- this.MAX_HISTORY_SIZE = 20;
781
- this.historySubject = new BehaviorSubject([]);
782
- this.history$ = this.historySubject.asObservable();
783
- // Excluded paths that shouldn't be tracked
784
- this.excludedPaths = ['/login'];
785
- this.router = inject(Router);
786
- this.translocoService = inject(TranslocoService);
787
- this.pubSubService = inject(PubSubService);
788
- this.titleService = inject(Title);
789
- this.loadHistoryFromStorage();
790
- this.initializeBreadcrumbListener();
791
- }
792
- initializeBreadcrumbListener() {
793
- // Listen for breadcrumb updates to track navigation history
794
- this.pubSubService.subscribe('breadcrumbUpdated', (data) => {
795
- const url = data?.path;
796
- const pageTitle = data?.custom?.pageTitle;
797
- if (url && pageTitle && pageTitle !== '...') {
798
- this.addToHistory(url, pageTitle);
799
- this.titleService.setTitle(pageTitle);
800
- }
801
- });
802
- }
803
- addToHistory(url, pageTitle) {
804
- if (this.shouldExcludeUrl(url)) {
805
- return;
806
- }
807
- const multiLanguageTitle = {};
808
- if (pageTitle) {
809
- multiLanguageTitle.tr = pageTitle;
810
- multiLanguageTitle.en = pageTitle;
811
- }
812
- else {
813
- const globalPageTitle = globalThis.__ARIL_PAGE_TITLE__?.();
814
- if (globalPageTitle) {
815
- multiLanguageTitle.tr = globalPageTitle;
816
- multiLanguageTitle.en = globalPageTitle;
817
- }
818
- else {
819
- // Fallback for pages not in menu and no global title
820
- multiLanguageTitle.tr = 'Bilinmeyen Sayfa';
821
- multiLanguageTitle.en = 'Unknown Page';
822
- }
823
- }
824
- const currentLang = this.translocoService.getActiveLang();
825
- const title = multiLanguageTitle[currentLang] || multiLanguageTitle.tr || 'Unknown Page';
826
- const timestamp = Date.now();
827
- const id = this.generateId(url, timestamp);
828
- const newItem = {
829
- id,
830
- title,
831
- multiLanguageTitle,
832
- url,
833
- timestamp
834
- };
835
- let history = this.getHistoryFromStorage();
836
- history = history.filter((item) => item.url !== url);
837
- history.unshift(newItem);
838
- // Limit history size
839
- if (history.length > this.MAX_HISTORY_SIZE) {
840
- history = history.slice(0, this.MAX_HISTORY_SIZE);
841
- }
842
- this.saveHistoryToStorage(history);
843
- this.historySubject.next(history);
844
- }
845
- shouldExcludeUrl(url) {
846
- return this.excludedPaths.some((excludedPath) => url.startsWith(excludedPath));
847
- }
848
- generateId(url, timestamp) {
849
- return `${url.replace(/[^a-zA-Z0-9]/g, '_')}_${timestamp}`;
850
- }
851
- loadHistoryFromStorage() {
852
- const history = this.getHistoryFromStorage();
853
- this.historySubject.next(history);
854
- }
855
- saveHistoryToStorage(history) {
856
- try {
857
- localStorage.setItem(this.STORAGE_KEY, JSON.stringify(history));
858
- }
859
- catch (error) {
860
- console.warn('Failed to save navigation history to localStorage:', error);
861
- }
862
- }
863
- clearHistory() {
864
- localStorage.removeItem(this.STORAGE_KEY);
865
- this.historySubject.next([]);
866
- }
867
- navigateToHistoryItem(item) {
868
- this.router.navigate([item.url]);
869
- }
870
- getHistoryFromStorage() {
871
- try {
872
- const stored = localStorage.getItem(this.STORAGE_KEY);
873
- return stored ? JSON.parse(stored) : [];
874
- }
875
- catch (error) {
876
- console.warn('Failed to load navigation history from localStorage:', error);
877
- return [];
878
- }
879
- }
880
- getHistoryItemsBySearchTerm(searchTerm) {
881
- const history = this.getHistoryFromStorage();
882
- const lowerSearchTerm = searchTerm.toLowerCase();
883
- const currentLang = this.translocoService.getActiveLang();
884
- return history.filter((item) => {
885
- // Search in current language title
886
- const currentTitle = item.multiLanguageTitle?.[currentLang] || item.title;
887
- return currentTitle.toLowerCase().includes(lowerSearchTerm) || item.url.toLowerCase().includes(lowerSearchTerm);
888
- });
889
- }
890
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HistoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
891
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HistoryService, providedIn: 'root' }); }
892
- }
893
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HistoryService, decorators: [{
894
- type: Injectable,
895
- args: [{
896
- providedIn: 'root'
897
- }]
898
- }], ctorParameters: () => [] });
899
-
900
- class HistorySidebarComponent {
901
- constructor(layoutService, historyService, confirmationService, messageService, translocoService) {
902
- this.layoutService = layoutService;
903
- this.historyService = historyService;
904
- this.confirmationService = confirmationService;
905
- this.messageService = messageService;
906
- this.translocoService = translocoService;
907
- this.history = signal([]);
908
- this.filteredHistory = signal([]);
909
- this.searchTerm = signal('');
910
- this.solidIcons = solidIcons;
911
- this.destroy$ = new Subject();
912
- }
913
- ngOnInit() {
914
- this.historyService.history$.pipe(takeUntil(this.destroy$)).subscribe((history) => {
915
- this.history.set(history);
916
- this.applyFilter();
917
- });
918
- }
919
- ngOnDestroy() {
920
- this.destroy$.next();
921
- this.destroy$.complete();
922
- }
923
- get visible() {
924
- return this.layoutService.state.historySidebarVisible;
925
- }
926
- set visible(value) {
927
- this.layoutService.state.historySidebarVisible = value;
928
- }
929
- onSearchChange() {
930
- this.applyFilter();
931
- }
932
- applyFilter() {
933
- const searchTerm = this.searchTerm();
934
- if (!searchTerm.trim()) {
935
- this.filteredHistory.set(this.history());
936
- }
937
- else {
938
- const filtered = this.historyService.getHistoryItemsBySearchTerm(searchTerm);
939
- this.filteredHistory.set(filtered);
940
- }
941
- }
942
- navigateToItem(item) {
943
- this.historyService.navigateToHistoryItem(item);
944
- this.visible = false;
945
- }
946
- clearAllHistory(event) {
947
- this.confirmationService.confirm({
948
- target: event.target,
949
- message: this.translocoService.translate('history.confirmClearAllMessage'),
950
- header: this.translocoService.translate('history.deleteConfirmation'),
951
- icon: 'pi pi-info-circle',
952
- acceptLabel: this.translocoService.translate('history.acceptButtonLabel'),
953
- rejectLabel: this.translocoService.translate('history.rejectButtonLabel'),
954
- acceptButtonStyleClass: 'p-button-success',
955
- rejectButtonStyleClass: 'p-button-danger',
956
- accept: () => {
957
- this.historyService.clearHistory();
958
- this.messageService.add({
959
- severity: 'success',
960
- summary: this.translocoService.translate('history.acceptButtonLabel'),
961
- detail: this.translocoService.translate('history.clearAll')
962
- });
963
- }
964
- });
965
- }
966
- trackByItemId(index, item) {
967
- return item.id || index;
968
- }
969
- getLocalizedTitle(item) {
970
- const currentLang = this.translocoService.getActiveLang();
971
- // Use multiLanguageTitle if available
972
- if (item.multiLanguageTitle) {
973
- const localizedTitle = item.multiLanguageTitle[currentLang];
974
- if (localizedTitle) {
975
- return localizedTitle;
976
- }
977
- // Fallback to Turkish if current language not available
978
- if (item.multiLanguageTitle.tr) {
979
- return item.multiLanguageTitle.tr;
980
- }
981
- }
982
- // Fallback to original title
983
- return item.title;
984
- }
985
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HistorySidebarComponent, deps: [{ token: LayoutService }, { token: HistoryService }, { token: i3.ConfirmationService }, { token: i3.MessageService }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
986
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: HistorySidebarComponent, isStandalone: true, selector: "app-history-sidebar", providers: [ConfirmationService], ngImport: i0, template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-history-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'history'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between w-full\">\r\n\t\t\t<div class=\"flex align-items-center\">\r\n\t\t\t\t<i class=\"pi pi-history text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('pageHistory') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"history-content\">\r\n\t\t@if (history().length > 0) {\r\n\t\t\t<div class=\"search-section\">\r\n\t\t\t\t<div class=\"flex justify-content-center align-items-center grid p-fluid m-0\">\r\n\t\t\t\t\t<aril-text\r\n\t\t\t\t\t\tclass=\"col-10\"\r\n\t\t\t\t\t\t[placeholder]=\"t('searchHistory')\"\r\n\t\t\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t\t\t(ngModelChange)=\"onSearchChange()\">\r\n\t\t\t\t\t</aril-text>\r\n\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t[icon]=\"solidIcons.faTrash\"\r\n\t\t\t\t\t\tsize=\"xl\"\r\n\t\t\t\t\t\tstyle=\"color: var(--red-500)\"\r\n\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t[pTooltip]=\"t('confirmClearAll')\"\r\n\t\t\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\t\t\t(click)=\"clearAllHistory($event)\">\r\n\t\t\t\t\t</fa-icon>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t@if (filteredHistory().length > 0) {\r\n\t\t\t<div class=\"history-list\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"history-items\">\r\n\t\t\t\t\t\t@for (item of filteredHistory(); track trackByItemId($index, item)) {\r\n\t\t\t\t\t\t\t<div class=\"history-item\" (click)=\"navigateToItem(item)\">\r\n\t\t\t\t\t\t\t\t<div class=\"item-content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-header\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-title\">\r\n\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-external-link text-primary mr-2\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"title-info\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"title-text\">{{ getLocalizedTitle(item) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"route-text\">{{ item.url }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-history empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">\r\n\t\t\t\t\t\t{{ searchTerm() ? t('noSearchResults') : t('noHistory') }}\r\n\t\t\t\t\t</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">\r\n\t\t\t\t\t\t{{ searchTerm() ? t('tryDifferentKeywords') : t('startBrowsing') }}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t\t@if (searchTerm()) {\r\n\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t[label]=\"t('clearSearch')\"\r\n\t\t\t\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t(clickEvent)=\"searchTerm.set(''); onSearchChange()\">\r\n\t\t\t\t\t\t</aril-button>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\t</div>\r\n\r\n\t<p-confirmDialog></p-confirmDialog>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-history-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-history-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem .5rem}:host ::ng-deep .layout-history-sidebar .p-sidebar-header i{color:var(--primary-color-text);font-size:1.1rem}:host ::ng-deep .layout-history-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600;color:var(--primary-color-text)}.history-content{display:flex;flex-direction:column;height:100%;background:var(--surface-0)}.search-section{padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.history-list{flex:1;overflow:hidden}.history-items{padding:.5rem}.history-item{background:var(--surface-0);border:1px solid var(--surface-border);border-radius:8px;margin-bottom:.5rem;cursor:pointer;transition:all .2s ease;position:relative;overflow:hidden}.history-item:hover{border-color:var(--primary-200);background:var(--primary-50);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.history-item:hover .remove-btn{opacity:1}.history-item:last-child{margin-bottom:0}.item-content{padding:1rem .75rem}.item-header{display:flex;align-items:center;justify-content:space-between}.item-title{display:flex;align-items:center;flex:1;min-width:0}.item-title .title-info{display:flex;flex-direction:column;flex:1;min-width:0}.item-title .title-text{font-weight:600;color:var(--text-color);font-size:1rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-title .route-text{font-size:.75rem;color:var(--text-color-secondary);font-weight:400;line-height:1.2;margin-top:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:.8}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;padding:2rem}.empty-content{text-align:center;max-width:300px}.empty-icon{font-size:3rem;color:var(--text-color-secondary);margin-bottom:1rem;opacity:.5}.empty-title{font-size:1.1rem;font-weight:600;color:var(--text-color);margin-bottom:.5rem}.empty-message{font-size:.9rem;color:var(--text-color-secondary);line-height:1.4;margin-bottom:1.5rem}@media (max-width: 768px){.history-content{height:calc(100vh - 3.5rem)}.search-section{padding:.75rem}.item-content{padding:.5rem}.item-title .title-text{font-size:.85rem}}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i6$1.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i7$1.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i8.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: BadgeModule }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i10.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] }); }
987
- }
988
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HistorySidebarComponent, decorators: [{
989
- type: Component,
990
- args: [{ standalone: true, selector: 'app-history-sidebar', imports: [
991
- CommonModule,
992
- FormsModule,
993
- SidebarModule,
994
- ButtonComponent,
995
- InputTextModule,
996
- ScrollPanelModule,
997
- ConfirmDialogModule,
998
- TooltipModule,
999
- BadgeModule,
1000
- TranslocoModule,
1001
- TextComponent,
1002
- FontAwesomeModule
1003
- ], providers: [ConfirmationService], template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-history-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'history'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between w-full\">\r\n\t\t\t<div class=\"flex align-items-center\">\r\n\t\t\t\t<i class=\"pi pi-history text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('pageHistory') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"history-content\">\r\n\t\t@if (history().length > 0) {\r\n\t\t\t<div class=\"search-section\">\r\n\t\t\t\t<div class=\"flex justify-content-center align-items-center grid p-fluid m-0\">\r\n\t\t\t\t\t<aril-text\r\n\t\t\t\t\t\tclass=\"col-10\"\r\n\t\t\t\t\t\t[placeholder]=\"t('searchHistory')\"\r\n\t\t\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t\t\t(ngModelChange)=\"onSearchChange()\">\r\n\t\t\t\t\t</aril-text>\r\n\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t[icon]=\"solidIcons.faTrash\"\r\n\t\t\t\t\t\tsize=\"xl\"\r\n\t\t\t\t\t\tstyle=\"color: var(--red-500)\"\r\n\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t[pTooltip]=\"t('confirmClearAll')\"\r\n\t\t\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\t\t\t(click)=\"clearAllHistory($event)\">\r\n\t\t\t\t\t</fa-icon>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t@if (filteredHistory().length > 0) {\r\n\t\t\t<div class=\"history-list\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"history-items\">\r\n\t\t\t\t\t\t@for (item of filteredHistory(); track trackByItemId($index, item)) {\r\n\t\t\t\t\t\t\t<div class=\"history-item\" (click)=\"navigateToItem(item)\">\r\n\t\t\t\t\t\t\t\t<div class=\"item-content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-header\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-title\">\r\n\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-external-link text-primary mr-2\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"title-info\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"title-text\">{{ getLocalizedTitle(item) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"route-text\">{{ item.url }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-history empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">\r\n\t\t\t\t\t\t{{ searchTerm() ? t('noSearchResults') : t('noHistory') }}\r\n\t\t\t\t\t</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">\r\n\t\t\t\t\t\t{{ searchTerm() ? t('tryDifferentKeywords') : t('startBrowsing') }}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t\t@if (searchTerm()) {\r\n\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t[label]=\"t('clearSearch')\"\r\n\t\t\t\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t(clickEvent)=\"searchTerm.set(''); onSearchChange()\">\r\n\t\t\t\t\t\t</aril-button>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\t</div>\r\n\r\n\t<p-confirmDialog></p-confirmDialog>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-history-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-history-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem .5rem}:host ::ng-deep .layout-history-sidebar .p-sidebar-header i{color:var(--primary-color-text);font-size:1.1rem}:host ::ng-deep .layout-history-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600;color:var(--primary-color-text)}.history-content{display:flex;flex-direction:column;height:100%;background:var(--surface-0)}.search-section{padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.history-list{flex:1;overflow:hidden}.history-items{padding:.5rem}.history-item{background:var(--surface-0);border:1px solid var(--surface-border);border-radius:8px;margin-bottom:.5rem;cursor:pointer;transition:all .2s ease;position:relative;overflow:hidden}.history-item:hover{border-color:var(--primary-200);background:var(--primary-50);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.history-item:hover .remove-btn{opacity:1}.history-item:last-child{margin-bottom:0}.item-content{padding:1rem .75rem}.item-header{display:flex;align-items:center;justify-content:space-between}.item-title{display:flex;align-items:center;flex:1;min-width:0}.item-title .title-info{display:flex;flex-direction:column;flex:1;min-width:0}.item-title .title-text{font-weight:600;color:var(--text-color);font-size:1rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-title .route-text{font-size:.75rem;color:var(--text-color-secondary);font-weight:400;line-height:1.2;margin-top:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:.8}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;padding:2rem}.empty-content{text-align:center;max-width:300px}.empty-icon{font-size:3rem;color:var(--text-color-secondary);margin-bottom:1rem;opacity:.5}.empty-title{font-size:1.1rem;font-weight:600;color:var(--text-color);margin-bottom:.5rem}.empty-message{font-size:.9rem;color:var(--text-color-secondary);line-height:1.4;margin-bottom:1.5rem}@media (max-width: 768px){.history-content{height:calc(100vh - 3.5rem)}.search-section{padding:.75rem}.item-content{padding:.5rem}.item-title .title-text{font-size:.85rem}}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"] }]
1004
- }], ctorParameters: () => [{ type: LayoutService }, { type: HistoryService }, { type: i3.ConfirmationService }, { type: i3.MessageService }, { type: i5.TranslocoService }] });
1005
-
1006
- class SiteMapSidebarComponent {
1007
- constructor(layoutService, translocoService) {
1008
- this.layoutService = layoutService;
1009
- this.translocoService = translocoService;
1010
- this.siteMapNodes = signal([]);
1011
- this.filteredNodes = signal([]);
1012
- this.searchTerm = signal('');
1013
- this.totalPages = signal(0);
1014
- this.solidIcons = solidIcons;
1015
- }
1016
- ngOnInit() {
1017
- this.loadSiteMap();
1018
- }
1019
- get visible() {
1020
- return this.layoutService.state.siteMapSidebarVisible;
1021
- }
1022
- set visible(value) {
1023
- this.layoutService.state.siteMapSidebarVisible = value;
1024
- }
1025
- loadSiteMap() {
1026
- const menuItems = globalThis.hostMenuItems?.() || [];
1027
- const nodes = this.buildSiteMapNodes(menuItems);
1028
- const totalCount = this.countTotalPages(nodes);
1029
- this.siteMapNodes.set(nodes);
1030
- this.filteredNodes.set(nodes);
1031
- this.totalPages.set(totalCount);
1032
- }
1033
- buildSiteMapNodes(items, parentKey = '') {
1034
- return items
1035
- .filter((item) => {
1036
- // Keep the home page route ("/") and any non-empty routes
1037
- return !item.routerLink || item.routerLink === '/' || item.routerLink.trim() !== '';
1038
- })
1039
- .map((item, index) => {
1040
- const key = parentKey ? `${parentKey}-${index}` : `${index}`;
1041
- let label;
1042
- if (item.routerLink === '/') {
1043
- label = { tr: 'Anasayfa', en: 'Home' };
1044
- }
1045
- else {
1046
- label = item.label || { tr: 'Bilinmeyen', en: 'Unknown' };
1047
- }
1048
- const node = {
1049
- key,
1050
- label,
1051
- icon: item.icon,
1052
- routerLink: item.routerLink,
1053
- expanded: false
1054
- };
1055
- if (item.items && item.items.length > 0) {
1056
- node.children = this.buildSiteMapNodes(item.items, key);
1057
- }
1058
- return node;
1059
- });
1060
- }
1061
- countTotalPages(nodes) {
1062
- let count = 0;
1063
- for (const node of nodes) {
1064
- if (node.routerLink) {
1065
- count++;
1066
- }
1067
- if (node.children) {
1068
- count += this.countTotalPages(node.children);
1069
- }
1070
- }
1071
- return count;
1072
- }
1073
- onSearchChange() {
1074
- const searchTerm = this.searchTerm()?.toLowerCase()?.trim();
1075
- if (!searchTerm) {
1076
- this.filteredNodes.set(this.siteMapNodes());
1077
- }
1078
- else {
1079
- const filtered = this.filterNodes(this.siteMapNodes(), searchTerm);
1080
- this.filteredNodes.set(filtered);
1081
- }
1082
- }
1083
- filterNodes(nodes, searchTerm) {
1084
- const filtered = [];
1085
- const currentLang = this.translocoService.getActiveLang();
1086
- for (const node of nodes) {
1087
- // Convert label to string for search based on active language
1088
- const labelText = typeof node.label === 'string' ?
1089
- node.label
1090
- : node.label?.[currentLang] || node.label?.tr || node.label?.en || '';
1091
- const matches = labelText.toLowerCase().includes(searchTerm);
1092
- let filteredChildren = [];
1093
- if (node.children) {
1094
- filteredChildren = this.filterNodes(node.children, searchTerm);
1095
- }
1096
- if (matches || filteredChildren.length > 0) {
1097
- filtered.push({
1098
- ...node,
1099
- children: filteredChildren.length > 0 ? filteredChildren : node.children,
1100
- expanded: filteredChildren.length > 0
1101
- });
1102
- }
1103
- }
1104
- return filtered;
1105
- }
1106
- expandAll() {
1107
- const expanded = this.expandNodes(this.filteredNodes(), true);
1108
- this.filteredNodes.set([...expanded]);
1109
- }
1110
- collapseAll() {
1111
- const collapsed = this.expandNodes(this.filteredNodes(), false);
1112
- this.filteredNodes.set([...collapsed]);
1113
- }
1114
- expandNodes(nodes, expanded) {
1115
- return nodes.map((node) => ({
1116
- ...node,
1117
- expanded,
1118
- children: node.children ? this.expandNodes(node.children, expanded) : undefined
1119
- }));
1120
- }
1121
- toggleNode(node) {
1122
- node.expanded = !node.expanded;
1123
- this.filteredNodes.set([...this.filteredNodes()]);
1124
- }
1125
- trackByKey(index, node) {
1126
- return node.key || `${index}`;
1127
- }
1128
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SiteMapSidebarComponent, deps: [{ token: LayoutService }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1129
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: SiteMapSidebarComponent, isStandalone: true, selector: "app-site-map-sidebar", ngImport: i0, template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-sitemap-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'siteMap'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between gap-2 w-full\">\r\n\t\t\t<div class=\"flex align-items-center gap-2\">\r\n\t\t\t\t<i class=\"pi pi-sitemap text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('siteMap') }}</span>\r\n\t\t\t\t<span class=\"total-pages\">{{ totalPages() }} {{ t('pages') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"sitemap-content\">\r\n\t\t<div class=\"search-section grid p-fluid m-0\">\r\n\t\t\t<aril-text\r\n\t\t\t\t[placeholder]=\"t('searchPages')\"\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\tclass=\"col-10 m-0\">\r\n\t\t\t</aril-text>\r\n\t\t\t@if (filteredNodes().length > 0) {\r\n\t\t\t<div class=\"col-2 flex align-items-center m-0 p-0\">\r\n\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t[icon]=\"solidIcons.faAnglesDown\"\r\n\t\t\t\t\t\tsize=\"xl\"\r\n\t\t\t\t\t\tstyle=\"color: var(--primary-color)\"\r\n\t\t\t\t\t\tclass=\"col-1 cursor-pointer\"\r\n\t\t\t\t\t\t[pTooltip]=\"t('expandAll')\"\r\n\t\t\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\t\t\t(click)=\"expandAll()\">\r\n\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t[icon]=\"solidIcons.faAnglesUp\"\r\n\t\t\t\t\t\tsize=\"xl\"\r\n\t\t\t\t\t\tstyle=\"color: var(--red-500)\"\r\n\t\t\t\t\t\tclass=\"col-1 ml-3 cursor-pointer\"\r\n\t\t\t\t\t\t[pTooltip]=\"t('collapseAll')\"\r\n\t\t\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\t\t\t(click)=\"collapseAll()\">\r\n\t\t\t\t\t</fa-icon>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\r\n\t\t<!-- Site Map Tree -->\r\n\t\t@if (filteredNodes().length > 0) {\r\n\t\t\t<div class=\"sitemap-tree\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-sitemap empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">\r\n\t\t\t\t\t\t{{ searchTerm() ? t('noSearchResults') : t('noPages') }}\r\n\t\t\t\t\t</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">\r\n\t\t\t\t\t\t{{ searchTerm() ? t('tryDifferentKeywords') : '' }}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t\t@if (searchTerm()) {\r\n\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t[label]=\"t('clearSearch')\"\r\n\t\t\t\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t(clickEvent)=\"searchTerm.set(''); onSearchChange()\">\r\n\t\t\t\t\t\t</aril-button>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<!-- Recursive Tree Node Template -->\r\n\t\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 20\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\t(click)=\"!node.routerLink ? toggleNode(node) : (visible = false)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\" (click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ node.label | translateJson }}</span>\r\n\r\n\t\t\t\t\t\t@if (node.routerLink) {\r\n\t\t\t\t\t\t\t<i class=\"external-icon pi pi-external-link\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- Recursive Children -->\r\n\t\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</div>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-sitemap-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-sitemap-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem .5rem}:host ::ng-deep .layout-sitemap-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600}:host ::ng-deep .layout-sitemap-sidebar .p-sidebar-header .total-pages{background:#fff3;color:#ffffffe6;padding:.25rem .5rem;border-radius:12px;font-size:.75rem;font-weight:500}.sitemap-content{display:flex;flex-direction:column;height:100%;background:var(--surface-ground)}.search-section{padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.sitemap-tree{flex:1;overflow:hidden}.tree-container{padding:.5rem 0}.tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent}.tree-node .node-item:hover{background:var(--surface-hover);border-color:var(--surface-border)}.tree-node .node-item.is-page:hover{background:var(--primary-50);border-color:var(--primary-200)}.tree-node .node-item.is-page:hover .external-icon{opacity:1}.tree-node .node-item.has-children{font-weight:500}.tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.tree-node .toggle-btn:hover{background:var(--surface-hover);color:var(--primary-color)}.tree-node .toggle-btn i{font-size:.7rem}.tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree-node .external-icon{color:var(--text-color-secondary);font-size:.7rem;opacity:.6;transition:opacity .2s ease;flex-shrink:0}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;padding:2rem}.empty-content{text-align:center;max-width:300px}.empty-icon{font-size:3rem;color:var(--text-color-secondary);margin-bottom:1rem;opacity:.5}.empty-message{font-size:.9rem;color:var(--text-color-secondary);line-height:1.4;margin-bottom:1.5rem}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i6$1.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i7$1.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "component", type: TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "pipe", type: TranslateJsonPipe, name: "translateJson" }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i10.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] }); }
1130
- }
1131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SiteMapSidebarComponent, decorators: [{
1132
- type: Component,
1133
- args: [{ standalone: true, selector: 'app-site-map-sidebar', imports: [
1134
- CommonModule,
1135
- FormsModule,
1136
- RouterModule,
1137
- SidebarModule,
1138
- ScrollPanelModule,
1139
- TooltipModule,
1140
- ButtonComponent,
1141
- TextComponent,
1142
- TranslocoModule,
1143
- TranslateJsonPipe,
1144
- FontAwesomeModule
1145
- ], template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-sitemap-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'siteMap'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between gap-2 w-full\">\r\n\t\t\t<div class=\"flex align-items-center gap-2\">\r\n\t\t\t\t<i class=\"pi pi-sitemap text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('siteMap') }}</span>\r\n\t\t\t\t<span class=\"total-pages\">{{ totalPages() }} {{ t('pages') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"sitemap-content\">\r\n\t\t<div class=\"search-section grid p-fluid m-0\">\r\n\t\t\t<aril-text\r\n\t\t\t\t[placeholder]=\"t('searchPages')\"\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\tclass=\"col-10 m-0\">\r\n\t\t\t</aril-text>\r\n\t\t\t@if (filteredNodes().length > 0) {\r\n\t\t\t<div class=\"col-2 flex align-items-center m-0 p-0\">\r\n\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t[icon]=\"solidIcons.faAnglesDown\"\r\n\t\t\t\t\t\tsize=\"xl\"\r\n\t\t\t\t\t\tstyle=\"color: var(--primary-color)\"\r\n\t\t\t\t\t\tclass=\"col-1 cursor-pointer\"\r\n\t\t\t\t\t\t[pTooltip]=\"t('expandAll')\"\r\n\t\t\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\t\t\t(click)=\"expandAll()\">\r\n\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t[icon]=\"solidIcons.faAnglesUp\"\r\n\t\t\t\t\t\tsize=\"xl\"\r\n\t\t\t\t\t\tstyle=\"color: var(--red-500)\"\r\n\t\t\t\t\t\tclass=\"col-1 ml-3 cursor-pointer\"\r\n\t\t\t\t\t\t[pTooltip]=\"t('collapseAll')\"\r\n\t\t\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\t\t\t(click)=\"collapseAll()\">\r\n\t\t\t\t\t</fa-icon>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\r\n\t\t<!-- Site Map Tree -->\r\n\t\t@if (filteredNodes().length > 0) {\r\n\t\t\t<div class=\"sitemap-tree\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-sitemap empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">\r\n\t\t\t\t\t\t{{ searchTerm() ? t('noSearchResults') : t('noPages') }}\r\n\t\t\t\t\t</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">\r\n\t\t\t\t\t\t{{ searchTerm() ? t('tryDifferentKeywords') : '' }}\r\n\t\t\t\t\t</p>\r\n\t\t\t\t\t@if (searchTerm()) {\r\n\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t[label]=\"t('clearSearch')\"\r\n\t\t\t\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t(clickEvent)=\"searchTerm.set(''); onSearchChange()\">\r\n\t\t\t\t\t\t</aril-button>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<!-- Recursive Tree Node Template -->\r\n\t\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 20\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\t(click)=\"!node.routerLink ? toggleNode(node) : (visible = false)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\" (click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ node.label | translateJson }}</span>\r\n\r\n\t\t\t\t\t\t@if (node.routerLink) {\r\n\t\t\t\t\t\t\t<i class=\"external-icon pi pi-external-link\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- Recursive Children -->\r\n\t\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</div>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-sitemap-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-sitemap-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem .5rem}:host ::ng-deep .layout-sitemap-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600}:host ::ng-deep .layout-sitemap-sidebar .p-sidebar-header .total-pages{background:#fff3;color:#ffffffe6;padding:.25rem .5rem;border-radius:12px;font-size:.75rem;font-weight:500}.sitemap-content{display:flex;flex-direction:column;height:100%;background:var(--surface-ground)}.search-section{padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.sitemap-tree{flex:1;overflow:hidden}.tree-container{padding:.5rem 0}.tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent}.tree-node .node-item:hover{background:var(--surface-hover);border-color:var(--surface-border)}.tree-node .node-item.is-page:hover{background:var(--primary-50);border-color:var(--primary-200)}.tree-node .node-item.is-page:hover .external-icon{opacity:1}.tree-node .node-item.has-children{font-weight:500}.tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.tree-node .toggle-btn:hover{background:var(--surface-hover);color:var(--primary-color)}.tree-node .toggle-btn i{font-size:.7rem}.tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree-node .external-icon{color:var(--text-color-secondary);font-size:.7rem;opacity:.6;transition:opacity .2s ease;flex-shrink:0}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;padding:2rem}.empty-content{text-align:center;max-width:300px}.empty-icon{font-size:3rem;color:var(--text-color-secondary);margin-bottom:1rem;opacity:.5}.empty-message{font-size:.9rem;color:var(--text-color-secondary);line-height:1.4;margin-bottom:1.5rem}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"] }]
1146
- }], ctorParameters: () => [{ type: LayoutService }, { type: i5.TranslocoService }] });
1147
-
1148
- // API Endpoints
1149
- const favoritePageEndpoints = {
1150
- filter: 'favorite-pages/filter',
1151
- favorite: 'favorite-pages'
1152
- };
1153
- class FavoritePagesService extends RestClient {
1154
- constructor(router) {
1155
- super();
1156
- this.router = router;
1157
- this.states = {};
1158
- this.allFavoritePages = signal([]);
1159
- }
1160
- getCurrentRoutePath() {
1161
- return this.router.url;
1162
- }
1163
- navigateToFavoritePage(favorite) {
1164
- this.router.navigate([favorite.url]);
1165
- }
1166
- getFullUrl(url) {
1167
- const baseUrl = window.location.origin;
1168
- return `${baseUrl}${window.location.pathname}${"#"}${url}`;
1169
- }
1170
- filterFavoritePages(post) {
1171
- return new Observable();
1172
- }
1173
- saveFavoritePage(post) {
1174
- return new Observable();
1175
- }
1176
- updateFavoritePage(id, post) {
1177
- return new Observable();
1178
- }
1179
- deleteFavoritePage(id) {
1180
- return new Observable();
1181
- }
1182
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesService, deps: [{ token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
1183
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesService, providedIn: 'root' }); }
1184
- }
1185
- __decorate([
1186
- ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, favoritePageEndpoints.filter)
1187
- ], FavoritePagesService.prototype, "filterFavoritePages", null);
1188
- __decorate([
1189
- ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, favoritePageEndpoints.favorite)
1190
- ], FavoritePagesService.prototype, "saveFavoritePage", null);
1191
- __decorate([
1192
- ServiceCall(HTTPMethods.PUT, ProxyTypes.ClientSide, favoritePageEndpoints.favorite)
1193
- ], FavoritePagesService.prototype, "updateFavoritePage", null);
1194
- __decorate([
1195
- ServiceCall(HTTPMethods.DELETE, ProxyTypes.ClientSide, favoritePageEndpoints.favorite)
1196
- ], FavoritePagesService.prototype, "deleteFavoritePage", null);
1197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesService, decorators: [{
1198
- type: Injectable,
1199
- args: [{ providedIn: 'root' }]
1200
- }], ctorParameters: () => [{ type: i1$1.Router }], propDecorators: { filterFavoritePages: [], saveFavoritePage: [], updateFavoritePage: [], deleteFavoritePage: [] } });
1201
-
1202
- class AddEditFavoriteModalComponent {
1203
- constructor(formBuilder, dialogRef, dialogConfig, favoritePagesService, messageService, translocoService) {
1204
- this.formBuilder = formBuilder;
1205
- this.dialogRef = dialogRef;
1206
- this.dialogConfig = dialogConfig;
1207
- this.favoritePagesService = favoritePagesService;
1208
- this.messageService = messageService;
1209
- this.translocoService = translocoService;
1210
- this.subjects = {
1211
- saveFavorite: new Subject(),
1212
- updateFavorite: new Subject()
1213
- };
1214
- this.saveFavoriteService = toSignal(this.subjects.saveFavorite.pipe(switchMap((data) => this.favoritePagesService.saveFavoritePage(data))));
1215
- this.updateFavoriteService = toSignal(this.subjects.updateFavorite.pipe(switchMap((data) => this.favoritePagesService.updateFavoritePage(this.modalData.favorite?.id, data))));
1216
- this.modalData = this.dialogConfig.data;
1217
- this.initializeEffects();
1218
- this.initializeForm();
1219
- }
1220
- ngOnInit() {
1221
- if (!this.modalData || !['add', 'edit'].includes(this.modalData.mode)) {
1222
- this.dialogRef.close('error');
1223
- }
1224
- }
1225
- initializeEffects() {
1226
- // Save favorite effect
1227
- effect(() => {
1228
- const service = this.saveFavoriteService();
1229
- if (service?.response) {
1230
- this.messageService.add({
1231
- severity: 'success',
1232
- summary: this.translocoService.translate('favoritePages.success'),
1233
- detail: this.translocoService.translate('favoritePages.saveSuccessfully'),
1234
- key: 'toast-root'
1235
- });
1236
- this.dialogRef.close({ status: 'success', data: service.response });
1237
- }
1238
- }, { allowSignalWrites: true });
1239
- // Update favorite effect
1240
- effect(() => {
1241
- const service = this.updateFavoriteService();
1242
- if (service?.response) {
1243
- this.messageService.add({
1244
- severity: 'success',
1245
- summary: this.translocoService.translate('favoritePages.success'),
1246
- detail: this.translocoService.translate('favoritePages.updatedSuccessfully'),
1247
- key: 'toast-root'
1248
- });
1249
- this.dialogRef.close({ status: 'success', data: service.response });
1250
- }
1251
- }, { allowSignalWrites: true });
1252
- }
1253
- initializeForm() {
1254
- if (this.modalData.mode === 'add') {
1255
- this.favoriteForm = this.formBuilder.group({
1256
- label: ['', [Validators.required, Validators.minLength(1), Validators.maxLength(100)]],
1257
- url: [{ value: this.modalData.url || '', disabled: true }]
1258
- });
1259
- }
1260
- else if (this.modalData.mode === 'edit' && this.modalData.favorite) {
1261
- this.favoriteForm = this.formBuilder.group({
1262
- label: [
1263
- this.modalData.favorite.label,
1264
- [Validators.required, Validators.minLength(1), Validators.maxLength(100)]
1265
- ],
1266
- url: [{ value: this.modalData.favorite.url, disabled: true }]
1267
- });
1268
- }
1269
- }
1270
- get isAddMode() {
1271
- return this.modalData.mode === 'add';
1272
- }
1273
- get isEditMode() {
1274
- return this.modalData.mode === 'edit';
1275
- }
1276
- submit() {
1277
- const formValue = this.favoriteForm.value;
1278
- if (this.isAddMode) {
1279
- const saveRequest = {
1280
- url: this.modalData.url,
1281
- label: formValue.label.trim()
1282
- };
1283
- this.subjects.saveFavorite.next(saveRequest);
1284
- }
1285
- else if (this.isEditMode && this.modalData.favorite) {
1286
- const updateRequest = {
1287
- label: formValue.label.trim(),
1288
- url: this.modalData.url,
1289
- version: this.modalData.favorite.version
1290
- };
1291
- this.subjects.updateFavorite.next(updateRequest);
1292
- }
1293
- }
1294
- cancel() {
1295
- this.dialogRef.close('cancel');
1296
- }
1297
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AddEditFavoriteModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: FavoritePagesService }, { token: i3.MessageService }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1298
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AddEditFavoriteModalComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div *transloco=\"let t; read: 'favoritePages'\">\r\n\t<aril-form [formGroup]=\"favoriteForm\">\r\n\t\t<aril-field [label]=\"t('label')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-text formControlName=\"label\" [placeholder]=\"t('labelPlaceholder')\"> </aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('path')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\">\r\n\t\t\t<aril-text formControlName=\"url\"> </aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<div class=\"col-12 flex justify-content-end mt-4 gap-2\">\r\n\t\t\t<aril-button\r\n\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t[label]=\"t('cancel')\"\r\n\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t(clickEvent)=\"cancel()\">\r\n\t\t\t</aril-button>\r\n\t\t\t<aril-form-submit\r\n\t\t\t\t[label]=\"t('save')\"\r\n\t\t\t\tcolor=\"success\"\r\n\t\t\t\ticon=\"CHECK\"\r\n\t\t\t\t[formGroup]=\"favoriteForm\"\r\n\t\t\t\t(validEvent)=\"submit()\" />\r\n\t\t</div>\r\n\t</aril-form>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ARiLFormModule }, { kind: "component", type: i6.FormComponent, selector: "aril-form", inputs: ["formGroup"] }, { kind: "component", type: i6.FormSubmitButtonComponent, selector: "aril-form-submit:not([click])", inputs: ["formGroup"], outputs: ["validEvent", "inValidEvent"] }, { kind: "component", type: FieldComponent, selector: "aril-field", inputs: ["label", "color", "labelWidth", "valueWidth", "labelPos", "markAsRequired", "cols", "infoData", "infoDataOverlayPanel"] }, { kind: "component", type: TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }] }); }
1299
- }
1300
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AddEditFavoriteModalComponent, decorators: [{
1301
- type: Component,
1302
- args: [{ standalone: true, imports: [
1303
- CommonModule,
1304
- ReactiveFormsModule,
1305
- FormsModule,
1306
- ARiLFormModule,
1307
- FieldComponent,
1308
- TextComponent,
1309
- ButtonComponent,
1310
- TranslocoModule
1311
- ], template: "<div *transloco=\"let t; read: 'favoritePages'\">\r\n\t<aril-form [formGroup]=\"favoriteForm\">\r\n\t\t<aril-field [label]=\"t('label')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\" [markAsRequired]=\"true\">\r\n\t\t\t<aril-text formControlName=\"label\" [placeholder]=\"t('labelPlaceholder')\"> </aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<aril-field [label]=\"t('path')\" [cols]=\"{ xl: 12, lg: 12, md: 12, sm: 12 }\">\r\n\t\t\t<aril-text formControlName=\"url\"> </aril-text>\r\n\t\t</aril-field>\r\n\r\n\t\t<div class=\"col-12 flex justify-content-end mt-4 gap-2\">\r\n\t\t\t<aril-button\r\n\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t[label]=\"t('cancel')\"\r\n\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t(clickEvent)=\"cancel()\">\r\n\t\t\t</aril-button>\r\n\t\t\t<aril-form-submit\r\n\t\t\t\t[label]=\"t('save')\"\r\n\t\t\t\tcolor=\"success\"\r\n\t\t\t\ticon=\"CHECK\"\r\n\t\t\t\t[formGroup]=\"favoriteForm\"\r\n\t\t\t\t(validEvent)=\"submit()\" />\r\n\t\t</div>\r\n\t</aril-form>\r\n</div>\r\n" }]
1312
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }, { type: FavoritePagesService }, { type: i3.MessageService }, { type: i5.TranslocoService }] });
1313
-
1314
- class FavoritePagesSidebarComponent {
1315
- constructor(layoutService, favoritePagesService, confirmationService, messageService, dialogService, translocoService) {
1316
- this.layoutService = layoutService;
1317
- this.favoritePagesService = favoritePagesService;
1318
- this.confirmationService = confirmationService;
1319
- this.messageService = messageService;
1320
- this.dialogService = dialogService;
1321
- this.translocoService = translocoService;
1322
- this.favoritePages = signal([]);
1323
- this.isCurrentPageFavorited = signal(false);
1324
- this.solidIcons = solidIcons;
1325
- this.currentPage = signal(1);
1326
- this.pageSize = signal(10);
1327
- this.totalItems = signal(0);
1328
- this.totalPages = signal(0);
1329
- this.allFavoritePages = computed(() => this.favoritePagesService.allFavoritePages());
1330
- this.subjects = {
1331
- loadAllFavorites: new Subject(),
1332
- deleteFavorite: new Subject()
1333
- };
1334
- this.loadAllFavoritesService = toSignal(this.subjects.loadAllFavorites.pipe(switchMap(() => this.favoritePagesService.filterFavoritePages({
1335
- pageSize: 1000,
1336
- pageNumber: 1
1337
- }))));
1338
- this.deleteFavoriteService = toSignal(this.subjects.deleteFavorite.pipe(switchMap((id) => this.favoritePagesService.deleteFavoritePage(id))));
1339
- this.initializeEffects();
1340
- }
1341
- ngOnInit() {
1342
- this.loadFavoritePages();
1343
- this.checkCurrentPageStatus();
1344
- }
1345
- initializeEffects() {
1346
- effect(() => {
1347
- const service = this.loadAllFavoritesService();
1348
- if (service?.response) {
1349
- this.favoritePagesService.allFavoritePages.set(service.response.result);
1350
- this.totalItems.set(service.response.result.length);
1351
- this.updateClientSidePagination();
1352
- this.checkCurrentPageStatus();
1353
- }
1354
- }, { allowSignalWrites: true });
1355
- effect(() => {
1356
- const service = this.deleteFavoriteService();
1357
- if (service?.response) {
1358
- this.loadFavoritePages();
1359
- this.messageService.add({
1360
- severity: 'success',
1361
- summary: this.translocoService.translate('favoritePages.success'),
1362
- detail: this.translocoService.translate('favoritePages.deletedSuccessfully'),
1363
- key: 'toast-root'
1364
- });
1365
- }
1366
- }, { allowSignalWrites: true });
1367
- }
1368
- get visible() {
1369
- return this.layoutService.state.favoritePagesSidebarVisible;
1370
- }
1371
- set visible(value) {
1372
- this.layoutService.state.favoritePagesSidebarVisible = value;
1373
- if (value) {
1374
- this.checkCurrentPageStatus();
1375
- }
1376
- }
1377
- loadFavoritePages() {
1378
- this.subjects.loadAllFavorites.next();
1379
- }
1380
- updateClientSidePagination() {
1381
- const allFavorites = this.allFavoritePages();
1382
- const totalItems = allFavorites.length;
1383
- const pageSize = this.pageSize();
1384
- const currentPage = this.currentPage();
1385
- const totalPages = Math.ceil(totalItems / pageSize);
1386
- this.totalPages.set(totalPages);
1387
- const startIndex = (currentPage - 1) * pageSize;
1388
- const endIndex = Math.min(startIndex + pageSize, totalItems);
1389
- const currentPageData = allFavorites.slice(startIndex, endIndex);
1390
- this.favoritePages.set(currentPageData);
1391
- }
1392
- checkCurrentPageStatus() {
1393
- const currentPath = this.favoritePagesService.getCurrentRoutePath();
1394
- const allFavorites = this.allFavoritePages();
1395
- const isFound = allFavorites.some((fav) => fav.url === currentPath);
1396
- this.isCurrentPageFavorited.set(isFound);
1397
- }
1398
- addCurrentPageToFavorites() {
1399
- const currentPath = this.favoritePagesService.getCurrentRoutePath();
1400
- const ref = this.dialogService.open(AddEditFavoriteModalComponent, {
1401
- header: this.translocoService.translate('favoritePages.addToFavorites'),
1402
- width: '500px',
1403
- modal: true,
1404
- closable: true,
1405
- data: {
1406
- mode: 'add',
1407
- url: currentPath
1408
- }
1409
- });
1410
- ref.onClose.subscribe((result) => {
1411
- if (result?.status === 'success') {
1412
- this.loadFavoritePages();
1413
- }
1414
- });
1415
- }
1416
- removeCurrentPageFromFavorites() {
1417
- const currentPath = this.favoritePagesService.getCurrentRoutePath();
1418
- const favorites = this.favoritePages();
1419
- const currentFavorite = favorites.find((fav) => fav.url === currentPath);
1420
- if (currentFavorite) {
1421
- this.confirmationService.confirm({
1422
- message: `'${currentFavorite.label}' ` + this.translocoService.translate('favoritePages.confirmDelete'),
1423
- header: this.translocoService.translate('favoritePages.deleteConfirmTitle'),
1424
- icon: 'pi pi-info-circle',
1425
- acceptLabel: this.translocoService.translate('acceptButtonLabel'),
1426
- rejectLabel: this.translocoService.translate('rejectButtonLabel'),
1427
- acceptButtonStyleClass: 'p-button-success',
1428
- rejectButtonStyleClass: 'p-button-danger',
1429
- accept: () => {
1430
- this.subjects.deleteFavorite.next(currentFavorite.id);
1431
- }
1432
- });
1433
- }
1434
- }
1435
- editFavorite(favorite, event) {
1436
- event.stopPropagation();
1437
- const ref = this.dialogService.open(AddEditFavoriteModalComponent, {
1438
- header: this.translocoService.translate('favoritePages.editFavorite'),
1439
- width: '500px',
1440
- modal: true,
1441
- closable: true,
1442
- data: {
1443
- mode: 'edit',
1444
- favorite: favorite
1445
- }
1446
- });
1447
- ref.onClose.subscribe((result) => {
1448
- if (result?.status === 'success') {
1449
- this.loadFavoritePages();
1450
- }
1451
- });
1452
- }
1453
- deleteFavorite(favorite, event) {
1454
- event.stopPropagation();
1455
- this.confirmationService.confirm({
1456
- target: event.target,
1457
- message: `'${favorite.label}' ` + this.translocoService.translate('favoritePages.confirmDelete'),
1458
- header: this.translocoService.translate('favoritePages.deleteConfirmTitle'),
1459
- icon: 'pi pi-info-circle',
1460
- acceptLabel: this.translocoService.translate('acceptButtonLabel'),
1461
- rejectLabel: this.translocoService.translate('rejectButtonLabel'),
1462
- acceptButtonStyleClass: 'p-button-success',
1463
- rejectButtonStyleClass: 'p-button-danger',
1464
- accept: () => {
1465
- this.subjects.deleteFavorite.next(favorite.id);
1466
- }
1467
- });
1468
- }
1469
- navigateToFavorite(favorite) {
1470
- this.favoritePagesService.navigateToFavoritePage(favorite);
1471
- this.visible = false;
1472
- }
1473
- trackByFavoriteId(index, favorite) {
1474
- return favorite.id;
1475
- }
1476
- onPageChange(event) {
1477
- this.currentPage.set(event.page + 1);
1478
- this.pageSize.set(event.rows);
1479
- this.updateClientSidePagination(); // Update pagination client-side, no API call
1480
- }
1481
- getFullUrl(url) {
1482
- return this.favoritePagesService.getFullUrl(url);
1483
- }
1484
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesSidebarComponent, deps: [{ token: LayoutService }, { token: FavoritePagesService }, { token: i3.ConfirmationService }, { token: i3.MessageService }, { token: i2.DialogService }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
1485
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: FavoritePagesSidebarComponent, isStandalone: true, selector: "app-favorite-pages-sidebar", providers: [ConfirmationService, DialogService], ngImport: i0, template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-favorite-pages-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'favoritePages'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between w-full\">\r\n\t\t\t<div class=\"flex align-items-center\">\r\n\t\t\t\t<i class=\"pi pi-heart text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('favoritePages') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"favorite-pages-content\">\r\n\t\t@if (isCurrentPageFavorited()) {\r\n\t\t\t<div class=\"current-favorited-message\">\r\n\t\t\t\t<div class=\"message-content\">\r\n\t\t\t\t\t<i class=\"pi pi-check-circle text-green-500\"></i>\r\n\t\t\t\t\t<span>{{ t('currentPageFavorited') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<div class=\"add-section\">\r\n\t\t\t@if (!isCurrentPageFavorited()) {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('addCurrentPage')\"\r\n\t\t\t\t\ticon=\"PLUS\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"addCurrentPageToFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t} @else {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('removeCurrentPage')\"\r\n\t\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"removeCurrentPageFromFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t}\r\n\t\t</div>\r\n\r\n\t\t@if (favoritePages().length > 0) {\r\n\t\t\t<div class=\"favorites-list\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"favorites-items\">\r\n\t\t\t\t\t\t@for (favorite of favoritePages(); track trackByFavoriteId($index, favorite)) {\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass=\"favorite-item\"\r\n\t\t\t\t\t\t\t\t[class.default-item]=\"favorite.id < 0\"\r\n\t\t\t\t\t\t\t\t(click)=\"navigateToFavorite(favorite)\"\r\n\t\t\t\t\t\t\t\t[pTooltip]=\"getFullUrl(favorite.url)\"\r\n\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t<div class=\"item-content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-header\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-title\">\r\n\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-external-link text-primary mr-2\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"title-text\">{{ favorite.label }}</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faPenToSquare\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--yellow-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"editFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faTrash\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--red-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"deleteFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-heart empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">{{ t('noFavorites') }}</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">{{ t('startAddingFavorites') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\t\t<div>\r\n\t\t\t<p-paginator\r\n\t\t\t\t[first]=\"(currentPage() - 1) * pageSize()\"\r\n\t\t\t\t[rows]=\"pageSize()\"\r\n\t\t\t\t[totalRecords]=\"totalItems()\"\r\n\t\t\t\t[showCurrentPageReport]=\"true\"\r\n\t\t\t\t[currentPageReportTemplate]=\"t('paginatorTemplate')\"\r\n\t\t\t\t[showFirstLastIcon]=\"false\"\r\n\t\t\t\t[showPageLinks]=\"false\"\r\n\t\t\t\t(onPageChange)=\"onPageChange($event)\">\r\n\t\t\t</p-paginator>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<p-confirmDialog></p-confirmDialog>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem 1.5rem}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600}.favorite-pages-content{display:flex;flex-direction:column;height:100%;background:var(--surface-0)}.current-favorited-message{padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--green-50)}.current-favorited-message .message-content{display:flex;align-items:center;gap:.5rem;color:var(--green-700);font-size:.9rem;font-weight:500}.add-section{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.favorites-list{flex:1;overflow:hidden}.favorites-items{padding:.5rem}.favorite-item{background:var(--surface-0);border:1px solid var(--surface-border);border-radius:8px;margin-bottom:.5rem;cursor:pointer;transition:all .2s ease;position:relative;overflow:hidden;padding:.5rem .2rem}.favorite-item:hover{border-color:var(--primary-200);background:var(--primary-50);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.favorite-item:hover .action-btn{opacity:1}.favorite-item:last-child{margin-bottom:0}.favorite-item.default-item{background:var(--blue-50);border-left:3px solid var(--blue-500)}.favorite-item.default-item:hover{background:var(--blue-100);border-color:var(--blue-300)}.favorite-item.default-item .title-text{font-weight:600;color:var(--blue-700)}.item-content{padding:.5rem .75rem}.item-header{display:flex;align-items:center;justify-content:space-between}.item-title{display:flex;align-items:center;flex:1;min-width:0}.item-title .title-text{font-weight:600;color:var(--text-color);font-size:1rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;padding:2rem}.empty-content{text-align:center;max-width:300px}.empty-content .empty-icon{font-size:3rem;color:var(--text-color-secondary);margin-bottom:1rem;opacity:.5}.empty-content .empty-title{font-size:1.1rem;font-weight:600;color:var(--text-color);margin-bottom:.5rem}.empty-content .empty-message{font-size:.9rem;color:var(--text-color-secondary);line-height:1.4;margin-bottom:1.5rem}@media (max-width: 768px){.add-section{padding:.75rem}.add-section .button-label{font-size:.8rem}.item-content{padding:.5rem}.item-title .title-text{font-size:.85rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i6$1.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i7$1.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i8.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i9$1.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "ngmodule", type: DynamicDialogModule }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i10.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] }); }
1486
- }
1487
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesSidebarComponent, decorators: [{
1488
- type: Component,
1489
- args: [{ standalone: true, selector: 'app-favorite-pages-sidebar', imports: [
1490
- CommonModule,
1491
- SidebarModule,
1492
- ScrollPanelModule,
1493
- ConfirmDialogModule,
1494
- PaginatorModule,
1495
- DynamicDialogModule,
1496
- ButtonComponent,
1497
- TranslocoModule,
1498
- TooltipModule,
1499
- FontAwesomeModule
1500
- ], providers: [ConfirmationService, DialogService], template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-favorite-pages-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'favoritePages'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between w-full\">\r\n\t\t\t<div class=\"flex align-items-center\">\r\n\t\t\t\t<i class=\"pi pi-heart text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('favoritePages') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"favorite-pages-content\">\r\n\t\t@if (isCurrentPageFavorited()) {\r\n\t\t\t<div class=\"current-favorited-message\">\r\n\t\t\t\t<div class=\"message-content\">\r\n\t\t\t\t\t<i class=\"pi pi-check-circle text-green-500\"></i>\r\n\t\t\t\t\t<span>{{ t('currentPageFavorited') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<div class=\"add-section\">\r\n\t\t\t@if (!isCurrentPageFavorited()) {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('addCurrentPage')\"\r\n\t\t\t\t\ticon=\"PLUS\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"addCurrentPageToFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t} @else {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('removeCurrentPage')\"\r\n\t\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"removeCurrentPageFromFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t}\r\n\t\t</div>\r\n\r\n\t\t@if (favoritePages().length > 0) {\r\n\t\t\t<div class=\"favorites-list\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"favorites-items\">\r\n\t\t\t\t\t\t@for (favorite of favoritePages(); track trackByFavoriteId($index, favorite)) {\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass=\"favorite-item\"\r\n\t\t\t\t\t\t\t\t[class.default-item]=\"favorite.id < 0\"\r\n\t\t\t\t\t\t\t\t(click)=\"navigateToFavorite(favorite)\"\r\n\t\t\t\t\t\t\t\t[pTooltip]=\"getFullUrl(favorite.url)\"\r\n\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t<div class=\"item-content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-header\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-title\">\r\n\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-external-link text-primary mr-2\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"title-text\">{{ favorite.label }}</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faPenToSquare\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--yellow-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"editFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faTrash\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--red-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"deleteFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-heart empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">{{ t('noFavorites') }}</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">{{ t('startAddingFavorites') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\t\t<div>\r\n\t\t\t<p-paginator\r\n\t\t\t\t[first]=\"(currentPage() - 1) * pageSize()\"\r\n\t\t\t\t[rows]=\"pageSize()\"\r\n\t\t\t\t[totalRecords]=\"totalItems()\"\r\n\t\t\t\t[showCurrentPageReport]=\"true\"\r\n\t\t\t\t[currentPageReportTemplate]=\"t('paginatorTemplate')\"\r\n\t\t\t\t[showFirstLastIcon]=\"false\"\r\n\t\t\t\t[showPageLinks]=\"false\"\r\n\t\t\t\t(onPageChange)=\"onPageChange($event)\">\r\n\t\t\t</p-paginator>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<p-confirmDialog></p-confirmDialog>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem 1.5rem}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600}.favorite-pages-content{display:flex;flex-direction:column;height:100%;background:var(--surface-0)}.current-favorited-message{padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--green-50)}.current-favorited-message .message-content{display:flex;align-items:center;gap:.5rem;color:var(--green-700);font-size:.9rem;font-weight:500}.add-section{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.favorites-list{flex:1;overflow:hidden}.favorites-items{padding:.5rem}.favorite-item{background:var(--surface-0);border:1px solid var(--surface-border);border-radius:8px;margin-bottom:.5rem;cursor:pointer;transition:all .2s ease;position:relative;overflow:hidden;padding:.5rem .2rem}.favorite-item:hover{border-color:var(--primary-200);background:var(--primary-50);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.favorite-item:hover .action-btn{opacity:1}.favorite-item:last-child{margin-bottom:0}.favorite-item.default-item{background:var(--blue-50);border-left:3px solid var(--blue-500)}.favorite-item.default-item:hover{background:var(--blue-100);border-color:var(--blue-300)}.favorite-item.default-item .title-text{font-weight:600;color:var(--blue-700)}.item-content{padding:.5rem .75rem}.item-header{display:flex;align-items:center;justify-content:space-between}.item-title{display:flex;align-items:center;flex:1;min-width:0}.item-title .title-text{font-weight:600;color:var(--text-color);font-size:1rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;padding:2rem}.empty-content{text-align:center;max-width:300px}.empty-content .empty-icon{font-size:3rem;color:var(--text-color-secondary);margin-bottom:1rem;opacity:.5}.empty-content .empty-title{font-size:1.1rem;font-weight:600;color:var(--text-color);margin-bottom:.5rem}.empty-content .empty-message{font-size:.9rem;color:var(--text-color-secondary);line-height:1.4;margin-bottom:1.5rem}@media (max-width: 768px){.add-section{padding:.75rem}.add-section .button-label{font-size:.8rem}.item-content{padding:.5rem}.item-title .title-text{font-size:.85rem}}\n"] }]
1501
- }], ctorParameters: () => [{ type: LayoutService }, { type: FavoritePagesService }, { type: i3.ConfirmationService }, { type: i3.MessageService }, { type: i2.DialogService }, { type: i5.TranslocoService }] });
1502
-
1503
- var LanguageCode;
1504
- (function (LanguageCode) {
1505
- LanguageCode["TR"] = "tr";
1506
- LanguageCode["EN"] = "en";
1507
- })(LanguageCode || (LanguageCode = {}));
1508
- var ActivityTypesEnum;
1509
- (function (ActivityTypesEnum) {
1510
- ActivityTypesEnum["SMS"] = "SMS";
1511
- ActivityTypesEnum["EMAIL"] = "MAIL";
1512
- })(ActivityTypesEnum || (ActivityTypesEnum = {}));
1513
- var DetailNotificationTypeEnum;
1514
- (function (DetailNotificationTypeEnum) {
1515
- DetailNotificationTypeEnum["TODO_ITEM"] = "TODO_ITEM";
1516
- DetailNotificationTypeEnum["BATCH_JOB"] = "BATCH_JOB";
1517
- })(DetailNotificationTypeEnum || (DetailNotificationTypeEnum = {}));
1518
-
1519
- var AssetCodes;
1520
- (function (AssetCodes) {
1521
- AssetCodes["MasterData"] = "MasterData";
1522
- AssetCodes["LightingFacility"] = "LightingFacility";
1523
- AssetCodes["ConnectionPoint"] = "ConnectionPoint";
1524
- AssetCodes["Premise"] = "Premise";
1525
- AssetCodes["ServicePoint"] = "ServicePoint";
1526
- AssetCodes["ServicePointGroup"] = "ServicePointGroup";
1527
- AssetCodes["DistributionConnectionAgreement"] = "DistributionConnectionAgreement";
1528
- AssetCodes["Contract"] = "Contract";
1529
- AssetCodes["BusinessPartner"] = "BusinessPartner";
1530
- AssetCodes["Account"] = "Account";
1531
- AssetCodes["Warehouse"] = "Warehouse";
1532
- AssetCodes["Team"] = "Team";
1533
- AssetCodes["Device"] = "Device";
1534
- AssetCodes["Location"] = "Location";
1535
- AssetCodes["Material"] = "Material";
1536
- AssetCodes["SerializedMaterial"] = "SerializedMaterial";
1537
- AssetCodes["LegalEntityBusinessPartner"] = "LegalEntityBusinessPartner";
1538
- AssetCodes["Organization"] = "Organization";
1539
- AssetCodes["FieldStaff"] = "FieldStaff";
1540
- AssetCodes["SSB"] = "SSB";
1541
- AssetCodes["ProducerServicePoint"] = "ProducerServicePoint";
1542
- AssetCodes["UnlicensedProducerServicePoint"] = "UnlicensedProducerServicePoint";
1543
- AssetCodes["LicensedProducerServicePoint"] = "LicensedProducerServicePoint";
1544
- AssetCodes["GeneralLightingServicePoint"] = "GeneralLightingServicePoint";
1545
- AssetCodes["ConsumerServicePoint"] = "ConsumerServicePoint";
1546
- AssetCodes["GeneralLightingContract"] = "GeneralLightingContract";
1547
- AssetCodes["UnmeteredContract"] = "UnmeteredContract";
1548
- AssetCodes["ProducerContract"] = "ProducerContract";
1549
- AssetCodes["UnlicensedProducerContract"] = "UnlicensedProducerContract";
1550
- AssetCodes["LicensedProducerContract"] = "LicensedProducerContract";
1551
- AssetCodes["ConsumerContract"] = "ConsumerContract";
1552
- AssetCodes["HumanBusinessPartner"] = "HumanBusinessPartner";
1553
- AssetCodes["Meter"] = "Meter";
1554
- AssetCodes["Seal"] = "Seal";
1555
- AssetCodes["SimCard"] = "SimCard";
1556
- AssetCodes["Transformer"] = "Transformer";
1557
- AssetCodes["MeasurementTransformer"] = "MeasurementTransformer";
1558
- AssetCodes["PowerTransformer"] = "PowerTransformer";
1559
- AssetCodes["Gateway"] = "Gateway";
1560
- AssetCodes["NonSerializedMaterial"] = "NonSerializedMaterial";
1561
- AssetCodes["MaterialClass"] = "MaterialClass";
1562
- AssetCodes["GatewayMaterialClass"] = "GatewayMaterialClass";
1563
- AssetCodes["MeterMaterialClass"] = "MeterMaterialClass";
1564
- AssetCodes["TransformerMaterialClass"] = "TransformerMaterialClass";
1565
- AssetCodes["PowerTransformerMaterialClass"] = "PowerTransformerMaterialClass";
1566
- AssetCodes["MeasurementTransformerMaterialClass"] = "MeasurementTransformerMaterialClass";
1567
- })(AssetCodes || (AssetCodes = {}));
1568
-
1569
- function getIcon(key) {
1570
- switch (key) {
1571
- case AssetCodes.Account:
1572
- return PrimeIcons.USER;
1573
- case AssetCodes.HumanBusinessPartner:
1574
- return PrimeIcons.USER;
1575
- case AssetCodes.Contract:
1576
- return PrimeIcons.FILE_EDIT;
1577
- case AssetCodes.ConnectionPoint:
1578
- return PrimeIcons.BUILDING;
1579
- case AssetCodes.Warehouse:
1580
- return PrimeIcons.LIST;
1581
- case AssetCodes.Team:
1582
- return PrimeIcons.LIST;
1583
- case AssetCodes.Premise:
1584
- return PrimeIcons.BUILDING;
1585
- case AssetCodes.PowerTransformer:
1586
- return PrimeIcons.BOLT;
1587
- case AssetCodes.Gateway:
1588
- return PrimeIcons.SERVER;
1589
- case AssetCodes.Seal:
1590
- return PrimeIcons.TICKET;
1591
- case AssetCodes.Meter:
1592
- return PrimeIcons.COMPASS;
1593
- case AssetCodes.SimCard:
1594
- return PrimeIcons.LIST;
1595
- case AssetCodes.MeasurementTransformer:
1596
- return PrimeIcons.LIST;
1597
- case AssetCodes.MaterialClass:
1598
- return PrimeIcons.LIST;
1599
- case AssetCodes.GatewayMaterialClass:
1600
- return PrimeIcons.LIST;
1601
- case AssetCodes.MeterMaterialClass:
1602
- return PrimeIcons.LIST;
1603
- case AssetCodes.PowerTransformerMaterialClass:
1604
- return PrimeIcons.LIST;
1605
- case AssetCodes.MeasurementTransformerMaterialClass:
1606
- return PrimeIcons.LIST;
1607
- case AssetCodes.BusinessPartner:
1608
- return PrimeIcons.USER;
1609
- case AssetCodes.LegalEntityBusinessPartner:
1610
- return PrimeIcons.BUILDING;
1611
- case AssetCodes.Organization:
1612
- return PrimeIcons.LIST;
1613
- case AssetCodes.FieldStaff:
1614
- return PrimeIcons.LIST;
1615
- case AssetCodes.SSB:
1616
- return PrimeIcons.LIST;
1617
- case AssetCodes.ServicePoint:
1618
- return PrimeIcons.COG;
1619
- case AssetCodes.ServicePointGroup:
1620
- return PrimeIcons.SITEMAP;
1621
- case AssetCodes.Device:
1622
- return PrimeIcons.PHONE;
1623
- default:
1624
- return PrimeIcons.LIST;
1625
- }
1626
- }
1627
- const getPresentableData = (items, key) => {
1628
- const transformToPresentableDataFor = (k) => (item) => {
1629
- const attributes = item?.attributes ?? [];
1630
- const assetNumberAttr = attributes.find((a) => a?.attribute?.attributeCode === 'AssetNumber');
1631
- const assetNameAttr = attributes.find((a) => a?.attribute?.attributeCode === 'AssetDefinitionName');
1632
- const number = assetNumberAttr?.valueDesc ?? 'N/A';
1633
- const subtitle = attributes
1634
- .filter((a) => a?.attribute?.attributeCode !== 'AssetNumber')
1635
- .map((a) => a?.valueDesc)
1636
- .filter((v) => v != null && v !== '')
1637
- .map(String)
1638
- .join(' - ');
1639
- const assetIdAttr = attributes.find((a) => a?.attribute?.attributeCode === 'AssetId');
1640
- const id = assetIdAttr?.valueDesc ?? '';
1641
- const icon = getIcon(k);
1642
- const url = assetNumberAttr?.attribute?.referringAsset?.detailPageUrl ?
1643
- `${assetNumberAttr.attribute.referringAsset.detailPageUrl}/${id}`
1644
- : '';
1645
- return {
1646
- title: `${assetNameAttr?.valueDesc ?? 'N/A'} #${number}`,
1647
- subtitle,
1648
- icon,
1649
- url: url,
1650
- assetId: id
1651
- };
1652
- };
1653
- if (key === 'all') {
1654
- return Object.keys(items).flatMap((k) => (items[k]?.result ?? []).map(transformToPresentableDataFor(k)));
1655
- }
1656
- return (items[key]?.result ?? []).map(transformToPresentableDataFor(key));
1657
- };
1658
-
1659
- class SearchService extends RestClient {
1660
- constructor() {
1661
- super();
1662
- this.states = {};
1663
- }
1664
- searchForAssets(post) {
1665
- return new Observable();
1666
- }
1667
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1668
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchService, providedIn: 'root' }); }
1669
- }
1670
- __decorate([
1671
- ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, 'master-data/cache-search', {}, Apps.MNG)
1672
- ], SearchService.prototype, "searchForAssets", null);
1673
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SearchService, decorators: [{
1674
- type: Injectable,
1675
- args: [{ providedIn: 'root' }]
1676
- }], ctorParameters: () => [], propDecorators: { searchForAssets: [] } });
1677
-
1678
- class GeneralSearchComponent {
1679
- constructor(router, searchService) {
1680
- this.router = router;
1681
- this.searchService = searchService;
1682
- this.query = '';
1683
- this.activeTab = 'all';
1684
- this.data = {};
1685
- this.presentableData = [];
1686
- this.querySig = signal('');
1687
- this.resultsSig = toSignal(toObservable(this.querySig).pipe(map((q) => q.trim()), filter((q) => q.length > 2), distinctUntilChanged(), switchMap$1((q) => {
1688
- const payload = {
1689
- searchText: q,
1690
- assetDefinitionCodes: [],
1691
- pager: { pageSize: 5, pageNumber: 1 }
1692
- };
1693
- return this.searchService.searchForAssets(payload).pipe(map((res) => res.response), catchError(() => {
1694
- return of({});
1695
- }), startWith(null));
1696
- })), { initialValue: null });
1697
- effect(() => {
1698
- const results = this.resultsSig();
1699
- if (results) {
1700
- this.data = results;
1701
- this.presentableData = getPresentableData(results, this.activeTab);
1702
- }
1703
- });
1704
- }
1705
- search(query) {
1706
- this.query = (query ?? '').trim();
1707
- this.querySig.set(this.query);
1708
- }
1709
- setTab(tab) {
1710
- this.activeTab = tab;
1711
- this.presentableData = getPresentableData(this.data, tab);
1712
- }
1713
- goToDetail(item) {
1714
- const isHostYeap = globalThis.activeHost === Apps.YEAP;
1715
- if (isHostYeap) {
1716
- this.router.navigate(['mng/master-data/view-md-data'], {
1717
- queryParams: { assetId: item.assetId }
1718
- });
1719
- }
1720
- else {
1721
- this.router.navigate([item.url]);
1722
- }
1723
- }
1724
- onResultClick(item) {
1725
- this.goToDetail(item.value);
1726
- }
1727
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: GeneralSearchComponent, deps: [{ token: i1$1.Router }, { token: SearchService }], target: i0.ɵɵFactoryTarget.Component }); }
1728
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: GeneralSearchComponent, isStandalone: true, selector: "app-general-search", ngImport: i0, template: "<ng-container *transloco=\"let g\">\r\n\t<ng-container *transloco=\"let t; read: 'generalSearch'\">\r\n\t\t<div class=\"global-search\">\r\n\t\t\t<p-autoComplete\r\n\t\t\t\t[(ngModel)]=\"query\"\r\n\t\t\t\toptionLabel=\"title\"\r\n\t\t\t\tminLength=\"3\"\r\n\t\t\t\t[delay]=\"500\"\r\n\t\t\t\t(completeMethod)=\"search($event.query)\"\r\n\t\t\t\t[suggestions]=\"presentableData\"\r\n\t\t\t\t[placeholder]=\"t('placeholder')\"\r\n\t\t\t\t(onSelect)=\"onResultClick($event)\">\r\n\t\t\t\t<ng-template pTemplate=\"empty\">\r\n\t\t\t\t\t<div class=\"px-3\">\r\n\t\t\t\t\t\t{{ t('noResults') }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<div class=\"tabs flex gap-2 overflow-x-auto white-space-nowrap p-2 border-bottom-1 border-gray-200\">\r\n\t\t\t\t\t\t<span (click)=\"setTab('all')\" class=\"cursor-pointer py-1 px-2\" [class.active]=\"activeTab === 'all'\">\r\n\t\t\t\t\t\t\t{{ t('all') }}\r\n\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t@for (tab of data | keyvalue; track tab) {\r\n\t\t\t\t\t\t\t<span (click)=\"setTab(tab.key)\" class=\"cursor-pointer py-1 px-2\" [class.active]=\"activeTab === tab.key\">\r\n\t\t\t\t\t\t\t\t{{ data[tab.key].result[0].assetDefinitionName }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template let-result pTemplate=\"item\">\r\n\t\t\t\t\t<div class=\"flex items-center gap-2\">\r\n\t\t\t\t\t\t<div class=\"result-icon\">\r\n\t\t\t\t\t\t\t<i class=\"pi {{ result.icon }}\"></i>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"result-text\">\r\n\t\t\t\t\t\t\t<div class=\"title mb-2\">{{ result.title }}</div>\r\n\t\t\t\t\t\t\t@if (result.subtitle) {\r\n\t\t\t\t\t\t\t\t<div class=\"subtitle\">{{ result.subtitle }}</div>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t@if (result.url) {\r\n\t\t\t\t\t\t\t<div class=\"open-btn ml-auto align-self-center\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"footer\">\r\n\t\t\t\t\t<div class=\"px-3 py-3 border-top-1 border-gray-200\">\r\n\t\t\t\t\t\t<span>{{ presentableData.length }} {{ t('results') }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-autoComplete>\r\n\t\t</div>\r\n\t</ng-container>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .p-autocomplete,:host ::ng-deep .p-autocomplete-input{width:100%;max-width:100%}:host ::ng-deep .p-overlay{width:100%!important;max-width:100%!important}:host ::ng-deep .p-autocomplete-item.p-focus{background:var(--gray-100)}:host ::ng-deep .tabs span.active{font-weight:700;border-bottom:2px solid var(--gray-900)}.global-search{position:relative}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i3$1.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i6$2.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
1729
- }
1730
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: GeneralSearchComponent, decorators: [{
1731
- type: Component,
1732
- args: [{ selector: 'app-general-search', standalone: true, imports: [CommonModule, FormsModule, TranslocoModule, AutoCompleteModule], template: "<ng-container *transloco=\"let g\">\r\n\t<ng-container *transloco=\"let t; read: 'generalSearch'\">\r\n\t\t<div class=\"global-search\">\r\n\t\t\t<p-autoComplete\r\n\t\t\t\t[(ngModel)]=\"query\"\r\n\t\t\t\toptionLabel=\"title\"\r\n\t\t\t\tminLength=\"3\"\r\n\t\t\t\t[delay]=\"500\"\r\n\t\t\t\t(completeMethod)=\"search($event.query)\"\r\n\t\t\t\t[suggestions]=\"presentableData\"\r\n\t\t\t\t[placeholder]=\"t('placeholder')\"\r\n\t\t\t\t(onSelect)=\"onResultClick($event)\">\r\n\t\t\t\t<ng-template pTemplate=\"empty\">\r\n\t\t\t\t\t<div class=\"px-3\">\r\n\t\t\t\t\t\t{{ t('noResults') }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<div class=\"tabs flex gap-2 overflow-x-auto white-space-nowrap p-2 border-bottom-1 border-gray-200\">\r\n\t\t\t\t\t\t<span (click)=\"setTab('all')\" class=\"cursor-pointer py-1 px-2\" [class.active]=\"activeTab === 'all'\">\r\n\t\t\t\t\t\t\t{{ t('all') }}\r\n\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t@for (tab of data | keyvalue; track tab) {\r\n\t\t\t\t\t\t\t<span (click)=\"setTab(tab.key)\" class=\"cursor-pointer py-1 px-2\" [class.active]=\"activeTab === tab.key\">\r\n\t\t\t\t\t\t\t\t{{ data[tab.key].result[0].assetDefinitionName }}\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template let-result pTemplate=\"item\">\r\n\t\t\t\t\t<div class=\"flex items-center gap-2\">\r\n\t\t\t\t\t\t<div class=\"result-icon\">\r\n\t\t\t\t\t\t\t<i class=\"pi {{ result.icon }}\"></i>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"result-text\">\r\n\t\t\t\t\t\t\t<div class=\"title mb-2\">{{ result.title }}</div>\r\n\t\t\t\t\t\t\t@if (result.subtitle) {\r\n\t\t\t\t\t\t\t\t<div class=\"subtitle\">{{ result.subtitle }}</div>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t@if (result.url) {\r\n\t\t\t\t\t\t\t<div class=\"open-btn ml-auto align-self-center\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"footer\">\r\n\t\t\t\t\t<div class=\"px-3 py-3 border-top-1 border-gray-200\">\r\n\t\t\t\t\t\t<span>{{ presentableData.length }} {{ t('results') }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-autoComplete>\r\n\t\t</div>\r\n\t</ng-container>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .p-autocomplete,:host ::ng-deep .p-autocomplete-input{width:100%;max-width:100%}:host ::ng-deep .p-overlay{width:100%!important;max-width:100%!important}:host ::ng-deep .p-autocomplete-item.p-focus{background:var(--gray-100)}:host ::ng-deep .tabs span.active{font-weight:700;border-bottom:2px solid var(--gray-900)}.global-search{position:relative}\n"] }]
1733
- }], ctorParameters: () => [{ type: i1$1.Router }, { type: SearchService }] });
1734
-
1735
- class AppTopbarComponent {
1736
- constructor(translocoService, pubSubService, keycloak) {
1737
- this.translocoService = translocoService;
1738
- this.pubSubService = pubSubService;
1739
- this.keycloak = keycloak;
1740
- this.layoutService = inject(LayoutService);
1741
- this.search = '';
1742
- this.logoPath = '';
1743
- this.currentFlagPath = '';
1744
- this.currentLang = localStorage.getItem('lang') || LanguageCode.TR;
1745
- this.languages = [
1746
- { name: 'TR', code: LanguageCode.TR, flag: 'assets/images/flags/tr.svg' },
1747
- { name: 'EN', code: LanguageCode.EN, flag: 'assets/images/flags/gb.svg' }
1748
- ];
1749
- this.translocoService.setActiveLang(this.currentLang);
1750
- this.publishLanguageChange(this.currentLang);
1751
- this.setFlagPath(this.currentLang);
1752
- this.setLogoPath();
1753
- this.username = this.keycloak.getUsername();
1754
- }
1755
- get unreadCount() {
1756
- return this.layoutService.getUnreadNotificationCount();
1757
- }
1758
- onMenuButtonClick() {
1759
- this.layoutService.onMenuToggle();
1760
- }
1761
- onProfileButtonClick() {
1762
- this.layoutService.showProfileSidebar();
1763
- }
1764
- onHistoryButtonClick() {
1765
- this.layoutService.showHistorySidebar();
1766
- }
1767
- onSiteMapButtonClick() {
1768
- this.layoutService.showSiteMapSidebar();
1769
- }
1770
- onFavoritePagesButtonClick() {
1771
- this.layoutService.showFavoritePagesSidebar();
1772
- }
1773
- onNotificationsButtonClick() {
1774
- this.layoutService.showNotificationsSidebar();
1775
- }
1776
- onLanguageChange() {
1777
- localStorage.setItem('lang', this.currentLang);
1778
- this.translocoService.setActiveLang(this.currentLang);
1779
- window.location.reload();
1780
- this.publishLanguageChange(this.currentLang);
1781
- }
1782
- publishLanguageChange(language) {
1783
- const event = {
1784
- name: 'languageChanged',
1785
- data: {
1786
- path: '',
1787
- custom: {
1788
- language
1789
- }
1790
- }
1791
- };
1792
- this.pubSubService.publish(event);
1793
- }
1794
- setFlagPath(lang) {
1795
- switch (lang) {
1796
- case LanguageCode.TR:
1797
- this.currentFlagPath = 'assets/images/flags/tr.svg';
1798
- break;
1799
- case LanguageCode.EN:
1800
- this.currentFlagPath = 'assets/images/flags/gb.svg';
1801
- break;
1802
- default:
1803
- this.currentFlagPath = 'assets/images/flags/tr.svg';
1804
- break;
1805
- }
1806
- }
1807
- setLogoPath() {
1808
- if (globalThis.activeHost) {
1809
- switch (globalThis.activeHost) {
1810
- case Apps.YEAP:
1811
- this.logoPath = 'assets/images/yeap-logo-dark.png';
1812
- break;
1813
- case Apps.THOR:
1814
- this.logoPath = 'assets/images/thor-logo-dark.png';
1815
- break;
1816
- case Apps.LENA:
1817
- this.logoPath = 'assets/images/lena-logo-dark.png';
1818
- break;
1819
- default:
1820
- this.logoPath = 'assets/images/yeap-logo-dark.png';
1821
- }
1822
- }
1823
- else {
1824
- switch (globalThis.activeMF) {
1825
- case Apps.HES:
1826
- case Apps.CTS:
1827
- case Apps.SIS:
1828
- this.logoPath = 'assets/images/lena-logo.png';
1829
- break;
1830
- case Apps.CRM:
1831
- case Apps.BILLING:
1832
- case Apps.PAYMENT:
1833
- case Apps.WDM:
1834
- case Apps.MNG:
1835
- case Apps.DMS:
1836
- this.logoPath = 'assets/images/thor-logo.png';
1837
- break;
1838
- case Apps.MW:
1839
- this.logoPath = 'assets/images/yeap-logo.png';
1840
- break;
1841
- default:
1842
- this.logoPath = 'assets/images/yeap-logo.png';
1843
- }
1844
- }
1845
- }
1846
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppTopbarComponent, deps: [{ token: i5.TranslocoService }, { token: i2$2.PubSubService }, { token: i2$1.KeycloakService }], target: i0.ɵɵFactoryTarget.Component }); }
1847
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AppTopbarComponent, isStandalone: true, selector: "app-topbar", viewQueries: [{ propertyName: "menuButton", first: true, predicate: ["menubutton"], descendants: true }], ngImport: i0, template: "<div class=\"layout-topbar\">\r\n\t<div class=\"topbar-start\">\r\n\t\t<button #menubutton type=\"button\" class=\"topbar-menubutton p-link p-trigger\" (click)=\"onMenuButtonClick()\">\r\n\t\t\t<i class=\"pi pi-bars\"></i>\r\n\t\t</button>\r\n\t\t<img [src]=\"logoPath\" class=\"topbar-logo\" alt=\"logo\" />\r\n\t</div>\r\n\r\n\t<div class=\"topbar-search\" *transloco=\"let t; read: ''\">\r\n\t\t<span class=\"p-input-icon-left\">\r\n\t\t\t<i class=\"pi pi-search\"></i>\r\n\t\t\t<app-general-search></app-general-search>\r\n\t\t</span>\r\n\t</div>\r\n\r\n\t<div class=\"topbar-end mr-2\">\r\n\t\t<ul class=\"topbar-menu\">\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-button\r\n\t\t\t\t\ticon=\"pi pi-sitemap\"\r\n\t\t\t\t\tseverity=\"secondary\"\r\n\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t[rounded]=\"true\"\r\n\t\t\t\t\t(click)=\"onSiteMapButtonClick()\" />\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-button\r\n\t\t\t\t\ticon=\"pi pi-history\"\r\n\t\t\t\t\tseverity=\"secondary\"\r\n\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t[rounded]=\"true\"\r\n\t\t\t\t\t(click)=\"onHistoryButtonClick()\" />\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-button\r\n\t\t\t\t\ticon=\"pi pi-heart\"\r\n\t\t\t\t\tseverity=\"secondary\"\r\n\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t[rounded]=\"true\"\r\n\t\t\t\t\t(click)=\"onFavoritePagesButtonClick()\" />\r\n\t\t\t</li>\r\n\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-button severity=\"secondary\" [text]=\"true\" [rounded]=\"true\" (click)=\"onProfileButtonClick()\">\r\n\t\t\t\t\t{{ username[0] | uppercase }}\r\n\t\t\t\t</p-button>\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-divider layout=\"vertical\" styleClass=\"h-1rem border-500 m-0\" />\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<i\r\n\t\t\t\t\tclass=\"pi pi-bell notification-icon\"\r\n\t\t\t\t\tpBadge\r\n\t\t\t\t\t[value]=\"unreadCount > 0 ? unreadCount.toString() : '0'\"\r\n\t\t\t\t\t(click)=\"onNotificationsButtonClick()\"></i>\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-dropdown\r\n\t\t\t\t\t[options]=\"languages\"\r\n\t\t\t\t\t[(ngModel)]=\"currentLang\"\r\n\t\t\t\t\t(onChange)=\"onLanguageChange()\"\r\n\t\t\t\t\toptionLabel=\"name\"\r\n\t\t\t\t\toptionValue=\"code\"\r\n\t\t\t\t\t[showClear]=\"false\"\r\n\t\t\t\t\tclass=\"custom-dropdown ml-3\">\r\n\t\t\t\t\t<ng-template pTemplate=\"selectedItem\">\r\n\t\t\t\t\t\t<div class=\"flex align-items-center gap-2\">\r\n\t\t\t\t\t\t\t<img [src]=\"currentFlagPath\" class=\"flag-icon\" alt=\"flag\" />\r\n\t\t\t\t\t\t\t<span class=\"language-text\">{{ currentLang | uppercase }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t<ng-template pTemplate=\"item\" let-item>\r\n\t\t\t\t\t\t<div class=\"flex align-items-center gap-2\">\r\n\t\t\t\t\t\t\t<img [src]=\"item.flag\" class=\"flag-icon\" alt=\"flag\" />\r\n\t\t\t\t\t\t\t<span>{{ item.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</p-dropdown>\r\n\t\t\t</li>\r\n\t\t</ul>\r\n\t</div>\r\n</div>\r\n\r\n<!-- <app-breadcrumb class=\"topbar-breadcrumb\"></app-breadcrumb> -->\r\n", styles: [".layout-topbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap;gap:.5rem;padding:0 1rem;box-shadow:0 1px 2px #00000013}@media (max-width: 768px){.layout-topbar{padding:0 .5rem;gap:.25rem}}.topbar-start{display:flex}.topbar-logo{height:36px;width:auto}@media (max-width: 768px){.topbar-logo{display:none}}.topbar-search{flex:1;max-width:50rem;margin:0 1rem}@media (max-width: 1024px){.topbar-search{max-width:30rem}}@media (max-width: 768px){.topbar-search{max-width:20rem;margin:0 .5rem}}@media (max-width: 480px){.topbar-search{max-width:15rem;margin:0 .25rem}}.topbar-search .p-input-icon-left{width:100%}.topbar-end{flex-shrink:0}.topbar-menu{display:flex;align-items:center;gap:.5rem;margin:0;padding:0;list-style:none}@media (max-width: 768px){.topbar-menu{gap:.25rem}}@media (max-width: 480px){.topbar-menu{gap:.1rem}}.topbar-menu-item{display:flex;align-items:center}@media (max-width: 1024px){.desktop-only{display:none!important}}.mobile-only{display:none!important}@media (max-width: 1024px){.mobile-only{display:flex!important}}.custom-dropdown .p-dropdown{border-radius:50px;padding:.5rem 1rem;border:1px solid #c8c8c8;background-color:#f4f4f4}@media (max-width: 768px){.custom-dropdown .p-dropdown{padding:.4rem .8rem}}@media (max-width: 480px){.custom-dropdown .p-dropdown{padding:.3rem .6rem}}.custom-dropdown .p-dropdown-label{padding:0;line-height:1.5}.custom-dropdown .p-dropdown-trigger{border-radius:50px}.flag-icon{width:18px;height:18px;display:inline-block;vertical-align:middle}@media (max-width: 768px){.flag-icon{width:16px;height:16px}}@media (max-width: 480px){.language-text{display:none}}@media (max-width: 768px){.topbar-menubutton{padding:.4rem!important}}@media (max-width: 480px){.topbar-menubutton{padding:.3rem!important}}@media (max-width: 768px){.topbar-menu-item p-button{min-width:auto}.topbar-menu-item p-button .p-button-icon{margin:0}.topbar-menu-item p-button .p-button-label{font-size:.9rem}}@media (max-width: 480px){.topbar-menu-item p-button .p-button-label{font-size:.8rem}.topbar-menu-item p-divider{display:none}}.notification-icon{cursor:pointer;padding:.2rem;border-radius:50%;transition:background-color .2s}.notification-icon:hover{background-color:var(--surface-hover)}@media (max-width: 480px){.notification-icon{font-size:.9rem;padding:.4rem}}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i7$2.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: BadgeModule }, { kind: "directive", type: i8$1.BadgeDirective, selector: "[pBadge]", inputs: ["badgeDisabled", "badgeSize", "size", "severity", "value", "badgeStyle", "badgeStyleClass"] }, { kind: "ngmodule", type: MenubarModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i9$2.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: GeneralSearchComponent, selector: "app-general-search" }] }); }
1848
- }
1849
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppTopbarComponent, decorators: [{
1850
- type: Component,
1851
- args: [{ standalone: true, selector: 'app-topbar', imports: [
1852
- ButtonModule,
1853
- UpperCasePipe,
1854
- FormsModule,
1855
- DividerModule,
1856
- BadgeModule,
1857
- MenubarModule,
1858
- DropdownModule,
1859
- TranslocoModule,
1860
- GeneralSearchComponent
1861
- ], template: "<div class=\"layout-topbar\">\r\n\t<div class=\"topbar-start\">\r\n\t\t<button #menubutton type=\"button\" class=\"topbar-menubutton p-link p-trigger\" (click)=\"onMenuButtonClick()\">\r\n\t\t\t<i class=\"pi pi-bars\"></i>\r\n\t\t</button>\r\n\t\t<img [src]=\"logoPath\" class=\"topbar-logo\" alt=\"logo\" />\r\n\t</div>\r\n\r\n\t<div class=\"topbar-search\" *transloco=\"let t; read: ''\">\r\n\t\t<span class=\"p-input-icon-left\">\r\n\t\t\t<i class=\"pi pi-search\"></i>\r\n\t\t\t<app-general-search></app-general-search>\r\n\t\t</span>\r\n\t</div>\r\n\r\n\t<div class=\"topbar-end mr-2\">\r\n\t\t<ul class=\"topbar-menu\">\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-button\r\n\t\t\t\t\ticon=\"pi pi-sitemap\"\r\n\t\t\t\t\tseverity=\"secondary\"\r\n\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t[rounded]=\"true\"\r\n\t\t\t\t\t(click)=\"onSiteMapButtonClick()\" />\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-button\r\n\t\t\t\t\ticon=\"pi pi-history\"\r\n\t\t\t\t\tseverity=\"secondary\"\r\n\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t[rounded]=\"true\"\r\n\t\t\t\t\t(click)=\"onHistoryButtonClick()\" />\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-button\r\n\t\t\t\t\ticon=\"pi pi-heart\"\r\n\t\t\t\t\tseverity=\"secondary\"\r\n\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t[rounded]=\"true\"\r\n\t\t\t\t\t(click)=\"onFavoritePagesButtonClick()\" />\r\n\t\t\t</li>\r\n\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-button severity=\"secondary\" [text]=\"true\" [rounded]=\"true\" (click)=\"onProfileButtonClick()\">\r\n\t\t\t\t\t{{ username[0] | uppercase }}\r\n\t\t\t\t</p-button>\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-divider layout=\"vertical\" styleClass=\"h-1rem border-500 m-0\" />\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<i\r\n\t\t\t\t\tclass=\"pi pi-bell notification-icon\"\r\n\t\t\t\t\tpBadge\r\n\t\t\t\t\t[value]=\"unreadCount > 0 ? unreadCount.toString() : '0'\"\r\n\t\t\t\t\t(click)=\"onNotificationsButtonClick()\"></i>\r\n\t\t\t</li>\r\n\t\t\t<li class=\"topbar-menu-item\">\r\n\t\t\t\t<p-dropdown\r\n\t\t\t\t\t[options]=\"languages\"\r\n\t\t\t\t\t[(ngModel)]=\"currentLang\"\r\n\t\t\t\t\t(onChange)=\"onLanguageChange()\"\r\n\t\t\t\t\toptionLabel=\"name\"\r\n\t\t\t\t\toptionValue=\"code\"\r\n\t\t\t\t\t[showClear]=\"false\"\r\n\t\t\t\t\tclass=\"custom-dropdown ml-3\">\r\n\t\t\t\t\t<ng-template pTemplate=\"selectedItem\">\r\n\t\t\t\t\t\t<div class=\"flex align-items-center gap-2\">\r\n\t\t\t\t\t\t\t<img [src]=\"currentFlagPath\" class=\"flag-icon\" alt=\"flag\" />\r\n\t\t\t\t\t\t\t<span class=\"language-text\">{{ currentLang | uppercase }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t<ng-template pTemplate=\"item\" let-item>\r\n\t\t\t\t\t\t<div class=\"flex align-items-center gap-2\">\r\n\t\t\t\t\t\t\t<img [src]=\"item.flag\" class=\"flag-icon\" alt=\"flag\" />\r\n\t\t\t\t\t\t\t<span>{{ item.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</p-dropdown>\r\n\t\t\t</li>\r\n\t\t</ul>\r\n\t</div>\r\n</div>\r\n\r\n<!-- <app-breadcrumb class=\"topbar-breadcrumb\"></app-breadcrumb> -->\r\n", styles: [".layout-topbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap;gap:.5rem;padding:0 1rem;box-shadow:0 1px 2px #00000013}@media (max-width: 768px){.layout-topbar{padding:0 .5rem;gap:.25rem}}.topbar-start{display:flex}.topbar-logo{height:36px;width:auto}@media (max-width: 768px){.topbar-logo{display:none}}.topbar-search{flex:1;max-width:50rem;margin:0 1rem}@media (max-width: 1024px){.topbar-search{max-width:30rem}}@media (max-width: 768px){.topbar-search{max-width:20rem;margin:0 .5rem}}@media (max-width: 480px){.topbar-search{max-width:15rem;margin:0 .25rem}}.topbar-search .p-input-icon-left{width:100%}.topbar-end{flex-shrink:0}.topbar-menu{display:flex;align-items:center;gap:.5rem;margin:0;padding:0;list-style:none}@media (max-width: 768px){.topbar-menu{gap:.25rem}}@media (max-width: 480px){.topbar-menu{gap:.1rem}}.topbar-menu-item{display:flex;align-items:center}@media (max-width: 1024px){.desktop-only{display:none!important}}.mobile-only{display:none!important}@media (max-width: 1024px){.mobile-only{display:flex!important}}.custom-dropdown .p-dropdown{border-radius:50px;padding:.5rem 1rem;border:1px solid #c8c8c8;background-color:#f4f4f4}@media (max-width: 768px){.custom-dropdown .p-dropdown{padding:.4rem .8rem}}@media (max-width: 480px){.custom-dropdown .p-dropdown{padding:.3rem .6rem}}.custom-dropdown .p-dropdown-label{padding:0;line-height:1.5}.custom-dropdown .p-dropdown-trigger{border-radius:50px}.flag-icon{width:18px;height:18px;display:inline-block;vertical-align:middle}@media (max-width: 768px){.flag-icon{width:16px;height:16px}}@media (max-width: 480px){.language-text{display:none}}@media (max-width: 768px){.topbar-menubutton{padding:.4rem!important}}@media (max-width: 480px){.topbar-menubutton{padding:.3rem!important}}@media (max-width: 768px){.topbar-menu-item p-button{min-width:auto}.topbar-menu-item p-button .p-button-icon{margin:0}.topbar-menu-item p-button .p-button-label{font-size:.9rem}}@media (max-width: 480px){.topbar-menu-item p-button .p-button-label{font-size:.8rem}.topbar-menu-item p-divider{display:none}}.notification-icon{cursor:pointer;padding:.2rem;border-radius:50%;transition:background-color .2s}.notification-icon:hover{background-color:var(--surface-hover)}@media (max-width: 480px){.notification-icon{font-size:.9rem;padding:.4rem}}\n"] }]
1862
- }], ctorParameters: () => [{ type: i5.TranslocoService }, { type: i2$2.PubSubService }, { type: i2$1.KeycloakService }], propDecorators: { menuButton: [{
1863
- type: ViewChild,
1864
- args: ['menubutton']
1865
- }] } });
1866
-
1867
- class AppChatbotComponent {
1868
- constructor(http, keycloak) {
1869
- this.http = http;
1870
- this.keycloak = keycloak;
1871
- this.chatbotVisible = false;
1872
- this.queryList = new BehaviorSubject([]);
1873
- this.historyList = new BehaviorSubject([]);
1874
- this.isTyping = false;
1875
- this.typingText = '.';
1876
- this.visibleGiveFeedback = false;
1877
- this.feedbackComments = '';
1878
- this.feedbackRating = 0;
1879
- this.baseUrl = API_CONFIGS.aiApi;
1880
- this.username = this.keycloak.getUsername();
1881
- }
1882
- sendRequest() {
1883
- this.fetchData();
1884
- }
1885
- async getHistory() {
1886
- try {
1887
- await this.http
1888
- .get(this.baseUrl + 'history?project=CRM' + '&user_name=' + this.username)
1889
- .subscribe((response) => {
1890
- this.historyList.next(response);
1891
- });
1892
- }
1893
- catch (error) {
1894
- console.log(error);
1895
- }
1896
- }
1897
- async fetchData() {
1898
- this.startTyping();
1899
- const request = {
1900
- project: 'CRM',
1901
- user_name: this.username,
1902
- query: this.questionQuery
1903
- };
1904
- try {
1905
- const result = await firstValueFrom(this.http.post(this.baseUrl + 'chat', request));
1906
- if (result && result.answer) {
1907
- this.queryList.next([...this.queryList.value, { question: this.questionQuery, answer: result.answer }]);
1908
- }
1909
- }
1910
- catch (error) {
1911
- this.error = error;
1912
- }
1913
- finally {
1914
- this.questionQuery = '';
1915
- this.stopTyping();
1916
- }
1917
- }
1918
- onVisible() {
1919
- this.getHistory();
1920
- this.chatbotVisible = true;
1921
- }
1922
- startTyping() {
1923
- this.isTyping = true;
1924
- let dots = 0;
1925
- this.typingInterval = setInterval(() => {
1926
- dots = (dots + 1) % 4;
1927
- this.typingText = '.'.repeat(dots);
1928
- }, 300);
1929
- }
1930
- stopTyping() {
1931
- clearInterval(this.typingInterval);
1932
- this.isTyping = false;
1933
- }
1934
- giveFeedback() {
1935
- this.visibleGiveFeedback = true;
1936
- }
1937
- async sendFeedback() {
1938
- const request = {
1939
- project: 'CRM',
1940
- user_name: this.username,
1941
- rating: this.feedbackRating,
1942
- comments: this.feedbackComments
1943
- };
1944
- try {
1945
- const result = await firstValueFrom(this.http.post(this.baseUrl + 'feedback', request));
1946
- if (result) {
1947
- this.feedBackResult = result.message;
1948
- }
1949
- }
1950
- catch (error) {
1951
- this.error = error;
1952
- }
1953
- finally {
1954
- this.visibleGiveFeedback = false;
1955
- this.feedbackComments = '';
1956
- this.feedbackRating = 0;
1957
- }
1958
- }
1959
- cancelFeedback() {
1960
- this.visibleGiveFeedback = false;
1961
- this.feedbackComments = '';
1962
- this.feedbackRating = 0;
1963
- }
1964
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppChatbotComponent, deps: [{ token: i1$2.HttpClient }, { token: i2$1.KeycloakService }], target: i0.ɵɵFactoryTarget.Component }); }
1965
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: AppChatbotComponent, isStandalone: true, selector: "app-chatbot", ngImport: i0, template: "<button class=\"layout-config-button p-link\" type=\"button\" (click)=\"chatbotVisible=true\">\r\n\t<i class=\"pi pi-comments\"></i>\r\n</button>\r\n\r\n<p-sidebar\r\n\t[(visible)]=\"chatbotVisible\"\r\n\tposition=\"right\"\r\n\tstyleClass=\"w-30rem flex flex-column\"\r\n\t[style]=\"{ height: '100%' }\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"custom-sidebar-header\">\r\n\t\t\t<span class=\"header-title\">THOR Asistan</span>\r\n\t\t\t<i class=\"pi pi-thumbs-up custom-icon\" (click)=\"giveFeedback()\" (keypress)=\"giveFeedback()\"></i>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"flex flex-column flex-1\">\r\n\t\t<p-messages severity=\"info\">\r\n\t\t\t<ng-template pTemplate>\r\n\t\t\t\t<i class=\"pi pi-info-circle text-xl\"></i>\r\n\t\t\t\t<div class=\"ml-2\">Sorular\u0131n\u0131n cevab\u0131na buradan ula\u015Fabilirsin.</div>\r\n\t\t\t</ng-template>\r\n\t\t</p-messages>\r\n\t</div>\r\n\r\n\t<div class=\"flex flex-column flex-1 query-details\" style=\"height: 85%; position: relative\">\r\n\t\t<div class=\"query-history\" style=\"flex: 1; max-height: 85%; overflow-y: auto; padding-right: 0.5rem\">\r\n\t\t\t@if (historyList.getValue().length > 0) {\r\n\t\t\t\t@for (historyItem of historyList.getValue(); track $index) {\r\n\t\t\t\t\t<div class=\"flex flex-column mb-2\">\r\n\t\t\t\t\t\t<div class=\"card shadow-none flex-1 flex align-items-center\" style=\"background-color: #e2e4e5\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-user text-xl\"></i>\r\n\t\t\t\t\t\t\t<div class=\"ml-4\">{{ historyItem.query }}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"flex flex-column mb-2\">\r\n\t\t\t\t\t\t<div class=\"card shadow-none flex-1 flex align-items-center ml-5\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-comment text-xl\"></i>\r\n\t\t\t\t\t\t\t<div class=\"ml-4\">{{ historyItem.answer }}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@if (queryList.getValue().length > 0) {\r\n\t\t\t\t@for (item of queryList.getValue(); track $index) {\r\n\t\t\t\t\t<div class=\"flex flex-column mb-2\">\r\n\t\t\t\t\t\t<div class=\"card shadow-none flex-1 flex align-items-center\" style=\"background-color: #e2e4e5\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-user text-xl\"></i>\r\n\t\t\t\t\t\t\t<div class=\"ml-4 text-lg\">{{ item.question }}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"flex flex-column\">\r\n\t\t\t\t\t\t<div class=\"card shadow-none flex-1 flex align-items-center ml-5\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-comment text-xl\"></i>\r\n\t\t\t\t\t\t\t<div class=\"ml-4 text-lg\">{{ item.answer }}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@if (visibleGiveFeedback) {\r\n\t\t\t\t<div class=\"flex mb-2\">\r\n\t\t\t\t\t<div class=\"card custom-card\" style=\"background-color: #e2e4e5\">\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<span>Geri bildirimlerinizi buradan g\u00F6nderebilirsiniz.</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<p-rating [(ngModel)]=\"feedbackRating\" [stars]=\"5\" />\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"text-lg\">\r\n\t\t\t\t\t\t\t<aril-text-area [rows]=\"5\" [cols]=\"30\" pTextarea [(ngModel)]=\"feedbackComments\"></aril-text-area>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div>\r\n <aril-button label=\"G\u00F6nder\" color=\"danger\" icon=\"SEND\" [outlined]=\"true\" (clickEvent)=\"sendFeedback()\">\r\n </aril-button>\r\n\t\t\t\t\t\t\t<aril-button label=\"Vazge\u00E7\" color=\"danger\" icon=\"TIMES\" [outlined]=\"true\" (clickEvent)=\"cancelFeedback()\">\r\n </aril-button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\r\n\t\t@if (isTyping) {\r\n\t\t\t<div\r\n\t\t\t\tclass=\"typing-indicator\"\r\n\t\t\t\tstyle=\"font-size: 16px; font-weight: 900; padding: 6px; width: 10%; text-align: center\">\r\n\t\t\t\t{{ typingText }}\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<div class=\"search-container\" style=\"position: absolute; bottom: 0; width: 100%; background: white\">\r\n\t\t\t<div class=\"search-box\" style=\"display: flex; align-items: center; gap: 0.5rem\">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tstyle=\"flex: 1; width: 100%\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tpInputText\r\n\t\t\t\t\t\tplaceholder=\"Sorunu yaz...\"\r\n\t\t\t\t\t\t[(ngModel)]=\"questionQuery\"\r\n\t\t\t\t\t\tclass=\"flex-1\"\r\n\t\t\t\t\t\tmaxlength=\"500\" />\r\n\t\t\t\t<aril-button label=\"G\u00F6nder\" color=\"danger\" icon=\"SEND\" [outlined]=\"true\" (clickEvent)=\"sendRequest()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</p-sidebar>\r\n", styles: ["@charset \"UTF-8\";::ng-deep .p-sidebar .p-sidebar-header{background-color:var(--primary-color)!important;color:#fff!important}::ng-deep .p-sidebar .p-sidebar-close i{color:#fff!important}.custom-sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem}.header-title{font-size:16px;font-weight:700}.custom-icon{font-size:1.5rem;color:#fff;cursor:pointer;margin-left:1rem}.custom-card{display:flex;flex-direction:column;gap:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i6$1.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: InputIconModule }, { kind: "ngmodule", type: IconFieldModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i6$3.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: MessagesModule }, { kind: "component", type: i7$3.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "component", type: TextAreaComponent, selector: "aril-text-area[ngModel], aril-text-area[formControl], aril-text-area[formControlName]", inputs: ["rows", "cols", "isAutoResize", "tabindex", "placeholder"] }, { kind: "ngmodule", type: RatingModule }, { kind: "component", type: i8$2.Rating, selector: "p-rating", inputs: ["disabled", "readonly", "stars", "cancel", "iconOnClass", "iconOnStyle", "iconOffClass", "iconOffStyle", "iconCancelClass", "iconCancelStyle", "autofocus"], outputs: ["onRate", "onCancel", "onFocus", "onBlur"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }] }); }
1966
- }
1967
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppChatbotComponent, decorators: [{
1968
- type: Component,
1969
- args: [{ standalone: true, selector: 'app-chatbot', imports: [
1970
- ButtonModule,
1971
- SidebarModule,
1972
- RadioButtonModule,
1973
- FormsModule,
1974
- InputIconModule,
1975
- IconFieldModule,
1976
- InputTextModule,
1977
- MessagesModule,
1978
- TextAreaComponent,
1979
- RatingModule,
1980
- ButtonComponent
1981
- ], template: "<button class=\"layout-config-button p-link\" type=\"button\" (click)=\"chatbotVisible=true\">\r\n\t<i class=\"pi pi-comments\"></i>\r\n</button>\r\n\r\n<p-sidebar\r\n\t[(visible)]=\"chatbotVisible\"\r\n\tposition=\"right\"\r\n\tstyleClass=\"w-30rem flex flex-column\"\r\n\t[style]=\"{ height: '100%' }\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"custom-sidebar-header\">\r\n\t\t\t<span class=\"header-title\">THOR Asistan</span>\r\n\t\t\t<i class=\"pi pi-thumbs-up custom-icon\" (click)=\"giveFeedback()\" (keypress)=\"giveFeedback()\"></i>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"flex flex-column flex-1\">\r\n\t\t<p-messages severity=\"info\">\r\n\t\t\t<ng-template pTemplate>\r\n\t\t\t\t<i class=\"pi pi-info-circle text-xl\"></i>\r\n\t\t\t\t<div class=\"ml-2\">Sorular\u0131n\u0131n cevab\u0131na buradan ula\u015Fabilirsin.</div>\r\n\t\t\t</ng-template>\r\n\t\t</p-messages>\r\n\t</div>\r\n\r\n\t<div class=\"flex flex-column flex-1 query-details\" style=\"height: 85%; position: relative\">\r\n\t\t<div class=\"query-history\" style=\"flex: 1; max-height: 85%; overflow-y: auto; padding-right: 0.5rem\">\r\n\t\t\t@if (historyList.getValue().length > 0) {\r\n\t\t\t\t@for (historyItem of historyList.getValue(); track $index) {\r\n\t\t\t\t\t<div class=\"flex flex-column mb-2\">\r\n\t\t\t\t\t\t<div class=\"card shadow-none flex-1 flex align-items-center\" style=\"background-color: #e2e4e5\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-user text-xl\"></i>\r\n\t\t\t\t\t\t\t<div class=\"ml-4\">{{ historyItem.query }}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"flex flex-column mb-2\">\r\n\t\t\t\t\t\t<div class=\"card shadow-none flex-1 flex align-items-center ml-5\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-comment text-xl\"></i>\r\n\t\t\t\t\t\t\t<div class=\"ml-4\">{{ historyItem.answer }}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@if (queryList.getValue().length > 0) {\r\n\t\t\t\t@for (item of queryList.getValue(); track $index) {\r\n\t\t\t\t\t<div class=\"flex flex-column mb-2\">\r\n\t\t\t\t\t\t<div class=\"card shadow-none flex-1 flex align-items-center\" style=\"background-color: #e2e4e5\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-user text-xl\"></i>\r\n\t\t\t\t\t\t\t<div class=\"ml-4 text-lg\">{{ item.question }}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"flex flex-column\">\r\n\t\t\t\t\t\t<div class=\"card shadow-none flex-1 flex align-items-center ml-5\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-comment text-xl\"></i>\r\n\t\t\t\t\t\t\t<div class=\"ml-4 text-lg\">{{ item.answer }}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@if (visibleGiveFeedback) {\r\n\t\t\t\t<div class=\"flex mb-2\">\r\n\t\t\t\t\t<div class=\"card custom-card\" style=\"background-color: #e2e4e5\">\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<span>Geri bildirimlerinizi buradan g\u00F6nderebilirsiniz.</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<p-rating [(ngModel)]=\"feedbackRating\" [stars]=\"5\" />\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"text-lg\">\r\n\t\t\t\t\t\t\t<aril-text-area [rows]=\"5\" [cols]=\"30\" pTextarea [(ngModel)]=\"feedbackComments\"></aril-text-area>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div>\r\n <aril-button label=\"G\u00F6nder\" color=\"danger\" icon=\"SEND\" [outlined]=\"true\" (clickEvent)=\"sendFeedback()\">\r\n </aril-button>\r\n\t\t\t\t\t\t\t<aril-button label=\"Vazge\u00E7\" color=\"danger\" icon=\"TIMES\" [outlined]=\"true\" (clickEvent)=\"cancelFeedback()\">\r\n </aril-button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\r\n\t\t@if (isTyping) {\r\n\t\t\t<div\r\n\t\t\t\tclass=\"typing-indicator\"\r\n\t\t\t\tstyle=\"font-size: 16px; font-weight: 900; padding: 6px; width: 10%; text-align: center\">\r\n\t\t\t\t{{ typingText }}\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<div class=\"search-container\" style=\"position: absolute; bottom: 0; width: 100%; background: white\">\r\n\t\t\t<div class=\"search-box\" style=\"display: flex; align-items: center; gap: 0.5rem\">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tstyle=\"flex: 1; width: 100%\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tpInputText\r\n\t\t\t\t\t\tplaceholder=\"Sorunu yaz...\"\r\n\t\t\t\t\t\t[(ngModel)]=\"questionQuery\"\r\n\t\t\t\t\t\tclass=\"flex-1\"\r\n\t\t\t\t\t\tmaxlength=\"500\" />\r\n\t\t\t\t<aril-button label=\"G\u00F6nder\" color=\"danger\" icon=\"SEND\" [outlined]=\"true\" (clickEvent)=\"sendRequest()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</p-sidebar>\r\n", styles: ["@charset \"UTF-8\";::ng-deep .p-sidebar .p-sidebar-header{background-color:var(--primary-color)!important;color:#fff!important}::ng-deep .p-sidebar .p-sidebar-close i{color:#fff!important}.custom-sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem}.header-title{font-size:16px;font-weight:700}.custom-icon{font-size:1.5rem;color:#fff;cursor:pointer;margin-left:1rem}.custom-card{display:flex;flex-direction:column;gap:.5rem}\n"] }]
1982
- }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i2$1.KeycloakService }] });
1983
-
1984
- class AppMenuService {
1985
- constructor() {
1986
- this.menuSource = new Subject();
1987
- this.resetSource = new Subject();
1988
- this.menuConfig = signal({ items: [], prefix: undefined });
1989
- this.activeRootMenuItemKey = signal(undefined);
1990
- this.menuItems = computed(() => {
1991
- const config = this.menuConfig();
1992
- // config.items.unshift({ root: true, label: 'Home', icon: 'pi pi-fw pi-home', routerLink: '' });
1993
- if (config.prefix)
1994
- return config.items.map((item) => this.addPrefix(item, config.prefix));
1995
- else
1996
- return config.items;
1997
- });
1998
- this.menuSource$ = this.menuSource.asObservable();
1999
- this.resetSource$ = this.resetSource.asObservable();
2000
- }
2001
- addPrefix(menuItem, appPrefix) {
2002
- if (menuItem.items) {
2003
- menuItem.items = menuItem.items.map((item) => this.addPrefix(item, appPrefix));
2004
- }
2005
- else {
2006
- const url = menuItem['root'] ? `/${appPrefix}` : `/${appPrefix}/${menuItem.routerLink}`;
2007
- menuItem.routerLink = url;
2008
- }
2009
- return menuItem;
2010
- }
2011
- onMenuStateChange(event) {
2012
- this.menuSource.next(event);
2013
- }
2014
- reset() {
2015
- this.resetSource.next(true);
2016
- }
2017
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2018
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppMenuService, providedIn: 'root' }); }
2019
- }
2020
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppMenuService, decorators: [{
2021
- type: Injectable,
2022
- args: [{
2023
- providedIn: 'root'
2024
- }]
2025
- }] });
2026
-
2027
- class ExpandableMenuComponent {
2028
- get sidebarExpanded() {
2029
- return this.layoutService.state.secondarySidebarExpanded;
2030
- }
2031
- set sidebarExpanded(value) {
2032
- this.layoutService.setSecondarySidebarExpanded(value);
2033
- }
2034
- constructor(translateJsonPipe, menuService, router, keycloak, translocoService, layoutService) {
2035
- this.translateJsonPipe = translateJsonPipe;
2036
- this.menuService = menuService;
2037
- this.router = router;
2038
- this.keycloak = keycloak;
2039
- this.translocoService = translocoService;
2040
- this.layoutService = layoutService;
2041
- this.overlayMenuOpenSubscription = null;
2042
- this.routerSubscription = null;
2043
- this.isHostMode = globalThis.isHostMode;
2044
- this.hostMenuItems = globalThis.hostMenuItems;
2045
- this.cachedMenuItems = [];
2046
- this.selectedMainMenuItem = null;
2047
- this.tooltipText = {
2048
- toggleButton: {
2049
- expanded: {
2050
- tr: 'Menüyü Gizle',
2051
- en: 'Hide Menu'
2052
- },
2053
- collapsed: {
2054
- tr: 'Menüyü Göster',
2055
- en: 'Show Menu'
2056
- }
2057
- },
2058
- lockButton: {
2059
- locked: {
2060
- tr: 'Otomatik Kapanmayı Aç',
2061
- en: 'Enable Auto-Close'
2062
- },
2063
- unlocked: {
2064
- tr: 'Menüyü Kilitle',
2065
- en: 'Lock Menu'
2066
- }
2067
- }
2068
- };
2069
- this.MAX_LENGTH = {
2070
- main: 8,
2071
- secondary: 20,
2072
- tertiary: 20
2073
- };
2074
- this.activeLang = toSignal(this.translocoService.langChanges$, { initialValue: 'tr' });
2075
- this.username = this.keycloak.getUsername().charAt(0).toUpperCase();
2076
- }
2077
- // Getter for layout service states
2078
- get selectedMainItem() {
2079
- return this.layoutService.state.selectedMainItem;
2080
- }
2081
- get secondarySidebarExpanded() {
2082
- return this.layoutService.state.secondarySidebarExpanded;
2083
- }
2084
- // Check if text is truncated and needs tooltip
2085
- isTextTruncated(label, lang, menuType = 'secondary') {
2086
- if (!label || !lang || !label[lang])
2087
- return false;
2088
- const text = label[lang];
2089
- const textLength = text.length;
2090
- const maxLength = menuType === 'nested' ? this.MAX_LENGTH.tertiary : this.MAX_LENGTH[menuType];
2091
- return textLength > maxLength;
2092
- }
2093
- // Recursively check if a menu item or its children match the current route
2094
- isActiveRoute(menuItem) {
2095
- if (!menuItem || !menuItem.routerLink)
2096
- return false;
2097
- // Get current URL path after the hash
2098
- const currentUrl = this.router.url;
2099
- const hashUrl = currentUrl.indexOf('#') > -1 ? currentUrl.split('#')[1] : currentUrl;
2100
- // Check for exact match first
2101
- if (hashUrl === menuItem.routerLink || hashUrl === '/' + menuItem.routerLink) {
2102
- return true;
2103
- }
2104
- // Check if current URL starts with the routerLink (handles child routes)
2105
- if (menuItem.routerLink !== '/' &&
2106
- (hashUrl.startsWith(menuItem.routerLink + '/') || hashUrl.startsWith('/' + menuItem.routerLink + '/'))) {
2107
- return true;
2108
- }
2109
- // Check child items if they exist
2110
- if (menuItem.items && menuItem.items.length > 0) {
2111
- return menuItem.items.some((childItem) => this.isActiveRoute(childItem));
2112
- }
2113
- return false;
2114
- }
2115
- ngOnInit() {
2116
- this.updateMenuItems();
2117
- this.initializeMenu();
2118
- this.updateActiveMenuFromCurrentRoute();
2119
- // Subscribe to route changes to handle secondary sidebar closing
2120
- this.routerSubscription = this.router.events
2121
- .pipe(filter$1((event) => event instanceof NavigationEnd))
2122
- .subscribe(() => {
2123
- // Update active menu based on the new route
2124
- this.updateActiveMenuFromCurrentRoute();
2125
- });
2126
- // Subscribe to overlay menu open notifications
2127
- this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {
2128
- if (this.layoutService.state.staticMenuMobileActive) {
2129
- this.layoutService.setSecondarySidebarExpanded(true);
2130
- }
2131
- });
2132
- }
2133
- ngOnDestroy() {
2134
- if (this.overlayMenuOpenSubscription) {
2135
- this.overlayMenuOpenSubscription.unsubscribe();
2136
- }
2137
- if (this.routerSubscription) {
2138
- this.routerSubscription.unsubscribe();
2139
- }
2140
- }
2141
- // Initialize the menu with proper active state
2142
- initializeMenu() {
2143
- this.layoutService.setSelectedMainItem(null);
2144
- this.selectedMainMenuItem = null;
2145
- this.layoutService.setSecondarySidebarExpanded(false);
2146
- this.updateMenuItems();
2147
- }
2148
- updateMenuFromRootKey(index) {
2149
- this.updateMenuItems();
2150
- const menuItems = this.getMenuItems();
2151
- if (index >= 0 && index < menuItems.length) {
2152
- const item = menuItems[index];
2153
- if (!item.separator) {
2154
- this.layoutService.setSelectedMainItem(index);
2155
- this.selectedMainMenuItem = item;
2156
- this.layoutService.setSecondarySidebarExpanded(true);
2157
- }
2158
- }
2159
- }
2160
- updateMenuItems() {
2161
- this.cachedMenuItems = this.isHostMode ? this.hostMenuItems() : this.menuService.menuItems();
2162
- }
2163
- getMenuItems() {
2164
- return this.cachedMenuItems;
2165
- }
2166
- selectMainItem(index, item) {
2167
- if (item.routerLink && (!item.items || item.items.length === 0)) {
2168
- this.layoutService.setSecondarySidebarExpanded(false);
2169
- this.layoutService.setSelectedMainItem(index);
2170
- this.selectedMainMenuItem = item;
2171
- this.router.navigate([item.routerLink]);
2172
- return;
2173
- }
2174
- // Handle regular menu items with submenu
2175
- if (this.selectedMainItem === index) {
2176
- this.layoutService.toggleSecondarySidebar();
2177
- }
2178
- else {
2179
- this.layoutService.setSelectedMainItem(index);
2180
- this.selectedMainMenuItem = item;
2181
- if (item.items && item.items.length > 0) {
2182
- this.layoutService.setSecondarySidebarExpanded(true);
2183
- }
2184
- else {
2185
- this.layoutService.setSecondarySidebarExpanded(false);
2186
- }
2187
- }
2188
- // For mobile devices, ensure the menu stays open
2189
- if (this.isMobile()) {
2190
- this.layoutService.state.staticMenuMobileActive = true;
2191
- }
2192
- }
2193
- toggleSecondarySidebar() {
2194
- this.layoutService.toggleSecondarySidebar();
2195
- }
2196
- isMobile() {
2197
- return this.layoutService.isMobile();
2198
- }
2199
- // Listen for resize events - now handled more efficiently by layout service
2200
- onResize() {
2201
- if (!this.isMobile() && this.layoutService.state.staticMenuMobileActive) {
2202
- this.layoutService.closeMobileMenu();
2203
- }
2204
- }
2205
- updateActiveMenuFromCurrentRoute() {
2206
- const menuItems = this.getMenuItems();
2207
- for (let i = 0; i < menuItems.length; i++) {
2208
- const menuItem = menuItems[i];
2209
- if (this.isActiveRoute(menuItem)) {
2210
- this.layoutService.setSelectedMainItem(i);
2211
- this.selectedMainMenuItem = menuItem;
2212
- if (menuItem.items && menuItem.items.length > 0) {
2213
- if (!this.isMobile() && !this.secondarySidebarExpanded && !this.layoutService.state.staticMenuMobileActive) {
2214
- this.layoutService.setSecondarySidebarExpanded(true);
2215
- }
2216
- }
2217
- else {
2218
- this.layoutService.setSecondarySidebarExpanded(false);
2219
- }
2220
- return;
2221
- }
2222
- }
2223
- }
2224
- isHaveSelectedChildItem(item) {
2225
- if (!item || !item.items || item.items.length === 0)
2226
- return false;
2227
- for (const child of item.items) {
2228
- if (this.isActiveRoute(child)) {
2229
- return true;
2230
- }
2231
- if (child.items && child.items.length > 0) {
2232
- if (this.isHaveSelectedChildItem(child)) {
2233
- return true;
2234
- }
2235
- }
2236
- }
2237
- return false;
2238
- }
2239
- getLocalText(text) {
2240
- return this.translateJsonPipe.transform(text);
2241
- }
2242
- toggleSidebar() {
2243
- // Eğer seçili bir ana menü öğesi varsa ve alt menüleri varsa toggle yapabiliriz
2244
- if (this.selectedMainMenuItem && this.selectedMainMenuItem.items && this.selectedMainMenuItem.items.length > 0) {
2245
- this.sidebarExpanded = !this.sidebarExpanded;
2246
- }
2247
- else if (this.sidebarExpanded) {
2248
- this.sidebarExpanded = false;
2249
- }
2250
- }
2251
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ExpandableMenuComponent, deps: [{ token: i1$3.TranslateJsonPipe }, { token: AppMenuService }, { token: i1$1.Router }, { token: i2$1.KeycloakService }, { token: i5.TranslocoService }, { token: LayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
2252
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ExpandableMenuComponent, isStandalone: true, selector: "app-expandable-menu", host: { listeners: { "window:resize": "onResize()" } }, providers: [TranslateJsonPipe], ngImport: i0, template: "<div class=\"new-layout-sidebar\" >\r\n\t<!-- Main sidebar (first level) -->\r\n\t<div class=\"main-sidebar\" style=\"position: relative;\">\r\n\t\t<div class=\"main-sidebar-content\">\r\n\t\t\t<ul class=\"main-menu\">\r\n\t\t\t\t@for(item of getMenuItems(); track item; let i = $index){\r\n\t\t\t\t\t@if(!item.separator){\r\n\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(item) || isHaveSelectedChildItem(item)}\"\r\n\t\t\t\t\t\t(click)=\"selectMainItem(i, item)\"\r\n\t\t\t\t\t\t[pTooltip]=\"(item.label && activeLang() ? item.label[activeLang()!] || '' : '')\"\r\n\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t<div class=\"main-menu-item\">\r\n\t\t\t\t\t\t\t<i [ngClass]=\"item.icon\" class=\"menu-icon\"></i>\r\n\t\t\t\t\t\t\t<!-- <small class=\"menu-label\">{{ item.label && activeLang() ? item.label[activeLang()!] || '' : '' }}</small> -->\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t</div>\r\n\t\t @if(selectedMainMenuItem && selectedMainMenuItem.items && selectedMainMenuItem.items.length > 0){\r\n\r\n\t\t\t <div class=\"sidebar-toggle-container\">\r\n\t\t\t\t <button class=\"sidebar-circle-toggle-btn\" (click)=\"toggleSidebar()\">\r\n\t\t\t\t\t <i class=\"pi\" [ngClass]=\"sidebarExpanded ? 'pi-angle-left' : 'pi-angle-right'\"></i>\r\n\t\t\t\t </button>\r\n\t\t\t </div>\r\n\t\t }\r\n\r\n\t<!-- Secondary sidebar (second level) -->\r\n\t<div class=\"secondary-sidebar\" [ngClass]=\"{'expanded': sidebarExpanded}\">\r\n\t\t<div class=\"secondary-content-wrapper\" style=\"position: relative;\">\r\n\t\t\t<!-- Secondary sidebar content -->\r\n\t\t\t<div class=\"secondary-sidebar-content\">\r\n\t\t\t\t@if(selectedMainMenuItem){\r\n\t\t\t\t\t<ul class=\"secondary-menu\">\r\n\t\t\t\t\t\t@for(subItem of selectedMainMenuItem.items; track subItem; let i = $index){\r\n\t\t\t\t\t\t\t\t<!-- Create menu item -->\r\n\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'active': isActiveRoute(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t<a [routerLink]=\"subItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"secondary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t<!-- Always render submenu if it exists -->\r\n\t\t\t\t\t\t\t\t\t @if(subItem.items && subItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t <ul class=\"tertiary-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t@for(childItem of subItem.items; track childItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'active': isActiveRoute(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"childItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"tertiary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- Always render deeper levels if they exist, also visible by default -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.items && childItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ul class=\"nested-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for(nestedItem of childItem.items; track nestedItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-item\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"nestedItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t </ul>\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n</div>\r\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] }); }
2253
- }
2254
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ExpandableMenuComponent, decorators: [{
2255
- type: Component,
2256
- args: [{ standalone: true, selector: 'app-expandable-menu', imports: [RouterLink, NgClass, TooltipModule], providers: [TranslateJsonPipe], template: "<div class=\"new-layout-sidebar\" >\r\n\t<!-- Main sidebar (first level) -->\r\n\t<div class=\"main-sidebar\" style=\"position: relative;\">\r\n\t\t<div class=\"main-sidebar-content\">\r\n\t\t\t<ul class=\"main-menu\">\r\n\t\t\t\t@for(item of getMenuItems(); track item; let i = $index){\r\n\t\t\t\t\t@if(!item.separator){\r\n\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(item) || isHaveSelectedChildItem(item)}\"\r\n\t\t\t\t\t\t(click)=\"selectMainItem(i, item)\"\r\n\t\t\t\t\t\t[pTooltip]=\"(item.label && activeLang() ? item.label[activeLang()!] || '' : '')\"\r\n\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t<div class=\"main-menu-item\">\r\n\t\t\t\t\t\t\t<i [ngClass]=\"item.icon\" class=\"menu-icon\"></i>\r\n\t\t\t\t\t\t\t<!-- <small class=\"menu-label\">{{ item.label && activeLang() ? item.label[activeLang()!] || '' : '' }}</small> -->\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t</div>\r\n\t\t @if(selectedMainMenuItem && selectedMainMenuItem.items && selectedMainMenuItem.items.length > 0){\r\n\r\n\t\t\t <div class=\"sidebar-toggle-container\">\r\n\t\t\t\t <button class=\"sidebar-circle-toggle-btn\" (click)=\"toggleSidebar()\">\r\n\t\t\t\t\t <i class=\"pi\" [ngClass]=\"sidebarExpanded ? 'pi-angle-left' : 'pi-angle-right'\"></i>\r\n\t\t\t\t </button>\r\n\t\t\t </div>\r\n\t\t }\r\n\r\n\t<!-- Secondary sidebar (second level) -->\r\n\t<div class=\"secondary-sidebar\" [ngClass]=\"{'expanded': sidebarExpanded}\">\r\n\t\t<div class=\"secondary-content-wrapper\" style=\"position: relative;\">\r\n\t\t\t<!-- Secondary sidebar content -->\r\n\t\t\t<div class=\"secondary-sidebar-content\">\r\n\t\t\t\t@if(selectedMainMenuItem){\r\n\t\t\t\t\t<ul class=\"secondary-menu\">\r\n\t\t\t\t\t\t@for(subItem of selectedMainMenuItem.items; track subItem; let i = $index){\r\n\t\t\t\t\t\t\t\t<!-- Create menu item -->\r\n\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'active': isActiveRoute(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t<a [routerLink]=\"subItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"secondary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t<!-- Always render submenu if it exists -->\r\n\t\t\t\t\t\t\t\t\t @if(subItem.items && subItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t <ul class=\"tertiary-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t@for(childItem of subItem.items; track childItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'active': isActiveRoute(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"childItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"tertiary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- Always render deeper levels if they exist, also visible by default -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.items && childItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ul class=\"nested-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for(nestedItem of childItem.items; track nestedItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-item\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"nestedItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t </ul>\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n</div>\r\n" }]
2257
- }], ctorParameters: () => [{ type: i1$3.TranslateJsonPipe }, { type: AppMenuService }, { type: i1$1.Router }, { type: i2$1.KeycloakService }, { type: i5.TranslocoService }, { type: LayoutService }], propDecorators: { onResize: [{
2258
- type: HostListener,
2259
- args: ['window:resize']
2260
- }] } });
2261
-
2262
- class StaticSidebarComponent {
2263
- constructor(menuService, router, layoutService, translateJsonPipe, translocoService) {
2264
- this.menuService = menuService;
2265
- this.router = router;
2266
- this.layoutService = layoutService;
2267
- this.translateJsonPipe = translateJsonPipe;
2268
- this.translocoService = translocoService;
2269
- this.menuNodes = signal([]);
2270
- this.filteredNodes = signal([]);
2271
- this.searchTerm = signal('');
2272
- this.routerSubscription = null;
2273
- this.MAX_LENGTH = { level0: 25, level1: 20, level2: 16, level3: 13 };
2274
- this.activeLang = toSignal(this.translocoService.langChanges$, { initialValue: 'tr' });
2275
- }
2276
- get isCollapsed() {
2277
- return this.layoutService.isStaticSidebarCollapsed();
2278
- }
2279
- get topLevelNodes() {
2280
- return this.menuNodes();
2281
- }
2282
- ngOnInit() {
2283
- this.buildMenuTree();
2284
- this.routerSubscription = this.router.events
2285
- .pipe(filter$1((event) => event instanceof NavigationEnd))
2286
- .subscribe(() => this.buildMenuTree());
2287
- }
2288
- ngOnDestroy() {
2289
- this.routerSubscription?.unsubscribe();
2290
- }
2291
- isTextTruncated(label, lang, level = 0) {
2292
- if (!label || !lang || !label[lang])
2293
- return false;
2294
- const text = label[lang];
2295
- const len = text.length;
2296
- const limits = [this.MAX_LENGTH.level0, this.MAX_LENGTH.level1, this.MAX_LENGTH.level2, this.MAX_LENGTH.level3];
2297
- return len > limits[Math.min(level, 3)];
2298
- }
2299
- isMobile() {
2300
- return this.layoutService.isMobile();
2301
- }
2302
- buildMenuTree() {
2303
- const menuItems = this.getMenuItems();
2304
- const nodes = this.convertToMenuNodes(menuItems);
2305
- this.menuNodes.set(nodes);
2306
- this.filteredNodes.set([...nodes]);
2307
- this.expandActiveMenu();
2308
- }
2309
- expandActiveMenu() {
2310
- const nodes = this.menuNodes();
2311
- this.findAndExpandActiveNode(nodes);
2312
- this.filteredNodes.set([...this.filteredNodes()]);
2313
- }
2314
- findAndExpandActiveNode(nodes) {
2315
- for (const node of nodes) {
2316
- if (this.isActiveRouteForNode(node)) {
2317
- return node;
2318
- }
2319
- if (node.children && node.children.length > 0) {
2320
- const activeChild = this.findAndExpandActiveNode(node.children);
2321
- if (activeChild) {
2322
- // we find active child and then opened its parent nodes
2323
- node.expanded = true;
2324
- return activeChild;
2325
- }
2326
- }
2327
- }
2328
- return null;
2329
- }
2330
- convertToMenuNodes(items, parentKey = '') {
2331
- return items
2332
- .filter((item) => !item.separator)
2333
- .map((item, index) => {
2334
- const key = parentKey ? `${parentKey}-${index}` : `${index}`;
2335
- const node = {
2336
- key,
2337
- label: item.label,
2338
- icon: item.icon,
2339
- routerLink: item.routerLink,
2340
- expanded: false
2341
- };
2342
- if (item.items && item.items.length > 0) {
2343
- node.children = this.convertToMenuNodes(item.items, key);
2344
- }
2345
- return node;
2346
- });
2347
- }
2348
- getMenuItems() {
2349
- const isHostMode = globalThis.isHostMode;
2350
- const hostMenuItems = globalThis.hostMenuItems;
2351
- return isHostMode ? hostMenuItems() : this.menuService.menuItems();
2352
- }
2353
- getLocalText(text) {
2354
- return this.translateJsonPipe.transform(text);
2355
- }
2356
- isActiveRouteForNode(node) {
2357
- if (!node.routerLink)
2358
- return false;
2359
- const currentUrl = this.router.url;
2360
- const hashUrl = currentUrl.indexOf('#') > -1 ? currentUrl.split('#')[1] : currentUrl;
2361
- if (hashUrl === node.routerLink || hashUrl === '/' + node.routerLink)
2362
- return true;
2363
- return (node.routerLink !== '/' &&
2364
- (hashUrl.startsWith(node.routerLink + '/') || hashUrl.startsWith('/' + node.routerLink + '/')));
2365
- }
2366
- // use on collapsed mode
2367
- isNodeOrChildActive(node) {
2368
- if (this.isActiveRouteForNode(node)) {
2369
- return true;
2370
- }
2371
- if (node.children && node.children.length > 0) {
2372
- return node.children.some(child => this.isNodeOrChildActive(child));
2373
- }
2374
- return false;
2375
- }
2376
- isTopLevelNodeActive(node) {
2377
- return this.isNodeOrChildActive(node);
2378
- }
2379
- isChildNodeActive(node) {
2380
- return this.isActiveRouteForNode(node);
2381
- }
2382
- toggleNode(node, level = 0) {
2383
- const wasExpanded = node.expanded;
2384
- if (level === 0) {
2385
- // Diğer ana menüleri kapat
2386
- this.closeOtherTopLevelNodes(node);
2387
- }
2388
- node.expanded = !wasExpanded;
2389
- this.filteredNodes.set([...this.filteredNodes()]);
2390
- }
2391
- closeOtherTopLevelNodes(exceptNode) {
2392
- const nodes = this.menuNodes();
2393
- nodes.forEach(node => {
2394
- if (node !== exceptNode) {
2395
- node.expanded = false;
2396
- this.closeAllChildNodes(node);
2397
- }
2398
- });
2399
- }
2400
- closeAllChildNodes(node) {
2401
- if (node.children) {
2402
- node.children.forEach(child => {
2403
- child.expanded = false;
2404
- this.closeAllChildNodes(child);
2405
- });
2406
- }
2407
- }
2408
- trackByKey(index, node) {
2409
- return node.key;
2410
- }
2411
- onMenuItemClick() {
2412
- if (this.isMobile()) {
2413
- this.layoutService.closeMobileMenu();
2414
- }
2415
- this.searchTerm.set('');
2416
- this.filteredNodes.set(this.menuNodes() || []);
2417
- }
2418
- onCollapsedItemClick(node) {
2419
- if (this.isCollapsed) {
2420
- this.layoutService.onMenuToggle();
2421
- }
2422
- this.closeOtherTopLevelNodes(node);
2423
- if (node.children && node.children.length > 0) {
2424
- node.expanded = true;
2425
- }
2426
- this.filteredNodes.set([...this.filteredNodes()]);
2427
- if (node.routerLink) {
2428
- this.onMenuItemClick();
2429
- }
2430
- }
2431
- onSearchChange() {
2432
- const currentSearchTerm = this.searchTerm()?.toLowerCase()?.trim();
2433
- if (!currentSearchTerm) {
2434
- this.filteredNodes.set(this.menuNodes() || []);
2435
- return;
2436
- }
2437
- this.filteredNodes.set(this.filterNodes(this.menuNodes(), currentSearchTerm));
2438
- }
2439
- filterNodes(nodes, searchTerm) {
2440
- const filtered = [];
2441
- const currentLang = this.translocoService.getActiveLang();
2442
- for (const node of nodes) {
2443
- // Convert label to string for search based on active language
2444
- const labelText = typeof node.label === 'string' ?
2445
- node.label
2446
- : node.label?.[currentLang] || node.label?.tr || node.label?.en || '';
2447
- const matches = labelText.toLowerCase().includes(searchTerm);
2448
- let filteredChildren = [];
2449
- if (node.children) {
2450
- filteredChildren = this.filterNodes(node.children, searchTerm);
2451
- }
2452
- if (matches || filteredChildren.length > 0) {
2453
- filtered.push({
2454
- ...node,
2455
- children: filteredChildren.length > 0 ? filteredChildren : node.children,
2456
- expanded: filteredChildren.length > 0
2457
- });
2458
- }
2459
- }
2460
- return filtered;
2461
- }
2462
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: StaticSidebarComponent, deps: [{ token: AppMenuService }, { token: i1$1.Router }, { token: LayoutService }, { token: i1$3.TranslateJsonPipe }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
2463
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: StaticSidebarComponent, isStandalone: true, selector: "app-static-sidebar", providers: [TranslateJsonPipe], ngImport: i0, template: "<div class=\"static-sidebar\" [class.collapsed]=\"isCollapsed\">\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t@if (!isCollapsed) {\r\n\t\t\t<div class=\"search-container\" *transloco=\"let t; read: ''\">\r\n\t\t\t\t<div class=\"search-wrapper\">\r\n\t\t\t\t\t<i class=\"pi pi-search search-icon\"></i>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tpInputText\r\n\t\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\t\t\tclass=\"search-static-sidebar\" />\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</p-scrollPanel>\r\n\t\t} @else {\r\n\t\t\t<!-- Collapsed mode - only icons -->\r\n\t\t\t<div class=\"collapsed-container\">\r\n\t\t\t\t@for (node of topLevelNodes; track trackByKey($index, node)) {\r\n\t\t\t\t\t@if (node.routerLink && (!node.children || node.children.length === 0)) {\r\n\t\t\t\t\t\t<a \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t<div \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t}\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [ngClass]=\"'level-' + level\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isChildNodeActive(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node, level)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isChildNodeActive(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node, level)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node, level)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t<div class=\"children-container\" [attr.data-level]=\"level\">\r\n\t\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".search-container{padding:12px 8px;margin:0}.search-wrapper{position:relative;width:100%}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#64748b;font-size:14px;z-index:10;pointer-events:none;transition:color .2s ease}.search-static-sidebar{background:#1e293b!important;border:1px solid rgba(148,163,184,.1)!important;height:36px!important;font-size:13px!important;font-weight:400;color:#cbd5e1!important;padding:0 12px 0 36px!important;border-radius:4px!important;width:100%!important;box-sizing:border-box!important;transition:all .25s ease!important}.search-static-sidebar::placeholder{font-size:12px!important}.search-static-sidebar:hover{background:#0f172ab3!important;border-color:#94a3b826!important}.search-static-sidebar:focus{outline:none!important;border:1px solid rgba(15,23,42,.8)!important;background:#0f172acc!important}.search-wrapper:focus-within .search-icon{color:#cbd5e1}.static-sidebar{width:260px;height:100vh;background:#1e293b;border-right:1px solid #0f172a;display:flex;flex-direction:column;position:fixed;left:0;top:55px;z-index:999;overflow-y:auto;overflow-x:hidden;transition:width .3s ease;box-shadow:2px 0 5px #0000000d}.static-sidebar.collapsed{width:64px;box-shadow:none}.static-sidebar .static-sidebar-content{flex:1;background:transparent;overflow:hidden}.static-sidebar .tree-container{padding:5px 0;overflow-x:hidden}.static-sidebar .tree-node{margin-bottom:4px;position:relative}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:10px 12px;border-radius:4px;margin:0 5px;cursor:pointer;transition:all .25s ease;text-decoration:none;color:#cbd5e1!important;overflow:hidden;position:relative;white-space:nowrap}.static-sidebar .tree-node .node-item:before{content:\"\";position:absolute;width:0;height:100%;top:0;left:0;background-color:var(--primary-color);opacity:.08;transition:width .25s ease-in-out}.static-sidebar .tree-node .node-item:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover:before{width:100%}.static-sidebar .tree-node .node-item:hover .node-label{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover .node-icon{color:#e8e7e7!important;transform:translate(2px)}.static-sidebar .tree-node .node-item.is-page:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.is-page:hover:before{width:100%}.static-sidebar .tree-node .node-item.active{background-color:#495465!important;color:#e8e7e7!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.static-sidebar .tree-node .node-item.active:before{display:none}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon,.static-sidebar .tree-node .node-item.active .toggle-btn i{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.active:hover{background-color:var(--primary-color)}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:8px;width:100%;min-width:0;position:relative;z-index:2}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:3px;color:#cbd5e1;cursor:pointer;transition:all .25s ease;flex-shrink:0;z-index:3}.static-sidebar .tree-node .toggle-btn:hover{transform:scale(1.1)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem;transition:transform .2s ease}.static-sidebar .tree-node .node-icon{color:#cbd5e1;font-size:16px;flex-shrink:0;transition:transform .25s ease,color .25s ease;position:relative}.static-sidebar .tree-node .node-label{flex:1;font-size:13px;font-weight:500;color:#cbd5e1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .25s ease;position:relative}.static-sidebar .collapsed-container{padding:8px 0;display:flex;flex-direction:column;align-items:center;width:100%}.static-sidebar .collapsed-item{width:100%;display:flex;flex-direction:column;align-items:center;padding:12px 0;cursor:pointer;transition:all .25s ease;text-decoration:none;position:relative;overflow:hidden;margin-bottom:4px;color:#cbd5e1}.static-sidebar .collapsed-item:hover{color:#e8e7e7}.static-sidebar .collapsed-item:hover .collapsed-icon{transform:scale(1.15);color:#e8e7e7}.static-sidebar .collapsed-item:hover:after{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a;opacity:.7}.static-sidebar .collapsed-item.active{background-color:#495465!important}.static-sidebar .collapsed-item.active:before{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a}.static-sidebar .collapsed-item.active .collapsed-icon{color:#fff!important}.static-sidebar .collapsed-item .collapsed-icon{font-size:22px;color:#cbd5e1;transition:all .2s ease}.static-sidebar .children-container{position:relative}.static-sidebar .children-container:before{content:\"\";position:absolute;left:25px;top:0;bottom:0;width:1px;background-color:#4755694d;z-index:1}.static-sidebar .tree-node{position:relative}.static-sidebar .tree-node.level-0 .node-item{margin-right:20px;width:240px;max-width:240px}.static-sidebar .tree-node.level-0 .node-label{font-size:13px;font-weight:500;color:#cbd5e1}.static-sidebar .tree-node.level-0 .node-icon{font-size:16px}.static-sidebar .tree-node.level-1 .node-item{margin-left:36px;margin-right:20px;padding:8px 12px;width:204px;max-width:204px}.static-sidebar .tree-node.level-1 .node-label{font-size:12px;font-weight:400}.static-sidebar .tree-node.level-1 .node-icon{font-size:15px}.static-sidebar .tree-node.level-2 .node-item{margin-left:52px;margin-right:20px;width:188px;max-width:188px}.static-sidebar .tree-node.level-2 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-2 .node-icon{font-size:14px}.static-sidebar .tree-node.level-2.active .node-item{background-color:#495465!important}.static-sidebar .tree-node.level-2.active .node-item .node-label{color:#e8e7e7!important}.static-sidebar .tree-node.level-3 .node-item{margin-left:68px;margin-right:20px;padding:6px 12px;width:172px;max-width:172px}.static-sidebar .tree-node.level-3 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-3 .node-icon{font-size:13px}:host ::ng-deep .p-scrollpanel .p-scrollpanel-wrapper{border:none}:host ::ng-deep .p-scrollpanel .p-scrollpanel-content{padding-right:5px}:host ::ng-deep .p-scrollpanel-bar-y{background:#1e293b;width:4px;border-radius:4px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:#1e293b}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i7$1.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }] }); }
2464
- }
2465
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: StaticSidebarComponent, decorators: [{
2466
- type: Component,
2467
- args: [{ standalone: true, selector: 'app-static-sidebar', imports: [RouterLink, NgClass, NgTemplateOutlet, ScrollPanelModule, TooltipModule, FormsModule, TranslocoModule], providers: [TranslateJsonPipe], template: "<div class=\"static-sidebar\" [class.collapsed]=\"isCollapsed\">\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t@if (!isCollapsed) {\r\n\t\t\t<div class=\"search-container\" *transloco=\"let t; read: ''\">\r\n\t\t\t\t<div class=\"search-wrapper\">\r\n\t\t\t\t\t<i class=\"pi pi-search search-icon\"></i>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tpInputText\r\n\t\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\t\t\tclass=\"search-static-sidebar\" />\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</p-scrollPanel>\r\n\t\t} @else {\r\n\t\t\t<!-- Collapsed mode - only icons -->\r\n\t\t\t<div class=\"collapsed-container\">\r\n\t\t\t\t@for (node of topLevelNodes; track trackByKey($index, node)) {\r\n\t\t\t\t\t@if (node.routerLink && (!node.children || node.children.length === 0)) {\r\n\t\t\t\t\t\t<a \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t<div \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t}\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [ngClass]=\"'level-' + level\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isChildNodeActive(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node, level)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isChildNodeActive(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node, level)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node, level)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t<div class=\"children-container\" [attr.data-level]=\"level\">\r\n\t\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".search-container{padding:12px 8px;margin:0}.search-wrapper{position:relative;width:100%}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#64748b;font-size:14px;z-index:10;pointer-events:none;transition:color .2s ease}.search-static-sidebar{background:#1e293b!important;border:1px solid rgba(148,163,184,.1)!important;height:36px!important;font-size:13px!important;font-weight:400;color:#cbd5e1!important;padding:0 12px 0 36px!important;border-radius:4px!important;width:100%!important;box-sizing:border-box!important;transition:all .25s ease!important}.search-static-sidebar::placeholder{font-size:12px!important}.search-static-sidebar:hover{background:#0f172ab3!important;border-color:#94a3b826!important}.search-static-sidebar:focus{outline:none!important;border:1px solid rgba(15,23,42,.8)!important;background:#0f172acc!important}.search-wrapper:focus-within .search-icon{color:#cbd5e1}.static-sidebar{width:260px;height:100vh;background:#1e293b;border-right:1px solid #0f172a;display:flex;flex-direction:column;position:fixed;left:0;top:55px;z-index:999;overflow-y:auto;overflow-x:hidden;transition:width .3s ease;box-shadow:2px 0 5px #0000000d}.static-sidebar.collapsed{width:64px;box-shadow:none}.static-sidebar .static-sidebar-content{flex:1;background:transparent;overflow:hidden}.static-sidebar .tree-container{padding:5px 0;overflow-x:hidden}.static-sidebar .tree-node{margin-bottom:4px;position:relative}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:10px 12px;border-radius:4px;margin:0 5px;cursor:pointer;transition:all .25s ease;text-decoration:none;color:#cbd5e1!important;overflow:hidden;position:relative;white-space:nowrap}.static-sidebar .tree-node .node-item:before{content:\"\";position:absolute;width:0;height:100%;top:0;left:0;background-color:var(--primary-color);opacity:.08;transition:width .25s ease-in-out}.static-sidebar .tree-node .node-item:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover:before{width:100%}.static-sidebar .tree-node .node-item:hover .node-label{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover .node-icon{color:#e8e7e7!important;transform:translate(2px)}.static-sidebar .tree-node .node-item.is-page:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.is-page:hover:before{width:100%}.static-sidebar .tree-node .node-item.active{background-color:#495465!important;color:#e8e7e7!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.static-sidebar .tree-node .node-item.active:before{display:none}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon,.static-sidebar .tree-node .node-item.active .toggle-btn i{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.active:hover{background-color:var(--primary-color)}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:8px;width:100%;min-width:0;position:relative;z-index:2}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:3px;color:#cbd5e1;cursor:pointer;transition:all .25s ease;flex-shrink:0;z-index:3}.static-sidebar .tree-node .toggle-btn:hover{transform:scale(1.1)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem;transition:transform .2s ease}.static-sidebar .tree-node .node-icon{color:#cbd5e1;font-size:16px;flex-shrink:0;transition:transform .25s ease,color .25s ease;position:relative}.static-sidebar .tree-node .node-label{flex:1;font-size:13px;font-weight:500;color:#cbd5e1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .25s ease;position:relative}.static-sidebar .collapsed-container{padding:8px 0;display:flex;flex-direction:column;align-items:center;width:100%}.static-sidebar .collapsed-item{width:100%;display:flex;flex-direction:column;align-items:center;padding:12px 0;cursor:pointer;transition:all .25s ease;text-decoration:none;position:relative;overflow:hidden;margin-bottom:4px;color:#cbd5e1}.static-sidebar .collapsed-item:hover{color:#e8e7e7}.static-sidebar .collapsed-item:hover .collapsed-icon{transform:scale(1.15);color:#e8e7e7}.static-sidebar .collapsed-item:hover:after{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a;opacity:.7}.static-sidebar .collapsed-item.active{background-color:#495465!important}.static-sidebar .collapsed-item.active:before{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a}.static-sidebar .collapsed-item.active .collapsed-icon{color:#fff!important}.static-sidebar .collapsed-item .collapsed-icon{font-size:22px;color:#cbd5e1;transition:all .2s ease}.static-sidebar .children-container{position:relative}.static-sidebar .children-container:before{content:\"\";position:absolute;left:25px;top:0;bottom:0;width:1px;background-color:#4755694d;z-index:1}.static-sidebar .tree-node{position:relative}.static-sidebar .tree-node.level-0 .node-item{margin-right:20px;width:240px;max-width:240px}.static-sidebar .tree-node.level-0 .node-label{font-size:13px;font-weight:500;color:#cbd5e1}.static-sidebar .tree-node.level-0 .node-icon{font-size:16px}.static-sidebar .tree-node.level-1 .node-item{margin-left:36px;margin-right:20px;padding:8px 12px;width:204px;max-width:204px}.static-sidebar .tree-node.level-1 .node-label{font-size:12px;font-weight:400}.static-sidebar .tree-node.level-1 .node-icon{font-size:15px}.static-sidebar .tree-node.level-2 .node-item{margin-left:52px;margin-right:20px;width:188px;max-width:188px}.static-sidebar .tree-node.level-2 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-2 .node-icon{font-size:14px}.static-sidebar .tree-node.level-2.active .node-item{background-color:#495465!important}.static-sidebar .tree-node.level-2.active .node-item .node-label{color:#e8e7e7!important}.static-sidebar .tree-node.level-3 .node-item{margin-left:68px;margin-right:20px;padding:6px 12px;width:172px;max-width:172px}.static-sidebar .tree-node.level-3 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-3 .node-icon{font-size:13px}:host ::ng-deep .p-scrollpanel .p-scrollpanel-wrapper{border:none}:host ::ng-deep .p-scrollpanel .p-scrollpanel-content{padding-right:5px}:host ::ng-deep .p-scrollpanel-bar-y{background:#1e293b;width:4px;border-radius:4px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:#1e293b}\n"] }]
2468
- }], ctorParameters: () => [{ type: AppMenuService }, { type: i1$1.Router }, { type: LayoutService }, { type: i1$3.TranslateJsonPipe }, { type: i5.TranslocoService }] });
2469
-
2470
- class NotificationsService extends RestClient {
2471
- constructor() {
2472
- super();
2473
- this.states = {};
2474
- }
2475
- getNotifications(post) {
2476
- return new Observable();
2477
- }
2478
- markAsReadNotification(pluginId) {
2479
- return new Observable();
2480
- }
2481
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NotificationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2482
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NotificationsService, providedIn: 'root' }); }
2483
- }
2484
- __decorate([
2485
- ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, 'audits/search')
2486
- ], NotificationsService.prototype, "getNotifications", null);
2487
- __decorate([
2488
- ServiceCall(HTTPMethods.PUTBYDYNAMICPATH, ProxyTypes.ClientSide, 'audits/$/read')
2489
- ], NotificationsService.prototype, "markAsReadNotification", null);
2490
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NotificationsService, decorators: [{
2491
- type: Injectable,
2492
- args: [{ providedIn: 'root' }]
2493
- }], ctorParameters: () => [], propDecorators: { getNotifications: [], markAsReadNotification: [] } });
2494
-
2495
- class NotificationsSidebarComponent {
2496
- get getUserPhones() {
2497
- const phones = this.keycloak.getKeycloakInstance().profile?.attributes?.['phone'];
2498
- if (phones && Array.isArray(phones)) {
2499
- return phones;
2500
- }
2501
- else if (phones && typeof phones === 'string') {
2502
- return [phones];
2503
- }
2504
- return [];
2505
- }
2506
- get getUserMail() {
2507
- return this.keycloak.getKeycloakInstance().profile?.email;
2508
- }
2509
- constructor(layoutService, notificationsService, translocoService, router, keycloak) {
2510
- this.layoutService = layoutService;
2511
- this.notificationsService = notificationsService;
2512
- this.translocoService = translocoService;
2513
- this.router = router;
2514
- this.keycloak = keycloak;
2515
- this.notifications = signal([]);
2516
- this.selectedNotification = null;
2517
- this.ActivityTypesEnum = ActivityTypesEnum;
2518
- this.DetailNotificationTypeEnum = DetailNotificationTypeEnum;
2519
- this.regularIcons = regularIcons;
2520
- this.solidIcons = solidIcons;
2521
- this.oneMonthAgo = new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000);
2522
- this.subjects = {
2523
- markAsRead: new Subject(),
2524
- loadNotifications: new Subject()
2525
- };
2526
- this.markAsReadService = toSignal(this.subjects.markAsRead.pipe(switchMap((id) => this.notificationsService.markAsReadNotification(id))));
2527
- this.loadNotificationsService = toSignal(this.subjects.loadNotifications.pipe(switchMap(() => this.notificationsService.getNotifications({
2528
- pager: {
2529
- pageSize: 10,
2530
- pageNumber: 1
2531
- },
2532
- startDate: this.oneMonthAgo.dateToLong('time') || 0,
2533
- endDate: new Date().dateToLong('time') || 0,
2534
- read: false,
2535
- toList: [this.getUserMail, ...this.getUserPhones],
2536
- }))));
2537
- this.initializeEffects();
2538
- }
2539
- ngOnInit() {
2540
- this.loadNotifications();
2541
- }
2542
- loadNotifications() {
2543
- this.subjects.loadNotifications.next();
2544
- }
2545
- initializeEffects() {
2546
- effect(() => {
2547
- const service = this.loadNotificationsService();
2548
- if (service?.response) {
2549
- this.notifications.set(service.response.result);
2550
- // Update unread count in layoutService
2551
- this.layoutService.setUnreadNotificationCount(service?.response.resultInfo.totalItem || 0);
2552
- }
2553
- }, { allowSignalWrites: true });
2554
- effect(() => {
2555
- const service = this.markAsReadService();
2556
- if (service?.response) {
2557
- this.loadNotifications();
2558
- if (this.selectedNotification?.detailNotificationType === DetailNotificationTypeEnum.TODO_ITEM) {
2559
- this.router.navigate([`mng/todo-tasks/detail/${this.selectedNotification?.referenceId}`]);
2560
- }
2561
- }
2562
- });
2563
- }
2564
- get visible() {
2565
- return this.layoutService.state.notificationsSidebarVisible;
2566
- }
2567
- set visible(value) {
2568
- this.layoutService.state.notificationsSidebarVisible = value;
2569
- }
2570
- markNotificationAsRead(notification) {
2571
- this.selectedNotification = notification;
2572
- this.subjects.markAsRead.next(notification.id);
2573
- this.visible = false;
2574
- if (notification?.detailNotificationType === DetailNotificationTypeEnum.TODO_ITEM) {
2575
- this.router.navigate([`mng/todo-tasks/detail/${notification?.referenceId}`]);
2576
- }
2577
- else if (notification?.detailNotificationType === DetailNotificationTypeEnum.BATCH_JOB) {
2578
- this.router.navigate([`mng/bulk-operations/${notification?.referenceId}`]);
2579
- }
2580
- }
2581
- markNotificationAsReadOnDotIcon(notification) {
2582
- if (!notification.read) {
2583
- this.subjects.markAsRead.next(notification.id);
2584
- }
2585
- }
2586
- trackByNotificationId(index, notification) {
2587
- return notification.id;
2588
- }
2589
- getNotificationTitle(notification) {
2590
- return notification.templateTitle || notification.templateCode || '';
2591
- }
2592
- getNotificationContent(notification) {
2593
- const truncated = notification.content?.length > 200 ? notification.content?.substring(0, 200) + '...' : notification.content;
2594
- return truncated || '';
2595
- }
2596
- formatNotificationDate(startDate) {
2597
- if (!startDate) {
2598
- return '';
2599
- }
2600
- const dateStr = startDate.toString();
2601
- const year = parseInt(dateStr.substring(0, 4));
2602
- const month = parseInt(dateStr.substring(4, 6)) - 1;
2603
- const day = parseInt(dateStr.substring(6, 8));
2604
- const hour = parseInt(dateStr.substring(8, 10));
2605
- const minute = parseInt(dateStr.substring(10, 12));
2606
- const second = parseInt(dateStr.substring(12, 14));
2607
- const notificationDate = new Date(year, month, day, hour, minute, second);
2608
- const now = new Date();
2609
- const diffMs = now.getTime() - notificationDate.getTime();
2610
- const diffMinutes = Math.floor(diffMs / (1000 * 60));
2611
- const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
2612
- const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
2613
- const diffWeeks = Math.floor(diffDays / 7);
2614
- const diffMonths = Math.floor(diffDays / 30);
2615
- if (diffMinutes < 1) {
2616
- return this.translocoService.translate('notifications.time.justNow');
2617
- }
2618
- else if (diffMinutes < 60) {
2619
- return this.translocoService.translate('notifications.time.minutesAgo', { count: diffMinutes });
2620
- }
2621
- else if (diffHours < 24) {
2622
- return this.translocoService.translate('notifications.time.hoursAgo', { count: diffHours });
2623
- }
2624
- else if (diffDays < 7) {
2625
- return this.translocoService.translate('notifications.time.daysAgo', { count: diffDays });
2626
- }
2627
- else if (diffWeeks < 4) {
2628
- return this.translocoService.translate('notifications.time.weeksAgo', { count: diffWeeks });
2629
- }
2630
- else {
2631
- return this.translocoService.translate('notifications.time.monthsAgo', { count: diffMonths });
2632
- }
2633
- }
2634
- navigateToAllNotifications() {
2635
- this.router.navigate(['mng/control-management/sms-email-audit']);
2636
- this.visible = false;
2637
- }
2638
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NotificationsSidebarComponent, deps: [{ token: LayoutService }, { token: NotificationsService }, { token: i5.TranslocoService }, { token: i1$1.Router }, { token: i2$1.KeycloakService }], target: i0.ɵɵFactoryTarget.Component }); }
2639
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: NotificationsSidebarComponent, isStandalone: true, selector: "app-notifications-sidebar", ngImport: i0, template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-notifications-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'notifications'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between w-full\">\r\n\t\t\t<div class=\"flex align-items-center\">\r\n\t\t\t\t<i class=\"pi pi-bell text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('title') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"notifications-content\">\r\n\t\t@if (notifications().length > 0) {\r\n\t\t\t<div class=\"notifications-list\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"notifications-items\">\r\n\t\t\t\t\t\t@for (notification of notifications(); track trackByNotificationId($index, notification)) {\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass=\"notification-item\"\r\n\t\t\t\t\t\t\t\t[class.unread-item]=\"!notification.read\"\r\n\t\t\t\t\t\t\t\t(click)=\"\r\n\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\tnotification?.detailNotificationType === DetailNotificationTypeEnum.TODO_ITEM ||\r\n\t\t\t\t\t\t\t\t\t\tnotification?.detailNotificationType === DetailNotificationTypeEnum.BATCH_JOB\r\n\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\tmarkNotificationAsRead(notification)\r\n\t\t\t\t\t\t\t\t\t:\tnull\r\n\t\t\t\t\t\t\t\t\">\r\n\t\t\t\t\t\t\t\t<div class=\"item-content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-header\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-title\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (notification.type === ActivityTypesEnum.SMS) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"notification-icon sms-icon\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<fa-icon [icon]=\"regularIcons.faMessage\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if (!notification.read) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"notification-icon email-icon unread\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<fa-icon [icon]=\"regularIcons.faEnvelope\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"notification-icon email-icon read\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<fa-icon [icon]=\"regularIcons.faEnvelopeOpen\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t<p class=\"title-text ml-2\">{{ getNotificationTitle(notification) }}</p>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"notification-date\">{{ formatNotificationDate(notification.sendingDate) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t@if (!notification.read) {\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faCircle\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"unread-dot\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"t('markAsRead')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"left\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"markNotificationAsReadOnDotIcon(notification); $event.stopPropagation()\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-meta\"></div>\r\n\t\t\t\t\t\t\t\t\t@if (getNotificationContent(notification)) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-content-preview\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (notification.type === ActivityTypesEnum.EMAIL) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div [innerHTML]=\"notification.content | safe: 'html'\" class=\"html-preview line-clamp-3\"></div>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"text-content\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ getNotificationContent(notification) }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-bell empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">{{ t('noNotifications') }}</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">{{ t('noNotificationsDescription') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<div class=\"flex justify-content-center p-2 border-top-1 surface-border\">\r\n\t\t\t<aril-button\r\n\t\t\t\t[label]=\"t('allShow')\"\r\n\t\t\t\ticon=\"EXTERNAL_LINK\"\r\n\t\t\t\tcolor=\"primary\"\r\n\t\t\t\tsize=\"md\"\r\n\t\t\t\t(clickEvent)=\"navigateToAllNotifications()\">\r\n\t\t\t</aril-button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<p-confirmDialog></p-confirmDialog>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-notifications-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-notifications-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem 1.5rem}:host ::ng-deep .layout-notifications-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600}.notifications-content{display:flex;flex-direction:column;height:100%;background:var(--surface-0)}.add-section{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.notifications-list{flex:1;overflow:hidden}.notifications-items{padding:0}.notification-item{background:transparent;border-bottom:1px solid var(--surface-border);cursor:pointer;transition:background-color .2s ease;position:relative}.notification-item:hover{background:var(--surface-hover)}.notification-item:last-child{border-bottom:none}.notification-item.unread-item{background:var(--surface-50)}.notification-item.unread-item:hover{background:var(--surface-100)}.notification-item.unread-item .title-text{font-weight:500}.item-content{padding:1.125rem 1rem}.item-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.625rem;gap:1rem}.item-title{display:flex;align-items:center;flex:1;min-width:0;gap:.4em}.item-title .notification-icon{width:1.75rem;height:1.75rem;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .2s ease}.item-title .notification-icon fa-icon{font-size:.875rem;transition:all .2s ease}.item-title .notification-icon.email-icon.unread{background-color:#3b82f6;color:#fff;box-shadow:0 1px 4px #00000026}.item-title .notification-icon.email-icon.unread fa-icon{color:#fff}.item-title .notification-icon.email-icon.read{background:var(--surface-200);color:var(--text-color-secondary)}.item-title .notification-icon.email-icon.read fa-icon{color:var(--text-color-secondary)}.item-title .notification-icon.sms-icon{background:linear-gradient(135deg,var(--green-500),var(--green-600));color:#fff;box-shadow:0 2px 8px #22c55e40}.item-title .notification-icon.sms-icon fa-icon{color:#fff}.item-title .title-text{font-weight:500;line-height:1.5;font-size:.975rem;margin:0}.notification-date{font-size:.8rem;color:var(--text-color-secondary);font-weight:500;white-space:nowrap;background:var(--surface-100);padding:.2rem .4rem;border-radius:.25rem}.item-content-preview{margin-top:.625rem;color:var(--text-color-secondary);padding-left:1.5rem;border-left:2px solid var(--surface-200)}.item-content-preview .text-content{font-size:.875rem;line-height:1.5;margin:0;font-style:italic}.item-content-preview .html-preview{font-size:.875rem;line-height:1.5;max-height:75px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3;overflow:hidden;word-break:break-word;white-space:normal;font-style:italic}.empty-state{display:flex;align-items:center;justify-content:center;flex:1;padding:2rem}.empty-state .empty-content{text-align:center}.empty-state .empty-content .empty-icon{font-size:4rem;color:var(--text-color-secondary);opacity:.3;margin-bottom:1rem}.empty-state .empty-content .empty-title{font-size:1.25rem;font-weight:600;color:var(--text-color);margin-bottom:.5rem}.empty-state .empty-content .empty-message{color:var(--text-color-secondary);margin:0}.unread-dot{color:#3b82f6;font-size:.625rem;cursor:pointer;transition:opacity .2s ease;opacity:.8}.unread-dot:hover{opacity:1}@media (max-width: 768px){.layout-notifications-sidebar ::ng-deep .p-sidebar{width:100%!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i6$1.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i7$1.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i8.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: BadgeModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i10.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "pipe", type: SafePipe, name: "safe" }] }); }
2640
- }
2641
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: NotificationsSidebarComponent, decorators: [{
2642
- type: Component,
2643
- args: [{ standalone: true, selector: 'app-notifications-sidebar', imports: [
2644
- CommonModule,
2645
- SidebarModule,
2646
- ScrollPanelModule,
2647
- ConfirmDialogModule,
2648
- PaginatorModule,
2649
- ButtonComponent,
2650
- TranslocoModule,
2651
- TooltipModule,
2652
- BadgeModule,
2653
- FontAwesomeModule,
2654
- SafePipe
2655
- ], template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-notifications-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'notifications'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between w-full\">\r\n\t\t\t<div class=\"flex align-items-center\">\r\n\t\t\t\t<i class=\"pi pi-bell text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('title') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"notifications-content\">\r\n\t\t@if (notifications().length > 0) {\r\n\t\t\t<div class=\"notifications-list\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"notifications-items\">\r\n\t\t\t\t\t\t@for (notification of notifications(); track trackByNotificationId($index, notification)) {\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass=\"notification-item\"\r\n\t\t\t\t\t\t\t\t[class.unread-item]=\"!notification.read\"\r\n\t\t\t\t\t\t\t\t(click)=\"\r\n\t\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t\t\tnotification?.detailNotificationType === DetailNotificationTypeEnum.TODO_ITEM ||\r\n\t\t\t\t\t\t\t\t\t\tnotification?.detailNotificationType === DetailNotificationTypeEnum.BATCH_JOB\r\n\t\t\t\t\t\t\t\t\t) ?\r\n\t\t\t\t\t\t\t\t\t\tmarkNotificationAsRead(notification)\r\n\t\t\t\t\t\t\t\t\t:\tnull\r\n\t\t\t\t\t\t\t\t\">\r\n\t\t\t\t\t\t\t\t<div class=\"item-content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-header\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-title\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (notification.type === ActivityTypesEnum.SMS) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"notification-icon sms-icon\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<fa-icon [icon]=\"regularIcons.faMessage\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if (!notification.read) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"notification-icon email-icon unread\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<fa-icon [icon]=\"regularIcons.faEnvelope\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"notification-icon email-icon read\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<fa-icon [icon]=\"regularIcons.faEnvelopeOpen\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t<p class=\"title-text ml-2\">{{ getNotificationTitle(notification) }}</p>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"notification-date\">{{ formatNotificationDate(notification.sendingDate) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t@if (!notification.read) {\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faCircle\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"unread-dot\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"t('markAsRead')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"left\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"markNotificationAsReadOnDotIcon(notification); $event.stopPropagation()\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-meta\"></div>\r\n\t\t\t\t\t\t\t\t\t@if (getNotificationContent(notification)) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-content-preview\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (notification.type === ActivityTypesEnum.EMAIL) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div [innerHTML]=\"notification.content | safe: 'html'\" class=\"html-preview line-clamp-3\"></div>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"text-content\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ getNotificationContent(notification) }}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-bell empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">{{ t('noNotifications') }}</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">{{ t('noNotificationsDescription') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<div class=\"flex justify-content-center p-2 border-top-1 surface-border\">\r\n\t\t\t<aril-button\r\n\t\t\t\t[label]=\"t('allShow')\"\r\n\t\t\t\ticon=\"EXTERNAL_LINK\"\r\n\t\t\t\tcolor=\"primary\"\r\n\t\t\t\tsize=\"md\"\r\n\t\t\t\t(clickEvent)=\"navigateToAllNotifications()\">\r\n\t\t\t</aril-button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<p-confirmDialog></p-confirmDialog>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-notifications-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-notifications-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem 1.5rem}:host ::ng-deep .layout-notifications-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600}.notifications-content{display:flex;flex-direction:column;height:100%;background:var(--surface-0)}.add-section{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.notifications-list{flex:1;overflow:hidden}.notifications-items{padding:0}.notification-item{background:transparent;border-bottom:1px solid var(--surface-border);cursor:pointer;transition:background-color .2s ease;position:relative}.notification-item:hover{background:var(--surface-hover)}.notification-item:last-child{border-bottom:none}.notification-item.unread-item{background:var(--surface-50)}.notification-item.unread-item:hover{background:var(--surface-100)}.notification-item.unread-item .title-text{font-weight:500}.item-content{padding:1.125rem 1rem}.item-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.625rem;gap:1rem}.item-title{display:flex;align-items:center;flex:1;min-width:0;gap:.4em}.item-title .notification-icon{width:1.75rem;height:1.75rem;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .2s ease}.item-title .notification-icon fa-icon{font-size:.875rem;transition:all .2s ease}.item-title .notification-icon.email-icon.unread{background-color:#3b82f6;color:#fff;box-shadow:0 1px 4px #00000026}.item-title .notification-icon.email-icon.unread fa-icon{color:#fff}.item-title .notification-icon.email-icon.read{background:var(--surface-200);color:var(--text-color-secondary)}.item-title .notification-icon.email-icon.read fa-icon{color:var(--text-color-secondary)}.item-title .notification-icon.sms-icon{background:linear-gradient(135deg,var(--green-500),var(--green-600));color:#fff;box-shadow:0 2px 8px #22c55e40}.item-title .notification-icon.sms-icon fa-icon{color:#fff}.item-title .title-text{font-weight:500;line-height:1.5;font-size:.975rem;margin:0}.notification-date{font-size:.8rem;color:var(--text-color-secondary);font-weight:500;white-space:nowrap;background:var(--surface-100);padding:.2rem .4rem;border-radius:.25rem}.item-content-preview{margin-top:.625rem;color:var(--text-color-secondary);padding-left:1.5rem;border-left:2px solid var(--surface-200)}.item-content-preview .text-content{font-size:.875rem;line-height:1.5;margin:0;font-style:italic}.item-content-preview .html-preview{font-size:.875rem;line-height:1.5;max-height:75px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3;overflow:hidden;word-break:break-word;white-space:normal;font-style:italic}.empty-state{display:flex;align-items:center;justify-content:center;flex:1;padding:2rem}.empty-state .empty-content{text-align:center}.empty-state .empty-content .empty-icon{font-size:4rem;color:var(--text-color-secondary);opacity:.3;margin-bottom:1rem}.empty-state .empty-content .empty-title{font-size:1.25rem;font-weight:600;color:var(--text-color);margin-bottom:.5rem}.empty-state .empty-content .empty-message{color:var(--text-color-secondary);margin:0}.unread-dot{color:#3b82f6;font-size:.625rem;cursor:pointer;transition:opacity .2s ease;opacity:.8}.unread-dot:hover{opacity:1}@media (max-width: 768px){.layout-notifications-sidebar ::ng-deep .p-sidebar{width:100%!important}}\n"] }]
2656
- }], ctorParameters: () => [{ type: LayoutService }, { type: NotificationsService }, { type: i5.TranslocoService }, { type: i1$1.Router }, { type: i2$1.KeycloakService }] });
2657
-
2658
- class AppLayoutComponent {
2659
- constructor(menuService, layoutService, renderer, router) {
2660
- this.menuService = menuService;
2661
- this.layoutService = layoutService;
2662
- this.renderer = renderer;
2663
- this.router = router;
2664
- this.globalThis = globalThis;
2665
- this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {
2666
- if (!this.menuOutsideClickListener) {
2667
- this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {
2668
- const isOutsideClicked = !(this.appTopbar.menuButton.nativeElement.isSameNode(event.target) ||
2669
- this.appTopbar.menuButton.nativeElement.contains(event.target) ||
2670
- (this.expandableMenuComponent && this.isElementInside(event.target, 'app-expandable-menu')) ||
2671
- (this.staticSidebarComponent && this.isElementInside(event.target, 'app-static-sidebar')));
2672
- if (isOutsideClicked) {
2673
- this.hideMenu();
2674
- }
2675
- });
2676
- }
2677
- if (this.layoutService.state.staticMenuMobileActive) {
2678
- this.blockBodyScroll();
2679
- }
2680
- });
2681
- this.router.events.pipe(filter$1((event) => event instanceof NavigationEnd)).subscribe(() => {
2682
- if (!this.layoutService.mfeAppItemClicked())
2683
- this.hideMenu();
2684
- });
2685
- }
2686
- blockBodyScroll() {
2687
- if (document.body.classList) {
2688
- document.body.classList.add('blocked-scroll');
2689
- }
2690
- else {
2691
- document.body.className += ' blocked-scroll';
2692
- }
2693
- }
2694
- unblockBodyScroll() {
2695
- if (document.body.classList) {
2696
- document.body.classList.remove('blocked-scroll');
2697
- }
2698
- else {
2699
- document.body.className = document.body.className.replace(new RegExp('(^|\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
2700
- }
2701
- }
2702
- // Helper method to check if element is inside a specific component
2703
- isElementInside(element, selector) {
2704
- if (!element)
2705
- return false;
2706
- let currentElement = element;
2707
- while (currentElement && currentElement !== document) {
2708
- if (currentElement.tagName && currentElement.tagName.toLowerCase() === selector) {
2709
- return true;
2710
- }
2711
- currentElement = currentElement.parentElement;
2712
- }
2713
- return false;
2714
- }
2715
- hideMenu() {
2716
- this.layoutService.state.staticMenuMobileActive = false;
2717
- this.menuService.reset();
2718
- if (this.menuOutsideClickListener) {
2719
- this.menuOutsideClickListener();
2720
- this.menuOutsideClickListener = null;
2721
- }
2722
- if (this.menuScrollListener) {
2723
- this.menuScrollListener();
2724
- this.menuScrollListener = null;
2725
- }
2726
- this.unblockBodyScroll();
2727
- }
2728
- get containerClass() {
2729
- return {
2730
- 'layout-light': this.layoutService.config().colorScheme === 'light',
2731
- 'layout-dim': this.layoutService.config().colorScheme === 'dim',
2732
- 'layout-dark': this.layoutService.config().colorScheme === 'dark',
2733
- 'layout-colorscheme-menu': this.layoutService.config().menuTheme === 'colorScheme',
2734
- 'layout-primarycolor-menu': this.layoutService.config().menuTheme === 'primaryColor',
2735
- 'layout-transparent-menu': this.layoutService.config().menuTheme === 'transparent',
2736
- 'layout-static': this.layoutService.config().menuMode === 'static',
2737
- 'layout-expandable': this.layoutService.config().menuMode === 'expandable',
2738
- 'layout-static-inactive': this.layoutService.config().menuMode === 'static' &&
2739
- !this.layoutService.shouldShowStaticSidebar(),
2740
- 'layout-static-collapsed': this.layoutService.config().menuMode === 'static' &&
2741
- this.layoutService.isStaticSidebarCollapsed(),
2742
- 'layout-mobile-active': this.layoutService.state.staticMenuMobileActive,
2743
- 'p-input-filled': this.layoutService.config().inputStyle === 'filled',
2744
- 'p-ripple-disabled': !this.layoutService.config().ripple,
2745
- 'new-sidebar-layout': this.layoutService.config().menuMode === 'expandable',
2746
- 'secondary-expanded': this.layoutService.state.secondarySidebarExpanded
2747
- };
2748
- }
2749
- ngOnDestroy() {
2750
- if (this.overlayMenuOpenSubscription) {
2751
- this.overlayMenuOpenSubscription.unsubscribe();
2752
- }
2753
- if (this.menuOutsideClickListener) {
2754
- this.menuOutsideClickListener();
2755
- }
2756
- }
2757
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppLayoutComponent, deps: [{ token: AppMenuService }, { token: LayoutService }, { token: i0.Renderer2 }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
2758
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: AppLayoutComponent, isStandalone: true, selector: "app-layout", viewQueries: [{ propertyName: "expandableMenuComponent", first: true, predicate: ExpandableMenuComponent, descendants: true }, { propertyName: "staticSidebarComponent", first: true, predicate: StaticSidebarComponent, descendants: true }, { propertyName: "appTopbar", first: true, predicate: AppTopbarComponent, descendants: true }], ngImport: i0, template: "<div class=\"layout-container\" [ngClass]=\"containerClass\">\r\n\t@if (layoutService.shouldShowStaticSidebar()) {\r\n\t\t<app-static-sidebar />\r\n\t} @else if (layoutService.shouldShowExpandableMenu()) {\r\n\t\t<app-expandable-menu />\r\n\t}\r\n\t<div class=\"layout-content-wrapper\">\r\n\t\t<app-topbar />\r\n\t\t<div class=\"layout-content\">\r\n\t\t\t<router-outlet />\r\n\t\t</div>\r\n\t</div>\r\n\t<app-profilemenu />\r\n\t<app-history-sidebar />\r\n\t<app-site-map-sidebar />\r\n\t<app-favorite-pages-sidebar />\r\n\t<app-notifications-sidebar />\r\n\t<!--<app-config></app-config>-->\r\n\t<app-chatbot></app-chatbot>\r\n\t<div class=\"layout-mask\" (click)=\"hideMenu()\"></div>\r\n</div>\r\n\r\n<p-toast key=\"toast-root\" />\r\n<p-dialog key=\"dialog-root\" />\r\n<p-messages key=\"messages-root\" />\r\n<p-confirmPopup key=\"confirmPopup-root\" />\r\n<p-confirmDialog key=\"confirmDialog-root\" />\r\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i8.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i5$1.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i6$4.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: MessagesModule }, { kind: "component", type: i7$3.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i8$3.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: AppTopbarComponent, selector: "app-topbar" }, { kind: "component", type: AppProfileSidebarComponent, selector: "app-profilemenu" }, { kind: "component", type: HistorySidebarComponent, selector: "app-history-sidebar" }, { kind: "component", type: SiteMapSidebarComponent, selector: "app-site-map-sidebar" }, { kind: "component", type: FavoritePagesSidebarComponent, selector: "app-favorite-pages-sidebar" }, { kind: "component", type: AppChatbotComponent, selector: "app-chatbot" }, { kind: "component", type: ExpandableMenuComponent, selector: "app-expandable-menu" }, { kind: "component", type: StaticSidebarComponent, selector: "app-static-sidebar" }, { kind: "component", type: NotificationsSidebarComponent, selector: "app-notifications-sidebar" }] }); }
2759
- }
2760
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppLayoutComponent, decorators: [{
2761
- type: Component,
2762
- args: [{ standalone: true, selector: 'app-layout', imports: [
2763
- NgClass,
2764
- RouterOutlet,
2765
- ConfirmDialogModule,
2766
- ConfirmPopupModule,
2767
- DialogModule,
2768
- MessagesModule,
2769
- ToastModule,
2770
- AppTopbarComponent,
2771
- AppProfileSidebarComponent,
2772
- HistorySidebarComponent,
2773
- SiteMapSidebarComponent,
2774
- FavoritePagesSidebarComponent,
2775
- AppChatbotComponent,
2776
- ExpandableMenuComponent,
2777
- StaticSidebarComponent,
2778
- NotificationsSidebarComponent
2779
- ], template: "<div class=\"layout-container\" [ngClass]=\"containerClass\">\r\n\t@if (layoutService.shouldShowStaticSidebar()) {\r\n\t\t<app-static-sidebar />\r\n\t} @else if (layoutService.shouldShowExpandableMenu()) {\r\n\t\t<app-expandable-menu />\r\n\t}\r\n\t<div class=\"layout-content-wrapper\">\r\n\t\t<app-topbar />\r\n\t\t<div class=\"layout-content\">\r\n\t\t\t<router-outlet />\r\n\t\t</div>\r\n\t</div>\r\n\t<app-profilemenu />\r\n\t<app-history-sidebar />\r\n\t<app-site-map-sidebar />\r\n\t<app-favorite-pages-sidebar />\r\n\t<app-notifications-sidebar />\r\n\t<!--<app-config></app-config>-->\r\n\t<app-chatbot></app-chatbot>\r\n\t<div class=\"layout-mask\" (click)=\"hideMenu()\"></div>\r\n</div>\r\n\r\n<p-toast key=\"toast-root\" />\r\n<p-dialog key=\"dialog-root\" />\r\n<p-messages key=\"messages-root\" />\r\n<p-confirmPopup key=\"confirmPopup-root\" />\r\n<p-confirmDialog key=\"confirmDialog-root\" />\r\n" }]
2780
- }], ctorParameters: () => [{ type: AppMenuService }, { type: LayoutService }, { type: i0.Renderer2 }, { type: i1$1.Router }], propDecorators: { expandableMenuComponent: [{
2781
- type: ViewChild,
2782
- args: [ExpandableMenuComponent]
2783
- }], staticSidebarComponent: [{
2784
- type: ViewChild,
2785
- args: [StaticSidebarComponent]
2786
- }], appTopbar: [{
2787
- type: ViewChild,
2788
- args: [AppTopbarComponent]
2789
- }] } });
2790
-
2791
- class BreadcrumbService {
2792
- constructor() {
2793
- this.keyValues = signal({});
2794
- }
2795
- set(key, value) {
2796
- this.keyValues.update((obj) => ({ ...obj, [key]: value }));
2797
- }
2798
- getValue(key) {
2799
- return this.keyValues()[key];
2800
- }
2801
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: BreadcrumbService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2802
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: BreadcrumbService, providedIn: 'root' }); }
2803
- }
2804
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: BreadcrumbService, decorators: [{
2805
- type: Injectable,
2806
- args: [{ providedIn: 'root' }]
2807
- }] });
2808
-
2809
- class AppBreadcrumbComponent {
2810
- constructor(router, breadcrumbService, pubSubService) {
2811
- this.router = router;
2812
- this.breadcrumbService = breadcrumbService;
2813
- this.pubSubService = pubSubService;
2814
- this._breadcrumbs$ = new BehaviorSubject([]);
2815
- this.breadcrumbs$ = this._breadcrumbs$.asObservable();
2816
- this.breadcrumbs = [];
2817
- this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((event) => {
2818
- const root = this.router.routerState.snapshot.root;
2819
- const breadcrumbs = [];
2820
- this.addBreadcrumb(root, [], breadcrumbs);
2821
- this._breadcrumbs$.next(breadcrumbs);
2822
- });
2823
- effect(() => {
2824
- if (this.breadcrumbService.keyValues()) {
2825
- const root = this.router.routerState.snapshot.root;
2826
- const breadcrumbs = [];
2827
- this.addBreadcrumb(root, [], breadcrumbs);
2828
- this._breadcrumbs$.next(breadcrumbs);
2829
- }
2830
- });
2831
- }
2832
- ngOnInit() {
2833
- this.breadcrumbsSubscription = this.breadcrumbs$.subscribe((breadcrumbs) => {
2834
- this.breadcrumbs = breadcrumbs.map((breadcrumb) => ({
2835
- label: breadcrumb.label,
2836
- url: breadcrumb.url
2837
- }));
2838
- this.breadcrumbs.unshift({ icon: 'pi pi-home', url: '/' });
2839
- // Update global page title signal with the last breadcrumb label
2840
- const pageTitle = globalThis.__ARIL_PAGE_TITLE__?.();
2841
- if (pageTitle) {
2842
- const lastBreadcrumb = breadcrumbs[breadcrumbs.length - 1];
2843
- pageTitle.set(lastBreadcrumb?.label || '');
2844
- }
2845
- const currentUrl = this.router.url;
2846
- this.pubSubService.publish({
2847
- name: 'breadcrumbUpdated',
2848
- data: {
2849
- path: currentUrl,
2850
- custom: {
2851
- breadcrumbs: breadcrumbs,
2852
- pageTitle: breadcrumbs.length > 0 ? breadcrumbs[breadcrumbs.length - 1].label : ''
2853
- }
2854
- }
2855
- });
2856
- });
2857
- }
2858
- ngOnDestroy() {
2859
- if (this.breadcrumbsSubscription) {
2860
- this.breadcrumbsSubscription.unsubscribe();
2861
- }
2862
- }
2863
- addBreadcrumb(route, parentUrl, breadcrumbs) {
2864
- const routeUrl = parentUrl.concat(route.url.map((url) => url.path));
2865
- const breadcrumb = route.data['breadcrumb'];
2866
- const parentBreadcrumb = route.parent && route.parent.data ? route.parent.data['breadcrumb'] : null;
2867
- if (breadcrumb && breadcrumb !== parentBreadcrumb) {
2868
- const keyRegex = new RegExp('(?<=\\{)([^}]+)(?=\\})');
2869
- const key = (keyRegex.exec(route.data['breadcrumb']) || [])[0];
2870
- const value = this.breadcrumbService.getValue(key);
2871
- if (key && value) {
2872
- breadcrumbs.push({
2873
- label: route.data['breadcrumb'].replace(`{${key}}`, value),
2874
- url: '/' + routeUrl.join('/')
2875
- });
2876
- }
2877
- else if (key && !value) {
2878
- // Key exists but value not loaded yet - show loading placeholder
2879
- breadcrumbs.push({
2880
- label: '...',
2881
- url: '/' + routeUrl.join('/')
2882
- });
2883
- }
2884
- else {
2885
- breadcrumbs.push({
2886
- label: route.data['breadcrumb'],
2887
- url: '/' + routeUrl.join('/')
2888
- });
2889
- }
2890
- }
2891
- if (route.firstChild) {
2892
- this.addBreadcrumb(route.firstChild, routeUrl, breadcrumbs);
2893
- }
2894
- }
2895
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppBreadcrumbComponent, deps: [{ token: i1$1.Router }, { token: BreadcrumbService }, { token: i2$2.PubSubService }], target: i0.ɵɵFactoryTarget.Component }); }
2896
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AppBreadcrumbComponent, isStandalone: true, selector: "app-breadcrumb", ngImport: i0, template: "<p-breadcrumb class=\"max-w-full\" [model]=\"breadcrumbs\">\r\n\t<ng-template pTemplate=\"item\" let-item>\r\n\t\t<a [routerLink]=\"item.url\">\r\n\t\t\t<span [ngClass]=\"[item.icon ? item.icon : '', 'text-500']\"></span>\r\n\t\t\t<span class='text-500'>{{ item.label }}</span>\r\n\t\t</a>\r\n\t</ng-template>\r\n</p-breadcrumb>\r\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: BreadcrumbModule }, { kind: "component", type: i4$1.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
2897
- }
2898
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppBreadcrumbComponent, decorators: [{
2899
- type: Component,
2900
- args: [{ standalone: true, selector: 'app-breadcrumb', imports: [RouterLink, BreadcrumbModule, NgClass], template: "<p-breadcrumb class=\"max-w-full\" [model]=\"breadcrumbs\">\r\n\t<ng-template pTemplate=\"item\" let-item>\r\n\t\t<a [routerLink]=\"item.url\">\r\n\t\t\t<span [ngClass]=\"[item.icon ? item.icon : '', 'text-500']\"></span>\r\n\t\t\t<span class='text-500'>{{ item.label }}</span>\r\n\t\t</a>\r\n\t</ng-template>\r\n</p-breadcrumb>\r\n" }]
2901
- }], ctorParameters: () => [{ type: i1$1.Router }, { type: BreadcrumbService }, { type: i2$2.PubSubService }] });
2902
-
2903
- class MFELayoutComponent {
2904
- constructor(router) {
2905
- this.router = router;
2906
- this.loading = toSignal(this.router.events.pipe(map$1((event) => {
2907
- if (event instanceof NavigationEnd ||
2908
- event instanceof NavigationCancel ||
2909
- event instanceof NavigationError ||
2910
- event instanceof NavigationSkipped)
2911
- return false;
2912
- return true;
2913
- })), { initialValue: true });
2914
- }
2915
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: MFELayoutComponent, deps: [{ token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
2916
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: MFELayoutComponent, isStandalone: true, selector: "mfe-layout", ngImport: i0, template: `
2917
- <app-breadcrumb class="topbar-breadcrumb"></app-breadcrumb>
2918
- @if (!loading()) {
2919
- <router-outlet />
2920
- }
2921
-
2922
- <p-toast key="toast-root"></p-toast>
2923
- <p-dialog key="dialog-root"></p-dialog>
2924
- <p-messages key="messages-root"></p-messages>
2925
- <p-confirmPopup key="confirmPopup-root"></p-confirmPopup>
2926
- <p-confirmDialog key="confirmDialog-root"></p-confirmDialog>
2927
- `, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i8.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i5$1.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i6$4.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: MessagesModule }, { kind: "component", type: i7$3.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i8$3.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: AppBreadcrumbComponent, selector: "app-breadcrumb" }] }); }
2928
- }
2929
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: MFELayoutComponent, decorators: [{
2930
- type: Component,
2931
- args: [{
2932
- standalone: true,
2933
- selector: 'mfe-layout',
2934
- template: `
2935
- <app-breadcrumb class="topbar-breadcrumb"></app-breadcrumb>
2936
- @if (!loading()) {
2937
- <router-outlet />
2938
- }
2939
-
2940
- <p-toast key="toast-root"></p-toast>
2941
- <p-dialog key="dialog-root"></p-dialog>
2942
- <p-messages key="messages-root"></p-messages>
2943
- <p-confirmPopup key="confirmPopup-root"></p-confirmPopup>
2944
- <p-confirmDialog key="confirmDialog-root"></p-confirmDialog>
2945
- `,
2946
- imports: [RouterOutlet, ConfirmDialogModule, ConfirmPopupModule, DialogModule, MessagesModule, ToastModule, AppBreadcrumbComponent]
2947
- }]
2948
- }], ctorParameters: () => [{ type: i1$1.Router }] });
2949
-
2950
- class SelectionGroupService {
2951
- constructor(http) {
2952
- this.http = http;
2953
- this.selectionGroups = signal({});
2954
- this.loading = new Map();
2955
- this.loaded = new Map();
2956
- this.loadStatesFromLocalStorage();
2957
- effect(() => {
2958
- const encodedData = btoa(encodeURI(JSON.stringify(this.selectionGroups())));
2959
- localStorage.setItem('selection-groups', encodedData);
2960
- });
2961
- }
2962
- async loadStatesFromLocalStorage() {
2963
- const selectionGroups = localStorage.getItem('selection-groups');
2964
- if (selectionGroups) {
2965
- try {
2966
- const decodedData = decodeURI(atob(selectionGroups));
2967
- this.selectionGroups.set(JSON.parse(decodedData));
2968
- }
2969
- catch (e) {
2970
- console.error(e);
2971
- }
2972
- }
2973
- }
2974
- fetchEnum(groupName, parentSelectionKey = 'ALL') {
2975
- const key = groupName + '~' + parentSelectionKey;
2976
- if (this.loaded.get(key) || this.loading.get(key))
2977
- return;
2978
- const payload = {
2979
- groupName,
2980
- parentSelectionKey
2981
- };
2982
- this.loading.set(key, true);
2983
- this.loaded.set(key, false);
2984
- const hostApi = API_CONFIGS.api.replace(/\/[^\/]+\/v1$/, `/host/v1`);
2985
- this.http
2986
- .post(hostApi + '/selection-group/load', payload)
2987
- .pipe(take(1))
2988
- .subscribe((selectionGroup) => {
2989
- this.loading.set(key, false);
2990
- this.loaded.set(key, true);
2991
- this.selectionGroups.update((groups) => ({
2992
- ...groups,
2993
- [key]: selectionGroup
2994
- }));
2995
- });
2996
- }
2997
- isLoading(groupName) {
2998
- return this.loading.get(groupName) ?? false;
2999
- }
3000
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectionGroupService, deps: [{ token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
3001
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectionGroupService, providedIn: 'root' }); }
3002
- }
3003
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectionGroupService, decorators: [{
3004
- type: Injectable,
3005
- args: [{
3006
- providedIn: 'root'
3007
- }]
3008
- }], ctorParameters: () => [{ type: i1$2.HttpClient }] });
3009
-
3010
- /**
3011
- * Generated bundle index. Do not edit.
3012
- */
3013
-
3014
- export { AppLayoutComponent, AppMenuService, BreadcrumbService, FavoritePagesService, LayoutService, MFELayoutComponent, SelectionGroupService, favoritePageEndpoints };
3015
- //# sourceMappingURL=aril-theme-layout.mjs.map