@acorex/modules 21.0.0-next.31 → 21.0.0-next.34

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 (65) hide show
  1. package/fesm2022/{acorex-modules-ai-management-acorex-modules-ai-management-B6lnG21F.mjs → acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs} +10 -11
  2. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs.map +1 -0
  3. package/fesm2022/{acorex-modules-ai-management-agent.entity-C2APPc7g.mjs → acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs} +2 -2
  4. package/fesm2022/{acorex-modules-ai-management-agent.entity-C2APPc7g.mjs.map → acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs.map} +1 -1
  5. package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D_54-MqC.mjs → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D_54-MqC.mjs.map → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-pG9y9bqO.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs} +6 -4
  8. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs.map +1 -0
  9. package/fesm2022/{acorex-modules-ai-management-assist.entity-D7sIFWTx.mjs → acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-ai-management-assist.entity-D7sIFWTx.mjs.map → acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-ai-management-index-DoOTRMvM.mjs → acorex-modules-ai-management-index-KX3TVRXr.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-ai-management-index-DoOTRMvM.mjs.map → acorex-modules-ai-management-index-KX3TVRXr.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-ai-management-model.entity-xhfG1tFZ.mjs → acorex-modules-ai-management-model.entity-BeuDUahR.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-ai-management-model.entity-xhfG1tFZ.mjs.map → acorex-modules-ai-management-model.entity-BeuDUahR.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-Bot8Ctq1.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-Bot8Ctq1.mjs.map → acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs.map} +1 -1
  17. package/fesm2022/acorex-modules-ai-management.mjs +1 -1
  18. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs} +25 -25
  19. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BwwarDP0.mjs → acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs} +2 -2
  21. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BwwarDP0.mjs.map → acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQNn4Ryb.mjs → acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQNn4Ryb.mjs.map → acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-AptlLpWh.mjs → acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-AptlLpWh.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-assessment-management-index-BBzx9W5u.mjs → acorex-modules-assessment-management-index-B2SncZAW.mjs} +6 -6
  27. package/fesm2022/acorex-modules-assessment-management-index-B2SncZAW.mjs.map +1 -0
  28. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs → acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs} +2 -2
  29. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs.map → acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs.map} +1 -1
  30. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs → acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs} +2 -2
  31. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CcDAcPJJ.mjs → acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CcDAcPJJ.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-DC7xwETF.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-DC7xwETF.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DF7F-quh.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs} +2 -2
  39. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DF7F-quh.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-zybar1sK.mjs → acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs} +3 -3
  41. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-zybar1sK.mjs.map → acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-DqJ-_k-4.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-DqJ-_k-4.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-IHxXETJQ.mjs → acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs} +2 -2
  45. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-IHxXETJQ.mjs.map → acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs.map} +1 -1
  46. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  47. package/fesm2022/acorex-modules-dashboard-management.mjs +4366 -3497
  48. package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
  49. package/fesm2022/acorex-modules-data-management.mjs +3 -2
  50. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  51. package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs +784 -0
  52. package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs.map +1 -0
  53. package/fesm2022/acorex-modules-organization-management.mjs +3 -9
  54. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  55. package/fesm2022/acorex-modules-workflow-management.mjs +488 -105
  56. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  57. package/package.json +2 -2
  58. package/types/acorex-modules-dashboard-management.d.ts +397 -218
  59. package/types/acorex-modules-organization-management.d.ts +3 -12
  60. package/types/acorex-modules-workflow-management.d.ts +27 -0
  61. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-B6lnG21F.mjs.map +0 -1
  62. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-pG9y9bqO.mjs.map +0 -1
  63. package/fesm2022/acorex-modules-assessment-management-index-BBzx9W5u.mjs.map +0 -1
  64. package/fesm2022/acorex-modules-organization-management-org-chart.page-E0hy7dXg.mjs +0 -638
  65. package/fesm2022/acorex-modules-organization-management-org-chart.page-E0hy7dXg.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-dashboard-management.mjs","sources":["../../../../libs/modules/dashboard-management/src/lib/const.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/analog-clock/analog-clock.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/analog-clock/analog-clock-widget-view.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/analog-clock/analog-clock-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/bar-chart/bar-chart-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/bar-chart/bar-chart-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart.type.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/bar-chart/bar-chart-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/clock-calendar/clock-calendar-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/clock-calendar/clock-calendar-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/clock-calendar/clock-calendar.types.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/clock-calendar/clock-calendar-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/dashboard-shortcut/dashboard-shortcut-widget-view.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/dashboard-shortcut/dashboard-shortcut-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/donut-chart/donut-chart-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/donut-chart/donut-chart-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/donut-chart/donut-chart-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/gauge-chart/gauge-chart-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/gauge-chart/gauge-chart-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/gauge-chart/gauge-chart-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/line-chart/line-chart-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/line-chart/line-chart-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/line-chart/line-chart-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/sticky-note/sticky-note-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/sticky-note/sticky-note-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/sticky-note/sticky-note-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/weather-services/weather-api.abstract.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/weather-services/weather-api.mock.service.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/weather-services/weather-api.key.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/weather-services/weather-api.service.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/advanced-weather/advanced-weather.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/advanced-weather/advanced-weather.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/minimal-weather/minimal-weather.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/minimal-weather/minimal-weather.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/weather-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/weather-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/weather/weather-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/widget-definition.provider.ts","../../../../libs/modules/dashboard-management/src/lib/manifest.ts","../../../../libs/modules/dashboard-management/src/lib/permission.keys.ts","../../../../libs/modules/dashboard-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/dashboard-management/src/lib/menu.keys.ts","../../../../libs/modules/dashboard-management/src/lib/menu.provider.ts","../../../../libs/modules/dashboard-management/src/lib/entity.provider.ts","../../../../libs/modules/dashboard-management/src/lib/entities/dashboard/dashboard.entity.ts","../../../../libs/modules/dashboard-management/src/lib/entities/dashboard/dashboard.service.ts","../../../../libs/modules/dashboard-management/src/lib/entities/dashboard/dashboard.module.ts","../../../../libs/modules/dashboard-management/src/lib/entities/index.ts","../../../../libs/modules/dashboard-management/src/lib/dashboard-management.module.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/widget-wrapper/dashboard-widget-wrapper.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/widget-wrapper/dashboard-widget-wrapper.html","../../../../libs/modules/dashboard-management/src/lib/settings.keys.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-popups/configuration-popup.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-popups/dashboard-popup.service.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-home/home-dashboard.store.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-home/home-dashboard.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-home/home-dashboard.html","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-home/home-dashboard.type.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-popups/add-dashboard-popup.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/setrting.keys.ts","../../../../libs/modules/dashboard-management/src/acorex-modules-dashboard-management.ts"],"sourcesContent":["const config = {\n i18n: 'dashboard-management',\n};\nexport const RootConfig = {\n config,\n module: {\n module: 'DashboardManagement',\n name: 'DashboardManagement',\n title: `@${config.i18n}:module.title`,\n icon: 'fa-regular fa-tachometer-alt',\n },\n entities: {\n dashboard: {\n name: 'Dashboard',\n title: '@dashboard-management:dashboards.terms.dashboard',\n titlePlural: '@dashboard-management:dashboards.terms.dashboards',\n icon: 'fa-regular fa-tachometer-alt',\n },\n },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n OnDestroy,\n OnInit,\n signal,\n WritableSignal,\n} from '@angular/core';\n\ninterface AXMClockMark {\n transform?: string;\n top?: string;\n left?: string;\n value?: number;\n}\n\n@Component({\n selector: 'axm-analog-clock',\n standalone: true,\n imports: [],\n template: `\n <div class=\"axm-analog-clock-container\">\n <div class=\"axm-analog-clock-face\" [class]=\"classes()\">\n <div class=\"axm-analog-clock-marks-container\">\n @for (line of hourLines; track $index) {\n <div class=\"axm-analog-clock-hour-line\" [style.transform]=\"line.transform\">\n <div class=\"axm-analog-clock-hour-line-inner\"></div>\n </div>\n }\n @for (dot of dots; track $index) {\n <div class=\"axm-analog-clock-dot-line\" [style.transform]=\"dot.transform\">\n <div class=\"axm-analog-clock-dot-line-inner\"></div>\n </div>\n }\n </div>\n\n @if (showNumbers()) {\n <div class=\"axm-analog-clock-numbers-container\">\n @for (num of hourNumbers; track num.value) {\n <div class=\"axm-analog-clock-hour-number\" [style.top]=\"num.top\" [style.left]=\"num.left\">\n {{ num.value }}\n </div>\n }\n </div>\n }\n <div class=\"axm-analog-clock-hands\">\n <div class=\"axm-analog-clock-hand axm-analog-clock-hour-hand\" [style.transform]=\"hourHandTransform()\"></div>\n <div\n class=\"axm-analog-clock-hand axm-analog-clock-minute-hand\"\n [style.transform]=\"minuteHandTransform()\"\n ></div>\n <div\n class=\"axm-analog-clock-hand axm-analog-clock-second-hand\"\n [style.transform]=\"secondHandTransform()\"\n ></div>\n <div class=\"axm-analog-clock-center-point\"></div>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n @apply ax-grid ax-place-items-center ax-size-full;\n }\n\n .axm-analog-clock-container {\n @apply ax-relative ax-w-full ax-max-h-full;\n aspect-ratio: 1;\n container-type: inline-size;\n }\n\n .axm-analog-clock-face {\n @apply ax-w-full ax-h-full ax-relative ax-rounded-full;\n }\n\n .axm-analog-clock-marks-container,\n .axm-analog-clock-numbers-container {\n @apply ax-absolute ax-inset-0;\n }\n\n .axm-analog-clock-hands {\n @apply ax-absolute ax-inset-0;\n }\n\n .axm-analog-clock-hour-line,\n .axm-analog-clock-dot-line {\n @apply ax-absolute ax-bottom-1/2 ax-left-1/2 ax-h-1/2 ax-origin-bottom;\n }\n\n .axm-analog-clock-hour-line {\n @apply ax-w-[1.8cqw];\n }\n\n .axm-analog-clock-dot-line {\n @apply ax-w-[1.8cqw];\n }\n\n .axm-analog-clock-hour-line-inner {\n @apply ax-absolute ax-top-[6cqw] ax-left-1/2 -ax-translate-x-1/2 ax-w-full ax-h-[5.5cqw] ax-bg-on-darker;\n }\n\n .axm-analog-clock-dot-line-inner {\n @apply ax-absolute ax-top-[6cqw] ax-left-1/2 -ax-translate-x-1/2 ax-w-[1.2cqw] ax-h-[2cqw] ax-bg-on-dark ax-rounded-full;\n }\n\n .axm-analog-clock-hour-number {\n @apply ax-absolute -ax-translate-x-1/2 -ax-translate-y-1/2 ax-text-[10cqw] ax-font-medium ax-text-on-surface;\n }\n\n .axm-analog-clock-hand {\n @apply ax-absolute ax-bottom-1/2 ax-left-1/2 ax-origin-bottom ax-rounded-t-lg;\n }\n\n .axm-analog-clock-hand::after {\n content: '';\n @apply ax-absolute ax-left-0 ax-w-full;\n }\n\n .axm-analog-clock-hour-hand {\n @apply ax-z-[2] ax-w-[2.7cqw] ax-h-1/4 ax-bg-black;\n }\n\n .axm-analog-clock-hour-hand::after {\n @apply ax-h-[20%] -ax-bottom-[20%] ax-bg-black;\n }\n\n .axm-analog-clock-minute-hand {\n @apply ax-z-[3] ax-w-[2.1cqw] ax-h-[35%] ax-bg-gray-400;\n }\n\n .axm-analog-clock-minute-hand::after {\n @apply ax-h-[20%] -ax-bottom-[20%] ax-bg-gray-400;\n }\n\n .axm-analog-clock-second-hand {\n @apply ax-z-[4] ax-w-[1.5cqw] ax-h-[42%] ax-bg-red-500;\n }\n\n .axm-analog-clock-second-hand::after {\n @apply ax-h-[20%] -ax-bottom-[20%] ax-bg-red-500;\n }\n\n .axm-analog-clock-center-point {\n @apply ax-absolute ax-top-1/2 ax-left-1/2 -ax-translate-x-1/2 -ax-translate-y-1/2 ax-w-[9cqw] ax-h-[9cqw] ax-bg-white ax-border-[1.8cqw] ax-border-black ax-rounded-full ax-z-[5];\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMAnalogClockComponent implements OnInit, OnDestroy {\n timezone = input<string>();\n classes = input<string>();\n showNumbers = input<boolean>(true);\n\n private readonly currentTime: WritableSignal<Date> = signal(new Date());\n private readonly timeParts = signal({ hours: 0, minutes: 0, seconds: 0 });\n\n constructor() {\n effect(() => {\n const now = this.currentTime();\n const tz = this.timezone();\n let hours, minutes, seconds;\n\n if (tz) {\n try {\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZone: tz,\n hour12: false,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n });\n const parts = formatter.formatToParts(now);\n hours = parseInt(parts.find((p) => p.type === 'hour')?.value ?? '0', 10);\n minutes = parseInt(parts.find((p) => p.type === 'minute')?.value ?? '0', 10);\n seconds = parseInt(parts.find((p) => p.type === 'second')?.value ?? '0', 10);\n } catch (e) {\n console.error(`Invalid timezone provided: \"${tz}\". Falling back to local time.`);\n hours = now.getHours();\n minutes = now.getMinutes();\n seconds = now.getSeconds();\n }\n } else {\n hours = now.getHours();\n minutes = now.getMinutes();\n seconds = now.getSeconds();\n }\n this.timeParts.set({ hours, minutes, seconds });\n });\n }\n\n readonly hourHandTransform = computed(() => {\n const { hours, minutes } = this.timeParts();\n const hoursAngle = (hours % 12) * 30 + minutes * 0.5;\n return `translateX(-50%) rotate(${hoursAngle}deg)`;\n });\n\n readonly minuteHandTransform = computed(() => {\n const { minutes, seconds } = this.timeParts();\n const minutesAngle = minutes * 6 + seconds * 0.1;\n return `translateX(-50%) rotate(${minutesAngle}deg)`;\n });\n\n readonly secondHandTransform = computed(() => {\n const { seconds } = this.timeParts();\n const secondsAngle = seconds * 6;\n return `translateX(-50%) rotate(${secondsAngle}deg)`;\n });\n\n hourLines: AXMClockMark[] = [];\n hourNumbers: AXMClockMark[] = [];\n dots: AXMClockMark[] = [];\n\n private timerId?: number;\n\n ngOnInit(): void {\n this.createClockMarks();\n this.timerId = window.setInterval(() => {\n this.currentTime.set(new Date());\n }, 1000);\n }\n\n ngOnDestroy(): void {\n if (this.timerId) {\n clearInterval(this.timerId);\n }\n }\n\n private createClockMarks(): void {\n const majorHours = [12, 3, 6, 9];\n\n // Hour Lines\n this.hourLines = [];\n for (let i = 1; i <= 12; i++) {\n this.hourLines.push({\n transform: `translateX(-50%) rotate(${i * 30}deg)`,\n });\n }\n\n // Hour Numbers\n this.hourNumbers = [];\n for (const hour of majorHours) {\n const angleRad = (hour * 30 - 90) * (Math.PI / 180);\n this.hourNumbers.push({\n value: hour,\n top: `calc(50% + ${30 * Math.sin(angleRad)}%)`,\n left: `calc(50% + ${30 * Math.cos(angleRad)}%)`,\n });\n }\n\n // Dots\n this.dots = [];\n for (let i = 1; i <= 60; i++) {\n if (i % 5 !== 0) {\n this.dots.push({\n transform: `translateX(-50%) rotate(${i * 6}deg)`,\n });\n }\n }\n }\n}\n","import { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXMLocaleManagementService } from '@acorex/modules/locale-management';\nimport { AXPTimeZone } from '@acorex/platform/common';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n OnDestroy,\n signal,\n} from '@angular/core';\nimport { AXMAnalogClockComponent } from './analog-clock.component';\n\n@Component({\n template: `\n <div class=\"ax-p-2 ax-h-full ax-overflow-hidden\" [class.ax-bg-light]=\"others().length > 0\">\n <!-- Main Clock Section -->\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-around ax-gap-2 ax-flex-1 ax-h-full\">\n <div\n class=\"ax-flex ax-items-center ax-justify-around ax-gap-2 ax-w-full ax-grow\"\n [class.ax-flex-row]=\"isHorizontal()\"\n [class.ax-rounded-full]=\"isHorizontal() && others().length > 0\"\n [class.ax-flex-col]=\"!isHorizontal()\"\n [class.ax-rounded-xl]=\"!isHorizontal() && others().length > 0\"\n [class.ax-border]=\"others().length > 0\"\n [class.ax-border-gray-100]=\"others().length > 0\"\n [class.ax-shadow-lg]=\"others().length > 0\"\n [class.ax-bg-lighter]=\"others().length > 0\"\n [class.ax-p-2]=\"others().length > 0\"\n >\n <div\n class=\"ax-aspect-square ax-flex ax-items-center ax-justify-center ax-min-w-[100px] ax-min-h-[100px]\"\n [style.height]=\"isHorizontal() ? '65%' : 'auto'\"\n [style.width]=\"isHorizontal() ? 'auto' : '65%'\"\n >\n <axm-analog-clock\n [timezone]=\"timezone()?.iana\"\n [classes]=\"others().length > 0 ? 'ax-bg-lightest' : undefined\"\n ></axm-analog-clock>\n </div>\n @if (timezone()?.abbr) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-text-center ax-min-w-[50px] ax-gap-2\">\n @if (timezone()?.code) {\n <span\n class=\"ax-font-medium ax-opacity-75 ax-uppercase ax-block ax-2line\"\n [style.fontSize.px]=\"codeFontSize()\"\n >{{ timezone()?.code }}</span\n >\n }\n <span class=\"ax-font-bold ax-mt-0\" [style.fontSize.px]=\"abbrFontSize()\">{{ timezone()?.abbr }}</span>\n </div>\n }\n </div>\n\n <!-- Additional Clocks Section -->\n @if (others().length > 0) {\n <div class=\"ax-w-full ax-max-w-4xl ax-mx-auto\">\n <div\n class=\"ax-flex ax-justify-around ax-items-center\"\n [class.ax-flex-wrap]=\"hasEnoughSpaceForHorizontal()\"\n [class.ax-gap-3]=\"true\"\n [class.ax-overflow-auto]=\"true\"\n >\n @for (clock of others(); track clock.code) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-2 ax-flex-wrap ax-gap-2\">\n <div\n [axTooltip]=\"clock.code\"\n [axTooltipPlacement]=\"'top'\"\n class=\"ax-aspect-square ax-flex ax-items-center ax-justify-center ax-rounded-lg ax-size-16\"\n >\n <axm-analog-clock\n [timezone]=\"clock.iana\"\n [showNumbers]=\"false\"\n [classes]=\"'ax-bg-lightest'\"\n ></axm-analog-clock>\n </div>\n @if (clock.abbr) {\n <div\n [class.ax-text-center]=\"hasEnoughSpaceForHorizontal()\"\n [class.ax-pt-1]=\"hasEnoughSpaceForHorizontal()\"\n [class.ax-pl-1]=\"!hasEnoughSpaceForHorizontal()\"\n >\n <span class=\"ax-text-xs ax-font-medium ax-truncate ax-block\">{{ clock.abbr }}</span>\n @if (clock.code) {\n <span class=\"ax-text-xs ax-font-light ax-opacity-75 ax-truncate ax-block\">{{\n clock.code\n }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styles: `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n /* Ensure text doesn't overflow on very small screens */\n .ax-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n /* Two-line clamp utility for wrapping long timezone codes */\n .ax-2line {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: normal;\n line-height: 1.1;\n max-height: calc(1.1em * 2);\n }\n\n /* Ensure text doesn't overflow on very small screens */\n .ax-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMAnalogClockComponent, AXTooltipModule],\n})\nexport class AXMClockWidgetViewComponent extends AXPLayoutBaseWidgetComponent implements AfterViewInit, OnDestroy {\n private readonly regionalService = inject(AXMLocaleManagementService);\n private readonly elementRef = inject(ElementRef);\n private userTimezone = signal<AXPTimeZone | null>(null);\n private containerWidth = signal<number>(0);\n private containerHeight = signal<number>(0);\n private resizeObserver: ResizeObserver | null = null;\n\n constructor() {\n super();\n this.loadUserTimezone();\n }\n\n ngAfterViewInit(): void {\n this.setupResizeObserver();\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n private setupResizeObserver(): void {\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.target === this.elementRef.nativeElement) {\n const { width, height } = entry.contentRect;\n this.containerWidth.set(width);\n this.containerHeight.set(height);\n }\n }\n });\n this.resizeObserver.observe(this.elementRef.nativeElement);\n }\n }\n\n private async loadUserTimezone(): Promise<void> {\n try {\n const timezoneCode = await this.regionalService.getBrowserTimeZoneCode();\n const timezones = await this.regionalService.getTimeZones();\n const timezone = timezones.find((tz) => tz.code === timezoneCode);\n if (timezone) {\n this.userTimezone.set(timezone);\n }\n } catch (error) {\n console.error('Failed to load user timezone', error);\n }\n }\n\n timezone = computed(() => {\n const configuredTimezone = this.options()?.['timezone'] as AXPTimeZone | undefined;\n return configuredTimezone || this.userTimezone();\n });\n\n others = computed(() => (this.options()?.['others'] ?? []) as AXPTimeZone[]);\n\n isHorizontal = computed(() => {\n const width = this.containerWidth();\n const height = this.containerHeight();\n // If width is greater than height or they are equal, use horizontal layout\n return width >= height - (this.others().length > 0 ? 75 : 0);\n });\n\n hasEnoughSpaceForHorizontal = computed(() => {\n const width = this.containerWidth();\n const clockCount = this.others().length;\n\n // Estimate minimum width needed for horizontal layout\n // Each clock needs about 100px (60px clock + padding + text)\n const minWidthNeeded = clockCount * 100;\n\n return width >= minWidthNeeded && clockCount <= 4;\n });\n\n // Dynamically compute font sizes for timezone code and abbreviation\n codeFontSize = computed(() => {\n const width = this.containerWidth();\n const codeLength = this.timezone()?.code?.length ?? 0;\n\n // Base scales with container width (100px -> ~10px, 400px -> ~22px)\n const base = (width / 400) * 14 + 8;\n\n // Penalize long codes more aggressively to allow two-line fit\n const penalty = codeLength > 14 ? (codeLength - 14) * 0.8 : 0;\n const size = Math.max(9, Math.min(22, base - penalty));\n return Math.round(size);\n });\n\n abbrFontSize = computed(() => {\n const width = this.containerWidth();\n const abbrLength = this.timezone()?.abbr?.length ?? 0;\n\n // Base scales with container width (100px -> ~16px, 400px -> ~30px)\n const base = (width / 400) * 18 + 12;\n\n // Penalize unusually long abbreviations\n const penalty = abbrLength > 4 ? (abbrLength - 4) * 1 : 0;\n const size = Math.max(14, Math.min(28, base - penalty));\n return Math.round(size);\n });\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PROPERTY_GROUP } from '@acorex/platform/layout/widgets';\n\nexport const AXPAnalogClockWidget: AXPWidgetConfig = {\n name: 'analog-clock',\n title: 'Analog Clock',\n description: '',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n icon: 'fa-light fa-clock',\n properties: [\n {\n name: 'timezone',\n title: '@dashboard:widgets.analog-clock.timezone',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'timezone',\n path: 'options.timezone',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: 'timezones',\n textField: 'title',\n valueField: 'code',\n },\n },\n },\n visible: true,\n order: 1,\n },\n {\n name: 'others',\n title: '@dashboard:widgets.analog-clock.other-timezones',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'others',\n path: 'options.others',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n dataSource: 'timezones',\n textField: 'title',\n valueField: 'code',\n },\n },\n },\n visible: true,\n order: 2,\n },\n ],\n components: {\n view: {\n component: () => import('./analog-clock-widget-view.component').then((c) => c.AXMClockWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n maxWidth: 3,\n maxHeight: 7,\n },\n md: {\n width: 3,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n maxWidth: 3,\n maxHeight: 7,\n },\n sm: {\n height: 3,\n minHeight: 2,\n maxHeight: 7,\n },\n },\n },\n};\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n analogClock: 'analog-clock';\n }\n}\n","import { AXBarChartComponent, AXBarChartData, AXBarChartOption } from '@acorex/charts/bar-chart';\nimport { AXPDataSourceDefinitionProviderService } from '@acorex/platform/core';\nimport { AXPBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, Signal } from '@angular/core';\n\n/**\n * Bar Chart Widget Component\n * Renders data as vertical bars with interactive hover effects and animations\n */\n@Component({\n templateUrl: './bar-chart-widget.component.html',\n styleUrls: ['./bar-chart-widget.component.scss'],\n imports: [AXBarChartComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPBarChartWidgetViewComponent extends AXPBaseWidgetComponent {\n protected data = signal<AXBarChartData[]>([]);\n\n private dataService = inject(AXPDataSourceDefinitionProviderService);\n\n barChartOptions: Signal<AXBarChartOption & { title: string }> = computed(\n () => this.options() as AXBarChartOption & { title: string },\n );\n\n dataSource = computed(() => this.options()['dataSource'] as string | AXBarChartData[]);\n\n eff = effect(async () => {\n const ds = this.dataSource();\n if (typeof ds === 'string') {\n const result = await this.dataService.get(ds);\n if (result) {\n const source = await (result.source() as any).config.load();\n this.data.set(source.items);\n }\n } else {\n this.data.set(ds as AXBarChartData[]);\n }\n });\n\n constructor() {\n super();\n this.setOptions({\n ...this.options(),\n showXAxis: true,\n showYAxis: true,\n barWidth: 80,\n cornerRadius: 4,\n showGrid: true,\n showDataLabels: false,\n showTooltip: true,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n });\n }\n\n handleBarClick(event: any) {\n //console.log(event);\n }\n}\n","<ax-bar-chart [data]=\"data()\" [options]=\"barChartOptions()\" (barClick)=\"handleBarClick($event)\"></ax-bar-chart>\n","import { AXPWidgetCategory } from '@acorex/platform/layout/widget-core';\n\nexport const AXP_WIDGETS_CHART_CATEGORY: AXPWidgetCategory = {\n name: 'chart',\n order: 6,\n title: 'Charts',\n};\n\nexport const AXP_WIDGETS_UTILITY_CATEGORY: AXPWidgetCategory = {\n name: 'utility',\n order: 7,\n title: 'Utilities',\n};\n\n\n","import {\n AXPWidgetConfig,\n AXPWidgetGroupEnum,\n AXPWidgetsCatalog,\n cloneProperty,\n} from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n AXP_NAME_PROPERTY,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../chart.type';\n\nexport const AXPBarChartWidget: AXPWidgetConfig = {\n name: 'bar-chart',\n title: 'Bar Chart Widget',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-bar',\n properties: [\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.bar-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== X Axis Settings ======\n {\n name: 'xAxisLabel',\n title: '@dashboard:widgets.bar-chart.x-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'xAxisLabel',\n path: 'options.xAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n // ====== Y Axis Settings ======\n {\n name: 'yAxisLabel',\n title: '@dashboard:widgets.bar-chart.y-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'yAxisLabel',\n path: 'options.yAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Layout & Dimensions ======\n {\n name: 'width',\n title: '@dashboard:widgets.bar-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: null,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.bar-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n // ====== X Axis Settings ======\n {\n name: 'showXAxis',\n title: '@dashboard:widgets.bar-chart.show-x-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showXAxis',\n path: 'options.showXAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Y Axis Settings ======\n {\n name: 'showYAxis',\n title: '@dashboard:widgets.bar-chart.show-y-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showYAxis',\n path: 'options.showYAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Bar Appearance ======\n {\n name: 'barWidth',\n title: '@dashboard:widgets.bar-chart.bar-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 80,\n dataType: 'number',\n interface: {\n name: 'barWidth',\n path: 'options.barWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-100',\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n {\n name: 'cornerRadius',\n title: '@dashboard:widgets.bar-chart.corner-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'cornerRadius',\n path: 'options.cornerRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-20',\n minValue: 0,\n maxValue: 20,\n },\n },\n },\n visible: true,\n },\n // ====== Grid Settings ======\n {\n name: 'showGrid',\n title: '@dashboard:widgets.bar-chart.show-grid',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showGrid',\n path: 'options.showGrid',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showDataLabels',\n title: '@dashboard:widgets.bar-chart.show-data-labels',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDataLabels',\n path: 'options.showDataLabels',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Tooltip Settings ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.bar-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.bar-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.bar-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./bar-chart-widget.component').then((c) => c.AXPBarChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 5,\n height: 6,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 6,\n maxHeight: 7,\n },\n md: {\n width: 5,\n height: 6,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 6,\n maxHeight: 7,\n },\n sm: {\n height: 6,\n minHeight: 2,\n maxHeight: 7,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n barChart: 'bar-chart';\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTagModule } from '@acorex/components/tag';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n Signal,\n computed,\n inject,\n} from '@angular/core';\nimport { Subscription, interval } from 'rxjs';\nimport { AXPHourNumber } from './clock-calendar.types';\n\n@Component({\n templateUrl: './clock-calendar-widget.component.html',\n styleUrls: ['./clock-calendar-widget.component.scss'],\n standalone: true,\n imports: [CommonModule, AXDateTimeModule, AXFormatModule, AXTagModule, AXDecoratorModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPClockCalendarWidgetViewComponent extends AXPValueWidgetComponent implements OnInit, OnDestroy {\n // Dependencies\n private readonly cdr = inject(ChangeDetectorRef);\n\n // Time state\n protected currentTime = new Date();\n protected currentDate = new Date();\n private clockSubscription: Subscription | null = null;\n\n // Static clock elements\n protected readonly clockHours = Array.from({ length: 12 }, (_, i) => i + 1);\n protected readonly clockHourNumbers: AXPHourNumber[] = Array.from({ length: 12 }, (_, i) => ({\n number: i === 0 ? 12 : i,\n angle: i * 30,\n }));\n\n // Clock hands rotation angles\n protected hourRotation = 0;\n protected minuteRotation = 0;\n protected secondRotation = 0;\n\n // Options with computed properties and defaults\n protected readonly displayLayout: Signal<string> = computed(() => this.options()?.['displayLayout']?.id ?? 'both');\n\n protected readonly showDigitalClock: Signal<boolean> = computed(() => {\n const layout = this.displayLayout();\n return layout === 'both' || layout === 'digital';\n });\n\n protected readonly showAnalogClock: Signal<boolean> = computed(() => {\n const layout = this.displayLayout();\n return layout === 'both' || layout === 'analog';\n });\n\n protected readonly showDate: Signal<boolean> = computed(() => this.options()?.['showDate'] !== false);\n\n protected readonly showDayOfWeek: Signal<boolean> = computed(() => this.options()?.['showDayOfWeek'] !== false);\n\n protected readonly use24Hour: Signal<boolean> = computed(() => this.options()?.['use24Hour'] === true);\n\n protected readonly showSeconds: Signal<boolean> = computed(() => this.options()?.['showSeconds'] !== false);\n\n protected readonly dateFormat: Signal<string> = computed(() => this.options()?.['dateFormat']?.id ?? 'DD MMM YYYY');\n\n protected readonly timezone: Signal<string> = computed(() => this.options()?.['timezone']?.id ?? 'local');\n\n // protected readonly showTimezoneIndicator: Signal<boolean> = computed(() => this.timezone() !== 'local');\n\n protected readonly displayTimezone: Signal<string> = computed(() => {\n const tz = this.timezone();\n if (tz === 'local') return '';\n\n if (tz.startsWith('UTC')) {\n const [match, sign, hours, minutes] = tz.match(/UTC([+-])(\\d+):?(\\d+)?/) ?? [];\n if (match) {\n if (!minutes || minutes === '00') {\n return `UTC${sign}${parseInt(hours)}`;\n }\n return `UTC${sign}${parseInt(hours)}:${minutes}`;\n }\n }\n return tz;\n });\n\n protected readonly timeFormat: Signal<string> = computed(() =>\n this.showSeconds() ? (this.use24Hour() ? 'HH:mm:ss' : 'hh:mm:ss a') : this.use24Hour() ? 'HH:mm' : 'hh:mm a',\n );\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.startClockTimer();\n this.updateTime();\n }\n\n ngOnDestroy(): void {\n this.stopClockTimer();\n }\n\n private startClockTimer(): void {\n this.stopClockTimer();\n this.clockSubscription = interval(1000).subscribe(() => this.updateTime());\n }\n\n private stopClockTimer(): void {\n this.clockSubscription?.unsubscribe();\n this.clockSubscription = null;\n }\n\n private updateTime(): void {\n const now = this.getAdjustedTime();\n this.currentTime = now;\n this.currentDate = now;\n\n this.updateClockHandsRotation(now);\n this.cdr.markForCheck();\n }\n\n private getAdjustedTime(): Date {\n const now = new Date();\n const tz = this.timezone();\n\n if (tz === 'local' || !tz.startsWith('UTC')) {\n return now;\n }\n\n const [match, sign, hours, minutes] = tz.match(/UTC([+-])(\\d+):?(\\d+)?/) ?? [];\n if (!match) {\n return now;\n }\n\n const offsetHours = parseInt(hours) * (sign === '+' ? 1 : -1);\n const offsetMinutes = minutes ? parseInt(minutes) * (sign === '+' ? 1 : -1) : 0;\n\n const utcTime = now.getTime() + now.getTimezoneOffset() * 60000;\n return new Date(utcTime + (offsetHours * 3600000 + offsetMinutes * 60000));\n }\n\n private updateClockHandsRotation(now: Date): void {\n const hours = now.getHours() % 12;\n const minutes = now.getMinutes();\n const seconds = now.getSeconds();\n\n // For analog clocks:\n // - 12 o'clock is 0°\n // - 3 o'clock is 90°\n // - 6 o'clock is 180°\n // - 9 o'clock is 270°\n\n // Hour hand: 30° per hour (360°/12) plus gradual movement from minutes\n this.hourRotation = hours * 30 + minutes / 2 + 180;\n\n // Minute hand: 6° per minute (360°/60)\n this.minuteRotation = minutes * 6 + 180;\n\n // Second hand: 6° per second (360°/60)\n this.secondRotation = seconds * 6 + 180;\n }\n\n protected initializeWidget(): void {\n this.updateTime();\n }\n\n protected updateWidget(): void {\n this.stopClockTimer();\n this.startClockTimer();\n this.updateTime();\n }\n\n protected destroyWidget(): void {\n this.stopClockTimer();\n }\n\n protected getDayOfWeek(): string {\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n return days[this.currentDate.getDay()];\n }\n}\n","<div class=\"axp-clock-calendar-container\">\n <!-- Timezone indicator (only shown when not local) -->\n <!-- @if (showTimezoneIndicator()) {\n <div class=\"axp-clock-calendar-timezone-badge\"><i class=\"fa-solid fa-globe\"></i> {{ displayTimezone() }}</div>\n } -->\n\n <!-- Day of week display -->\n @if (showDayOfWeek()) {\n <div class=\"axp-clock-calendar-day-label\">{{ getDayOfWeek() }}</div>\n }\n\n <div class=\"axp-clock-calendar-content\">\n <!-- Digital Clock Display -->\n @if (showDigitalClock()) {\n <div class=\"axp-clock-calendar-digital-clock\">\n {{ currentTime | format: 'datetime' : timeFormat() | async }}\n </div>\n }\n\n <!-- Analog Clock Display -->\n @if (showAnalogClock()) {\n <div class=\"axp-clock-calendar-analog-clock\">\n <!-- Hour markers -->\n @for (hour of clockHours; track hour) {\n <div\n class=\"axp-clock-calendar-hour-marker\"\n [style.transform]=\"'rotate(' + hour * 30 + 'deg) translateY(-80px)'\"\n ></div>\n }\n\n <!-- Clock Numbers -->\n <div class=\"axp-clock-calendar-numbers-container\">\n @for (hour of clockHourNumbers; track hour) {\n <div\n class=\"axp-clock-calendar-hour-number\"\n [style.transform]=\"'rotate(' + hour.angle + 'deg) translateY(-82px)'\"\n >\n <span [style.transform]=\"'rotate(' + -hour.angle + 'deg)'\">{{ hour.number }}</span>\n </div>\n }\n </div>\n\n <!-- Clock Hands -->\n <div class=\"axp-clock-calendar-hands-container\">\n <div class=\"axp-clock-calendar-hour-hand\" [style.transform]=\"'rotate(' + hourRotation + 'deg)'\"></div>\n <div class=\"axp-clock-calendar-minute-hand\" [style.transform]=\"'rotate(' + minuteRotation + 'deg)'\"></div>\n @if (showSeconds()) {\n <div class=\"axp-clock-calendar-second-hand\" [style.transform]=\"'rotate(' + secondRotation + 'deg)'\"></div>\n }\n <div class=\"axp-clock-calendar-center-dot\"></div>\n </div>\n </div>\n }\n\n <!-- Date Display -->\n @if (showDate()) {\n <div class=\"axp-clock-calendar-date-display\">\n <i class=\"fa-regular fa-calendar\"></i>\n {{ currentDate | format: 'datetime' : dateFormat() | async }}\n </div>\n }\n </div>\n</div>\n","/**\n * ACoreX Clock Calendar Widget Types\n * Contains all types and interfaces for the Clock Calendar widget\n */\n\n/**\n * Clock layout display options\n */\nexport type AXPClockLayout = 'both' | 'digital' | 'analog';\n\n/**\n * Clock timezone options\n */\nexport interface AXPTimezoneOption {\n id: string;\n title: string;\n}\n\n/**\n * Date format options\n */\nexport interface AXPDateFormatOption {\n id: string;\n title: string;\n}\n\n/**\n * Hour number definition for the analog clock\n */\nexport interface AXPHourNumber {\n number: number;\n angle: number;\n}\n\n/**\n * Widget options for configuring the clock-calendar\n */\nexport interface AXPClockCalendarOptions {\n // Display options\n displayLayout?: AXPClockLayout;\n showDate?: boolean;\n showDayOfWeek?: boolean;\n\n // Clock settings\n use24Hour?: boolean;\n showSeconds?: boolean;\n showHourMarkers?: boolean;\n\n // Date format\n dateFormat?: string;\n\n // Timezone\n timezone?: string;\n}\n\n/**\n * Common timezone options for the widget configuration\n */\nexport const AXP_TIMEZONE_OPTIONS: AXPTimezoneOption[] = [\n { id: 'local', title: 'Local Time' },\n { id: 'UTC+0', title: 'UTC (GMT)' },\n { id: 'UTC+1', title: 'Central European Time (UTC+1)' },\n { id: 'UTC+2', title: 'Eastern European Time (UTC+2)' },\n { id: 'UTC+3', title: 'Moscow Time (UTC+3)' },\n { id: 'UTC+4', title: 'Gulf Time (UTC+4)' },\n { id: 'UTC+5:30', title: 'Indian Time (UTC+5:30)' },\n { id: 'UTC+8', title: 'China Time (UTC+8)' },\n { id: 'UTC+9', title: 'Japan Time (UTC+9)' },\n { id: 'UTC+10', title: 'Australian Eastern Time (UTC+10)' },\n { id: 'UTC-5', title: 'Eastern Time (UTC-5)' },\n { id: 'UTC-6', title: 'Central Time (UTC-6)' },\n { id: 'UTC-7', title: 'Mountain Time (UTC-7)' },\n { id: 'UTC-8', title: 'Pacific Time (UTC-8)' },\n];\n\n/**\n * Common date format options for the widget configuration\n */\nexport const AXP_DATE_FORMAT_OPTIONS: AXPDateFormatOption[] = [\n { id: 'DD MMM YYYY', title: '31 Dec 2023' },\n { id: 'MMM DD, YYYY', title: 'Dec 31, 2023' },\n { id: 'DD/MM/YYYY', title: '31/12/2023' },\n { id: 'MM/DD/YYYY', title: '12/31/2023' },\n];\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { AXP_APPEARANCE_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../chart.type';\nimport { AXP_DATE_FORMAT_OPTIONS, AXP_TIMEZONE_OPTIONS } from './clock-calendar.types';\n\nexport const AXPClockCalendarWidget: AXPWidgetConfig = {\n name: 'clock-calendar',\n title: 'Clock & Calendar',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-clock',\n properties: [\n // ====== Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.clock-calendar.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== Display Settings ======\n {\n name: 'displayLayout',\n title: '@dashboard:widgets.clock-calendar.display-layout',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n defaultValue: 'both',\n interface: {\n name: 'displayLayout',\n path: 'options.displayLayout',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { id: 'both', title: 'Digital & Analog' },\n { id: 'digital', title: 'Digital Only' },\n { id: 'analog', title: 'Analog Only' },\n ],\n },\n },\n },\n visible: true,\n },\n {\n name: 'showDate',\n title: '@dashboard:widgets.clock-calendar.show-date',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDate',\n path: 'options.showDate',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showDayOfWeek',\n title: '@dashboard:widgets.clock-calendar.show-day-of-week',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDayOfWeek',\n path: 'options.showDayOfWeek',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n // ====== Time Format Settings ======\n {\n name: 'use24Hour',\n title: '@dashboard:widgets.clock-calendar.use-24-hour',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: false,\n dataType: 'boolean',\n interface: {\n name: 'use24Hour',\n path: 'options.use24Hour',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showSeconds',\n title: '@dashboard:widgets.clock-calendar.show-seconds',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showSeconds',\n path: 'options.showSeconds',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // {\n // name: 'showHourMarkers',\n // title: 'Show Hour Markers',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showHourMarkers',\n // path: 'options.showHourMarkers',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n {\n name: 'dateFormat',\n title: '@dashboard:widgets.clock-calendar.date-format',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: 'DD MMM YYYY',\n dataType: 'string',\n interface: {\n name: 'dateFormat',\n path: 'options.dateFormat',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: AXP_DATE_FORMAT_OPTIONS,\n },\n },\n },\n visible: true,\n },\n {\n name: 'timezone',\n title: '@dashboard:widgets.clock-calendar.timezone',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: 'local',\n dataType: 'string',\n interface: {\n name: 'timezone',\n path: 'options.timezone',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: AXP_TIMEZONE_OPTIONS,\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./clock-calendar-widget.component').then((m) => m.AXPClockCalendarWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 2,\n height: 5,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 3,\n maxHeight: 6,\n },\n md: {\n width: 2,\n height: 5,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 3,\n maxHeight: 6,\n },\n sm: {\n height: 5,\n minHeight: 2,\n maxHeight: 6,\n },\n },\n },\n};\n\n// Add to the AXPWidgetTypesMap\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n clockCalendar: 'clock-calendar';\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXP_GLOBAL_SEARCH_CONFIG_TOKEN } from '@acorex/modules/common';\nimport { AXPSearchDisplayResult } from '@acorex/platform/common';\nimport { AXPDataGenerator, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, inject } from '@angular/core';\n\nexport interface AXPShortcutItem {\n name: string;\n title: string;\n description?: string;\n icon: string;\n command: AXPExecuteCommand;\n}\n\n@Component({\n template: `\n @if (item()) {\n <div\n class=\"ax-group ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-3 ax-w-full ax-h-full ax-relative ax-overflow-hidden \"\n (click)=\"executeCommand()\"\n >\n <div class=\"ax-absolute ax-inset-0 ax-bg-black/0 hover:ax-bg-black/10 ax-transition-opacity\"></div>\n <i [class]=\"item().icon + ' ax-text-3xl'\"></i>\n <span class=\"ax-text-xl ax-font-semibold\">{{ item().title | translate | async }}</span>\n @if (item().description) {\n <span class=\"ax-text-sm ax-opacity-90 ax-text-center ax-px-2\">{{\n item().description! | translate | async\n }}</span>\n }\n </div>\n } @else {\n <div\n (click)=\"setCommand()\"\n class=\"ax-group ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-3 ax-w-full ax-h-full ax-relative ax-overflow-hidden\"\n >\n <div class=\"ax-absolute ax-inset-0 ax-bg-black/0 hover:ax-bg-black/5 ax-transition-opacity\"></div>\n <i class=\"fa-light fa-plus ax-text-3xl\"></i>\n <span class=\"ax-text-xl ax-font-semibold\">{{\n '@dashboard:widgets.dashboard-shortcut.add-shortcut' | translate | async\n }}</span>\n </div>\n }\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n})\nexport class AXPDashboardShortcutWidgetViewComponent extends AXPLayoutBaseWidgetComponent {\n private popupService = inject(AXPopupService);\n private workflow = inject(AXPWorkflowService);\n private searchConfig = inject(AXP_GLOBAL_SEARCH_CONFIG_TOKEN);\n\n protected item = computed<AXPShortcutItem>(() => this.options()['item'] as AXPShortcutItem);\n protected color = computed<string>(() => this.options()['color'] as string);\n\n override ngOnInit(): void {\n super.ngOnInit();\n if (!this.color()) {\n this.setOptions({\n color: AXPDataGenerator.color(),\n });\n }\n }\n\n protected async executeCommand() {\n if (this.item()?.command) {\n await this.workflow.execute(this.item().command.name, this.item().command.options);\n }\n }\n\n protected async setCommand() {\n const component = await this.searchConfig.window();\n const popup = await this.popupService.open(component, {\n title: 'Choose command...',\n size: 'fit',\n closeOnBackdropClick: true,\n header: false,\n });\n if (popup.data) {\n const result = popup.data as AXPSearchDisplayResult;\n if (result && result.command) {\n this.setOptions({\n item: {\n name: result.name,\n title: result.title,\n description: result.description,\n icon: result.icon,\n command: result.command,\n } as AXPShortcutItem,\n });\n }\n }\n }\n\n @HostBinding('style')\n private get __style() {\n const cls: any = {};\n cls[`background-color`] = this.color();\n return cls;\n }\n\n @HostBinding('class')\n private get __class() {\n const cls: any = {};\n cls[`ax-flex`] = true;\n cls[`ax-flex-col`] = true;\n cls[`ax-items-center`] = true;\n cls[`ax-justify-center`] = true;\n cls[`ax-w-full`] = true;\n cls[`ax-h-full`] = true;\n cls[`ax-text-center`] = true;\n cls[`ax-overflow-hidden`] = true;\n cls[`ax-cursor-pointer`] = true;\n cls[`ax-text-white`] = true;\n return cls;\n }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AXP_COLOR_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../chart.type';\n\nexport const AXPDashboardShortcutWidget: AXPWidgetConfig = {\n name: 'dashboard-shortcut',\n title: 'Shortcut',\n description: 'Quick access to your key features.',\n type: 'view',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n icon: 'fa-light fa-link',\n properties: [\n {\n ...AXP_COLOR_PROPERTY,\n title: '@dashboard:widgets.dashboard-shortcut.color',\n },\n ],\n meta: {\n dimensions: {\n lg: {\n width: 2,\n height: 2,\n minWidth: 1,\n minHeight: 1,\n maxWidth: 3,\n maxHeight: 2,\n },\n md: {\n width: 2,\n height: 2,\n minWidth: 1,\n minHeight: 1,\n maxWidth: 3,\n maxHeight: 2,\n },\n sm: {\n height: 2,\n minHeight: 1,\n maxHeight: 2,\n },\n },\n },\n components: {\n view: {\n component: () =>\n import('./dashboard-shortcut-widget-view.component').then((c) => c.AXPDashboardShortcutWidgetViewComponent),\n },\n },\n};\n","import { AXDonutChartComponent, AXDonutChartData, AXDonutChartOption } from '@acorex/charts/donut-chart';\nimport { AXPDataSourceDefinitionProviderService } from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, Signal } from '@angular/core';\n\n/**\n * Donut Chart Widget Component\n * Displays data in a circular donut chart with interactive segments\n */\n@Component({\n templateUrl: './donut-chart-widget.component.html',\n styleUrls: ['./donut-chart-widget.component.scss'],\n imports: [AXDonutChartComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPDonutChartWidgetViewComponent extends AXPValueWidgetComponent {\n protected data = signal<AXDonutChartData[]>([]);\n private dataService = inject(AXPDataSourceDefinitionProviderService);\n\n donutChartOptions: Signal<AXDonutChartOption & { title: string }> = computed(\n () => this.options() as AXDonutChartOption & { title: string },\n );\n dataSource = computed(() => this.options()['dataSource'] as string | AXDonutChartData[] | undefined);\n\n eff = effect(async () => {\n const ds = this.dataSource();\n if (typeof ds === 'string') {\n const result = await this.dataService.get(ds);\n if (result) {\n const source = await (result.source() as any).config.load();\n this.data.set(source.items);\n }\n } else {\n this.data.set(ds as AXDonutChartData[]);\n }\n });\n\n constructor() {\n super();\n this.setOptions({\n ...this.options(),\n width: 300,\n height: 300,\n showDataLabels: false,\n donutWidth: 35,\n cornerRadius: 4,\n showTooltip: true,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n });\n }\n\n handleDonutChartSegmentClick(event: any) {\n //console.log(event);\n }\n}\n","<ax-donut-chart\n [data]=\"data()\"\n [options]=\"donutChartOptions()\"\n (segmentClick)=\"handleDonutChartSegmentClick($event)\"\n></ax-donut-chart>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog, cloneProperty } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../chart.type';\n\nexport const AXPDonutChartWidget: AXPWidgetConfig = {\n name: 'donut-chart',\n title: 'Donut Chart Widget',\n categories: AXP_WIDGETS_CHART_CATEGORY,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-donut',\n properties: [\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.donut-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Size & Layout ======\n {\n name: 'width',\n title: '@dashboard:widgets.donut-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 200,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.donut-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 200,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n // ====== Donut Appearance ======\n {\n name: 'showDataLabels',\n title: '@dashboard:widgets.donut-chart.show-data-labels',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDataLabels',\n path: 'options.showDataLabels',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'donutWidth',\n title: '@dashboard:widgets.donut-chart.donut-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 35,\n dataType: 'number',\n interface: {\n name: 'donutWidth',\n path: 'options.donutWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '10-80',\n minValue: 10,\n maxValue: 80,\n },\n },\n },\n visible: true,\n },\n {\n name: 'cornerRadius',\n title: '@dashboard:widgets.donut-chart.corner-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'cornerRadius',\n path: 'options.cornerRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-20',\n minValue: 0,\n maxValue: 20,\n },\n },\n },\n visible: true,\n },\n // ====== Legend ======\n // {\n // name: 'showLegend',\n // title: 'Show Legend',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showLegend',\n // path: 'options.showLegend',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n // {\n // name: 'legendPosition',\n // title: 'Legend Position',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: 'right',\n // dataType: 'string',\n // interface: {\n // name: 'legendPosition',\n // path: 'options.legendPosition',\n // type: AXPWidgetsCatalog.select,\n // options: {\n // dataSource: ['right', 'bottom'],\n // },\n // },\n // },\n // visible: true,\n // },\n // ====== Tooltip ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.donut-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.donut-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.donut-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./donut-chart-widget.component').then((c) => c.AXPDonutChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 4,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 5,\n maxHeight: 6,\n },\n md: {\n width: 4,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 5,\n maxHeight: 6,\n },\n sm: {\n height: 4,\n minHeight: 2,\n maxHeight: 6,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n donutChart: 'donut-chart';\n }\n}\n","import { AXGaugeChartComponent, AXGaugeChartOption } from '@acorex/charts/gauge-chart';\nimport { AXPDataSourceDefinitionProviderService } from '@acorex/platform/core';\nimport { AXPBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, Signal } from '@angular/core';\n/**\n * Gauge Chart Widget Component\n * Renders a semi-circular gauge chart with animated needle and thresholds\n */\n@Component({\n templateUrl: './gauge-chart-widget.component.html',\n styleUrls: ['./gauge-chart-widget.component.scss'],\n imports: [AXGaugeChartComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPGaugeChartWidgetViewComponent extends AXPBaseWidgetComponent {\n protected value = signal<number>(0);\n private dataService = inject(AXPDataSourceDefinitionProviderService);\n\n gaugeChartOptions: Signal<AXGaugeChartOption & { title: string }> = computed(\n () => this.options() as AXGaugeChartOption & { title: string },\n );\n dataSource = computed(() => this.options()['dataSource'] as string | number | undefined);\n\n eff = effect(async () => {\n const ds = this.dataSource();\n if (typeof ds === 'string') {\n const result = await this.dataService.get<number>(ds);\n if (result) {\n this.value.set((await result.source()) as number);\n }\n }\n if (typeof ds === 'number') {\n this.value.set(ds);\n }\n });\n\n constructor() {\n super();\n this.setOptions({\n ...this.options(),\n width: null,\n height: 300,\n minValue: 0,\n maxValue: 100,\n showTooltip: true,\n gaugeWidth: 30,\n cornerRadius: 4,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n });\n }\n}\n","<ax-gauge-chart [value]=\"value()\" [options]=\"gaugeChartOptions()\"></ax-gauge-chart>\n","import { AXPWidgetConfig, AXPWidgetsCatalog, cloneProperty } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../chart.type';\n\nexport const AXPGaugeChartWidget: AXPWidgetConfig = {\n name: 'gauge-chart',\n title: 'Gauge Chart Widget',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n type: 'dashboard',\n icon: 'fa-light fa-gauge',\n properties: [\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.gauge-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== Label Display ======\n {\n name: 'label',\n title: '@dashboard:widgets.gauge-chart.label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'label',\n path: 'options.label',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Layout & Dimensions ======\n {\n name: 'width',\n title: '@dashboard:widgets.gauge-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: null,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-1200',\n minValue: 1,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.gauge-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-800',\n minValue: 1,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n // ====== Gauge Configuration ======\n {\n name: 'minValue',\n title: '@dashboard:widgets.gauge-chart.min-value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'minValue',\n path: 'options.minValue',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n {\n name: 'maxValue',\n title: '@dashboard:widgets.gauge-chart.max-value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 100,\n dataType: 'number',\n interface: {\n name: 'maxValue',\n path: 'options.maxValue',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n // ====== Gauge Appearance ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.gauge-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'gaugeWidth',\n title: '@dashboard:widgets.gauge-chart.gauge-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 30,\n dataType: 'number',\n interface: {\n name: 'gaugeWidth',\n path: 'options.gaugeWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-100',\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n {\n name: 'cornerRadius',\n title: '@dashboard:widgets.gauge-chart.corner-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'cornerRadius',\n path: 'options.cornerRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-20',\n minValue: 0,\n maxValue: 20,\n },\n },\n },\n visible: true,\n },\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.gauge-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.gauge-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./gauge-chart-widget.component').then((c) => c.AXPGaugeChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 4,\n maxHeight: 5,\n },\n md: {\n width: 3,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 4,\n maxHeight: 5,\n },\n sm: {\n height: 4,\n minHeight: 2,\n maxHeight: 5,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n gaugeChart: 'gauge-chart';\n }\n}\n","import {\n AXLineChartComponent,\n AXLineChartData,\n AXLineChartOption,\n AXLineChartPointClickEvent,\n} from '@acorex/charts/line-chart';\nimport { AXPDataSourceDefinitionProviderService } from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, Signal } from '@angular/core';\n/**\n * Line Chart Widget Component\n * Renders data as lines with interactive hover effects and animations\n */\n@Component({\n templateUrl: './line-chart-widget.component.html',\n styleUrls: ['./line-chart-widget.component.scss'],\n standalone: true,\n imports: [AXLineChartComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPLineChartWidgetViewComponent extends AXPValueWidgetComponent {\n protected data = signal<AXLineChartData[]>([]);\n private dataService = inject(AXPDataSourceDefinitionProviderService);\n\n lineChartOptions: Signal<AXLineChartOption & { title: string }> = computed(\n () => this.options() as AXLineChartOption & { title: string },\n );\n dataSource = computed(() => this.options()['dataSource'] as string | AXLineChartData[] | undefined);\n\n eff = effect(async () => {\n const ds = this.dataSource();\n if (typeof ds === 'string') {\n const result = await this.dataService.get(ds);\n if (result) {\n const source = await (result.source() as any).config.load();\n this.data.set(source.items);\n }\n } else {\n this.data.set(ds as AXLineChartData[]);\n }\n });\n\n constructor() {\n super();\n this.setOptions({\n ...this.options(),\n showXAxis: true,\n showYAxis: true,\n yAxisStartsAtZero: true,\n showGrid: true,\n showVerticalGrid: true,\n lineWidth: 2,\n smoothLine: true,\n showPoints: true,\n pointRadius: 4,\n fillOpacity: 80,\n showTooltip: true,\n showCrosshair: true,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n });\n }\n\n handleLineChartPointClick(event: AXLineChartPointClickEvent) {\n //console.log(event);\n }\n}\n","<ax-line-chart\n (pointClick)=\"handleLineChartPointClick($event)\"\n [data]=\"data()\"\n [options]=\"lineChartOptions()\"\n></ax-line-chart>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog, cloneProperty } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../chart.type';\n\nexport const AXPLineChartWidget: AXPWidgetConfig = {\n name: 'line-chart',\n title: 'Line Chart Widget',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-line',\n properties: [\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.line-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== Axis Settings ======\n {\n name: 'xAxisLabel',\n title: '@dashboard:widgets.line-chart.x-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'xAxisLabel',\n path: 'options.xAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'yAxisLabel',\n title: '@dashboard:widgets.line-chart.y-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'yAxisLabel',\n path: 'options.yAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'fillArea',\n title: '@dashboard:widgets.line-chart.fill-area',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: false,\n dataType: 'boolean',\n interface: {\n name: 'fillArea',\n path: 'options.fillArea',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Layout & Dimensions ======\n {\n name: 'width',\n title: '@dashboard:widgets.line-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: null,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.line-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n\n // ====== Axis Settings ======\n {\n name: 'showXAxis',\n title: '@dashboard:widgets.line-chart.show-x-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showXAxis',\n path: 'options.showXAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showYAxis',\n title: '@dashboard:widgets.line-chart.show-y-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showYAxis',\n path: 'options.showYAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'yAxisStartsAtZero',\n title: '@dashboard:widgets.line-chart.y-axis-starts-at-zero',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'yAxisStartsAtZero',\n path: 'options.yAxisStartsAtZero',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n {\n name: 'showGrid',\n title: '@dashboard:widgets.line-chart.show-grid',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showGrid',\n path: 'options.showGrid',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showVerticalGrid',\n title: '@dashboard:widgets.line-chart.show-vertical-grid',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showVerticalGrid',\n path: 'options.showVerticalGrid',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n // ====== Line Appearance ======\n {\n name: 'lineWidth',\n title: '@dashboard:widgets.line-chart.line-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 2,\n dataType: 'number',\n interface: {\n name: 'lineWidth',\n path: 'options.lineWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-10',\n minValue: 1,\n maxValue: 10,\n },\n },\n },\n visible: true,\n },\n {\n name: 'smoothLine',\n title: '@dashboard:widgets.line-chart.smooth-line',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'smoothLine',\n path: 'options.smoothLine',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showPoints',\n title: '@dashboard:widgets.line-chart.show-points',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showPoints',\n path: 'options.showPoints',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'pointRadius',\n title: '@dashboard:widgets.line-chart.point-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'pointRadius',\n path: 'options.pointRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-10',\n minValue: 1,\n maxValue: 10,\n },\n },\n },\n visible: true,\n },\n {\n name: 'fillOpacity',\n title: '@dashboard:widgets.line-chart.fill-opacity',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 80,\n dataType: 'number',\n interface: {\n name: 'fillOpacity',\n path: 'options.fillOpacity',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-100',\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n\n // ====== Tooltip Settings ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.line-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showCrosshair',\n title: '@dashboard:widgets.line-chart.show-crosshair',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showCrosshair',\n path: 'options.showCrosshair',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.line-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.line-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./line-chart-widget.component').then((c) => c.AXPLineChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 6,\n maxHeight: 6,\n },\n md: {\n width: 3,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 6,\n maxHeight: 6,\n },\n sm: {\n height: 4,\n minHeight: 2,\n maxHeight: 6,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n lineChart: 'line-chart';\n }\n}\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXGridLayoutWidgetComponent } from '@acorex/components/grid-layout-builder';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXWysiwygContainerComponent, AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n OnInit,\n computed,\n inject,\n linkedSignal,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n templateUrl: './sticky-note-widget.component.html',\n styleUrls: ['./sticky-note-widget.component.scss'],\n standalone: true,\n imports: [\n AXWysiwygModule,\n AXDecoratorModule,\n AXToolBarModule,\n FormsModule,\n AXDateTimeModule,\n AXFormatModule,\n AXPopoverModule,\n CommonModule,\n FormsModule,\n AXColorBoxModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXGridLayoutWidgetComponent,\n useExisting: AXPStickyNoteWidgetViewComponent,\n },\n ],\n})\nexport class AXPStickyNoteWidgetViewComponent extends AXPValueWidgetComponent<string> implements OnInit {\n protected isEditing = signal(false);\n private wysiwyg = viewChild<AXWysiwygContainerComponent>('wysiwyg');\n // protected value = computed(() => this.getValue());\n // protected typeValue = signal<string>('');\n protected value = linkedSignal(() => this.getValue());\n protected date = computed(() => this.options()?.['date'] ?? new Date());\n protected bgColor = computed(() => this.options()?.['backgroundColor'] ?? '#FFF8B8');\n protected color = signal('#333333');\n\n private el = inject(ElementRef);\n\n // Modern color palette with pastel and vibrant options\n protected colorPresets: string[] = [\n '#FFF8B8', // Soft yellow\n '#FFD8E6', // Soft pink\n '#D1F0FF', // Soft blue\n '#E2FFD1', // Soft green\n '#FFE8D1', // Soft orange\n '#F0D1FF', // Soft purple\n '#FFCDD2', // Soft red\n '#D1FFF0', // Soft teal\n '#F5F5F5', // Light gray\n '#FFFFFF', // White\n ];\n\n // Handle clicks outside the component to cancel editing\n @HostListener('document:click', ['$event'])\n handleClickOutside(event: MouseEvent) {\n const clickedInside = (this.el.nativeElement as HTMLElement).contains(event.target as Node);\n if (!clickedInside && this.isEditing()) {\n this.saveChanges();\n }\n }\n\n // Handle double-click to activate editing\n protected activateEdit() {\n //TODO FOCUS WYSIWYG\n this.wysiwyg()?.focus();\n this.isEditing.set(true);\n }\n\n // Save changes and exit edit mode\n protected saveChanges() {\n this.setValue(this.value());\n this.isEditing.set(false);\n }\n\n protected setColor(color: string) {\n this.setOptions({ backgroundColor: color });\n }\n\n protected valueChange(event: AXValueChangedEvent<any>) {\n if (event.isUserInteraction) {\n this.value.set(event.value);\n }\n }\n}\n","<div\n class=\"sticky-note-container ax-size-full ax-rounded-lg ax-flex ax-flex-col ax-p-4 ax-shadow-md ax-transition-all ax-duration-300 hover:ax-shadow-lg\"\n [style.background-color]=\"bgColor()\"\n [style.color]=\"color()\"\n [class.ax-shadow-lg]=\"isEditing()\"\n [class.ax-scale-[1.02]]=\"isEditing()\"\n (dblclick)=\"activateEdit()\"\n>\n <!-- Header with timestamp -->\n <div class=\"ax-flex ax-justify-between ax-items-center ax-mb-3\">\n <div class=\"ax-text-xs ax-opacity-70 ax-font-medium ax-flex ax-items-center ax-gap-1\">\n <i class=\"fa-regular fa-clock ax-text-[0.65rem]\"></i>\n {{ date() | format: 'datetime' : { format: 'short' } | async }}\n </div>\n </div>\n\n <!-- Content area -->\n <div class=\"ax-flex-1 ax-overflow-auto\">\n <ax-wysiwyg-container\n #wysiwyg\n [class]=\"isEditing() ? 'ax-pointer-events-auto ax-cursor-text' : 'ax-pointer-events-none !ax-cursor-pointer'\"\n class=\"ax-h-full\"\n placeHolder=\"start writing with double click...\"\n look=\"none\"\n (onValueChanged)=\"valueChange($event)\"\n [ngModel]=\"value()\"\n >\n <ax-wysiwyg-view class=\"!ax-size-full ax-border-b-0\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar class=\"ax-hidden\"></ax-wysiwyg-toolbar>\n </ax-wysiwyg-container>\n </div>\n\n <!-- Footer with color selector and save button -->\n @if (isEditing()) {\n <div class=\"ax-absolute ax-bottom-2 ax-left-2 ax-right-2 ax-flex ax-flex-wrap ax-gap-1 ax-text-xs\">\n <!-- Color selection bar when in edit mode -->\n <div class=\"ax-flex ax-w-full ax-mt-2 ax-border ax-border-gray-200 ax-overflow-hidden ax-rounded-md\">\n @for (preset of colorPresets; track preset) {\n <div\n class=\"ax-h-6 ax-flex-1 ax-cursor-pointer ax-transition-all ax-duration-200 ax-border-r ax-border-gray-200 last:ax-border-r-0 hover:ax-brightness-95\"\n [style.background-color]=\"preset\"\n [class.ax-ring-inset]=\"bgColor() === preset\"\n [class.ax-ring-2]=\"bgColor() === preset\"\n [class.ax-ring-primary]=\"bgColor() === preset\"\n (click)=\"setColor(preset)\"\n ></div>\n }\n </div>\n </div>\n }\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, plainTextDefaultProperty } from '@acorex/platform/layout/widgets';\nimport { AXP_BG_COLOR_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../chart.type';\n\nexport const AXPStickyNoteWidget: AXPWidgetConfig = {\n name: 'sticky-note',\n title: 'Sticky Note Widget',\n categories: AXP_WIDGETS_UTILITY_CATEGORY,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-sticky-note',\n properties: [\n AXP_DATA_PATH_PROPERTY,\n {\n ...AXP_BG_COLOR_PROPERTY,\n title: '@dashboard:widgets.sticky-note.background-color',\n },\n {\n ...plainTextDefaultProperty(),\n title: '@dashboard:widgets.sticky-note.note-text',\n },\n ],\n components: {\n view: {\n component: () => import('./sticky-note-widget.component').then((c) => c.AXPStickyNoteWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 2,\n height: 3,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 4,\n maxHeight: 4,\n },\n md: {\n width: 2,\n height: 3,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 4,\n maxHeight: 4,\n },\n sm: {\n height: 3,\n minHeight: 2,\n maxHeight: 4,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n stickyNote: 'sticky-note';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Weather location information\n */\nexport interface AXPWeatherLocation {\n /** City name */\n city: string;\n /** Country name */\n country: string;\n /** Formatted location display name */\n displayName: string;\n}\n\n/**\n * Weather current condition information\n */\nexport interface AXPWeatherCondition {\n /** Condition text */\n condition: string;\n /** Condition code */\n conditionCode: number;\n /** Icon URL */\n iconUrl: string;\n /** Temperature in Celsius */\n tempC: number;\n /** Temperature in Fahrenheit */\n tempF: number;\n /** Feels like temperature in Celsius */\n feelsLikeC: number;\n /** Feels like temperature in Fahrenheit */\n feelsLikeF: number;\n /** Humidity percentage */\n humidity: number;\n /** Wind speed in km/h */\n windKph: number;\n /** Wind speed in mph */\n windMph: number;\n /** Wind direction */\n windDirection: string;\n /** UV index */\n uv: number;\n /** Last updated timestamp */\n lastUpdated: string;\n}\n\n/**\n * Weather forecast data for a single day\n */\nexport interface AXPWeatherForecastDay {\n /** Date string */\n date: string;\n /** Day name (e.g., \"Mon\", \"Tue\") */\n day: string;\n /** Weather condition code */\n condition: string;\n /** Weather icon URL */\n iconUrl: string;\n /** Max temperature in Celsius */\n maxTempC: number;\n /** Max temperature in Fahrenheit */\n maxTempF: number;\n /** Min temperature in Celsius */\n minTempC: number;\n /** Min temperature in Fahrenheit */\n minTempF: number;\n /** Hourly forecast data */\n hour: AXPWeatherHour[];\n}\n\n/**\n * Weather hourly forecast data\n */\nexport interface AXPWeatherHour {\n /** Time string */\n time: string;\n /** Weather condition code */\n condition: string;\n /** Weather icon URL */\n iconUrl: string;\n /** Hourly temperature in Celsius */\n tempC: number;\n /** Hourly temperature in Fahrenheit */\n tempF: number;\n}\n\n/**\n * Complete weather data response\n */\nexport interface AXPWeatherData {\n /** Location information */\n location: AXPWeatherLocation;\n /** Current weather data */\n current: AXPWeatherCondition;\n /** Forecast data */\n forecast: AXPWeatherForecastDay[];\n}\n\n/**\n * Weather API request options\n */\nexport interface AXPWeatherRequestOptions {\n /** Temperature unit */\n tempUnit?: string;\n /** Location query */\n location?: string;\n /** Use mock data */\n useMockData?: boolean;\n}\n\n/**\n * Weather UI condition display info\n */\nexport interface AXPWeatherConditionDisplay {\n /** Condition unique ID */\n id: string;\n /** Display name */\n name: string;\n /** Icon class (Font Awesome) */\n icon: string;\n /** SVG icon name */\n svgIcon: string;\n /** Associated color */\n color: string;\n}\n\n/**\n * Abstract Weather API Service\n * Base class that defines the interface and common functionality\n * for weather data providers\n */\n@Injectable()\nexport abstract class AXPWeatherApiAbstract {\n /** Weather condition definitions mapping */\n protected weatherConditions: Record<string, AXPWeatherConditionDisplay> = {\n sunny: {\n id: 'sunny',\n name: 'Sunny',\n icon: 'fa-solid fa-sun',\n svgIcon: 'day.svg',\n color: '#ff9d00',\n },\n clearNight: {\n id: 'clearNight',\n name: 'Clear Night',\n icon: 'fa-solid fa-moon',\n svgIcon: 'night.svg',\n color: '#5d639e',\n },\n partlyCloudy: {\n id: 'partlyCloudy',\n name: 'Partly Cloudy',\n icon: 'fa-solid fa-cloud-sun',\n svgIcon: 'cloudy-day-3.svg',\n color: '#6ba4e8',\n },\n partlyCloudyNight: {\n id: 'partlyCloudyNight',\n name: 'Partly Cloudy Night',\n icon: 'fa-solid fa-cloud-moon',\n svgIcon: 'cloudy-night-3.svg',\n color: '#5d639e',\n },\n cloudy: {\n id: 'cloudy',\n name: 'Cloudy',\n icon: 'fa-solid fa-cloud',\n svgIcon: 'cloudy.svg',\n color: '#72869d',\n },\n rain: {\n id: 'rain',\n name: 'Rain',\n icon: 'fa-solid fa-cloud-rain',\n svgIcon: 'rainy-6.svg',\n color: '#3a74ad',\n },\n showers: {\n id: 'showers',\n name: 'Showers',\n icon: 'fa-solid fa-cloud-showers-heavy',\n svgIcon: 'rainy-7.svg',\n color: '#2c5d8c',\n },\n thunderstorm: {\n id: 'thunderstorm',\n name: 'Thunderstorm',\n icon: 'fa-solid fa-bolt-lightning',\n svgIcon: 'thunder.svg',\n color: '#8834af',\n },\n snow: {\n id: 'snow',\n name: 'Snow',\n icon: 'fa-solid fa-snowflake',\n svgIcon: 'snowy-6.svg',\n color: '#68a9cd',\n },\n mist: {\n id: 'mist',\n name: 'Mist',\n icon: 'fa-solid fa-smog',\n svgIcon: 'cloudy.svg',\n color: '#94a3b8',\n },\n };\n\n /** Day of week mapping */\n protected readonly dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n /**\n * Get weather condition info by ID\n * @param id Condition ID\n * @returns Weather condition info or default if not found\n */\n public getCondition(id: string): AXPWeatherConditionDisplay {\n // Normalize condition ID by removing spaces and converting to lowercase\n const normalizedId = id.toLowerCase().replace(/\\s+/g, '');\n\n // Direct match first\n if (this.weatherConditions[normalizedId]) {\n return this.weatherConditions[normalizedId];\n }\n\n // Check for partial matches or common variants\n if (normalizedId.includes('partly') && normalizedId.includes('cloud')) {\n return this.weatherConditions['partlyCloudy'];\n }\n\n if (normalizedId.includes('cloud')) {\n return this.weatherConditions['cloudy'];\n }\n\n if (normalizedId.includes('sun')) {\n return this.weatherConditions['sunny'];\n }\n\n if (normalizedId.includes('rain')) {\n return this.weatherConditions['rain'];\n }\n\n if (normalizedId.includes('snow')) {\n return this.weatherConditions['snow'];\n }\n\n // If no match found, return default unknown condition\n return {\n id: 'unknown',\n name: 'Unknown',\n icon: 'fa-solid fa-question',\n svgIcon: 'weather.svg',\n color: '#999999',\n };\n }\n\n /**\n * Get current weather data for given location\n * @param options Weather request options\n * @returns Observable with weather data\n */\n abstract getWeather(options: AXPWeatherRequestOptions): Observable<AXPWeatherData>;\n\n /**\n * Get weather forecast for a location\n * @param options Weather request options with days\n * @returns Observable of weather data with forecast\n */\n abstract getForecast(options: AXPWeatherRequestOptions & { days?: number }): Observable<AXPWeatherData>;\n\n /**\n * Parse location string into city and display components\n * @param location Location query string\n * @returns Parsed location parts\n */\n protected parseLocation(location: string): { city: string; country: string; display: string } {\n if (!location || location.trim() === '') {\n return { city: 'New York', country: 'USA', display: 'New York' };\n }\n\n const city = location.trim();\n return { city, country: '', display: city };\n }\n\n /**\n * Format location name for display\n * @param locationParts Parsed location parts\n * @returns Formatted location name\n */\n protected formatLocationName(locationParts: { city: string; country: string; display: string }): string {\n return locationParts.city || 'Unknown Location';\n }\n\n /**\n * Map API condition text to our internal condition IDs\n * @param conditionText Condition text from API\n * @returns Internal condition ID\n */\n protected mapApiConditionToId(conditionText: string): string {\n const text = conditionText.toLowerCase();\n\n // Match WeatherAPI.com condition text\n // Reference: https://www.weatherapi.com/docs/#weather-icons\n\n if (text.includes('sunny') || text.includes('clear')) {\n return 'sunny';\n }\n\n if (text === 'partly cloudy') {\n return 'partlyCloudy';\n }\n\n if (text.includes('cloudy') || text.includes('overcast')) {\n return 'cloudy';\n }\n\n if (text.includes('rain') || text.includes('drizzle') || text.includes('shower')) {\n return 'rain';\n }\n\n if (text.includes('thunder') || text.includes('lightning')) {\n return 'thunderstorm';\n }\n\n if (text.includes('snow') || text.includes('sleet') || text.includes('blizzard')) {\n return 'snow';\n }\n\n if (text.includes('mist') || text.includes('fog')) {\n return 'mist';\n }\n\n // Default to partly cloudy if we don't have a specific mapping\n return 'partlyCloudy';\n }\n\n /**\n * Generate random integer between min and max (inclusive)\n * Helper method for implementations\n * @param min Minimum value\n * @param max Maximum value\n * @returns Random integer\n */\n protected getRandomInt(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n /**\n * Set the API key for the weather service\n * This is only used by the real API implementation,\n * but is defined in the abstract class for consistency\n * @param key The API key\n */\n abstract setApiKey(key: string): void;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, catchError, map, throwError } from 'rxjs';\nimport { AXPWeatherApiAbstract, AXPWeatherData, AXPWeatherRequestOptions } from './weather-api.abstract';\n\n/**\n * Mock Weather API Service\n * Provides simulated weather data for development and testing\n */\n@Injectable()\nexport class AXPWeatherApiMockService extends AXPWeatherApiAbstract {\n // Mock configuration\n private readonly mockDelay = 500;\n\n /**\n * Get current weather data for given location\n * @param options Weather request options\n * @returns Observable with weather data\n */\n override getWeather(options: AXPWeatherRequestOptions): Observable<AXPWeatherData> {\n const locationParts = this.parseLocation(options.location || '');\n const displayName = this.formatLocationName(locationParts);\n\n return this.getMockWeatherData(locationParts.city, options).pipe(\n map((mockData) => ({\n ...mockData,\n location: {\n city: locationParts.city,\n country: '',\n displayName: displayName,\n },\n })),\n );\n }\n\n /**\n * Get weather forecast for a location\n * @param options Weather request options with days\n * @returns Observable of weather data with forecast\n */\n override getForecast(options: AXPWeatherRequestOptions & { days?: number }): Observable<AXPWeatherData> {\n const days = options.days || 5;\n return this.getMockForecast(options.location || '', days, options);\n }\n\n /**\n * Get mock weather data for demo/development\n * @param location Location query\n * @param options Request options\n * @returns Observable of mock weather data\n */\n private getMockWeatherData(location: string, options?: AXPWeatherRequestOptions): Observable<AXPWeatherData> {\n return new Observable<AXPWeatherData>((observer) => {\n setTimeout(() => {\n try {\n const locationParts = this.parseLocation(location);\n const tempUnit = options?.tempUnit || '°C';\n const isCelsius = tempUnit === '°C';\n\n // Generate more realistic weather data based on location and current date\n const now = new Date();\n const month = now.getMonth(); // 0-11\n\n // Seasonally appropriate temperature range\n let minRange = 15;\n let maxRange = 25;\n\n // Northern hemisphere seasonal adjustments\n if (month >= 11 || month <= 1) {\n // Winter\n minRange = -5;\n maxRange = 10;\n } else if (month >= 2 && month <= 4) {\n // Spring\n minRange = 10;\n maxRange = 20;\n } else if (month >= 5 && month <= 7) {\n // Summer\n minRange = 20;\n maxRange = 35;\n } else if (month >= 8 && month <= 10) {\n // Fall/Autumn\n minRange = 10;\n maxRange = 25;\n }\n\n // Generate current temperature - more likely to be in the middle of the range\n const tempC = Math.round(minRange + (this.getRandomInt(4, 8) / 10) * (maxRange - minRange));\n const tempF = Math.round((tempC * 9) / 5 + 32);\n\n const humidity = this.getRandomInt(30, 90);\n const windKph = this.getRandomInt(5, 30);\n const windMph = Math.round(windKph * 0.621371);\n\n // Temperature-based conditions with randomization\n let conditionId = 'partlyCloudy';\n if (tempC > 25) conditionId = 'sunny';\n else if (tempC < 10) conditionId = 'cloudy';\n if (this.getRandomInt(1, 10) > 7) conditionId = 'rain';\n\n observer.next({\n location: {\n city: locationParts.city,\n country: '',\n displayName: this.formatLocationName(locationParts),\n },\n current: {\n condition: conditionId,\n conditionCode: 0,\n iconUrl: '', // Would be set from API\n tempC: tempC,\n tempF: tempF,\n feelsLikeC: tempC + this.getRandomInt(-3, 2),\n feelsLikeF: tempF + this.getRandomInt(-5, 3),\n humidity: humidity,\n windKph: windKph,\n windMph: windMph,\n windDirection: ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'][this.getRandomInt(0, 7)],\n uv: this.getRandomInt(0, 10),\n lastUpdated: new Date().toISOString(),\n },\n forecast: [],\n });\n\n observer.complete();\n } catch (error) {\n observer.error(error);\n }\n }, this.mockDelay);\n }).pipe(catchError((error) => throwError(() => new Error(`Failed to get weather data: ${error.message}`))));\n }\n\n /**\n * Get mock forecast data for demo/development\n * @param location Location query\n * @param days Number of forecast days\n * @param options Request options\n * @returns Observable of mock weather data with forecast\n */\n private getMockForecast(\n location: string,\n days: number = 5,\n options?: AXPWeatherRequestOptions,\n ): Observable<AXPWeatherData> {\n return this.getMockWeatherData(location, options).pipe(\n map((data) => {\n const currentCondition = data.current.condition;\n const currentTemp = data.current.tempC;\n\n // Use the current weather as a base for the forecast trend\n const forecast = Array.from({ length: days }, (_, i) => {\n // Create forecast date for each day (starting from tomorrow)\n const forecastDate = new Date();\n forecastDate.setDate(new Date().getDate() + i + 1);\n\n const dateStr = forecastDate.toISOString().split('T')[0];\n const dayName = this.dayNames[forecastDate.getDay()];\n\n // Generate condition with some continuity from current weather\n // Weather tends to be similar for a few days with gradual changes\n let conditionId: string;\n\n if (i === 0) {\n // Tomorrow's weather has 60% chance of being similar to today\n conditionId =\n this.getRandomInt(1, 10) <= 6\n ? currentCondition\n : ['sunny', 'partlyCloudy', 'cloudy', 'rain', 'snow'][this.getRandomInt(0, 4)];\n } else {\n // Subsequent days have 70% chance of being similar to previous day\n const previousCondition = forecast[i - 1]?.condition || currentCondition;\n conditionId =\n this.getRandomInt(1, 10) <= 7\n ? previousCondition\n : ['sunny', 'partlyCloudy', 'cloudy', 'rain', 'snow'][this.getRandomInt(0, 4)];\n }\n\n // Generate temperatures with realistic variance\n // Max is typically higher than current temperature\n // Min is typically lower than current temperature\n const tempVariance = this.getRandomInt(-3, 3); // Small day-to-day change\n const baseMaxC = currentTemp + this.getRandomInt(0, 5); // Max is higher than current\n const maxTempC = baseMaxC + tempVariance;\n const minTempC = maxTempC - this.getRandomInt(5, 10); // Min is lower than max\n\n const maxTempF = Math.round((maxTempC * 9) / 5 + 32);\n const minTempF = Math.round((minTempC * 9) / 5 + 32);\n\n return {\n date: dateStr,\n day: dayName,\n condition: conditionId,\n iconUrl: '', // Would be set from API\n maxTempC,\n maxTempF,\n minTempC,\n minTempF,\n hour: [],\n };\n });\n\n return { ...data, forecast };\n }),\n );\n }\n\n /**\n * Set the API key for the weather service\n * No-op in the mock implementation\n * @param key The API key\n */\n override setApiKey(key: string): void {\n // No-op for mock service\n console.log('API key setting is ignored in mock weather service');\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const AXP_WEATHER_API_KEY = new InjectionToken<string>('AXP_WEATHER_API_KEY', {\n providedIn: 'root',\n factory: () => {\n return '40281dc1e31749edb6c104828250604';\n },\n});\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, catchError, map, throwError } from 'rxjs';\nimport { AXPWeatherApiAbstract, AXPWeatherData, AXPWeatherRequestOptions } from './weather-api.abstract';\nimport { AXP_WEATHER_API_KEY } from './weather-api.key';\n\n/**\n * Real Weather API Service\n * Fetches actual weather data from a weather API service\n */\n@Injectable()\nexport class AXPWeatherApiService extends AXPWeatherApiAbstract {\n private readonly http = inject(HttpClient);\n\n // API configuration\n private readonly baseApiUrl = 'https://api.weatherapi.com/v1';\n private apiKeyToken = inject(AXP_WEATHER_API_KEY, { optional: true });\n\n /**\n * Set the API key for the weather service\n * @param key The API key\n */\n setApiKey(key: string): void {\n if (key && key.trim() !== '') {\n this.apiKeyToken = key;\n }\n }\n\n /**\n * Get current weather data for given location\n * @param options Weather request options\n * @returns Observable with weather data\n */\n override getWeather(options: AXPWeatherRequestOptions): Observable<AXPWeatherData> {\n // If forecast is likely needed, we should fetch it all at once\n if (options.useMockData === false || options.useMockData === undefined) {\n // For real API, use the forecast endpoint which includes current data\n return this.getForecast({\n ...options,\n days: 1, // Request minimal forecast data\n });\n }\n\n // For mock data, we'll continue using separate calls for backward compatibility\n const locationParts = this.parseLocation(options.location || '');\n const displayName = this.formatLocationName(locationParts);\n\n // Use real API with query based on city only\n const query = encodeURIComponent(locationParts.city);\n const url = `${this.baseApiUrl}/current.json?key=${this.apiKeyToken}&q=${query}&aqi=no`;\n\n return this.http.get<any>(url).pipe(\n map((data) => this.transformApiResponse(data, displayName)),\n catchError((error) => {\n console.error('Weather API error:', error);\n // Check for location not found error\n if (error.error?.error?.code === 1006) {\n return throwError(\n () => new Error(`Location \"${locationParts.city}\" not found. Please check the city name and try again.`),\n );\n }\n return throwError(() => new Error(`Failed to fetch weather data: ${error.message}`));\n }),\n );\n }\n\n /**\n * Get weather forecast for a location\n * @param options Weather request options with days\n * @returns Observable of weather data with forecast\n */\n override getForecast(options: AXPWeatherRequestOptions & { days?: number }): Observable<AXPWeatherData> {\n const locationParts = this.parseLocation(options.location || '');\n const displayName = this.formatLocationName(locationParts);\n const days = options.days || 5;\n\n // Build forecast API URL\n const query = encodeURIComponent(locationParts.city);\n const url = `${this.baseApiUrl}/forecast.json?key=${this.apiKeyToken}&q=${query}&days=${days}&aqi=no`;\n\n return this.http.get<any>(url).pipe(\n map((data) => this.transformForecastResponse(data, displayName, days)),\n catchError((error) => {\n console.error('Weather API error:', error);\n // Check for location not found error\n if (error.error?.error?.code === 1006) {\n return throwError(\n () => new Error(`Location \"${locationParts.city}\" not found. Please check the city name and try again.`),\n );\n }\n return throwError(() => new Error(`Failed to fetch forecast data: ${error.message}`));\n }),\n );\n }\n\n /**\n * Transform API response to our internal data model\n * @param apiData Raw API response\n * @param displayName Formatted location name\n * @returns Normalized weather data\n */\n private transformApiResponse(apiData: any, displayName: string): AXPWeatherData {\n // Map API condition text to our condition IDs\n const conditionText = apiData.current?.condition?.text || '';\n const conditionId = this.mapApiConditionToId(conditionText);\n\n return {\n location: {\n city: apiData.location?.name || '',\n country: apiData.location?.country || '',\n displayName: displayName,\n },\n current: {\n condition: conditionId, // Use our mapped condition ID\n conditionCode: apiData.current?.condition?.code || 0,\n iconUrl: apiData.current?.condition?.icon || '',\n tempC: apiData.current?.temp_c || 0,\n tempF: apiData.current?.temp_f || 0,\n feelsLikeC: apiData.current?.feelslike_c || 0,\n feelsLikeF: apiData.current?.feelslike_f || 0,\n humidity: apiData.current?.humidity || 0,\n windKph: apiData.current?.wind_kph || 0,\n windMph: apiData.current?.wind_mph || 0,\n windDirection: apiData.current?.wind_dir || '',\n uv: apiData.current?.uv || 0,\n lastUpdated: apiData.current?.last_updated || new Date().toISOString(),\n },\n forecast: [],\n };\n }\n\n /**\n * Transform forecast API response to our internal data model\n * @param apiData Raw API response with forecast\n * @param displayName Formatted location name\n * @param days Number of forecast days\n * @returns Normalized weather data with forecast\n */\n private transformForecastResponse(apiData: any, displayName: string, days: number): AXPWeatherData {\n // First transform the current weather data using the current field of the forecast response\n const weatherData = this.transformApiResponse(apiData, displayName);\n\n // Then add the forecast data\n const forecastDays = apiData.forecast?.forecastday || [];\n weatherData.forecast = forecastDays.slice(0, days).map((day: any) => {\n // Parse the date for day name\n const date = new Date(day.date);\n const dayName = date.toLocaleDateString('en-US', { weekday: 'short' });\n\n // Map condition to our internal ID\n const conditionText = day.day?.condition?.text || '';\n const conditionId = this.mapApiConditionToId(conditionText);\n\n return {\n date: day.date,\n day: dayName,\n condition: conditionId,\n iconUrl: day.day?.condition?.icon || '',\n maxTempC: day.day?.maxtemp_c || 0,\n maxTempF: day.day?.maxtemp_f || 0,\n minTempC: day.day?.mintemp_c || 0,\n minTempF: day.day?.mintemp_f || 0,\n hour: day.hour.map((hour: any) => ({\n time: hour.time,\n condition: hour.condition.code,\n iconUrl: hour.condition.icon,\n tempC: hour.temp_c,\n tempF: hour.temp_f,\n })),\n };\n });\n\n return weatherData;\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { catchError, finalize, of } from 'rxjs';\nimport { AXPWeatherApiAbstract, AXPWeatherApiService, AXPWeatherData, AXPWeatherHour } from '../weather-services';\n\n@Component({\n template: `\n <div class=\"ax-size-full ax-p-6\">\n @if (weatherData() && !isLoading() && !hasError()) {\n <div class=\"ax-flex ax-h-full ax-flex-col ax-gap-4 ax-justify-around\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-1 ax-flex-wrap\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-shrink-0\">\n <img\n [src]=\"getConditionIcon(weatherData()!.current.condition)\"\n class=\"ax-size-32 ax-object-cover -ax-m-8\"\n [alt]=\"getConditionName(weatherData()!.current.condition)\"\n loading=\"lazy\"\n />\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-items-start\">\n <span class=\"ax-text-lg ax-font-medium ax-opacity-85\">{{\n getConditionName(weatherData()!.current.condition)\n }}</span>\n <span class=\"ax-text-5xl\" style=\"text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3)\"\n >{{ getCurrentTemperature() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n </div>\n </div>\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-2\">\n <span class=\"ax-text-2xl ax-font-bold ax-capitalize\">{{ city() }}</span>\n <div class=\"ax-flex ax-gap-4 ax-font-semibold ax-opacity-85\">\n <span\n >H: {{ getMaxTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n <span\n >L: {{ getMinTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n </div>\n </div>\n </div>\n\n <div\n class=\"ax-flex ax-w-full ax-gap-1 ax-items-center ax-justify-around ax-shrink-0\"\n [class]=\"displayedHourlyForecast().length > 5 ? 'ax-overflow-x-auto' : 'ax-overflow-x-visible'\"\n >\n @for (hour of displayedHourlyForecast(); track hour.time) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-p-2 ax-cursor-default ax-min-w-16 ax-gap-2\">\n <span class=\"ax-text-sm ax-font-medium ax-opacity-85\">{{ getHourLabel(hour.time) }}</span>\n <img\n [src]=\"getConditionIcon(weatherData()!.forecast[0].condition)\"\n class=\"ax-size-16 ax-object-cover -ax-m-4\"\n [alt]=\"getConditionName(weatherData()!.forecast[0].condition)\"\n />\n <span class=\"ax-text-lg ax-font-semibold\"\n >{{ getHourTemp(hour) | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n </div>\n }\n </div>\n\n <div class=\"ax-mt-2 ax-w-full\">\n <div\n class=\"ax-grid ax-grid-cols-[1fr_auto_auto_auto] ax-gap-x-4 ax-gap-y-2 ax-items-center ax-justify-items-start\"\n >\n @for (day of displayedForecast(); track day.date) {\n <span class=\"ax-font-medium\">{{ getDayName(parseDate(day.date)) }}</span>\n <div class=\"ax-flex ax-items-center ax-justify-center\">\n <img\n [src]=\"getConditionIcon(day.condition)\"\n class=\"ax-w-8 ax-h-8 ax-scale-[2]\"\n [alt]=\"getConditionName(day.condition)\"\n />\n </div>\n <span class=\"ax-font-semibold\"\n >{{ getForecastDayTemp(day) | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n <span class=\"ax-opacity-85\"\n >{{ day.minTempC | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n } @empty {\n <span class=\"ax-opacity-85\">No forecast data available</span>\n }\n </div>\n </div>\n </div>\n } @else {\n <div class=\"ax-flex ax-size-full ax-flex-col ax-gap-6\" [attr.aria-busy]=\"isLoading()\">\n @if (isLoading()) {\n <!-- Current weather skeleton -->\n <div class=\"ax-flex ax-items-start ax-justify-around ax-w-full ax-gap-4\">\n <div class=\"ax-flex ax-items-center ax-gap-4\">\n <ax-skeleton class=\"ax-w-20 ax-h-20 ax-rounded-full\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-skeleton class=\"ax-w-24 ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-32 ax-h-12 ax-rounded\"></ax-skeleton>\n </div>\n </div>\n <div class=\"ax-flex ax-flex-col ax-items-end ax-gap-2\">\n <ax-skeleton class=\"ax-w-28 ax-h-8 ax-rounded\"></ax-skeleton>\n <div class=\"ax-flex ax-gap-2\">\n <ax-skeleton class=\"ax-w-12 ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-12 ax-h-6 ax-rounded\"></ax-skeleton>\n </div>\n </div>\n </div>\n\n <!-- Hourly forecast skeleton -->\n <div class=\"ax-flex ax-w-full ax-gap-2 ax-items-center ax-justify-around\">\n @for (i of [1, 2, 3, 4, 5]; track i) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-2 ax-min-w-16\">\n <ax-skeleton class=\"ax-w-12 ax-h-4 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-10 ax-h-10 ax-rounded-full ax-my-1\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-10 ax-h-6 ax-rounded\"></ax-skeleton>\n </div>\n }\n </div>\n\n <!-- Daily forecast skeleton -->\n <div class=\"ax-mt-2 ax-w-full\">\n <div class=\"ax-grid ax-grid-cols-[1fr_auto_auto_auto] ax-gap-x-4 ax-gap-y-4 ax-items-center\">\n @for (i of [1, 2]; track i) {\n <ax-skeleton class=\"ax-w-20 ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8 ax-h-8 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-10 ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-10 ax-h-6 ax-rounded\"></ax-skeleton>\n }\n </div>\n </div>\n } @else if (hasError()) {\n <!-- No data state (not loading, no error) -->\n <div class=\"axp-weather-no-data-state\">\n <i class=\"fa-solid fa-cloud-sun\"></i>\n <p>{{ 'weather.no-data' | translate: { scope: 'dashboard' } | async }}</p>\n <ax-button\n [look]=\"'outline'\"\n [color]=\"'secondary'\"\n [text]=\"'weather.refresh-weather' | translate: { scope: 'dashboard' } | async\"\n (onClick)=\"loadWeatherData()\"\n ></ax-button>\n </div>\n }\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n @apply ax-size-full;\n }\n\n .ax-opacity-85 {\n color: gray;\n }\n\n .axp-weather-no-data-state {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100%;\n padding: 2rem;\n text-align: center;\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n }\n\n p {\n margin-bottom: 1.5rem;\n font-size: 1.1rem;\n }\n }\n\n sup {\n @apply ax-font-light;\n position: relative;\n top: -0.3em;\n font-size: 0.6em;\n margin-left: 0.1em;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXDecoratorModule, AXTooltipModule, AXSkeletonModule, AXTranslationModule, AXButtonModule],\n providers: [\n {\n provide: AXPWeatherApiAbstract,\n useClass: AXPWeatherApiService,\n },\n ],\n})\nexport class AXMAdvancedWeatherViewComponent extends AXPValueWidgetComponent {\n private weatherService = inject(AXPWeatherApiAbstract);\n protected weatherData = signal<AXPWeatherData | null>(null);\n\n protected isLoading = signal(true);\n protected hasError = signal(false);\n protected errorMessage = signal('');\n\n protected city = computed(() => this.options()['city'] || 'New York');\n protected temperatureUnit = computed(() => this.options()['temperatureUnit']?.id || '°C');\n protected forecastDays = computed(() => (this.options()['forecastDays'] ?? 2) + 1);\n protected forecastHours = computed(() => this.options()['forecastHours'] ?? 5);\n\n private iconCache = new Map<string, string>();\n\n constructor() {\n super();\n effect(() => {\n if (this.options()) {\n this.loadWeatherData();\n }\n });\n }\n\n protected loadWeatherData(): void {\n if (!this.city()) {\n this.isLoading.set(false);\n return;\n }\n\n this.isLoading.set(true);\n this.hasError.set(false);\n this.errorMessage.set('');\n\n const requestOptions = {\n location: this.city(),\n tempUnit: this.temperatureUnit(),\n days: this.forecastDays(),\n };\n\n this.weatherService\n .getForecast(requestOptions)\n .pipe(\n catchError((error) => {\n this.handleError(error);\n return of(null);\n }),\n finalize(() => this.isLoading.set(false)),\n )\n .subscribe((data) => {\n if (data) {\n this.weatherData.set(data);\n }\n });\n }\n\n private handleError(error: any): void {\n console.error('Advanced weather widget error:', error);\n this.hasError.set(true);\n this.errorMessage.set(error.message || 'Failed to load weather data');\n }\n\n protected getConditionIcon(conditionId: string): string {\n if (!conditionId) {\n return '';\n }\n if (this.iconCache.has(conditionId)) {\n return this.iconCache.get(conditionId)!;\n }\n\n const svgIcon = this.weatherService.getCondition(conditionId).svgIcon;\n const iconPath = `assets/images/weather/${svgIcon}`;\n this.iconCache.set(conditionId, iconPath);\n return iconPath;\n }\n\n protected getConditionName(conditionId: string): string {\n if (!conditionId) {\n return 'Unknown';\n }\n const condition = this.weatherService.getCondition(conditionId);\n return condition?.name || 'Unknown';\n }\n\n protected getCurrentTemperature(): number {\n if (!this.weatherData()) return 0;\n return this.temperatureUnit() === '°C' ? this.weatherData()!.current.tempC : this.weatherData()!.current.tempF;\n }\n\n protected getMaxTemp(): number {\n if (!this.weatherData()?.forecast?.[0]) return 0;\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.forecast[0].maxTempC\n : this.weatherData()!.forecast[0].maxTempF;\n }\n\n protected getMinTemp(): number {\n if (!this.weatherData()?.forecast?.[0]) return 0;\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.forecast[0].minTempC\n : this.weatherData()!.forecast[0].minTempF;\n }\n\n protected getForecastDayTemp(day: any): number {\n if (!day) return 0;\n return this.temperatureUnit() === '°C' ? day.maxTempC : day.maxTempF;\n }\n\n protected parseDate(dateStr: string): Date {\n return new Date(dateStr);\n }\n\n protected getDayName(date: Date): string {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const tomorrow = new Date(today);\n tomorrow.setDate(tomorrow.getDate() + 1);\n\n const checkDate = new Date(date);\n checkDate.setHours(0, 0, 0, 0);\n\n if (checkDate.getTime() === today.getTime()) {\n return 'Today';\n }\n if (checkDate.getTime() === tomorrow.getTime()) {\n return 'Tomorrow';\n }\n\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n return days[checkDate.getDay()];\n }\n\n protected displayedForecast = computed(() => {\n this.forecastDays();\n const weatherData = this.weatherData();\n if (!weatherData?.forecast) return [];\n // Skip today's forecast for the bottom row display\n return weatherData.forecast.slice(1, this.forecastDays());\n });\n\n protected displayedHourlyForecast = computed(() => {\n this.forecastHours();\n const weatherData = this.weatherData();\n if (!weatherData?.forecast?.[0]?.hour) return [];\n\n const now = new Date();\n const currentHour = now.getHours();\n const todayHours = weatherData.forecast[0].hour;\n\n // Get hours after current hour for today\n const remainingTodayHours = todayHours.filter((hour) => {\n const hourTime = new Date(hour.time);\n return hourTime.getHours() > currentHour;\n });\n\n // If we need more hours, get from tomorrow\n let result = [...remainingTodayHours];\n if (result.length < this.forecastHours() && weatherData.forecast.length > 1) {\n const tomorrowHours = weatherData.forecast[1].hour;\n const neededFromTomorrow = this.forecastHours() - result.length;\n result = [...result, ...tomorrowHours.slice(0, neededFromTomorrow)];\n }\n\n // Limit to requested number of hours\n return result.slice(0, this.forecastHours());\n });\n\n protected getHourLabel(timeStr: string): string {\n const time = new Date(timeStr);\n return time.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });\n }\n\n protected getHourTemp(hour: AXPWeatherHour): number {\n return this.temperatureUnit() === '°C' ? hour.tempC : hour.tempF;\n }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\n\nimport { AXP_DATA_PROPERTY_GROUP } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../chart.type';\n\n/**\n * Weather Widget Configuration\n * Provides customization options for displaying weather data and forecast\n */\nexport const AXPAdvancedWeatherWidget: AXPWidgetConfig = {\n name: 'advanced-weather',\n title: 'Advanced Weather Widget',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-cloud-sun',\n properties: [\n {\n name: 'temperatureUnit',\n title: '@dashboard:widgets.weather.temperature-unit',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: '°C',\n dataType: 'string',\n interface: {\n name: 'temperatureUnit',\n path: 'options.temperatureUnit',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ['°C', '°F'],\n },\n },\n },\n visible: true,\n },\n {\n name: 'city',\n title: '@dashboard:widgets.weather.city',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 'New York',\n dataType: 'string',\n interface: {\n name: 'city',\n path: 'options.city',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n\n {\n name: 'forecastHours',\n title: '@dashboard:widgets.weather.forecast-hours',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 5,\n dataType: 'number',\n interface: {\n name: 'forecastHours',\n path: 'options.forecastHours',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 8,\n step: 1,\n },\n },\n },\n visible: true,\n },\n {\n name: 'forecastDays',\n title: '@dashboard:widgets.weather.forecast-days',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 2,\n dataType: 'number',\n interface: {\n name: 'forecastDays',\n path: 'options.forecastDays',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 2,\n step: 1,\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./advanced-weather.component').then((c) => c.AXMAdvancedWeatherViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 5,\n minWidth: 3,\n minHeight: 5,\n maxWidth: 5,\n maxHeight: 7,\n },\n md: {\n width: 3,\n height: 5,\n minWidth: 3,\n minHeight: 5,\n maxWidth: 5,\n maxHeight: 7,\n },\n sm: {\n height: 5,\n minHeight: 5,\n maxHeight: 7,\n },\n },\n },\n};\n\n/**\n * Type declaration to register the weather widget type\n */\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n advancedWeather: 'advanced-weather';\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { catchError, finalize, of } from 'rxjs';\nimport { AXPWeatherApiAbstract, AXPWeatherApiService, AXPWeatherData } from '../weather-services';\n\n@Component({\n template: `\n @if (weatherData() && !isLoading() && !hasError()) {\n <div\n class=\"ax-flex ax-size-full ax-flex-col ax-items-start ax-p-2 ax-justify-evenly weather-container ax-overflow-hidden\"\n [attr.aria-label]=\"'Current weather for ' + city()\"\n >\n <div class=\"weather-top ax-flex ax-justify-around ax-items-center ax-w-full ax-pt-2 ax-gap-2 ax-flex-wrap\">\n <img\n [src]=\"getConditionIcon()\"\n class=\"ax-size-28 ax-object-cover -ax-m-6\"\n [alt]=\"weatherData()?.current?.condition + ' weather icon'\"\n loading=\"lazy\"\n />\n <div class=\"temperature ax-flex ax-justify-center ax-items-start\">\n <span class=\"ax-text-5xl\" style=\"text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3)\">\n {{ getCurrentTemperature() | number: '1.0-0' }}\n </span>\n <span>{{ temperatureUnit() }}</span>\n </div>\n </div>\n <div class=\"ax-text-start ax-ps-6\">\n <div class=\"ax-mt-1\">\n <span class=\"ax-font-bold ax-capitalize\">{{ city() }}</span>\n </div>\n <div class=\"ax-pt-2 ax-flex ax-gap-4 ax-opacity-75\">\n <span aria-label=\"High temperature\">\n H: {{ getMaxTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup>\n </span>\n <span aria-label=\"Low temperature\">\n L: {{ getMinTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup>\n </span>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"ax-flex ax-size-full ax-flex-col ax-p-2 ax-gap-2 ax-justify-center\" [attr.aria-busy]=\"isLoading()\">\n @if (isLoading()) {\n <!-- Weather icon and temperature skeleton -->\n <div class=\"ax-flex ax-items-center ax-w-full ax-pt-2 ax-gap-8\">\n <ax-skeleton class=\"ax-w-16 ax-h-12 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-24 ax-h-8 ax-rounded -ax-ms-2\"></ax-skeleton>\n </div>\n\n <!-- City and temperature range skeleton -->\n <div class=\"ax-text-start ax-ps-6 ax-w-full\">\n <div class=\"ax-mt-1\">\n <ax-skeleton class=\"ax-w-24 ax-h-6 ax-rounded\"></ax-skeleton>\n </div>\n <div class=\"ax-pt-2 ax-flex ax-gap-4\">\n <ax-skeleton class=\"ax-w-12 ax-h-4 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-12 ax-h-4 ax-rounded\"></ax-skeleton>\n </div>\n </div>\n } @else if (hasError()) {\n <!-- No data state (not loading, no error) -->\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-center ax-items-center ax-h-full ax-p-8\">\n <i class=\"ax-text-3xl fa-solid fa-cloud-sun\"></i>\n <p class=\"ax-text-sm\">{{ 'weather.no-data' | translate: { scope: 'dashboard' } | async }}</p>\n <ax-button\n [look]=\"'outline'\"\n [color]=\"'secondary'\"\n [text]=\"'weather.refresh-weather' | translate: { scope: 'dashboard' } | async\"\n (onClick)=\"loadWeatherData()\"\n ></ax-button>\n </div>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n @apply ax-size-full;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXDecoratorModule, AXTooltipModule, AXSkeletonModule, AXTranslationModule, AXButtonModule],\n providers: [\n {\n provide: AXPWeatherApiAbstract,\n useClass: AXPWeatherApiService,\n },\n ],\n})\nexport class AXMMinimalWeatherViewComponent extends AXPValueWidgetComponent {\n private weatherService = inject(AXPWeatherApiAbstract);\n\n protected weatherData = signal<AXPWeatherData | null>(null);\n protected isLoading = signal(true);\n protected hasError = signal(false);\n protected errorMessage = signal('');\n\n protected city = computed(() => this.options()['city'] || 'New York');\n protected temperatureUnit = computed(() => this.options()['temperatureUnit']?.id || '°C');\n\n private iconCache = new Map<string, string>();\n\n constructor() {\n super();\n effect(() => {\n if (this.options()) {\n this.loadWeatherData();\n }\n });\n }\n\n protected loadWeatherData(): void {\n if (!this.city()) {\n this.isLoading.set(false);\n return;\n }\n\n this.isLoading.set(true);\n this.hasError.set(false);\n this.errorMessage.set('');\n\n const requestOptions = {\n location: this.city(),\n tempUnit: this.temperatureUnit(),\n days: 1,\n };\n\n this.weatherService\n .getForecast(requestOptions)\n .pipe(\n catchError((error) => {\n this.handleError(error);\n return of(null);\n }),\n finalize(() => this.isLoading.set(false)),\n )\n .subscribe((data) => {\n if (data) {\n this.weatherData.set(data);\n }\n });\n }\n\n private handleError(error: any): void {\n console.error('Minimal weather widget error:', error);\n this.hasError.set(true);\n this.errorMessage.set(error.message || 'Failed to load weather data');\n }\n\n protected getConditionIcon(): string {\n const conditionId = this.weatherData()?.current.condition || 'unknown';\n\n if (this.iconCache.has(conditionId)) {\n return this.iconCache.get(conditionId)!;\n }\n\n const svgIcon = this.weatherService.getCondition(conditionId).svgIcon;\n const iconPath = `assets/images/weather/${svgIcon}`;\n this.iconCache.set(conditionId, iconPath);\n return iconPath;\n }\n\n protected getCurrentTemperature(): number {\n if (!this.weatherData()) return 0;\n return this.temperatureUnit() === '°C' ? this.weatherData()!.current.tempC : this.weatherData()!.current.tempF;\n }\n\n protected getMaxTemp(): number {\n if (!this.weatherData()?.forecast?.[0]) return 0;\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.forecast[0].maxTempC\n : this.weatherData()!.forecast[0].maxTempF;\n }\n\n protected getMinTemp(): number {\n if (!this.weatherData()?.forecast?.[0]) return 0;\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.forecast[0].minTempC\n : this.weatherData()!.forecast[0].minTempF;\n }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\n\nimport { AXP_DATA_PROPERTY_GROUP } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../chart.type';\n\n/**\n * Weather Widget Configuration\n * Provides customization options for displaying weather data and forecast\n */\nexport const AXPMinimalWeatherWidget: AXPWidgetConfig = {\n name: 'minimal-weather',\n title: 'Minimal Weather Widget',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-cloud-sun',\n properties: [\n {\n name: 'temperatureUnit',\n title: '@dashboard:widgets.weather.temperature-unit',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: '°C',\n dataType: 'string',\n interface: {\n name: 'temperatureUnit',\n path: 'options.temperatureUnit',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ['°C', '°F'],\n },\n },\n },\n visible: true,\n },\n {\n name: 'city',\n title: '@dashboard:widgets.weather.city',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 'New York',\n dataType: 'string',\n interface: {\n name: 'city',\n path: 'options.city',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./minimal-weather.component').then((c) => c.AXMMinimalWeatherViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 2,\n height: 2,\n minWidth: 1,\n minHeight: 2,\n maxWidth: 2,\n maxHeight: 3,\n },\n md: {\n width: 2,\n height: 2,\n minWidth: 1,\n minHeight: 2,\n maxWidth: 2,\n maxHeight: 3,\n },\n sm: {\n height: 2,\n minHeight: 2,\n maxHeight: 3,\n },\n },\n },\n};\n\n/**\n * Type declaration to register the weather widget type\n */\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n minimalWeather: 'minimal-weather';\n }\n}\n","import { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { Observable, Subscription, interval as rxjsInterval, switchMap } from 'rxjs';\nimport {\n AXPWeatherApiAbstract,\n AXPWeatherApiService,\n AXPWeatherData,\n AXPWeatherRequestOptions,\n} from './weather-services';\n\n/**\n * Weather Widget Component\n * Displays current weather conditions and optional forecast data\n * for a specified location with customizable display options.\n */\n@Component({\n templateUrl: './weather-widget.component.html',\n styleUrls: ['./weather-widget.component.scss'],\n standalone: true,\n imports: [CommonModule, AXDateTimeModule, AXFormatModule, HttpClientModule, AXTranslationModule, AXPStateMessageComponent],\n providers: [\n {\n provide: AXPWeatherApiAbstract,\n useClass: AXPWeatherApiService,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPWeatherWidgetViewComponent extends AXPValueWidgetComponent {\n // Container element reference\n protected containerEl = viewChild.required<ElementRef<HTMLDivElement>>('containerElement');\n\n // Weather API service instance\n private weatherService = inject(AXPWeatherApiAbstract);\n\n // State signals\n protected weatherData = signal<AXPWeatherData | null>(null);\n protected isLoading = signal(true);\n protected hasError = signal(false);\n protected errorMessage = signal('');\n protected isForecastLoading = signal(false);\n\n // Auto-refresh subscription\n private refreshSubscription: Subscription | null = null;\n\n // Option-derived computed properties\n protected city = computed(() => {\n return this.options()['city'] || 'Newyork';\n });\n protected temperatureUnit = computed(() => this.options()['temperatureUnit']?.id || '°C');\n protected windSpeedUnit = computed(() => this.options()['windSpeedUnit']?.id || 'km/h');\n\n // Display option flags\n protected showCurrentCondition = computed(() => this.options()['showCurrentCondition'] !== false);\n protected showTemperature = computed(() => this.options()['showTemperature'] !== false);\n protected showHumidity = computed(() => this.options()['showHumidity'] !== false);\n protected showWind = computed(() => this.options()['showWind'] !== false);\n protected showForecast = computed(() => this.options()['showForecast'] !== false);\n protected forecastDays = computed(() => this.options()['forecastDays'] ?? 5);\n\n // Refresh settings\n protected autoRefresh = computed(() => this.options()['autoRefresh'] !== false);\n protected refreshInterval = computed(() => this.options()['refreshInterval']?.id ?? 15);\n\n // Reactivity effects\n private optionsEffect = effect(() => {\n const opts = this.options();\n this.loadWeatherData();\n this.setupRefreshTimer();\n });\n\n private valueEffect = effect(() => {\n this.city();\n this.loadWeatherData();\n });\n\n protected displayedForecast = computed(() => {\n const weatherData = this.weatherData();\n if (!weatherData?.forecast) return [];\n\n const forecastDays = this.forecastDays();\n return weatherData.forecast.slice(0, forecastDays);\n });\n\n /**\n * Component constructor\n * @param cdr ChangeDetectorRef for triggering view updates\n */\n constructor(protected cdr: ChangeDetectorRef) {\n super();\n // Inject the abstract service which will resolve to either the mock or real implementation\n this.weatherService = inject(AXPWeatherApiAbstract);\n\n setTimeout(() => {\n this.loadWeatherData();\n this.setupRefreshTimer();\n }, 0);\n }\n\n /**\n * Component cleanup on destroy\n */\n ngOnDestroy(): void {\n this.clearRefreshTimer();\n }\n\n /**\n * Loads weather data from the API\n * Sets loading state and handles errors\n */\n private loadWeatherData(): void {\n this.isLoading.set(true);\n this.hasError.set(false);\n this.errorMessage.set('');\n\n const locationQuery = this.city();\n const shouldShowForecast = this.showForecast();\n\n // If we need forecast, request it directly to avoid duplicate calls\n // The forecast endpoint also returns current weather\n if (shouldShowForecast) {\n const forecastOptions: AXPWeatherRequestOptions & { days?: number } = {\n location: locationQuery,\n tempUnit: this.temperatureUnit(),\n useMockData: false, // Use real API, signals to use forecast endpoint\n days: this.forecastDays(),\n };\n\n this.isForecastLoading.set(true);\n this.weatherService.getForecast(forecastOptions).subscribe({\n next: (data) => {\n this.weatherData.set(data);\n this.isLoading.set(false);\n this.isForecastLoading.set(false);\n setTimeout(() => this.cdr.detectChanges());\n },\n error: (error) => {\n this.handleError(error);\n this.isLoading.set(false);\n this.isForecastLoading.set(false);\n this.cdr.detectChanges();\n },\n });\n return;\n }\n\n // If we only need current weather, use getWeather\n const requestOptions: AXPWeatherRequestOptions = {\n location: locationQuery,\n tempUnit: this.temperatureUnit(),\n useMockData: false, // Use real API\n };\n\n this.weatherService.getWeather(requestOptions).subscribe({\n next: (data) => {\n this.weatherData.set(data);\n this.isLoading.set(false);\n setTimeout(() => this.cdr.detectChanges());\n },\n error: (error) => {\n this.handleError(error);\n this.isLoading.set(false);\n this.cdr.detectChanges();\n },\n });\n }\n\n /**\n * Sets up the auto-refresh timer based on configuration\n */\n private setupRefreshTimer(): void {\n this.clearRefreshTimer();\n if (!this.autoRefresh()) return;\n\n const minInterval = 5; // 5 minutes minimum\n const intervalValue = Math.max(this.refreshInterval(), minInterval);\n const intervalMs = intervalValue * 60 * 1000;\n\n this.refreshSubscription = rxjsInterval(intervalMs)\n .pipe(\n switchMap(() => {\n // Always use the loadWeatherData method to determine the correct API call\n this.loadWeatherData();\n // Return an empty observable to satisfy the switchMap typing\n return new Observable<AXPWeatherData>((observer) => {\n observer.complete();\n });\n }),\n )\n .subscribe();\n }\n\n /**\n * Clears the refresh timer subscription\n */\n private clearRefreshTimer(): void {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n this.refreshSubscription = null;\n }\n }\n\n /**\n * Manually refreshes the weather data\n */\n protected refreshWeather(): void {\n this.loadWeatherData();\n }\n\n /**\n * Gets the current temperature based on selected unit\n */\n protected getCurrentTemperature(): number {\n if (!this.weatherData()) return 0;\n\n return this.temperatureUnit() === '°C' ? this.weatherData()!.current.tempC : this.weatherData()!.current.tempF;\n }\n\n /**\n * Gets the feels like temperature based on selected unit\n */\n protected getFeelsLikeTemperature(): number {\n if (!this.weatherData()) return 0;\n\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.current.feelsLikeC\n : this.weatherData()!.current.feelsLikeF;\n }\n\n /**\n * Gets the humidity percentage\n */\n protected getHumidity(): number {\n return this.weatherData()?.current.humidity || 0;\n }\n\n /**\n * Gets the wind speed based on selected unit\n */\n protected getWindSpeed(): number {\n if (!this.weatherData()) return 0;\n\n return this.windSpeedUnit() === 'km/h' ? this.weatherData()!.current.windKph : this.weatherData()!.current.windMph;\n }\n\n /**\n * Gets the current weather condition\n */\n protected getCurrentCondition(): string {\n const conditionId = this.weatherData()?.current.condition || '';\n return this.getConditionName(conditionId);\n }\n\n /**\n * Gets the formatted last updated time\n */\n protected getLastUpdated(): string {\n if (!this.weatherData()?.current.lastUpdated) return '';\n\n return new Date(this.weatherData()!.current.lastUpdated).toLocaleTimeString();\n }\n\n /**\n * Gets the appropriate icon class for a weather condition\n * @param conditionId The ID of the weather condition\n * @returns The Font Awesome icon class string\n */\n protected getConditionIcon(conditionId: string): string {\n if (!conditionId) {\n conditionId = 'unknown';\n }\n const svgIcon = this.weatherService.getCondition(conditionId).svgIcon;\n return `assets/images/weather/${svgIcon}`;\n }\n\n /**\n * Gets the display name for a weather condition\n * @param conditionId The ID of the weather condition\n * @returns The translated display name\n */\n protected getConditionName(conditionId: string): string {\n const condition = this.weatherService.getCondition(conditionId);\n if (!condition?.name) return 'weather.conditions.sunny';\n\n // Convert condition name to lowercase and replace spaces with hyphens\n const formattedName = condition.name.toLowerCase().replace(/\\s+/g, '-');\n return `weather.conditions.${formattedName}`;\n }\n\n /**\n * Gets the color for a weather condition\n * @param conditionId Weather condition ID\n * @returns CSS color value\n */\n protected getConditionColor(conditionId: string): string {\n const condition = this.weatherService.getCondition(conditionId);\n return condition?.color || '#999999';\n }\n\n /**\n * Cleans up chart resources\n * Required by AXPChartBaseComponent\n */\n protected cleanupChart(): void {\n this.clearRefreshTimer();\n }\n\n private handleError(error: any): void {\n console.error('Weather widget error:', error);\n this.hasError.set(true);\n\n // Check if it's a network error\n if (error.status === 0) {\n this.errorMessage.set('weather.error.network');\n return;\n }\n\n // Check if it's an API error\n if (error.status >= 400 && error.status < 500) {\n this.errorMessage.set('weather.error.api');\n return;\n }\n\n // Default error message\n this.errorMessage.set('weather.error.general');\n }\n\n protected getTemperatureUnit(): string {\n return this.temperatureUnit() === '°C' ? 'weather.units.celsius' : 'weather.units.fahrenheit';\n }\n\n protected getWindSpeedUnit(): string {\n return this.windSpeedUnit() === 'km/h' ? 'weather.units.kmh' : 'weather.units.mph';\n }\n\n protected getDayName(date: Date): string {\n const today = new Date();\n const tomorrow = new Date(today);\n tomorrow.setDate(tomorrow.getDate() + 1);\n\n if (date.toDateString() === today.toDateString()) {\n return 'weather.days.today';\n }\n if (date.toDateString() === tomorrow.toDateString()) {\n return 'weather.days.tomorrow';\n }\n\n const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\n return `weather.days.${days[date.getDay()]}`;\n }\n\n protected parseDate(dateStr: string): Date {\n return new Date(dateStr);\n }\n}\n","<!-- Weather Widget Component Template -->\n<div class=\"axp-weather-container\" #containerElement>\n <!-- Loading indicator -->\n @if (isLoading()) {\n <div class=\"axp-weather-loading-overlay\">\n <div class=\"axp-weather-loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading' | translate | async }}</span>\n </div>\n </div>\n }\n\n <!-- Error message -->\n @if (hasError()) {\n <axp-state-message\n mode=\"error\"\n icon=\"fa-solid fa-exclamation-triangle\"\n [title]=\"'@dashboard:weather.error.title'\"\n [description]=\"errorMessage()\"\n >\n <button slot=\"actions\" class=\"axp-weather-retry-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.retry' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n\n <!-- Weather content - only show when we have data -->\n @if (weatherData()) {\n <!-- Background decorations based on weather condition -->\n <div class=\"axp-weather-background-decorations\">\n <div class=\"axp-weather-decoration\" [ngClass]=\"weatherData()?.current?.condition?.toLowerCase()\"></div>\n <div class=\"axp-weather-gradient-overlay\"></div>\n </div>\n\n <div class=\"axp-weather-inner\">\n <!-- Location information section -->\n <div class=\"axp-weather-location-info\">\n <div class=\"axp-weather-location-icon\">\n <i class=\"fa-solid fa-location-dot\"></i>\n </div>\n <div class=\"axp-weather-location-text\">\n <h2 class=\"axp-weather-location-name\">{{ city() }}</h2>\n </div>\n </div>\n\n <!-- Current weather conditions section -->\n <div class=\"axp-weather-current-weather\">\n <!-- Weather icon and condition name -->\n @if (showCurrentCondition()) {\n <div class=\"axp-weather-condition\">\n <div class=\"axp-weather-icon-wrapper\">\n <div class=\"axp-weather-icon\">\n <img [src]=\"getConditionIcon(weatherData()?.current?.condition || '')\" />\n </div>\n <div\n class=\"axp-weather-icon-glow\"\n [style.background-color]=\"getConditionColor(weatherData()?.current?.condition || '')\"\n ></div>\n </div>\n <div class=\"axp-weather-condition-name\">\n {{ getCurrentCondition() | translate | async }}\n </div>\n </div>\n }\n\n <!-- Temperature display -->\n @if (showTemperature()) {\n <div class=\"axp-weather-temperature\">\n <span class=\"axp-weather-temperature-value\">{{ getCurrentTemperature() }}</span>\n <span class=\"axp-weather-temperature-unit\">{{ getTemperatureUnit() | translate | async }}</span>\n </div>\n }\n </div>\n\n <!-- Weather details section (humidity and wind) -->\n @if (showHumidity() || showWind()) {\n <div class=\"axp-weather-details\">\n <!-- Humidity information -->\n @if (showHumidity()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-droplet\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.humidity' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">{{ getHumidity() }}%</div>\n </div>\n </div>\n }\n\n <!-- Wind speed information -->\n @if (showWind()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-wind\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.wind' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">\n {{ getWindSpeed() }} {{ getWindSpeedUnit() | translate | async }}\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Weather forecast section -->\n @if (showForecast() && weatherData()?.forecast) {\n <div class=\"axp-weather-forecast\">\n <div class=\"axp-weather-forecast-header\">\n <h3 class=\"axp-weather-forecast-title\">\n <i class=\"fa-solid fa-calendar-days\"></i>\n <span class=\"ax-px-1\">{{ '@dashboard:weather.forecast' | translate | async }}</span>\n </h3>\n </div>\n <!-- Loading indicator for forecast -->\n <!-- @if (isForecastLoading()) {\n <div class=\"axp-weather-forecast-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading-forecast' | translate | async }}</span>\n </div>\n } -->\n <!-- Scrollable forecast days display -->\n <div class=\"axp-weather-forecast-items\">\n @for (day of displayedForecast(); track day.day) {\n <div class=\"axp-weather-forecast-day\">\n <div class=\"axp-weather-forecast-day-name\">\n {{ getDayName(parseDate(day.date)) | translate | async }}\n </div>\n <div class=\"axp-weather-forecast-icon\" [title]=\"getConditionName(day.condition) | translate | async\">\n <img [src]=\"getConditionIcon(day.condition || '')\" />\n </div>\n <div class=\"axp-weather-forecast-temps\">\n <span class=\"axp-weather-forecast-low\">\n {{ temperatureUnit() === '°C' ? day.minTempC : day.minTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n <span class=\"axp-weather-forecast-high\">\n {{ temperatureUnit() === '°C' ? day.maxTempC : day.maxTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Last updated timestamp -->\n <div class=\"axp-weather-last-updated\">\n <span>{{ '@dashboard:weather.last-updated' | translate | async }}: {{ getLastUpdated() }}</span>\n </div>\n\n <!-- Manual refresh button -->\n <div class=\"axp-weather-refresh-action\">\n <button\n class=\"axp-weather-refresh-button\"\n (click)=\"refreshWeather()\"\n [attr.aria-label]=\"'@dashboard:weather.refresh' | translate | async\"\n [title]=\"'@dashboard:weather.refresh' | translate | async\"\n >\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.refresh' | translate | async }}</span>\n </button>\n </div>\n </div>\n } @else if (!isLoading() && !hasError()) {\n <!-- No data state (not loading, no error) -->\n <axp-state-message\n icon=\"fa-solid fa-cloud-sun\"\n [title]=\"'@dashboard:weather.no-data.title'\"\n [description]=\"'@dashboard:weather.no-data.description'\"\n >\n <button slot=\"actions\" class=\"axp-weather-refresh-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.load-data' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\n\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../chart.type';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_BEHAVIOR_PROPERTY_GROUP,\n AXP_DATA_PROPERTY_GROUP,\n} from '@acorex/platform/layout/widgets';\n\n/**\n * Weather Widget Configuration\n * Provides customization options for displaying weather data and forecast\n */\nexport const AXPWeatherWidget: AXPWidgetConfig = {\n name: 'weather',\n title: 'Weather Widget',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-cloud-sun',\n properties: [\n /* Location Settings */\n {\n name: 'city',\n title: '@dashboard:widgets.weather.city',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 'New York',\n dataType: 'string',\n interface: {\n name: 'city',\n path: 'options.city',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n\n /* Display Options */\n // {\n // name: 'showCurrentCondition',\n // title: 'Show Current Condition',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showCurrentCondition',\n // path: 'options.showCurrentCondition',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n // {\n // name: 'showTemperature',\n // title: 'Show Temperature',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showTemperature',\n // path: 'options.showTemperature',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n // {\n // name: 'showCurrentCondition',\n // title: 'Show Current Condition',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showCurrentCondition',\n // path: 'options.showCurrentCondition',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n // {\n // name: 'showTemperature',\n // title: 'Show Temperature',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showTemperature',\n // path: 'options.showTemperature',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n {\n name: 'showHumidity',\n title: '@dashboard:widgets.weather.show-humidity',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showHumidity',\n path: 'options.showHumidity',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showWind',\n title: '@dashboard:widgets.weather.show-wind',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showWind',\n path: 'options.showWind',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showForecast',\n title: '@dashboard:widgets.weather.show-forecast',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showForecast',\n path: 'options.showForecast',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'forecastDays',\n title: '@dashboard:widgets.weather.forecast-days',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 5,\n dataType: 'number',\n interface: {\n name: 'forecastDays',\n path: 'options.forecastDays',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 7,\n step: 1,\n },\n },\n },\n visible: true,\n },\n\n /* Units Settings */\n {\n name: 'temperatureUnit',\n title: '@dashboard:widgets.weather.temperature-unit',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: '°C',\n dataType: 'string',\n interface: {\n name: 'temperatureUnit',\n path: 'options.temperatureUnit',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ['°C', '°F'],\n },\n },\n },\n visible: true,\n },\n {\n name: 'windSpeedUnit',\n title: '@dashboard:widgets.weather.wind-speed-unit',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 'km/h',\n dataType: 'string',\n interface: {\n name: 'windSpeedUnit',\n path: 'options.windSpeedUnit',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ['km/h', 'mph', 'm/s'],\n },\n },\n },\n visible: true,\n },\n\n /* Refresh Settings */\n {\n name: 'autoRefresh',\n title: '@dashboard:widgets.weather.auto-refresh',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'autoRefresh',\n path: 'options.autoRefresh',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'refreshInterval',\n title: '@dashboard:widgets.weather.refresh-interval',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: 15,\n dataType: 'number',\n interface: {\n name: 'refreshInterval',\n path: 'options.refreshInterval',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [5, 10, 15, 30, 60],\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./weather-widget.component').then((c) => c.AXPWeatherWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 7,\n minWidth: 2,\n minHeight: 4,\n maxWidth: 4,\n maxHeight: 8,\n },\n md: {\n width: 3,\n height: 7,\n minWidth: 2,\n minHeight: 4,\n maxWidth: 4,\n maxHeight: 8,\n },\n sm: {\n height: 7,\n minHeight: 4,\n maxHeight: 8,\n },\n },\n },\n};\n\n/**\n * Type declaration to register the weather widget type\n */\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n weather: 'weather';\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport {\n AXPAdvancedWeatherWidget,\n AXPAnalogClockWidget,\n AXPBarChartWidget,\n AXPDonutChartWidget,\n AXPGaugeChartWidget,\n AXPLineChartWidget,\n AXPMinimalWeatherWidget,\n AXPStickyNoteWidget,\n} from './features/shared/widgets';\nimport { AXPDashboardShortcutWidget } from './features/shared/widgets/dashboard-shortcut';\n\n//#endregion\n\n//#region ---- Dashboard Management Widgets Provider ----\n\nconst DASHBOARD_WIDGETS = [\n AXPDashboardShortcutWidget,\n AXPDonutChartWidget,\n AXPBarChartWidget,\n AXPLineChartWidget,\n AXPGaugeChartWidget,\n AXPStickyNoteWidget,\n AXPMinimalWeatherWidget,\n AXPAdvancedWeatherWidget,\n AXPAnalogClockWidget,\n];\n\n@Injectable()\nexport class AXMDashboardManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return DASHBOARD_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Dashboard Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const DashboardManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXPSystemActionType } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Permission Keys ----\n\nconst moduleKey = RootConfig.module.name;\n\nexport const AXMPermissionsKeys = {\n DashboardManagement: {\n Management: `${moduleKey}:${AXPSystemActionType.Manage}`,\n Dashboard: {\n Management: `${moduleKey}:Dashboard:${AXPSystemActionType.Manage}`,\n View: `${moduleKey}:Dashboard:${AXPSystemActionType.View}`,\n Edit: `${moduleKey}:Dashboard:${AXPSystemActionType.Update}`,\n Delete: `${moduleKey}:Dashboard:${AXPSystemActionType.Delete}`,\n Create: `${moduleKey}:Dashboard:${AXPSystemActionType.Create}`,\n },\n },\n} as const;\n\n//#endregion\n\n\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable, Injector } from '@angular/core';\nimport { AXMPermissionsKeys } from './permission.keys';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly translateService: AXTranslationService;\n\n constructor(private injector: Injector) {\n this.translateService = this.injector.get(AXTranslationService);\n }\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const trans = async (key: string) => await this.translateService.translateAsync(`@dashboard-management:dashboards.permissions.${key}`);\n\n const keys = AXMPermissionsKeys.DashboardManagement;\n\n context.addGroup(RootConfig.module.name, await trans('manage.title'), await trans('manage.description'))\n //\n .addPermission(keys.Dashboard.Management, await trans('dashboards.actions.manage.title'), await trans('dashboards.actions.manage.description'))\n .addChild(keys.Dashboard.View, await trans('dashboards.actions.view.title'), await trans('dashboards.actions.view.description'))\n .addChild(keys.Dashboard.Create, await trans('dashboards.actions.create.title'), await trans('dashboards.actions.create.description'))\n .addChild(keys.Dashboard.Edit, await trans('dashboards.actions.edit.title'), await trans('dashboards.actions.edit.description'))\n .addChild(keys.Dashboard.Delete, await trans('dashboards.actions.delete.title'), await trans('dashboards.actions.delete.description'))\n .endPermission()\n //\n .endGroup();\n }\n}\n\n","export const AXPDashboardManagementMenuKeys = {\n Root: 'DashboardManagement:Menu',\n Dashboards: 'DashboardManagement:Menu:Dashboards',\n} as const;\n\n","import { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from './const';\nimport { AXPDashboardManagementMenuKeys } from './menu.keys';\nimport { AXMPermissionsKeys } from './permission.keys';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const scope = RootConfig.config.i18n;\n const module = RootConfig.module;\n const appName = this.sessionService.application?.name;\n\n const contentMenu = context.find(AXPCommonMenuKeys.Content);\n if (!contentMenu.exists) {\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXPCommonMenuKeys.Content,\n priority: 10,\n text: '@general:menus.content.title',\n icon: 'fa-light fa-paint-brush',\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Content).addItems([\n {\n name: AXPDashboardManagementMenuKeys.Dashboards,\n text: '@dashboard-management:dashboards.menus.dashboards.title',\n path: `${appName}/admin-dashboard`,\n icon: RootConfig.entities.dashboard.icon,\n priority: 2,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXMPermissionsKeys.DashboardManagement.Management],\n },\n },\n ]);\n }\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport {\n AXPEntityDefinitionLoader,\n AXPEntityDefinitionPreloader,\n AXPEntityPreloadEntity,\n} from '@acorex/platform/layout/entity';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {\n private injector = inject(Injector);\n\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName == RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.dashboard.name:\n return (await import('./entities/dashboard/dashboard.entity')).dashboardFactory(this.injector);\n }\n }\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n","import { AXPEntity, AXPEntityCommandScope, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\n\nexport async function dashboardFactory(injector: Injector): Promise<AXPEntity | null> {\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.dashboard.name,\n title: RootConfig.entities.dashboard.title,\n icon: RootConfig.entities.dashboard.icon,\n formats: {\n individual: RootConfig.entities.dashboard.title,\n plural: RootConfig.entities.dashboard.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.dashboard.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'section',\n options: {\n sort: {\n enabled: false,\n },\n filter: {\n advance: {\n enabled: false,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n },\n\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: true,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n\n {\n name: 'description',\n title: `t(\"description\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: false,\n },\n filter: {\n advance: {\n enabled: false,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }, { name: 'description' }],\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n\n {\n name: 'description',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n order: 3,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n\n {\n name: 'description',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n order: 3,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n\n {\n name: 'description',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n order: 3,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMCommonDashboardEntityModel } from './dashboard.types';\n\nexport abstract class AXMDashboardService extends AXMEntityCrudServiceImpl<string, AXMCommonDashboardEntityModel> {}\n\n@Injectable()\nexport class AXMDashboardServiceImpl extends AXMDashboardService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.dashboard.name}`);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXMDashboardService, AXMDashboardServiceImpl } from './dashboard.service';\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMDashboardService,\n useClass: AXMDashboardServiceImpl,\n },\n ],\n})\nexport class AXMDashboardEntityModule { }\n","// Entity Services\nexport * from './dashboard';\n\n// Entity Modules\nexport * from './dashboard/dashboard.module';\n","import { AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_PAGES, AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMDashboardManagementWidgetsProvider } from './widget-definition.provider';\nimport { AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsModule } from '@acorex/platform/layout/widgets';\nimport { AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';\nimport { DashboardManagementManifest } from './manifest';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { inject, NgModule } from '@angular/core';\nimport { Route, Routes } from '@angular/router';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMEntityProvider } from './entity.provider';\n\n// Entity Modules\nimport { AXMDashboardEntityModule } from './entities';\n\nimport {\n AXPAdvancedWeatherWidget,\n AXPAnalogClockWidget,\n AXPBarChartWidget,\n AXPDonutChartWidget,\n AXPGaugeChartWidget,\n AXPLineChartWidget,\n AXPMinimalWeatherWidget,\n AXPStickyNoteWidget,\n} from './features/shared/widgets';\nimport { AXPDashboardShortcutWidget } from './features/shared/widgets/dashboard-shortcut';\n\n\n\nfunction createAppRoute(): Route {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n return {\n path: ':app',\n canActivate: [AXPAuthGuard],\n loadComponent: () => {\n return config.viewers.root();\n },\n children: [\n {\n path: 'dashboard',\n loadComponent: () =>\n import('./features/home-dashboard/dashboard-home/home-dashboard').then((c) => c.AXMDashboardHomeComponent),\n },\n {\n path: 'admin-dashboard',\n data: {\n isAdmin: true,\n },\n loadComponent: () =>\n import('./features/home-dashboard/dashboard-home/home-dashboard').then((c) => c.AXMDashboardHomeComponent),\n },\n ],\n };\n}\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n // Entity Modules\n AXMDashboardEntityModule,\n ],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },\n {\n provide: AXP_HOME_PAGES,\n multi: true,\n useFactory: () => [\n {\n key: 'dashboard',\n title: 'Dashboard',\n route: createAppRoute(),\n },\n ],\n },\n // Module-specific providers (not part of manifest system)\n AXPWidgetsModule,\n {\n provide: AXP_HOME_PAGE_DEFAULT_KEY,\n useValue: 'dashboard',\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: DashboardManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\n },\n ],\n})\nexport class AXMDashboardManagementModule { }\n","import { AXEvent, AXItemClickEvent } from '@acorex/cdk/common';\nimport { AXButtonItemComponent, AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetRendererDirective } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n input,\n output,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'axm-dashboard-widget-wrapper',\n templateUrl: './dashboard-widget-wrapper.html',\n styleUrls: ['./dashboard-widget-wrapper.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule, AXDropdownModule, AXTranslationModule, CommonModule],\n standalone: true,\n})\nexport class AXMDashboardWidgetWrapperComponent {\n title = input<string | null>(null);\n\n onDelete = output<void>();\n onConfiguration = output<void>();\n onValueChanged = output<unknown>();\n onOptionsChanged = output<unknown>();\n\n widget = contentChild(AXPWidgetRendererDirective);\n\n #init = afterNextRender(() => {\n this.widget()?.onOptionsChanged.subscribe((c) => {\n console.log(c);\n this.onOptionsChanged.emit(c.widget.options());\n });\n this.widget()?.onValueChanged.subscribe((c) => {\n console.log(c);\n this.onValueChanged.emit(c.widget.getValue());\n });\n });\n\n hasConfiguration = input<boolean>(true);\n isLocked = input<boolean>(false);\n isDropdownOpen = signal(false);\n\n handleOnItemClick(event: AXItemClickEvent<AXButtonItemComponent>) {\n switch (event.item.data) {\n case 'delete':\n this.onDelete.emit();\n break;\n case 'configuration':\n this.onConfiguration.emit();\n break;\n default:\n break;\n }\n this.isDropdownOpen.set(false);\n }\n log(event: AXEvent) {\n console.log('Dropdown event:', event);\n }\n}\n","<section class=\"ax-relative ax-size-full ax-flex ax-flex-col ax-group ax-overflow-hidden\">\n <!-- Action button - stays absolute -->\n @if(!isLocked()) {\n <div\n class=\"ax-p-[0.6125rem] ax-absolute ax-top-0 ax-end-0 ax-z-[9] ax-invisible group-hover:ax-visible md:group-hover:ax-visible\"\n [class.!ax-visible]=\"isDropdownOpen()\"\n (touchstart)=\"isDropdownOpen.set(true)\"\n >\n <ax-button class=\"ax-sm ax-main-button\" [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel (onOpened)=\"isDropdownOpen.set(true)\" (onClosed)=\"isDropdownOpen.set(false)\">\n <ng-container *translate=\"let t\">\n <ax-button-item-list (onItemClick)=\"handleOnItemClick($event)\">\n @if(hasConfiguration()){\n <ax-button-item\n [data]=\"'configuration'\"\n [text]=\"('@dashboard:configuration' | translate | async) || 'configuration'\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-cog\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [data]=\"'delete'\"\n [text]=\"('@general:actions.delete.title' | translate | async)!\"\n color=\"danger\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }\n\n <!-- Title section -->\n @if(title()) {\n <div class=\"ax-ps-5 ax-pe-8 ax-py-3 ax-border-b\">\n <h3 class=\"ax-text-start ax-text-lg ax-font-medium ax-truncate\">{{title()}}</h3>\n </div>\n }\n\n <!-- Content section -->\n <div class=\"ax-overflow-hidden ax-h-full\">\n <ng-content></ng-content>\n </div>\n</section>\n","export enum AXPHomeDashboardSetting {\n CurrentDashboard = 'DashboardManagement:Setting:Home.CurrentDashboard',\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyViewerComponent } from '@acorex/platform/layout/components';\nimport { Component, OnInit, signal } from '@angular/core';\n\n@Component({\n template: `\n @if(widget) {\n <div class=\"ax-px-1\">\n <axp-widget-property-viewer (onChanged)=\"handlePropertyChange($event)\" [widget]=\"widget\">\n </axp-widget-property-viewer>\n </div>\n }\n <ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button text=\"Save\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-save\"></ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n imports: [AXButtonModule, AXDecoratorModule, AXPWidgetPropertyViewerComponent],\n})\nexport class AXMConfigurationPopup extends AXBasePageComponent implements OnInit {\n widget!: AXPWidgetNode;\n protected readonly widgetData = signal<AXPWidgetNode | null>(null);\n\n override ngOnInit(): void {\n this.widgetData.set(this.widget);\n }\n\n protected async handleClose(isCanceled = false): Promise<void> {\n this.close({\n isCanceled,\n widget: this.widgetData(),\n });\n }\n\n protected handlePropertyChange(event: AXPWidgetPropertiesChangedEvent): void {\n this.widgetData.set(event.values);\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMDashboardLayout } from '../dashboard-home';\nimport { AXMConfigurationPopup } from './configuration-popup';\nimport { AXMSecurityManagementRolesEntityService } from '@acorex/modules/security-management';\n\n@Injectable({ providedIn: 'root' })\nexport class AXMDashboardPopupService {\n private readonly popupService = inject(AXPopupService);\n private readonly translateService = inject(AXTranslationService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly roleService = inject(AXMSecurityManagementRolesEntityService);\n private readonly sessionService = inject(AXPSessionService);\n\n async generateDashboardLayout(\n data: Partial<AXMDashboardLayout>,\n isAdmin: boolean,\n ): Promise<AXMDashboardLayout | void> {\n const roles = isAdmin\n ? (\n await this.roleService\n .query({ skip: 0, take: 100 })\n .catch(() => ({ items: [] as Array<{ id: string; title: string }> }))\n ).items.map((i: { id: string; title: string }) => ({ id: i.id, title: i.title }))\n : [];\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMDashboardLayout | undefined>((dialog) => {\n dialog\n .setTitle('@dashboard:dashboard-info')\n .setSize('sm')\n .setContext({\n title: (data?.title ?? '').toString(),\n description: (data?.description ?? '').toString(),\n selectedRoleIds: (data as any)?.roleIds ?? [],\n isDisabled: (data as any)?.isDeleted ?? false,\n isLocked: (data as any)?.locked ?? false,\n isAdmin,\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.title', (field) => {\n field.path('title');\n field.textBox({ placeholder: '@general:terms.common.title', validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({ placeholder: '@general:terms.common.description', rows: 3 });\n })\n .formField('@dashboard:roles', (field) => {\n field.path('selectedRoleIds');\n field.visible(!isAdmin ? 'false' : 'true');\n field.selectionList({\n valueField: 'id',\n textField: 'title',\n dataSource: roles,\n multiple: true,\n placeholder: '@dashboard:select-roles',\n });\n })\n .formField('@dashboard:disable', (field) => {\n field.path('isDisabled');\n field.visible(!isAdmin ? 'false' : 'true');\n field.toggleSwitch({});\n })\n .formField('@dashboard:lock', (field) => {\n field.path('isLocked');\n field.visible(!isAdmin ? 'false' : 'true');\n field.toggleSwitch({});\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return undefined;\n }\n const formData = context as Record<string, unknown>;\n const now = new Date();\n const userId = this.sessionService.user?.id;\n return {\n ...(data as any),\n title: (formData['title'] ?? '').toString().trim(),\n description: (formData['description'] ?? '').toString().trim(),\n roleIds: isAdmin ? (formData['selectedRoleIds'] ?? []) : undefined,\n isDeleted: isAdmin ? Boolean(formData['isDisabled']) : undefined,\n locked: isAdmin ? Boolean(formData['isLocked']) : undefined,\n scope: isAdmin ? 'T' : 'U',\n createdBy: userId,\n createdAt: now,\n updatedBy: userId,\n updatedAt: now,\n } as AXMDashboardLayout;\n });\n })\n .show();\n\n return result;\n }\n\n async handlePopupConfiguration(widget: AXPWidgetNode): Promise<AXPWidgetNode | void> {\n const result = await this.popupService.open(AXMConfigurationPopup, {\n header: true,\n size: 'sm',\n draggable: true,\n hasBackdrop: true,\n title: await this.translateService.translateAsync('@dashboard:widget-configuration'),\n data: { widget },\n });\n\n if (!result.data) {\n return;\n }\n\n const { isCanceled, ...rest } = result.data;\n if (isCanceled) {\n return;\n }\n\n return rest.widget as AXPWidgetNode;\n }\n}\n","//#region ---- Imports ----\n\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXGridLayoutEvent, AXGridLayoutNode, AXGridLayoutOptions } from '@acorex/components/grid-layout-builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPDataGenerator, AXPDeviceService, AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPWidgetPickerService } from '@acorex/platform/layout/designer';\nimport { AXPWidgetGroupEnum, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { computed, effect, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { AXMDashboardService } from '../../../entities/dashboard/dashboard.service';\nimport { AXMCommonDashboardEntityModel } from '../../../entities/dashboard/dashboard.types';\nimport { AXPHomeDashboardSetting } from '../../../settings.keys';\nimport { AXMDashboardPopupService } from '../dashboard-popups/dashboard-popup.service';\nimport { AXMDashboardBreakpoint, AXMDashboardLayout, AXMDashboardWidgetData } from './home-dashboard.type';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * State container for dashboard feature.\n */\ninterface DashboardState {\n dashboards: AXMDashboardLayout[];\n allDashboards: AXMDashboardLayout[];\n currentDashboardId: string | null;\n isAdmin: boolean;\n dashboardsOption: AXGridLayoutOptions;\n isLoading: boolean;\n currentBreakpoint: AXMDashboardBreakpoint;\n /** True while a breakpoint transition is in progress; suppresses layout saves */\n isBreakpointTransitioning: boolean;\n}\n\ntype SessionUserMinimal = { id?: string; role?: string } | undefined | null;\n\n//#endregion\n\n//#region ---- Utility Functions ----\n\n/** Width threshold for switching between lg (12 col) and md (6 col) breakpoints */\nconst BREAKPOINT_MD_WIDTH = 768;\nconst BREAKPOINT_MD_COLUMN = 6;\nconst BREAKPOINT_SM_WIDTH = 576;\nconst BREAKPOINT_SM_COLUMN = 1;\n\n/**\n * Returns the current dashboard breakpoint based on window width.\n * lg: > 768px (12 columns), md: 481–768px (6 columns), sm: <= 480px (1 column)\n */\nconst getBreakpointFromWidth = (): AXMDashboardBreakpoint => {\n if (typeof window === 'undefined') return 'lg';\n const width = window.innerWidth;\n if (width <= BREAKPOINT_SM_WIDTH) return 'sm';\n if (width <= BREAKPOINT_MD_WIDTH) return 'md';\n return 'lg';\n};\n\n/**\n * Returns the grid column count for a given breakpoint.\n */\nconst getColumnsForBreakpoint = (bp: AXMDashboardBreakpoint): number => {\n switch (bp) {\n case 'sm':\n return BREAKPOINT_SM_COLUMN;\n case 'md':\n return BREAKPOINT_MD_COLUMN;\n case 'lg':\n default:\n return 12;\n }\n};\n\n/**\n * Creates the initial state for the dashboard store.\n */\nconst createInitialState = (): DashboardState => ({\n dashboards: [],\n allDashboards: [],\n currentDashboardId: null,\n isAdmin: false,\n dashboardsOption: {\n float: false,\n cellHeight: 75,\n gap: 5,\n minRow: 9,\n column: getColumnsForBreakpoint(getBreakpointFromWidth()),\n },\n isLoading: false,\n currentBreakpoint: getBreakpointFromWidth(),\n isBreakpointTransitioning: false,\n});\n\n/**\n * Migrates a widget config from the old flat format to the new per-breakpoint format.\n * Old format: { id, x, y, width, height, minWidth, ... }\n * New format: { id, lg: { ... }, md: { ... }, sm: { ... } }\n */\nconst migrateWidgetConfig = (widget: AXMDashboardWidgetData): AXMDashboardWidgetData => {\n const config = widget.config as any;\n // Already in new format (has lg key as an object)\n if (config && typeof config.lg === 'object' && config.lg !== null) {\n return widget;\n }\n // Old flat format: convert to per-breakpoint\n const { id, ...rest } = config || {};\n const widgetId = id || AXPDataGenerator.uuid();\n return {\n ...widget,\n config: {\n id: widgetId,\n lg: { id: widgetId, ...rest } as AXGridLayoutNode,\n md: { id: widgetId, ...rest } as AXGridLayoutNode,\n sm: { id: widgetId, width: 1, height: rest.height || 2 } as AXGridLayoutNode,\n },\n };\n};\n\n/**\n * Maps an entity model to a dashboard layout model.\n * Automatically migrates old flat widget configs to the new per-breakpoint format.\n */\nconst modelToDashboardLayout = (model: AXMCommonDashboardEntityModel): AXMDashboardLayout => ({\n id: model.id || '',\n title: model.title,\n description: model.description,\n widgets: (model.widgets || []).map(migrateWidgetConfig),\n createdBy: model.userId ?? model.auditInfo?.created?.by?.id,\n roleIds: model.roleIds,\n isDeleted: model.isDeleted,\n locked: model.locked,\n createdAt: model.auditInfo?.created?.at,\n updatedAt: model.auditInfo?.updated?.at,\n updatedBy: model.auditInfo?.updated?.by?.id,\n scope: model.scope,\n});\n\n/**\n * Maps a dashboard layout to an entity model for persistence.\n */\nconst dashboardLayoutToModel = (layout: AXMDashboardLayout): AXMCommonDashboardEntityModel => ({\n id: layout.id,\n name: layout.title,\n title: layout.title,\n description: layout.description || '',\n widgets: layout.widgets,\n userId: layout.createdBy,\n roleIds: layout.roleIds,\n isDeleted: layout.isDeleted,\n locked: layout.locked,\n auditInfo: {\n created: layout.createdAt\n ? { at: layout.createdAt, by: layout.createdBy ? ({ id: layout.createdBy, type: 'user' } as any) : undefined }\n : undefined,\n updated: layout.updatedAt\n ? { at: layout.updatedAt, by: layout.updatedBy ? ({ id: layout.updatedBy, type: 'user' } as any) : undefined }\n : undefined,\n },\n scope: layout.scope,\n});\n\n/**\n * Safely reads the current user id from the session service.\n */\nconst readUserId = (sessionService: AXPSessionService): string | undefined => {\n const candidate = sessionService.user as SessionUserMinimal;\n return candidate?.id;\n};\n\n/**\n * Safely reads the current user role from the session service.\n */\nconst readUserRole = (sessionService: AXPSessionService): string | undefined => {\n const candidate = sessionService.user as SessionUserMinimal;\n return candidate?.role;\n};\n\n/**\n * Extracts role ids from a user entity returned by AXMUsersEntityService.\n */\nconst extractUserRoleIds = (user: any): string[] => {\n if (!user) return [];\n if (Array.isArray(user.roleIds) && user.roleIds.length > 0) {\n return user.roleIds.filter((r: unknown): r is string => typeof r === 'string');\n }\n if (Array.isArray(user.roles) && user.roles.length > 0) {\n const ids = user.roles\n .map((r: any) => (typeof r?.id === 'string' ? r.id : undefined))\n .filter((id: unknown): id is string => typeof id === 'string');\n if (ids.length > 0) return ids;\n }\n if (typeof user.roleId === 'string' && user.roleId) return [user.roleId];\n if (typeof user.role === 'string' && user.role) return [user.role];\n return [];\n};\n\n/**\n * Determines whether the given dashboard contains the provided user role.\n */\nconst hasMatchingRole = (dashboard: AXMDashboardLayout, userRole?: string): boolean => {\n if (!userRole) return false;\n const roleIds = dashboard.roleIds;\n return Array.isArray(roleIds) && roleIds.length > 0 && roleIds.includes(userRole);\n};\n\n/**\n * Computes effective layout options based on device, lock, admin and role restrictions.\n * Always derives drag/resize state from the dashboard model — never from base options.\n */\nconst deriveLayoutOptions = (\n baseOptions: AXGridLayoutOptions,\n dashboard: AXMDashboardLayout | undefined,\n isAdmin: boolean,\n isDesktop: boolean,\n userRole?: string,\n): AXGridLayoutOptions => {\n const { disableDrag: _dd, disableResize: _dr, ...cleanBase } = baseOptions;\n\n if (!dashboard) return cleanBase;\n // if (!isDesktop) return { ...cleanBase, disableDrag: true, disableResize: true };\n if (dashboard.locked === true) return { ...cleanBase, disableDrag: true, disableResize: true };\n if (isAdmin) return cleanBase;\n\n const roleMatched = hasMatchingRole(dashboard, userRole);\n if (roleMatched && dashboard.scope === 'T') {\n return { ...cleanBase, disableDrag: true, disableResize: true };\n }\n return cleanBase;\n};\n\n/**\n * Checks if a widget is locked for the current user based on dashboard and role context.\n */\nconst isWidgetLockedForUser = (\n dashboard: AXMDashboardLayout | undefined,\n isAdmin: boolean,\n userRole?: string,\n): boolean => {\n if (!dashboard) return false;\n if (dashboard.locked === true) return true;\n if (isAdmin) return false;\n return hasMatchingRole(dashboard, userRole) && dashboard.scope === 'T';\n};\n\n/**\n * Determines if a widget can be configured by the current user.\n */\nconst canConfigureWidgetForUser = (\n dashboard: AXMDashboardLayout | undefined,\n isAdmin: boolean,\n userRole: string | undefined,\n widgetHasConfiguration: boolean,\n): boolean => {\n if (!dashboard) return true;\n if (isAdmin) return widgetHasConfiguration;\n if (dashboard.locked === true) return false;\n if (hasMatchingRole(dashboard, userRole) && dashboard.scope === 'T') return false;\n return widgetHasConfiguration;\n};\n\n/**\n * Filters dashboards for current user scope and permissions.\n */\nconst filterDashboardsForUser = (\n dashboards: AXMDashboardLayout[],\n isAdmin: boolean,\n userId: string | undefined,\n userRole: string | undefined,\n): AXMDashboardLayout[] => {\n if (!userId) return dashboards;\n\n if (isAdmin) {\n return dashboards.filter((d) => d.scope === 'T');\n }\n\n return dashboards.filter((d) => {\n const isUserDashboard = d.scope === 'U' && d.createdBy === userId;\n const roleMatched = hasMatchingRole(d, userRole);\n const isTenantDashboardWithRole = d.scope === 'T' && roleMatched && d.isDeleted !== true;\n return isUserDashboard || isTenantDashboardWithRole;\n });\n};\n\n//#endregion\n\n//#region ---- Signal Store ----\n/**\n * Dashboard Signal Store: manages dashboards, widgets and permissions.\n */\nexport const AXMDashboardStore = signalStore(\n { providedIn: 'root' },\n\n //#region ---- Initial State ----\n withState(() => createInitialState()),\n //#endregion\n\n //#region ---- Computed Properties ----\n withComputed((state, sessionService = inject(AXPSessionService), deviceService = inject(AXPDeviceService)) => ({\n selectedDashboard: computed(\n () => state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId()) || null,\n ),\n isUserAdmin: computed(() => state.isAdmin()),\n availableDashboards: computed(() => state.allDashboards()),\n currentLayoutOptions: computed(() => {\n const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());\n const baseOptions = state.dashboardsOption();\n const isDesktop = deviceService.isDesktopDevice();\n const userRole = readUserRole(sessionService);\n // Dynamically set column count based on the current breakpoint\n const bp = state.currentBreakpoint();\n const optionsWithColumn = { ...baseOptions, column: getColumnsForBreakpoint(bp) };\n return deriveLayoutOptions(\n optionsWithColumn,\n currentDashboard || undefined,\n state.isAdmin(),\n isDesktop,\n userRole,\n );\n }),\n /**\n * Returns the current dashboard's widgets with their resolved breakpoint options.\n * This computed depends on BOTH the dashboard widgets AND currentBreakpoint,\n * ensuring the @for source produces a new array when the breakpoint changes.\n */\n currentWidgets: computed(() => {\n const dashboard = state.dashboards().find((d) => d.id === state.currentDashboardId());\n const bp = state.currentBreakpoint();\n if (!dashboard?.widgets) return [];\n return dashboard.widgets.map((widget) => ({\n ...widget,\n resolvedOptions: widget.config[bp],\n }));\n }),\n canConfigureWidget: computed(() => (widget: AXMDashboardWidgetData) => {\n const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());\n const userRole = readUserRole(sessionService);\n const widgetHasConfiguration = widget.node?.options?.['hasConfiguration'] ?? true;\n return canConfigureWidgetForUser(\n currentDashboard || undefined,\n state.isAdmin(),\n userRole,\n widgetHasConfiguration,\n );\n }),\n isWidgetLocked: computed(() => (widget: AXMDashboardWidgetData) => {\n const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());\n const userRole = readUserRole(sessionService);\n return isWidgetLockedForUser(currentDashboard || undefined, state.isAdmin(), userRole);\n }),\n })),\n //#endregion\n\n //#region ---- Methods ----\n withMethods(\n (\n store,\n dashboardPopup = inject(AXMDashboardPopupService),\n dialogService = inject(AXDialogService),\n translationService = inject(AXTranslationService),\n widgetPickerService = inject(AXPWidgetPickerService),\n dashboardService = inject(AXMDashboardService),\n settingsService = inject(AXPSettingsService),\n sessionService = inject(AXPSessionService),\n deviceService = inject(AXPDeviceService),\n usersService = inject(AXMUsersEntityService),\n ) => {\n // Load dashboards from service - runs on init and when admin flag changes\n effect(() => {\n const isAdmin = store.isUserAdmin();\n loadDashboards(isAdmin);\n });\n\n // Track window resize and update currentBreakpoint signal.\n // Sets isBreakpointTransitioning to suppress onGridChange saves\n // while the grid settles after a breakpoint switch.\n let transitionTimer: ReturnType<typeof setTimeout> | null = null;\n\n // Queued save: ensures only one save is in-flight at a time.\n // If a new save is requested while one is running, it queues the latest and runs it after.\n let isSaving = false;\n let pendingSaveDashboard: AXMDashboardLayout | null = null;\n\n async function persistDashboard(dashboard: AXMDashboardLayout): Promise<void> {\n if (isSaving) {\n // Queue the latest dashboard for saving after current completes\n pendingSaveDashboard = dashboard;\n return;\n }\n isSaving = true;\n try {\n await dashboardService.updateOne(dashboard.id, dashboardLayoutToModel(dashboard));\n } catch (error) {\n console.error('Error saving dashboard layout:', error);\n }\n isSaving = false;\n // Process queued save if any\n if (pendingSaveDashboard) {\n const next = pendingSaveDashboard;\n pendingSaveDashboard = null;\n await persistDashboard(next);\n }\n }\n\n if (typeof window !== 'undefined') {\n fromEvent(window, 'resize')\n .pipe(debounceTime(100))\n .subscribe(() => {\n const bp = getBreakpointFromWidth();\n if (bp !== store.currentBreakpoint()) {\n if (transitionTimer) clearTimeout(transitionTimer);\n patchState(store, { currentBreakpoint: bp, isBreakpointTransitioning: true });\n\n // End transition after grid has settled (~500ms covers GridStack reflow + Angular CD)\n transitionTimer = setTimeout(() => {\n patchState(store, { isBreakpointTransitioning: false });\n transitionTimer = null;\n }, 500);\n }\n });\n }\n\n /**\n * Loads dashboards and sets current dashboard based on user settings.\n */\n async function loadDashboards(isAdmin: boolean): Promise<void> {\n try {\n patchState(store, { isLoading: true });\n // Build server-side filter based on admin flag and user identity/role\n const userId = readUserId(sessionService);\n let userRoleIds: string[] = [];\n let userDisplayName: string | undefined;\n\n let filter: AXDataSourceFilterOption | undefined;\n\n if (isAdmin) {\n // Admins see tenant scoped dashboards\n filter = {\n field: 'scope',\n operator: { type: 'equal' },\n value: 'T',\n } as AXDataSourceFilterOption;\n } else {\n // Non-admins see either:\n // 1) User scoped dashboards they created\n // 2) Tenant scoped dashboards where their role is included in roleIds\n const orFilters: AXDataSourceFilterOption[] = [];\n\n if (userId) {\n try {\n const user = await usersService.getOne(userId);\n userRoleIds = extractUserRoleIds(user);\n userDisplayName = (user as any)?.displayName as string | undefined;\n } catch {}\n }\n\n if (userId) {\n // Match personal U dashboards by new field userId (preferred)\n orFilters.push({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: [\n { field: 'scope', operator: { type: 'equal' }, value: 'U' },\n { field: 'userId', operator: { type: 'equal' }, value: userId },\n ],\n } as AXDataSourceFilterOption);\n\n // Backward compatibility: also match by legacy createdBy if present\n orFilters.push({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: [\n { field: 'scope', operator: { type: 'equal' }, value: 'U' },\n { field: 'createdBy', operator: { type: 'equal' }, value: userId },\n ],\n } as AXDataSourceFilterOption);\n }\n\n if (userRoleIds.length > 0) {\n orFilters.push({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: [\n { field: 'scope', operator: { type: 'equal' }, value: 'T' },\n { field: 'roleIds', operator: { type: 'in' }, value: userRoleIds },\n ],\n } as AXDataSourceFilterOption);\n }\n\n if (orFilters.length === 1) {\n filter = orFilters[0];\n } else if (orFilters.length > 1) {\n filter = {\n field: null as any,\n logic: 'or',\n operator: null as any,\n filters: orFilters,\n } as AXDataSourceFilterOption;\n }\n }\n\n const result = await dashboardService.query({ skip: 0, take: 100, filter });\n const dashboardModels = result.items || [];\n const dashboards = dashboardModels.map(modelToDashboardLayout);\n const currentDashboardId = await settingsService\n .scope(AXPPlatformScope.User)\n .get(AXPHomeDashboardSetting.CurrentDashboard);\n\n let newCurrentDashboardId = null;\n if (dashboards.length > 0) {\n const dashboardExists = currentDashboardId && dashboards.some((d) => d.id === currentDashboardId);\n newCurrentDashboardId = dashboardExists ? (currentDashboardId as string) : dashboards[0].id;\n\n if (!dashboardExists) {\n settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPHomeDashboardSetting.CurrentDashboard, newCurrentDashboardId);\n }\n }\n\n patchState(store, {\n allDashboards: dashboards,\n dashboards: dashboards,\n isLoading: false,\n currentDashboardId: newCurrentDashboardId,\n });\n } catch (error) {\n console.error('Error loading dashboards:', error);\n patchState(store, { isLoading: false });\n }\n }\n\n return {\n /**\n * Sets the selected dashboard and persists the choice for the user.\n */\n setCurrentDashboard(dashboardId: string): void {\n patchState(store, { currentDashboardId: dashboardId });\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, dashboardId);\n },\n\n /**\n * Creates a new dashboard and selects it as current.\n */\n async addDashboard(): Promise<void> {\n try {\n const newDashboard = await dashboardPopup.generateDashboardLayout({}, store.isUserAdmin());\n if (!newDashboard) return;\n\n const userId = readUserId(sessionService);\n const now = new Date();\n const dashboardWithMetadata: AXMDashboardLayout = {\n ...newDashboard,\n createdBy: userId,\n createdAt: now,\n updatedBy: userId,\n updatedAt: now,\n scope: store.isUserAdmin() ? 'T' : 'U',\n widgets: [],\n };\n\n const dashboardModel = dashboardLayoutToModel(dashboardWithMetadata);\n const createdDashboardId = await dashboardService.insertOne(dashboardModel);\n dashboardWithMetadata.id = createdDashboardId;\n\n const updatedAllDashboards = [...store.availableDashboards(), dashboardWithMetadata];\n const updatedDashboards = [...store.dashboards(), dashboardWithMetadata];\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n currentDashboardId: dashboardWithMetadata.id,\n });\n\n settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPHomeDashboardSetting.CurrentDashboard, dashboardWithMetadata.id);\n } catch (error) {\n console.error('Error adding dashboard:', error);\n }\n },\n\n /**\n * Edits the current dashboard metadata and persists changes.\n */\n async editDashboard(): Promise<void> {\n const currentDashboard = store.selectedDashboard();\n if (!currentDashboard) return;\n\n try {\n const editedDashboard = await dashboardPopup.generateDashboardLayout(\n {\n title: currentDashboard.title,\n description: currentDashboard.description,\n roleIds: currentDashboard.roleIds,\n scope: currentDashboard.scope,\n locked: currentDashboard.locked,\n isDeleted: currentDashboard.isDeleted,\n },\n store.isUserAdmin(),\n );\n\n if (!editedDashboard) return;\n\n const userId = readUserId(sessionService);\n const now = new Date();\n const updatedDashboard: AXMDashboardLayout = {\n ...currentDashboard,\n ...editedDashboard,\n updatedBy: userId,\n updatedAt: now,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n\n const updatedAllDashboards = store\n .availableDashboards()\n .map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n const updatedDashboards = store\n .dashboards()\n .map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n });\n } catch (error) {\n console.error('Error editing dashboard:', error);\n }\n },\n\n /**\n * Adds selected widgets to the current dashboard and saves layout.\n */\n async addWidget(): Promise<void> {\n if (!store.selectedDashboard()) {\n console.warn('No current dashboard selected');\n return;\n }\n\n try {\n const widgets = await widgetPickerService.showPicker({\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n });\n\n const filteredWidgets = (widgets as any[]).map(({ __meta__, ...rest }) => {\n const widget = rest;\n if (widget.type === 'sticky-note' && !widget.options) {\n widget.options = { hasConfiguration: false };\n }\n const randomId = AXPDataGenerator.uuid();\n widget.name = `${widget.type}-${randomId}`;\n widget.path = `${widget.type}-${randomId}`;\n return widget;\n });\n\n const convertedWidgets: AXMDashboardWidgetData[] = filteredWidgets.map((widget) => {\n const id = AXPDataGenerator.uuid();\n const dims = widget?.meta?.dimensions;\n return {\n config: {\n id,\n title: widget.options?.['title'],\n lg: {\n id,\n height: dims?.lg?.height ?? 2,\n width: dims?.lg?.width ?? 2,\n minHeight: dims?.lg?.minHeight,\n minWidth: dims?.lg?.minWidth,\n maxHeight: dims?.lg?.maxHeight,\n maxWidth: dims?.lg?.maxWidth,\n } as AXGridLayoutNode,\n md: {\n id,\n height: dims?.md?.height ?? dims?.lg?.height ?? 2,\n width: dims?.md?.width ?? dims?.lg?.width ?? 2,\n minHeight: dims?.md?.minHeight ?? dims?.lg?.minHeight,\n minWidth: dims?.md?.minWidth ?? dims?.lg?.minWidth,\n maxHeight: dims?.md?.maxHeight ?? dims?.lg?.maxHeight,\n maxWidth: dims?.md?.maxWidth ?? dims?.lg?.maxWidth,\n } as AXGridLayoutNode,\n sm: {\n id,\n width: 1,\n height: dims?.sm?.height ?? dims?.lg?.height ?? 2,\n minHeight: dims?.sm?.minHeight ?? dims?.lg?.minHeight,\n maxHeight: dims?.sm?.maxHeight ?? dims?.lg?.maxHeight,\n } as AXGridLayoutNode,\n },\n node: {\n ...widget,\n name: widget.name,\n },\n };\n });\n\n const currentDashboard = store.selectedDashboard()!;\n const updatedDashboard = {\n ...currentDashboard,\n widgets: [...currentDashboard.widgets, ...convertedWidgets],\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error adding widget:', error);\n }\n },\n\n /**\n * Removes a dashboard after user confirmation and updates selection.\n */\n async removeDashboard(id: string): Promise<void> {\n if (!id) {\n console.warn('No dashboard ID provided for removal');\n return;\n }\n\n try {\n const dialogResult = await dialogService.confirm(\n await translationService.translateAsync('@general:workflow.warning'),\n await translationService.translateAsync('@general:workflow.confirm-delete'),\n 'danger',\n 'horizontal',\n );\n\n if (dialogResult.result) {\n await dashboardService.deleteOne(id);\n const updatedAllDashboards = store.availableDashboards().filter((dashboard) => dashboard.id !== id);\n const updatedDashboards = store.dashboards().filter((dashboard) => dashboard.id !== id);\n let newCurrentDashboardId = store.currentDashboardId();\n\n if (id === store.currentDashboardId()) {\n newCurrentDashboardId =\n updatedDashboards.length > 0 ? updatedDashboards[updatedDashboards.length - 1].id : null;\n if (newCurrentDashboardId) {\n settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPHomeDashboardSetting.CurrentDashboard, newCurrentDashboardId);\n }\n }\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n currentDashboardId: newCurrentDashboardId,\n });\n }\n } catch (error) {\n console.error('Error removing dashboard:', error);\n }\n },\n\n /**\n * Removes a widget from the specified dashboard and persists the change.\n */\n async removeWidget(dashboardId: string, widgetId: string): Promise<void> {\n const currentDashboard = store.dashboards().find((d) => d.id === dashboardId);\n if (!currentDashboard) return;\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: currentDashboard.widgets.filter((widget) => widget.config.id !== widgetId),\n };\n\n await dashboardService.updateOne(dashboardId, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === dashboardId ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === dashboardId ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n },\n\n /**\n * Persists dashboard configuration changes and updates selection.\n */\n async handleConfigChange(dashboard: AXMDashboardLayout): Promise<void> {\n // await dashboardService.updateOne(dashboard.id, dashboardLayoutToModel(dashboard));\n // const updatedDashboards = store.dashboards().map((d) => (d.id === dashboard.id ? dashboard : d));\n\n patchState(store, {\n // dashboards: updatedDashboards,\n currentDashboardId: dashboard.id,\n });\n\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, dashboard.id);\n },\n\n /**\n * Handles grid layout changes (drag/resize) and saves positions for the current breakpoint.\n * Skips saving during breakpoint transitions to avoid persisting auto-reflowed layouts.\n * Persists immediately with queued writes to prevent concurrent save conflicts.\n */\n onGridChange(event: AXGridLayoutEvent): void {\n if (!store.selectedDashboard()) return;\n\n // Skip saves during breakpoint transitions to avoid persisting auto-reflowed layouts\n if (store.isBreakpointTransitioning()) return;\n\n // Skip if the live window breakpoint disagrees with the store\n const liveBp = getBreakpointFromWidth();\n const storeBp = store.currentBreakpoint();\n if (liveBp !== storeBp) return;\n\n const bp = storeBp;\n const nodes = event.nodes.map(({ element, ...rest }) => rest);\n const currentDashboard = store.selectedDashboard()!;\n\n let hasChanges = false;\n const updatedWidgets = currentDashboard.widgets.map((widget) => {\n const updatedNode = nodes.find((node) => node.id === widget.config.id);\n if (!updatedNode) return widget;\n\n const existing = widget.config[bp];\n if (\n existing?.x === updatedNode.x &&\n existing?.y === updatedNode.y &&\n existing?.width === updatedNode.width &&\n existing?.height === updatedNode.height\n ) {\n return widget;\n }\n\n hasChanges = true;\n return {\n ...widget,\n config: {\n ...widget.config,\n [bp]: { ...widget.config[bp], ...updatedNode, id: widget.config.id },\n },\n };\n });\n\n if (!hasChanges) return;\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n\n // Persist to storage (queued to prevent concurrent writes)\n persistDashboard(updatedDashboard);\n },\n\n /**\n * Applies widget configuration changes returned from popup.\n */\n async handlePopupConfiguration(widgetNode: AXPWidgetNode): Promise<void> {\n if (!store.selectedDashboard()) return;\n\n try {\n const updatedNode = await dashboardPopup.handlePopupConfiguration(widgetNode);\n if (!updatedNode) return;\n\n const currentDashboard = store.selectedDashboard()!;\n const updatedWidgets = currentDashboard.widgets.map((widget) =>\n widget.node?.name === widgetNode.name && widget.node?.path === widgetNode.path\n ? { ...widget, node: updatedNode }\n : widget,\n );\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error handling widget configuration:', error);\n }\n },\n\n /**\n * Updates widget value (defaultValue) and persists changes.\n */\n async handleValueChanged(widgetNode: AXPWidgetNode, data: unknown): Promise<void> {\n if (!store.selectedDashboard()) return;\n if (!deviceService.isDesktopDevice()) {\n return;\n }\n\n try {\n const currentDashboard = store.selectedDashboard()!;\n const updatedWidgets = currentDashboard.widgets.map((widget) =>\n widget.node && widget.node.name === widgetNode.name && widget.node.path === widgetNode.path\n ? { ...widget, node: { ...widget.node, defaultValue: data } }\n : widget,\n );\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error handling widget value change:', error);\n }\n },\n\n /**\n * Merges widget options with provided data and persists changes.\n */\n async handleOptionsChanged(widgetNode: AXPWidgetNode, data: unknown): Promise<void> {\n if (!store.selectedDashboard()) return;\n\n try {\n const currentDashboard = store.selectedDashboard()!;\n const updatedWidgets = currentDashboard.widgets.map((widget) =>\n widget.node && widget.node.name === widgetNode.name && widget.node.path === widgetNode.path\n ? {\n ...widget,\n node: {\n ...widget.node,\n options: { ...(widget.node.options || {}), ...(data as object) },\n },\n }\n : widget,\n );\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error handling widget options change:', error);\n }\n },\n\n /**\n * Updates the admin flag in store state.\n */\n setIsAdmin(isAdmin: boolean): void {\n patchState(store, { isAdmin });\n },\n\n // Client-side scope filtering is no longer needed; handled in query filter\n\n /**\n * Toggles lock state for current dashboard based on permission rules.\n */\n async toggleLockDashboard(): Promise<void> {\n const currentDashboard = store.selectedDashboard();\n if (!currentDashboard) return;\n\n try {\n const isAdmin = store.isUserAdmin();\n const userId = readUserId(sessionService);\n const canToggle =\n (!isAdmin && currentDashboard.scope === 'U' && currentDashboard.createdBy === userId) ||\n (isAdmin && currentDashboard.scope === 'T');\n\n if (!canToggle) {\n console.warn('User does not have permission to toggle lock for this dashboard');\n return;\n }\n\n const updatedDashboard = {\n ...currentDashboard,\n locked: !currentDashboard.locked,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error toggling dashboard lock state:', error);\n }\n },\n\n /**\n * Returns the lock state of the current dashboard.\n */\n isDashboardLocked(): boolean {\n const currentDashboard = store.selectedDashboard();\n return currentDashboard?.locked === true;\n },\n };\n },\n ),\n //#endregion\n);\n//#endregion\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXGridLayoutBuilderModule } from '@acorex/components/grid-layout-builder';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPDesignerService } from '@acorex/platform/layout/designer';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\n\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPActionMenuItem, AXPDeviceService, AXPExecuteCommand } from '@acorex/platform/core';\nimport { RootConfig } from '../../../const';\nimport { AXMDashboardWidgetWrapperComponent } from '../widget-wrapper/dashboard-widget-wrapper';\nimport { AXMDashboardStore } from './home-dashboard.store';\n\n@Component({\n selector: 'axm-dashboard-home',\n templateUrl: './home-dashboard.html',\n styleUrls: ['./home-dashboard.scss'],\n imports: [\n CommonModule,\n AXLoadingModule,\n AXPWidgetCoreModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXGridLayoutBuilderModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXBreadcrumbsModule,\n AXMDashboardWidgetWrapperComponent,\n AXPStateMessageComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDesignerService,\n AXMDashboardStore,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDashboardHomeComponent,\n },\n ],\n})\nexport class AXMDashboardHomeComponent extends AXPPageLayoutBaseComponent implements OnInit {\n // Dependencies\n protected readonly rootConfig = RootConfig;\n protected readonly activatedRoute = inject(ActivatedRoute);\n protected readonly dialogService = inject(AXDialogService);\n protected readonly popupService = inject(AXPopupService);\n protected readonly router = inject(Router);\n protected readonly store = inject(AXMDashboardStore);\n protected readonly themeService = inject(AXPLayoutThemeService);\n protected readonly deviceService = inject(AXPDeviceService);\n\n // Component State\n\n protected readonly context = signal({});\n private dashboardsLoaded = signal(false);\n\n // Lifecycle Hooks\n override async ngOnInit(): Promise<void> {\n const childRoute = this.activatedRoute.firstChild || this.activatedRoute;\n childRoute.data.subscribe((data) => {\n const isAdmin = data['isAdmin'] ?? false;\n this.store.setIsAdmin(isAdmin);\n });\n }\n\n // Effects\n #initEffect = effect(() => {\n const allDashboards = this.store.availableDashboards();\n if (allDashboards.length > 0 && !this.dashboardsLoaded()) {\n this.dashboardsLoaded.set(true);\n this.applyDashboardFiltering();\n this.recompute();\n }\n });\n\n // Private Methods\n private applyDashboardFiltering(): void {}\n\n protected async confirmWidgetDelete(dashboardId: string, widgetId: string): Promise<void> {\n try {\n const dialogResult = await this.dialogService.confirm(\n await this.translateService.translateAsync('@general:workflow.warning'),\n await this.translateService.translateAsync('@general:workflow.confirm-delete'),\n 'danger',\n 'horizontal',\n );\n\n if (dialogResult.result) {\n this.store.removeWidget(dashboardId, widgetId);\n }\n } catch (error) {\n console.error('Error confirming widget deletion:', error);\n }\n }\n\n // Page Interface Implementation\n override getPageTitle(): string {\n return this.store.selectedDashboard()?.title || 'Dashboard';\n }\n\n override async getPageDescription(): Promise<string> {\n return this.store.selectedDashboard()?.description || '';\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return this.store\n .dashboards()\n .map((dashboard) => ({\n title: dashboard.title,\n command: { name: dashboard.id, metadata: { isDashboard: true, dashboard } },\n icon: dashboard.id === this.store.currentDashboardId() ? 'fa-solid fa-check' : '',\n }))\n .sort((a, b) => (a.title ?? '').localeCompare(b.title ?? '', undefined, { sensitivity: 'base' }));\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n title: '@general:actions.add-item.title',\n icon: 'fa-light fa-square-plus',\n color: 'primary',\n items: [\n {\n title: await this.translateService.translateAsync('@dashboard:dashboard'),\n icon: 'fa-light fa-gauge-high',\n break: true,\n command: { name: 'new-dashboard' },\n },\n {\n title: await this.translateService.translateAsync('@dashboard:widget'),\n icon: 'fa-light fa-window-restore',\n command: { name: 'new-widget' },\n disabled: this.store.dashboards().length < 1 || this.store.isDashboardLocked(),\n },\n ],\n },\n ];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const items: AXPActionMenuItem[] = [\n {\n title: await this.translateService.translateAsync('@general:actions.edit.title'),\n icon: 'fa-light fa-pen',\n color: 'primary',\n disabled: this.store.dashboards().length < 1,\n command: { name: 'edit' },\n },\n ];\n\n if (!this.store.isUserAdmin() && this.deviceService.isDesktopDevice()) {\n items.push({\n title: await this.translateService.translateAsync(\n this.store.isDashboardLocked() ? '@general:actions.unlock.title' : '@general:actions.lock.title',\n {\n scope: 'dashboard',\n },\n ),\n icon: this.store.isDashboardLocked() ? 'fa-light fa-lock-open' : 'fa-light fa-lock',\n color: 'secondary',\n disabled: this.store.dashboards().length < 1,\n command: { name: 'toggle-lock' },\n });\n }\n\n items.push({\n title: await this.translateService.translateAsync('@general:actions.delete.title'),\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n disabled: this.store.dashboards().length < 1,\n command: { name: 'delete' },\n });\n\n return items;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (command.metadata?.['isDashboard']) {\n this.store.handleConfigChange(command.metadata?.['dashboard']);\n this.recompute();\n return;\n }\n\n switch (command.name) {\n case 'new-dashboard':\n await this.store.addDashboard();\n this.recompute();\n break;\n case 'new-widget':\n await this.store.addWidget();\n this.recompute();\n break;\n case 'edit':\n await this.store.editDashboard();\n this.recompute();\n break;\n case 'delete':\n await this.store.removeDashboard(this.store.selectedDashboard()?.id!);\n this.recompute();\n break;\n case 'toggle-lock':\n await this.store.toggleLockDashboard();\n this.recompute();\n setTimeout(() => this.recompute(), 50);\n break;\n }\n }\n}\n","<axp-page-layout *translate=\"let t\">\n <axp-page-content class=\"ax-relative\">\n <!-- Loading State -->\n @if (store.isLoading()) {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n <!-- No Dashboards State -->\n @else if (!store.dashboards().length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:empty-state.title'\"\n [description]=\"'@dashboard:empty-state.description'\"\n >\n <div slot=\"actions\">\n <button (click)=\"execute({ name: 'new-dashboard' })\" class=\"ax-underline\">\n {{ '@dashboard:add-first-dashboard' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n }\n <!-- No Widgets State -->\n @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n <div slot=\"actions\">\n <button (click)=\"execute({ name: 'new-widget' })\" class=\"ax-underline\">\n {{ '@dashboard:add-widget' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n }\n <!-- Dashboard Grid -->\n @else {\n <axp-widgets-container [context]=\"context()\">\n <ax-grid-layout-container\n class=\"dark:[--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lighter-surface)] [--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lightest-surface)]\"\n [options]=\"store.currentLayoutOptions()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for (widget of store.currentWidgets(); track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.resolvedOptions\">\n <axm-dashboard-widget-wrapper\n [title]=\"widget.node?.options?.['title'] ?? widget.config.title\"\n [hasConfiguration]=\"store.canConfigureWidget()(widget)\"\n [isLocked]=\"store.isWidgetLocked()(widget)\"\n (onDelete)=\"confirmWidgetDelete(store.selectedDashboard()?.id!, widget.config.id!)\"\n (onConfiguration)=\"store.handlePopupConfiguration(widget.node!)\"\n (onValueChanged)=\"store.handleValueChanged(widget?.node!, $event)\"\n (onOptionsChanged)=\"store.handleOptionsChanged(widget?.node!, $event)\"\n >\n @if (widget.node) {\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'view'\"></ng-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n }\n </ax-grid-layout-container>\n </axp-widgets-container>\n }\n </axp-page-content>\n</axp-page-layout>\n","import { AXGridLayoutNode } from '@acorex/components/grid-layout-builder';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\n//#region ---- Breakpoint Types ----\n\n/** Breakpoint size keys for responsive layout profiles */\nexport type AXMDashboardBreakpoint = 'sm' | 'md' | 'lg';\n\n/**\n * Per-breakpoint layout configuration for a dashboard widget.\n * Each breakpoint stores its own AXGridLayoutNode (position, size, constraints).\n * The `id` at the top level is the shared widget identifier across all breakpoints.\n */\nexport interface AXMDashboardWidgetLayoutMap {\n /** Shared widget identifier across all breakpoints */\n id: string;\n title?: string;\n /** Large breakpoint layout (12 columns, window width > 768px) */\n lg: AXGridLayoutNode;\n /** Medium breakpoint layout (6 columns, window width <= 768px) */\n md: AXGridLayoutNode;\n /** Small breakpoint layout (1 column, mobile devices) */\n sm: AXGridLayoutNode;\n}\n\n//#endregion\n\n//#region ---- Dashboard Types ----\n\nexport interface AXMDashboardLayout {\n id: string;\n title: string;\n description?: string;\n widgets: AXMDashboardWidgetData[];\n\n createdAt?: Date;\n updatedAt?: Date;\n createdBy?: string;\n updatedBy?: string;\n\n roleIds?: string[];\n isDeleted?: boolean;\n locked?: boolean;\n\n scope: 'U' | 'T';\n}\n\nexport type AXMDashboardWidgetData = {\n config: AXMDashboardWidgetLayoutMap;\n node?: AXPWidgetNode;\n};\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMOrganizationManagementJobDefinitionEntityService } from '@acorex/modules/organization-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMultiLanguageStringResolverService } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, model, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXMDashboardLayout } from '../dashboard-home';\nimport { RootConfig } from '../../../const';\n\n@Component({\n template: `\n <div class=\"ax-card-body ax-p-4\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-pb-4\">\n <p class=\"ax-font-semibold\">{{ '@general:terms.common.title' | translate | async }}</p>\n <ax-text-box [(ngModel)]=\"title\" name=\"title\" placeholder=\"{{ '@general:terms.common.title' | translate | async }}\"> </ax-text-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <p class=\"ax-font-semibold\">{{ '@general:terms.common.description' | translate | async }}</p>\n <ax-text-box [(ngModel)]=\"description\" name=\"description\" placeholder=\"{{ '@general:terms.common.description' | translate | async }}\">\n </ax-text-box>\n </div>\n\n @if (isAdmin()) {\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-mt-4\">\n <p class=\"ax-font-semibold\">{{ 'roles' | translate: { scope } | async }}</p>\n <ax-select-box\n [(ngModel)]=\"selectedRoleIds\"\n [dataSource]=\"roles\"\n [multiple]=\"true\"\n [textField]=\"'title'\"\n [valueField]=\"'id'\"\n name=\"roles\"\n placeholder=\"{{ 'select-roles' | translate: { scope } | async }}\"\n >\n </ax-select-box>\n </div>\n\n <div class=\"ax-grid grid-cols-2 ax-grid-flow-col ax-gap-8 ax-mt-4\">\n <div class=\"ax-flex ax-flex-row ax-items-center ax-gap-2\">\n <p class=\"ax-font-semibold\">{{ 'disable' | translate: { scope } | async }}</p>\n <ax-switch [(ngModel)]=\"isDisabled\" name=\"isDisabled\"></ax-switch>\n </div>\n\n <div class=\"ax-flex ax-flex-row ax-items-center ax-gap-2\">\n <p class=\"ax-font-semibold\">{{ 'lock' | translate: { scope } | async }}</p>\n <ax-switch [(ngModel)]=\"isLocked\" name=\"isLocked\"></ax-switch>\n </div>\n </div>\n }\n </div>\n\n <ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button [text]=\"'@general:actions.cancel.title' | translate | async\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button\n [text]=\"'@general:actions.save.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n [disabled]=\"!isValid\"\n (onClick)=\"handleClose()\"\n >\n <ax-icon class=\"fa-solid fa-save\"></ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n imports: [\n FormsModule,\n AXButtonModule,\n AXTextBoxModule,\n AXLabelModule,\n AXDecoratorModule,\n CommonModule,\n AXTranslationModule,\n AXSelectBoxModule,\n AXSwitchModule,\n ],\n standalone: true,\n})\nexport class AXMAddDashboardPopup extends AXBasePageComponent implements OnInit {\n protected readonly scope = RootConfig.config.i18n;\n\n private readonly data: Partial<AXMDashboardLayout & { isAdmin: boolean }>;\n\n private readonly jobDefinitionService = inject(AXMOrganizationManagementJobDefinitionEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly multiLanguageResolver = inject(AXPMultiLanguageStringResolverService);\n\n protected title = model<string>('');\n protected description = model<string>('');\n protected selectedRoleIds = model<string[]>([]);\n protected isDisabled = model<boolean>(false);\n protected isLocked = model<boolean>(false);\n protected isAdmin = model<boolean>(false);\n protected roles: any[] = [];\n\n protected get isValid(): boolean {\n return !!this.title()?.trim();\n }\n\n override async ngOnInit(): Promise<void> {\n // Set initial values from input data\n this.title.set(this.data?.title || '');\n this.description.set(this.data?.description || '');\n this.isDisabled.set(this.data?.isDeleted || false);\n this.isLocked.set(this.data?.locked || false);\n this.isAdmin.set(this.data?.isAdmin || false);\n // Load roles if admin\n if (this.isAdmin()) {\n try {\n const result = await this.jobDefinitionService.query({ skip: 0, take: 100 });\n if (result.items && result.items.length > 0) {\n this.roles = result.items.map((i) => ({\n id: i.id,\n title: this.multiLanguageResolver.resolve(i.title),\n }));\n }\n this.selectedRoleIds.set(this.roles.filter((i) => this.data?.roleIds?.includes(i.id)).map((i) => i.id));\n } catch (error) {\n console.error('Error loading roles:', error);\n this.roles = [];\n }\n }\n }\n\n protected async handleClose(isCanceled = false): Promise<void> {\n this.close({\n title: this.title()?.trim(),\n description: this.description()?.trim(),\n roleIds: this.isAdmin() ? this.selectedRoleIds() : undefined,\n isDeleted: this.isAdmin() ? this.isDisabled() : undefined,\n locked: this.isAdmin() ? this.isLocked() : undefined,\n scope: this.isAdmin() ? 'T' : 'U',\n createdBy: this.sessionService.user?.id,\n createdAt: new Date(),\n updatedBy: this.sessionService.user?.id,\n updatedAt: new Date(),\n isCanceled,\n });\n }\n}\n","const path = 'home:dashboard:';\nexport enum AXPHomeDashboardSetting {\n CurrentDashboard = `${path}current-dashboard`,\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","rxjsInterval","i5","AXPHomeDashboardSetting","i7","i8"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-dashboard-management.mjs","sources":["../../../../libs/modules/dashboard-management/src/lib/const.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/bar-chart/bar-chart-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/bar-chart/bar-chart-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/widget-categories.type.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/bar-chart/bar-chart-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/donut-chart/donut-chart-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/donut-chart/donut-chart-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/donut-chart/donut-chart-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/line-chart/line-chart-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/line-chart/line-chart-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/chart/line-chart/line-chart-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/kpi/kpi-progress/kpi-progress-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/kpi/kpi-progress/kpi-progress-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/kpi/kpi-progress/kpi-progress-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/kpi/kpi-segmented/kpi-segmented-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/kpi/kpi-segmented/kpi-segmented-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/kpi/kpi-segmented/kpi-segmented-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/kpi/kpi-details/kpi-details-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/kpi/kpi-details/kpi-details-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/kpi/kpi-details/kpi-details-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/weather-services/weather-api.abstract.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/weather-services/weather-api.mock.service.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/weather-services/weather-api.key.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/weather-services/weather-api.service.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/advanced-weather/advanced-weather.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/advanced-weather/advanced-weather.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/minimal-weather/minimal-weather.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/minimal-weather/minimal-weather.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/weather-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/weather-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/weather/weather-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/analog-clock/analog-clock.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/analog-clock/analog-clock-widget-view.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/analog-clock/analog-clock-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/clock-calendar/clock-calendar-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/clock-calendar/clock-calendar-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/clock-calendar/clock-calendar.types.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/clock-calendar/clock-calendar-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/dashboard-shortcut/dashboard-shortcut-widget-view.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/dashboard-shortcut/dashboard-shortcut-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/sticky-note/sticky-note-widget.component.ts","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/sticky-note/sticky-note-widget.component.html","../../../../libs/modules/dashboard-management/src/lib/features/shared/widgets/utility/sticky-note/sticky-note-widget.config.ts","../../../../libs/modules/dashboard-management/src/lib/widget-definition.provider.ts","../../../../libs/modules/dashboard-management/src/lib/manifest.ts","../../../../libs/modules/dashboard-management/src/lib/permission.keys.ts","../../../../libs/modules/dashboard-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/dashboard-management/src/lib/menu.keys.ts","../../../../libs/modules/dashboard-management/src/lib/menu.provider.ts","../../../../libs/modules/dashboard-management/src/lib/entity.provider.ts","../../../../libs/modules/dashboard-management/src/lib/entities/dashboard/dashboard.entity.ts","../../../../libs/modules/dashboard-management/src/lib/entities/dashboard/dashboard.service.ts","../../../../libs/modules/dashboard-management/src/lib/entities/dashboard/dashboard.module.ts","../../../../libs/modules/dashboard-management/src/lib/entities/index.ts","../../../../libs/modules/dashboard-management/src/lib/dashboard-management.module.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/widget-wrapper/dashboard-widget-wrapper.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/widget-wrapper/dashboard-widget-wrapper.html","../../../../libs/modules/dashboard-management/src/lib/settings.keys.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-popups/configuration-popup.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-popups/dashboard-popup.service.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-home/home-dashboard.store.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-home/home-dashboard.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-home/home-dashboard.html","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-home/home-dashboard.type.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/dashboard-popups/add-dashboard-popup.ts","../../../../libs/modules/dashboard-management/src/lib/features/home-dashboard/setrting.keys.ts","../../../../libs/modules/dashboard-management/src/acorex-modules-dashboard-management.ts"],"sourcesContent":["const config = {\n i18n: 'dashboard-management',\n};\nexport const RootConfig = {\n config,\n module: {\n module: 'DashboardManagement',\n name: 'DashboardManagement',\n title: `@${config.i18n}:module.title`,\n icon: 'fa-regular fa-tachometer-alt',\n },\n entities: {\n dashboard: {\n name: 'Dashboard',\n title: '@dashboard-management:dashboards.terms.dashboard',\n titlePlural: '@dashboard-management:dashboards.terms.dashboards',\n icon: 'fa-regular fa-tachometer-alt',\n },\n },\n};\n","import { AXBarChartComponent, AXBarChartData, AXBarChartOption } from '@acorex/charts/bar-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPDataSourceDefinitionProviderService,\n AXPMultiLanguageString,\n AXPMultiLanguageStringResolverService,\n} from '@acorex/platform/core';\nimport { AXPBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\n\n/**\n * Bar Chart Widget Component\n * Renders data as vertical bars with interactive hover effects and animations\n */\n@Component({\n templateUrl: './bar-chart-widget.component.html',\n styleUrls: ['./bar-chart-widget.component.scss'],\n imports: [AXBarChartComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPBarChartWidgetViewComponent extends AXPBaseWidgetComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly dataService = inject(AXPDataSourceDefinitionProviderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#endregion\n\n //#region ---- Chart state ----\n\n protected data = signal<AXBarChartData[]>([]);\n\n /** Options for the chart with localized title and axis labels. */\n protected barChartOptions = signal<AXBarChartOption & { title: string }>(\n {} as AXBarChartOption & { title: string },\n );\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n /**\n * Resolves bar category labels from plain text, @i18n keys, or multi-language maps.\n */\n private async resolveLocalizedChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n if (value.startsWith('@')) {\n return this.translationService.translateAsync(value);\n }\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value) && this.mlResolver.isValidMultiLanguageObject(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveChartLabelKeysEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n void Promise.all([\n this.resolveChartOptionLabel(raw['title']),\n this.resolveChartOptionLabel(raw['xAxisLabel']),\n this.resolveChartOptionLabel(raw['yAxisLabel']),\n ]).then(([title, xAxisLabel, yAxisLabel]) => {\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = raw as unknown as AXBarChartOption & { title: string };\n this.barChartOptions.set({\n ...base,\n title,\n xAxisLabel,\n yAxisLabel,\n });\n });\n });\n\n dataSource = computed(() => this.options()['dataSource'] as string | AXBarChartData[]);\n\n eff = effect(async () => {\n const ds = this.dataSource();\n if (typeof ds === 'string') {\n const result = await this.dataService.get(ds);\n if (result) {\n const source = await (result.source() as any).config.load();\n const items = (source.items ?? []) as Record<string, unknown>[];\n const resolved = await Promise.all(\n items.map(async (item) => ({\n ...item,\n label: await this.resolveLocalizedChartText(item['label']),\n })),\n );\n this.data.set(resolved as AXBarChartData[]);\n }\n } else if (ds && Array.isArray(ds)) {\n const resolved = await Promise.all(\n (ds as unknown as Record<string, unknown>[]).map(async (item) => ({\n ...item,\n label: await this.resolveLocalizedChartText(item['label']),\n })),\n );\n this.data.set(resolved as unknown as AXBarChartData[]);\n } else {\n this.data.set([]);\n }\n });\n\n constructor() {\n super();\n this.setOptions({\n ...this.options(),\n showXAxis: true,\n showYAxis: true,\n barWidth: 80,\n cornerRadius: 4,\n showGrid: true,\n showDataLabels: false,\n showTooltip: true,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n });\n this.barChartOptions.set(this.options() as AXBarChartOption & { title: string });\n }\n\n handleBarClick(event: any) {\n //console.log(event);\n }\n}\n","<ax-bar-chart [data]=\"data()\" [options]=\"barChartOptions()\" (barClick)=\"handleBarClick($event)\"></ax-bar-chart>\n","import { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetCategory } from '@acorex/platform/layout/widget-core';\n\nexport const AXP_WIDGETS_CHART_CATEGORY: AXPWidgetCategory = {\n name: 'chart',\n order: 6,\n title: createMultiLanguageString('Charts', 'نمودارها'),\n};\n\nexport const AXP_WIDGETS_UTILITY_CATEGORY: AXPWidgetCategory = {\n name: 'utility',\n order: 7,\n title: createMultiLanguageString('Utilities', 'ابزارها'),\n};\n","import {\n AXPWidgetConfig,\n AXPWidgetGroupEnum,\n AXPWidgetsCatalog,\n cloneProperty,\n} from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n AXP_NAME_PROPERTY,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\n\nexport const AXPBarChartWidget: AXPWidgetConfig = {\n name: 'bar-chart',\n title: 'Bar Chart Widget',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-bar',\n properties: [\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.bar-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== X Axis Settings ======\n {\n name: 'xAxisLabel',\n title: '@dashboard:widgets.bar-chart.x-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'xAxisLabel',\n path: 'options.xAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n // ====== Y Axis Settings ======\n {\n name: 'yAxisLabel',\n title: '@dashboard:widgets.bar-chart.y-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'yAxisLabel',\n path: 'options.yAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Layout & Dimensions ======\n {\n name: 'width',\n title: '@dashboard:widgets.bar-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: null,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.bar-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n // ====== X Axis Settings ======\n {\n name: 'showXAxis',\n title: '@dashboard:widgets.bar-chart.show-x-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showXAxis',\n path: 'options.showXAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Y Axis Settings ======\n {\n name: 'showYAxis',\n title: '@dashboard:widgets.bar-chart.show-y-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showYAxis',\n path: 'options.showYAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Bar Appearance ======\n {\n name: 'barWidth',\n title: '@dashboard:widgets.bar-chart.bar-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 80,\n dataType: 'number',\n interface: {\n name: 'barWidth',\n path: 'options.barWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-100',\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n {\n name: 'cornerRadius',\n title: '@dashboard:widgets.bar-chart.corner-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'cornerRadius',\n path: 'options.cornerRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-20',\n minValue: 0,\n maxValue: 20,\n },\n },\n },\n visible: true,\n },\n // ====== Grid Settings ======\n {\n name: 'showGrid',\n title: '@dashboard:widgets.bar-chart.show-grid',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showGrid',\n path: 'options.showGrid',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showDataLabels',\n title: '@dashboard:widgets.bar-chart.show-data-labels',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDataLabels',\n path: 'options.showDataLabels',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Tooltip Settings ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.bar-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.bar-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.bar-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./bar-chart-widget.component').then((c) => c.AXPBarChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 5,\n height: 6,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 6,\n maxHeight: 7,\n },\n md: {\n width: 5,\n height: 6,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 6,\n maxHeight: 7,\n },\n sm: {\n height: 6,\n minHeight: 2,\n maxHeight: 7,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n barChart: 'bar-chart';\n }\n}\n","import { AXDonutChartComponent, AXDonutChartData, AXDonutChartOption } from '@acorex/charts/donut-chart';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPDataSourceDefinitionProviderService,\n AXPMultiLanguageString,\n AXPMultiLanguageStringResolverService,\n} from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\n\n/**\n * Donut Chart Widget Component\n * Displays data in a circular donut chart with interactive segments\n */\n@Component({\n templateUrl: './donut-chart-widget.component.html',\n styleUrls: ['./donut-chart-widget.component.scss'],\n imports: [AXDonutChartComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPDonutChartWidgetViewComponent extends AXPValueWidgetComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly dataService = inject(AXPDataSourceDefinitionProviderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#endregion\n\n //#region ---- Chart state ----\n\n protected data = signal<AXDonutChartData[]>([]);\n\n protected donutChartOptions = signal<AXDonutChartOption & { title: string }>(\n {} as AXDonutChartOption & { title: string },\n );\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n dataSource = computed(() => this.options()['dataSource'] as string | AXDonutChartData[] | undefined);\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n /**\n * Resolves segment names from plain text, @i18n keys, or multi-language maps.\n */\n private async resolveLocalizedChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n if (value.startsWith('@')) {\n return this.translationService.translateAsync(value);\n }\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value) && this.mlResolver.isValidMultiLanguageObject(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveDonutOptionsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n void (async () => {\n const title = await this.resolveChartOptionLabel(raw['title']);\n const totalLabel =\n raw['totalLabel'] !== undefined\n ? await this.resolveChartOptionLabel(raw['totalLabel'])\n : undefined;\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = raw as unknown as AXDonutChartOption & { title: string };\n this.donutChartOptions.set({\n ...base,\n title,\n ...(totalLabel !== undefined ? { totalLabel } : {}),\n });\n })();\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const ds = this.dataSource();\n if (typeof ds === 'string') {\n const result = await this.dataService.get(ds);\n if (result) {\n const dataSource = result.source() as AXDataSource<unknown>;\n const page = await dataSource.config.load({\n take: dataSource.pageSize,\n skip: 0,\n sort: [],\n });\n const items = (page.items ?? []) as Record<string, unknown>[];\n const resolved = await Promise.all(\n items.map(async (item) => ({\n ...item,\n name: await this.resolveLocalizedChartText(item['name']),\n })),\n );\n this.data.set(resolved as unknown as AXDonutChartData[]);\n }\n } else if (ds && Array.isArray(ds)) {\n const resolved = await Promise.all(\n (ds as unknown as Record<string, unknown>[]).map(async (item) => ({\n ...item,\n name: await this.resolveLocalizedChartText(item['name']),\n })),\n );\n this.data.set(resolved as unknown as AXDonutChartData[]);\n } else {\n this.data.set([]);\n }\n });\n\n constructor() {\n super();\n this.setOptions({\n width: 300,\n height: 300,\n showDataLabels: false,\n donutWidth: 35,\n cornerRadius: 4,\n showTooltip: true,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...this.options(),\n });\n this.donutChartOptions.set(this.options() as AXDonutChartOption & { title: string });\n }\n\n handleDonutChartSegmentClick(event: any) {\n //console.log(event);\n }\n}\n","<ax-donut-chart\n [data]=\"data()\"\n [options]=\"donutChartOptions()\"\n (segmentClick)=\"handleDonutChartSegmentClick($event)\"\n></ax-donut-chart>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog, cloneProperty } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\n\nexport const AXPDonutChartWidget: AXPWidgetConfig = {\n name: 'donut-chart',\n title: 'Donut Chart Widget',\n categories: AXP_WIDGETS_CHART_CATEGORY,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-donut',\n properties: [\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.donut-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Size & Layout ======\n {\n name: 'width',\n title: '@dashboard:widgets.donut-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 200,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.donut-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 200,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n // ====== Donut Appearance ======\n {\n name: 'showDataLabels',\n title: '@dashboard:widgets.donut-chart.show-data-labels',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDataLabels',\n path: 'options.showDataLabels',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'donutWidth',\n title: '@dashboard:widgets.donut-chart.donut-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 35,\n dataType: 'number',\n interface: {\n name: 'donutWidth',\n path: 'options.donutWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '10-80',\n minValue: 10,\n maxValue: 80,\n },\n },\n },\n visible: true,\n },\n {\n name: 'cornerRadius',\n title: '@dashboard:widgets.donut-chart.corner-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'cornerRadius',\n path: 'options.cornerRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-20',\n minValue: 0,\n maxValue: 20,\n },\n },\n },\n visible: true,\n },\n // ====== Legend ======\n // {\n // name: 'showLegend',\n // title: 'Show Legend',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showLegend',\n // path: 'options.showLegend',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n // {\n // name: 'legendPosition',\n // title: 'Legend Position',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: 'right',\n // dataType: 'string',\n // interface: {\n // name: 'legendPosition',\n // path: 'options.legendPosition',\n // type: AXPWidgetsCatalog.select,\n // options: {\n // dataSource: ['right', 'bottom'],\n // },\n // },\n // },\n // visible: true,\n // },\n // ====== Tooltip ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.donut-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.donut-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.donut-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./donut-chart-widget.component').then((c) => c.AXPDonutChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 4,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 5,\n maxHeight: 6,\n },\n md: {\n width: 4,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 5,\n maxHeight: 6,\n },\n sm: {\n height: 4,\n minHeight: 2,\n maxHeight: 6,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n donutChart: 'donut-chart';\n }\n}\n","import { AXGaugeChartComponent, AXGaugeChartOption } from '@acorex/charts/gauge-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPDataSourceDefinitionProviderService,\n AXPMultiLanguageString,\n AXPMultiLanguageStringResolverService,\n} from '@acorex/platform/core';\nimport { AXPBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\n\n/**\n * Gauge Chart Widget Component\n * Renders a semi-circular gauge chart with animated needle and thresholds\n */\n@Component({\n templateUrl: './gauge-chart-widget.component.html',\n styleUrls: ['./gauge-chart-widget.component.scss'],\n imports: [AXGaugeChartComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPGaugeChartWidgetViewComponent extends AXPBaseWidgetComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly dataService = inject(AXPDataSourceDefinitionProviderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#endregion\n\n //#region ---- Chart state ----\n\n protected value = signal<number>(0);\n\n /** Options with resolved title, label, and threshold labels for the chart SVG/layer. */\n protected gaugeChartOptions = signal<AXGaugeChartOption & { title?: string }>(\n {} as AXGaugeChartOption & { title?: string },\n );\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n dataSource = computed(() => this.options()['dataSource'] as string | number | undefined);\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n private readonly resolveGaugeOptionsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n const thresholdSource = raw['thresholds'];\n void (async () => {\n const [title, label] = await Promise.all([\n this.resolveChartOptionLabel(raw['title']),\n this.resolveChartOptionLabel(raw['label']),\n ]);\n let thresholds: AXGaugeChartOption['thresholds'];\n if (Array.isArray(thresholdSource)) {\n thresholds = await Promise.all(\n thresholdSource.map(async (t) => {\n const entry = t as Record<string, unknown>;\n const labelRaw = entry['label'];\n return {\n value: entry['value'] as number,\n color: String(entry['color'] ?? ''),\n ...(labelRaw != null && labelRaw !== ''\n ? { label: await this.resolveChartOptionLabel(labelRaw) }\n : {}),\n };\n }),\n );\n }\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = raw as unknown as AXGaugeChartOption & { title?: string };\n this.gaugeChartOptions.set({\n ...base,\n title,\n label,\n ...(thresholds ? { thresholds } : {}),\n });\n })();\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const ds = this.dataSource();\n if (typeof ds === 'string') {\n const result = await this.dataService.get<number>(ds);\n if (result) {\n const loaded = result.source() as number | Promise<number>;\n this.value.set(await Promise.resolve(loaded));\n }\n } else if (typeof ds === 'number') {\n this.value.set(ds);\n } else {\n this.value.set(0);\n }\n });\n\n constructor() {\n super();\n this.setOptions({\n width: null,\n height: 300,\n minValue: 0,\n maxValue: 100,\n showTooltip: true,\n gaugeWidth: 30,\n cornerRadius: 4,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...this.options(),\n });\n this.gaugeChartOptions.set(this.options() as AXGaugeChartOption & { title?: string });\n }\n}\n","<ax-gauge-chart [value]=\"value()\" [options]=\"gaugeChartOptions()\"></ax-gauge-chart>\n","import { AXPWidgetConfig, AXPWidgetsCatalog, cloneProperty } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\n\nexport const AXPGaugeChartWidget: AXPWidgetConfig = {\n name: 'gauge-chart',\n title: 'Gauge Chart Widget',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n type: 'dashboard',\n icon: 'fa-light fa-gauge',\n properties: [\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.gauge-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== Label Display ======\n {\n name: 'label',\n title: '@dashboard:widgets.gauge-chart.label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'label',\n path: 'options.label',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Layout & Dimensions ======\n {\n name: 'width',\n title: '@dashboard:widgets.gauge-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: null,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-1200',\n minValue: 1,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.gauge-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-800',\n minValue: 1,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n // ====== Gauge Configuration ======\n {\n name: 'minValue',\n title: '@dashboard:widgets.gauge-chart.min-value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'minValue',\n path: 'options.minValue',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n {\n name: 'maxValue',\n title: '@dashboard:widgets.gauge-chart.max-value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 100,\n dataType: 'number',\n interface: {\n name: 'maxValue',\n path: 'options.maxValue',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n // ====== Gauge Appearance ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.gauge-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'gaugeWidth',\n title: '@dashboard:widgets.gauge-chart.gauge-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 30,\n dataType: 'number',\n interface: {\n name: 'gaugeWidth',\n path: 'options.gaugeWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-100',\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n {\n name: 'cornerRadius',\n title: '@dashboard:widgets.gauge-chart.corner-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'cornerRadius',\n path: 'options.cornerRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-20',\n minValue: 0,\n maxValue: 20,\n },\n },\n },\n visible: true,\n },\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.gauge-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.gauge-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./gauge-chart-widget.component').then((c) => c.AXPGaugeChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 4,\n maxHeight: 5,\n },\n md: {\n width: 3,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 4,\n maxHeight: 5,\n },\n sm: {\n height: 4,\n minHeight: 2,\n maxHeight: 5,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n gaugeChart: 'gauge-chart';\n }\n}\n","import {\n AXLineChartComponent,\n AXLineChartData,\n AXLineChartOption,\n AXLineChartPointClickEvent,\n} from '@acorex/charts/line-chart';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPDataSourceDefinitionProviderService,\n AXPMultiLanguageString,\n AXPMultiLanguageStringResolverService,\n} from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\n\n/**\n * Line Chart Widget Component\n * Renders data as lines with interactive hover effects and animations\n */\n@Component({\n templateUrl: './line-chart-widget.component.html',\n styleUrls: ['./line-chart-widget.component.scss'],\n standalone: true,\n imports: [AXLineChartComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPLineChartWidgetViewComponent extends AXPValueWidgetComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly dataService = inject(AXPDataSourceDefinitionProviderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#endregion\n\n //#region ---- Chart state ----\n\n protected data = signal<AXLineChartData[]>([]);\n\n /** Options passed to the chart with resolved string labels (multi-language and @i18n keys). */\n protected lineChartOptions = signal<AXLineChartOption & { title: string }>(\n {} as AXLineChartOption & { title: string },\n );\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n dataSource = computed(() => this.options()['dataSource'] as string | AXLineChartData[] | undefined);\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n /**\n * Resolves series labels from plain text, @i18n keys, or multi-language maps.\n */\n private async resolveLocalizedChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n if (value.startsWith('@')) {\n return this.translationService.translateAsync(value);\n }\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value) && this.mlResolver.isValidMultiLanguageObject(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveChartLabelKeysEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n void Promise.all([\n this.resolveChartOptionLabel(raw['title']),\n this.resolveChartOptionLabel(raw['xAxisLabel']),\n this.resolveChartOptionLabel(raw['yAxisLabel']),\n ]).then(([title, xAxisLabel, yAxisLabel]) => {\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = raw as unknown as AXLineChartOption & { title: string };\n this.lineChartOptions.set({\n ...base,\n title,\n xAxisLabel,\n yAxisLabel,\n });\n });\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const ds = this.dataSource();\n if (typeof ds === 'string') {\n const result = await this.dataService.get(ds);\n if (result) {\n const dataSource = result.source() as AXDataSource<unknown>;\n const page = await dataSource.config.load({\n take: dataSource.pageSize,\n skip: 0,\n sort: [],\n });\n const series = (page.items ?? []) as Record<string, unknown>[];\n const resolved = await Promise.all(\n series.map(async (s) => ({\n ...s,\n label: await this.resolveLocalizedChartText(s['label']),\n })),\n );\n this.data.set(resolved as AXLineChartData[]);\n }\n } else if (ds && Array.isArray(ds)) {\n const resolved = await Promise.all(\n (ds as unknown as Record<string, unknown>[]).map(async (s) => ({\n ...s,\n label: await this.resolveLocalizedChartText(s['label']),\n })),\n );\n this.data.set(resolved as unknown as AXLineChartData[]);\n } else {\n this.data.set([]);\n }\n });\n\n constructor() {\n super();\n this.setOptions({\n showXAxis: true,\n showYAxis: true,\n yAxisStartsAtZero: true,\n showGrid: true,\n showVerticalGrid: true,\n lineWidth: 2,\n smoothLine: true,\n showPoints: true,\n pointRadius: 4,\n fillOpacity: 80,\n showTooltip: true,\n showCrosshair: true,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...this.options(),\n });\n this.lineChartOptions.set(this.options() as AXLineChartOption & { title: string });\n }\n\n handleLineChartPointClick(event: AXLineChartPointClickEvent) {\n //console.log(event);\n }\n}\n","<ax-line-chart\n (pointClick)=\"handleLineChartPointClick($event)\"\n [data]=\"data()\"\n [options]=\"lineChartOptions()\"\n></ax-line-chart>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog, cloneProperty } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\n\nexport const AXPLineChartWidget: AXPWidgetConfig = {\n name: 'line-chart',\n title: 'Line Chart Widget',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-line',\n properties: [\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.line-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== Axis Settings ======\n {\n name: 'xAxisLabel',\n title: '@dashboard:widgets.line-chart.x-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'xAxisLabel',\n path: 'options.xAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'yAxisLabel',\n title: '@dashboard:widgets.line-chart.y-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'yAxisLabel',\n path: 'options.yAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'fillArea',\n title: '@dashboard:widgets.line-chart.fill-area',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: false,\n dataType: 'boolean',\n interface: {\n name: 'fillArea',\n path: 'options.fillArea',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Layout & Dimensions ======\n {\n name: 'width',\n title: '@dashboard:widgets.line-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: null,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.line-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n\n // ====== Axis Settings ======\n {\n name: 'showXAxis',\n title: '@dashboard:widgets.line-chart.show-x-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showXAxis',\n path: 'options.showXAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showYAxis',\n title: '@dashboard:widgets.line-chart.show-y-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showYAxis',\n path: 'options.showYAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'yAxisStartsAtZero',\n title: '@dashboard:widgets.line-chart.y-axis-starts-at-zero',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'yAxisStartsAtZero',\n path: 'options.yAxisStartsAtZero',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n {\n name: 'showGrid',\n title: '@dashboard:widgets.line-chart.show-grid',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showGrid',\n path: 'options.showGrid',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showVerticalGrid',\n title: '@dashboard:widgets.line-chart.show-vertical-grid',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showVerticalGrid',\n path: 'options.showVerticalGrid',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n // ====== Line Appearance ======\n {\n name: 'lineWidth',\n title: '@dashboard:widgets.line-chart.line-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 2,\n dataType: 'number',\n interface: {\n name: 'lineWidth',\n path: 'options.lineWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-10',\n minValue: 1,\n maxValue: 10,\n },\n },\n },\n visible: true,\n },\n {\n name: 'smoothLine',\n title: '@dashboard:widgets.line-chart.smooth-line',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'smoothLine',\n path: 'options.smoothLine',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showPoints',\n title: '@dashboard:widgets.line-chart.show-points',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showPoints',\n path: 'options.showPoints',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'pointRadius',\n title: '@dashboard:widgets.line-chart.point-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'pointRadius',\n path: 'options.pointRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-10',\n minValue: 1,\n maxValue: 10,\n },\n },\n },\n visible: true,\n },\n {\n name: 'fillOpacity',\n title: '@dashboard:widgets.line-chart.fill-opacity',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 80,\n dataType: 'number',\n interface: {\n name: 'fillOpacity',\n path: 'options.fillOpacity',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-100',\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n\n // ====== Tooltip Settings ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.line-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showCrosshair',\n title: '@dashboard:widgets.line-chart.show-crosshair',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showCrosshair',\n path: 'options.showCrosshair',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.line-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.line-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./line-chart-widget.component').then((c) => c.AXPLineChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 6,\n maxHeight: 6,\n },\n md: {\n width: 3,\n height: 4,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 6,\n maxHeight: 6,\n },\n sm: {\n height: 4,\n minHeight: 2,\n maxHeight: 6,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n lineChart: 'line-chart';\n }\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPDataSourceDefinitionProviderService,\n AXPMultiLanguageString,\n AXPMultiLanguageStringResolverService,\n} from '@acorex/platform/core';\nimport { AXPBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPKpiProgressData } from '../kpi-widget.types';\n\n@Component({\n templateUrl: './kpi-progress-widget.component.html',\n styleUrls: ['./kpi-progress-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPKpiProgressWidgetViewComponent extends AXPBaseWidgetComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly dataService = inject(AXPDataSourceDefinitionProviderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly model = signal<AXPKpiProgressData>({\n title: 'KPI',\n value: 0,\n subtitle: '',\n targetValue: '',\n progressPercent: 0,\n });\n protected readonly localized = signal({\n title: 'KPI',\n valuePrefix: '',\n valueSuffix: '',\n subtitle: '',\n targetValue: '',\n });\n\n private readonly dataSource = computed(() => this.options()['dataSource'] as string | undefined);\n\n //#endregion\n\n //#region ---- Computed values ----\n\n protected readonly progressPercent = computed(() => {\n const model = this.model();\n if (typeof model.progressPercent === 'number') {\n return this.normalizePercent(model.progressPercent);\n }\n\n const progressValue = model.progressValue ?? (typeof model.value === 'number' ? model.value : 0);\n const targetValue = Number(model.targetValue);\n if (!targetValue || Number.isNaN(targetValue)) {\n return 0;\n }\n return this.normalizePercent((progressValue / targetValue) * 100);\n });\n\n protected readonly formattedValue = computed(() => this.formatValue(this.model().value, this.model().format));\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly optionsEffect = effect(() => {\n const raw = this.options() as AXPKpiProgressData;\n this.model.update((current) => ({ ...current, ...raw }));\n });\n\n private readonly localizationEffect = effect(() => {\n const model = this.model();\n void Promise.all([\n this.resolveText(model.title),\n this.resolveText(model.valuePrefix),\n this.resolveText(model.valueSuffix),\n this.resolveText(model.subtitle),\n this.resolveText(model.targetValue),\n ]).then(([title, valuePrefix, valueSuffix, subtitle, targetValue]) => {\n this.localized.set({\n title,\n valuePrefix,\n valueSuffix,\n subtitle,\n targetValue,\n });\n });\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const ds = this.dataSource();\n if (!ds) {\n return;\n }\n const result = await this.dataService.get(ds);\n if (!result) {\n return;\n }\n const source = result.source() as AXDataSource<unknown>;\n const page = await source.config.load({\n take: 1,\n skip: 0,\n sort: [],\n });\n const item = (page.items?.[0] ?? {}) as AXPKpiProgressData;\n this.model.update((current) => ({ ...current, ...item }));\n });\n\n //#endregion\n\n //#region ---- Helpers ----\n\n protected async resolveText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n if (value.startsWith('@')) {\n return this.translationService.translateAsync(value);\n }\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value) && this.mlResolver.isValidMultiLanguageObject(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n protected normalizePercent(value: number): number {\n if (!Number.isFinite(value)) {\n return 0;\n }\n return Math.max(0, Math.min(100, value));\n }\n\n protected formatValue(value: unknown, format?: AXPKpiProgressData['format']): string {\n if (value == null || value === '') {\n return '';\n }\n if (typeof value !== 'number' || !format?.style) {\n return String(value);\n }\n return new Intl.NumberFormat(undefined, {\n style: format.style,\n currency: format.currency,\n minimumFractionDigits: format.minimumFractionDigits,\n maximumFractionDigits: format.maximumFractionDigits,\n }).format(value);\n }\n\n //#endregion\n}\n","<div class=\"kpi-progress\">\n <div class=\"kpi-progress__header\">\n <div class=\"kpi-progress__title\">{{ localized().title }}</div>\n </div>\n\n <div class=\"kpi-progress__value-row\">\n <div class=\"kpi-progress__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n @if (localized().targetValue) {\n <div class=\"kpi-progress__target\">{{ localized().targetValue }}</div>\n }\n </div>\n\n @if (localized().subtitle) {\n <div class=\"kpi-progress__subtitle\">{{ localized().subtitle }}</div>\n }\n\n <div class=\"kpi-progress__bar-track\">\n <div class=\"kpi-progress__bar-fill\" [style.width.%]=\"progressPercent()\"></div>\n </div>\n</div>\n","import { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog, cloneProperty } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n AXP_NAME_PROPERTY,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\n\nexport const AXPKpiProgressWidget: AXPWidgetConfig = {\n name: 'kpi-progress',\n title: createMultiLanguageString('KPI + Progress', 'شاخص کلیدی + پیشرفت'),\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-bullet',\n properties: [\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'title',\n title: '@dashboard:widgets.kpi-progress.title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'value',\n title: '@dashboard:widgets.kpi-progress.value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'value',\n path: 'options.value',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n {\n name: 'subtitle',\n title: '@dashboard:widgets.kpi-progress.subtitle',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'subtitle',\n path: 'options.subtitle',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'targetValue',\n title: '@dashboard:widgets.kpi-progress.target-value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'targetValue',\n path: 'options.targetValue',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'progressPercent',\n title: '@dashboard:widgets.kpi-progress.progress-percent',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'progressPercent',\n path: 'options.progressPercent',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./kpi-progress-widget.component').then((c) => c.AXPKpiProgressWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 5,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n },\n md: {\n width: 5,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n },\n sm: {\n height: 3,\n minHeight: 2,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n kpiProgress: 'kpi-progress';\n }\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPDataSourceDefinitionProviderService,\n AXPMultiLanguageString,\n AXPMultiLanguageStringResolverService,\n} from '@acorex/platform/core';\nimport { AXPBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPKpiSegmentItem, AXPKpiSegmentedData } from '../kpi-widget.types';\n\ninterface AXPKpiSegmentViewItem {\n label: string;\n value: number;\n color: string;\n percent: number;\n}\n\n@Component({\n templateUrl: './kpi-segmented-widget.component.html',\n styleUrls: ['./kpi-segmented-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPKpiSegmentedWidgetViewComponent extends AXPBaseWidgetComponent {\n private readonly dataService = inject(AXPDataSourceDefinitionProviderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n\n protected readonly model = signal<AXPKpiSegmentedData>({\n title: 'KPI Breakdown',\n segments: [],\n });\n protected readonly title = signal('KPI Breakdown');\n protected readonly segments = signal<AXPKpiSegmentViewItem[]>([]);\n private readonly dataSource = computed(() => this.options()['dataSource'] as string | undefined);\n\n private readonly optionsEffect = effect(() => {\n const raw = this.options() as AXPKpiSegmentedData;\n this.model.update((current) => ({ ...current, ...raw }));\n });\n\n private readonly transformEffect = effect(() => {\n const model = this.model();\n const segments = model.segments ?? [];\n void Promise.all([this.resolveText(model.title), this.resolveSegments(segments)]).then(([title, resolvedSegments]) => {\n this.title.set(title);\n this.segments.set(resolvedSegments);\n });\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const ds = this.dataSource();\n if (!ds) {\n return;\n }\n const result = await this.dataService.get(ds);\n if (!result) {\n return;\n }\n const source = result.source() as AXDataSource<unknown>;\n const page = await source.config.load({ take: source.pageSize, skip: 0, sort: [] });\n const items = (page.items ?? []) as AXPKpiSegmentItem[];\n this.model.update((current) => ({ ...current, segments: items }));\n });\n\n protected trackByLabel(_: number, item: AXPKpiSegmentViewItem): string {\n return item.label;\n }\n\n private async resolveSegments(segments: AXPKpiSegmentItem[]): Promise<AXPKpiSegmentViewItem[]> {\n const total = segments.reduce((sum, item) => sum + (item.value ?? 0), 0);\n const resolved = await Promise.all(\n segments.map(async (item, index) => ({\n label: await this.resolveText(item.label),\n value: item.value ?? 0,\n color: item.color || this.getPaletteColor(index),\n percent: total > 0 ? ((item.value ?? 0) / total) * 100 : 0,\n })),\n );\n return resolved;\n }\n\n private getPaletteColor(index: number): string {\n const palette = [\n 'var(--ax-primary-color, var(--ax-text-color))',\n 'var(--ax-warning-color, var(--ax-text-muted))',\n 'var(--ax-success-color, var(--ax-surface-hover))',\n 'var(--ax-info-color, var(--ax-surface-color))',\n 'var(--ax-danger-color, var(--ax-text-muted))',\n ];\n return palette[index % palette.length];\n }\n\n private async resolveText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.startsWith('@') ? this.translationService.translateAsync(value) : value;\n }\n if (typeof value === 'object' && !Array.isArray(value) && this.mlResolver.isValidMultiLanguageObject(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n}\n","<div class=\"kpi-segmented\">\n <div class=\"kpi-segmented__header\">{{ title() }}</div>\n\n <div class=\"kpi-segmented__bar-track\">\n @for (segment of segments(); track trackByLabel($index, segment)) {\n <div\n class=\"kpi-segmented__bar-part\"\n [style.width.%]=\"segment.percent\"\n [style.background-color]=\"segment.color\"\n ></div>\n }\n </div>\n\n <div class=\"kpi-segmented__legend\">\n @for (segment of segments(); track trackByLabel($index, segment)) {\n <div class=\"kpi-segmented__legend-item\">\n <span class=\"kpi-segmented__legend-dot\" [style.background-color]=\"segment.color\"></span>\n <span class=\"kpi-segmented__legend-text\">{{ segment.value }} - {{ segment.label }}</span>\n </div>\n }\n </div>\n</div>\n","import { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog, cloneProperty } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n AXP_NAME_PROPERTY,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\n\nexport const AXPKpiSegmentedWidget: AXPWidgetConfig = {\n name: 'kpi-segmented',\n title: createMultiLanguageString('KPI + Segmented Breakdown', 'شاخص کلیدی + تفکیک بخش‌بندی'),\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-simple',\n properties: [\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'title',\n title: '@dashboard:widgets.kpi-segmented.title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./kpi-segmented-widget.component').then((c) => c.AXPKpiSegmentedWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 4,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n },\n md: {\n width: 4,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n },\n sm: {\n height: 3,\n minHeight: 2,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n kpiSegmented: 'kpi-segmented';\n }\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPDataSourceDefinitionProviderService,\n AXPMultiLanguageString,\n AXPMultiLanguageStringResolverService,\n} from '@acorex/platform/core';\nimport { AXPBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPKpiDetailItem, AXPKpiDetailsData } from '../kpi-widget.types';\n\ninterface AXPKpiDetailViewItem {\n label: string;\n value: string;\n color?: string;\n}\n\n@Component({\n templateUrl: './kpi-details-widget.component.html',\n styleUrls: ['./kpi-details-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPKpiDetailsWidgetViewComponent extends AXPBaseWidgetComponent {\n private readonly dataService = inject(AXPDataSourceDefinitionProviderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n\n protected readonly model = signal<AXPKpiDetailsData>({\n title: 'KPI',\n value: 0,\n subtitle: '',\n details: [],\n });\n protected readonly localized = signal({\n title: 'KPI',\n subtitle: '',\n valuePrefix: '',\n valueSuffix: '',\n });\n protected readonly detailItems = signal<AXPKpiDetailViewItem[]>([]);\n\n private readonly dataSource = computed(() => this.options()['dataSource'] as string | undefined);\n protected readonly formattedValue = computed(() => this.formatValue(this.model().value, this.model().format));\n\n private readonly optionsEffect = effect(() => {\n const raw = this.options() as AXPKpiDetailsData;\n this.model.update((current) => ({ ...current, ...raw }));\n });\n\n private readonly localizationEffect = effect(() => {\n const model = this.model();\n void Promise.all([\n this.resolveText(model.title),\n this.resolveText(model.subtitle),\n this.resolveText(model.valuePrefix),\n this.resolveText(model.valueSuffix),\n this.resolveDetails(model.details),\n ]).then(([title, subtitle, valuePrefix, valueSuffix, details]) => {\n this.localized.set({ title, subtitle, valuePrefix, valueSuffix });\n this.detailItems.set(details);\n });\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const ds = this.dataSource();\n if (!ds) {\n return;\n }\n const result = await this.dataService.get(ds);\n if (!result) {\n return;\n }\n const source = result.source() as AXDataSource<unknown>;\n const page = await source.config.load({ take: 1, skip: 0, sort: [] });\n const item = (page.items?.[0] ?? {}) as AXPKpiDetailsData;\n this.model.update((current) => ({ ...current, ...item }));\n });\n\n protected trackByLabel(_: number, item: AXPKpiDetailViewItem): string {\n return item.label;\n }\n\n private async resolveDetails(items: AXPKpiDetailItem[] = []): Promise<AXPKpiDetailViewItem[]> {\n return Promise.all(\n items.map(async (item) => ({\n label: await this.resolveText(item.label),\n value: await this.resolveText(item.value),\n color: item.color,\n })),\n );\n }\n\n private async resolveText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.startsWith('@') ? this.translationService.translateAsync(value) : value;\n }\n if (typeof value === 'object' && !Array.isArray(value) && this.mlResolver.isValidMultiLanguageObject(value)) {\n return this.mlResolver.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private formatValue(value: unknown, format?: AXPKpiDetailsData['format']): string {\n if (value == null || value === '') {\n return '';\n }\n if (typeof value !== 'number' || !format?.style) {\n return String(value);\n }\n return new Intl.NumberFormat(undefined, {\n style: format.style,\n currency: format.currency,\n minimumFractionDigits: format.minimumFractionDigits,\n maximumFractionDigits: format.maximumFractionDigits,\n }).format(value);\n }\n}\n","<div class=\"kpi-details\">\n <div class=\"kpi-details__title\">{{ localized().title }}</div>\n <div class=\"kpi-details__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n @if (localized().subtitle) {\n <div class=\"kpi-details__subtitle\">{{ localized().subtitle }}</div>\n }\n\n <div class=\"kpi-details__items\">\n @for (item of detailItems(); track trackByLabel($index, item)) {\n <div class=\"kpi-details__item\">\n <span class=\"kpi-details__item-label\">{{ item.label }}</span>\n <span class=\"kpi-details__item-value\" [style.color]=\"item.color || 'var(--ax-text-color)'\">{{ item.value }}</span>\n </div>\n }\n </div>\n</div>\n","import { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog, cloneProperty } from '@acorex/platform/layout/widget-core';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n AXP_NAME_PROPERTY,\n} from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\n\nexport const AXPKpiDetailsWidget: AXPWidgetConfig = {\n name: 'kpi-details',\n title: createMultiLanguageString('KPI + Details', 'شاخص کلیدی + جزئیات'),\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-square-list',\n properties: [\n AXP_DATA_SOURCE_OPTIONS_PROPERTY,\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'title',\n title: '@dashboard:widgets.kpi-details.title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'value',\n title: '@dashboard:widgets.kpi-details.value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'value',\n path: 'options.value',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n {\n name: 'subtitle',\n title: '@dashboard:widgets.kpi-details.subtitle',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'subtitle',\n path: 'options.subtitle',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./kpi-details-widget.component').then((c) => c.AXPKpiDetailsWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 4,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n },\n md: {\n width: 4,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n },\n sm: {\n height: 3,\n minHeight: 2,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n kpiDetails: 'kpi-details';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Weather location information\n */\nexport interface AXPWeatherLocation {\n /** City name */\n city: string;\n /** Country name */\n country: string;\n /** Formatted location display name */\n displayName: string;\n}\n\n/**\n * Weather current condition information\n */\nexport interface AXPWeatherCondition {\n /** Condition text */\n condition: string;\n /** Condition code */\n conditionCode: number;\n /** Icon URL */\n iconUrl: string;\n /** Temperature in Celsius */\n tempC: number;\n /** Temperature in Fahrenheit */\n tempF: number;\n /** Feels like temperature in Celsius */\n feelsLikeC: number;\n /** Feels like temperature in Fahrenheit */\n feelsLikeF: number;\n /** Humidity percentage */\n humidity: number;\n /** Wind speed in km/h */\n windKph: number;\n /** Wind speed in mph */\n windMph: number;\n /** Wind direction */\n windDirection: string;\n /** UV index */\n uv: number;\n /** Last updated timestamp */\n lastUpdated: string;\n}\n\n/**\n * Weather forecast data for a single day\n */\nexport interface AXPWeatherForecastDay {\n /** Date string */\n date: string;\n /** Day name (e.g., \"Mon\", \"Tue\") */\n day: string;\n /** Weather condition code */\n condition: string;\n /** Weather icon URL */\n iconUrl: string;\n /** Max temperature in Celsius */\n maxTempC: number;\n /** Max temperature in Fahrenheit */\n maxTempF: number;\n /** Min temperature in Celsius */\n minTempC: number;\n /** Min temperature in Fahrenheit */\n minTempF: number;\n /** Hourly forecast data */\n hour: AXPWeatherHour[];\n}\n\n/**\n * Weather hourly forecast data\n */\nexport interface AXPWeatherHour {\n /** Time string */\n time: string;\n /** Weather condition code */\n condition: string;\n /** Weather icon URL */\n iconUrl: string;\n /** Hourly temperature in Celsius */\n tempC: number;\n /** Hourly temperature in Fahrenheit */\n tempF: number;\n}\n\n/**\n * Complete weather data response\n */\nexport interface AXPWeatherData {\n /** Location information */\n location: AXPWeatherLocation;\n /** Current weather data */\n current: AXPWeatherCondition;\n /** Forecast data */\n forecast: AXPWeatherForecastDay[];\n}\n\n/**\n * Weather API request options\n */\nexport interface AXPWeatherRequestOptions {\n /** Temperature unit */\n tempUnit?: string;\n /** Location query */\n location?: string;\n /** Use mock data */\n useMockData?: boolean;\n}\n\n/**\n * Weather UI condition display info\n */\nexport interface AXPWeatherConditionDisplay {\n /** Condition unique ID */\n id: string;\n /** Display name */\n name: string;\n /** Icon class (Font Awesome) */\n icon: string;\n /** SVG icon name */\n svgIcon: string;\n /** Associated color */\n color: string;\n}\n\n/**\n * Abstract Weather API Service\n * Base class that defines the interface and common functionality\n * for weather data providers\n */\n@Injectable()\nexport abstract class AXPWeatherApiAbstract {\n /** Weather condition definitions mapping */\n protected weatherConditions: Record<string, AXPWeatherConditionDisplay> = {\n sunny: {\n id: 'sunny',\n name: 'Sunny',\n icon: 'fa-solid fa-sun',\n svgIcon: 'day.svg',\n color: '#ff9d00',\n },\n clearNight: {\n id: 'clearNight',\n name: 'Clear Night',\n icon: 'fa-solid fa-moon',\n svgIcon: 'night.svg',\n color: '#5d639e',\n },\n partlyCloudy: {\n id: 'partlyCloudy',\n name: 'Partly Cloudy',\n icon: 'fa-solid fa-cloud-sun',\n svgIcon: 'cloudy-day-3.svg',\n color: '#6ba4e8',\n },\n partlyCloudyNight: {\n id: 'partlyCloudyNight',\n name: 'Partly Cloudy Night',\n icon: 'fa-solid fa-cloud-moon',\n svgIcon: 'cloudy-night-3.svg',\n color: '#5d639e',\n },\n cloudy: {\n id: 'cloudy',\n name: 'Cloudy',\n icon: 'fa-solid fa-cloud',\n svgIcon: 'cloudy.svg',\n color: '#72869d',\n },\n rain: {\n id: 'rain',\n name: 'Rain',\n icon: 'fa-solid fa-cloud-rain',\n svgIcon: 'rainy-6.svg',\n color: '#3a74ad',\n },\n showers: {\n id: 'showers',\n name: 'Showers',\n icon: 'fa-solid fa-cloud-showers-heavy',\n svgIcon: 'rainy-7.svg',\n color: '#2c5d8c',\n },\n thunderstorm: {\n id: 'thunderstorm',\n name: 'Thunderstorm',\n icon: 'fa-solid fa-bolt-lightning',\n svgIcon: 'thunder.svg',\n color: '#8834af',\n },\n snow: {\n id: 'snow',\n name: 'Snow',\n icon: 'fa-solid fa-snowflake',\n svgIcon: 'snowy-6.svg',\n color: '#68a9cd',\n },\n mist: {\n id: 'mist',\n name: 'Mist',\n icon: 'fa-solid fa-smog',\n svgIcon: 'cloudy.svg',\n color: '#94a3b8',\n },\n };\n\n /** Day of week mapping */\n protected readonly dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n /**\n * Get weather condition info by ID\n * @param id Condition ID\n * @returns Weather condition info or default if not found\n */\n public getCondition(id: string): AXPWeatherConditionDisplay {\n // Normalize condition ID by removing spaces and converting to lowercase\n const normalizedId = id.toLowerCase().replace(/\\s+/g, '');\n\n // Direct match first\n if (this.weatherConditions[normalizedId]) {\n return this.weatherConditions[normalizedId];\n }\n\n // Check for partial matches or common variants\n if (normalizedId.includes('partly') && normalizedId.includes('cloud')) {\n return this.weatherConditions['partlyCloudy'];\n }\n\n if (normalizedId.includes('cloud')) {\n return this.weatherConditions['cloudy'];\n }\n\n if (normalizedId.includes('sun')) {\n return this.weatherConditions['sunny'];\n }\n\n if (normalizedId.includes('rain')) {\n return this.weatherConditions['rain'];\n }\n\n if (normalizedId.includes('snow')) {\n return this.weatherConditions['snow'];\n }\n\n // If no match found, return default unknown condition\n return {\n id: 'unknown',\n name: 'Unknown',\n icon: 'fa-solid fa-question',\n svgIcon: 'weather.svg',\n color: '#999999',\n };\n }\n\n /**\n * Get current weather data for given location\n * @param options Weather request options\n * @returns Observable with weather data\n */\n abstract getWeather(options: AXPWeatherRequestOptions): Observable<AXPWeatherData>;\n\n /**\n * Get weather forecast for a location\n * @param options Weather request options with days\n * @returns Observable of weather data with forecast\n */\n abstract getForecast(options: AXPWeatherRequestOptions & { days?: number }): Observable<AXPWeatherData>;\n\n /**\n * Parse location string into city and display components\n * @param location Location query string\n * @returns Parsed location parts\n */\n protected parseLocation(location: string): { city: string; country: string; display: string } {\n if (!location || location.trim() === '') {\n return { city: 'New York', country: 'USA', display: 'New York' };\n }\n\n const city = location.trim();\n return { city, country: '', display: city };\n }\n\n /**\n * Format location name for display\n * @param locationParts Parsed location parts\n * @returns Formatted location name\n */\n protected formatLocationName(locationParts: { city: string; country: string; display: string }): string {\n return locationParts.city || 'Unknown Location';\n }\n\n /**\n * Map API condition text to our internal condition IDs\n * @param conditionText Condition text from API\n * @returns Internal condition ID\n */\n protected mapApiConditionToId(conditionText: string): string {\n const text = conditionText.toLowerCase();\n\n // Match WeatherAPI.com condition text\n // Reference: https://www.weatherapi.com/docs/#weather-icons\n\n if (text.includes('sunny') || text.includes('clear')) {\n return 'sunny';\n }\n\n if (text === 'partly cloudy') {\n return 'partlyCloudy';\n }\n\n if (text.includes('cloudy') || text.includes('overcast')) {\n return 'cloudy';\n }\n\n if (text.includes('rain') || text.includes('drizzle') || text.includes('shower')) {\n return 'rain';\n }\n\n if (text.includes('thunder') || text.includes('lightning')) {\n return 'thunderstorm';\n }\n\n if (text.includes('snow') || text.includes('sleet') || text.includes('blizzard')) {\n return 'snow';\n }\n\n if (text.includes('mist') || text.includes('fog')) {\n return 'mist';\n }\n\n // Default to partly cloudy if we don't have a specific mapping\n return 'partlyCloudy';\n }\n\n /**\n * Generate random integer between min and max (inclusive)\n * Helper method for implementations\n * @param min Minimum value\n * @param max Maximum value\n * @returns Random integer\n */\n protected getRandomInt(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n /**\n * Set the API key for the weather service\n * This is only used by the real API implementation,\n * but is defined in the abstract class for consistency\n * @param key The API key\n */\n abstract setApiKey(key: string): void;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, catchError, map, throwError } from 'rxjs';\nimport { AXPWeatherApiAbstract, AXPWeatherData, AXPWeatherRequestOptions } from './weather-api.abstract';\n\n/**\n * Mock Weather API Service\n * Provides simulated weather data for development and testing\n */\n@Injectable()\nexport class AXPWeatherApiMockService extends AXPWeatherApiAbstract {\n // Mock configuration\n private readonly mockDelay = 500;\n\n /**\n * Get current weather data for given location\n * @param options Weather request options\n * @returns Observable with weather data\n */\n override getWeather(options: AXPWeatherRequestOptions): Observable<AXPWeatherData> {\n const locationParts = this.parseLocation(options.location || '');\n const displayName = this.formatLocationName(locationParts);\n\n return this.getMockWeatherData(locationParts.city, options).pipe(\n map((mockData) => ({\n ...mockData,\n location: {\n city: locationParts.city,\n country: '',\n displayName: displayName,\n },\n })),\n );\n }\n\n /**\n * Get weather forecast for a location\n * @param options Weather request options with days\n * @returns Observable of weather data with forecast\n */\n override getForecast(options: AXPWeatherRequestOptions & { days?: number }): Observable<AXPWeatherData> {\n const days = options.days || 5;\n return this.getMockForecast(options.location || '', days, options);\n }\n\n /**\n * Get mock weather data for demo/development\n * @param location Location query\n * @param options Request options\n * @returns Observable of mock weather data\n */\n private getMockWeatherData(location: string, options?: AXPWeatherRequestOptions): Observable<AXPWeatherData> {\n return new Observable<AXPWeatherData>((observer) => {\n setTimeout(() => {\n try {\n const locationParts = this.parseLocation(location);\n const tempUnit = options?.tempUnit || '°C';\n const isCelsius = tempUnit === '°C';\n\n // Generate more realistic weather data based on location and current date\n const now = new Date();\n const month = now.getMonth(); // 0-11\n\n // Seasonally appropriate temperature range\n let minRange = 15;\n let maxRange = 25;\n\n // Northern hemisphere seasonal adjustments\n if (month >= 11 || month <= 1) {\n // Winter\n minRange = -5;\n maxRange = 10;\n } else if (month >= 2 && month <= 4) {\n // Spring\n minRange = 10;\n maxRange = 20;\n } else if (month >= 5 && month <= 7) {\n // Summer\n minRange = 20;\n maxRange = 35;\n } else if (month >= 8 && month <= 10) {\n // Fall/Autumn\n minRange = 10;\n maxRange = 25;\n }\n\n // Generate current temperature - more likely to be in the middle of the range\n const tempC = Math.round(minRange + (this.getRandomInt(4, 8) / 10) * (maxRange - minRange));\n const tempF = Math.round((tempC * 9) / 5 + 32);\n\n const humidity = this.getRandomInt(30, 90);\n const windKph = this.getRandomInt(5, 30);\n const windMph = Math.round(windKph * 0.621371);\n\n // Temperature-based conditions with randomization\n let conditionId = 'partlyCloudy';\n if (tempC > 25) conditionId = 'sunny';\n else if (tempC < 10) conditionId = 'cloudy';\n if (this.getRandomInt(1, 10) > 7) conditionId = 'rain';\n\n observer.next({\n location: {\n city: locationParts.city,\n country: '',\n displayName: this.formatLocationName(locationParts),\n },\n current: {\n condition: conditionId,\n conditionCode: 0,\n iconUrl: '', // Would be set from API\n tempC: tempC,\n tempF: tempF,\n feelsLikeC: tempC + this.getRandomInt(-3, 2),\n feelsLikeF: tempF + this.getRandomInt(-5, 3),\n humidity: humidity,\n windKph: windKph,\n windMph: windMph,\n windDirection: ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'][this.getRandomInt(0, 7)],\n uv: this.getRandomInt(0, 10),\n lastUpdated: new Date().toISOString(),\n },\n forecast: [],\n });\n\n observer.complete();\n } catch (error) {\n observer.error(error);\n }\n }, this.mockDelay);\n }).pipe(catchError((error) => throwError(() => new Error(`Failed to get weather data: ${error.message}`))));\n }\n\n /**\n * Get mock forecast data for demo/development\n * @param location Location query\n * @param days Number of forecast days\n * @param options Request options\n * @returns Observable of mock weather data with forecast\n */\n private getMockForecast(\n location: string,\n days: number = 5,\n options?: AXPWeatherRequestOptions,\n ): Observable<AXPWeatherData> {\n return this.getMockWeatherData(location, options).pipe(\n map((data) => {\n const currentCondition = data.current.condition;\n const currentTemp = data.current.tempC;\n\n // Use the current weather as a base for the forecast trend\n const forecast = Array.from({ length: days }, (_, i) => {\n // Create forecast date for each day (starting from tomorrow)\n const forecastDate = new Date();\n forecastDate.setDate(new Date().getDate() + i + 1);\n\n const dateStr = forecastDate.toISOString().split('T')[0];\n const dayName = this.dayNames[forecastDate.getDay()];\n\n // Generate condition with some continuity from current weather\n // Weather tends to be similar for a few days with gradual changes\n let conditionId: string;\n\n if (i === 0) {\n // Tomorrow's weather has 60% chance of being similar to today\n conditionId =\n this.getRandomInt(1, 10) <= 6\n ? currentCondition\n : ['sunny', 'partlyCloudy', 'cloudy', 'rain', 'snow'][this.getRandomInt(0, 4)];\n } else {\n // Subsequent days have 70% chance of being similar to previous day\n const previousCondition = forecast[i - 1]?.condition || currentCondition;\n conditionId =\n this.getRandomInt(1, 10) <= 7\n ? previousCondition\n : ['sunny', 'partlyCloudy', 'cloudy', 'rain', 'snow'][this.getRandomInt(0, 4)];\n }\n\n // Generate temperatures with realistic variance\n // Max is typically higher than current temperature\n // Min is typically lower than current temperature\n const tempVariance = this.getRandomInt(-3, 3); // Small day-to-day change\n const baseMaxC = currentTemp + this.getRandomInt(0, 5); // Max is higher than current\n const maxTempC = baseMaxC + tempVariance;\n const minTempC = maxTempC - this.getRandomInt(5, 10); // Min is lower than max\n\n const maxTempF = Math.round((maxTempC * 9) / 5 + 32);\n const minTempF = Math.round((minTempC * 9) / 5 + 32);\n\n return {\n date: dateStr,\n day: dayName,\n condition: conditionId,\n iconUrl: '', // Would be set from API\n maxTempC,\n maxTempF,\n minTempC,\n minTempF,\n hour: [],\n };\n });\n\n return { ...data, forecast };\n }),\n );\n }\n\n /**\n * Set the API key for the weather service\n * No-op in the mock implementation\n * @param key The API key\n */\n override setApiKey(key: string): void {\n // No-op for mock service\n console.log('API key setting is ignored in mock weather service');\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const AXP_WEATHER_API_KEY = new InjectionToken<string>('AXP_WEATHER_API_KEY', {\n providedIn: 'root',\n factory: () => {\n return '40281dc1e31749edb6c104828250604';\n },\n});\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, catchError, map, throwError } from 'rxjs';\nimport { AXPWeatherApiAbstract, AXPWeatherData, AXPWeatherRequestOptions } from './weather-api.abstract';\nimport { AXP_WEATHER_API_KEY } from './weather-api.key';\n\n/**\n * Real Weather API Service\n * Fetches actual weather data from a weather API service\n */\n@Injectable()\nexport class AXPWeatherApiService extends AXPWeatherApiAbstract {\n private readonly http = inject(HttpClient);\n\n // API configuration\n private readonly baseApiUrl = 'https://api.weatherapi.com/v1';\n private apiKeyToken = inject(AXP_WEATHER_API_KEY, { optional: true });\n\n /**\n * Set the API key for the weather service\n * @param key The API key\n */\n setApiKey(key: string): void {\n if (key && key.trim() !== '') {\n this.apiKeyToken = key;\n }\n }\n\n /**\n * Get current weather data for given location\n * @param options Weather request options\n * @returns Observable with weather data\n */\n override getWeather(options: AXPWeatherRequestOptions): Observable<AXPWeatherData> {\n // If forecast is likely needed, we should fetch it all at once\n if (options.useMockData === false || options.useMockData === undefined) {\n // For real API, use the forecast endpoint which includes current data\n return this.getForecast({\n ...options,\n days: 1, // Request minimal forecast data\n });\n }\n\n // For mock data, we'll continue using separate calls for backward compatibility\n const locationParts = this.parseLocation(options.location || '');\n const displayName = this.formatLocationName(locationParts);\n\n // Use real API with query based on city only\n const query = encodeURIComponent(locationParts.city);\n const url = `${this.baseApiUrl}/current.json?key=${this.apiKeyToken}&q=${query}&aqi=no`;\n\n return this.http.get<any>(url).pipe(\n map((data) => this.transformApiResponse(data, displayName)),\n catchError((error) => {\n console.error('Weather API error:', error);\n // Check for location not found error\n if (error.error?.error?.code === 1006) {\n return throwError(\n () => new Error(`Location \"${locationParts.city}\" not found. Please check the city name and try again.`),\n );\n }\n return throwError(() => new Error(`Failed to fetch weather data: ${error.message}`));\n }),\n );\n }\n\n /**\n * Get weather forecast for a location\n * @param options Weather request options with days\n * @returns Observable of weather data with forecast\n */\n override getForecast(options: AXPWeatherRequestOptions & { days?: number }): Observable<AXPWeatherData> {\n const locationParts = this.parseLocation(options.location || '');\n const displayName = this.formatLocationName(locationParts);\n const days = options.days || 5;\n\n // Build forecast API URL\n const query = encodeURIComponent(locationParts.city);\n const url = `${this.baseApiUrl}/forecast.json?key=${this.apiKeyToken}&q=${query}&days=${days}&aqi=no`;\n\n return this.http.get<any>(url).pipe(\n map((data) => this.transformForecastResponse(data, displayName, days)),\n catchError((error) => {\n console.error('Weather API error:', error);\n // Check for location not found error\n if (error.error?.error?.code === 1006) {\n return throwError(\n () => new Error(`Location \"${locationParts.city}\" not found. Please check the city name and try again.`),\n );\n }\n return throwError(() => new Error(`Failed to fetch forecast data: ${error.message}`));\n }),\n );\n }\n\n /**\n * Transform API response to our internal data model\n * @param apiData Raw API response\n * @param displayName Formatted location name\n * @returns Normalized weather data\n */\n private transformApiResponse(apiData: any, displayName: string): AXPWeatherData {\n // Map API condition text to our condition IDs\n const conditionText = apiData.current?.condition?.text || '';\n const conditionId = this.mapApiConditionToId(conditionText);\n\n return {\n location: {\n city: apiData.location?.name || '',\n country: apiData.location?.country || '',\n displayName: displayName,\n },\n current: {\n condition: conditionId, // Use our mapped condition ID\n conditionCode: apiData.current?.condition?.code || 0,\n iconUrl: apiData.current?.condition?.icon || '',\n tempC: apiData.current?.temp_c || 0,\n tempF: apiData.current?.temp_f || 0,\n feelsLikeC: apiData.current?.feelslike_c || 0,\n feelsLikeF: apiData.current?.feelslike_f || 0,\n humidity: apiData.current?.humidity || 0,\n windKph: apiData.current?.wind_kph || 0,\n windMph: apiData.current?.wind_mph || 0,\n windDirection: apiData.current?.wind_dir || '',\n uv: apiData.current?.uv || 0,\n lastUpdated: apiData.current?.last_updated || new Date().toISOString(),\n },\n forecast: [],\n };\n }\n\n /**\n * Transform forecast API response to our internal data model\n * @param apiData Raw API response with forecast\n * @param displayName Formatted location name\n * @param days Number of forecast days\n * @returns Normalized weather data with forecast\n */\n private transformForecastResponse(apiData: any, displayName: string, days: number): AXPWeatherData {\n // First transform the current weather data using the current field of the forecast response\n const weatherData = this.transformApiResponse(apiData, displayName);\n\n // Then add the forecast data\n const forecastDays = apiData.forecast?.forecastday || [];\n weatherData.forecast = forecastDays.slice(0, days).map((day: any) => {\n // Parse the date for day name\n const date = new Date(day.date);\n const dayName = date.toLocaleDateString('en-US', { weekday: 'short' });\n\n // Map condition to our internal ID\n const conditionText = day.day?.condition?.text || '';\n const conditionId = this.mapApiConditionToId(conditionText);\n\n return {\n date: day.date,\n day: dayName,\n condition: conditionId,\n iconUrl: day.day?.condition?.icon || '',\n maxTempC: day.day?.maxtemp_c || 0,\n maxTempF: day.day?.maxtemp_f || 0,\n minTempC: day.day?.mintemp_c || 0,\n minTempF: day.day?.mintemp_f || 0,\n hour: day.hour.map((hour: any) => ({\n time: hour.time,\n condition: hour.condition.code,\n iconUrl: hour.condition.icon,\n tempC: hour.temp_c,\n tempF: hour.temp_f,\n })),\n };\n });\n\n return weatherData;\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { catchError, finalize, of } from 'rxjs';\nimport { AXPWeatherApiAbstract, AXPWeatherApiService, AXPWeatherData, AXPWeatherHour } from '../weather-services';\n\n@Component({\n template: `\n <div class=\"ax-size-full ax-p-6\">\n @if (weatherData() && !isLoading() && !hasError()) {\n <div class=\"ax-flex ax-h-full ax-flex-col ax-gap-4 ax-justify-around\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-1 ax-flex-wrap\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-shrink-0\">\n <img\n [src]=\"getConditionIcon(weatherData()!.current.condition)\"\n class=\"ax-size-32 ax-object-cover -ax-m-8\"\n [alt]=\"getConditionName(weatherData()!.current.condition)\"\n loading=\"lazy\"\n />\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-items-start\">\n <span class=\"ax-text-lg ax-font-medium ax-opacity-85\">{{\n getConditionName(weatherData()!.current.condition)\n }}</span>\n <span class=\"ax-text-5xl\" style=\"text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3)\"\n >{{ getCurrentTemperature() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n </div>\n </div>\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-2\">\n <span class=\"ax-text-2xl ax-font-bold ax-capitalize\">{{ city() }}</span>\n <div class=\"ax-flex ax-gap-4 ax-font-semibold ax-opacity-85\">\n <span\n >H: {{ getMaxTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n <span\n >L: {{ getMinTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n </div>\n </div>\n </div>\n\n <div\n class=\"ax-flex ax-w-full ax-gap-1 ax-items-center ax-justify-around ax-shrink-0\"\n [class]=\"displayedHourlyForecast().length > 5 ? 'ax-overflow-x-auto' : 'ax-overflow-x-visible'\"\n >\n @for (hour of displayedHourlyForecast(); track hour.time) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-p-2 ax-cursor-default ax-min-w-16 ax-gap-2\">\n <span class=\"ax-text-sm ax-font-medium ax-opacity-85\">{{ getHourLabel(hour.time) }}</span>\n <img\n [src]=\"getConditionIcon(weatherData()!.forecast[0].condition)\"\n class=\"ax-size-16 ax-object-cover -ax-m-4\"\n [alt]=\"getConditionName(weatherData()!.forecast[0].condition)\"\n />\n <span class=\"ax-text-lg ax-font-semibold\"\n >{{ getHourTemp(hour) | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n </div>\n }\n </div>\n\n <div class=\"ax-mt-2 ax-w-full\">\n <div\n class=\"ax-grid ax-grid-cols-[1fr_auto_auto_auto] ax-gap-x-4 ax-gap-y-2 ax-items-center ax-justify-items-start\"\n >\n @for (day of displayedForecast(); track day.date) {\n <span class=\"ax-font-medium\">{{ getDayName(parseDate(day.date)) }}</span>\n <div class=\"ax-flex ax-items-center ax-justify-center\">\n <img\n [src]=\"getConditionIcon(day.condition)\"\n class=\"ax-w-8 ax-h-8 ax-scale-[2]\"\n [alt]=\"getConditionName(day.condition)\"\n />\n </div>\n <span class=\"ax-font-semibold\"\n >{{ getForecastDayTemp(day) | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n <span class=\"ax-opacity-85\"\n >{{ day.minTempC | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup></span\n >\n } @empty {\n <span class=\"ax-opacity-85\">No forecast data available</span>\n }\n </div>\n </div>\n </div>\n } @else {\n <div class=\"ax-flex ax-size-full ax-flex-col ax-gap-6\" [attr.aria-busy]=\"isLoading()\">\n @if (isLoading()) {\n <!-- Current weather skeleton -->\n <div class=\"ax-flex ax-items-start ax-justify-around ax-w-full ax-gap-4\">\n <div class=\"ax-flex ax-items-center ax-gap-4\">\n <ax-skeleton class=\"ax-w-20 ax-h-20 ax-rounded-full\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-skeleton class=\"ax-w-24 ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-32 ax-h-12 ax-rounded\"></ax-skeleton>\n </div>\n </div>\n <div class=\"ax-flex ax-flex-col ax-items-end ax-gap-2\">\n <ax-skeleton class=\"ax-w-28 ax-h-8 ax-rounded\"></ax-skeleton>\n <div class=\"ax-flex ax-gap-2\">\n <ax-skeleton class=\"ax-w-12 ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-12 ax-h-6 ax-rounded\"></ax-skeleton>\n </div>\n </div>\n </div>\n\n <!-- Hourly forecast skeleton -->\n <div class=\"ax-flex ax-w-full ax-gap-2 ax-items-center ax-justify-around\">\n @for (i of [1, 2, 3, 4, 5]; track i) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-gap-2 ax-min-w-16\">\n <ax-skeleton class=\"ax-w-12 ax-h-4 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-10 ax-h-10 ax-rounded-full ax-my-1\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-10 ax-h-6 ax-rounded\"></ax-skeleton>\n </div>\n }\n </div>\n\n <!-- Daily forecast skeleton -->\n <div class=\"ax-mt-2 ax-w-full\">\n <div class=\"ax-grid ax-grid-cols-[1fr_auto_auto_auto] ax-gap-x-4 ax-gap-y-4 ax-items-center\">\n @for (i of [1, 2]; track i) {\n <ax-skeleton class=\"ax-w-20 ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8 ax-h-8 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-10 ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-10 ax-h-6 ax-rounded\"></ax-skeleton>\n }\n </div>\n </div>\n } @else if (hasError()) {\n <!-- No data state (not loading, no error) -->\n <div class=\"axp-weather-no-data-state\">\n <i class=\"fa-solid fa-cloud-sun\"></i>\n <p>{{ 'weather.no-data' | translate: { scope: 'dashboard' } | async }}</p>\n <ax-button\n [look]=\"'outline'\"\n [color]=\"'secondary'\"\n [text]=\"'weather.refresh-weather' | translate: { scope: 'dashboard' } | async\"\n (onClick)=\"loadWeatherData()\"\n ></ax-button>\n </div>\n }\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n @apply ax-size-full;\n }\n\n .ax-opacity-85 {\n color: gray;\n }\n\n .axp-weather-no-data-state {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100%;\n padding: 2rem;\n text-align: center;\n\n i {\n font-size: 3rem;\n margin-bottom: 1rem;\n }\n\n p {\n margin-bottom: 1.5rem;\n font-size: 1.1rem;\n }\n }\n\n sup {\n @apply ax-font-light;\n position: relative;\n top: -0.3em;\n font-size: 0.6em;\n margin-left: 0.1em;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXDecoratorModule, AXTooltipModule, AXSkeletonModule, AXTranslationModule, AXButtonModule],\n providers: [\n {\n provide: AXPWeatherApiAbstract,\n useClass: AXPWeatherApiService,\n },\n ],\n})\nexport class AXMAdvancedWeatherViewComponent extends AXPValueWidgetComponent {\n private weatherService = inject(AXPWeatherApiAbstract);\n protected weatherData = signal<AXPWeatherData | null>(null);\n\n protected isLoading = signal(true);\n protected hasError = signal(false);\n protected errorMessage = signal('');\n\n protected city = computed(() => this.options()['city'] || 'New York');\n protected temperatureUnit = computed(() => this.options()['temperatureUnit']?.id || '°C');\n protected forecastDays = computed(() => (this.options()['forecastDays'] ?? 2) + 1);\n protected forecastHours = computed(() => this.options()['forecastHours'] ?? 5);\n\n private iconCache = new Map<string, string>();\n\n constructor() {\n super();\n effect(() => {\n if (this.options()) {\n this.loadWeatherData();\n }\n });\n }\n\n protected loadWeatherData(): void {\n if (!this.city()) {\n this.isLoading.set(false);\n return;\n }\n\n this.isLoading.set(true);\n this.hasError.set(false);\n this.errorMessage.set('');\n\n const requestOptions = {\n location: this.city(),\n tempUnit: this.temperatureUnit(),\n days: this.forecastDays(),\n };\n\n this.weatherService\n .getForecast(requestOptions)\n .pipe(\n catchError((error) => {\n this.handleError(error);\n return of(null);\n }),\n finalize(() => this.isLoading.set(false)),\n )\n .subscribe((data) => {\n if (data) {\n this.weatherData.set(data);\n }\n });\n }\n\n private handleError(error: any): void {\n console.error('Advanced weather widget error:', error);\n this.hasError.set(true);\n this.errorMessage.set(error.message || 'Failed to load weather data');\n }\n\n protected getConditionIcon(conditionId: string): string {\n if (!conditionId) {\n return '';\n }\n if (this.iconCache.has(conditionId)) {\n return this.iconCache.get(conditionId)!;\n }\n\n const svgIcon = this.weatherService.getCondition(conditionId).svgIcon;\n const iconPath = `assets/images/weather/${svgIcon}`;\n this.iconCache.set(conditionId, iconPath);\n return iconPath;\n }\n\n protected getConditionName(conditionId: string): string {\n if (!conditionId) {\n return 'Unknown';\n }\n const condition = this.weatherService.getCondition(conditionId);\n return condition?.name || 'Unknown';\n }\n\n protected getCurrentTemperature(): number {\n if (!this.weatherData()) return 0;\n return this.temperatureUnit() === '°C' ? this.weatherData()!.current.tempC : this.weatherData()!.current.tempF;\n }\n\n protected getMaxTemp(): number {\n if (!this.weatherData()?.forecast?.[0]) return 0;\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.forecast[0].maxTempC\n : this.weatherData()!.forecast[0].maxTempF;\n }\n\n protected getMinTemp(): number {\n if (!this.weatherData()?.forecast?.[0]) return 0;\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.forecast[0].minTempC\n : this.weatherData()!.forecast[0].minTempF;\n }\n\n protected getForecastDayTemp(day: any): number {\n if (!day) return 0;\n return this.temperatureUnit() === '°C' ? day.maxTempC : day.maxTempF;\n }\n\n protected parseDate(dateStr: string): Date {\n return new Date(dateStr);\n }\n\n protected getDayName(date: Date): string {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const tomorrow = new Date(today);\n tomorrow.setDate(tomorrow.getDate() + 1);\n\n const checkDate = new Date(date);\n checkDate.setHours(0, 0, 0, 0);\n\n if (checkDate.getTime() === today.getTime()) {\n return 'Today';\n }\n if (checkDate.getTime() === tomorrow.getTime()) {\n return 'Tomorrow';\n }\n\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n return days[checkDate.getDay()];\n }\n\n protected displayedForecast = computed(() => {\n this.forecastDays();\n const weatherData = this.weatherData();\n if (!weatherData?.forecast) return [];\n // Skip today's forecast for the bottom row display\n return weatherData.forecast.slice(1, this.forecastDays());\n });\n\n protected displayedHourlyForecast = computed(() => {\n this.forecastHours();\n const weatherData = this.weatherData();\n if (!weatherData?.forecast?.[0]?.hour) return [];\n\n const now = new Date();\n const currentHour = now.getHours();\n const todayHours = weatherData.forecast[0].hour;\n\n // Get hours after current hour for today\n const remainingTodayHours = todayHours.filter((hour) => {\n const hourTime = new Date(hour.time);\n return hourTime.getHours() > currentHour;\n });\n\n // If we need more hours, get from tomorrow\n let result = [...remainingTodayHours];\n if (result.length < this.forecastHours() && weatherData.forecast.length > 1) {\n const tomorrowHours = weatherData.forecast[1].hour;\n const neededFromTomorrow = this.forecastHours() - result.length;\n result = [...result, ...tomorrowHours.slice(0, neededFromTomorrow)];\n }\n\n // Limit to requested number of hours\n return result.slice(0, this.forecastHours());\n });\n\n protected getHourLabel(timeStr: string): string {\n const time = new Date(timeStr);\n return time.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });\n }\n\n protected getHourTemp(hour: AXPWeatherHour): number {\n return this.temperatureUnit() === '°C' ? hour.tempC : hour.tempF;\n }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\n\nimport { AXP_DATA_PROPERTY_GROUP } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../../widget-categories.type';\n\n/**\n * Weather Widget Configuration\n * Provides customization options for displaying weather data and forecast\n */\nexport const AXPAdvancedWeatherWidget: AXPWidgetConfig = {\n name: 'advanced-weather',\n title: 'Advanced Weather Widget',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-cloud-sun',\n properties: [\n {\n name: 'temperatureUnit',\n title: '@dashboard:widgets.weather.temperature-unit',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: '°C',\n dataType: 'string',\n interface: {\n name: 'temperatureUnit',\n path: 'options.temperatureUnit',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ['°C', '°F'],\n },\n },\n },\n visible: true,\n },\n {\n name: 'city',\n title: '@dashboard:widgets.weather.city',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 'New York',\n dataType: 'string',\n interface: {\n name: 'city',\n path: 'options.city',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n\n {\n name: 'forecastHours',\n title: '@dashboard:widgets.weather.forecast-hours',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 5,\n dataType: 'number',\n interface: {\n name: 'forecastHours',\n path: 'options.forecastHours',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 8,\n step: 1,\n },\n },\n },\n visible: true,\n },\n {\n name: 'forecastDays',\n title: '@dashboard:widgets.weather.forecast-days',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 2,\n dataType: 'number',\n interface: {\n name: 'forecastDays',\n path: 'options.forecastDays',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 2,\n step: 1,\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./advanced-weather.component').then((c) => c.AXMAdvancedWeatherViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 5,\n minWidth: 3,\n minHeight: 5,\n maxWidth: 5,\n maxHeight: 7,\n },\n md: {\n width: 3,\n height: 5,\n minWidth: 3,\n minHeight: 5,\n maxWidth: 5,\n maxHeight: 7,\n },\n sm: {\n height: 5,\n minHeight: 5,\n maxHeight: 7,\n },\n },\n },\n};\n\n/**\n * Type declaration to register the weather widget type\n */\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n advancedWeather: 'advanced-weather';\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { catchError, finalize, of } from 'rxjs';\nimport { AXPWeatherApiAbstract, AXPWeatherApiService, AXPWeatherData } from '../weather-services';\n\n@Component({\n template: `\n @if (weatherData() && !isLoading() && !hasError()) {\n <div\n class=\"ax-flex ax-size-full ax-flex-col ax-items-start ax-p-2 ax-justify-evenly weather-container ax-overflow-hidden\"\n [attr.aria-label]=\"'Current weather for ' + city()\"\n >\n <div class=\"weather-top ax-flex ax-justify-around ax-items-center ax-w-full ax-pt-2 ax-gap-2 ax-flex-wrap\">\n <img\n [src]=\"getConditionIcon()\"\n class=\"ax-size-28 ax-object-cover -ax-m-6\"\n [alt]=\"weatherData()?.current?.condition + ' weather icon'\"\n loading=\"lazy\"\n />\n <div class=\"temperature ax-flex ax-justify-center ax-items-start\">\n <span class=\"ax-text-5xl\" style=\"text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3)\">\n {{ getCurrentTemperature() | number: '1.0-0' }}\n </span>\n <span>{{ temperatureUnit() }}</span>\n </div>\n </div>\n <div class=\"ax-text-start ax-ps-6\">\n <div class=\"ax-mt-1\">\n <span class=\"ax-font-bold ax-capitalize\">{{ city() }}</span>\n </div>\n <div class=\"ax-pt-2 ax-flex ax-gap-4 ax-opacity-75\">\n <span aria-label=\"High temperature\">\n H: {{ getMaxTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup>\n </span>\n <span aria-label=\"Low temperature\">\n L: {{ getMinTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup>\n </span>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"ax-flex ax-size-full ax-flex-col ax-p-2 ax-gap-2 ax-justify-center\" [attr.aria-busy]=\"isLoading()\">\n @if (isLoading()) {\n <!-- Weather icon and temperature skeleton -->\n <div class=\"ax-flex ax-items-center ax-w-full ax-pt-2 ax-gap-8\">\n <ax-skeleton class=\"ax-w-16 ax-h-12 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-24 ax-h-8 ax-rounded -ax-ms-2\"></ax-skeleton>\n </div>\n\n <!-- City and temperature range skeleton -->\n <div class=\"ax-text-start ax-ps-6 ax-w-full\">\n <div class=\"ax-mt-1\">\n <ax-skeleton class=\"ax-w-24 ax-h-6 ax-rounded\"></ax-skeleton>\n </div>\n <div class=\"ax-pt-2 ax-flex ax-gap-4\">\n <ax-skeleton class=\"ax-w-12 ax-h-4 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-12 ax-h-4 ax-rounded\"></ax-skeleton>\n </div>\n </div>\n } @else if (hasError()) {\n <!-- No data state (not loading, no error) -->\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-center ax-items-center ax-h-full ax-p-8\">\n <i class=\"ax-text-3xl fa-solid fa-cloud-sun\"></i>\n <p class=\"ax-text-sm\">{{ 'weather.no-data' | translate: { scope: 'dashboard' } | async }}</p>\n <ax-button\n [look]=\"'outline'\"\n [color]=\"'secondary'\"\n [text]=\"'weather.refresh-weather' | translate: { scope: 'dashboard' } | async\"\n (onClick)=\"loadWeatherData()\"\n ></ax-button>\n </div>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n @apply ax-size-full;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXDecoratorModule, AXTooltipModule, AXSkeletonModule, AXTranslationModule, AXButtonModule],\n providers: [\n {\n provide: AXPWeatherApiAbstract,\n useClass: AXPWeatherApiService,\n },\n ],\n})\nexport class AXMMinimalWeatherViewComponent extends AXPValueWidgetComponent {\n private weatherService = inject(AXPWeatherApiAbstract);\n\n protected weatherData = signal<AXPWeatherData | null>(null);\n protected isLoading = signal(true);\n protected hasError = signal(false);\n protected errorMessage = signal('');\n\n protected city = computed(() => this.options()['city'] || 'New York');\n protected temperatureUnit = computed(() => this.options()['temperatureUnit']?.id || '°C');\n\n private iconCache = new Map<string, string>();\n\n constructor() {\n super();\n effect(() => {\n if (this.options()) {\n this.loadWeatherData();\n }\n });\n }\n\n protected loadWeatherData(): void {\n if (!this.city()) {\n this.isLoading.set(false);\n return;\n }\n\n this.isLoading.set(true);\n this.hasError.set(false);\n this.errorMessage.set('');\n\n const requestOptions = {\n location: this.city(),\n tempUnit: this.temperatureUnit(),\n days: 1,\n };\n\n this.weatherService\n .getForecast(requestOptions)\n .pipe(\n catchError((error) => {\n this.handleError(error);\n return of(null);\n }),\n finalize(() => this.isLoading.set(false)),\n )\n .subscribe((data) => {\n if (data) {\n this.weatherData.set(data);\n }\n });\n }\n\n private handleError(error: any): void {\n console.error('Minimal weather widget error:', error);\n this.hasError.set(true);\n this.errorMessage.set(error.message || 'Failed to load weather data');\n }\n\n protected getConditionIcon(): string {\n const conditionId = this.weatherData()?.current.condition || 'unknown';\n\n if (this.iconCache.has(conditionId)) {\n return this.iconCache.get(conditionId)!;\n }\n\n const svgIcon = this.weatherService.getCondition(conditionId).svgIcon;\n const iconPath = `assets/images/weather/${svgIcon}`;\n this.iconCache.set(conditionId, iconPath);\n return iconPath;\n }\n\n protected getCurrentTemperature(): number {\n if (!this.weatherData()) return 0;\n return this.temperatureUnit() === '°C' ? this.weatherData()!.current.tempC : this.weatherData()!.current.tempF;\n }\n\n protected getMaxTemp(): number {\n if (!this.weatherData()?.forecast?.[0]) return 0;\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.forecast[0].maxTempC\n : this.weatherData()!.forecast[0].maxTempF;\n }\n\n protected getMinTemp(): number {\n if (!this.weatherData()?.forecast?.[0]) return 0;\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.forecast[0].minTempC\n : this.weatherData()!.forecast[0].minTempF;\n }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\n\nimport { AXP_DATA_PROPERTY_GROUP } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../../widget-categories.type';\n\n/**\n * Weather Widget Configuration\n * Provides customization options for displaying weather data and forecast\n */\nexport const AXPMinimalWeatherWidget: AXPWidgetConfig = {\n name: 'minimal-weather',\n title: 'Minimal Weather Widget',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-cloud-sun',\n properties: [\n {\n name: 'temperatureUnit',\n title: '@dashboard:widgets.weather.temperature-unit',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: '°C',\n dataType: 'string',\n interface: {\n name: 'temperatureUnit',\n path: 'options.temperatureUnit',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ['°C', '°F'],\n },\n },\n },\n visible: true,\n },\n {\n name: 'city',\n title: '@dashboard:widgets.weather.city',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 'New York',\n dataType: 'string',\n interface: {\n name: 'city',\n path: 'options.city',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./minimal-weather.component').then((c) => c.AXMMinimalWeatherViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 2,\n height: 2,\n minWidth: 1,\n minHeight: 2,\n maxWidth: 2,\n maxHeight: 3,\n },\n md: {\n width: 2,\n height: 2,\n minWidth: 1,\n minHeight: 2,\n maxWidth: 2,\n maxHeight: 3,\n },\n sm: {\n height: 2,\n minHeight: 2,\n maxHeight: 3,\n },\n },\n },\n};\n\n/**\n * Type declaration to register the weather widget type\n */\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n minimalWeather: 'minimal-weather';\n }\n}\n","import { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { Observable, Subscription, interval as rxjsInterval, switchMap } from 'rxjs';\nimport {\n AXPWeatherApiAbstract,\n AXPWeatherApiService,\n AXPWeatherData,\n AXPWeatherRequestOptions,\n} from './weather-services';\n\n/**\n * Weather Widget Component\n * Displays current weather conditions and optional forecast data\n * for a specified location with customizable display options.\n */\n@Component({\n templateUrl: './weather-widget.component.html',\n styleUrls: ['./weather-widget.component.scss'],\n standalone: true,\n imports: [CommonModule, AXDateTimeModule, AXFormatModule, HttpClientModule, AXTranslationModule, AXPStateMessageComponent],\n providers: [\n {\n provide: AXPWeatherApiAbstract,\n useClass: AXPWeatherApiService,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPWeatherWidgetViewComponent extends AXPValueWidgetComponent {\n // Container element reference\n protected containerEl = viewChild.required<ElementRef<HTMLDivElement>>('containerElement');\n\n // Weather API service instance\n private weatherService = inject(AXPWeatherApiAbstract);\n\n // State signals\n protected weatherData = signal<AXPWeatherData | null>(null);\n protected isLoading = signal(true);\n protected hasError = signal(false);\n protected errorMessage = signal('');\n protected isForecastLoading = signal(false);\n\n // Auto-refresh subscription\n private refreshSubscription: Subscription | null = null;\n\n // Option-derived computed properties\n protected city = computed(() => {\n return this.options()['city'] || 'Newyork';\n });\n protected temperatureUnit = computed(() => this.options()['temperatureUnit']?.id || '°C');\n protected windSpeedUnit = computed(() => this.options()['windSpeedUnit']?.id || 'km/h');\n\n // Display option flags\n protected showCurrentCondition = computed(() => this.options()['showCurrentCondition'] !== false);\n protected showTemperature = computed(() => this.options()['showTemperature'] !== false);\n protected showHumidity = computed(() => this.options()['showHumidity'] !== false);\n protected showWind = computed(() => this.options()['showWind'] !== false);\n protected showForecast = computed(() => this.options()['showForecast'] !== false);\n protected forecastDays = computed(() => this.options()['forecastDays'] ?? 5);\n\n // Refresh settings\n protected autoRefresh = computed(() => this.options()['autoRefresh'] !== false);\n protected refreshInterval = computed(() => this.options()['refreshInterval']?.id ?? 15);\n\n // Reactivity effects\n private optionsEffect = effect(() => {\n const opts = this.options();\n this.loadWeatherData();\n this.setupRefreshTimer();\n });\n\n private valueEffect = effect(() => {\n this.city();\n this.loadWeatherData();\n });\n\n protected displayedForecast = computed(() => {\n const weatherData = this.weatherData();\n if (!weatherData?.forecast) return [];\n\n const forecastDays = this.forecastDays();\n return weatherData.forecast.slice(0, forecastDays);\n });\n\n /**\n * Component constructor\n * @param cdr ChangeDetectorRef for triggering view updates\n */\n constructor(protected cdr: ChangeDetectorRef) {\n super();\n // Inject the abstract service which will resolve to either the mock or real implementation\n this.weatherService = inject(AXPWeatherApiAbstract);\n\n setTimeout(() => {\n this.loadWeatherData();\n this.setupRefreshTimer();\n }, 0);\n }\n\n /**\n * Component cleanup on destroy\n */\n ngOnDestroy(): void {\n this.clearRefreshTimer();\n }\n\n /**\n * Loads weather data from the API\n * Sets loading state and handles errors\n */\n private loadWeatherData(): void {\n this.isLoading.set(true);\n this.hasError.set(false);\n this.errorMessage.set('');\n\n const locationQuery = this.city();\n const shouldShowForecast = this.showForecast();\n\n // If we need forecast, request it directly to avoid duplicate calls\n // The forecast endpoint also returns current weather\n if (shouldShowForecast) {\n const forecastOptions: AXPWeatherRequestOptions & { days?: number } = {\n location: locationQuery,\n tempUnit: this.temperatureUnit(),\n useMockData: false, // Use real API, signals to use forecast endpoint\n days: this.forecastDays(),\n };\n\n this.isForecastLoading.set(true);\n this.weatherService.getForecast(forecastOptions).subscribe({\n next: (data) => {\n this.weatherData.set(data);\n this.isLoading.set(false);\n this.isForecastLoading.set(false);\n setTimeout(() => this.cdr.detectChanges());\n },\n error: (error) => {\n this.handleError(error);\n this.isLoading.set(false);\n this.isForecastLoading.set(false);\n this.cdr.detectChanges();\n },\n });\n return;\n }\n\n // If we only need current weather, use getWeather\n const requestOptions: AXPWeatherRequestOptions = {\n location: locationQuery,\n tempUnit: this.temperatureUnit(),\n useMockData: false, // Use real API\n };\n\n this.weatherService.getWeather(requestOptions).subscribe({\n next: (data) => {\n this.weatherData.set(data);\n this.isLoading.set(false);\n setTimeout(() => this.cdr.detectChanges());\n },\n error: (error) => {\n this.handleError(error);\n this.isLoading.set(false);\n this.cdr.detectChanges();\n },\n });\n }\n\n /**\n * Sets up the auto-refresh timer based on configuration\n */\n private setupRefreshTimer(): void {\n this.clearRefreshTimer();\n if (!this.autoRefresh()) return;\n\n const minInterval = 5; // 5 minutes minimum\n const intervalValue = Math.max(this.refreshInterval(), minInterval);\n const intervalMs = intervalValue * 60 * 1000;\n\n this.refreshSubscription = rxjsInterval(intervalMs)\n .pipe(\n switchMap(() => {\n // Always use the loadWeatherData method to determine the correct API call\n this.loadWeatherData();\n // Return an empty observable to satisfy the switchMap typing\n return new Observable<AXPWeatherData>((observer) => {\n observer.complete();\n });\n }),\n )\n .subscribe();\n }\n\n /**\n * Clears the refresh timer subscription\n */\n private clearRefreshTimer(): void {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n this.refreshSubscription = null;\n }\n }\n\n /**\n * Manually refreshes the weather data\n */\n protected refreshWeather(): void {\n this.loadWeatherData();\n }\n\n /**\n * Gets the current temperature based on selected unit\n */\n protected getCurrentTemperature(): number {\n if (!this.weatherData()) return 0;\n\n return this.temperatureUnit() === '°C' ? this.weatherData()!.current.tempC : this.weatherData()!.current.tempF;\n }\n\n /**\n * Gets the feels like temperature based on selected unit\n */\n protected getFeelsLikeTemperature(): number {\n if (!this.weatherData()) return 0;\n\n return this.temperatureUnit() === '°C'\n ? this.weatherData()!.current.feelsLikeC\n : this.weatherData()!.current.feelsLikeF;\n }\n\n /**\n * Gets the humidity percentage\n */\n protected getHumidity(): number {\n return this.weatherData()?.current.humidity || 0;\n }\n\n /**\n * Gets the wind speed based on selected unit\n */\n protected getWindSpeed(): number {\n if (!this.weatherData()) return 0;\n\n return this.windSpeedUnit() === 'km/h' ? this.weatherData()!.current.windKph : this.weatherData()!.current.windMph;\n }\n\n /**\n * Gets the current weather condition\n */\n protected getCurrentCondition(): string {\n const conditionId = this.weatherData()?.current.condition || '';\n return this.getConditionName(conditionId);\n }\n\n /**\n * Gets the formatted last updated time\n */\n protected getLastUpdated(): string {\n if (!this.weatherData()?.current.lastUpdated) return '';\n\n return new Date(this.weatherData()!.current.lastUpdated).toLocaleTimeString();\n }\n\n /**\n * Gets the appropriate icon class for a weather condition\n * @param conditionId The ID of the weather condition\n * @returns The Font Awesome icon class string\n */\n protected getConditionIcon(conditionId: string): string {\n if (!conditionId) {\n conditionId = 'unknown';\n }\n const svgIcon = this.weatherService.getCondition(conditionId).svgIcon;\n return `assets/images/weather/${svgIcon}`;\n }\n\n /**\n * Gets the display name for a weather condition\n * @param conditionId The ID of the weather condition\n * @returns The translated display name\n */\n protected getConditionName(conditionId: string): string {\n const condition = this.weatherService.getCondition(conditionId);\n if (!condition?.name) return 'weather.conditions.sunny';\n\n // Convert condition name to lowercase and replace spaces with hyphens\n const formattedName = condition.name.toLowerCase().replace(/\\s+/g, '-');\n return `weather.conditions.${formattedName}`;\n }\n\n /**\n * Gets the color for a weather condition\n * @param conditionId Weather condition ID\n * @returns CSS color value\n */\n protected getConditionColor(conditionId: string): string {\n const condition = this.weatherService.getCondition(conditionId);\n return condition?.color || '#999999';\n }\n\n /**\n * Cleans up chart resources\n * Required by AXPChartBaseComponent\n */\n protected cleanupChart(): void {\n this.clearRefreshTimer();\n }\n\n private handleError(error: any): void {\n console.error('Weather widget error:', error);\n this.hasError.set(true);\n\n // Check if it's a network error\n if (error.status === 0) {\n this.errorMessage.set('weather.error.network');\n return;\n }\n\n // Check if it's an API error\n if (error.status >= 400 && error.status < 500) {\n this.errorMessage.set('weather.error.api');\n return;\n }\n\n // Default error message\n this.errorMessage.set('weather.error.general');\n }\n\n protected getTemperatureUnit(): string {\n return this.temperatureUnit() === '°C' ? 'weather.units.celsius' : 'weather.units.fahrenheit';\n }\n\n protected getWindSpeedUnit(): string {\n return this.windSpeedUnit() === 'km/h' ? 'weather.units.kmh' : 'weather.units.mph';\n }\n\n protected getDayName(date: Date): string {\n const today = new Date();\n const tomorrow = new Date(today);\n tomorrow.setDate(tomorrow.getDate() + 1);\n\n if (date.toDateString() === today.toDateString()) {\n return 'weather.days.today';\n }\n if (date.toDateString() === tomorrow.toDateString()) {\n return 'weather.days.tomorrow';\n }\n\n const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\n return `weather.days.${days[date.getDay()]}`;\n }\n\n protected parseDate(dateStr: string): Date {\n return new Date(dateStr);\n }\n}\n","<!-- Weather Widget Component Template -->\n<div class=\"axp-weather-container\" #containerElement>\n <!-- Loading indicator -->\n @if (isLoading()) {\n <div class=\"axp-weather-loading-overlay\">\n <div class=\"axp-weather-loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading' | translate | async }}</span>\n </div>\n </div>\n }\n\n <!-- Error message -->\n @if (hasError()) {\n <axp-state-message\n mode=\"error\"\n icon=\"fa-solid fa-exclamation-triangle\"\n [title]=\"'@dashboard:weather.error.title'\"\n [description]=\"errorMessage()\"\n >\n <button slot=\"actions\" class=\"axp-weather-retry-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.retry' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n\n <!-- Weather content - only show when we have data -->\n @if (weatherData()) {\n <!-- Background decorations based on weather condition -->\n <div class=\"axp-weather-background-decorations\">\n <div class=\"axp-weather-decoration\" [ngClass]=\"weatherData()?.current?.condition?.toLowerCase()\"></div>\n <div class=\"axp-weather-gradient-overlay\"></div>\n </div>\n\n <div class=\"axp-weather-inner\">\n <!-- Location information section -->\n <div class=\"axp-weather-location-info\">\n <div class=\"axp-weather-location-icon\">\n <i class=\"fa-solid fa-location-dot\"></i>\n </div>\n <div class=\"axp-weather-location-text\">\n <h2 class=\"axp-weather-location-name\">{{ city() }}</h2>\n </div>\n </div>\n\n <!-- Current weather conditions section -->\n <div class=\"axp-weather-current-weather\">\n <!-- Weather icon and condition name -->\n @if (showCurrentCondition()) {\n <div class=\"axp-weather-condition\">\n <div class=\"axp-weather-icon-wrapper\">\n <div class=\"axp-weather-icon\">\n <img [src]=\"getConditionIcon(weatherData()?.current?.condition || '')\" />\n </div>\n <div\n class=\"axp-weather-icon-glow\"\n [style.background-color]=\"getConditionColor(weatherData()?.current?.condition || '')\"\n ></div>\n </div>\n <div class=\"axp-weather-condition-name\">\n {{ getCurrentCondition() | translate | async }}\n </div>\n </div>\n }\n\n <!-- Temperature display -->\n @if (showTemperature()) {\n <div class=\"axp-weather-temperature\">\n <span class=\"axp-weather-temperature-value\">{{ getCurrentTemperature() }}</span>\n <span class=\"axp-weather-temperature-unit\">{{ getTemperatureUnit() | translate | async }}</span>\n </div>\n }\n </div>\n\n <!-- Weather details section (humidity and wind) -->\n @if (showHumidity() || showWind()) {\n <div class=\"axp-weather-details\">\n <!-- Humidity information -->\n @if (showHumidity()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-droplet\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.humidity' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">{{ getHumidity() }}%</div>\n </div>\n </div>\n }\n\n <!-- Wind speed information -->\n @if (showWind()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-wind\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.wind' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">\n {{ getWindSpeed() }} {{ getWindSpeedUnit() | translate | async }}\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Weather forecast section -->\n @if (showForecast() && weatherData()?.forecast) {\n <div class=\"axp-weather-forecast\">\n <div class=\"axp-weather-forecast-header\">\n <h3 class=\"axp-weather-forecast-title\">\n <i class=\"fa-solid fa-calendar-days\"></i>\n <span class=\"ax-px-1\">{{ '@dashboard:weather.forecast' | translate | async }}</span>\n </h3>\n </div>\n <!-- Loading indicator for forecast -->\n <!-- @if (isForecastLoading()) {\n <div class=\"axp-weather-forecast-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading-forecast' | translate | async }}</span>\n </div>\n } -->\n <!-- Scrollable forecast days display -->\n <div class=\"axp-weather-forecast-items\">\n @for (day of displayedForecast(); track day.day) {\n <div class=\"axp-weather-forecast-day\">\n <div class=\"axp-weather-forecast-day-name\">\n {{ getDayName(parseDate(day.date)) | translate | async }}\n </div>\n <div class=\"axp-weather-forecast-icon\" [title]=\"getConditionName(day.condition) | translate | async\">\n <img [src]=\"getConditionIcon(day.condition || '')\" />\n </div>\n <div class=\"axp-weather-forecast-temps\">\n <span class=\"axp-weather-forecast-low\">\n {{ temperatureUnit() === '°C' ? day.minTempC : day.minTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n <span class=\"axp-weather-forecast-high\">\n {{ temperatureUnit() === '°C' ? day.maxTempC : day.maxTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Last updated timestamp -->\n <div class=\"axp-weather-last-updated\">\n <span>{{ '@dashboard:weather.last-updated' | translate | async }}: {{ getLastUpdated() }}</span>\n </div>\n\n <!-- Manual refresh button -->\n <div class=\"axp-weather-refresh-action\">\n <button\n class=\"axp-weather-refresh-button\"\n (click)=\"refreshWeather()\"\n [attr.aria-label]=\"'@dashboard:weather.refresh' | translate | async\"\n [title]=\"'@dashboard:weather.refresh' | translate | async\"\n >\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.refresh' | translate | async }}</span>\n </button>\n </div>\n </div>\n } @else if (!isLoading() && !hasError()) {\n <!-- No data state (not loading, no error) -->\n <axp-state-message\n icon=\"fa-solid fa-cloud-sun\"\n [title]=\"'@dashboard:weather.no-data.title'\"\n [description]=\"'@dashboard:weather.no-data.description'\"\n >\n <button slot=\"actions\" class=\"axp-weather-refresh-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.load-data' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\n\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../widget-categories.type';\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_BEHAVIOR_PROPERTY_GROUP,\n AXP_DATA_PROPERTY_GROUP,\n} from '@acorex/platform/layout/widgets';\n\n/**\n * Weather Widget Configuration\n * Provides customization options for displaying weather data and forecast\n */\nexport const AXPWeatherWidget: AXPWidgetConfig = {\n name: 'weather',\n title: 'Weather Widget',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-cloud-sun',\n properties: [\n /* Location Settings */\n {\n name: 'city',\n title: '@dashboard:widgets.weather.city',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 'New York',\n dataType: 'string',\n interface: {\n name: 'city',\n path: 'options.city',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n\n /* Display Options */\n // {\n // name: 'showCurrentCondition',\n // title: 'Show Current Condition',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showCurrentCondition',\n // path: 'options.showCurrentCondition',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n // {\n // name: 'showTemperature',\n // title: 'Show Temperature',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showTemperature',\n // path: 'options.showTemperature',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n // {\n // name: 'showCurrentCondition',\n // title: 'Show Current Condition',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showCurrentCondition',\n // path: 'options.showCurrentCondition',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n // {\n // name: 'showTemperature',\n // title: 'Show Temperature',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showTemperature',\n // path: 'options.showTemperature',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n {\n name: 'showHumidity',\n title: '@dashboard:widgets.weather.show-humidity',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showHumidity',\n path: 'options.showHumidity',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showWind',\n title: '@dashboard:widgets.weather.show-wind',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showWind',\n path: 'options.showWind',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showForecast',\n title: '@dashboard:widgets.weather.show-forecast',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showForecast',\n path: 'options.showForecast',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'forecastDays',\n title: '@dashboard:widgets.weather.forecast-days',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 5,\n dataType: 'number',\n interface: {\n name: 'forecastDays',\n path: 'options.forecastDays',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 7,\n step: 1,\n },\n },\n },\n visible: true,\n },\n\n /* Units Settings */\n {\n name: 'temperatureUnit',\n title: '@dashboard:widgets.weather.temperature-unit',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: '°C',\n dataType: 'string',\n interface: {\n name: 'temperatureUnit',\n path: 'options.temperatureUnit',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ['°C', '°F'],\n },\n },\n },\n visible: true,\n },\n {\n name: 'windSpeedUnit',\n title: '@dashboard:widgets.weather.wind-speed-unit',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n defaultValue: 'km/h',\n dataType: 'string',\n interface: {\n name: 'windSpeedUnit',\n path: 'options.windSpeedUnit',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ['km/h', 'mph', 'm/s'],\n },\n },\n },\n visible: true,\n },\n\n /* Refresh Settings */\n {\n name: 'autoRefresh',\n title: '@dashboard:widgets.weather.auto-refresh',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'autoRefresh',\n path: 'options.autoRefresh',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'refreshInterval',\n title: '@dashboard:widgets.weather.refresh-interval',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: 15,\n dataType: 'number',\n interface: {\n name: 'refreshInterval',\n path: 'options.refreshInterval',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [5, 10, 15, 30, 60],\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./weather-widget.component').then((c) => c.AXPWeatherWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 7,\n minWidth: 2,\n minHeight: 4,\n maxWidth: 4,\n maxHeight: 8,\n },\n md: {\n width: 3,\n height: 7,\n minWidth: 2,\n minHeight: 4,\n maxWidth: 4,\n maxHeight: 8,\n },\n sm: {\n height: 7,\n minHeight: 4,\n maxHeight: 8,\n },\n },\n },\n};\n\n/**\n * Type declaration to register the weather widget type\n */\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n weather: 'weather';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n OnDestroy,\n OnInit,\n signal,\n WritableSignal,\n} from '@angular/core';\n\ninterface AXMClockMark {\n transform?: string;\n top?: string;\n left?: string;\n value?: number;\n}\n\n@Component({\n selector: 'axm-analog-clock',\n standalone: true,\n imports: [],\n template: `\n <div class=\"axm-analog-clock-container\">\n <div class=\"axm-analog-clock-face\" [class]=\"classes()\">\n <div class=\"axm-analog-clock-marks-container\">\n @for (line of hourLines; track $index) {\n <div class=\"axm-analog-clock-hour-line\" [style.transform]=\"line.transform\">\n <div class=\"axm-analog-clock-hour-line-inner\"></div>\n </div>\n }\n @for (dot of dots; track $index) {\n <div class=\"axm-analog-clock-dot-line\" [style.transform]=\"dot.transform\">\n <div class=\"axm-analog-clock-dot-line-inner\"></div>\n </div>\n }\n </div>\n\n @if (showNumbers()) {\n <div class=\"axm-analog-clock-numbers-container\">\n @for (num of hourNumbers; track num.value) {\n <div class=\"axm-analog-clock-hour-number\" [style.top]=\"num.top\" [style.left]=\"num.left\">\n {{ num.value }}\n </div>\n }\n </div>\n }\n <div class=\"axm-analog-clock-hands\">\n <div class=\"axm-analog-clock-hand axm-analog-clock-hour-hand\" [style.transform]=\"hourHandTransform()\"></div>\n <div\n class=\"axm-analog-clock-hand axm-analog-clock-minute-hand\"\n [style.transform]=\"minuteHandTransform()\"\n ></div>\n <div\n class=\"axm-analog-clock-hand axm-analog-clock-second-hand\"\n [style.transform]=\"secondHandTransform()\"\n ></div>\n <div class=\"axm-analog-clock-center-point\"></div>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n @apply ax-grid ax-place-items-center ax-size-full;\n }\n\n .axm-analog-clock-container {\n @apply ax-relative ax-w-full ax-max-h-full;\n aspect-ratio: 1;\n container-type: inline-size;\n }\n\n .axm-analog-clock-face {\n @apply ax-w-full ax-h-full ax-relative ax-rounded-full;\n }\n\n .axm-analog-clock-marks-container,\n .axm-analog-clock-numbers-container {\n @apply ax-absolute ax-inset-0;\n }\n\n .axm-analog-clock-hands {\n @apply ax-absolute ax-inset-0;\n }\n\n .axm-analog-clock-hour-line,\n .axm-analog-clock-dot-line {\n @apply ax-absolute ax-bottom-1/2 ax-left-1/2 ax-h-1/2 ax-origin-bottom;\n }\n\n .axm-analog-clock-hour-line {\n @apply ax-w-[1.8cqw];\n }\n\n .axm-analog-clock-dot-line {\n @apply ax-w-[1.8cqw];\n }\n\n .axm-analog-clock-hour-line-inner {\n @apply ax-absolute ax-top-[6cqw] ax-left-1/2 -ax-translate-x-1/2 ax-w-full ax-h-[5.5cqw] ax-bg-on-darker;\n }\n\n .axm-analog-clock-dot-line-inner {\n @apply ax-absolute ax-top-[6cqw] ax-left-1/2 -ax-translate-x-1/2 ax-w-[1.2cqw] ax-h-[2cqw] ax-bg-on-dark ax-rounded-full;\n }\n\n .axm-analog-clock-hour-number {\n @apply ax-absolute -ax-translate-x-1/2 -ax-translate-y-1/2 ax-text-[10cqw] ax-font-medium ax-text-on-surface;\n }\n\n .axm-analog-clock-hand {\n @apply ax-absolute ax-bottom-1/2 ax-left-1/2 ax-origin-bottom ax-rounded-t-lg;\n }\n\n .axm-analog-clock-hand::after {\n content: '';\n @apply ax-absolute ax-left-0 ax-w-full;\n }\n\n .axm-analog-clock-hour-hand {\n @apply ax-z-[2] ax-w-[2.7cqw] ax-h-1/4 ax-bg-black;\n }\n\n .axm-analog-clock-hour-hand::after {\n @apply ax-h-[20%] -ax-bottom-[20%] ax-bg-black;\n }\n\n .axm-analog-clock-minute-hand {\n @apply ax-z-[3] ax-w-[2.1cqw] ax-h-[35%] ax-bg-gray-400;\n }\n\n .axm-analog-clock-minute-hand::after {\n @apply ax-h-[20%] -ax-bottom-[20%] ax-bg-gray-400;\n }\n\n .axm-analog-clock-second-hand {\n @apply ax-z-[4] ax-w-[1.5cqw] ax-h-[42%] ax-bg-red-500;\n }\n\n .axm-analog-clock-second-hand::after {\n @apply ax-h-[20%] -ax-bottom-[20%] ax-bg-red-500;\n }\n\n .axm-analog-clock-center-point {\n @apply ax-absolute ax-top-1/2 ax-left-1/2 -ax-translate-x-1/2 -ax-translate-y-1/2 ax-w-[9cqw] ax-h-[9cqw] ax-bg-white ax-border-[1.8cqw] ax-border-black ax-rounded-full ax-z-[5];\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMAnalogClockComponent implements OnInit, OnDestroy {\n timezone = input<string>();\n classes = input<string>();\n showNumbers = input<boolean>(true);\n\n private readonly currentTime: WritableSignal<Date> = signal(new Date());\n private readonly timeParts = signal({ hours: 0, minutes: 0, seconds: 0 });\n\n constructor() {\n effect(() => {\n const now = this.currentTime();\n const tz = this.timezone();\n let hours, minutes, seconds;\n\n if (tz) {\n try {\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZone: tz,\n hour12: false,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n });\n const parts = formatter.formatToParts(now);\n hours = parseInt(parts.find((p) => p.type === 'hour')?.value ?? '0', 10);\n minutes = parseInt(parts.find((p) => p.type === 'minute')?.value ?? '0', 10);\n seconds = parseInt(parts.find((p) => p.type === 'second')?.value ?? '0', 10);\n } catch (e) {\n console.error(`Invalid timezone provided: \"${tz}\". Falling back to local time.`);\n hours = now.getHours();\n minutes = now.getMinutes();\n seconds = now.getSeconds();\n }\n } else {\n hours = now.getHours();\n minutes = now.getMinutes();\n seconds = now.getSeconds();\n }\n this.timeParts.set({ hours, minutes, seconds });\n });\n }\n\n readonly hourHandTransform = computed(() => {\n const { hours, minutes } = this.timeParts();\n const hoursAngle = (hours % 12) * 30 + minutes * 0.5;\n return `translateX(-50%) rotate(${hoursAngle}deg)`;\n });\n\n readonly minuteHandTransform = computed(() => {\n const { minutes, seconds } = this.timeParts();\n const minutesAngle = minutes * 6 + seconds * 0.1;\n return `translateX(-50%) rotate(${minutesAngle}deg)`;\n });\n\n readonly secondHandTransform = computed(() => {\n const { seconds } = this.timeParts();\n const secondsAngle = seconds * 6;\n return `translateX(-50%) rotate(${secondsAngle}deg)`;\n });\n\n hourLines: AXMClockMark[] = [];\n hourNumbers: AXMClockMark[] = [];\n dots: AXMClockMark[] = [];\n\n private timerId?: number;\n\n ngOnInit(): void {\n this.createClockMarks();\n this.timerId = window.setInterval(() => {\n this.currentTime.set(new Date());\n }, 1000);\n }\n\n ngOnDestroy(): void {\n if (this.timerId) {\n clearInterval(this.timerId);\n }\n }\n\n private createClockMarks(): void {\n const majorHours = [12, 3, 6, 9];\n\n // Hour Lines\n this.hourLines = [];\n for (let i = 1; i <= 12; i++) {\n this.hourLines.push({\n transform: `translateX(-50%) rotate(${i * 30}deg)`,\n });\n }\n\n // Hour Numbers\n this.hourNumbers = [];\n for (const hour of majorHours) {\n const angleRad = (hour * 30 - 90) * (Math.PI / 180);\n this.hourNumbers.push({\n value: hour,\n top: `calc(50% + ${30 * Math.sin(angleRad)}%)`,\n left: `calc(50% + ${30 * Math.cos(angleRad)}%)`,\n });\n }\n\n // Dots\n this.dots = [];\n for (let i = 1; i <= 60; i++) {\n if (i % 5 !== 0) {\n this.dots.push({\n transform: `translateX(-50%) rotate(${i * 6}deg)`,\n });\n }\n }\n }\n}\n","import { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXMLocaleManagementService } from '@acorex/modules/locale-management';\nimport { AXPTimeZone } from '@acorex/platform/common';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n OnDestroy,\n signal,\n} from '@angular/core';\nimport { AXMAnalogClockComponent } from './analog-clock.component';\n\n@Component({\n template: `\n <div class=\"ax-p-2 ax-h-full ax-overflow-hidden\" [class.ax-bg-light]=\"others().length > 0\">\n <!-- Main Clock Section -->\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-around ax-gap-2 ax-flex-1 ax-h-full\">\n <div\n class=\"ax-flex ax-items-center ax-justify-around ax-gap-2 ax-w-full ax-grow\"\n [class.ax-flex-row]=\"isHorizontal()\"\n [class.ax-rounded-full]=\"isHorizontal() && others().length > 0\"\n [class.ax-flex-col]=\"!isHorizontal()\"\n [class.ax-rounded-xl]=\"!isHorizontal() && others().length > 0\"\n [class.ax-border]=\"others().length > 0\"\n [class.ax-border-gray-100]=\"others().length > 0\"\n [class.ax-shadow-lg]=\"others().length > 0\"\n [class.ax-bg-lighter]=\"others().length > 0\"\n [class.ax-p-2]=\"others().length > 0\"\n >\n <div\n class=\"ax-aspect-square ax-flex ax-items-center ax-justify-center ax-min-w-[100px] ax-min-h-[100px]\"\n [style.height]=\"isHorizontal() ? '65%' : 'auto'\"\n [style.width]=\"isHorizontal() ? 'auto' : '65%'\"\n >\n <axm-analog-clock\n [timezone]=\"timezone()?.iana\"\n [classes]=\"others().length > 0 ? 'ax-bg-lightest' : undefined\"\n ></axm-analog-clock>\n </div>\n @if (timezone()?.abbr) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-text-center ax-min-w-[50px] ax-gap-2\">\n @if (timezone()?.code) {\n <span\n class=\"ax-font-medium ax-opacity-75 ax-uppercase ax-block ax-2line\"\n [style.fontSize.px]=\"codeFontSize()\"\n >{{ timezone()?.code }}</span\n >\n }\n <span class=\"ax-font-bold ax-mt-0\" [style.fontSize.px]=\"abbrFontSize()\">{{ timezone()?.abbr }}</span>\n </div>\n }\n </div>\n\n <!-- Additional Clocks Section -->\n @if (others().length > 0) {\n <div class=\"ax-w-full ax-max-w-4xl ax-mx-auto\">\n <div\n class=\"ax-flex ax-justify-around ax-items-center\"\n [class.ax-flex-wrap]=\"hasEnoughSpaceForHorizontal()\"\n [class.ax-gap-3]=\"true\"\n [class.ax-overflow-auto]=\"true\"\n >\n @for (clock of others(); track clock.code) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-2 ax-flex-wrap ax-gap-2\">\n <div\n [axTooltip]=\"clock.code\"\n [axTooltipPlacement]=\"'top'\"\n class=\"ax-aspect-square ax-flex ax-items-center ax-justify-center ax-rounded-lg ax-size-16\"\n >\n <axm-analog-clock\n [timezone]=\"clock.iana\"\n [showNumbers]=\"false\"\n [classes]=\"'ax-bg-lightest'\"\n ></axm-analog-clock>\n </div>\n @if (clock.abbr) {\n <div\n [class.ax-text-center]=\"hasEnoughSpaceForHorizontal()\"\n [class.ax-pt-1]=\"hasEnoughSpaceForHorizontal()\"\n [class.ax-pl-1]=\"!hasEnoughSpaceForHorizontal()\"\n >\n <span class=\"ax-text-xs ax-font-medium ax-truncate ax-block\">{{ clock.abbr }}</span>\n @if (clock.code) {\n <span class=\"ax-text-xs ax-font-light ax-opacity-75 ax-truncate ax-block\">{{\n clock.code\n }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styles: `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n /* Ensure text doesn't overflow on very small screens */\n .ax-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n /* Two-line clamp utility for wrapping long timezone codes */\n .ax-2line {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: normal;\n line-height: 1.1;\n max-height: calc(1.1em * 2);\n }\n\n /* Ensure text doesn't overflow on very small screens */\n .ax-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMAnalogClockComponent, AXTooltipModule],\n})\nexport class AXMClockWidgetViewComponent extends AXPLayoutBaseWidgetComponent implements AfterViewInit, OnDestroy {\n private readonly regionalService = inject(AXMLocaleManagementService);\n private readonly elementRef = inject(ElementRef);\n private userTimezone = signal<AXPTimeZone | null>(null);\n private containerWidth = signal<number>(0);\n private containerHeight = signal<number>(0);\n private resizeObserver: ResizeObserver | null = null;\n\n constructor() {\n super();\n this.loadUserTimezone();\n }\n\n ngAfterViewInit(): void {\n this.setupResizeObserver();\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n private setupResizeObserver(): void {\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.target === this.elementRef.nativeElement) {\n const { width, height } = entry.contentRect;\n this.containerWidth.set(width);\n this.containerHeight.set(height);\n }\n }\n });\n this.resizeObserver.observe(this.elementRef.nativeElement);\n }\n }\n\n private async loadUserTimezone(): Promise<void> {\n try {\n const timezoneCode = await this.regionalService.getBrowserTimeZoneCode();\n const timezones = await this.regionalService.getTimeZones();\n const timezone = timezones.find((tz) => tz.code === timezoneCode);\n if (timezone) {\n this.userTimezone.set(timezone);\n }\n } catch (error) {\n console.error('Failed to load user timezone', error);\n }\n }\n\n timezone = computed(() => {\n const configuredTimezone = this.options()?.['timezone'] as AXPTimeZone | undefined;\n return configuredTimezone || this.userTimezone();\n });\n\n others = computed(() => (this.options()?.['others'] ?? []) as AXPTimeZone[]);\n\n isHorizontal = computed(() => {\n const width = this.containerWidth();\n const height = this.containerHeight();\n // If width is greater than height or they are equal, use horizontal layout\n return width >= height - (this.others().length > 0 ? 75 : 0);\n });\n\n hasEnoughSpaceForHorizontal = computed(() => {\n const width = this.containerWidth();\n const clockCount = this.others().length;\n\n // Estimate minimum width needed for horizontal layout\n // Each clock needs about 100px (60px clock + padding + text)\n const minWidthNeeded = clockCount * 100;\n\n return width >= minWidthNeeded && clockCount <= 4;\n });\n\n // Dynamically compute font sizes for timezone code and abbreviation\n codeFontSize = computed(() => {\n const width = this.containerWidth();\n const codeLength = this.timezone()?.code?.length ?? 0;\n\n // Base scales with container width (100px -> ~10px, 400px -> ~22px)\n const base = (width / 400) * 14 + 8;\n\n // Penalize long codes more aggressively to allow two-line fit\n const penalty = codeLength > 14 ? (codeLength - 14) * 0.8 : 0;\n const size = Math.max(9, Math.min(22, base - penalty));\n return Math.round(size);\n });\n\n abbrFontSize = computed(() => {\n const width = this.containerWidth();\n const abbrLength = this.timezone()?.abbr?.length ?? 0;\n\n // Base scales with container width (100px -> ~16px, 400px -> ~30px)\n const base = (width / 400) * 18 + 12;\n\n // Penalize unusually long abbreviations\n const penalty = abbrLength > 4 ? (abbrLength - 4) * 1 : 0;\n const size = Math.max(14, Math.min(28, base - penalty));\n return Math.round(size);\n });\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PROPERTY_GROUP } from '@acorex/platform/layout/widgets';\n\nexport const AXPAnalogClockWidget: AXPWidgetConfig = {\n name: 'analog-clock',\n title: 'Analog Clock',\n description: '',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n icon: 'fa-light fa-clock',\n properties: [\n {\n name: 'timezone',\n title: '@dashboard:widgets.analog-clock.timezone',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'timezone',\n path: 'options.timezone',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: 'timezones',\n textField: 'title',\n valueField: 'code',\n },\n },\n },\n visible: true,\n order: 1,\n },\n {\n name: 'others',\n title: '@dashboard:widgets.analog-clock.other-timezones',\n group: AXP_DATA_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'others',\n path: 'options.others',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n dataSource: 'timezones',\n textField: 'title',\n valueField: 'code',\n },\n },\n },\n visible: true,\n order: 2,\n },\n ],\n components: {\n view: {\n component: () => import('./analog-clock-widget-view.component').then((c) => c.AXMClockWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 3,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n maxWidth: 3,\n maxHeight: 7,\n },\n md: {\n width: 3,\n height: 3,\n minWidth: 3,\n minHeight: 2,\n maxWidth: 3,\n maxHeight: 7,\n },\n sm: {\n height: 3,\n minHeight: 2,\n maxHeight: 7,\n },\n },\n },\n};\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n analogClock: 'analog-clock';\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTagModule } from '@acorex/components/tag';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n Signal,\n computed,\n inject,\n} from '@angular/core';\nimport { Subscription, interval } from 'rxjs';\nimport { AXPHourNumber } from './clock-calendar.types';\n\n@Component({\n templateUrl: './clock-calendar-widget.component.html',\n styleUrls: ['./clock-calendar-widget.component.scss'],\n standalone: true,\n imports: [CommonModule, AXDateTimeModule, AXFormatModule, AXTagModule, AXDecoratorModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPClockCalendarWidgetViewComponent extends AXPValueWidgetComponent implements OnInit, OnDestroy {\n // Dependencies\n private readonly cdr = inject(ChangeDetectorRef);\n\n // Time state\n protected currentTime = new Date();\n protected currentDate = new Date();\n private clockSubscription: Subscription | null = null;\n\n // Static clock elements\n protected readonly clockHours = Array.from({ length: 12 }, (_, i) => i + 1);\n protected readonly clockHourNumbers: AXPHourNumber[] = Array.from({ length: 12 }, (_, i) => ({\n number: i === 0 ? 12 : i,\n angle: i * 30,\n }));\n\n // Clock hands rotation angles\n protected hourRotation = 0;\n protected minuteRotation = 0;\n protected secondRotation = 0;\n\n // Options with computed properties and defaults\n protected readonly displayLayout: Signal<string> = computed(() => this.options()?.['displayLayout']?.id ?? 'both');\n\n protected readonly showDigitalClock: Signal<boolean> = computed(() => {\n const layout = this.displayLayout();\n return layout === 'both' || layout === 'digital';\n });\n\n protected readonly showAnalogClock: Signal<boolean> = computed(() => {\n const layout = this.displayLayout();\n return layout === 'both' || layout === 'analog';\n });\n\n protected readonly showDate: Signal<boolean> = computed(() => this.options()?.['showDate'] !== false);\n\n protected readonly showDayOfWeek: Signal<boolean> = computed(() => this.options()?.['showDayOfWeek'] !== false);\n\n protected readonly use24Hour: Signal<boolean> = computed(() => this.options()?.['use24Hour'] === true);\n\n protected readonly showSeconds: Signal<boolean> = computed(() => this.options()?.['showSeconds'] !== false);\n\n protected readonly dateFormat: Signal<string> = computed(() => this.options()?.['dateFormat']?.id ?? 'DD MMM YYYY');\n\n protected readonly timezone: Signal<string> = computed(() => this.options()?.['timezone']?.id ?? 'local');\n\n // protected readonly showTimezoneIndicator: Signal<boolean> = computed(() => this.timezone() !== 'local');\n\n protected readonly displayTimezone: Signal<string> = computed(() => {\n const tz = this.timezone();\n if (tz === 'local') return '';\n\n if (tz.startsWith('UTC')) {\n const [match, sign, hours, minutes] = tz.match(/UTC([+-])(\\d+):?(\\d+)?/) ?? [];\n if (match) {\n if (!minutes || minutes === '00') {\n return `UTC${sign}${parseInt(hours)}`;\n }\n return `UTC${sign}${parseInt(hours)}:${minutes}`;\n }\n }\n return tz;\n });\n\n protected readonly timeFormat: Signal<string> = computed(() =>\n this.showSeconds() ? (this.use24Hour() ? 'HH:mm:ss' : 'hh:mm:ss a') : this.use24Hour() ? 'HH:mm' : 'hh:mm a',\n );\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.startClockTimer();\n this.updateTime();\n }\n\n ngOnDestroy(): void {\n this.stopClockTimer();\n }\n\n private startClockTimer(): void {\n this.stopClockTimer();\n this.clockSubscription = interval(1000).subscribe(() => this.updateTime());\n }\n\n private stopClockTimer(): void {\n this.clockSubscription?.unsubscribe();\n this.clockSubscription = null;\n }\n\n private updateTime(): void {\n const now = this.getAdjustedTime();\n this.currentTime = now;\n this.currentDate = now;\n\n this.updateClockHandsRotation(now);\n this.cdr.markForCheck();\n }\n\n private getAdjustedTime(): Date {\n const now = new Date();\n const tz = this.timezone();\n\n if (tz === 'local' || !tz.startsWith('UTC')) {\n return now;\n }\n\n const [match, sign, hours, minutes] = tz.match(/UTC([+-])(\\d+):?(\\d+)?/) ?? [];\n if (!match) {\n return now;\n }\n\n const offsetHours = parseInt(hours) * (sign === '+' ? 1 : -1);\n const offsetMinutes = minutes ? parseInt(minutes) * (sign === '+' ? 1 : -1) : 0;\n\n const utcTime = now.getTime() + now.getTimezoneOffset() * 60000;\n return new Date(utcTime + (offsetHours * 3600000 + offsetMinutes * 60000));\n }\n\n private updateClockHandsRotation(now: Date): void {\n const hours = now.getHours() % 12;\n const minutes = now.getMinutes();\n const seconds = now.getSeconds();\n\n // For analog clocks:\n // - 12 o'clock is 0°\n // - 3 o'clock is 90°\n // - 6 o'clock is 180°\n // - 9 o'clock is 270°\n\n // Hour hand: 30° per hour (360°/12) plus gradual movement from minutes\n this.hourRotation = hours * 30 + minutes / 2 + 180;\n\n // Minute hand: 6° per minute (360°/60)\n this.minuteRotation = minutes * 6 + 180;\n\n // Second hand: 6° per second (360°/60)\n this.secondRotation = seconds * 6 + 180;\n }\n\n protected initializeWidget(): void {\n this.updateTime();\n }\n\n protected updateWidget(): void {\n this.stopClockTimer();\n this.startClockTimer();\n this.updateTime();\n }\n\n protected destroyWidget(): void {\n this.stopClockTimer();\n }\n\n protected getDayOfWeek(): string {\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n return days[this.currentDate.getDay()];\n }\n}\n","<div class=\"axp-clock-calendar-container\">\n <!-- Timezone indicator (only shown when not local) -->\n <!-- @if (showTimezoneIndicator()) {\n <div class=\"axp-clock-calendar-timezone-badge\"><i class=\"fa-solid fa-globe\"></i> {{ displayTimezone() }}</div>\n } -->\n\n <!-- Day of week display -->\n @if (showDayOfWeek()) {\n <div class=\"axp-clock-calendar-day-label\">{{ getDayOfWeek() }}</div>\n }\n\n <div class=\"axp-clock-calendar-content\">\n <!-- Digital Clock Display -->\n @if (showDigitalClock()) {\n <div class=\"axp-clock-calendar-digital-clock\">\n {{ currentTime | format: 'datetime' : timeFormat() | async }}\n </div>\n }\n\n <!-- Analog Clock Display -->\n @if (showAnalogClock()) {\n <div class=\"axp-clock-calendar-analog-clock\">\n <!-- Hour markers -->\n @for (hour of clockHours; track hour) {\n <div\n class=\"axp-clock-calendar-hour-marker\"\n [style.transform]=\"'rotate(' + hour * 30 + 'deg) translateY(-80px)'\"\n ></div>\n }\n\n <!-- Clock Numbers -->\n <div class=\"axp-clock-calendar-numbers-container\">\n @for (hour of clockHourNumbers; track hour) {\n <div\n class=\"axp-clock-calendar-hour-number\"\n [style.transform]=\"'rotate(' + hour.angle + 'deg) translateY(-82px)'\"\n >\n <span [style.transform]=\"'rotate(' + -hour.angle + 'deg)'\">{{ hour.number }}</span>\n </div>\n }\n </div>\n\n <!-- Clock Hands -->\n <div class=\"axp-clock-calendar-hands-container\">\n <div class=\"axp-clock-calendar-hour-hand\" [style.transform]=\"'rotate(' + hourRotation + 'deg)'\"></div>\n <div class=\"axp-clock-calendar-minute-hand\" [style.transform]=\"'rotate(' + minuteRotation + 'deg)'\"></div>\n @if (showSeconds()) {\n <div class=\"axp-clock-calendar-second-hand\" [style.transform]=\"'rotate(' + secondRotation + 'deg)'\"></div>\n }\n <div class=\"axp-clock-calendar-center-dot\"></div>\n </div>\n </div>\n }\n\n <!-- Date Display -->\n @if (showDate()) {\n <div class=\"axp-clock-calendar-date-display\">\n <i class=\"fa-regular fa-calendar\"></i>\n {{ currentDate | format: 'datetime' : dateFormat() | async }}\n </div>\n }\n </div>\n</div>\n","/**\n * ACoreX Clock Calendar Widget Types\n * Contains all types and interfaces for the Clock Calendar widget\n */\n\n/**\n * Clock layout display options\n */\nexport type AXPClockLayout = 'both' | 'digital' | 'analog';\n\n/**\n * Clock timezone options\n */\nexport interface AXPTimezoneOption {\n id: string;\n title: string;\n}\n\n/**\n * Date format options\n */\nexport interface AXPDateFormatOption {\n id: string;\n title: string;\n}\n\n/**\n * Hour number definition for the analog clock\n */\nexport interface AXPHourNumber {\n number: number;\n angle: number;\n}\n\n/**\n * Widget options for configuring the clock-calendar\n */\nexport interface AXPClockCalendarOptions {\n // Display options\n displayLayout?: AXPClockLayout;\n showDate?: boolean;\n showDayOfWeek?: boolean;\n\n // Clock settings\n use24Hour?: boolean;\n showSeconds?: boolean;\n showHourMarkers?: boolean;\n\n // Date format\n dateFormat?: string;\n\n // Timezone\n timezone?: string;\n}\n\n/**\n * Common timezone options for the widget configuration\n */\nexport const AXP_TIMEZONE_OPTIONS: AXPTimezoneOption[] = [\n { id: 'local', title: 'Local Time' },\n { id: 'UTC+0', title: 'UTC (GMT)' },\n { id: 'UTC+1', title: 'Central European Time (UTC+1)' },\n { id: 'UTC+2', title: 'Eastern European Time (UTC+2)' },\n { id: 'UTC+3', title: 'Moscow Time (UTC+3)' },\n { id: 'UTC+4', title: 'Gulf Time (UTC+4)' },\n { id: 'UTC+5:30', title: 'Indian Time (UTC+5:30)' },\n { id: 'UTC+8', title: 'China Time (UTC+8)' },\n { id: 'UTC+9', title: 'Japan Time (UTC+9)' },\n { id: 'UTC+10', title: 'Australian Eastern Time (UTC+10)' },\n { id: 'UTC-5', title: 'Eastern Time (UTC-5)' },\n { id: 'UTC-6', title: 'Central Time (UTC-6)' },\n { id: 'UTC-7', title: 'Mountain Time (UTC-7)' },\n { id: 'UTC-8', title: 'Pacific Time (UTC-8)' },\n];\n\n/**\n * Common date format options for the widget configuration\n */\nexport const AXP_DATE_FORMAT_OPTIONS: AXPDateFormatOption[] = [\n { id: 'DD MMM YYYY', title: '31 Dec 2023' },\n { id: 'MMM DD, YYYY', title: 'Dec 31, 2023' },\n { id: 'DD/MM/YYYY', title: '31/12/2023' },\n { id: 'MM/DD/YYYY', title: '12/31/2023' },\n];\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { AXP_APPEARANCE_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../widget-categories.type';\nimport { AXP_DATE_FORMAT_OPTIONS, AXP_TIMEZONE_OPTIONS } from './clock-calendar.types';\n\nexport const AXPClockCalendarWidget: AXPWidgetConfig = {\n name: 'clock-calendar',\n title: 'Clock & Calendar',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-clock',\n properties: [\n // ====== Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.clock-calendar.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== Display Settings ======\n {\n name: 'displayLayout',\n title: '@dashboard:widgets.clock-calendar.display-layout',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n defaultValue: 'both',\n interface: {\n name: 'displayLayout',\n path: 'options.displayLayout',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { id: 'both', title: 'Digital & Analog' },\n { id: 'digital', title: 'Digital Only' },\n { id: 'analog', title: 'Analog Only' },\n ],\n },\n },\n },\n visible: true,\n },\n {\n name: 'showDate',\n title: '@dashboard:widgets.clock-calendar.show-date',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDate',\n path: 'options.showDate',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showDayOfWeek',\n title: '@dashboard:widgets.clock-calendar.show-day-of-week',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDayOfWeek',\n path: 'options.showDayOfWeek',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n // ====== Time Format Settings ======\n {\n name: 'use24Hour',\n title: '@dashboard:widgets.clock-calendar.use-24-hour',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: false,\n dataType: 'boolean',\n interface: {\n name: 'use24Hour',\n path: 'options.use24Hour',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showSeconds',\n title: '@dashboard:widgets.clock-calendar.show-seconds',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showSeconds',\n path: 'options.showSeconds',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // {\n // name: 'showHourMarkers',\n // title: 'Show Hour Markers',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showHourMarkers',\n // path: 'options.showHourMarkers',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n {\n name: 'dateFormat',\n title: '@dashboard:widgets.clock-calendar.date-format',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: 'DD MMM YYYY',\n dataType: 'string',\n interface: {\n name: 'dateFormat',\n path: 'options.dateFormat',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: AXP_DATE_FORMAT_OPTIONS,\n },\n },\n },\n visible: true,\n },\n {\n name: 'timezone',\n title: '@dashboard:widgets.clock-calendar.timezone',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n defaultValue: 'local',\n dataType: 'string',\n interface: {\n name: 'timezone',\n path: 'options.timezone',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: AXP_TIMEZONE_OPTIONS,\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./clock-calendar-widget.component').then((m) => m.AXPClockCalendarWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 2,\n height: 5,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 3,\n maxHeight: 6,\n },\n md: {\n width: 2,\n height: 5,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 3,\n maxHeight: 6,\n },\n sm: {\n height: 5,\n minHeight: 2,\n maxHeight: 6,\n },\n },\n },\n};\n\n// Add to the AXPWidgetTypesMap\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n clockCalendar: 'clock-calendar';\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXP_GLOBAL_SEARCH_CONFIG_TOKEN } from '@acorex/modules/common';\nimport { AXPSearchDisplayResult } from '@acorex/platform/common';\nimport { AXPDataGenerator, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, inject } from '@angular/core';\n\nexport interface AXPShortcutItem {\n name: string;\n title: string;\n description?: string;\n icon: string;\n command: AXPExecuteCommand;\n}\n\n@Component({\n template: `\n @if (item()) {\n <div\n class=\"ax-group ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-3 ax-w-full ax-h-full ax-relative ax-overflow-hidden \"\n (click)=\"executeCommand()\"\n >\n <div class=\"ax-absolute ax-inset-0 ax-bg-black/0 hover:ax-bg-black/10 ax-transition-opacity\"></div>\n <i [class]=\"item().icon + ' ax-text-3xl'\"></i>\n <span class=\"ax-text-xl ax-font-semibold\">{{ item().title | translate | async }}</span>\n @if (item().description) {\n <span class=\"ax-text-sm ax-opacity-90 ax-text-center ax-px-2\">{{\n item().description! | translate | async\n }}</span>\n }\n </div>\n } @else {\n <div\n (click)=\"setCommand()\"\n class=\"ax-group ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-3 ax-w-full ax-h-full ax-relative ax-overflow-hidden\"\n >\n <div class=\"ax-absolute ax-inset-0 ax-bg-black/0 hover:ax-bg-black/5 ax-transition-opacity\"></div>\n <i class=\"fa-light fa-plus ax-text-3xl\"></i>\n <span class=\"ax-text-xl ax-font-semibold\">{{\n '@dashboard:widgets.dashboard-shortcut.add-shortcut' | translate | async\n }}</span>\n </div>\n }\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n})\nexport class AXPDashboardShortcutWidgetViewComponent extends AXPLayoutBaseWidgetComponent {\n private popupService = inject(AXPopupService);\n private workflow = inject(AXPWorkflowService);\n private searchConfig = inject(AXP_GLOBAL_SEARCH_CONFIG_TOKEN);\n\n protected item = computed<AXPShortcutItem>(() => this.options()['item'] as AXPShortcutItem);\n protected color = computed<string>(() => this.options()['color'] as string);\n\n override ngOnInit(): void {\n super.ngOnInit();\n if (!this.color()) {\n this.setOptions({\n color: AXPDataGenerator.color(),\n });\n }\n }\n\n protected async executeCommand() {\n if (this.item()?.command) {\n await this.workflow.execute(this.item().command.name, this.item().command.options);\n }\n }\n\n protected async setCommand() {\n const component = await this.searchConfig.window();\n const popup = await this.popupService.open(component, {\n title: 'Choose command...',\n size: 'fit',\n closeOnBackdropClick: true,\n header: false,\n });\n if (popup.data) {\n const result = popup.data as AXPSearchDisplayResult;\n if (result && result.command) {\n this.setOptions({\n item: {\n name: result.name,\n title: result.title,\n description: result.description,\n icon: result.icon,\n command: result.command,\n } as AXPShortcutItem,\n });\n }\n }\n }\n\n @HostBinding('style')\n private get __style() {\n const cls: any = {};\n cls[`background-color`] = this.color();\n return cls;\n }\n\n @HostBinding('class')\n private get __class() {\n const cls: any = {};\n cls[`ax-flex`] = true;\n cls[`ax-flex-col`] = true;\n cls[`ax-items-center`] = true;\n cls[`ax-justify-center`] = true;\n cls[`ax-w-full`] = true;\n cls[`ax-h-full`] = true;\n cls[`ax-text-center`] = true;\n cls[`ax-overflow-hidden`] = true;\n cls[`ax-cursor-pointer`] = true;\n cls[`ax-text-white`] = true;\n return cls;\n }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AXP_COLOR_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../widget-categories.type';\n\nexport const AXPDashboardShortcutWidget: AXPWidgetConfig = {\n name: 'dashboard-shortcut',\n title: 'Shortcut',\n description: 'Quick access to your key features.',\n type: 'view',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n icon: 'fa-light fa-link',\n properties: [\n {\n ...AXP_COLOR_PROPERTY,\n title: '@dashboard:widgets.dashboard-shortcut.color',\n },\n ],\n meta: {\n dimensions: {\n lg: {\n width: 2,\n height: 2,\n minWidth: 1,\n minHeight: 1,\n maxWidth: 3,\n maxHeight: 2,\n },\n md: {\n width: 2,\n height: 2,\n minWidth: 1,\n minHeight: 1,\n maxWidth: 3,\n maxHeight: 2,\n },\n sm: {\n height: 2,\n minHeight: 1,\n maxHeight: 2,\n },\n },\n },\n components: {\n view: {\n component: () =>\n import('./dashboard-shortcut-widget-view.component').then((c) => c.AXPDashboardShortcutWidgetViewComponent),\n },\n },\n};\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXGridLayoutWidgetComponent } from '@acorex/components/grid-layout-builder';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXWysiwygContainerComponent, AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n OnInit,\n computed,\n inject,\n linkedSignal,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n templateUrl: './sticky-note-widget.component.html',\n styleUrls: ['./sticky-note-widget.component.scss'],\n standalone: true,\n imports: [\n AXWysiwygModule,\n AXDecoratorModule,\n AXToolBarModule,\n FormsModule,\n AXDateTimeModule,\n AXFormatModule,\n AXPopoverModule,\n CommonModule,\n FormsModule,\n AXColorBoxModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXGridLayoutWidgetComponent,\n useExisting: AXPStickyNoteWidgetViewComponent,\n },\n ],\n})\nexport class AXPStickyNoteWidgetViewComponent extends AXPValueWidgetComponent<string> implements OnInit {\n protected isEditing = signal(false);\n private wysiwyg = viewChild<AXWysiwygContainerComponent>('wysiwyg');\n // protected value = computed(() => this.getValue());\n // protected typeValue = signal<string>('');\n protected value = linkedSignal(() => this.getValue());\n protected date = computed(() => this.options()?.['date'] ?? new Date());\n protected bgColor = computed(() => this.options()?.['backgroundColor'] ?? '#FFF8B8');\n protected color = signal('#333333');\n\n private el = inject(ElementRef);\n\n // Modern color palette with pastel and vibrant options\n protected colorPresets: string[] = [\n '#FFF8B8', // Soft yellow\n '#FFD8E6', // Soft pink\n '#D1F0FF', // Soft blue\n '#E2FFD1', // Soft green\n '#FFE8D1', // Soft orange\n '#F0D1FF', // Soft purple\n '#FFCDD2', // Soft red\n '#D1FFF0', // Soft teal\n '#F5F5F5', // Light gray\n '#FFFFFF', // White\n ];\n\n // Handle clicks outside the component to cancel editing\n @HostListener('document:click', ['$event'])\n handleClickOutside(event: MouseEvent) {\n const clickedInside = (this.el.nativeElement as HTMLElement).contains(event.target as Node);\n if (!clickedInside && this.isEditing()) {\n this.saveChanges();\n }\n }\n\n // Handle double-click to activate editing\n protected activateEdit() {\n //TODO FOCUS WYSIWYG\n this.wysiwyg()?.focus();\n this.isEditing.set(true);\n }\n\n // Save changes and exit edit mode\n protected saveChanges() {\n this.setValue(this.value());\n this.isEditing.set(false);\n }\n\n protected setColor(color: string) {\n this.setOptions({ backgroundColor: color });\n }\n\n protected valueChange(event: AXValueChangedEvent<any>) {\n if (event.isUserInteraction) {\n this.value.set(event.value);\n }\n }\n}\n","<div\n class=\"sticky-note-container ax-size-full ax-rounded-lg ax-flex ax-flex-col ax-p-4 ax-shadow-md ax-transition-all ax-duration-300 hover:ax-shadow-lg\"\n [style.background-color]=\"bgColor()\"\n [style.color]=\"color()\"\n [class.ax-shadow-lg]=\"isEditing()\"\n [class.ax-scale-[1.02]]=\"isEditing()\"\n (dblclick)=\"activateEdit()\"\n>\n <!-- Header with timestamp -->\n <div class=\"ax-flex ax-justify-between ax-items-center ax-mb-3\">\n <div class=\"ax-text-xs ax-opacity-70 ax-font-medium ax-flex ax-items-center ax-gap-1\">\n <i class=\"fa-regular fa-clock ax-text-[0.65rem]\"></i>\n {{ date() | format: 'datetime' : { format: 'short' } | async }}\n </div>\n </div>\n\n <!-- Content area -->\n <div class=\"ax-flex-1 ax-overflow-auto\">\n <ax-wysiwyg-container\n #wysiwyg\n [class]=\"isEditing() ? 'ax-pointer-events-auto ax-cursor-text' : 'ax-pointer-events-none !ax-cursor-pointer'\"\n class=\"ax-h-full\"\n placeHolder=\"start writing with double click...\"\n look=\"none\"\n (onValueChanged)=\"valueChange($event)\"\n [ngModel]=\"value()\"\n >\n <ax-wysiwyg-view class=\"!ax-size-full ax-border-b-0\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar class=\"ax-hidden\"></ax-wysiwyg-toolbar>\n </ax-wysiwyg-container>\n </div>\n\n <!-- Footer with color selector and save button -->\n @if (isEditing()) {\n <div class=\"ax-absolute ax-bottom-2 ax-left-2 ax-right-2 ax-flex ax-flex-wrap ax-gap-1 ax-text-xs\">\n <!-- Color selection bar when in edit mode -->\n <div class=\"ax-flex ax-w-full ax-mt-2 ax-border ax-border-gray-200 ax-overflow-hidden ax-rounded-md\">\n @for (preset of colorPresets; track preset) {\n <div\n class=\"ax-h-6 ax-flex-1 ax-cursor-pointer ax-transition-all ax-duration-200 ax-border-r ax-border-gray-200 last:ax-border-r-0 hover:ax-brightness-95\"\n [style.background-color]=\"preset\"\n [class.ax-ring-inset]=\"bgColor() === preset\"\n [class.ax-ring-2]=\"bgColor() === preset\"\n [class.ax-ring-primary]=\"bgColor() === preset\"\n (click)=\"setColor(preset)\"\n ></div>\n }\n </div>\n </div>\n }\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, plainTextDefaultProperty } from '@acorex/platform/layout/widgets';\nimport { AXP_BG_COLOR_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../widget-categories.type';\n\nexport const AXPStickyNoteWidget: AXPWidgetConfig = {\n name: 'sticky-note',\n title: 'Sticky Note Widget',\n categories: AXP_WIDGETS_UTILITY_CATEGORY,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-sticky-note',\n properties: [\n AXP_DATA_PATH_PROPERTY,\n {\n ...AXP_BG_COLOR_PROPERTY,\n title: '@dashboard:widgets.sticky-note.background-color',\n },\n {\n ...plainTextDefaultProperty(),\n title: '@dashboard:widgets.sticky-note.note-text',\n },\n ],\n components: {\n view: {\n component: () => import('./sticky-note-widget.component').then((c) => c.AXPStickyNoteWidgetViewComponent),\n },\n },\n meta: {\n dimensions: {\n lg: {\n width: 2,\n height: 3,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 4,\n maxHeight: 4,\n },\n md: {\n width: 2,\n height: 3,\n minWidth: 2,\n minHeight: 2,\n maxWidth: 4,\n maxHeight: 4,\n },\n sm: {\n height: 3,\n minHeight: 2,\n maxHeight: 4,\n },\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n stickyNote: 'sticky-note';\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport {\n AXPAdvancedWeatherWidget,\n AXPAnalogClockWidget,\n AXPBarChartWidget,\n AXPDonutChartWidget,\n AXPGaugeChartWidget,\n AXPLineChartWidget,\n AXPKpiDetailsWidget,\n AXPKpiProgressWidget,\n AXPKpiSegmentedWidget,\n AXPMinimalWeatherWidget,\n AXPStickyNoteWidget,\n AXPDashboardShortcutWidget,\n} from './features/shared/widgets';\n\n//#endregion\n\n//#region ---- Dashboard Management Widgets Provider ----\n\nconst DASHBOARD_WIDGETS = [\n AXPDashboardShortcutWidget,\n AXPDonutChartWidget,\n AXPBarChartWidget,\n AXPLineChartWidget,\n AXPKpiProgressWidget,\n AXPKpiSegmentedWidget,\n AXPKpiDetailsWidget,\n AXPGaugeChartWidget,\n AXPStickyNoteWidget,\n AXPMinimalWeatherWidget,\n AXPAdvancedWeatherWidget,\n AXPAnalogClockWidget,\n];\n\n@Injectable()\nexport class AXMDashboardManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return DASHBOARD_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Dashboard Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const DashboardManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXPSystemActionType } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Permission Keys ----\n\nconst moduleKey = RootConfig.module.name;\n\nexport const AXMPermissionsKeys = {\n DashboardManagement: {\n Management: `${moduleKey}:${AXPSystemActionType.Manage}`,\n Dashboard: {\n Management: `${moduleKey}:Dashboard:${AXPSystemActionType.Manage}`,\n View: `${moduleKey}:Dashboard:${AXPSystemActionType.View}`,\n Edit: `${moduleKey}:Dashboard:${AXPSystemActionType.Update}`,\n Delete: `${moduleKey}:Dashboard:${AXPSystemActionType.Delete}`,\n Create: `${moduleKey}:Dashboard:${AXPSystemActionType.Create}`,\n },\n },\n} as const;\n\n//#endregion\n\n\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable, Injector } from '@angular/core';\nimport { AXMPermissionsKeys } from './permission.keys';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly translateService: AXTranslationService;\n\n constructor(private injector: Injector) {\n this.translateService = this.injector.get(AXTranslationService);\n }\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const trans = async (key: string) => await this.translateService.translateAsync(`@dashboard-management:dashboards.permissions.${key}`);\n\n const keys = AXMPermissionsKeys.DashboardManagement;\n\n context.addGroup(RootConfig.module.name, await trans('manage.title'), await trans('manage.description'))\n //\n .addPermission(keys.Dashboard.Management, await trans('dashboards.actions.manage.title'), await trans('dashboards.actions.manage.description'))\n .addChild(keys.Dashboard.View, await trans('dashboards.actions.view.title'), await trans('dashboards.actions.view.description'))\n .addChild(keys.Dashboard.Create, await trans('dashboards.actions.create.title'), await trans('dashboards.actions.create.description'))\n .addChild(keys.Dashboard.Edit, await trans('dashboards.actions.edit.title'), await trans('dashboards.actions.edit.description'))\n .addChild(keys.Dashboard.Delete, await trans('dashboards.actions.delete.title'), await trans('dashboards.actions.delete.description'))\n .endPermission()\n //\n .endGroup();\n }\n}\n\n","export const AXPDashboardManagementMenuKeys = {\n Root: 'DashboardManagement:Menu',\n Dashboards: 'DashboardManagement:Menu:Dashboards',\n} as const;\n\n","import { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from './const';\nimport { AXPDashboardManagementMenuKeys } from './menu.keys';\nimport { AXMPermissionsKeys } from './permission.keys';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const scope = RootConfig.config.i18n;\n const module = RootConfig.module;\n const appName = this.sessionService.application?.name;\n\n const contentMenu = context.find(AXPCommonMenuKeys.Content);\n if (!contentMenu.exists) {\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXPCommonMenuKeys.Content,\n priority: 10,\n text: '@general:menus.content.title',\n icon: 'fa-light fa-paint-brush',\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Content).addItems([\n {\n name: AXPDashboardManagementMenuKeys.Dashboards,\n text: '@dashboard-management:dashboards.menus.dashboards.title',\n path: `${appName}/admin-dashboard`,\n icon: RootConfig.entities.dashboard.icon,\n priority: 2,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXMPermissionsKeys.DashboardManagement.Management],\n },\n },\n ]);\n }\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport {\n AXPEntityDefinitionLoader,\n AXPEntityDefinitionPreloader,\n AXPEntityPreloadEntity,\n} from '@acorex/platform/layout/entity';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {\n private injector = inject(Injector);\n\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName == RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.dashboard.name:\n return (await import('./entities/dashboard/dashboard.entity')).dashboardFactory(this.injector);\n }\n }\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n","import { AXPEntity, AXPEntityCommandScope, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\n\nexport async function dashboardFactory(injector: Injector): Promise<AXPEntity | null> {\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.dashboard.name,\n title: RootConfig.entities.dashboard.title,\n icon: RootConfig.entities.dashboard.icon,\n formats: {\n individual: RootConfig.entities.dashboard.title,\n plural: RootConfig.entities.dashboard.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.dashboard.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'section',\n options: {\n sort: {\n enabled: false,\n },\n filter: {\n advance: {\n enabled: false,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n },\n\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: true,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n\n {\n name: 'description',\n title: `t(\"description\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n options: {\n sort: {\n enabled: false,\n },\n filter: {\n advance: {\n enabled: false,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }, { name: 'description' }],\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n\n {\n name: 'description',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n order: 3,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n\n {\n name: 'description',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n order: 3,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n\n {\n name: 'description',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n order: 3,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n\n return entityDef;\n}\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMCommonDashboardEntityModel } from './dashboard.types';\n\nexport abstract class AXMDashboardService extends AXMEntityCrudServiceImpl<string, AXMCommonDashboardEntityModel> {}\n\n@Injectable()\nexport class AXMDashboardServiceImpl extends AXMDashboardService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.dashboard.name}`);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXMDashboardService, AXMDashboardServiceImpl } from './dashboard.service';\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMDashboardService,\n useClass: AXMDashboardServiceImpl,\n },\n ],\n})\nexport class AXMDashboardEntityModule { }\n","// Entity Services\nexport * from './dashboard';\n\n// Entity Modules\nexport * from './dashboard/dashboard.module';\n","import { AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_PAGES, AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMDashboardManagementWidgetsProvider } from './widget-definition.provider';\nimport { AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsModule } from '@acorex/platform/layout/widgets';\nimport { AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';\nimport { DashboardManagementManifest } from './manifest';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { inject, NgModule } from '@angular/core';\nimport { Route, Routes } from '@angular/router';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMEntityProvider } from './entity.provider';\n\n// Entity Modules\nimport { AXMDashboardEntityModule } from './entities';\n\nimport {\n AXPAdvancedWeatherWidget,\n AXPAnalogClockWidget,\n AXPBarChartWidget,\n AXPDonutChartWidget,\n AXPGaugeChartWidget,\n AXPLineChartWidget,\n AXPMinimalWeatherWidget,\n AXPStickyNoteWidget,\n AXPDashboardShortcutWidget,\n} from './features/shared/widgets';\n\n\n\nfunction createAppRoute(): Route {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n return {\n path: ':app',\n canActivate: [AXPAuthGuard],\n loadComponent: () => {\n return config.viewers.root();\n },\n children: [\n {\n path: 'dashboard',\n loadComponent: () =>\n import('./features/home-dashboard/dashboard-home/home-dashboard').then((c) => c.AXMDashboardHomeComponent),\n },\n {\n path: 'admin-dashboard',\n data: {\n isAdmin: true,\n },\n loadComponent: () =>\n import('./features/home-dashboard/dashboard-home/home-dashboard').then((c) => c.AXMDashboardHomeComponent),\n },\n ],\n };\n}\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n // Entity Modules\n AXMDashboardEntityModule,\n ],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },\n {\n provide: AXP_HOME_PAGES,\n multi: true,\n useFactory: () => [\n {\n key: 'dashboard',\n title: 'Dashboard',\n route: createAppRoute(),\n },\n ],\n },\n // Module-specific providers (not part of manifest system)\n AXPWidgetsModule,\n {\n provide: AXP_HOME_PAGE_DEFAULT_KEY,\n useValue: 'dashboard',\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: DashboardManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\n },\n ],\n})\nexport class AXMDashboardManagementModule { }\n","import { AXEvent, AXItemClickEvent } from '@acorex/cdk/common';\nimport { AXButtonItemComponent, AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetRendererDirective } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n input,\n output,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'axm-dashboard-widget-wrapper',\n templateUrl: './dashboard-widget-wrapper.html',\n styleUrls: ['./dashboard-widget-wrapper.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule, AXDropdownModule, AXTranslationModule, CommonModule],\n standalone: true,\n})\nexport class AXMDashboardWidgetWrapperComponent {\n title = input<string | null>(null);\n\n onDelete = output<void>();\n onConfiguration = output<void>();\n onValueChanged = output<unknown>();\n onOptionsChanged = output<unknown>();\n\n widget = contentChild(AXPWidgetRendererDirective);\n\n #init = afterNextRender(() => {\n this.widget()?.onOptionsChanged.subscribe((c) => {\n console.log(c);\n this.onOptionsChanged.emit(c.widget.options());\n });\n this.widget()?.onValueChanged.subscribe((c) => {\n console.log(c);\n this.onValueChanged.emit(c.widget.getValue());\n });\n });\n\n hasConfiguration = input<boolean>(true);\n isLocked = input<boolean>(false);\n isDropdownOpen = signal(false);\n\n handleOnItemClick(event: AXItemClickEvent<AXButtonItemComponent>) {\n switch (event.item.data) {\n case 'delete':\n this.onDelete.emit();\n break;\n case 'configuration':\n this.onConfiguration.emit();\n break;\n default:\n break;\n }\n this.isDropdownOpen.set(false);\n }\n log(event: AXEvent) {\n console.log('Dropdown event:', event);\n }\n}\n","<section class=\"ax-relative ax-size-full ax-flex ax-flex-col ax-group ax-overflow-hidden\">\n <!-- Action button - stays absolute -->\n @if(!isLocked()) {\n <div\n class=\"ax-p-[0.6125rem] ax-absolute ax-top-0 ax-end-0 ax-z-[9] ax-invisible group-hover:ax-visible md:group-hover:ax-visible\"\n [class.!ax-visible]=\"isDropdownOpen()\"\n (touchstart)=\"isDropdownOpen.set(true)\"\n >\n <ax-button class=\"ax-sm ax-main-button\" [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel (onOpened)=\"isDropdownOpen.set(true)\" (onClosed)=\"isDropdownOpen.set(false)\">\n <ng-container *translate=\"let t\">\n <ax-button-item-list (onItemClick)=\"handleOnItemClick($event)\">\n @if(hasConfiguration()){\n <ax-button-item\n [data]=\"'configuration'\"\n [text]=\"('@dashboard:configuration' | translate | async) || 'configuration'\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-cog\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [data]=\"'delete'\"\n [text]=\"('@general:actions.delete.title' | translate | async)!\"\n color=\"danger\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }\n\n <!-- Title section -->\n @if(title()) {\n <div class=\"ax-ps-5 ax-pe-8 ax-py-3 ax-border-b\">\n <h3 class=\"ax-text-start ax-text-lg ax-font-medium ax-truncate\">{{title()}}</h3>\n </div>\n }\n\n <!-- Content section -->\n <div class=\"ax-overflow-hidden ax-h-full\">\n <ng-content></ng-content>\n </div>\n</section>\n","export enum AXPHomeDashboardSetting {\n CurrentDashboard = 'DashboardManagement:Setting:Home.CurrentDashboard',\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyViewerComponent } from '@acorex/platform/layout/components';\nimport { Component, OnInit, signal } from '@angular/core';\n\n@Component({\n template: `\n @if(widget) {\n <div class=\"ax-px-1\">\n <axp-widget-property-viewer (onChanged)=\"handlePropertyChange($event)\" [widget]=\"widget\">\n </axp-widget-property-viewer>\n </div>\n }\n <ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button text=\"Save\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-save\"></ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n imports: [AXButtonModule, AXDecoratorModule, AXPWidgetPropertyViewerComponent],\n})\nexport class AXMConfigurationPopup extends AXBasePageComponent implements OnInit {\n widget!: AXPWidgetNode;\n protected readonly widgetData = signal<AXPWidgetNode | null>(null);\n\n override ngOnInit(): void {\n this.widgetData.set(this.widget);\n }\n\n protected async handleClose(isCanceled = false): Promise<void> {\n this.close({\n isCanceled,\n widget: this.widgetData(),\n });\n }\n\n protected handlePropertyChange(event: AXPWidgetPropertiesChangedEvent): void {\n this.widgetData.set(event.values);\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMSecurityManagementRolesEntityService } from '@acorex/modules/security-management';\nimport { AXMDashboardLayout } from '../dashboard-home';\nimport { AXMConfigurationPopup } from './configuration-popup';\n\n@Injectable({ providedIn: 'root' })\nexport class AXMDashboardPopupService {\n private readonly popupService = inject(AXPopupService);\n private readonly translateService = inject(AXTranslationService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly roleService = inject(AXMSecurityManagementRolesEntityService);\n private readonly sessionService = inject(AXPSessionService);\n\n async generateDashboardLayout(\n data: Partial<AXMDashboardLayout>,\n isAdmin: boolean,\n ): Promise<AXMDashboardLayout | void> {\n const roles = isAdmin\n ? (\n await this.roleService\n .query({ skip: 0, take: 100 })\n .catch(() => ({ items: [] as Array<{ id: string; title: string }> }))\n ).items.map((i: { id: string; title: string }) => ({ id: i.id, title: i.title }))\n : [];\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMDashboardLayout | undefined>((dialog) => {\n dialog\n .setTitle('@dashboard:dashboard-info')\n .setSize('sm')\n .setContext({\n title: (data?.title ?? '').toString(),\n description: (data?.description ?? '').toString(),\n selectedRoleIds: (data as any)?.roleIds ?? [],\n isDisabled: (data as any)?.isDeleted ?? false,\n isLocked: (data as any)?.locked ?? false,\n isAdmin,\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.title', (field) => {\n field.path('title');\n field.textBox({ placeholder: '@general:terms.common.title', validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({ placeholder: '@general:terms.common.description', rows: 3 });\n })\n .formField('@dashboard:roles', (field) => {\n field.path('selectedRoleIds');\n field.visible(!isAdmin ? 'false' : 'true');\n field.selectionList({\n valueField: 'id',\n textField: 'title',\n dataSource: roles,\n multiple: true,\n placeholder: '@dashboard:select-roles',\n });\n })\n .formField('@dashboard:disable', (field) => {\n field.path('isDisabled');\n field.visible(!isAdmin ? 'false' : 'true');\n field.toggleSwitch({});\n })\n .formField('@dashboard:lock', (field) => {\n field.path('isLocked');\n field.visible(!isAdmin ? 'false' : 'true');\n field.toggleSwitch({});\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return undefined;\n }\n const formData = context as Record<string, unknown>;\n const now = new Date();\n const userId = this.sessionService.user?.id;\n return {\n ...(data as any),\n title: (formData['title'] ?? '').toString().trim(),\n description: (formData['description'] ?? '').toString().trim(),\n roleIds: isAdmin ? (formData['selectedRoleIds'] ?? []) : undefined,\n isDeleted: isAdmin ? Boolean(formData['isDisabled']) : undefined,\n locked: isAdmin ? Boolean(formData['isLocked']) : undefined,\n scope: isAdmin ? 'T' : 'U',\n createdBy: userId,\n createdAt: now,\n updatedBy: userId,\n updatedAt: now,\n } as AXMDashboardLayout;\n });\n })\n .show();\n\n return result;\n }\n\n async handlePopupConfiguration(widget: AXPWidgetNode): Promise<AXPWidgetNode | void> {\n const result = await this.popupService.open(AXMConfigurationPopup, {\n header: true,\n size: 'sm',\n draggable: true,\n hasBackdrop: true,\n title: await this.translateService.translateAsync('@dashboard:widget-configuration'),\n data: { widget },\n });\n\n if (!result.data) {\n return;\n }\n\n const { isCanceled, ...rest } = result.data;\n if (isCanceled) {\n return;\n }\n\n return rest.widget as AXPWidgetNode;\n }\n}\n","//#region ---- Imports ----\n\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXGridLayoutEvent, AXGridLayoutNode, AXGridLayoutOptions } from '@acorex/components/grid-layout-builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPDataGenerator, AXPDeviceService, AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPWidgetPickerService } from '@acorex/platform/layout/designer';\nimport { AXPWidgetGroupEnum, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { computed, effect, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { fromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { AXMDashboardService } from '../../../entities/dashboard/dashboard.service';\nimport { AXMCommonDashboardEntityModel } from '../../../entities/dashboard/dashboard.types';\nimport { AXPHomeDashboardSetting } from '../../../settings.keys';\nimport { AXMDashboardPopupService } from '../dashboard-popups/dashboard-popup.service';\nimport { AXMDashboardBreakpoint, AXMDashboardLayout, AXMDashboardWidgetData } from './home-dashboard.type';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * State container for dashboard feature.\n */\ninterface DashboardState {\n dashboards: AXMDashboardLayout[];\n allDashboards: AXMDashboardLayout[];\n currentDashboardId: string | null;\n isAdmin: boolean;\n dashboardsOption: AXGridLayoutOptions;\n isLoading: boolean;\n currentBreakpoint: AXMDashboardBreakpoint;\n /** True while a breakpoint transition is in progress; suppresses layout saves */\n isBreakpointTransitioning: boolean;\n}\n\ntype SessionUserMinimal = { id?: string; role?: string } | undefined | null;\n\n//#endregion\n\n//#region ---- Utility Functions ----\n\n/** Width threshold for switching between lg (12 col) and md (6 col) breakpoints */\nconst BREAKPOINT_MD_WIDTH = 768;\nconst BREAKPOINT_MD_COLUMN = 6;\nconst BREAKPOINT_SM_WIDTH = 576;\nconst BREAKPOINT_SM_COLUMN = 1;\n\n/**\n * Returns the current dashboard breakpoint based on window width.\n * lg: > 768px (12 columns), md: 481–768px (6 columns), sm: <= 480px (1 column)\n */\nconst getBreakpointFromWidth = (): AXMDashboardBreakpoint => {\n if (typeof window === 'undefined') return 'lg';\n const width = window.innerWidth;\n if (width <= BREAKPOINT_SM_WIDTH) return 'sm';\n if (width <= BREAKPOINT_MD_WIDTH) return 'md';\n return 'lg';\n};\n\n/**\n * Returns the grid column count for a given breakpoint.\n */\nconst getColumnsForBreakpoint = (bp: AXMDashboardBreakpoint): number => {\n switch (bp) {\n case 'sm':\n return BREAKPOINT_SM_COLUMN;\n case 'md':\n return BREAKPOINT_MD_COLUMN;\n case 'lg':\n default:\n return 12;\n }\n};\n\n/**\n * Creates the initial state for the dashboard store.\n */\nconst createInitialState = (): DashboardState => ({\n dashboards: [],\n allDashboards: [],\n currentDashboardId: null,\n isAdmin: false,\n dashboardsOption: {\n float: false,\n cellHeight: 75,\n gap: 5,\n minRow: 9,\n column: getColumnsForBreakpoint(getBreakpointFromWidth()),\n },\n isLoading: false,\n currentBreakpoint: getBreakpointFromWidth(),\n isBreakpointTransitioning: false,\n});\n\n/**\n * Migrates a widget config from the old flat format to the new per-breakpoint format.\n * Old format: { id, x, y, width, height, minWidth, ... }\n * New format: { id, lg: { ... }, md: { ... }, sm: { ... } }\n */\nconst migrateWidgetConfig = (widget: AXMDashboardWidgetData): AXMDashboardWidgetData => {\n const config = widget.config as any;\n // Already in new format (has lg key as an object)\n if (config && typeof config.lg === 'object' && config.lg !== null) {\n return widget;\n }\n // Old flat format: convert to per-breakpoint\n const { id, ...rest } = config || {};\n const widgetId = id || AXPDataGenerator.uuid();\n return {\n ...widget,\n config: {\n id: widgetId,\n lg: { id: widgetId, ...rest } as AXGridLayoutNode,\n md: { id: widgetId, ...rest } as AXGridLayoutNode,\n sm: { id: widgetId, width: 1, height: rest.height || 2 } as AXGridLayoutNode,\n },\n };\n};\n\n/**\n * Maps an entity model to a dashboard layout model.\n * Automatically migrates old flat widget configs to the new per-breakpoint format.\n */\nconst modelToDashboardLayout = (model: AXMCommonDashboardEntityModel): AXMDashboardLayout => ({\n id: model.id || '',\n title: model.title,\n description: model.description,\n widgets: (model.widgets || []).map(migrateWidgetConfig),\n createdBy: model.userId ?? model.auditInfo?.created?.by?.id,\n roleIds: model.roleIds,\n isDeleted: model.isDeleted,\n locked: model.locked,\n createdAt: model.auditInfo?.created?.at,\n updatedAt: model.auditInfo?.updated?.at,\n updatedBy: model.auditInfo?.updated?.by?.id,\n scope: model.scope,\n});\n\n/**\n * Maps a dashboard layout to an entity model for persistence.\n */\nconst dashboardLayoutToModel = (layout: AXMDashboardLayout): AXMCommonDashboardEntityModel => ({\n id: layout.id,\n name: layout.title,\n title: layout.title,\n description: layout.description || '',\n widgets: layout.widgets,\n userId: layout.createdBy,\n roleIds: layout.roleIds,\n isDeleted: layout.isDeleted,\n locked: layout.locked,\n auditInfo: {\n created: layout.createdAt\n ? { at: layout.createdAt, by: layout.createdBy ? ({ id: layout.createdBy, type: 'user' } as any) : undefined }\n : undefined,\n updated: layout.updatedAt\n ? { at: layout.updatedAt, by: layout.updatedBy ? ({ id: layout.updatedBy, type: 'user' } as any) : undefined }\n : undefined,\n },\n scope: layout.scope,\n});\n\n/**\n * Safely reads the current user id from the session service.\n */\nconst readUserId = (sessionService: AXPSessionService): string | undefined => {\n const candidate = sessionService.user as SessionUserMinimal;\n return candidate?.id;\n};\n\n/**\n * Safely reads the current user role from the session service.\n */\nconst readUserRole = (sessionService: AXPSessionService): string | undefined => {\n const candidate = sessionService.user as SessionUserMinimal;\n return candidate?.role;\n};\n\n/**\n * Extracts role ids from a user entity returned by AXMUsersEntityService.\n */\nconst extractUserRoleIds = (user: any): string[] => {\n if (!user) return [];\n if (Array.isArray(user.roleIds) && user.roleIds.length > 0) {\n return user.roleIds.filter((r: unknown): r is string => typeof r === 'string');\n }\n if (Array.isArray(user.roles) && user.roles.length > 0) {\n const ids = user.roles\n .map((r: any) => (typeof r?.id === 'string' ? r.id : undefined))\n .filter((id: unknown): id is string => typeof id === 'string');\n if (ids.length > 0) return ids;\n }\n if (typeof user.roleId === 'string' && user.roleId) return [user.roleId];\n if (typeof user.role === 'string' && user.role) return [user.role];\n return [];\n};\n\n/**\n * Determines whether the given dashboard contains the provided user role.\n */\nconst hasMatchingRole = (dashboard: AXMDashboardLayout, userRole?: string): boolean => {\n if (!userRole) return false;\n const roleIds = dashboard.roleIds;\n return Array.isArray(roleIds) && roleIds.length > 0 && roleIds.includes(userRole);\n};\n\n/**\n * Computes effective layout options based on device, lock, admin and role restrictions.\n * Always derives drag/resize state from the dashboard model — never from base options.\n */\nconst deriveLayoutOptions = (\n baseOptions: AXGridLayoutOptions,\n dashboard: AXMDashboardLayout | undefined,\n isAdmin: boolean,\n isDesktop: boolean,\n userRole?: string,\n): AXGridLayoutOptions => {\n const { disableDrag: _dd, disableResize: _dr, ...cleanBase } = baseOptions;\n\n if (!dashboard) return cleanBase;\n // if (!isDesktop) return { ...cleanBase, disableDrag: true, disableResize: true };\n if (dashboard.locked === true) return { ...cleanBase, disableDrag: true, disableResize: true };\n if (isAdmin) return cleanBase;\n\n const roleMatched = hasMatchingRole(dashboard, userRole);\n if (roleMatched && dashboard.scope === 'T') {\n return { ...cleanBase, disableDrag: true, disableResize: true };\n }\n return cleanBase;\n};\n\n/**\n * Checks if a widget is locked for the current user based on dashboard and role context.\n */\nconst isWidgetLockedForUser = (\n dashboard: AXMDashboardLayout | undefined,\n isAdmin: boolean,\n userRole?: string,\n): boolean => {\n if (!dashboard) return false;\n if (dashboard.locked === true) return true;\n if (isAdmin) return false;\n return hasMatchingRole(dashboard, userRole) && dashboard.scope === 'T';\n};\n\n/**\n * Determines if a widget can be configured by the current user.\n */\nconst canConfigureWidgetForUser = (\n dashboard: AXMDashboardLayout | undefined,\n isAdmin: boolean,\n userRole: string | undefined,\n widgetHasConfiguration: boolean,\n): boolean => {\n if (!dashboard) return true;\n if (isAdmin) return widgetHasConfiguration;\n if (dashboard.locked === true) return false;\n if (hasMatchingRole(dashboard, userRole) && dashboard.scope === 'T') return false;\n return widgetHasConfiguration;\n};\n\n/**\n * Filters dashboards for current user scope and permissions.\n */\nconst filterDashboardsForUser = (\n dashboards: AXMDashboardLayout[],\n isAdmin: boolean,\n userId: string | undefined,\n userRole: string | undefined,\n): AXMDashboardLayout[] => {\n if (!userId) return dashboards;\n\n if (isAdmin) {\n return dashboards.filter((d) => d.scope === 'T');\n }\n\n return dashboards.filter((d) => {\n const isUserDashboard = d.scope === 'U' && d.createdBy === userId;\n const roleMatched = hasMatchingRole(d, userRole);\n const isTenantDashboardWithRole = d.scope === 'T' && roleMatched && d.isDeleted !== true;\n return isUserDashboard || isTenantDashboardWithRole;\n });\n};\n\n//#endregion\n\n//#region ---- Signal Store ----\n/**\n * Dashboard Signal Store: manages dashboards, widgets and permissions.\n */\nexport const AXMDashboardStore = signalStore(\n { providedIn: 'root' },\n\n //#region ---- Initial State ----\n withState(() => createInitialState()),\n //#endregion\n\n //#region ---- Computed Properties ----\n withComputed((state, sessionService = inject(AXPSessionService), deviceService = inject(AXPDeviceService)) => ({\n selectedDashboard: computed(\n () => state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId()) || null,\n ),\n isUserAdmin: computed(() => state.isAdmin()),\n availableDashboards: computed(() => state.allDashboards()),\n currentLayoutOptions: computed(() => {\n const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());\n const baseOptions = state.dashboardsOption();\n const isDesktop = deviceService.isDesktopDevice();\n const userRole = readUserRole(sessionService);\n // Dynamically set column count based on the current breakpoint\n const bp = state.currentBreakpoint();\n const optionsWithColumn = { ...baseOptions, column: getColumnsForBreakpoint(bp) };\n return deriveLayoutOptions(\n optionsWithColumn,\n currentDashboard || undefined,\n state.isAdmin(),\n isDesktop,\n userRole,\n );\n }),\n /**\n * Returns the current dashboard's widgets with their resolved breakpoint options.\n * This computed depends on BOTH the dashboard widgets AND currentBreakpoint,\n * ensuring the @for source produces a new array when the breakpoint changes.\n */\n currentWidgets: computed(() => {\n const dashboard = state.dashboards().find((d) => d.id === state.currentDashboardId());\n const bp = state.currentBreakpoint();\n if (!dashboard?.widgets) return [];\n return dashboard.widgets.map((widget) => ({\n ...widget,\n resolvedOptions: widget.config[bp],\n }));\n }),\n canConfigureWidget: computed(() => (widget: AXMDashboardWidgetData) => {\n const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());\n const userRole = readUserRole(sessionService);\n const widgetHasConfiguration = widget.node?.options?.['hasConfiguration'] ?? true;\n return canConfigureWidgetForUser(\n currentDashboard || undefined,\n state.isAdmin(),\n userRole,\n widgetHasConfiguration,\n );\n }),\n isWidgetLocked: computed(() => (widget: AXMDashboardWidgetData) => {\n const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());\n const userRole = readUserRole(sessionService);\n return isWidgetLockedForUser(currentDashboard || undefined, state.isAdmin(), userRole);\n }),\n })),\n //#endregion\n\n //#region ---- Methods ----\n withMethods(\n (\n store,\n dashboardPopup = inject(AXMDashboardPopupService),\n dialogService = inject(AXDialogService),\n translationService = inject(AXTranslationService),\n widgetPickerService = inject(AXPWidgetPickerService),\n dashboardService = inject(AXMDashboardService),\n settingsService = inject(AXPSettingsService),\n sessionService = inject(AXPSessionService),\n deviceService = inject(AXPDeviceService),\n usersService = inject(AXMUsersEntityService),\n ) => {\n // Load dashboards from service - runs on init and when admin flag changes\n effect(() => {\n const isAdmin = store.isUserAdmin();\n loadDashboards(isAdmin);\n });\n\n // Track window resize and update currentBreakpoint signal.\n // Sets isBreakpointTransitioning to suppress onGridChange saves\n // while the grid settles after a breakpoint switch.\n let transitionTimer: ReturnType<typeof setTimeout> | null = null;\n\n // Queued save: ensures only one save is in-flight at a time.\n // If a new save is requested while one is running, it queues the latest and runs it after.\n let isSaving = false;\n let pendingSaveDashboard: AXMDashboardLayout | null = null;\n\n async function persistDashboard(dashboard: AXMDashboardLayout): Promise<void> {\n if (isSaving) {\n // Queue the latest dashboard for saving after current completes\n pendingSaveDashboard = dashboard;\n return;\n }\n isSaving = true;\n try {\n await dashboardService.updateOne(dashboard.id, dashboardLayoutToModel(dashboard));\n } catch (error) {\n console.error('Error saving dashboard layout:', error);\n }\n isSaving = false;\n // Process queued save if any\n if (pendingSaveDashboard) {\n const next = pendingSaveDashboard;\n pendingSaveDashboard = null;\n await persistDashboard(next);\n }\n }\n\n if (typeof window !== 'undefined') {\n fromEvent(window, 'resize')\n .pipe(debounceTime(100))\n .subscribe(() => {\n const bp = getBreakpointFromWidth();\n if (bp !== store.currentBreakpoint()) {\n if (transitionTimer) clearTimeout(transitionTimer);\n patchState(store, { currentBreakpoint: bp, isBreakpointTransitioning: true });\n\n // End transition after grid has settled (~500ms covers GridStack reflow + Angular CD)\n transitionTimer = setTimeout(() => {\n patchState(store, { isBreakpointTransitioning: false });\n transitionTimer = null;\n }, 500);\n }\n });\n }\n\n /**\n * Loads dashboards and sets current dashboard based on user settings.\n */\n async function loadDashboards(isAdmin: boolean): Promise<void> {\n try {\n patchState(store, { isLoading: true });\n // Build server-side filter based on admin flag and user identity/role\n const userId = readUserId(sessionService);\n let userRoleIds: string[] = [];\n let userDisplayName: string | undefined;\n\n let filter: AXDataSourceFilterOption | undefined;\n\n if (isAdmin) {\n // Admins see tenant scoped dashboards\n filter = {\n field: 'scope',\n operator: { type: 'equal' },\n value: 'T',\n } as AXDataSourceFilterOption;\n } else {\n // Non-admins see either:\n // 1) User scoped dashboards they created\n // 2) Tenant scoped dashboards where their role is included in roleIds\n const orFilters: AXDataSourceFilterOption[] = [];\n\n if (userId) {\n try {\n const user = await usersService.getOne(userId);\n userRoleIds = extractUserRoleIds(user);\n userDisplayName = (user as any)?.displayName as string | undefined;\n } catch {}\n }\n\n if (userId) {\n // Match personal U dashboards by new field userId (preferred)\n orFilters.push({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: [\n { field: 'scope', operator: { type: 'equal' }, value: 'U' },\n { field: 'userId', operator: { type: 'equal' }, value: userId },\n ],\n } as AXDataSourceFilterOption);\n\n // Backward compatibility: also match by legacy createdBy if present\n orFilters.push({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: [\n { field: 'scope', operator: { type: 'equal' }, value: 'U' },\n { field: 'createdBy', operator: { type: 'equal' }, value: userId },\n ],\n } as AXDataSourceFilterOption);\n }\n\n if (userRoleIds.length > 0) {\n orFilters.push({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: [\n { field: 'scope', operator: { type: 'equal' }, value: 'T' },\n { field: 'roleIds', operator: { type: 'in' }, value: userRoleIds },\n ],\n } as AXDataSourceFilterOption);\n }\n\n if (orFilters.length === 1) {\n filter = orFilters[0];\n } else if (orFilters.length > 1) {\n filter = {\n field: null as any,\n logic: 'or',\n operator: null as any,\n filters: orFilters,\n } as AXDataSourceFilterOption;\n }\n }\n\n const result = await dashboardService.query({ skip: 0, take: 100, filter });\n const dashboardModels = result.items || [];\n const dashboards = dashboardModels.map(modelToDashboardLayout);\n const currentDashboardId = await settingsService\n .scope(AXPPlatformScope.User)\n .get(AXPHomeDashboardSetting.CurrentDashboard);\n\n let newCurrentDashboardId = null;\n if (dashboards.length > 0) {\n const dashboardExists = currentDashboardId && dashboards.some((d) => d.id === currentDashboardId);\n newCurrentDashboardId = dashboardExists ? (currentDashboardId as string) : dashboards[0].id;\n\n if (!dashboardExists) {\n settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPHomeDashboardSetting.CurrentDashboard, newCurrentDashboardId);\n }\n }\n\n patchState(store, {\n allDashboards: dashboards,\n dashboards: dashboards,\n isLoading: false,\n currentDashboardId: newCurrentDashboardId,\n });\n } catch (error) {\n console.error('Error loading dashboards:', error);\n patchState(store, { isLoading: false });\n }\n }\n\n return {\n /**\n * Sets the selected dashboard and persists the choice for the user.\n */\n setCurrentDashboard(dashboardId: string): void {\n patchState(store, { currentDashboardId: dashboardId });\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, dashboardId);\n },\n\n /**\n * Creates a new dashboard and selects it as current.\n */\n async addDashboard(): Promise<void> {\n try {\n const newDashboard = await dashboardPopup.generateDashboardLayout({}, store.isUserAdmin());\n if (!newDashboard) return;\n\n const userId = readUserId(sessionService);\n const now = new Date();\n const dashboardWithMetadata: AXMDashboardLayout = {\n ...newDashboard,\n createdBy: userId,\n createdAt: now,\n updatedBy: userId,\n updatedAt: now,\n scope: store.isUserAdmin() ? 'T' : 'U',\n widgets: [],\n };\n\n const dashboardModel = dashboardLayoutToModel(dashboardWithMetadata);\n const createdDashboardId = await dashboardService.insertOne(dashboardModel);\n dashboardWithMetadata.id = createdDashboardId;\n\n const updatedAllDashboards = [...store.availableDashboards(), dashboardWithMetadata];\n const updatedDashboards = [...store.dashboards(), dashboardWithMetadata];\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n currentDashboardId: dashboardWithMetadata.id,\n });\n\n settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPHomeDashboardSetting.CurrentDashboard, dashboardWithMetadata.id);\n } catch (error) {\n console.error('Error adding dashboard:', error);\n }\n },\n\n /**\n * Edits the current dashboard metadata and persists changes.\n */\n async editDashboard(): Promise<void> {\n const currentDashboard = store.selectedDashboard();\n if (!currentDashboard) return;\n\n try {\n const editedDashboard = await dashboardPopup.generateDashboardLayout(\n {\n title: currentDashboard.title,\n description: currentDashboard.description,\n roleIds: currentDashboard.roleIds,\n scope: currentDashboard.scope,\n locked: currentDashboard.locked,\n isDeleted: currentDashboard.isDeleted,\n },\n store.isUserAdmin(),\n );\n\n if (!editedDashboard) return;\n\n const userId = readUserId(sessionService);\n const now = new Date();\n const updatedDashboard: AXMDashboardLayout = {\n ...currentDashboard,\n ...editedDashboard,\n updatedBy: userId,\n updatedAt: now,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n\n const updatedAllDashboards = store\n .availableDashboards()\n .map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n const updatedDashboards = store\n .dashboards()\n .map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n });\n } catch (error) {\n console.error('Error editing dashboard:', error);\n }\n },\n\n /**\n * Adds selected widgets to the current dashboard and saves layout.\n */\n async addWidget(): Promise<void> {\n if (!store.selectedDashboard()) {\n console.warn('No current dashboard selected');\n return;\n }\n\n try {\n const widgets = await widgetPickerService.showPicker({\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n });\n\n const filteredWidgets = (widgets as any[]).map(({ __meta__, ...rest }) => {\n const widget = rest;\n if (widget.type === 'sticky-note' && !widget.options) {\n widget.options = { hasConfiguration: false };\n }\n const randomId = AXPDataGenerator.uuid();\n widget.name = `${widget.type}-${randomId}`;\n widget.path = `${widget.type}-${randomId}`;\n return widget;\n });\n\n const convertedWidgets: AXMDashboardWidgetData[] = filteredWidgets.map((widget) => {\n const id = AXPDataGenerator.uuid();\n const dims = widget?.meta?.dimensions;\n return {\n config: {\n id,\n title: widget.options?.['title'],\n lg: {\n id,\n height: dims?.lg?.height ?? 2,\n width: dims?.lg?.width ?? 2,\n minHeight: dims?.lg?.minHeight,\n minWidth: dims?.lg?.minWidth,\n maxHeight: dims?.lg?.maxHeight,\n maxWidth: dims?.lg?.maxWidth,\n } as AXGridLayoutNode,\n md: {\n id,\n height: dims?.md?.height ?? dims?.lg?.height ?? 2,\n width: dims?.md?.width ?? dims?.lg?.width ?? 2,\n minHeight: dims?.md?.minHeight ?? dims?.lg?.minHeight,\n minWidth: dims?.md?.minWidth ?? dims?.lg?.minWidth,\n maxHeight: dims?.md?.maxHeight ?? dims?.lg?.maxHeight,\n maxWidth: dims?.md?.maxWidth ?? dims?.lg?.maxWidth,\n } as AXGridLayoutNode,\n sm: {\n id,\n width: 1,\n height: dims?.sm?.height ?? dims?.lg?.height ?? 2,\n minHeight: dims?.sm?.minHeight ?? dims?.lg?.minHeight,\n maxHeight: dims?.sm?.maxHeight ?? dims?.lg?.maxHeight,\n } as AXGridLayoutNode,\n },\n node: {\n ...widget,\n name: widget.name,\n },\n };\n });\n\n const currentDashboard = store.selectedDashboard()!;\n const updatedDashboard = {\n ...currentDashboard,\n widgets: [...currentDashboard.widgets, ...convertedWidgets],\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error adding widget:', error);\n }\n },\n\n /**\n * Removes a dashboard after user confirmation and updates selection.\n */\n async removeDashboard(id: string): Promise<void> {\n if (!id) {\n console.warn('No dashboard ID provided for removal');\n return;\n }\n\n try {\n const dialogResult = await dialogService.confirm(\n await translationService.translateAsync('@general:workflow.warning'),\n await translationService.translateAsync('@general:workflow.confirm-delete'),\n 'danger',\n 'horizontal',\n );\n\n if (dialogResult.result) {\n await dashboardService.deleteOne(id);\n const updatedAllDashboards = store.availableDashboards().filter((dashboard) => dashboard.id !== id);\n const updatedDashboards = store.dashboards().filter((dashboard) => dashboard.id !== id);\n let newCurrentDashboardId = store.currentDashboardId();\n\n if (id === store.currentDashboardId()) {\n newCurrentDashboardId =\n updatedDashboards.length > 0 ? updatedDashboards[updatedDashboards.length - 1].id : null;\n if (newCurrentDashboardId) {\n settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPHomeDashboardSetting.CurrentDashboard, newCurrentDashboardId);\n }\n }\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n currentDashboardId: newCurrentDashboardId,\n });\n }\n } catch (error) {\n console.error('Error removing dashboard:', error);\n }\n },\n\n /**\n * Removes a widget from the specified dashboard and persists the change.\n */\n async removeWidget(dashboardId: string, widgetId: string): Promise<void> {\n const currentDashboard = store.dashboards().find((d) => d.id === dashboardId);\n if (!currentDashboard) return;\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: currentDashboard.widgets.filter((widget) => widget.config.id !== widgetId),\n };\n\n await dashboardService.updateOne(dashboardId, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === dashboardId ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === dashboardId ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n },\n\n /**\n * Persists dashboard configuration changes and updates selection.\n */\n async handleConfigChange(dashboard: AXMDashboardLayout): Promise<void> {\n // await dashboardService.updateOne(dashboard.id, dashboardLayoutToModel(dashboard));\n // const updatedDashboards = store.dashboards().map((d) => (d.id === dashboard.id ? dashboard : d));\n\n patchState(store, {\n // dashboards: updatedDashboards,\n currentDashboardId: dashboard.id,\n });\n\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, dashboard.id);\n },\n\n /**\n * Handles grid layout changes (drag/resize) and saves positions for the current breakpoint.\n * Skips saving during breakpoint transitions to avoid persisting auto-reflowed layouts.\n * Persists immediately with queued writes to prevent concurrent save conflicts.\n */\n onGridChange(event: AXGridLayoutEvent): void {\n if (!store.selectedDashboard()) return;\n\n // Skip saves during breakpoint transitions to avoid persisting auto-reflowed layouts\n if (store.isBreakpointTransitioning()) return;\n\n // Skip if the live window breakpoint disagrees with the store\n const liveBp = getBreakpointFromWidth();\n const storeBp = store.currentBreakpoint();\n if (liveBp !== storeBp) return;\n\n const bp = storeBp;\n const nodes = event.nodes.map(({ element, ...rest }) => rest);\n const currentDashboard = store.selectedDashboard()!;\n\n let hasChanges = false;\n const updatedWidgets = currentDashboard.widgets.map((widget) => {\n const updatedNode = nodes.find((node) => node.id === widget.config.id);\n if (!updatedNode) return widget;\n\n const existing = widget.config[bp];\n if (\n existing?.x === updatedNode.x &&\n existing?.y === updatedNode.y &&\n existing?.width === updatedNode.width &&\n existing?.height === updatedNode.height\n ) {\n return widget;\n }\n\n hasChanges = true;\n return {\n ...widget,\n config: {\n ...widget.config,\n [bp]: { ...widget.config[bp], ...updatedNode, id: widget.config.id },\n },\n };\n });\n\n if (!hasChanges) return;\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n\n // Persist to storage (queued to prevent concurrent writes)\n persistDashboard(updatedDashboard);\n },\n\n /**\n * Applies widget configuration changes returned from popup.\n */\n async handlePopupConfiguration(widgetNode: AXPWidgetNode): Promise<void> {\n if (!store.selectedDashboard()) return;\n\n try {\n const updatedNode = await dashboardPopup.handlePopupConfiguration(widgetNode);\n if (!updatedNode) return;\n\n const currentDashboard = store.selectedDashboard()!;\n const updatedWidgets = currentDashboard.widgets.map((widget) =>\n widget.node?.name === widgetNode.name && widget.node?.path === widgetNode.path\n ? { ...widget, node: updatedNode }\n : widget,\n );\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error handling widget configuration:', error);\n }\n },\n\n /**\n * Updates widget value (defaultValue) and persists changes.\n */\n async handleValueChanged(widgetNode: AXPWidgetNode, data: unknown): Promise<void> {\n if (!store.selectedDashboard()) return;\n if (!deviceService.isDesktopDevice()) {\n return;\n }\n\n try {\n const currentDashboard = store.selectedDashboard()!;\n const updatedWidgets = currentDashboard.widgets.map((widget) =>\n widget.node && widget.node.name === widgetNode.name && widget.node.path === widgetNode.path\n ? { ...widget, node: { ...widget.node, defaultValue: data } }\n : widget,\n );\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error handling widget value change:', error);\n }\n },\n\n /**\n * Merges widget options with provided data and persists changes.\n */\n async handleOptionsChanged(widgetNode: AXPWidgetNode, data: unknown): Promise<void> {\n if (!store.selectedDashboard()) return;\n\n try {\n const currentDashboard = store.selectedDashboard()!;\n const updatedWidgets = currentDashboard.widgets.map((widget) =>\n widget.node && widget.node.name === widgetNode.name && widget.node.path === widgetNode.path\n ? {\n ...widget,\n node: {\n ...widget.node,\n options: { ...(widget.node.options || {}), ...(data as object) },\n },\n }\n : widget,\n );\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error handling widget options change:', error);\n }\n },\n\n /**\n * Updates the admin flag in store state.\n */\n setIsAdmin(isAdmin: boolean): void {\n patchState(store, { isAdmin });\n },\n\n // Client-side scope filtering is no longer needed; handled in query filter\n\n /**\n * Toggles lock state for current dashboard based on permission rules.\n */\n async toggleLockDashboard(): Promise<void> {\n const currentDashboard = store.selectedDashboard();\n if (!currentDashboard) return;\n\n try {\n const isAdmin = store.isUserAdmin();\n const userId = readUserId(sessionService);\n const canToggle =\n (!isAdmin && currentDashboard.scope === 'U' && currentDashboard.createdBy === userId) ||\n (isAdmin && currentDashboard.scope === 'T');\n\n if (!canToggle) {\n console.warn('User does not have permission to toggle lock for this dashboard');\n return;\n }\n\n const updatedDashboard = {\n ...currentDashboard,\n locked: !currentDashboard.locked,\n };\n\n await dashboardService.updateOne(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store\n .availableDashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error toggling dashboard lock state:', error);\n }\n },\n\n /**\n * Returns the lock state of the current dashboard.\n */\n isDashboardLocked(): boolean {\n const currentDashboard = store.selectedDashboard();\n return currentDashboard?.locked === true;\n },\n };\n },\n ),\n //#endregion\n);\n//#endregion\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXGridLayoutBuilderModule } from '@acorex/components/grid-layout-builder';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPDesignerService } from '@acorex/platform/layout/designer';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\n\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPActionMenuItem, AXPExecuteCommand, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport { RootConfig } from '../../../const';\nimport { AXMDashboardWidgetWrapperComponent } from '../widget-wrapper/dashboard-widget-wrapper';\nimport { AXMDashboardStore } from './home-dashboard.store';\n\n@Component({\n selector: 'axm-dashboard-home',\n templateUrl: './home-dashboard.html',\n styleUrls: ['./home-dashboard.scss'],\n imports: [\n CommonModule,\n AXLoadingModule,\n AXPWidgetCoreModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXGridLayoutBuilderModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXBreadcrumbsModule,\n AXMDashboardWidgetWrapperComponent,\n AXPStateMessageComponent,\n AXPResolveMultiLanguageStringPipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDesignerService,\n AXMDashboardStore,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDashboardHomeComponent,\n },\n ],\n})\nexport class AXMDashboardHomeComponent extends AXPPageLayoutBaseComponent implements OnInit {\n // Dependencies\n protected readonly rootConfig = RootConfig;\n protected readonly activatedRoute = inject(ActivatedRoute);\n protected readonly dialogService = inject(AXDialogService);\n protected readonly popupService = inject(AXPopupService);\n protected readonly router = inject(Router);\n protected readonly store = inject(AXMDashboardStore);\n protected readonly themeService = inject(AXPLayoutThemeService);\n // Component State\n\n protected readonly context = signal({});\n private dashboardsLoaded = signal(false);\n\n // Lifecycle Hooks\n override async ngOnInit(): Promise<void> {\n const childRoute = this.activatedRoute.firstChild || this.activatedRoute;\n childRoute.data.subscribe((data) => {\n const isAdmin = data['isAdmin'] ?? false;\n this.store.setIsAdmin(isAdmin);\n });\n }\n\n // Effects\n #initEffect = effect(() => {\n const allDashboards = this.store.availableDashboards();\n if (allDashboards.length > 0 && !this.dashboardsLoaded()) {\n this.dashboardsLoaded.set(true);\n this.applyDashboardFiltering();\n this.recompute();\n }\n });\n\n // Private Methods\n private applyDashboardFiltering(): void {}\n\n protected async confirmWidgetDelete(dashboardId: string, widgetId: string): Promise<void> {\n try {\n const dialogResult = await this.dialogService.confirm(\n await this.translateService.translateAsync('@general:workflow.warning'),\n await this.translateService.translateAsync('@general:workflow.confirm-delete'),\n 'danger',\n 'horizontal',\n );\n\n if (dialogResult.result) {\n this.store.removeWidget(dashboardId, widgetId);\n }\n } catch (error) {\n console.error('Error confirming widget deletion:', error);\n }\n }\n\n // Page Interface Implementation\n override getPageTitle(): string {\n return this.store.selectedDashboard()?.title || 'Dashboard';\n }\n\n override async getPageDescription(): Promise<string> {\n return this.store.selectedDashboard()?.description || '';\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return this.store\n .dashboards()\n .map((dashboard) => ({\n title: dashboard.title,\n command: { name: dashboard.id, metadata: { isDashboard: true, dashboard } },\n icon: dashboard.id === this.store.currentDashboardId() ? 'fa-solid fa-check' : '',\n }))\n .sort((a, b) => (a.title ?? '').localeCompare(b.title ?? '', undefined, { sensitivity: 'base' }));\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n title: '@general:actions.add-item.title',\n icon: 'fa-light fa-square-plus',\n color: 'primary',\n items: [\n {\n title: await this.translateService.translateAsync('@dashboard:dashboard'),\n icon: 'fa-light fa-gauge-high',\n break: true,\n command: { name: 'new-dashboard' },\n },\n {\n title: await this.translateService.translateAsync('@dashboard:widget'),\n icon: 'fa-light fa-window-restore',\n command: { name: 'new-widget' },\n disabled: this.store.dashboards().length < 1 || this.store.isDashboardLocked(),\n },\n ],\n },\n ];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const items: AXPActionMenuItem[] = [\n {\n title: await this.translateService.translateAsync('@general:actions.edit.title'),\n icon: 'fa-light fa-pen',\n color: 'primary',\n disabled: this.store.isUserAdmin() && this.store.dashboards().length < 1,\n command: { name: 'edit' },\n },\n ];\n\n items.push({\n title: await this.translateService.translateAsync('@general:actions.delete.title'),\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n disabled: this.store.dashboards().length < 1,\n command: { name: 'delete' },\n });\n\n return items;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (command.metadata?.['isDashboard']) {\n this.store.handleConfigChange(command.metadata?.['dashboard']);\n this.recompute();\n return;\n }\n\n switch (command.name) {\n case 'new-dashboard':\n await this.store.addDashboard();\n this.recompute();\n break;\n case 'new-widget':\n await this.store.addWidget();\n this.recompute();\n break;\n case 'edit':\n await this.store.editDashboard();\n this.recompute();\n break;\n case 'delete':\n await this.store.removeDashboard(this.store.selectedDashboard()?.id!);\n this.recompute();\n break;\n case 'toggle-lock':\n await this.store.toggleLockDashboard();\n this.recompute();\n setTimeout(() => this.recompute(), 50);\n break;\n }\n }\n}\n","<axp-page-layout *translate=\"let t\">\n <axp-page-content class=\"ax-relative\">\n <!-- Loading State -->\n @if (store.isLoading()) {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n <!-- No Dashboards State -->\n @else if (!store.dashboards().length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:empty-state.title'\"\n [description]=\"'@dashboard:empty-state.description'\"\n >\n <div slot=\"actions\">\n <button (click)=\"execute({ name: 'new-dashboard' })\" class=\"ax-underline\">\n {{ '@dashboard:add-first-dashboard' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n }\n <!-- No Widgets State -->\n @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n <div slot=\"actions\">\n <button (click)=\"execute({ name: 'new-widget' })\" class=\"ax-underline\">\n {{ '@dashboard:add-widget' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n }\n <!-- Dashboard Grid -->\n @else {\n <axp-widgets-container [context]=\"context()\">\n <ax-grid-layout-container\n class=\"dark:[--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lighter-surface)] [--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lightest-surface)]\"\n [options]=\"store.currentLayoutOptions()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for (widget of store.currentWidgets(); track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.resolvedOptions\">\n @let title = (widget.node?.options?.['title'] ?? widget.config.title) | axpResolveMultiLanguageString |\n translate | async;\n <axm-dashboard-widget-wrapper\n [title]=\"title!\"\n [hasConfiguration]=\"store.canConfigureWidget()(widget)\"\n [isLocked]=\"store.isWidgetLocked()(widget)\"\n (onDelete)=\"confirmWidgetDelete(store.selectedDashboard()?.id!, widget.config.id!)\"\n (onConfiguration)=\"store.handlePopupConfiguration(widget.node!)\"\n (onValueChanged)=\"store.handleValueChanged(widget?.node!, $event)\"\n (onOptionsChanged)=\"store.handleOptionsChanged(widget?.node!, $event)\"\n >\n @if (widget.node) {\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'view'\"></ng-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n }\n </ax-grid-layout-container>\n </axp-widgets-container>\n }\n </axp-page-content>\n</axp-page-layout>\n","import { AXGridLayoutNode } from '@acorex/components/grid-layout-builder';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\n//#region ---- Breakpoint Types ----\n\n/** Breakpoint size keys for responsive layout profiles */\nexport type AXMDashboardBreakpoint = 'sm' | 'md' | 'lg';\n\n/**\n * Per-breakpoint layout configuration for a dashboard widget.\n * Each breakpoint stores its own AXGridLayoutNode (position, size, constraints).\n * The `id` at the top level is the shared widget identifier across all breakpoints.\n */\nexport interface AXMDashboardWidgetLayoutMap {\n /** Shared widget identifier across all breakpoints */\n id: string;\n title?: string;\n /** Large breakpoint layout (12 columns, window width > 768px) */\n lg: AXGridLayoutNode;\n /** Medium breakpoint layout (6 columns, window width <= 768px) */\n md: AXGridLayoutNode;\n /** Small breakpoint layout (1 column, mobile devices) */\n sm: AXGridLayoutNode;\n}\n\n//#endregion\n\n//#region ---- Dashboard Types ----\n\nexport interface AXMDashboardLayout {\n id: string;\n title: string;\n description?: string;\n widgets: AXMDashboardWidgetData[];\n\n createdAt?: Date;\n updatedAt?: Date;\n createdBy?: string;\n updatedBy?: string;\n\n roleIds?: string[];\n isDeleted?: boolean;\n locked?: boolean;\n\n scope: 'U' | 'T';\n}\n\nexport type AXMDashboardWidgetData = {\n config: AXMDashboardWidgetLayoutMap;\n node?: AXPWidgetNode;\n};\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMOrganizationManagementJobDefinitionEntityService } from '@acorex/modules/organization-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMultiLanguageStringResolverService } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, model, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RootConfig } from '../../../const';\nimport { AXMDashboardLayout } from '../dashboard-home';\n\n@Component({\n template: `\n <div class=\"ax-card-body ax-p-4\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-pb-4\">\n <p class=\"ax-font-semibold\">{{ '@general:terms.common.title' | translate | async }}</p>\n <ax-text-box\n [(ngModel)]=\"title\"\n name=\"title\"\n placeholder=\"{{ '@general:terms.common.title' | translate | async }}\"\n >\n </ax-text-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <p class=\"ax-font-semibold\">{{ '@general:terms.common.description' | translate | async }}</p>\n <ax-text-box\n [(ngModel)]=\"description\"\n name=\"description\"\n placeholder=\"{{ '@general:terms.common.description' | translate | async }}\"\n >\n </ax-text-box>\n </div>\n\n @if (showAdminFields()) {\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-mt-4\">\n <p class=\"ax-font-semibold\">{{ 'roles' | translate: { scope } | async }}</p>\n <ax-select-box\n [(ngModel)]=\"selectedRoleIds\"\n [dataSource]=\"roles\"\n [multiple]=\"true\"\n [textField]=\"'title'\"\n [valueField]=\"'id'\"\n name=\"roles\"\n placeholder=\"{{ 'select-roles' | translate: { scope } | async }}\"\n >\n </ax-select-box>\n </div>\n\n <div class=\"ax-grid grid-cols-2 ax-grid-flow-col ax-gap-8 ax-mt-4\">\n <div class=\"ax-flex ax-flex-row ax-items-center ax-gap-2\">\n <p class=\"ax-font-semibold\">{{ 'disable' | translate: { scope } | async }}</p>\n <ax-switch [(ngModel)]=\"isDisabled\" name=\"isDisabled\"></ax-switch>\n </div>\n\n <div class=\"ax-flex ax-flex-row ax-items-center ax-gap-2\">\n <p class=\"ax-font-semibold\">{{ 'lock' | translate: { scope } | async }}</p>\n <ax-switch [(ngModel)]=\"isLocked\" name=\"isLocked\"></ax-switch>\n </div>\n </div>\n }\n </div>\n\n <ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n look=\"solid\"\n (onClick)=\"handleClose(true)\"\n >\n </ax-button>\n <ax-button\n [text]=\"'@general:actions.save.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n [disabled]=\"!isValid\"\n (onClick)=\"handleClose()\"\n >\n <ax-icon class=\"fa-solid fa-save\"></ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n imports: [\n FormsModule,\n AXButtonModule,\n AXTextBoxModule,\n AXLabelModule,\n AXDecoratorModule,\n CommonModule,\n AXTranslationModule,\n AXSelectBoxModule,\n AXSwitchModule,\n ],\n standalone: true,\n})\nexport class AXMAddDashboardPopup extends AXBasePageComponent implements OnInit {\n protected readonly scope = RootConfig.config.i18n;\n\n private readonly data: Partial<AXMDashboardLayout & { isAdmin: boolean }>;\n\n private readonly jobDefinitionService = inject(AXMOrganizationManagementJobDefinitionEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly multiLanguageResolver = inject(AXPMultiLanguageStringResolverService);\n\n protected title = model<string>('');\n protected description = model<string>('');\n protected selectedRoleIds = model<string[]>([]);\n protected isDisabled = model<boolean>(false);\n protected isLocked = model<boolean>(false);\n protected isAdmin = model<boolean>(false);\n protected showAdminFields = model<boolean>(false);\n protected roles: any[] = [];\n\n protected get isValid(): boolean {\n return !!this.title()?.trim();\n }\n\n override async ngOnInit(): Promise<void> {\n // Set initial values from input data\n this.title.set(this.data?.title || '');\n this.description.set(this.data?.description || '');\n this.isDisabled.set(this.data?.isDeleted || false);\n this.isLocked.set(this.data?.locked || false);\n this.isAdmin.set(this.data?.isAdmin || false);\n this.showAdminFields.set(this.isAdmin() && this.data?.scope !== 'U');\n // Load roles if admin\n if (this.showAdminFields()) {\n try {\n const result = await this.jobDefinitionService.query({ skip: 0, take: 100 });\n if (result.items && result.items.length > 0) {\n this.roles = result.items.map((i) => ({\n id: i.id,\n title: this.multiLanguageResolver.resolve(i.title),\n }));\n }\n this.selectedRoleIds.set(this.roles.filter((i) => this.data?.roleIds?.includes(i.id)).map((i) => i.id));\n } catch (error) {\n console.error('Error loading roles:', error);\n this.roles = [];\n }\n }\n }\n\n protected async handleClose(isCanceled = false): Promise<void> {\n this.close({\n title: this.title()?.trim(),\n description: this.description()?.trim(),\n roleIds: this.showAdminFields() ? this.selectedRoleIds() : undefined,\n isDeleted: this.showAdminFields() ? this.isDisabled() : undefined,\n locked: this.showAdminFields() ? this.isLocked() : undefined,\n scope: this.showAdminFields() ? 'T' : 'U',\n createdBy: this.sessionService.user?.id,\n createdAt: new Date(),\n updatedBy: this.sessionService.user?.id,\n updatedAt: new Date(),\n isCanceled,\n });\n }\n}\n","const path = 'home:dashboard:';\nexport enum AXPHomeDashboardSetting {\n CurrentDashboard = `${path}current-dashboard`,\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","rxjsInterval","i1","i3","i4","i5","AXPHomeDashboardSetting","i7","i8"],"mappings":"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"}