aril 1.1.73 → 1.1.74

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 (1349) hide show
  1. package/README.md +62 -62
  2. package/boot/config/api/src/api.service.d.ts +12 -0
  3. package/boot/config/api/src/interfaces.d.ts +39 -0
  4. package/boot/config/api.sample.json +8 -0
  5. package/boot/config/apps/src/apps.service.d.ts +13 -0
  6. package/boot/config/apps/src/auth.guard.d.ts +9 -0
  7. package/boot/config/apps/src/interfaces.d.ts +50 -0
  8. package/boot/config/apps/src/reuse-strategy.d.ts +4 -0
  9. package/boot/config/apps/src/showdowDOMWrapper.d.ts +10 -0
  10. package/boot/config/plugins/src/getNgZone.d.ts +5 -0
  11. package/boot/config/plugins/src/interfaces.d.ts +55 -0
  12. package/boot/config/plugins/src/plugins.service.d.ts +5 -0
  13. package/boot/config/translate/constants.d.ts +4 -0
  14. package/boot/config/translate/primeng/i18n/tr.d.ts +46 -0
  15. package/boot/host/src/app.component.d.ts +10 -0
  16. package/boot/host/src/bootstrap.d.ts +4 -0
  17. package/boot/index.d.ts +1 -0
  18. package/boot/mfe/src/app.component.d.ts +17 -0
  19. package/boot/mfe/src/appComponentLoader.d.ts +1 -0
  20. package/boot/mfe/src/bootstrap.d.ts +5 -0
  21. package/boot/mfe/src/loadStyles.d.ts +3 -0
  22. package/boot/mfe/src/monaco.config.d.ts +7 -0
  23. package/esm2022/aril.mjs +5 -0
  24. package/esm2022/boot/aril-boot.mjs +5 -0
  25. package/esm2022/boot/config/api/aril-boot-config-api.mjs +5 -0
  26. package/esm2022/boot/config/api/index.mjs +2 -0
  27. package/esm2022/boot/config/api/src/api.service.mjs +59 -0
  28. package/esm2022/boot/config/api/src/interfaces.mjs +61 -0
  29. package/esm2022/boot/config/apps/aril-boot-config-apps.mjs +5 -0
  30. package/esm2022/boot/config/apps/index.mjs +4 -0
  31. package/esm2022/boot/config/apps/src/apps.service.mjs +53 -0
  32. package/esm2022/boot/config/apps/src/auth.guard.mjs +22 -0
  33. package/esm2022/boot/config/apps/src/interfaces.mjs +21 -0
  34. package/esm2022/boot/config/apps/src/reuse-strategy.mjs +9 -0
  35. package/esm2022/boot/config/apps/src/showdowDOMWrapper.mjs +35 -0
  36. package/esm2022/boot/config/plugins/aril-boot-config-plugins.mjs +5 -0
  37. package/esm2022/boot/config/plugins/index.mjs +3 -0
  38. package/esm2022/boot/config/plugins/src/getNgZone.mjs +9 -0
  39. package/esm2022/boot/config/plugins/src/interfaces.mjs +62 -0
  40. package/esm2022/boot/config/plugins/src/plugins.service.mjs +84 -0
  41. package/esm2022/boot/config/translate/aril-boot-config-translate.mjs +5 -0
  42. package/esm2022/boot/config/translate/constants.mjs +6 -0
  43. package/esm2022/boot/config/translate/index.mjs +3 -0
  44. package/esm2022/boot/config/translate/primeng/i18n/tr.mjs +60 -0
  45. package/esm2022/boot/host/aril-boot-host.mjs +5 -0
  46. package/esm2022/boot/host/index.mjs +2 -0
  47. package/esm2022/boot/host/src/app.component.mjs +49 -0
  48. package/esm2022/boot/host/src/bootstrap.mjs +55 -0
  49. package/esm2022/boot/index.mjs +2 -0
  50. package/esm2022/boot/mfe/aril-boot-mfe.mjs +5 -0
  51. package/esm2022/boot/mfe/index.mjs +2 -0
  52. package/esm2022/boot/mfe/src/app.component.mjs +63 -0
  53. package/esm2022/boot/mfe/src/appComponentLoader.mjs +5 -0
  54. package/esm2022/boot/mfe/src/bootstrap.mjs +76 -0
  55. package/esm2022/boot/mfe/src/loadStyles.mjs +37 -0
  56. package/esm2022/boot/mfe/src/monaco.config.mjs +247 -0
  57. package/esm2022/http/aril-http.mjs +5 -0
  58. package/esm2022/http/index.mjs +12 -0
  59. package/esm2022/http/lib/enums.mjs +35 -0
  60. package/esm2022/http/lib/interfaces.mjs +16 -0
  61. package/esm2022/http/src/httpBackend.mjs +17 -0
  62. package/esm2022/http/src/httpClient.mjs +16 -0
  63. package/esm2022/http/src/interceptor/accept-language.interceptor.mjs +21 -0
  64. package/esm2022/http/src/serviceBase.mjs +140 -0
  65. package/esm2022/http/src/serviceMockBase.mjs +4 -0
  66. package/esm2022/http/src/serviceRequest.mjs +23 -0
  67. package/esm2022/http/src/serviceStateMethods.mjs +167 -0
  68. package/esm2022/i18n/aril-i18n.mjs +5 -0
  69. package/esm2022/i18n/index.mjs +6 -0
  70. package/esm2022/i18n/src/folder-name-token.mjs +3 -0
  71. package/esm2022/i18n/src/i18n.module.mjs +17 -0
  72. package/esm2022/i18n/src/loader.mjs +18 -0
  73. package/esm2022/i18n/src/provideI18n.mjs +16 -0
  74. package/esm2022/i18n/src/provideScope.mjs +18 -0
  75. package/esm2022/keycloak/aril-keycloak.mjs +5 -0
  76. package/esm2022/keycloak/index.mjs +2 -0
  77. package/esm2022/keycloak/src/auth.interceptor.mjs +92 -0
  78. package/esm2022/provider/aril-provider.mjs +5 -0
  79. package/esm2022/provider/index.mjs +2 -0
  80. package/esm2022/provider/src/index.mjs +5 -0
  81. package/esm2022/provider/src/prodiveHost.mjs +9 -0
  82. package/esm2022/provider/src/prodiveHostRouter.mjs +12 -0
  83. package/esm2022/provider/src/provideHostKeycloak.mjs +28 -0
  84. package/esm2022/provider/src/provideLocaleId.mjs +20 -0
  85. package/esm2022/public-api.mjs +3 -0
  86. package/esm2022/theme/aril-theme.mjs +5 -0
  87. package/esm2022/theme/index.mjs +2 -0
  88. package/esm2022/theme/layout/app/breadcrumb/app.breadcrumb.component.mjs +106 -0
  89. package/esm2022/theme/layout/app/chatbot/app.chatbot.component.mjs +140 -0
  90. package/esm2022/theme/layout/app/expandableMenu/expandable-menu.component.mjs +250 -0
  91. package/esm2022/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.mjs +217 -0
  92. package/esm2022/theme/layout/app/favorite-pages/favorite-pages.service.mjs +60 -0
  93. package/esm2022/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.mjs +129 -0
  94. package/esm2022/theme/layout/app/general-search/general-search.component.mjs +75 -0
  95. package/esm2022/theme/layout/app/general-search/helpers.mjs +92 -0
  96. package/esm2022/theme/layout/app/general-search/models.mjs +50 -0
  97. package/esm2022/theme/layout/app/history/history-sidebar.component.mjs +133 -0
  98. package/esm2022/theme/layout/app/history/history.service.mjs +131 -0
  99. package/esm2022/theme/layout/app/layout/app.layout.component.mjs +160 -0
  100. package/esm2022/theme/layout/app/layout/mfe.layout.component.mjs +64 -0
  101. package/esm2022/theme/layout/app/notifications/notifications-sidebar.component.mjs +191 -0
  102. package/esm2022/theme/layout/app/profileSidebar/app.profilesidebar.component.mjs +122 -0
  103. package/esm2022/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.mjs +142 -0
  104. package/esm2022/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.mjs +202 -0
  105. package/esm2022/theme/layout/app/profileSidebar/profile.service.mjs +66 -0
  106. package/esm2022/theme/layout/app/site-map/site-map-sidebar.component.mjs +166 -0
  107. package/esm2022/theme/layout/app/static-sidebar/static-sidebar.component.mjs +228 -0
  108. package/esm2022/theme/layout/app/topbar/app.topbar.component.mjs +155 -0
  109. package/esm2022/theme/layout/aril-theme-layout.mjs +5 -0
  110. package/esm2022/theme/layout/index.mjs +8 -0
  111. package/esm2022/theme/layout/service/app.layout.service.mjs +231 -0
  112. package/esm2022/theme/layout/service/app.menu.service.mjs +46 -0
  113. package/esm2022/theme/layout/service/breadcrumb.service.mjs +20 -0
  114. package/esm2022/theme/layout/service/interfaces/enum.mjs +16 -0
  115. package/esm2022/theme/layout/service/interfaces/interfaces.mjs +2 -0
  116. package/esm2022/theme/layout/service/menuchangeevent.mjs +2 -0
  117. package/esm2022/theme/layout/service/notifications.service.mjs +30 -0
  118. package/esm2022/theme/layout/service/search.service.mjs +25 -0
  119. package/esm2022/theme/layout/service/selection-group.service.mjs +65 -0
  120. package/esm2022/ui/aril-ui.mjs +5 -0
  121. package/esm2022/ui/autoComplete/aril-ui-autoComplete.mjs +5 -0
  122. package/esm2022/ui/autoComplete/index.mjs +2 -0
  123. package/esm2022/ui/autoComplete/src/auto-complete.component.mjs +109 -0
  124. package/esm2022/ui/autoComplete/src/interfaces.mjs +2 -0
  125. package/esm2022/ui/badge/aril-ui-badge.mjs +5 -0
  126. package/esm2022/ui/badge/index.mjs +2 -0
  127. package/esm2022/ui/badge/src/badge.component.mjs +59 -0
  128. package/esm2022/ui/button/aril-ui-button.mjs +5 -0
  129. package/esm2022/ui/button/index.mjs +3 -0
  130. package/esm2022/ui/button/src/button.component.mjs +40 -0
  131. package/esm2022/ui/button/src/split-button.component.mjs +18 -0
  132. package/esm2022/ui/calendar/aril-ui-calendar.mjs +5 -0
  133. package/esm2022/ui/calendar/index.mjs +2 -0
  134. package/esm2022/ui/calendar/src/calendar.component.mjs +224 -0
  135. package/esm2022/ui/charts/aril-ui-charts.mjs +5 -0
  136. package/esm2022/ui/charts/index.mjs +13 -0
  137. package/esm2022/ui/charts/src/amCharts/column/column-chart.component.mjs +124 -0
  138. package/esm2022/ui/charts/src/amCharts/line/line-chart.component.mjs +164 -0
  139. package/esm2022/ui/charts/src/amCharts/pie/pie-chart.component.mjs +116 -0
  140. package/esm2022/ui/charts/src/highCharts/area/area-chart.component.mjs +114 -0
  141. package/esm2022/ui/charts/src/highCharts/bar/bar-chart.component.mjs +100 -0
  142. package/esm2022/ui/charts/src/highCharts/column/column-chart.component.mjs +117 -0
  143. package/esm2022/ui/charts/src/highCharts/gauge/solid-gauge.component.mjs +180 -0
  144. package/esm2022/ui/charts/src/highCharts/heatmap/heatMap-chart.component.mjs +252 -0
  145. package/esm2022/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.mjs +187 -0
  146. package/esm2022/ui/charts/src/highCharts/line/line-chart-series.component.mjs +89 -0
  147. package/esm2022/ui/charts/src/highCharts/line/line-chart.component.mjs +82 -0
  148. package/esm2022/ui/charts/src/highCharts/pie/pie-chart.component.mjs +137 -0
  149. package/esm2022/ui/charts/src/theme/theme.mjs +54 -0
  150. package/esm2022/ui/checkbox/aril-ui-checkbox.mjs +5 -0
  151. package/esm2022/ui/checkbox/index.mjs +3 -0
  152. package/esm2022/ui/checkbox/src/check-box.component.mjs +27 -0
  153. package/esm2022/ui/checkbox/src/tri-state-checkbox.component.mjs +24 -0
  154. package/esm2022/ui/chip/aril-ui-chip.mjs +5 -0
  155. package/esm2022/ui/chip/index.mjs +2 -0
  156. package/esm2022/ui/chip/src/chip.component.mjs +129 -0
  157. package/esm2022/ui/collapse-reorder-list/aril-ui-collapse-reorder-list.mjs +5 -0
  158. package/esm2022/ui/collapse-reorder-list/index.mjs +2 -0
  159. package/esm2022/ui/collapse-reorder-list/src/collapse-reorder-list.component.mjs +53 -0
  160. package/esm2022/ui/dxEditor/aril-ui-dxEditor.mjs +5 -0
  161. package/esm2022/ui/dxEditor/index.mjs +2 -0
  162. package/esm2022/ui/dxEditor/src/dx-editor.component.mjs +26 -0
  163. package/esm2022/ui/dxField/aril-ui-dxField.mjs +5 -0
  164. package/esm2022/ui/dxField/index.mjs +2 -0
  165. package/esm2022/ui/dxField/src/dx-field.component.mjs +19 -0
  166. package/esm2022/ui/editor/aril-ui-editor.mjs +5 -0
  167. package/esm2022/ui/editor/index.mjs +3 -0
  168. package/esm2022/ui/editor/src/aril-editor.component.mjs +171 -0
  169. package/esm2022/ui/editor/src/types.mjs +26 -0
  170. package/esm2022/ui/field/aril-ui-field.mjs +5 -0
  171. package/esm2022/ui/field/index.mjs +2 -0
  172. package/esm2022/ui/field/src/field.component.mjs +45 -0
  173. package/esm2022/ui/fileUpload/aril-ui-fileUpload.mjs +5 -0
  174. package/esm2022/ui/fileUpload/index.mjs +2 -0
  175. package/esm2022/ui/fileUpload/src/file-upload.component.mjs +73 -0
  176. package/esm2022/ui/form/aril-ui-form.mjs +5 -0
  177. package/esm2022/ui/form/index.mjs +22 -0
  178. package/esm2022/ui/form/src/form-submit-button.component.mjs +40 -0
  179. package/esm2022/ui/form/src/form.component.mjs +27 -0
  180. package/esm2022/ui/img-viewer/aril-ui-img-viewer.mjs +5 -0
  181. package/esm2022/ui/img-viewer/index.mjs +2 -0
  182. package/esm2022/ui/img-viewer/src/img-viewer.component.mjs +57 -0
  183. package/esm2022/ui/index.mjs +2 -0
  184. package/esm2022/ui/json-diff-comparison/aril-ui-json-diff-comparison.mjs +5 -0
  185. package/esm2022/ui/json-diff-comparison/index.mjs +2 -0
  186. package/esm2022/ui/json-diff-comparison/src/json-diff.component.mjs +49 -0
  187. package/esm2022/ui/lib/aril-ui-lib.mjs +5 -0
  188. package/esm2022/ui/lib/index.mjs +16 -0
  189. package/esm2022/ui/lib/src/form/form-error-message.component.mjs +33 -0
  190. package/esm2022/ui/lib/src/form/form-error-message.directive.mjs +34 -0
  191. package/esm2022/ui/lib/src/form/form-field-builder.mjs +23 -0
  192. package/esm2022/ui/lib/src/form/form-validation.mjs +14 -0
  193. package/esm2022/ui/lib/src/grid/enum-color-picker.pipe.mjs +35 -0
  194. package/esm2022/ui/lib/src/grid/flex-grid.directive.mjs +21 -0
  195. package/esm2022/ui/lib/src/input/baseInput.mjs +24 -0
  196. package/esm2022/ui/lib/src/input/common-input-validators.service.mjs +49 -0
  197. package/esm2022/ui/lib/src/input/dx-input-error-message.pipe.mjs +22 -0
  198. package/esm2022/ui/lib/src/input/input-disabled.directive.mjs +25 -0
  199. package/esm2022/ui/lib/src/input/input-error-message.pipe.mjs +63 -0
  200. package/esm2022/ui/lib/src/input/input-transforms.mjs +8 -0
  201. package/esm2022/ui/lib/src/input/value-accessor.directive.mjs +38 -0
  202. package/esm2022/ui/loader/aril-ui-loader.mjs +5 -0
  203. package/esm2022/ui/loader/index.mjs +2 -0
  204. package/esm2022/ui/loader/src/loader.component.mjs +14 -0
  205. package/esm2022/ui/mask/aril-ui-mask.mjs +5 -0
  206. package/esm2022/ui/mask/index.mjs +2 -0
  207. package/esm2022/ui/mask/src/mask.component.mjs +35 -0
  208. package/esm2022/ui/multiSelect/aril-ui-multiSelect.mjs +5 -0
  209. package/esm2022/ui/multiSelect/index.mjs +2 -0
  210. package/esm2022/ui/multiSelect/src/interfaces.mjs +2 -0
  211. package/esm2022/ui/multiSelect/src/multi-select.component.mjs +57 -0
  212. package/esm2022/ui/number/aril-ui-number.mjs +5 -0
  213. package/esm2022/ui/number/index.mjs +2 -0
  214. package/esm2022/ui/number/src/number.component.mjs +38 -0
  215. package/esm2022/ui/operation-types-dialog/aril-ui-operation-types-dialog.mjs +5 -0
  216. package/esm2022/ui/operation-types-dialog/index.mjs +2 -0
  217. package/esm2022/ui/operation-types-dialog/src/operation-types-dialog.component.mjs +91 -0
  218. package/esm2022/ui/overlayPanel/aril-ui-overlayPanel.mjs +5 -0
  219. package/esm2022/ui/overlayPanel/index.mjs +2 -0
  220. package/esm2022/ui/overlayPanel/src/overlay-panel.component.mjs +20 -0
  221. package/esm2022/ui/panel/aril-ui-panel.mjs +5 -0
  222. package/esm2022/ui/panel/index.mjs +2 -0
  223. package/esm2022/ui/panel/src/panel.component.mjs +33 -0
  224. package/esm2022/ui/password/aril-ui-password.mjs +5 -0
  225. package/esm2022/ui/password/index.mjs +2 -0
  226. package/esm2022/ui/password/src/password.component.mjs +29 -0
  227. package/esm2022/ui/pdf-viewer/aril-ui-pdf-viewer.mjs +5 -0
  228. package/esm2022/ui/pdf-viewer/index.mjs +2 -0
  229. package/esm2022/ui/pdf-viewer/src/pdf-viewer.component.mjs +27 -0
  230. package/esm2022/ui/progressbar/aril-ui-progressbar.mjs +5 -0
  231. package/esm2022/ui/progressbar/index.mjs +2 -0
  232. package/esm2022/ui/progressbar/src/progressbar.component.mjs +18 -0
  233. package/esm2022/ui/radioButton/aril-ui-radioButton.mjs +5 -0
  234. package/esm2022/ui/radioButton/index.mjs +2 -0
  235. package/esm2022/ui/radioButton/src/radio-button.component.mjs +30 -0
  236. package/esm2022/ui/relativeDateSelector/aril-ui-relativeDateSelector.mjs +5 -0
  237. package/esm2022/ui/relativeDateSelector/index.mjs +2 -0
  238. package/esm2022/ui/relativeDateSelector/src/enum.mjs +31 -0
  239. package/esm2022/ui/relativeDateSelector/src/relative-date-selector.component.mjs +248 -0
  240. package/esm2022/ui/selectBox/aril-ui-selectBox.mjs +5 -0
  241. package/esm2022/ui/selectBox/index.mjs +2 -0
  242. package/esm2022/ui/selectBox/src/interfaces.mjs +2 -0
  243. package/esm2022/ui/selectBox/src/select-box.component.mjs +67 -0
  244. package/esm2022/ui/switch/aril-ui-switch.mjs +5 -0
  245. package/esm2022/ui/switch/index.mjs +2 -0
  246. package/esm2022/ui/switch/src/switch.component.mjs +23 -0
  247. package/esm2022/ui/table/aril-ui-table.mjs +5 -0
  248. package/esm2022/ui/table/index.mjs +131 -0
  249. package/esm2022/ui/table/src/export-overlay-panel.component.mjs +321 -0
  250. package/esm2022/ui/table/src/interfaces.mjs +44 -0
  251. package/esm2022/ui/table/src/table-column.component.mjs +31 -0
  252. package/esm2022/ui/table/src/table.component.mjs +334 -0
  253. package/esm2022/ui/table-expand/aril-ui-table-expand.mjs +5 -0
  254. package/esm2022/ui/table-expand/index.mjs +61 -0
  255. package/esm2022/ui/table-expand/src/table-column.component.mjs +25 -0
  256. package/esm2022/ui/table-expand/src/table-expand-area.component.mjs +17 -0
  257. package/esm2022/ui/table-expand/src/table.component.mjs +99 -0
  258. package/esm2022/ui/tag/aril-ui-tag.mjs +5 -0
  259. package/esm2022/ui/tag/index.mjs +2 -0
  260. package/esm2022/ui/tag/src/interface.mjs +2 -0
  261. package/esm2022/ui/tag/src/tag.component.mjs +20 -0
  262. package/esm2022/ui/tagBox/aril-ui-tagBox.mjs +5 -0
  263. package/esm2022/ui/tagBox/index.mjs +2 -0
  264. package/esm2022/ui/tagBox/src/tag-box.component.mjs +55 -0
  265. package/esm2022/ui/text/aril-ui-text.mjs +5 -0
  266. package/esm2022/ui/text/index.mjs +2 -0
  267. package/esm2022/ui/text/src/text.component.mjs +47 -0
  268. package/esm2022/ui/textArea/aril-ui-textArea.mjs +5 -0
  269. package/esm2022/ui/textArea/index.mjs +2 -0
  270. package/esm2022/ui/textArea/src/text-area.component.mjs +27 -0
  271. package/esm2022/ui/toggle-button/aril-ui-toggle-button.mjs +5 -0
  272. package/esm2022/ui/toggle-button/index.mjs +2 -0
  273. package/esm2022/ui/toggle-button/src/toggle-button.component.mjs +25 -0
  274. package/esm2022/ui/tooltip/aril-ui-tooltip.mjs +5 -0
  275. package/esm2022/ui/tooltip/index.mjs +2 -0
  276. package/esm2022/ui/tooltip/src/tooltip-component.mjs +23 -0
  277. package/esm2022/ui/translate-input/aril-ui-translate-input.mjs +5 -0
  278. package/esm2022/ui/translate-input/index.mjs +2 -0
  279. package/esm2022/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.mjs +64 -0
  280. package/esm2022/ui/translate-input/src/aril-lang-modal/constants.mjs +15 -0
  281. package/esm2022/ui/translate-input/src/aril-translate-input.component.mjs +128 -0
  282. package/esm2022/ui/translate-input/src/interface.mjs +2 -0
  283. package/esm2022/ui/tree/aril-ui-tree.mjs +5 -0
  284. package/esm2022/ui/tree/index.mjs +2 -0
  285. package/esm2022/ui/tree/src/tree.component.mjs +53 -0
  286. package/esm2022/ui/treeSelect/aril-ui-treeSelect.mjs +5 -0
  287. package/esm2022/ui/treeSelect/index.mjs +2 -0
  288. package/esm2022/ui/treeSelect/src/treeSelect.component.mjs +41 -0
  289. package/esm2022/ui/treeTable/aril-ui-treeTable.mjs +5 -0
  290. package/esm2022/ui/treeTable/index.mjs +2 -0
  291. package/esm2022/ui/treeTable/src/tree-table.component.mjs +55 -0
  292. package/esm2022/ui/value/aril-ui-value.mjs +5 -0
  293. package/esm2022/ui/value/index.mjs +2 -0
  294. package/esm2022/ui/value/src/value.component.mjs +207 -0
  295. package/esm2022/ui-business/aril-ui-business.mjs +5 -0
  296. package/esm2022/ui-business/assetPicker/aril-ui-business-assetPicker.mjs +5 -0
  297. package/esm2022/ui-business/assetPicker/index.mjs +2 -0
  298. package/esm2022/ui-business/assetPicker/src/asset-picker.component.mjs +182 -0
  299. package/esm2022/ui-business/assetPicker/src/interface.mjs +2 -0
  300. package/esm2022/ui-business/detailed-overlay-panel/aril-ui-business-detailed-overlay-panel.mjs +5 -0
  301. package/esm2022/ui-business/detailed-overlay-panel/index.mjs +2 -0
  302. package/esm2022/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.mjs +61 -0
  303. package/esm2022/ui-business/detailed-overlay-panel/src/interface.mjs +19 -0
  304. package/esm2022/ui-business/enumPicker/aril-ui-business-enumPicker.mjs +5 -0
  305. package/esm2022/ui-business/enumPicker/index.mjs +2 -0
  306. package/esm2022/ui-business/enumPicker/src/enum-picker.component.mjs +124 -0
  307. package/esm2022/ui-business/enumPicker/src/interface.mjs +2 -0
  308. package/esm2022/ui-business/image-viewer/aril-ui-business-image-viewer.mjs +5 -0
  309. package/esm2022/ui-business/image-viewer/index.mjs +2 -0
  310. package/esm2022/ui-business/image-viewer/src/aril-image-viewer.component.mjs +111 -0
  311. package/esm2022/ui-business/index.mjs +2 -0
  312. package/esm2022/ui-business/multiple-ref-value/aril-ui-business-multiple-ref-value.mjs +5 -0
  313. package/esm2022/ui-business/multiple-ref-value/index.mjs +2 -0
  314. package/esm2022/ui-business/multiple-ref-value/src/multiple-ref-value.component.mjs +23 -0
  315. package/esm2022/ui-business/notification-templates-dialog/aril-ui-business-notification-templates-dialog.mjs +5 -0
  316. package/esm2022/ui-business/notification-templates-dialog/index.mjs +2 -0
  317. package/esm2022/ui-business/notification-templates-dialog/src/interface.mjs +8 -0
  318. package/esm2022/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.mjs +56 -0
  319. package/esm2022/ui-business/operation-types-dialog/aril-ui-business-operation-types-dialog.mjs +5 -0
  320. package/esm2022/ui-business/operation-types-dialog/index.mjs +2 -0
  321. package/esm2022/ui-business/operation-types-dialog/src/operation-types-dialog.component.mjs +76 -0
  322. package/esm2022/ui-business/ref-value/aril-ui-business-ref-value.mjs +5 -0
  323. package/esm2022/ui-business/ref-value/index.mjs +2 -0
  324. package/esm2022/ui-business/ref-value/src/ref-value.component.mjs +39 -0
  325. package/esm2022/ui-business/rolePicker/aril-ui-business-rolePicker.mjs +5 -0
  326. package/esm2022/ui-business/rolePicker/index.mjs +2 -0
  327. package/esm2022/ui-business/rolePicker/src/interface.mjs +2 -0
  328. package/esm2022/ui-business/rolePicker/src/role-picker.component.mjs +71 -0
  329. package/esm2022/ui-business/userPicker/aril-ui-business-userPicker.mjs +5 -0
  330. package/esm2022/ui-business/userPicker/index.mjs +2 -0
  331. package/esm2022/ui-business/userPicker/src/interface.mjs +2 -0
  332. package/esm2022/ui-business/userPicker/src/user-picker.component.mjs +43 -0
  333. package/esm2022/util/aril-util.mjs +5 -0
  334. package/esm2022/util/block/aril-util-block.mjs +5 -0
  335. package/esm2022/util/block/index.mjs +2 -0
  336. package/esm2022/util/block/src/block.mjs +64 -0
  337. package/esm2022/util/custom_pages/aril-util-custom_pages.mjs +5 -0
  338. package/esm2022/util/custom_pages/index.mjs +2 -0
  339. package/esm2022/util/custom_pages/src/notFound.component.mjs +65 -0
  340. package/esm2022/util/directives/aril-util-directives.mjs +5 -0
  341. package/esm2022/util/directives/index.mjs +4 -0
  342. package/esm2022/util/directives/src/detail-page-customization/detail-page-customization.directive.mjs +298 -0
  343. package/esm2022/util/directives/src/detail-page-customization/index.mjs +3 -0
  344. package/esm2022/util/directives/src/detail-page-customization/models.mjs +4 -0
  345. package/esm2022/util/directives/src/dialog-component/plugin-dialog.component.mjs +26 -0
  346. package/esm2022/util/directives/src/dialog-service/plugin-dialog.service.mjs +16 -0
  347. package/esm2022/util/index.mjs +2 -0
  348. package/esm2022/util/lib/aril-util-lib.mjs +5 -0
  349. package/esm2022/util/lib/index.mjs +5 -0
  350. package/esm2022/util/lib/src/interfaces.mjs +4 -0
  351. package/esm2022/util/lib/src/module-router.mjs +16 -0
  352. package/esm2022/util/lib/src/types.mjs +6 -0
  353. package/esm2022/util/lib/src/validators/iban.validator.mjs +189 -0
  354. package/esm2022/util/lib/src/validators/index.mjs +5 -0
  355. package/esm2022/util/lib/src/validators/max-array-length.validator.mjs +16 -0
  356. package/esm2022/util/lib/src/validators/min-array-length.validator.mjs +16 -0
  357. package/esm2022/util/lib/src/validators/tckn.validator.mjs +39 -0
  358. package/esm2022/util/lib/src/validators/validators.mjs +16 -0
  359. package/esm2022/util/loaders/aril-util-loaders.mjs +5 -0
  360. package/esm2022/util/loaders/index.mjs +2 -0
  361. package/esm2022/util/loaders/style/style.loader.service.mjs +61 -0
  362. package/esm2022/util/pipes/aril-util-pipes.mjs +5 -0
  363. package/esm2022/util/pipes/index.mjs +7 -0
  364. package/esm2022/util/pipes/src/distance-to-now.pipe.mjs +38 -0
  365. package/esm2022/util/pipes/src/get-column-by-field.pipe.mjs +17 -0
  366. package/esm2022/util/pipes/src/parse.pipe.mjs +22 -0
  367. package/esm2022/util/pipes/src/round-number.pipe.mjs +65 -0
  368. package/esm2022/util/pipes/src/safe.pipe.mjs +34 -0
  369. package/esm2022/util/pipes/src/translate-json/index.mjs +2 -0
  370. package/esm2022/util/pipes/src/translate-json/translate-json.pipe.mjs +41 -0
  371. package/esm2022/util/primitive-extensions/aril-util-primitive-extensions.mjs +5 -0
  372. package/esm2022/util/primitive-extensions/index.mjs +5 -0
  373. package/esm2022/util/primitive-extensions/src/boolean.extensions.mjs +2 -0
  374. package/esm2022/util/primitive-extensions/src/date.extensions.mjs +116 -0
  375. package/esm2022/util/primitive-extensions/src/number.extensions.mjs +39 -0
  376. package/esm2022/util/primitive-extensions/src/string.extensions.mjs +23 -0
  377. package/esm2022/util/pub-sub/aril-util-pub-sub.mjs +5 -0
  378. package/esm2022/util/pub-sub/index.mjs +2 -0
  379. package/esm2022/util/pub-sub/src/pub-sub.service.mjs +30 -0
  380. package/esm2022/util/sync-active-tab-route/aril-util-sync-active-tab-route.mjs +5 -0
  381. package/esm2022/util/sync-active-tab-route/index.mjs +2 -0
  382. package/esm2022/util/sync-active-tab-route/src/sync-active-tab-route.directive.mjs +45 -0
  383. package/esm2022/util/unwrap/aril-util-unwrap.mjs +5 -0
  384. package/esm2022/util/unwrap/index.mjs +2 -0
  385. package/esm2022/util/unwrap/src/unwrap-tag.directive.mjs +24 -0
  386. package/fesm2022/aril-app.component-hxaLgwmC.mjs +81 -0
  387. package/fesm2022/aril-app.component-hxaLgwmC.mjs.map +1 -0
  388. package/fesm2022/aril-boot-config-api.mjs +126 -0
  389. package/fesm2022/aril-boot-config-api.mjs.map +1 -0
  390. package/fesm2022/aril-boot-config-apps.mjs +138 -0
  391. package/fesm2022/aril-boot-config-apps.mjs.map +1 -0
  392. package/fesm2022/aril-boot-config-plugins.mjs +159 -0
  393. package/fesm2022/aril-boot-config-plugins.mjs.map +1 -0
  394. package/fesm2022/aril-boot-config-translate.mjs +72 -0
  395. package/fesm2022/aril-boot-config-translate.mjs.map +1 -0
  396. package/fesm2022/aril-boot-host.mjs +108 -0
  397. package/fesm2022/aril-boot-host.mjs.map +1 -0
  398. package/fesm2022/aril-boot-mfe-app.component-s1a-tkOD.mjs +80 -0
  399. package/fesm2022/aril-boot-mfe-app.component-s1a-tkOD.mjs.map +1 -0
  400. package/fesm2022/aril-boot-mfe-aril-boot-mfe-wLTqwDtz.mjs +369 -0
  401. package/fesm2022/aril-boot-mfe-aril-boot-mfe-wLTqwDtz.mjs.map +1 -0
  402. package/fesm2022/aril-boot-mfe.mjs +19 -0
  403. package/fesm2022/aril-boot-mfe.mjs.map +1 -0
  404. package/fesm2022/aril-boot.mjs +8 -0
  405. package/fesm2022/aril-boot.mjs.map +1 -0
  406. package/fesm2022/aril-http.mjs +437 -0
  407. package/fesm2022/aril-http.mjs.map +1 -0
  408. package/fesm2022/aril-i18n.mjs +71 -0
  409. package/fesm2022/aril-i18n.mjs.map +1 -0
  410. package/fesm2022/aril-keycloak.mjs +99 -0
  411. package/fesm2022/aril-keycloak.mjs.map +1 -0
  412. package/fesm2022/aril-provider.mjs +74 -0
  413. package/fesm2022/aril-provider.mjs.map +1 -0
  414. package/fesm2022/aril-theme-layout.mjs +3015 -0
  415. package/fesm2022/aril-theme-layout.mjs.map +1 -0
  416. package/fesm2022/aril-theme.mjs +8 -0
  417. package/fesm2022/aril-theme.mjs.map +1 -0
  418. package/fesm2022/aril-ui-autoComplete.mjs +116 -0
  419. package/fesm2022/aril-ui-autoComplete.mjs.map +1 -0
  420. package/fesm2022/aril-ui-badge.mjs +66 -0
  421. package/fesm2022/aril-ui-badge.mjs.map +1 -0
  422. package/fesm2022/aril-ui-business-assetPicker.mjs +189 -0
  423. package/fesm2022/aril-ui-business-assetPicker.mjs.map +1 -0
  424. package/fesm2022/aril-ui-business-detailed-overlay-panel.mjs +68 -0
  425. package/fesm2022/aril-ui-business-detailed-overlay-panel.mjs.map +1 -0
  426. package/fesm2022/aril-ui-business-enumPicker.mjs +131 -0
  427. package/fesm2022/aril-ui-business-enumPicker.mjs.map +1 -0
  428. package/fesm2022/aril-ui-business-image-viewer.mjs +118 -0
  429. package/fesm2022/aril-ui-business-image-viewer.mjs.map +1 -0
  430. package/fesm2022/aril-ui-business-multiple-ref-value.mjs +30 -0
  431. package/fesm2022/aril-ui-business-multiple-ref-value.mjs.map +1 -0
  432. package/fesm2022/aril-ui-business-notification-templates-dialog.mjs +70 -0
  433. package/fesm2022/aril-ui-business-notification-templates-dialog.mjs.map +1 -0
  434. package/fesm2022/aril-ui-business-operation-types-dialog.mjs +83 -0
  435. package/fesm2022/aril-ui-business-operation-types-dialog.mjs.map +1 -0
  436. package/fesm2022/aril-ui-business-ref-value.mjs +46 -0
  437. package/fesm2022/aril-ui-business-ref-value.mjs.map +1 -0
  438. package/fesm2022/aril-ui-business-rolePicker.mjs +78 -0
  439. package/fesm2022/aril-ui-business-rolePicker.mjs.map +1 -0
  440. package/fesm2022/aril-ui-business-userPicker.mjs +50 -0
  441. package/fesm2022/aril-ui-business-userPicker.mjs.map +1 -0
  442. package/fesm2022/aril-ui-business.mjs +8 -0
  443. package/fesm2022/aril-ui-business.mjs.map +1 -0
  444. package/fesm2022/aril-ui-button.mjs +62 -0
  445. package/fesm2022/aril-ui-button.mjs.map +1 -0
  446. package/fesm2022/aril-ui-calendar.mjs +231 -0
  447. package/fesm2022/aril-ui-calendar.mjs.map +1 -0
  448. package/fesm2022/aril-ui-charts.mjs +1666 -0
  449. package/fesm2022/aril-ui-charts.mjs.map +1 -0
  450. package/fesm2022/aril-ui-checkbox.mjs +50 -0
  451. package/fesm2022/aril-ui-checkbox.mjs.map +1 -0
  452. package/fesm2022/aril-ui-chip.mjs +136 -0
  453. package/fesm2022/aril-ui-chip.mjs.map +1 -0
  454. package/fesm2022/aril-ui-collapse-reorder-list.mjs +60 -0
  455. package/fesm2022/aril-ui-collapse-reorder-list.mjs.map +1 -0
  456. package/fesm2022/aril-ui-dxEditor.mjs +33 -0
  457. package/fesm2022/aril-ui-dxEditor.mjs.map +1 -0
  458. package/fesm2022/aril-ui-dxField.mjs +26 -0
  459. package/fesm2022/aril-ui-dxField.mjs.map +1 -0
  460. package/fesm2022/aril-ui-editor.mjs +203 -0
  461. package/fesm2022/aril-ui-editor.mjs.map +1 -0
  462. package/fesm2022/aril-ui-field.mjs +52 -0
  463. package/fesm2022/aril-ui-field.mjs.map +1 -0
  464. package/fesm2022/aril-ui-fileUpload.mjs +80 -0
  465. package/fesm2022/aril-ui-fileUpload.mjs.map +1 -0
  466. package/fesm2022/aril-ui-form.mjs +86 -0
  467. package/fesm2022/aril-ui-form.mjs.map +1 -0
  468. package/fesm2022/aril-ui-img-viewer.mjs +64 -0
  469. package/fesm2022/aril-ui-img-viewer.mjs.map +1 -0
  470. package/fesm2022/aril-ui-json-diff-comparison.mjs +56 -0
  471. package/fesm2022/aril-ui-json-diff-comparison.mjs.map +1 -0
  472. package/fesm2022/aril-ui-lib.mjs +376 -0
  473. package/fesm2022/aril-ui-lib.mjs.map +1 -0
  474. package/fesm2022/aril-ui-loader.mjs +21 -0
  475. package/fesm2022/aril-ui-loader.mjs.map +1 -0
  476. package/fesm2022/aril-ui-mask.mjs +42 -0
  477. package/fesm2022/aril-ui-mask.mjs.map +1 -0
  478. package/fesm2022/aril-ui-multiSelect.mjs +64 -0
  479. package/fesm2022/aril-ui-multiSelect.mjs.map +1 -0
  480. package/fesm2022/aril-ui-number.mjs +45 -0
  481. package/fesm2022/aril-ui-number.mjs.map +1 -0
  482. package/fesm2022/aril-ui-operation-types-dialog.mjs +98 -0
  483. package/fesm2022/aril-ui-operation-types-dialog.mjs.map +1 -0
  484. package/fesm2022/aril-ui-overlayPanel.mjs +27 -0
  485. package/fesm2022/aril-ui-overlayPanel.mjs.map +1 -0
  486. package/fesm2022/aril-ui-panel.mjs +40 -0
  487. package/fesm2022/aril-ui-panel.mjs.map +1 -0
  488. package/fesm2022/aril-ui-password.mjs +36 -0
  489. package/fesm2022/aril-ui-password.mjs.map +1 -0
  490. package/fesm2022/aril-ui-pdf-viewer.mjs +34 -0
  491. package/fesm2022/aril-ui-pdf-viewer.mjs.map +1 -0
  492. package/fesm2022/aril-ui-progressbar.mjs +25 -0
  493. package/fesm2022/aril-ui-progressbar.mjs.map +1 -0
  494. package/fesm2022/aril-ui-radioButton.mjs +37 -0
  495. package/fesm2022/aril-ui-radioButton.mjs.map +1 -0
  496. package/fesm2022/aril-ui-relativeDateSelector.mjs +285 -0
  497. package/fesm2022/aril-ui-relativeDateSelector.mjs.map +1 -0
  498. package/fesm2022/aril-ui-selectBox.mjs +74 -0
  499. package/fesm2022/aril-ui-selectBox.mjs.map +1 -0
  500. package/fesm2022/aril-ui-switch.mjs +30 -0
  501. package/fesm2022/aril-ui-switch.mjs.map +1 -0
  502. package/fesm2022/aril-ui-table-expand.mjs +194 -0
  503. package/fesm2022/aril-ui-table-expand.mjs.map +1 -0
  504. package/fesm2022/aril-ui-table.mjs +833 -0
  505. package/fesm2022/aril-ui-table.mjs.map +1 -0
  506. package/fesm2022/aril-ui-tag.mjs +27 -0
  507. package/fesm2022/aril-ui-tag.mjs.map +1 -0
  508. package/fesm2022/aril-ui-tagBox.mjs +62 -0
  509. package/fesm2022/aril-ui-tagBox.mjs.map +1 -0
  510. package/fesm2022/aril-ui-text.mjs +54 -0
  511. package/fesm2022/aril-ui-text.mjs.map +1 -0
  512. package/fesm2022/aril-ui-textArea.mjs +34 -0
  513. package/fesm2022/aril-ui-textArea.mjs.map +1 -0
  514. package/fesm2022/aril-ui-toggle-button.mjs +32 -0
  515. package/fesm2022/aril-ui-toggle-button.mjs.map +1 -0
  516. package/fesm2022/aril-ui-tooltip.mjs +30 -0
  517. package/fesm2022/aril-ui-tooltip.mjs.map +1 -0
  518. package/fesm2022/aril-ui-translate-input.mjs +207 -0
  519. package/fesm2022/aril-ui-translate-input.mjs.map +1 -0
  520. package/fesm2022/aril-ui-tree.mjs +60 -0
  521. package/fesm2022/aril-ui-tree.mjs.map +1 -0
  522. package/fesm2022/aril-ui-treeSelect.mjs +48 -0
  523. package/fesm2022/aril-ui-treeSelect.mjs.map +1 -0
  524. package/fesm2022/aril-ui-treeTable.mjs +62 -0
  525. package/fesm2022/aril-ui-treeTable.mjs.map +1 -0
  526. package/fesm2022/aril-ui-value.mjs +214 -0
  527. package/fesm2022/aril-ui-value.mjs.map +1 -0
  528. package/fesm2022/aril-ui.mjs +8 -0
  529. package/fesm2022/aril-ui.mjs.map +1 -0
  530. package/fesm2022/aril-util-block.mjs +71 -0
  531. package/fesm2022/aril-util-block.mjs.map +1 -0
  532. package/fesm2022/aril-util-custom_pages.mjs +72 -0
  533. package/fesm2022/aril-util-custom_pages.mjs.map +1 -0
  534. package/fesm2022/aril-util-directives.mjs +344 -0
  535. package/fesm2022/aril-util-directives.mjs.map +1 -0
  536. package/fesm2022/aril-util-lib.mjs +307 -0
  537. package/fesm2022/aril-util-lib.mjs.map +1 -0
  538. package/fesm2022/aril-util-loaders.mjs +68 -0
  539. package/fesm2022/aril-util-loaders.mjs.map +1 -0
  540. package/fesm2022/aril-util-pipes.mjs +213 -0
  541. package/fesm2022/aril-util-pipes.mjs.map +1 -0
  542. package/fesm2022/aril-util-primitive-extensions.mjs +179 -0
  543. package/fesm2022/aril-util-primitive-extensions.mjs.map +1 -0
  544. package/fesm2022/aril-util-pub-sub.mjs +37 -0
  545. package/fesm2022/aril-util-pub-sub.mjs.map +1 -0
  546. package/fesm2022/aril-util-sync-active-tab-route.mjs +52 -0
  547. package/fesm2022/aril-util-sync-active-tab-route.mjs.map +1 -0
  548. package/fesm2022/aril-util-unwrap.mjs +31 -0
  549. package/fesm2022/aril-util-unwrap.mjs.map +1 -0
  550. package/fesm2022/aril-util.mjs +8 -0
  551. package/fesm2022/aril-util.mjs.map +1 -0
  552. package/fesm2022/aril.mjs +456 -0
  553. package/fesm2022/aril.mjs.map +1 -0
  554. package/http/index.d.ts +8 -0
  555. package/http/lib/enums.d.ts +31 -0
  556. package/http/lib/interfaces.d.ts +27 -0
  557. package/http/src/httpBackend.d.ts +8 -0
  558. package/http/src/httpClient.d.ts +9 -0
  559. package/http/src/interceptor/accept-language.interceptor.d.ts +2 -0
  560. package/http/src/serviceBase.d.ts +8 -0
  561. package/http/src/serviceMockBase.d.ts +6 -0
  562. package/http/src/serviceRequest.d.ts +4 -0
  563. package/http/src/serviceStateMethods.d.ts +17 -0
  564. package/i18n/src/folder-name-token.d.ts +2 -0
  565. package/i18n/src/i18n.module.d.ts +7 -0
  566. package/i18n/src/loader.d.ts +8 -0
  567. package/i18n/src/provideI18n.d.ts +2 -0
  568. package/i18n/src/provideScope.d.ts +5 -0
  569. package/index.d.ts +5 -0
  570. package/keycloak/index.d.ts +1 -0
  571. package/keycloak/src/auth.interceptor.d.ts +3 -0
  572. package/package.json +528 -43
  573. package/provider/src/index.d.ts +4 -0
  574. package/provider/src/prodiveHost.d.ts +3 -0
  575. package/provider/src/prodiveHostRouter.d.ts +2 -0
  576. package/provider/src/provideHostKeycloak.d.ts +5 -0
  577. package/provider/src/provideLocaleId.d.ts +2 -0
  578. package/scripts/util/blockui.min.js +7 -0
  579. package/styles/ui/ui.common.scss +42 -0
  580. package/styles/util/blockui.css +56 -0
  581. package/theme/index.d.ts +1 -0
  582. package/theme/index.ts +1 -1
  583. package/theme/layout/app/breadcrumb/app.breadcrumb.component.d.ts +25 -0
  584. package/theme/layout/app/breadcrumb/app.breadcrumb.component.html +8 -8
  585. package/theme/layout/app/breadcrumb/app.breadcrumb.component.ts +126 -126
  586. package/theme/layout/app/chatbot/app.chatbot.component.d.ts +35 -0
  587. package/theme/layout/app/chatbot/app.chatbot.component.html +108 -108
  588. package/theme/layout/app/chatbot/app.chatbot.component.scss +34 -34
  589. package/theme/layout/app/chatbot/app.chatbot.component.ts +151 -151
  590. package/theme/layout/app/config/app.config.component.html +146 -146
  591. package/theme/layout/app/config/app.config.component.ts +143 -143
  592. package/theme/layout/app/expandableMenu/expandable-menu.component.d.ts +72 -0
  593. package/theme/layout/app/expandableMenu/expandable-menu.component.html +89 -89
  594. package/theme/layout/app/expandableMenu/expandable-menu.component.ts +295 -295
  595. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.d.ts +2031 -0
  596. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.html +110 -110
  597. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.scss +181 -181
  598. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.ts +260 -260
  599. package/theme/layout/app/favorite-pages/favorite-pages.service.d.ts +56 -0
  600. package/theme/layout/app/favorite-pages/favorite-pages.service.ts +95 -95
  601. package/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.d.ts +36 -0
  602. package/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.html +27 -27
  603. package/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.ts +165 -165
  604. package/theme/layout/app/general-search/general-search.component.d.ts +22 -0
  605. package/theme/layout/app/general-search/general-search.component.html +57 -57
  606. package/theme/layout/app/general-search/general-search.component.scss +27 -27
  607. package/theme/layout/app/general-search/general-search.component.ts +93 -93
  608. package/theme/layout/app/general-search/helpers.d.ts +7 -0
  609. package/theme/layout/app/general-search/helpers.spec.ts +527 -527
  610. package/theme/layout/app/general-search/helpers.ts +106 -106
  611. package/theme/layout/app/general-search/models.d.ts +131 -0
  612. package/theme/layout/app/general-search/models.ts +142 -142
  613. package/theme/layout/app/history/history-sidebar.component.d.ts +2018 -0
  614. package/theme/layout/app/history/history-sidebar.component.html +87 -87
  615. package/theme/layout/app/history/history-sidebar.component.scss +182 -182
  616. package/theme/layout/app/history/history-sidebar.component.ts +143 -143
  617. package/theme/layout/app/history/history.service.d.ts +36 -0
  618. package/theme/layout/app/history/history.service.ts +154 -154
  619. package/theme/layout/app/layout/app.layout.component.d.ts +47 -0
  620. package/theme/layout/app/layout/app.layout.component.html +27 -27
  621. package/theme/layout/app/layout/app.layout.component.ts +171 -171
  622. package/theme/layout/app/layout/mfe.layout.component.d.ts +10 -0
  623. package/theme/layout/app/layout/mfe.layout.component.ts +59 -59
  624. package/theme/layout/app/notifications/notifications-sidebar.component.d.ts +2306 -0
  625. package/theme/layout/app/notifications/notifications-sidebar.component.html +104 -104
  626. package/theme/layout/app/notifications/notifications-sidebar.component.scss +237 -237
  627. package/theme/layout/app/notifications/notifications-sidebar.component.ts +221 -221
  628. package/theme/layout/app/profileSidebar/app.profilesidebar.component.d.ts +29 -0
  629. package/theme/layout/app/profileSidebar/app.profilesidebar.component.html +122 -122
  630. package/theme/layout/app/profileSidebar/app.profilesidebar.component.scss +151 -151
  631. package/theme/layout/app/profileSidebar/app.profilesidebar.component.ts +141 -141
  632. package/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.d.ts +30 -0
  633. package/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.html +48 -48
  634. package/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.scss +27 -27
  635. package/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.ts +178 -178
  636. package/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.d.ts +52 -0
  637. package/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.html +71 -71
  638. package/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.ts +251 -251
  639. package/theme/layout/app/profileSidebar/profile.service.d.ts +72 -0
  640. package/theme/layout/app/profileSidebar/profile.service.ts +116 -116
  641. package/theme/layout/app/site-map/site-map-sidebar.component.d.ts +2025 -0
  642. package/theme/layout/app/site-map/site-map-sidebar.component.html +121 -121
  643. package/theme/layout/app/site-map/site-map-sidebar.component.scss +178 -178
  644. package/theme/layout/app/site-map/site-map-sidebar.component.ts +193 -193
  645. package/theme/layout/app/static-sidebar/static-sidebar.component.d.ts +57 -0
  646. package/theme/layout/app/static-sidebar/static-sidebar.component.html +123 -123
  647. package/theme/layout/app/static-sidebar/static-sidebar.component.scss +411 -411
  648. package/theme/layout/app/static-sidebar/static-sidebar.component.ts +276 -276
  649. package/theme/layout/app/topbar/app.topbar.component.d.ts +35 -0
  650. package/theme/layout/app/topbar/app.topbar.component.html +85 -85
  651. package/theme/layout/app/topbar/app.topbar.component.scss +193 -193
  652. package/theme/layout/app/topbar/app.topbar.component.ts +172 -172
  653. package/theme/layout/index.d.ts +7 -0
  654. package/theme/layout/index.ts +7 -7
  655. package/theme/layout/ng-package.json +6 -6
  656. package/theme/layout/service/app.layout.service.d.ts +69 -0
  657. package/theme/layout/service/app.layout.service.ts +307 -307
  658. package/theme/layout/service/app.menu.service.d.ts +22 -0
  659. package/theme/layout/service/app.menu.service.ts +53 -53
  660. package/theme/layout/service/breadcrumb.service.d.ts +10 -0
  661. package/theme/layout/service/breadcrumb.service.ts +14 -14
  662. package/theme/layout/service/interfaces/enum.d.ts +12 -0
  663. package/theme/layout/service/interfaces/enum.ts +13 -13
  664. package/theme/layout/service/interfaces/interfaces.d.ts +131 -0
  665. package/theme/layout/service/interfaces/interfaces.ts +150 -150
  666. package/theme/layout/service/menuchangeevent.d.ts +4 -0
  667. package/theme/layout/service/menuchangeevent.ts +4 -4
  668. package/theme/layout/service/notifications.service.d.ts +12 -0
  669. package/theme/layout/service/notifications.service.ts +26 -26
  670. package/theme/layout/service/search.service.d.ts +11 -0
  671. package/theme/layout/service/search.service.ts +22 -22
  672. package/theme/layout/service/selection-group.service.d.ts +17 -0
  673. package/theme/layout/service/selection-group.service.ts +73 -73
  674. package/theme/ng-package.json +6 -6
  675. package/theme/styles/layout/_animation.scss +53 -53
  676. package/theme/styles/layout/_breadcrumb.scss +31 -31
  677. package/theme/styles/layout/_config.scss +42 -42
  678. package/theme/styles/layout/_content.scss +61 -61
  679. package/theme/styles/layout/_expanded_sidebar.scss +486 -486
  680. package/theme/styles/layout/_fonts.scss +93 -93
  681. package/theme/styles/layout/_layout_dark.scss +5 -5
  682. package/theme/styles/layout/_layout_dim.scss +5 -5
  683. package/theme/styles/layout/_layout_light.scss +5 -5
  684. package/theme/styles/layout/_main.scss +28 -28
  685. package/theme/styles/layout/_profile.scss +10 -10
  686. package/theme/styles/layout/_responsive.scss +153 -153
  687. package/theme/styles/layout/_sidebar_drawer.scss +234 -234
  688. package/theme/styles/layout/_sidebar_horizontal.scss +163 -163
  689. package/theme/styles/layout/_sidebar_reveal.scss +201 -201
  690. package/theme/styles/layout/_sidebar_slim.scss +144 -144
  691. package/theme/styles/layout/_sidebar_slim_plus.scss +168 -168
  692. package/theme/styles/layout/_sidebar_vertical.scss +156 -156
  693. package/theme/styles/layout/_topbar.scss +140 -140
  694. package/theme/styles/layout/_typography.scss +68 -68
  695. package/theme/styles/layout/_utils.scss +24 -24
  696. package/theme/styles/layout/layout.scss +25 -25
  697. package/theme/styles/layout/menutheme/_colorscheme.scss +11 -11
  698. package/theme/styles/layout/menutheme/_menutheme.scss +3 -3
  699. package/theme/styles/layout/menutheme/_primarycolor.scss +16 -16
  700. package/theme/styles/layout/menutheme/_transparent.scss +26 -26
  701. package/theme/styles/layout/preloading.scss +84 -84
  702. package/theme/styles/theme/base/_colors.scss +17 -17
  703. package/theme/styles/theme/base/_common.scss +89 -89
  704. package/theme/styles/theme/base/_components.scss +108 -108
  705. package/theme/styles/theme/base/_mixins.scss +337 -337
  706. package/theme/styles/theme/base/components/button/_button.scss +576 -576
  707. package/theme/styles/theme/base/components/button/_speeddial.scss +96 -96
  708. package/theme/styles/theme/base/components/button/_splitbutton.scss +348 -348
  709. package/theme/styles/theme/base/components/data/_carousel.scss +37 -37
  710. package/theme/styles/theme/base/components/data/_datatable.scss +338 -338
  711. package/theme/styles/theme/base/components/data/_dataview.scss +46 -46
  712. package/theme/styles/theme/base/components/data/_filter.scss +137 -137
  713. package/theme/styles/theme/base/components/data/_orderlist.scss +114 -114
  714. package/theme/styles/theme/base/components/data/_organizationchart.scss +50 -50
  715. package/theme/styles/theme/base/components/data/_paginator.scss +92 -92
  716. package/theme/styles/theme/base/components/data/_picklist.scss +114 -114
  717. package/theme/styles/theme/base/components/data/_table.scss +16 -16
  718. package/theme/styles/theme/base/components/data/_timeline.scss +35 -35
  719. package/theme/styles/theme/base/components/data/_tree.scss +150 -150
  720. package/theme/styles/theme/base/components/data/_treetable.scss +255 -255
  721. package/theme/styles/theme/base/components/data/_virtualscroller.scss +28 -28
  722. package/theme/styles/theme/base/components/file/_fileupload.scss +64 -64
  723. package/theme/styles/theme/base/components/input/_autocomplete.scss +141 -141
  724. package/theme/styles/theme/base/components/input/_calendar.scss +267 -267
  725. package/theme/styles/theme/base/components/input/_cascadeselect.scss +135 -135
  726. package/theme/styles/theme/base/components/input/_checkbox.scss +99 -99
  727. package/theme/styles/theme/base/components/input/_chips.scss +67 -67
  728. package/theme/styles/theme/base/components/input/_colorpicker.scss +19 -19
  729. package/theme/styles/theme/base/components/input/_dropdown.scss +151 -151
  730. package/theme/styles/theme/base/components/input/_editor.scss +122 -122
  731. package/theme/styles/theme/base/components/input/_inputgroup.scss +75 -75
  732. package/theme/styles/theme/base/components/input/_inputmask.scss +16 -16
  733. package/theme/styles/theme/base/components/input/_inputnumber.scss +28 -28
  734. package/theme/styles/theme/base/components/input/_inputswitch.scss +60 -60
  735. package/theme/styles/theme/base/components/input/_inputtext.scss +100 -100
  736. package/theme/styles/theme/base/components/input/_listbox.scss +97 -97
  737. package/theme/styles/theme/base/components/input/_multiselect.scss +177 -177
  738. package/theme/styles/theme/base/components/input/_password.scss +52 -52
  739. package/theme/styles/theme/base/components/input/_radiobutton.scss +78 -78
  740. package/theme/styles/theme/base/components/input/_rating.scss +60 -60
  741. package/theme/styles/theme/base/components/input/_selectbutton.scss +50 -50
  742. package/theme/styles/theme/base/components/input/_slider.scss +75 -75
  743. package/theme/styles/theme/base/components/input/_togglebutton.scss +48 -48
  744. package/theme/styles/theme/base/components/input/_treeselect.scss +139 -139
  745. package/theme/styles/theme/base/components/menu/_breadcrumb.scss +43 -43
  746. package/theme/styles/theme/base/components/menu/_contextmenu.scss +39 -39
  747. package/theme/styles/theme/base/components/menu/_dock.scss +95 -95
  748. package/theme/styles/theme/base/components/menu/_megamenu.scss +55 -55
  749. package/theme/styles/theme/base/components/menu/_menu.scss +37 -37
  750. package/theme/styles/theme/base/components/menu/_menubar.scss +140 -140
  751. package/theme/styles/theme/base/components/menu/_panelmenu.scss +153 -153
  752. package/theme/styles/theme/base/components/menu/_slidemenu.scss +59 -59
  753. package/theme/styles/theme/base/components/menu/_steps.scss +56 -56
  754. package/theme/styles/theme/base/components/menu/_tabmenu.scss +73 -73
  755. package/theme/styles/theme/base/components/menu/_tieredmenu.scss +43 -43
  756. package/theme/styles/theme/base/components/messages/_inlinemessage.scss +69 -69
  757. package/theme/styles/theme/base/components/messages/_message.scss +107 -107
  758. package/theme/styles/theme/base/components/messages/_toast.scss +99 -99
  759. package/theme/styles/theme/base/components/misc/_avatar.scss +30 -30
  760. package/theme/styles/theme/base/components/misc/_badge.scss +48 -48
  761. package/theme/styles/theme/base/components/misc/_chip.scss +42 -42
  762. package/theme/styles/theme/base/components/misc/_inplace.scss +16 -16
  763. package/theme/styles/theme/base/components/misc/_progressbar.scss +17 -17
  764. package/theme/styles/theme/base/components/misc/_scrolltop.scss +25 -25
  765. package/theme/styles/theme/base/components/misc/_skeleton.scss +8 -8
  766. package/theme/styles/theme/base/components/misc/_tag.scss +45 -45
  767. package/theme/styles/theme/base/components/misc/_terminal.scss +12 -12
  768. package/theme/styles/theme/base/components/multimedia/_galleria.scss +155 -155
  769. package/theme/styles/theme/base/components/multimedia/_image.scss +49 -49
  770. package/theme/styles/theme/base/components/overlay/_confirmpopup.scss +70 -70
  771. package/theme/styles/theme/base/components/overlay/_dialog.scss +69 -69
  772. package/theme/styles/theme/base/components/overlay/_overlaypanel.scss +62 -62
  773. package/theme/styles/theme/base/components/overlay/_sidebar.scss +28 -28
  774. package/theme/styles/theme/base/components/overlay/_tooltip.scss +33 -33
  775. package/theme/styles/theme/base/components/panel/_accordion.scss +119 -119
  776. package/theme/styles/theme/base/components/panel/_card.scss +30 -30
  777. package/theme/styles/theme/base/components/panel/_divider.scss +31 -31
  778. package/theme/styles/theme/base/components/panel/_fieldset.scss +47 -47
  779. package/theme/styles/theme/base/components/panel/_panel.scss +77 -77
  780. package/theme/styles/theme/base/components/panel/_scrollpanel.scss +6 -6
  781. package/theme/styles/theme/base/components/panel/_splitter.scss +19 -19
  782. package/theme/styles/theme/base/components/panel/_stepper.scss +200 -200
  783. package/theme/styles/theme/base/components/panel/_tabview.scss +91 -91
  784. package/theme/styles/theme/base/components/panel/_toolbar.scss +11 -11
  785. package/theme/styles/theme/dark/_extensions.scss +134 -134
  786. package/theme/styles/theme/dark/_variables.scss +933 -933
  787. package/theme/styles/theme/dark/indigo/theme.scss +14 -14
  788. package/theme/styles/theme/light/_extensions.scss +116 -116
  789. package/theme/styles/theme/light/_variables.scss +940 -940
  790. package/theme/styles/theme/light/custom/theme.scss +16 -16
  791. package/theme/styles/theme/light/indigo/theme.scss +14 -14
  792. package/ui/autoComplete/src/auto-complete.component.d.ts +31 -0
  793. package/ui/autoComplete/src/interfaces.d.ts +28 -0
  794. package/ui/badge/src/badge.component.d.ts +32 -0
  795. package/ui/button/src/button.component.d.ts +28 -0
  796. package/ui/button/src/split-button.component.d.ts +8 -0
  797. package/ui/calendar/src/calendar.component.d.ts +63 -0
  798. package/ui/charts/index.d.ts +12 -0
  799. package/ui/charts/src/amCharts/column/column-chart.component.d.ts +25 -0
  800. package/ui/charts/src/amCharts/line/line-chart.component.d.ts +26 -0
  801. package/ui/charts/src/amCharts/pie/pie-chart.component.d.ts +24 -0
  802. package/ui/charts/src/highCharts/area/area-chart.component.d.ts +20 -0
  803. package/ui/charts/src/highCharts/bar/bar-chart.component.d.ts +26 -0
  804. package/ui/charts/src/highCharts/column/column-chart.component.d.ts +28 -0
  805. package/ui/charts/src/highCharts/gauge/solid-gauge.component.d.ts +38 -0
  806. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.d.ts +32 -0
  807. package/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.d.ts +24 -0
  808. package/ui/charts/src/highCharts/line/line-chart-series.component.d.ts +21 -0
  809. package/ui/charts/src/highCharts/line/line-chart.component.d.ts +21 -0
  810. package/ui/charts/src/highCharts/pie/pie-chart.component.d.ts +27 -0
  811. package/ui/charts/src/theme/theme.d.ts +5 -0
  812. package/ui/checkbox/src/check-box.component.d.ts +12 -0
  813. package/ui/checkbox/src/tri-state-checkbox.component.d.ts +9 -0
  814. package/ui/chip/index.d.ts +1 -0
  815. package/ui/chip/src/chip.component.d.ts +34 -0
  816. package/ui/collapse-reorder-list/index.d.ts +1 -0
  817. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.d.ts +21 -0
  818. package/ui/dxEditor/src/dx-editor.component.d.ts +11 -0
  819. package/ui/dxField/src/dx-field.component.d.ts +10 -0
  820. package/ui/editor/src/aril-editor.component.d.ts +28 -0
  821. package/ui/editor/src/types.d.ts +23 -0
  822. package/ui/field/src/field.component.d.ts +30 -0
  823. package/ui/fileUpload/src/file-upload.component.d.ts +49 -0
  824. package/ui/form/index.d.ts +11 -0
  825. package/ui/form/src/form-submit-button.component.d.ts +14 -0
  826. package/ui/form/src/form.component.d.ts +8 -0
  827. package/ui/img-viewer/index.d.ts +1 -0
  828. package/ui/img-viewer/src/img-viewer.component.d.ts +13 -0
  829. package/ui/index.d.ts +1 -0
  830. package/ui/json-diff-comparison/src/json-diff.component.d.ts +13 -0
  831. package/ui/lib/index.d.ts +12 -0
  832. package/ui/lib/src/form/form-error-message.component.d.ts +9 -0
  833. package/ui/lib/src/form/form-error-message.directive.d.ts +14 -0
  834. package/ui/lib/src/form/form-field-builder.d.ts +8 -0
  835. package/ui/lib/src/form/form-validation.d.ts +2 -0
  836. package/ui/lib/src/grid/enum-color-picker.pipe.d.ts +9 -0
  837. package/ui/lib/src/grid/flex-grid.directive.d.ts +6 -0
  838. package/ui/lib/src/input/baseInput.d.ts +7 -0
  839. package/ui/lib/src/input/common-input-validators.service.d.ts +20 -0
  840. package/ui/lib/src/input/dx-input-error-message.pipe.d.ts +11 -0
  841. package/ui/lib/src/input/input-disabled.directive.d.ts +9 -0
  842. package/ui/lib/src/input/input-error-message.pipe.d.ts +10 -0
  843. package/ui/lib/src/input/input-transforms.d.ts +5 -0
  844. package/ui/lib/src/input/value-accessor.directive.d.ts +9 -0
  845. package/ui/loader/src/loader.component.d.ts +5 -0
  846. package/ui/mask/src/mask.component.d.ts +21 -0
  847. package/ui/multiSelect/src/interfaces.d.ts +32 -0
  848. package/ui/multiSelect/src/multi-select.component.d.ts +28 -0
  849. package/ui/number/src/number.component.d.ts +29 -0
  850. package/ui/operation-types-dialog/src/operation-types-dialog.component.d.ts +33 -0
  851. package/ui/overlayPanel/src/overlay-panel.component.d.ts +8 -0
  852. package/ui/panel/src/panel.component.d.ts +14 -0
  853. package/ui/password/src/password.component.d.ts +11 -0
  854. package/ui/pdf-viewer/src/pdf-viewer.component.d.ts +19 -0
  855. package/ui/progressbar/src/progressbar.component.d.ts +8 -0
  856. package/ui/radioButton/src/radio-button.component.d.ts +22 -0
  857. package/ui/relativeDateSelector/index.d.ts +1 -0
  858. package/ui/relativeDateSelector/src/enum.d.ts +26 -0
  859. package/ui/relativeDateSelector/src/relative-date-selector.component.d.ts +61 -0
  860. package/ui/selectBox/src/interfaces.d.ts +32 -0
  861. package/ui/selectBox/src/select-box.component.d.ts +30 -0
  862. package/ui/switch/src/switch.component.d.ts +8 -0
  863. package/ui/table/index.d.ts +35 -0
  864. package/ui/table/src/export-overlay-panel.component.d.ts +39 -0
  865. package/ui/table/src/interfaces.d.ts +145 -0
  866. package/ui/table/src/table-column.component.d.ts +19 -0
  867. package/ui/table/src/table.component.d.ts +107 -0
  868. package/ui/table-expand/index.d.ts +20 -0
  869. package/ui/table-expand/src/table-column.component.d.ts +28 -0
  870. package/ui/table-expand/src/table-expand-area.component.d.ts +14 -0
  871. package/ui/table-expand/src/table.component.d.ts +47 -0
  872. package/ui/tag/index.d.ts +1 -0
  873. package/ui/tag/src/interface.d.ts +1 -0
  874. package/ui/tag/src/tag.component.d.ts +15 -0
  875. package/ui/tagBox/src/tag-box.component.d.ts +17 -0
  876. package/ui/text/src/text.component.d.ts +18 -0
  877. package/ui/textArea/src/text-area.component.d.ts +12 -0
  878. package/ui/toggle-button/index.d.ts +1 -0
  879. package/ui/toggle-button/src/toggle-button.component.d.ts +10 -0
  880. package/ui/tooltip/src/tooltip-component.d.ts +14 -0
  881. package/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.d.ts +21 -0
  882. package/ui/translate-input/src/aril-lang-modal/constants.d.ts +2 -0
  883. package/ui/translate-input/src/aril-translate-input.component.d.ts +26 -0
  884. package/ui/translate-input/src/interface.d.ts +12 -0
  885. package/ui/tree/src/tree.component.d.ts +23 -0
  886. package/ui/treeSelect/src/treeSelect.component.d.ts +23 -0
  887. package/ui/treeTable/src/tree-table.component.d.ts +21 -0
  888. package/ui/value/src/value.component.d.ts +43 -0
  889. package/ui-business/assetPicker/index.d.ts +1 -0
  890. package/ui-business/assetPicker/src/asset-picker.component.d.ts +48 -0
  891. package/ui-business/assetPicker/src/interface.d.ts +74 -0
  892. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.d.ts +31 -0
  893. package/ui-business/detailed-overlay-panel/src/interface.d.ts +54 -0
  894. package/ui-business/enumPicker/index.d.ts +1 -0
  895. package/ui-business/enumPicker/src/enum-picker.component.d.ts +47 -0
  896. package/ui-business/enumPicker/src/interface.d.ts +34 -0
  897. package/ui-business/image-viewer/index.d.ts +1 -0
  898. package/ui-business/image-viewer/src/aril-image-viewer.component.d.ts +20 -0
  899. package/ui-business/index.d.ts +1 -0
  900. package/ui-business/multiple-ref-value/src/multiple-ref-value.component.d.ts +16 -0
  901. package/ui-business/notification-templates-dialog/src/interface.d.ts +17 -0
  902. package/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.d.ts +18 -0
  903. package/ui-business/operation-types-dialog/src/operation-types-dialog.component.d.ts +28 -0
  904. package/ui-business/ref-value/src/ref-value.component.d.ts +20 -0
  905. package/ui-business/rolePicker/src/interface.d.ts +44 -0
  906. package/ui-business/rolePicker/src/role-picker.component.d.ts +25 -0
  907. package/ui-business/userPicker/index.d.ts +1 -0
  908. package/ui-business/userPicker/src/interface.d.ts +25 -0
  909. package/ui-business/userPicker/src/user-picker.component.d.ts +18 -0
  910. package/util/block/src/block.d.ts +28 -0
  911. package/util/custom_pages/src/notFound.component.d.ts +5 -0
  912. package/util/directives/src/detail-page-customization/detail-page-customization.directive.d.ts +26 -0
  913. package/util/directives/src/detail-page-customization/index.d.ts +2 -0
  914. package/util/directives/src/detail-page-customization/models.d.ts +53 -0
  915. package/util/directives/src/dialog-component/plugin-dialog.component.d.ts +11 -0
  916. package/util/directives/src/dialog-service/plugin-dialog.service.d.ts +7 -0
  917. package/util/index.d.ts +1 -0
  918. package/util/lib/src/interfaces.d.ts +41 -0
  919. package/util/lib/src/module-router.d.ts +5 -0
  920. package/util/lib/src/types.d.ts +2290 -0
  921. package/util/lib/src/validators/iban.validator.d.ts +7 -0
  922. package/util/lib/src/validators/max-array-length.validator.d.ts +7 -0
  923. package/util/lib/src/validators/min-array-length.validator.d.ts +7 -0
  924. package/util/lib/src/validators/tckn.validator.d.ts +7 -0
  925. package/util/lib/src/validators/validators.d.ts +7 -0
  926. package/util/loaders/index.d.ts +1 -0
  927. package/util/loaders/style/style.loader.service.d.ts +13 -0
  928. package/util/pipes/src/distance-to-now.pipe.d.ts +11 -0
  929. package/util/pipes/src/get-column-by-field.pipe.d.ts +11 -0
  930. package/util/pipes/src/parse.pipe.d.ts +7 -0
  931. package/util/pipes/src/round-number.pipe.d.ts +11 -0
  932. package/util/pipes/src/safe.pipe.d.ts +10 -0
  933. package/util/pipes/src/translate-json/index.d.ts +1 -0
  934. package/util/pipes/src/translate-json/translate-json.pipe.d.ts +10 -0
  935. package/util/primitive-extensions/src/date.extensions.d.ts +8 -0
  936. package/util/primitive-extensions/src/number.extensions.d.ts +12 -0
  937. package/util/primitive-extensions/src/string.extensions.d.ts +11 -0
  938. package/util/pub-sub/src/pub-sub.service.d.ts +21 -0
  939. package/util/sync-active-tab-route/src/sync-active-tab-route.directive.d.ts +17 -0
  940. package/util/unwrap/src/unwrap-tag.directive.d.ts +9 -0
  941. package/.eslintrc.json +0 -41
  942. package/boot/config/api/ng-package.json +0 -6
  943. package/boot/config/api/src/api.sample.json +0 -8
  944. package/boot/config/api/src/api.service.ts +0 -91
  945. package/boot/config/api/src/interfaces.ts +0 -65
  946. package/boot/config/apps/ng-package.json +0 -6
  947. package/boot/config/apps/src/apps.service.ts +0 -62
  948. package/boot/config/apps/src/auth.guard.ts +0 -22
  949. package/boot/config/apps/src/interfaces.ts +0 -58
  950. package/boot/config/apps/src/reuse-strategy.ts +0 -10
  951. package/boot/config/apps/src/showdowDOMWrapper.ts +0 -28
  952. package/boot/config/plugins/ng-package.json +0 -6
  953. package/boot/config/plugins/src/getNgZone.ts +0 -7
  954. package/boot/config/plugins/src/interfaces.ts +0 -75
  955. package/boot/config/plugins/src/plugins.service.ts +0 -110
  956. package/boot/config/translate/constants.ts +0 -4
  957. package/boot/config/translate/ng-package.json +0 -6
  958. package/boot/config/translate/primeng/i18n/tr.ts +0 -59
  959. package/boot/host/ng-package.json +0 -6
  960. package/boot/host/src/app.component.ts +0 -51
  961. package/boot/host/src/bootstrap.ts +0 -87
  962. package/boot/index.ts +0 -1
  963. package/boot/mfe/ng-package.json +0 -6
  964. package/boot/mfe/src/app.component.ts +0 -63
  965. package/boot/mfe/src/appComponentLoader.ts +0 -4
  966. package/boot/mfe/src/bootstrap.ts +0 -97
  967. package/boot/mfe/src/loadStyles.ts +0 -42
  968. package/boot/mfe/src/monaco.config.ts +0 -266
  969. package/boot/ng-package.json +0 -6
  970. package/http/index.ts +0 -13
  971. package/http/lib/enums.ts +0 -31
  972. package/http/lib/interfaces.ts +0 -46
  973. package/http/ng-package.json +0 -6
  974. package/http/src/httpBackend.ts +0 -12
  975. package/http/src/httpClient.ts +0 -20
  976. package/http/src/interceptor/accept-language.interceptor.ts +0 -32
  977. package/http/src/serviceBase.ts +0 -175
  978. package/http/src/serviceMockBase.ts +0 -12
  979. package/http/src/serviceRequest.ts +0 -28
  980. package/http/src/serviceStateMethods.ts +0 -211
  981. package/i18n/ng-package.json +0 -6
  982. package/i18n/src/folder-name-token.ts +0 -3
  983. package/i18n/src/i18n.module.ts +0 -11
  984. package/i18n/src/loader.ts +0 -13
  985. package/i18n/src/provideI18n.ts +0 -18
  986. package/i18n/src/provideScope.ts +0 -20
  987. package/keycloak/index.ts +0 -1
  988. package/keycloak/ng-package.json +0 -6
  989. package/keycloak/src/auth.interceptor.ts +0 -103
  990. package/ng-package.json +0 -16
  991. package/project.json +0 -39
  992. package/provider/ng-package.json +0 -6
  993. package/provider/src/index.ts +0 -5
  994. package/provider/src/prodiveHost.ts +0 -15
  995. package/provider/src/prodiveHostRouter.ts +0 -21
  996. package/provider/src/provideHostKeycloak.ts +0 -34
  997. package/provider/src/provideLocaleId.ts +0 -22
  998. package/tsconfig.lib.json +0 -12
  999. package/tsconfig.lib.prod.json +0 -10
  1000. package/tsconfig.spec.json +0 -9
  1001. package/ui/autoComplete/ng-package.json +0 -6
  1002. package/ui/autoComplete/src/auto-complete.component.html +0 -14
  1003. package/ui/autoComplete/src/auto-complete.component.ts +0 -130
  1004. package/ui/autoComplete/src/interfaces.ts +0 -35
  1005. package/ui/badge/ng-package.json +0 -6
  1006. package/ui/badge/src/badge.component.html +0 -11
  1007. package/ui/badge/src/badge.component.ts +0 -63
  1008. package/ui/button/ng-package.json +0 -6
  1009. package/ui/button/src/button.component.html +0 -12
  1010. package/ui/button/src/button.component.ts +0 -47
  1011. package/ui/button/src/split-button.component.html +0 -2
  1012. package/ui/button/src/split-button.component.ts +0 -17
  1013. package/ui/calendar/ng-package.json +0 -6
  1014. package/ui/calendar/src/calendar.component.html +0 -48
  1015. package/ui/calendar/src/calendar.component.ts +0 -257
  1016. package/ui/charts/index.ts +0 -13
  1017. package/ui/charts/ng-package.json +0 -6
  1018. package/ui/charts/src/amCharts/column/column-chart.component.ts +0 -144
  1019. package/ui/charts/src/amCharts/line/line-chart.component.ts +0 -194
  1020. package/ui/charts/src/amCharts/pie/pie-chart.component.ts +0 -132
  1021. package/ui/charts/src/highCharts/area/area-chart.component.ts +0 -112
  1022. package/ui/charts/src/highCharts/bar/bar-chart.component.ts +0 -100
  1023. package/ui/charts/src/highCharts/bar/bar-chart.components.scss +0 -50
  1024. package/ui/charts/src/highCharts/column/column-chart.component copy.ts +0 -50
  1025. package/ui/charts/src/highCharts/column/column-chart.component.ts +0 -125
  1026. package/ui/charts/src/highCharts/column/column-chart.components.scss +0 -50
  1027. package/ui/charts/src/highCharts/gauge/solid-gauge.component.ts +0 -199
  1028. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.ts +0 -279
  1029. package/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.ts +0 -185
  1030. package/ui/charts/src/highCharts/line/line-chart-series.component.ts +0 -92
  1031. package/ui/charts/src/highCharts/line/line-chart.component.ts +0 -85
  1032. package/ui/charts/src/highCharts/pie/pie-chart.component.ts +0 -139
  1033. package/ui/charts/src/theme/theme.ts +0 -55
  1034. package/ui/checkbox/ng-package.json +0 -6
  1035. package/ui/checkbox/src/check-box.component.html +0 -15
  1036. package/ui/checkbox/src/check-box.component.ts +0 -24
  1037. package/ui/checkbox/src/tri-state-checkbox.component.html +0 -7
  1038. package/ui/checkbox/src/tri-state-checkbox.component.ts +0 -20
  1039. package/ui/chip/index.ts +0 -1
  1040. package/ui/chip/ng-package.json +0 -6
  1041. package/ui/chip/src/chip.component.html +0 -33
  1042. package/ui/chip/src/chip.component.ts +0 -144
  1043. package/ui/collapse-reorder-list/index.ts +0 -1
  1044. package/ui/collapse-reorder-list/ng-package.json +0 -6
  1045. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.html +0 -42
  1046. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.scss +0 -24
  1047. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.ts +0 -56
  1048. package/ui/dxEditor/ng-package.json +0 -6
  1049. package/ui/dxEditor/src/dx-editor.component.html +0 -67
  1050. package/ui/dxEditor/src/dx-editor.component.ts +0 -19
  1051. package/ui/dxField/ng-package.json +0 -6
  1052. package/ui/dxField/src/dx-field.component.html +0 -15
  1053. package/ui/dxField/src/dx-field.component.ts +0 -17
  1054. package/ui/editor/ng-package.json +0 -6
  1055. package/ui/editor/src/aril-editor.component.html +0 -16
  1056. package/ui/editor/src/aril-editor.component.scss +0 -18
  1057. package/ui/editor/src/aril-editor.component.ts +0 -176
  1058. package/ui/editor/src/types.ts +0 -24
  1059. package/ui/field/ng-package.json +0 -6
  1060. package/ui/field/src/field.component.html +0 -27
  1061. package/ui/field/src/field.component.ts +0 -53
  1062. package/ui/fileUpload/ng-package.json +0 -6
  1063. package/ui/fileUpload/src/file-upload.component.html +0 -76
  1064. package/ui/fileUpload/src/file-upload.component.ts +0 -90
  1065. package/ui/form/index.ts +0 -18
  1066. package/ui/form/ng-package.json +0 -6
  1067. package/ui/form/src/form-submit-button.component.html +0 -12
  1068. package/ui/form/src/form-submit-button.component.ts +0 -36
  1069. package/ui/form/src/form.component.ts +0 -20
  1070. package/ui/img-viewer/index.ts +0 -2
  1071. package/ui/img-viewer/ng-package.json +0 -6
  1072. package/ui/img-viewer/src/img-viewer.component.html +0 -12
  1073. package/ui/img-viewer/src/img-viewer.component.scss +0 -8
  1074. package/ui/img-viewer/src/img-viewer.component.ts +0 -59
  1075. package/ui/index.ts +0 -1
  1076. package/ui/json-diff-comparison/ng-package.json +0 -6
  1077. package/ui/json-diff-comparison/src/json-diff.component.html +0 -5
  1078. package/ui/json-diff-comparison/src/json-diff.component.ts +0 -45
  1079. package/ui/lib/index.ts +0 -17
  1080. package/ui/lib/ng-package.json +0 -6
  1081. package/ui/lib/src/form/form-error-message.component.ts +0 -25
  1082. package/ui/lib/src/form/form-error-message.directive.ts +0 -32
  1083. package/ui/lib/src/form/form-field-builder.ts +0 -31
  1084. package/ui/lib/src/form/form-validation.ts +0 -14
  1085. package/ui/lib/src/grid/enum-color-picker.pipe.ts +0 -33
  1086. package/ui/lib/src/grid/flex-grid.directive.ts +0 -10
  1087. package/ui/lib/src/input/baseInput.ts +0 -30
  1088. package/ui/lib/src/input/common-input-validators.service.ts +0 -57
  1089. package/ui/lib/src/input/dx-input-error-message.pipe.ts +0 -16
  1090. package/ui/lib/src/input/input-disabled.directive.ts +0 -15
  1091. package/ui/lib/src/input/input-error-message.pipe.ts +0 -71
  1092. package/ui/lib/src/input/input-transforms.ts +0 -11
  1093. package/ui/lib/src/input/value-accessor.directive.ts +0 -31
  1094. package/ui/loader/ng-package.json +0 -6
  1095. package/ui/loader/src/loader.component.html +0 -7
  1096. package/ui/loader/src/loader.component.scss +0 -6
  1097. package/ui/loader/src/loader.component.ts +0 -14
  1098. package/ui/mask/ng-package.json +0 -6
  1099. package/ui/mask/src/mask.component.css +0 -23
  1100. package/ui/mask/src/mask.component.html +0 -17
  1101. package/ui/mask/src/mask.component.ts +0 -34
  1102. package/ui/multiSelect/ng-package.json +0 -6
  1103. package/ui/multiSelect/src/interfaces.ts +0 -41
  1104. package/ui/multiSelect/src/multi-select.component.html +0 -14
  1105. package/ui/multiSelect/src/multi-select.component.ts +0 -66
  1106. package/ui/ng-package.json +0 -6
  1107. package/ui/number/ng-package.json +0 -6
  1108. package/ui/number/src/number.component.html +0 -26
  1109. package/ui/number/src/number.component.ts +0 -36
  1110. package/ui/operation-types-dialog/ng-package.json +0 -6
  1111. package/ui/operation-types-dialog/src/operation-types-dialog.component.ts +0 -98
  1112. package/ui/overlayPanel/ng-package.json +0 -6
  1113. package/ui/overlayPanel/src/overlay-panel.component.html +0 -5
  1114. package/ui/overlayPanel/src/overlay-panel.component.ts +0 -16
  1115. package/ui/panel/ng-package.json +0 -6
  1116. package/ui/panel/src/panel.component.css +0 -38
  1117. package/ui/panel/src/panel.component.html +0 -44
  1118. package/ui/panel/src/panel.component.ts +0 -31
  1119. package/ui/password/ng-package.json +0 -6
  1120. package/ui/password/src/password.component.html +0 -25
  1121. package/ui/password/src/password.component.ts +0 -22
  1122. package/ui/pdf-viewer/ng-package.json +0 -6
  1123. package/ui/pdf-viewer/src/pdf-viewer.component.html +0 -16
  1124. package/ui/pdf-viewer/src/pdf-viewer.component.scss +0 -8
  1125. package/ui/pdf-viewer/src/pdf-viewer.component.ts +0 -28
  1126. package/ui/progressbar/dist/index.js +0 -13
  1127. package/ui/progressbar/ng-package.json +0 -6
  1128. package/ui/progressbar/src/dist/progressbar.component.js +0 -28
  1129. package/ui/progressbar/src/progressbar.component.html +0 -1
  1130. package/ui/progressbar/src/progressbar.component.ts +0 -18
  1131. package/ui/radioButton/ng-package.json +0 -6
  1132. package/ui/radioButton/src/radio-button.component.html +0 -23
  1133. package/ui/radioButton/src/radio-button.component.scss +0 -17
  1134. package/ui/radioButton/src/radio-button.component.ts +0 -39
  1135. package/ui/relativeDateSelector/index.ts +0 -1
  1136. package/ui/relativeDateSelector/ng-package.json +0 -6
  1137. package/ui/relativeDateSelector/src/enum.ts +0 -29
  1138. package/ui/relativeDateSelector/src/relative-date-selector.component.html +0 -118
  1139. package/ui/relativeDateSelector/src/relative-date-selector.component.scss +0 -154
  1140. package/ui/relativeDateSelector/src/relative-date-selector.component.ts +0 -291
  1141. package/ui/selectBox/ng-package.json +0 -6
  1142. package/ui/selectBox/src/interfaces.ts +0 -41
  1143. package/ui/selectBox/src/select-box.component.html +0 -19
  1144. package/ui/selectBox/src/select-box.component.ts +0 -79
  1145. package/ui/styles/ui.common.scss +0 -42
  1146. package/ui/switch/ng-package.json +0 -6
  1147. package/ui/switch/src/switch.component.html +0 -7
  1148. package/ui/switch/src/switch.component.ts +0 -18
  1149. package/ui/table/index.ts +0 -76
  1150. package/ui/table/ng-package.json +0 -6
  1151. package/ui/table/src/export-overlay-panel.component.ts +0 -330
  1152. package/ui/table/src/interfaces.ts +0 -162
  1153. package/ui/table/src/table-column.component.ts +0 -22
  1154. package/ui/table/src/table.component.html +0 -404
  1155. package/ui/table/src/table.component.scss +0 -15
  1156. package/ui/table/src/table.component.ts +0 -368
  1157. package/ui/table-expand/index.ts +0 -41
  1158. package/ui/table-expand/ng-package.json +0 -6
  1159. package/ui/table-expand/src/table-column.component.ts +0 -32
  1160. package/ui/table-expand/src/table-expand-area.component.ts +0 -18
  1161. package/ui/table-expand/src/table.component.html +0 -101
  1162. package/ui/table-expand/src/table.component.ts +0 -92
  1163. package/ui/tag/index.ts +0 -1
  1164. package/ui/tag/ng-package.json +0 -6
  1165. package/ui/tag/src/interface.ts +0 -1
  1166. package/ui/tag/src/tag.component.html +0 -9
  1167. package/ui/tag/src/tag.component.ts +0 -17
  1168. package/ui/tagBox/ng-package.json +0 -6
  1169. package/ui/tagBox/src/tag-box.component.html +0 -26
  1170. package/ui/tagBox/src/tag-box.component.ts +0 -56
  1171. package/ui/text/ng-package.json +0 -6
  1172. package/ui/text/src/text.component.html +0 -21
  1173. package/ui/text/src/text.component.ts +0 -55
  1174. package/ui/textArea/ng-package.json +0 -6
  1175. package/ui/textArea/src/text-area.component.html +0 -12
  1176. package/ui/textArea/src/text-area.component.ts +0 -22
  1177. package/ui/toggle-button/index.ts +0 -1
  1178. package/ui/toggle-button/ng-package.json +0 -6
  1179. package/ui/toggle-button/src/toggle-button.component.html +0 -13
  1180. package/ui/toggle-button/src/toggle-button.component.scss +0 -19
  1181. package/ui/toggle-button/src/toggle-button.component.ts +0 -22
  1182. package/ui/tooltip/ng-package.json +0 -6
  1183. package/ui/tooltip/src/tooltip-component.html +0 -10
  1184. package/ui/tooltip/src/tooltip-component.ts +0 -20
  1185. package/ui/translate-input/ng-package.json +0 -6
  1186. package/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.html +0 -46
  1187. package/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.scss +0 -9
  1188. package/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.ts +0 -74
  1189. package/ui/translate-input/src/aril-lang-modal/constants.ts +0 -16
  1190. package/ui/translate-input/src/aril-translate-input.component.ts +0 -152
  1191. package/ui/translate-input/src/interface.ts +0 -14
  1192. package/ui/tree/ng-package.json +0 -6
  1193. package/ui/tree/src/tree.component.html +0 -17
  1194. package/ui/tree/src/tree.component.ts +0 -65
  1195. package/ui/treeSelect/ng-package.json +0 -6
  1196. package/ui/treeSelect/src/treeSelect.component.html +0 -18
  1197. package/ui/treeSelect/src/treeSelect.component.ts +0 -43
  1198. package/ui/treeTable/ng-package.json +0 -6
  1199. package/ui/treeTable/src/tree-table.component.html +0 -88
  1200. package/ui/treeTable/src/tree-table.component.ts +0 -57
  1201. package/ui/value/ng-package.json +0 -6
  1202. package/ui/value/src/value.component.html +0 -94
  1203. package/ui/value/src/value.component.scss +0 -6
  1204. package/ui/value/src/value.component.ts +0 -268
  1205. package/ui-business/assetPicker/index.ts +0 -1
  1206. package/ui-business/assetPicker/ng-package.json +0 -6
  1207. package/ui-business/assetPicker/src/asset-picker.component.html +0 -29
  1208. package/ui-business/assetPicker/src/asset-picker.component.ts +0 -259
  1209. package/ui-business/assetPicker/src/interface.ts +0 -83
  1210. package/ui-business/detailed-overlay-panel/ng-package.json +0 -6
  1211. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.html +0 -52
  1212. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.scss +0 -19
  1213. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.ts +0 -66
  1214. package/ui-business/detailed-overlay-panel/src/interface.ts +0 -62
  1215. package/ui-business/enumPicker/index.ts +0 -1
  1216. package/ui-business/enumPicker/ng-package.json +0 -6
  1217. package/ui-business/enumPicker/src/enum-picker.component.html +0 -39
  1218. package/ui-business/enumPicker/src/enum-picker.component.ts +0 -147
  1219. package/ui-business/enumPicker/src/interface.ts +0 -44
  1220. package/ui-business/image-viewer/index.ts +0 -1
  1221. package/ui-business/image-viewer/ng-package.json +0 -6
  1222. package/ui-business/image-viewer/src/aril-image-viewer.component.ts +0 -92
  1223. package/ui-business/index.ts +0 -1
  1224. package/ui-business/multiple-ref-value/ng-package.json +0 -6
  1225. package/ui-business/multiple-ref-value/src/multiple-ref-value.component.html +0 -26
  1226. package/ui-business/multiple-ref-value/src/multiple-ref-value.component.ts +0 -21
  1227. package/ui-business/ng-package.json +0 -6
  1228. package/ui-business/notification-templates-dialog/ng-package.json +0 -6
  1229. package/ui-business/notification-templates-dialog/src/interface.ts +0 -18
  1230. package/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.html +0 -31
  1231. package/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.ts +0 -69
  1232. package/ui-business/operation-types-dialog/ng-package.json +0 -6
  1233. package/ui-business/operation-types-dialog/src/operation-types-dialog.component.ts +0 -78
  1234. package/ui-business/ref-value/ng-package.json +0 -6
  1235. package/ui-business/ref-value/src/ref-value.component.html +0 -29
  1236. package/ui-business/ref-value/src/ref-value.component.ts +0 -41
  1237. package/ui-business/rolePicker/ng-package.json +0 -6
  1238. package/ui-business/rolePicker/src/interface.ts +0 -56
  1239. package/ui-business/rolePicker/src/role-picker.component.html +0 -21
  1240. package/ui-business/rolePicker/src/role-picker.component.ts +0 -88
  1241. package/ui-business/userPicker/index.ts +0 -1
  1242. package/ui-business/userPicker/ng-package.json +0 -6
  1243. package/ui-business/userPicker/src/interface.ts +0 -27
  1244. package/ui-business/userPicker/src/user-picker.component.html +0 -20
  1245. package/ui-business/userPicker/src/user-picker.component.ts +0 -52
  1246. package/util/block/ng-package.json +0 -6
  1247. package/util/block/src/block.ts +0 -65
  1248. package/util/block/src/blockui.css +0 -56
  1249. package/util/block/src/blockui.min.js +0 -7
  1250. package/util/custom_pages/ng-package.json +0 -6
  1251. package/util/custom_pages/src/notFound.component.ts +0 -34
  1252. package/util/directives/ng-package.json +0 -6
  1253. package/util/directives/src/detail-page-customization/detail-page-customization.directive.md +0 -199
  1254. package/util/directives/src/detail-page-customization/detail-page-customization.directive.ts +0 -343
  1255. package/util/directives/src/detail-page-customization/index.ts +0 -2
  1256. package/util/directives/src/detail-page-customization/models.ts +0 -61
  1257. package/util/directives/src/dialog-component/plugin-dialog.component.ts +0 -22
  1258. package/util/directives/src/dialog-service/plugin-dialog.service.ts +0 -12
  1259. package/util/index.ts +0 -1
  1260. package/util/lib/ng-package.json +0 -6
  1261. package/util/lib/src/interfaces.ts +0 -44
  1262. package/util/lib/src/module-router.ts +0 -9
  1263. package/util/lib/src/types.ts +0 -61
  1264. package/util/lib/src/validators/iban.validator.ts +0 -202
  1265. package/util/lib/src/validators/max-array-length.validator.ts +0 -18
  1266. package/util/lib/src/validators/min-array-length.validator.ts +0 -18
  1267. package/util/lib/src/validators/tckn.validator.ts +0 -55
  1268. package/util/lib/src/validators/validators.ts +0 -21
  1269. package/util/loaders/index.ts +0 -1
  1270. package/util/loaders/ng-package.json +0 -6
  1271. package/util/loaders/style/style.loader.service.ts +0 -69
  1272. package/util/ng-package.json +0 -6
  1273. package/util/pipes/ng-package.json +0 -6
  1274. package/util/pipes/src/distance-to-now.pipe.ts +0 -37
  1275. package/util/pipes/src/get-column-by-field.pipe.ts +0 -11
  1276. package/util/pipes/src/parse.pipe.ts +0 -15
  1277. package/util/pipes/src/round-number.pipe.ts +0 -75
  1278. package/util/pipes/src/safe.pipe.ts +0 -27
  1279. package/util/pipes/src/translate-json/index.ts +0 -1
  1280. package/util/pipes/src/translate-json/translate-json.pipe.ts +0 -34
  1281. package/util/primitive-extensions/ng-package.json +0 -6
  1282. package/util/primitive-extensions/src/date.extensions.ts +0 -135
  1283. package/util/primitive-extensions/src/number.extensions.ts +0 -57
  1284. package/util/primitive-extensions/src/string.extensions.ts +0 -39
  1285. package/util/pub-sub/ng-package.json +0 -6
  1286. package/util/pub-sub/src/pub-sub.service.ts +0 -35
  1287. package/util/sync-active-tab-route/ng-package.json +0 -6
  1288. package/util/sync-active-tab-route/src/sync-active-tab-route.directive.ts +0 -47
  1289. package/util/unwrap/ng-package.json +0 -6
  1290. package/util/unwrap/src/unwrap-tag.directive.ts +0 -18
  1291. /package/boot/config/api/{index.ts → index.d.ts} +0 -0
  1292. /package/boot/config/apps/{index.ts → index.d.ts} +0 -0
  1293. /package/boot/config/plugins/{index.ts → index.d.ts} +0 -0
  1294. /package/boot/config/translate/{index.ts → index.d.ts} +0 -0
  1295. /package/boot/host/{index.ts → index.d.ts} +0 -0
  1296. /package/boot/mfe/{index.ts → index.d.ts} +0 -0
  1297. /package/i18n/{index.ts → index.d.ts} +0 -0
  1298. /package/provider/{index.ts → index.d.ts} +0 -0
  1299. /package/{public-api.ts → public-api.d.ts} +0 -0
  1300. /package/ui/autoComplete/{index.ts → index.d.ts} +0 -0
  1301. /package/ui/badge/{index.ts → index.d.ts} +0 -0
  1302. /package/ui/button/{index.ts → index.d.ts} +0 -0
  1303. /package/ui/calendar/{index.ts → index.d.ts} +0 -0
  1304. /package/ui/checkbox/{index.ts → index.d.ts} +0 -0
  1305. /package/ui/dxEditor/{index.ts → index.d.ts} +0 -0
  1306. /package/ui/dxField/{index.ts → index.d.ts} +0 -0
  1307. /package/ui/editor/{index.ts → index.d.ts} +0 -0
  1308. /package/ui/field/{index.ts → index.d.ts} +0 -0
  1309. /package/ui/fileUpload/{index.ts → index.d.ts} +0 -0
  1310. /package/ui/json-diff-comparison/{index.ts → index.d.ts} +0 -0
  1311. /package/ui/loader/{index.ts → index.d.ts} +0 -0
  1312. /package/ui/mask/{index.ts → index.d.ts} +0 -0
  1313. /package/ui/multiSelect/{index.ts → index.d.ts} +0 -0
  1314. /package/ui/number/{index.ts → index.d.ts} +0 -0
  1315. /package/ui/operation-types-dialog/{index.ts → index.d.ts} +0 -0
  1316. /package/ui/overlayPanel/{index.ts → index.d.ts} +0 -0
  1317. /package/ui/panel/{index.ts → index.d.ts} +0 -0
  1318. /package/ui/password/{index.ts → index.d.ts} +0 -0
  1319. /package/ui/pdf-viewer/{index.ts → index.d.ts} +0 -0
  1320. /package/ui/progressbar/{index.ts → index.d.ts} +0 -0
  1321. /package/ui/radioButton/{index.ts → index.d.ts} +0 -0
  1322. /package/ui/selectBox/{index.ts → index.d.ts} +0 -0
  1323. /package/ui/switch/{index.ts → index.d.ts} +0 -0
  1324. /package/ui/tagBox/{index.ts → index.d.ts} +0 -0
  1325. /package/ui/text/{index.ts → index.d.ts} +0 -0
  1326. /package/ui/textArea/{index.ts → index.d.ts} +0 -0
  1327. /package/ui/tooltip/{index.ts → index.d.ts} +0 -0
  1328. /package/ui/translate-input/{index.ts → index.d.ts} +0 -0
  1329. /package/ui/tree/{index.ts → index.d.ts} +0 -0
  1330. /package/ui/treeSelect/{index.ts → index.d.ts} +0 -0
  1331. /package/ui/treeTable/{index.ts → index.d.ts} +0 -0
  1332. /package/ui/value/{index.ts → index.d.ts} +0 -0
  1333. /package/ui-business/detailed-overlay-panel/{index.ts → index.d.ts} +0 -0
  1334. /package/ui-business/multiple-ref-value/{index.ts → index.d.ts} +0 -0
  1335. /package/ui-business/notification-templates-dialog/{index.ts → index.d.ts} +0 -0
  1336. /package/ui-business/operation-types-dialog/{index.ts → index.d.ts} +0 -0
  1337. /package/ui-business/ref-value/{index.ts → index.d.ts} +0 -0
  1338. /package/ui-business/rolePicker/{index.ts → index.d.ts} +0 -0
  1339. /package/util/block/{index.ts → index.d.ts} +0 -0
  1340. /package/util/custom_pages/{index.ts → index.d.ts} +0 -0
  1341. /package/util/directives/{index.ts → index.d.ts} +0 -0
  1342. /package/util/lib/{index.ts → index.d.ts} +0 -0
  1343. /package/util/lib/src/validators/{index.ts → index.d.ts} +0 -0
  1344. /package/util/pipes/{index.ts → index.d.ts} +0 -0
  1345. /package/util/primitive-extensions/{index.ts → index.d.ts} +0 -0
  1346. /package/util/primitive-extensions/src/{boolean.extensions.ts → boolean.extensions.d.ts} +0 -0
  1347. /package/util/pub-sub/{index.ts → index.d.ts} +0 -0
  1348. /package/util/sync-active-tab-route/{index.ts → index.d.ts} +0 -0
  1349. /package/util/unwrap/{index.ts → index.d.ts} +0 -0
@@ -0,0 +1,3015 @@
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:visible;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;padding-left:24px}.static-sidebar .tree-node .toggle-btn{position:absolute;left:0;display:flex;align-items:center;justify-content:center;width:20px;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:visible;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;padding-left:24px}.static-sidebar .tree-node .toggle-btn{position:absolute;left:0;display:flex;align-items:center;justify-content:center;width:20px;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