@acorex/modules 21.0.0-next.34 → 21.0.0-next.39
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.
- package/fesm2022/{acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs → acorex-modules-ai-management-acorex-modules-ai-management-CU2FvMTx.mjs} +260 -80
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-CU2FvMTx.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs → acorex-modules-ai-management-agent.entity-CUO9Jczk.mjs} +14 -19
- package/fesm2022/acorex-modules-ai-management-agent.entity-CUO9Jczk.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-daTGJ1Rd.mjs} +52 -8
- package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-daTGJ1Rd.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-Cmprtps-.mjs} +49 -7
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-Cmprtps-.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs → acorex-modules-ai-management-assist.entity-C1nM_x4Z.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs.map → acorex-modules-ai-management-assist.entity-C1nM_x4Z.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-index-KX3TVRXr.mjs → acorex-modules-ai-management-index-CjTjfydP.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-index-KX3TVRXr.mjs.map → acorex-modules-ai-management-index-CjTjfydP.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-model.entity-BeuDUahR.mjs → acorex-modules-ai-management-model.entity-CPHxj8h7.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-model.entity-BeuDUahR.mjs.map → acorex-modules-ai-management-model.entity-CPHxj8h7.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-a6MjMiXF.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs.map → acorex-modules-ai-management-open-ai-endpoint.entity-a6MjMiXF.mjs.map} +1 -1
- package/fesm2022/acorex-modules-ai-management.mjs +1 -1
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-DniyhnPK.mjs} +509 -436
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-DniyhnPK.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs → acorex-modules-assessment-management-assessment-case.entity-BggEmLhz.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs.map → acorex-modules-assessment-management-assessment-case.entity-BggEmLhz.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs → acorex-modules-assessment-management-assessment-session.entity-CWR1QZv1.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs.map → acorex-modules-assessment-management-assessment-session.entity-CWR1QZv1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs → acorex-modules-assessment-management-fill-assessment-session.command-qajn_XDh.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-qajn_XDh.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-index-B2SncZAW.mjs → acorex-modules-assessment-management-index-B2l5Se1l.mjs} +25 -26
- package/fesm2022/acorex-modules-assessment-management-index-B2l5Se1l.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs → acorex-modules-assessment-management-preview-question.command-BCS477_k.mjs} +10 -11
- package/fesm2022/acorex-modules-assessment-management-preview-question.command-BCS477_k.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs → acorex-modules-assessment-management-preview-questionnaire.command-C8lyuqE-.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-C8lyuqE-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DtowOBLy.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DtowOBLy.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs → acorex-modules-assessment-management-question-bank-item.entity-Br7XcU_u.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-Br7XcU_u.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-DNUf5RD3.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-DNUf5RD3.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BdBKHvHP.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BdBKHvHP.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs → acorex-modules-assessment-management-questionnaire.entity-B5aP_P4z.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs.map → acorex-modules-assessment-management-questionnaire.entity-B5aP_P4z.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-C3Qt5fmY.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-C3Qt5fmY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs → acorex-modules-assessment-management-view-session-answers.command-C9VS-Tp3.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs.map → acorex-modules-assessment-management-view-session-answers.command-C9VS-Tp3.mjs.map} +1 -1
- package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
- package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-BDs0ZgD5.mjs → acorex-modules-asset-management-acorex-modules-asset-management-F7Ok5dhs.mjs} +519 -81
- package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-F7Ok5dhs.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset-system-history.entity-CSCwWY_F.mjs → acorex-modules-asset-management-asset-system-history.entity-D1HZG9wO.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-system-history.entity-CSCwWY_F.mjs.map → acorex-modules-asset-management-asset-system-history.entity-D1HZG9wO.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-CcefMT8J.mjs → acorex-modules-asset-management-asset-system-type.entity-DDh5RK5M.mjs} +60 -38
- package/fesm2022/acorex-modules-asset-management-asset-system-type.entity-DDh5RK5M.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-6Rauu2Z1.mjs → acorex-modules-asset-management-asset-type-section-component.entity-em7lQ1eu.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-6Rauu2Z1.mjs.map → acorex-modules-asset-management-asset-type-section-component.entity-em7lQ1eu.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-r_H1QGwp.mjs → acorex-modules-asset-management-asset-type-section.entity-BtcNy6Ra.mjs} +6 -48
- package/fesm2022/acorex-modules-asset-management-asset-type-section.entity-BtcNy6Ra.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset-type.entity-cWVqpbHH.mjs → acorex-modules-asset-management-asset-type.entity-DWhrFVFI.mjs} +53 -100
- package/fesm2022/acorex-modules-asset-management-asset-type.entity-DWhrFVFI.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset.entity-CamZGWTM.mjs → acorex-modules-asset-management-asset.entity-BEjXfkPD.mjs} +66 -56
- package/fesm2022/acorex-modules-asset-management-asset.entity-BEjXfkPD.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-assetSystem.entity-Dq2ASslk.mjs → acorex-modules-asset-management-assetSystem.entity-CJCVALaz.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-assetSystem.entity-Dq2ASslk.mjs.map → acorex-modules-asset-management-assetSystem.entity-CJCVALaz.mjs.map} +1 -1
- package/fesm2022/acorex-modules-asset-management.mjs +1 -1
- package/fesm2022/acorex-modules-common.mjs +38 -41
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +1046 -249
- package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +1098 -706
- package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +63 -35
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +101 -57
- package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee.entity-BRpqFRuI.mjs → acorex-modules-human-capital-management-employee.entity-BmF6_P6d.mjs} +48 -21
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-BmF6_P6d.mjs.map +1 -0
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/acorex-modules-location-management.mjs +18 -99
- package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-DtODwbIN.mjs +7137 -0
- package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-DtODwbIN.mjs.map +1 -0
- package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-DQJJtCqU.mjs → acorex-modules-maintenance-management-failure-effect.entity-BtczD4wu.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-DQJJtCqU.mjs.map → acorex-modules-maintenance-management-failure-effect.entity-BtczD4wu.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-gg2fpT2N.mjs → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CDUdEH-e.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-gg2fpT2N.mjs.map → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CDUdEH-e.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-CHUaAnID.mjs → acorex-modules-maintenance-management-failure-mode-mechanism.entity-re5UvGp7.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-CHUaAnID.mjs.map → acorex-modules-maintenance-management-failure-mode-mechanism.entity-re5UvGp7.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-B93x1uP_.mjs → acorex-modules-maintenance-management-failure-mode-solution.entity-nbFz4LAe.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-B93x1uP_.mjs.map → acorex-modules-maintenance-management-failure-mode-solution.entity-nbFz4LAe.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-McM3l12Q.mjs → acorex-modules-maintenance-management-failure-register-cause.entity-CW2NlX59.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-McM3l12Q.mjs.map → acorex-modules-maintenance-management-failure-register-cause.entity-CW2NlX59.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-_jjy1oeg.mjs → acorex-modules-maintenance-management-failure-register-effect.entity-Bi5XgfoL.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-_jjy1oeg.mjs.map → acorex-modules-maintenance-management-failure-register-effect.entity-Bi5XgfoL.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-5CmdhowW.mjs → acorex-modules-maintenance-management-failure-register-mechanism.entity-DcW6sK01.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-5CmdhowW.mjs.map → acorex-modules-maintenance-management-failure-register-mechanism.entity-DcW6sK01.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-D_lQrda5.mjs → acorex-modules-maintenance-management-failure-register.entity-CUxVZo0w.mjs} +3 -3
- package/fesm2022/acorex-modules-maintenance-management-failure-register.entity-CUxVZo0w.mjs.map +1 -0
- package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BIZxoVIS.mjs → acorex-modules-maintenance-management-failure-severity.entity-B7LBO-UA.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BIZxoVIS.mjs.map → acorex-modules-maintenance-management-failure-severity.entity-B7LBO-UA.mjs.map} +1 -1
- package/fesm2022/acorex-modules-maintenance-management-maintenance-template.entity-D6ATa-HR.mjs +443 -0
- package/fesm2022/acorex-modules-maintenance-management-maintenance-template.entity-D6ATa-HR.mjs.map +1 -0
- package/fesm2022/acorex-modules-maintenance-management.mjs +1 -3579
- package/fesm2022/acorex-modules-maintenance-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +11 -5
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-BrVNMCi_.mjs +356 -0
- package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-BrVNMCi_.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-CO8jMwVJ.mjs +181 -0
- package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-CO8jMwVJ.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-business-unit.entity-WiTemBLu.mjs +359 -0
- package/fesm2022/acorex-modules-organization-management-business-unit.entity-WiTemBLu.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-chart.entity-bRxA8XHZ.mjs → acorex-modules-organization-management-chart.entity-D6Y7kZfM.mjs} +33 -29
- package/fesm2022/acorex-modules-organization-management-chart.entity-D6Y7kZfM.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-company.entity-BohMJQNi.mjs → acorex-modules-organization-management-company.entity-wpNiu8g3.mjs} +6 -8
- package/fesm2022/acorex-modules-organization-management-company.entity-wpNiu8g3.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-data-source-evaluator-scope.provider-BrKtojM9.mjs +48 -0
- package/fesm2022/acorex-modules-organization-management-data-source-evaluator-scope.provider-BrKtojM9.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-entity.provider-B0XbUW1I.mjs +59 -0
- package/fesm2022/acorex-modules-organization-management-entity.provider-B0XbUW1I.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-feature-definition.provider-D7t_nNNk.mjs +19 -0
- package/fesm2022/acorex-modules-organization-management-feature-definition.provider-D7t_nNNk.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-job-definition.entity-S9Jlmr-o.mjs → acorex-modules-organization-management-job-definition.entity-Cb6zEf65.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-definition.entity-S9Jlmr-o.mjs.map → acorex-modules-organization-management-job-definition.entity-Cb6zEf65.mjs.map} +1 -1
- package/fesm2022/acorex-modules-organization-management-job-level.datasource-RDGmLrqD.mjs +95 -0
- package/fesm2022/acorex-modules-organization-management-job-level.datasource-RDGmLrqD.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-job-level.entity-oedF18Xm.mjs +274 -0
- package/fesm2022/acorex-modules-organization-management-job-level.entity-oedF18Xm.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-menu.provider-DAKmAxld.mjs +193 -0
- package/fesm2022/acorex-modules-organization-management-menu.provider-DAKmAxld.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-org-chart.page-mHV0AWGZ.mjs +1081 -0
- package/fesm2022/acorex-modules-organization-management-org-chart.page-mHV0AWGZ.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-permission-definition.provider-Be8mvS_Z.mjs +77 -0
- package/fesm2022/acorex-modules-organization-management-permission-definition.provider-Be8mvS_Z.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-permission.keys-DwZNBc12.mjs +56 -0
- package/fesm2022/acorex-modules-organization-management-permission.keys-DwZNBc12.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-position.entity-DLPufeWz.mjs → acorex-modules-organization-management-position.entity-BveMCKMd.mjs} +108 -106
- package/fesm2022/acorex-modules-organization-management-position.entity-BveMCKMd.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-mMZywr0X.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-ivufxxLL.mjs} +25 -29
- package/fesm2022/acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-ivufxxLL.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CfRBMxLk.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DptdG1Nt.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CfRBMxLk.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DptdG1Nt.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-B06t1G1E.mjs → acorex-modules-organization-management-responsibilities-matrix.component-qO33kvo_.mjs} +14 -21
- package/fesm2022/acorex-modules-organization-management-responsibilities-matrix.component-qO33kvo_.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-responsibility-level.entity-zOjyjm5H.mjs +137 -0
- package/fesm2022/acorex-modules-organization-management-responsibility-level.entity-zOjyjm5H.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-responsibility.entity-CMmr3wJa.mjs → acorex-modules-organization-management-responsibility.entity-jWEiPi5-.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibility.entity-CMmr3wJa.mjs.map → acorex-modules-organization-management-responsibility.entity-jWEiPi5-.mjs.map} +1 -1
- package/fesm2022/acorex-modules-organization-management-settings.provider-D3ged-4h.mjs +228 -0
- package/fesm2022/acorex-modules-organization-management-settings.provider-D3ged-4h.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-CZ4MibH4.mjs → acorex-modules-organization-management-team-member-role.entity-D9TZoACE.mjs} +68 -8
- package/fesm2022/acorex-modules-organization-management-team-member-role.entity-D9TZoACE.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-team-member.entity-8sTjn5Jn.mjs → acorex-modules-organization-management-team-member.entity-Bz4o7c3d.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-team-member.entity-8sTjn5Jn.mjs.map → acorex-modules-organization-management-team-member.entity-Bz4o7c3d.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-team.entity-CGR0UlYl.mjs → acorex-modules-organization-management-team.entity-uVffZPeg.mjs} +100 -37
- package/fesm2022/acorex-modules-organization-management-team.entity-uVffZPeg.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-widget-definition.provider-D4yjuqwx.mjs +48 -0
- package/fesm2022/acorex-modules-organization-management-widget-definition.provider-D4yjuqwx.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management.mjs +1 -2216
- package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-platform-dev-tools-menu.provider-BFueKnuF.mjs +40 -0
- package/fesm2022/acorex-modules-platform-dev-tools-menu.provider-BFueKnuF.mjs.map +1 -0
- package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs +33 -0
- package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs.map +1 -0
- package/fesm2022/acorex-modules-platform-dev-tools.mjs +14 -94
- package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
- package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-DPSNAAct.mjs → acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs} +107 -107
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs.map +1 -0
- package/fesm2022/acorex-modules-report-management.mjs +1 -1
- package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-BMemqW2V.mjs → acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs} +65 -76
- package/fesm2022/acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs.map +1 -0
- package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-Bg7d38wV.mjs → acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs} +2 -2
- package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-Bg7d38wV.mjs.map → acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-BK-rLEXi.mjs → acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs} +2 -2
- package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-BK-rLEXi.mjs.map → acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-2ngXhKAV.mjs → acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs} +2 -2
- package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-2ngXhKAV.mjs.map → acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs.map} +1 -1
- package/fesm2022/acorex-modules-reservation-management.mjs +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +269 -190
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-task-management-task-board.page-C1H_GTqy.mjs → acorex-modules-task-management-task-board.page-DA2563QE.mjs} +15 -10
- package/fesm2022/acorex-modules-task-management-task-board.page-DA2563QE.mjs.map +1 -0
- package/fesm2022/acorex-modules-task-management.mjs +27 -13
- package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-workflow-management-WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY-D6q__Ewd.mjs +5 -0
- package/fesm2022/acorex-modules-workflow-management-WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY-D6q__Ewd.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-column.component-C8lgSjfc.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-column.component-CDo0QVFy.mjs} +14 -6
- package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-column.component-CDo0QVFy.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BGUPxGXP.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BYJpDQRs.mjs} +31 -16
- package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BYJpDQRs.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-activity-definition.entity-Bvs1OfE_.mjs → acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs} +10 -12
- package/fesm2022/acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-index-DWIDQsWq.mjs → acorex-modules-workflow-management-index-C9Qc07oK.mjs} +125 -3
- package/fesm2022/acorex-modules-workflow-management-index-C9Qc07oK.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management-index-D8fjNgQJ.mjs +726 -0
- package/fesm2022/acorex-modules-workflow-management-index-D8fjNgQJ.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management-index-DMnJRDbq.mjs +294 -0
- package/fesm2022/acorex-modules-workflow-management-index-DMnJRDbq.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management-save-workflow-definition-activities.command-fFO152ni.mjs +56 -0
- package/fesm2022/acorex-modules-workflow-management-save-workflow-definition-activities.command-fFO152ni.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-workflow-definition.entity-aJou58ED.mjs → acorex-modules-workflow-management-workflow-definition.entity-DqPVpcSv.mjs} +101 -140
- package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-DqPVpcSv.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-Cq7LE7u5.mjs → acorex-modules-workflow-management-workflow-instance.entity-sfsoT0is.mjs} +10 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-instance.entity-sfsoT0is.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-workflow-task-popover.component-CIakASVR.mjs → acorex-modules-workflow-management-workflow-task-popover.component-NpUx0sB5.mjs} +11 -7
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-NpUx0sB5.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management.mjs +746 -402
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/organization-management/README.md +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-ai-management.d.ts +64 -16
- package/types/acorex-modules-asset-management.d.ts +115 -58
- package/types/acorex-modules-common.d.ts +2 -4
- package/types/acorex-modules-dashboard-management.d.ts +226 -109
- package/types/acorex-modules-data-management.d.ts +2 -2
- package/types/acorex-modules-document-management.d.ts +1 -2
- package/types/acorex-modules-human-capital-management.d.ts +6 -0
- package/types/acorex-modules-maintenance-management.d.ts +561 -41
- package/types/acorex-modules-notification-management.d.ts +7 -3
- package/types/acorex-modules-organization-management.d.ts +52 -107
- package/types/acorex-modules-security-management.d.ts +15 -1
- package/types/acorex-modules-task-management.d.ts +8 -13
- package/types/acorex-modules-workflow-management.d.ts +67 -13
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-index-B2SncZAW.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-BDs0ZgD5.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-system-type.entity-CcefMT8J.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-type-section.entity-r_H1QGwp.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-type.entity-cWVqpbHH.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset.entity-CamZGWTM.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-BRpqFRuI.mjs.map +0 -1
- package/fesm2022/acorex-modules-maintenance-management-failure-register.entity-D_lQrda5.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-C-EKX6Oy.mjs +0 -91
- package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-C-EKX6Oy.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-chart.entity-bRxA8XHZ.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-company.entity-BohMJQNi.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs +0 -784
- package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-position.entity-DLPufeWz.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-mMZywr0X.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-responsibilities-matrix.component-B06t1G1E.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-team-member-role.entity-CZ4MibH4.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-team.entity-CGR0UlYl.mjs.map +0 -1
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-DPSNAAct.mjs.map +0 -1
- package/fesm2022/acorex-modules-reservation-management-acorex-modules-reservation-management-BMemqW2V.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-task-board.page-C1H_GTqy.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-column.component-C8lgSjfc.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BGUPxGXP.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-activity-definition.entity-Bvs1OfE_.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-index-DWIDQsWq.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-aJou58ED.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-instance.entity-Cq7LE7u5.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-CIakASVR.mjs.map +0 -1
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { AXPSessionService, AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
|
|
2
2
|
import { createAllQueryView, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_MENU_PROVIDER, AXPSettingsService } from '@acorex/platform/common';
|
|
3
3
|
import * as i2$3 from '@acorex/platform/layout/widget-core';
|
|
4
|
-
import { AXPBaseWidgetComponent, AXPWidgetsCatalog, cloneProperty, AXPWidgetGroupEnum, AXPValueWidgetComponent,
|
|
4
|
+
import { AXPBaseWidgetComponent, AXPWidgetsCatalog, cloneProperty, AXPWidgetGroupEnum, AXPValueWidgetComponent, createStringProperty, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetRendererDirective } from '@acorex/platform/layout/widget-core';
|
|
5
5
|
import * as i0 from '@angular/core';
|
|
6
|
-
import { inject, signal, effect, computed, ChangeDetectionStrategy, Component,
|
|
6
|
+
import { inject, DestroyRef, afterNextRender, Injectable, signal, effect, computed, ChangeDetectionStrategy, Component, InjectionToken, viewChild, input, ElementRef, ChangeDetectorRef, HostBinding, linkedSignal, HostListener, Injector, NgModule, output, contentChild, ViewEncapsulation, model } from '@angular/core';
|
|
7
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
|
+
import { Subject, map, Observable, catchError, throwError, of, finalize, interval, switchMap, firstValueFrom, fromEvent } from 'rxjs';
|
|
9
|
+
import { throttleTime, debounceTime } from 'rxjs/operators';
|
|
7
10
|
import { AXBarChartComponent } from '@acorex/charts/bar-chart';
|
|
8
11
|
import * as i4 from '@acorex/core/translation';
|
|
9
|
-
import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
|
10
|
-
import { AXPDataSourceDefinitionProviderService,
|
|
11
|
-
import { AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_APPEARANCE_PROPERTY_GROUP, AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_COLOR_PROPERTY, AXP_BG_COLOR_PROPERTY,
|
|
12
|
+
import { AXTranslationService, createMultiLanguageString, AXTranslationModule } from '@acorex/core/translation';
|
|
13
|
+
import { AXPDataSourceDefinitionProviderService, AXPDataGenerator, AXPSystemActionType, AXP_MODULE_MANIFEST_PROVIDER, AXPDeviceService, AXPPlatformScope } from '@acorex/platform/core';
|
|
14
|
+
import { AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_APPEARANCE_PROPERTY_GROUP, AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_COLOR_PROPERTY, AXP_BG_COLOR_PROPERTY, AXPWidgetsModule } from '@acorex/platform/layout/widgets';
|
|
12
15
|
import { AXDonutChartComponent } from '@acorex/charts/donut-chart';
|
|
16
|
+
import { AXFunnelChartComponent } from '@acorex/charts/funnel-chart';
|
|
13
17
|
import { AXGaugeChartComponent } from '@acorex/charts/gauge-chart';
|
|
18
|
+
import { AXHeatmapChartComponent } from '@acorex/charts/heatmap-chart';
|
|
14
19
|
import { AXLineChartComponent } from '@acorex/charts/line-chart';
|
|
15
20
|
import * as i1$1 from '@acorex/components/button';
|
|
16
21
|
import { AXButtonModule } from '@acorex/components/button';
|
|
@@ -22,7 +27,6 @@ import * as i1$2 from '@acorex/components/tooltip';
|
|
|
22
27
|
import { AXTooltipModule } from '@acorex/components/tooltip';
|
|
23
28
|
import * as i3 from '@angular/common';
|
|
24
29
|
import { CommonModule } from '@angular/common';
|
|
25
|
-
import { map, Observable, catchError, throwError, of, finalize, interval, switchMap, firstValueFrom, fromEvent } from 'rxjs';
|
|
26
30
|
import { HttpClient, HttpClientModule } from '@angular/common/http';
|
|
27
31
|
import { AXDateTimeModule } from '@acorex/core/date-time';
|
|
28
32
|
import * as i2 from '@acorex/core/format';
|
|
@@ -57,7 +61,6 @@ import * as i1$4 from '@acorex/components/loading';
|
|
|
57
61
|
import { AXLoadingModule } from '@acorex/components/loading';
|
|
58
62
|
import { AXMSecurityManagementRolesEntityService, AXMUsersEntityService } from '@acorex/modules/security-management';
|
|
59
63
|
import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
|
|
60
|
-
import { debounceTime } from 'rxjs/operators';
|
|
61
64
|
import { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';
|
|
62
65
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
63
66
|
import { AXLabelModule } from '@acorex/components/label';
|
|
@@ -67,16 +70,19 @@ import * as i6 from '@acorex/components/switch';
|
|
|
67
70
|
import { AXSwitchModule } from '@acorex/components/switch';
|
|
68
71
|
import * as i3$3 from '@acorex/components/text-box';
|
|
69
72
|
import { AXTextBoxModule } from '@acorex/components/text-box';
|
|
70
|
-
import {
|
|
73
|
+
import { RootConfig as RootConfig$1 } from '@acorex/modules/organization-management';
|
|
71
74
|
|
|
72
75
|
const config = {
|
|
73
76
|
i18n: 'dashboard-management',
|
|
77
|
+
module: 'DashboardManagement',
|
|
74
78
|
};
|
|
79
|
+
/** Builds shared dashboard widget type ids: `{module}:Widget:Dashboard:{Segment}`. */
|
|
80
|
+
const dashboardWidgetId = (segment) => `${config.module}:Widget:Dashboard:${segment}`;
|
|
75
81
|
const RootConfig = {
|
|
76
82
|
config,
|
|
77
83
|
module: {
|
|
78
|
-
module:
|
|
79
|
-
name:
|
|
84
|
+
module: config.module,
|
|
85
|
+
name: config.module,
|
|
80
86
|
title: `@${config.i18n}:module.title`,
|
|
81
87
|
icon: 'fa-regular fa-tachometer-alt',
|
|
82
88
|
},
|
|
@@ -88,17 +94,110 @@ const RootConfig = {
|
|
|
88
94
|
icon: 'fa-regular fa-tachometer-alt',
|
|
89
95
|
},
|
|
90
96
|
},
|
|
97
|
+
/** Dashboard widget type ids owned by dashboard-management. */
|
|
98
|
+
widgets: {
|
|
99
|
+
barChart: dashboardWidgetId('BarChart'),
|
|
100
|
+
donutChart: dashboardWidgetId('DonutChart'),
|
|
101
|
+
lineChart: dashboardWidgetId('LineChart'),
|
|
102
|
+
gaugeChart: dashboardWidgetId('GaugeChart'),
|
|
103
|
+
funnelChart: dashboardWidgetId('FunnelChart'),
|
|
104
|
+
heatmapChart: dashboardWidgetId('HeatmapChart'),
|
|
105
|
+
stickyNote: dashboardWidgetId('StickyNote'),
|
|
106
|
+
clockCalendar: dashboardWidgetId('ClockCalendar'),
|
|
107
|
+
analogClock: dashboardWidgetId('AnalogClock'),
|
|
108
|
+
weather: dashboardWidgetId('Weather'),
|
|
109
|
+
minimalWeather: dashboardWidgetId('MinimalWeather'),
|
|
110
|
+
advancedWeather: dashboardWidgetId('AdvancedWeather'),
|
|
111
|
+
shortcut: dashboardWidgetId('Shortcut'),
|
|
112
|
+
kpiProgress: dashboardWidgetId('KpiProgress'),
|
|
113
|
+
kpiSegmented: dashboardWidgetId('KpiSegmented'),
|
|
114
|
+
kpiDetails: dashboardWidgetId('KpiDetails'),
|
|
115
|
+
kpiStatCard: dashboardWidgetId('KpiStatCard'),
|
|
116
|
+
},
|
|
91
117
|
};
|
|
92
118
|
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region ---- Constants ----
|
|
121
|
+
/** Minimum interval between container resize emissions to subscribers and {@link AXPDashboardWidgetComponent.onContainerSizeChanged}. */
|
|
122
|
+
const AXPDASHBOARD_WIDGET_CONTAINER_RESIZE_THROTTLE_MS = 100;
|
|
123
|
+
//#endregion
|
|
124
|
+
//#region ---- Dashboard widget base ----
|
|
125
|
+
/**
|
|
126
|
+
* Base class for dashboard widgets ({@link AXPBaseWidgetComponent}).
|
|
127
|
+
* Extend this to add shared dashboard logic and helpers.
|
|
128
|
+
*/
|
|
129
|
+
class AXPDashboardWidgetComponent extends AXPBaseWidgetComponent {
|
|
130
|
+
constructor() {
|
|
131
|
+
super();
|
|
132
|
+
//#region ---- Container resize ----
|
|
133
|
+
this.containerResizeRawSubject = new Subject();
|
|
134
|
+
this.containerSizeSubject = new Subject();
|
|
135
|
+
/**
|
|
136
|
+
* Emits the widget host content-box size whenever it changes.
|
|
137
|
+
* Notifications are throttled; see `AXPDASHBOARD_WIDGET_CONTAINER_RESIZE_THROTTLE_MS`.
|
|
138
|
+
*/
|
|
139
|
+
this.containerSize$ = this.containerSizeSubject.asObservable();
|
|
140
|
+
const destroyRef = inject(DestroyRef);
|
|
141
|
+
if (typeof ResizeObserver === 'undefined') {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.containerResizeRawSubject
|
|
145
|
+
.pipe(throttleTime(AXPDASHBOARD_WIDGET_CONTAINER_RESIZE_THROTTLE_MS, undefined, {
|
|
146
|
+
leading: true,
|
|
147
|
+
trailing: true,
|
|
148
|
+
}), takeUntilDestroyed(destroyRef))
|
|
149
|
+
.subscribe((size) => {
|
|
150
|
+
this.containerSizeSubject.next(size);
|
|
151
|
+
this.onContainerSizeChanged(size);
|
|
152
|
+
});
|
|
153
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
|
154
|
+
const entry = entries[0];
|
|
155
|
+
if (!entry) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const size = {
|
|
159
|
+
width: entry.contentRect.width,
|
|
160
|
+
height: entry.contentRect.height,
|
|
161
|
+
};
|
|
162
|
+
this.containerResizeRawSubject.next(size);
|
|
163
|
+
});
|
|
164
|
+
const bindResizeObservation = () => {
|
|
165
|
+
if (!this.host.isConnected) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
resizeObserver.disconnect();
|
|
169
|
+
resizeObserver.observe(this.host);
|
|
170
|
+
};
|
|
171
|
+
afterNextRender(() => {
|
|
172
|
+
bindResizeObservation();
|
|
173
|
+
});
|
|
174
|
+
destroyRef.onDestroy(() => {
|
|
175
|
+
resizeObserver.disconnect();
|
|
176
|
+
this.containerResizeRawSubject.complete();
|
|
177
|
+
this.containerSizeSubject.complete();
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Called when the widget host content box is resized.
|
|
182
|
+
* Override for imperative updates; use {@link containerSize$} for reactive pipelines.
|
|
183
|
+
*/
|
|
184
|
+
onContainerSizeChanged(_size) { }
|
|
185
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDashboardWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
186
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDashboardWidgetComponent }); }
|
|
187
|
+
}
|
|
188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDashboardWidgetComponent, decorators: [{
|
|
189
|
+
type: Injectable
|
|
190
|
+
}], ctorParameters: () => [] });
|
|
191
|
+
|
|
93
192
|
/**
|
|
94
193
|
* Bar Chart Widget Component
|
|
95
194
|
* Renders data as vertical bars with interactive hover effects and animations
|
|
96
195
|
*/
|
|
97
|
-
class AXPBarChartWidgetViewComponent extends
|
|
196
|
+
class AXPBarChartWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
98
197
|
//#endregion
|
|
99
198
|
async resolveChartOptionLabel(value) {
|
|
100
199
|
if (value != null && typeof value === 'object' && !Array.isArray(value)) {
|
|
101
|
-
return this.
|
|
200
|
+
return this.translationService.resolve(value);
|
|
102
201
|
}
|
|
103
202
|
const s = String(value ?? '');
|
|
104
203
|
if (s.startsWith('@')) {
|
|
@@ -119,8 +218,10 @@ class AXPBarChartWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
119
218
|
}
|
|
120
219
|
return value;
|
|
121
220
|
}
|
|
122
|
-
if (typeof value === 'object' &&
|
|
123
|
-
|
|
221
|
+
if (typeof value === 'object' &&
|
|
222
|
+
!Array.isArray(value) &&
|
|
223
|
+
this.translationService.isValidMultiLanguageObject(value)) {
|
|
224
|
+
return this.translationService.resolve(value);
|
|
124
225
|
}
|
|
125
226
|
return String(value);
|
|
126
227
|
}
|
|
@@ -129,7 +230,6 @@ class AXPBarChartWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
129
230
|
//#region ---- Services & Dependencies ----
|
|
130
231
|
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
131
232
|
this.translationService = inject(AXTranslationService);
|
|
132
|
-
this.mlResolver = inject(AXPMultiLanguageStringResolverService);
|
|
133
233
|
//#endregion
|
|
134
234
|
//#region ---- Chart state ----
|
|
135
235
|
this.data = signal([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
@@ -224,8 +324,9 @@ const AXP_WIDGETS_UTILITY_CATEGORY = {
|
|
|
224
324
|
};
|
|
225
325
|
|
|
226
326
|
const AXPBarChartWidget = {
|
|
227
|
-
name:
|
|
228
|
-
title: '
|
|
327
|
+
name: RootConfig.widgets.barChart,
|
|
328
|
+
title: '@dashboard:widgets.bar-chart.widget-title',
|
|
329
|
+
description: '@dashboard:widgets.bar-chart.widget-description',
|
|
229
330
|
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
230
331
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
231
332
|
type: 'dashboard',
|
|
@@ -534,10 +635,10 @@ const AXPBarChartWidget = {
|
|
|
534
635
|
* Donut Chart Widget Component
|
|
535
636
|
* Displays data in a circular donut chart with interactive segments
|
|
536
637
|
*/
|
|
537
|
-
class AXPDonutChartWidgetViewComponent extends
|
|
638
|
+
class AXPDonutChartWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
538
639
|
async resolveChartOptionLabel(value) {
|
|
539
640
|
if (value != null && typeof value === 'object' && !Array.isArray(value)) {
|
|
540
|
-
return this.
|
|
641
|
+
return this.translationService.resolve(value);
|
|
541
642
|
}
|
|
542
643
|
const s = String(value ?? '');
|
|
543
644
|
if (s.startsWith('@')) {
|
|
@@ -558,8 +659,10 @@ class AXPDonutChartWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
558
659
|
}
|
|
559
660
|
return value;
|
|
560
661
|
}
|
|
561
|
-
if (typeof value === 'object' &&
|
|
562
|
-
|
|
662
|
+
if (typeof value === 'object' &&
|
|
663
|
+
!Array.isArray(value) &&
|
|
664
|
+
this.translationService.isValidMultiLanguageObject(value)) {
|
|
665
|
+
return this.translationService.resolve(value);
|
|
563
666
|
}
|
|
564
667
|
return String(value);
|
|
565
668
|
}
|
|
@@ -568,7 +671,6 @@ class AXPDonutChartWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
568
671
|
//#region ---- Services & Dependencies ----
|
|
569
672
|
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
570
673
|
this.translationService = inject(AXTranslationService);
|
|
571
|
-
this.mlResolver = inject(AXPMultiLanguageStringResolverService);
|
|
572
674
|
//#endregion
|
|
573
675
|
//#region ---- Chart state ----
|
|
574
676
|
this.data = signal([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
@@ -581,9 +683,7 @@ class AXPDonutChartWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
581
683
|
const generation = ++this.labelResolveGeneration;
|
|
582
684
|
void (async () => {
|
|
583
685
|
const title = await this.resolveChartOptionLabel(raw['title']);
|
|
584
|
-
const totalLabel = raw['totalLabel'] !== undefined
|
|
585
|
-
? await this.resolveChartOptionLabel(raw['totalLabel'])
|
|
586
|
-
: undefined;
|
|
686
|
+
const totalLabel = raw['totalLabel'] !== undefined ? await this.resolveChartOptionLabel(raw['totalLabel']) : undefined;
|
|
587
687
|
if (generation !== this.labelResolveGeneration) {
|
|
588
688
|
return;
|
|
589
689
|
}
|
|
@@ -655,8 +755,9 @@ var donutChartWidget_component = /*#__PURE__*/Object.freeze({
|
|
|
655
755
|
});
|
|
656
756
|
|
|
657
757
|
const AXPDonutChartWidget = {
|
|
658
|
-
name:
|
|
659
|
-
title: '
|
|
758
|
+
name: RootConfig.widgets.donutChart,
|
|
759
|
+
title: '@dashboard:widgets.donut-chart.widget-title',
|
|
760
|
+
description: '@dashboard:widgets.donut-chart.widget-description',
|
|
660
761
|
categories: AXP_WIDGETS_CHART_CATEGORY,
|
|
661
762
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
662
763
|
type: 'dashboard',
|
|
@@ -914,14 +1015,165 @@ const AXPDonutChartWidget = {
|
|
|
914
1015
|
},
|
|
915
1016
|
};
|
|
916
1017
|
|
|
1018
|
+
/**
|
|
1019
|
+
* Funnel Chart Widget Component
|
|
1020
|
+
* Displays step-wise conversion/flow data as a funnel.
|
|
1021
|
+
*/
|
|
1022
|
+
class AXPFunnelChartWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
1023
|
+
//#region ---- Localization ----
|
|
1024
|
+
async resolveChartText(value) {
|
|
1025
|
+
if (value == null) {
|
|
1026
|
+
return '';
|
|
1027
|
+
}
|
|
1028
|
+
if (typeof value === 'string') {
|
|
1029
|
+
return value.startsWith('@') ? this.translationService.translateAsync(value) : value;
|
|
1030
|
+
}
|
|
1031
|
+
if (typeof value === 'object' &&
|
|
1032
|
+
!Array.isArray(value) &&
|
|
1033
|
+
this.translationService.isValidMultiLanguageObject(value)) {
|
|
1034
|
+
return this.translationService.resolve(value);
|
|
1035
|
+
}
|
|
1036
|
+
return String(value);
|
|
1037
|
+
}
|
|
1038
|
+
//#endregion
|
|
1039
|
+
constructor() {
|
|
1040
|
+
super();
|
|
1041
|
+
//#region ---- Services & Dependencies ----
|
|
1042
|
+
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
1043
|
+
this.translationService = inject(AXTranslationService);
|
|
1044
|
+
//#endregion
|
|
1045
|
+
//#region ---- Chart state ----
|
|
1046
|
+
this.data = signal([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
1047
|
+
/** Options passed to the chart with resolved messages/labels (multi-language and @i18n keys). */
|
|
1048
|
+
this.funnelOptions = signal({}, ...(ngDevMode ? [{ debugName: "funnelOptions" }] : /* istanbul ignore next */ []));
|
|
1049
|
+
this.labelResolveGeneration = 0;
|
|
1050
|
+
//#endregion
|
|
1051
|
+
this.dataSource = computed(() => this.options()['dataSource'], ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
1052
|
+
//#endregion
|
|
1053
|
+
//#region ---- Effects ----
|
|
1054
|
+
this.resolveOptionLabelsEffect = effect(() => {
|
|
1055
|
+
const raw = this.options();
|
|
1056
|
+
const generation = ++this.labelResolveGeneration;
|
|
1057
|
+
void (async () => {
|
|
1058
|
+
const messagesRaw = raw['messages'];
|
|
1059
|
+
const messages = messagesRaw && typeof messagesRaw === 'object' && !Array.isArray(messagesRaw)
|
|
1060
|
+
? messagesRaw
|
|
1061
|
+
: undefined;
|
|
1062
|
+
const noData = await this.resolveChartText(messages?.['noData']);
|
|
1063
|
+
if (generation !== this.labelResolveGeneration) {
|
|
1064
|
+
return;
|
|
1065
|
+
}
|
|
1066
|
+
const base = raw;
|
|
1067
|
+
this.funnelOptions.set({
|
|
1068
|
+
...base,
|
|
1069
|
+
...(messages
|
|
1070
|
+
? {
|
|
1071
|
+
messages: {
|
|
1072
|
+
...base.messages,
|
|
1073
|
+
...(noData ? { noData } : {}),
|
|
1074
|
+
...(messages['noDataIcon'] ? { noDataIcon: String(messages['noDataIcon']) } : {}),
|
|
1075
|
+
},
|
|
1076
|
+
}
|
|
1077
|
+
: {}),
|
|
1078
|
+
});
|
|
1079
|
+
})();
|
|
1080
|
+
}, ...(ngDevMode ? [{ debugName: "resolveOptionLabelsEffect" }] : /* istanbul ignore next */ []));
|
|
1081
|
+
this.dataLoadEffect = effect(async () => {
|
|
1082
|
+
const ds = this.dataSource();
|
|
1083
|
+
const resolveName = async (name) => {
|
|
1084
|
+
const resolved = await this.resolveChartText(name);
|
|
1085
|
+
return resolved;
|
|
1086
|
+
};
|
|
1087
|
+
if (typeof ds === 'string') {
|
|
1088
|
+
const result = await this.dataService.get(ds);
|
|
1089
|
+
if (!result) {
|
|
1090
|
+
this.data.set([]);
|
|
1091
|
+
return;
|
|
1092
|
+
}
|
|
1093
|
+
const dataSource = result.source();
|
|
1094
|
+
const page = await dataSource.config.load({
|
|
1095
|
+
take: dataSource.pageSize,
|
|
1096
|
+
skip: 0,
|
|
1097
|
+
sort: [],
|
|
1098
|
+
});
|
|
1099
|
+
const items = (page.items ?? []);
|
|
1100
|
+
const resolved = await Promise.all(items.map(async (item) => ({
|
|
1101
|
+
...item,
|
|
1102
|
+
name: await resolveName(item['name']),
|
|
1103
|
+
})));
|
|
1104
|
+
this.data.set(resolved);
|
|
1105
|
+
return;
|
|
1106
|
+
}
|
|
1107
|
+
if (ds && Array.isArray(ds)) {
|
|
1108
|
+
const resolved = await Promise.all(ds.map(async (item) => ({
|
|
1109
|
+
...item,
|
|
1110
|
+
name: await resolveName(item['name']),
|
|
1111
|
+
})));
|
|
1112
|
+
this.data.set(resolved);
|
|
1113
|
+
return;
|
|
1114
|
+
}
|
|
1115
|
+
this.data.set([]);
|
|
1116
|
+
}, ...(ngDevMode ? [{ debugName: "dataLoadEffect" }] : /* istanbul ignore next */ []));
|
|
1117
|
+
this.setOptions({
|
|
1118
|
+
showLabels: true,
|
|
1119
|
+
showTooltip: true,
|
|
1120
|
+
neckWidth: 0.3,
|
|
1121
|
+
colors: ['#0ea5e9', '#22c55e', '#f59e0b', '#ef4444', '#8b5cf6'],
|
|
1122
|
+
animationEasing: 'cubic-out',
|
|
1123
|
+
animationDuration: 800,
|
|
1124
|
+
margin: { top: 16, right: 16, bottom: 16, left: 16 },
|
|
1125
|
+
...this.options(),
|
|
1126
|
+
});
|
|
1127
|
+
this.funnelOptions.set(this.options());
|
|
1128
|
+
}
|
|
1129
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFunnelChartWidgetViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1130
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPFunnelChartWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ax-funnel-chart [data]=\"data()\" [options]=\"funnelOptions()\"></ax-funnel-chart>\n\n", styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: AXFunnelChartComponent, selector: "ax-funnel-chart", inputs: ["data", "options"], outputs: ["segmentClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1131
|
+
}
|
|
1132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFunnelChartWidgetViewComponent, decorators: [{
|
|
1133
|
+
type: Component,
|
|
1134
|
+
args: [{ imports: [AXFunnelChartComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-funnel-chart [data]=\"data()\" [options]=\"funnelOptions()\"></ax-funnel-chart>\n\n", styles: [":host{display:block;width:100%;height:100%}\n"] }]
|
|
1135
|
+
}], ctorParameters: () => [] });
|
|
1136
|
+
|
|
1137
|
+
var funnelChartWidget_component = /*#__PURE__*/Object.freeze({
|
|
1138
|
+
__proto__: null,
|
|
1139
|
+
AXPFunnelChartWidgetViewComponent: AXPFunnelChartWidgetViewComponent
|
|
1140
|
+
});
|
|
1141
|
+
|
|
1142
|
+
const AXPFunnelChartWidget = {
|
|
1143
|
+
name: RootConfig.widgets.funnelChart,
|
|
1144
|
+
title: '@dashboard:widgets.funnel-chart.widget-title',
|
|
1145
|
+
description: '@dashboard:widgets.funnel-chart.widget-description',
|
|
1146
|
+
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
1147
|
+
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
1148
|
+
type: 'dashboard',
|
|
1149
|
+
icon: 'fa-light fa-filter',
|
|
1150
|
+
properties: [
|
|
1151
|
+
AXP_DATA_SOURCE_OPTIONS_PROPERTY,
|
|
1152
|
+
cloneProperty(AXP_NAME_PROPERTY, { visible: false }),
|
|
1153
|
+
cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),
|
|
1154
|
+
],
|
|
1155
|
+
components: {
|
|
1156
|
+
view: {
|
|
1157
|
+
component: () => Promise.resolve().then(function () { return funnelChartWidget_component; }).then((c) => c.AXPFunnelChartWidgetViewComponent),
|
|
1158
|
+
},
|
|
1159
|
+
},
|
|
1160
|
+
meta: {
|
|
1161
|
+
dimensions: {
|
|
1162
|
+
lg: { width: 5, height: 5, minWidth: 2, minHeight: 2, maxWidth: 7, maxHeight: 7 },
|
|
1163
|
+
md: { width: 5, height: 5, minWidth: 2, minHeight: 2, maxWidth: 7, maxHeight: 7 },
|
|
1164
|
+
sm: { height: 5, minHeight: 2, maxHeight: 7 },
|
|
1165
|
+
},
|
|
1166
|
+
},
|
|
1167
|
+
};
|
|
1168
|
+
|
|
917
1169
|
/**
|
|
918
1170
|
* Gauge Chart Widget Component
|
|
919
1171
|
* Renders a semi-circular gauge chart with animated needle and thresholds
|
|
920
1172
|
*/
|
|
921
|
-
class AXPGaugeChartWidgetViewComponent extends
|
|
1173
|
+
class AXPGaugeChartWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
922
1174
|
async resolveChartOptionLabel(value) {
|
|
923
1175
|
if (value != null && typeof value === 'object' && !Array.isArray(value)) {
|
|
924
|
-
return this.
|
|
1176
|
+
return this.translationService.resolve(value);
|
|
925
1177
|
}
|
|
926
1178
|
const s = String(value ?? '');
|
|
927
1179
|
if (s.startsWith('@')) {
|
|
@@ -934,7 +1186,6 @@ class AXPGaugeChartWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
934
1186
|
//#region ---- Services & Dependencies ----
|
|
935
1187
|
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
936
1188
|
this.translationService = inject(AXTranslationService);
|
|
937
|
-
this.mlResolver = inject(AXPMultiLanguageStringResolverService);
|
|
938
1189
|
//#endregion
|
|
939
1190
|
//#region ---- Chart state ----
|
|
940
1191
|
this.value = signal(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
@@ -960,9 +1211,7 @@ class AXPGaugeChartWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
960
1211
|
return {
|
|
961
1212
|
value: entry['value'],
|
|
962
1213
|
color: String(entry['color'] ?? ''),
|
|
963
|
-
...(labelRaw != null && labelRaw !== ''
|
|
964
|
-
? { label: await this.resolveChartOptionLabel(labelRaw) }
|
|
965
|
-
: {}),
|
|
1214
|
+
...(labelRaw != null && labelRaw !== '' ? { label: await this.resolveChartOptionLabel(labelRaw) } : {}),
|
|
966
1215
|
};
|
|
967
1216
|
}));
|
|
968
1217
|
}
|
|
@@ -1022,8 +1271,9 @@ var gaugeChartWidget_component = /*#__PURE__*/Object.freeze({
|
|
|
1022
1271
|
});
|
|
1023
1272
|
|
|
1024
1273
|
const AXPGaugeChartWidget = {
|
|
1025
|
-
name:
|
|
1026
|
-
title: '
|
|
1274
|
+
name: RootConfig.widgets.gaugeChart,
|
|
1275
|
+
title: '@dashboard:widgets.gauge-chart.widget-title',
|
|
1276
|
+
description: '@dashboard:widgets.gauge-chart.widget-description',
|
|
1027
1277
|
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
1028
1278
|
type: 'dashboard',
|
|
1029
1279
|
icon: 'fa-light fa-gauge',
|
|
@@ -1279,14 +1529,217 @@ const AXPGaugeChartWidget = {
|
|
|
1279
1529
|
},
|
|
1280
1530
|
};
|
|
1281
1531
|
|
|
1532
|
+
/**
|
|
1533
|
+
* Heatmap Chart Widget Component
|
|
1534
|
+
* Displays matrix-like data with color intensity based on value.
|
|
1535
|
+
*/
|
|
1536
|
+
class AXPHeatmapChartWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
1537
|
+
//#region ---- Localization ----
|
|
1538
|
+
async resolveChartText(value) {
|
|
1539
|
+
if (value == null) {
|
|
1540
|
+
return '';
|
|
1541
|
+
}
|
|
1542
|
+
if (typeof value === 'string') {
|
|
1543
|
+
return value.startsWith('@') ? this.translationService.translateAsync(value) : value;
|
|
1544
|
+
}
|
|
1545
|
+
if (typeof value === 'object' &&
|
|
1546
|
+
!Array.isArray(value) &&
|
|
1547
|
+
this.translationService.isValidMultiLanguageObject(value)) {
|
|
1548
|
+
return this.translationService.resolve(value);
|
|
1549
|
+
}
|
|
1550
|
+
return String(value);
|
|
1551
|
+
}
|
|
1552
|
+
//#endregion
|
|
1553
|
+
constructor() {
|
|
1554
|
+
super();
|
|
1555
|
+
//#region ---- Services & Dependencies ----
|
|
1556
|
+
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
1557
|
+
this.translationService = inject(AXTranslationService);
|
|
1558
|
+
//#endregion
|
|
1559
|
+
//#region ---- Chart state ----
|
|
1560
|
+
this.data = signal([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
1561
|
+
/** Options passed to the chart with resolved string labels (multi-language and @i18n keys). */
|
|
1562
|
+
this.heatmapOptions = signal({}, ...(ngDevMode ? [{ debugName: "heatmapOptions" }] : /* istanbul ignore next */ []));
|
|
1563
|
+
this.labelResolveGeneration = 0;
|
|
1564
|
+
//#endregion
|
|
1565
|
+
this.dataSource = computed(() => this.options()['dataSource'], ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
1566
|
+
//#endregion
|
|
1567
|
+
//#region ---- Effects ----
|
|
1568
|
+
this.resolveOptionLabelsEffect = effect(() => {
|
|
1569
|
+
const raw = this.options();
|
|
1570
|
+
const generation = ++this.labelResolveGeneration;
|
|
1571
|
+
void (async () => {
|
|
1572
|
+
const [xAxisLabel, yAxisLabel] = await Promise.all([
|
|
1573
|
+
this.resolveChartText(raw['xAxisLabel']),
|
|
1574
|
+
this.resolveChartText(raw['yAxisLabel']),
|
|
1575
|
+
]);
|
|
1576
|
+
const messagesRaw = raw['messages'];
|
|
1577
|
+
const messages = messagesRaw && typeof messagesRaw === 'object' && !Array.isArray(messagesRaw)
|
|
1578
|
+
? messagesRaw
|
|
1579
|
+
: undefined;
|
|
1580
|
+
const [noData, noDataHelp] = await Promise.all([
|
|
1581
|
+
this.resolveChartText(messages?.['noData']),
|
|
1582
|
+
this.resolveChartText(messages?.['noDataHelp']),
|
|
1583
|
+
]);
|
|
1584
|
+
if (generation !== this.labelResolveGeneration) {
|
|
1585
|
+
return;
|
|
1586
|
+
}
|
|
1587
|
+
const base = raw;
|
|
1588
|
+
this.heatmapOptions.set({
|
|
1589
|
+
...base,
|
|
1590
|
+
xAxisLabel,
|
|
1591
|
+
yAxisLabel,
|
|
1592
|
+
...(messages
|
|
1593
|
+
? {
|
|
1594
|
+
messages: {
|
|
1595
|
+
...base.messages,
|
|
1596
|
+
...(noData ? { noData } : {}),
|
|
1597
|
+
...(noDataHelp ? { noDataHelp } : {}),
|
|
1598
|
+
...(messages['noDataIcon'] ? { noDataIcon: String(messages['noDataIcon']) } : {}),
|
|
1599
|
+
},
|
|
1600
|
+
}
|
|
1601
|
+
: {}),
|
|
1602
|
+
});
|
|
1603
|
+
})();
|
|
1604
|
+
}, ...(ngDevMode ? [{ debugName: "resolveOptionLabelsEffect" }] : /* istanbul ignore next */ []));
|
|
1605
|
+
this.dataLoadEffect = effect(async () => {
|
|
1606
|
+
const ds = this.dataSource();
|
|
1607
|
+
if (typeof ds === 'string') {
|
|
1608
|
+
const result = await this.dataService.get(ds);
|
|
1609
|
+
if (!result) {
|
|
1610
|
+
this.data.set([]);
|
|
1611
|
+
return;
|
|
1612
|
+
}
|
|
1613
|
+
const dataSource = result.source();
|
|
1614
|
+
const page = await dataSource.config.load({
|
|
1615
|
+
take: dataSource.pageSize,
|
|
1616
|
+
skip: 0,
|
|
1617
|
+
sort: [],
|
|
1618
|
+
});
|
|
1619
|
+
const items = (page.items ?? []);
|
|
1620
|
+
const resolved = await Promise.all(items.map(async (item) => {
|
|
1621
|
+
const x = item['x'];
|
|
1622
|
+
const y = item['y'];
|
|
1623
|
+
const label = item['label'];
|
|
1624
|
+
return {
|
|
1625
|
+
...item,
|
|
1626
|
+
x: typeof x === 'number' ? x : await this.resolveChartText(x),
|
|
1627
|
+
y: typeof y === 'number' ? y : await this.resolveChartText(y),
|
|
1628
|
+
...(label !== undefined ? { label: await this.resolveChartText(label) } : {}),
|
|
1629
|
+
};
|
|
1630
|
+
}));
|
|
1631
|
+
this.data.set(resolved);
|
|
1632
|
+
return;
|
|
1633
|
+
}
|
|
1634
|
+
if (ds && Array.isArray(ds)) {
|
|
1635
|
+
const resolved = await Promise.all(ds.map(async (item) => {
|
|
1636
|
+
const x = item['x'];
|
|
1637
|
+
const y = item['y'];
|
|
1638
|
+
const label = item['label'];
|
|
1639
|
+
return {
|
|
1640
|
+
...item,
|
|
1641
|
+
x: typeof x === 'number' ? x : await this.resolveChartText(x),
|
|
1642
|
+
y: typeof y === 'number' ? y : await this.resolveChartText(y),
|
|
1643
|
+
...(label !== undefined ? { label: await this.resolveChartText(label) } : {}),
|
|
1644
|
+
};
|
|
1645
|
+
}));
|
|
1646
|
+
this.data.set(resolved);
|
|
1647
|
+
return;
|
|
1648
|
+
}
|
|
1649
|
+
this.data.set([]);
|
|
1650
|
+
}, ...(ngDevMode ? [{ debugName: "dataLoadEffect" }] : /* istanbul ignore next */ []));
|
|
1651
|
+
this.setOptions({
|
|
1652
|
+
showXAxis: true,
|
|
1653
|
+
showYAxis: true,
|
|
1654
|
+
showTooltip: true,
|
|
1655
|
+
cellPadding: 0.05,
|
|
1656
|
+
borderRadius: 2,
|
|
1657
|
+
colors: ['#f7fbff', '#08306b'],
|
|
1658
|
+
animationEasing: 'cubic-out',
|
|
1659
|
+
animationDuration: 800,
|
|
1660
|
+
...this.options(),
|
|
1661
|
+
});
|
|
1662
|
+
this.heatmapOptions.set(this.options());
|
|
1663
|
+
}
|
|
1664
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPHeatmapChartWidgetViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1665
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPHeatmapChartWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ax-heatmap-chart [data]=\"data()\" [options]=\"heatmapOptions()\"></ax-heatmap-chart>\n\n", styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: AXHeatmapChartComponent, selector: "ax-heatmap-chart", inputs: ["data", "options"], outputs: ["cellClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1666
|
+
}
|
|
1667
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPHeatmapChartWidgetViewComponent, decorators: [{
|
|
1668
|
+
type: Component,
|
|
1669
|
+
args: [{ imports: [AXHeatmapChartComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-heatmap-chart [data]=\"data()\" [options]=\"heatmapOptions()\"></ax-heatmap-chart>\n\n", styles: [":host{display:block;width:100%;height:100%}\n"] }]
|
|
1670
|
+
}], ctorParameters: () => [] });
|
|
1671
|
+
|
|
1672
|
+
var heatmapChartWidget_component = /*#__PURE__*/Object.freeze({
|
|
1673
|
+
__proto__: null,
|
|
1674
|
+
AXPHeatmapChartWidgetViewComponent: AXPHeatmapChartWidgetViewComponent
|
|
1675
|
+
});
|
|
1676
|
+
|
|
1677
|
+
const AXPHeatmapChartWidget = {
|
|
1678
|
+
name: RootConfig.widgets.heatmapChart,
|
|
1679
|
+
title: '@dashboard:widgets.heatmap-chart.widget-title',
|
|
1680
|
+
description: '@dashboard:widgets.heatmap-chart.widget-description',
|
|
1681
|
+
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
1682
|
+
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
1683
|
+
type: 'dashboard',
|
|
1684
|
+
icon: 'fa-light fa-grid-2',
|
|
1685
|
+
properties: [
|
|
1686
|
+
AXP_DATA_SOURCE_OPTIONS_PROPERTY,
|
|
1687
|
+
cloneProperty(AXP_NAME_PROPERTY, { visible: false }),
|
|
1688
|
+
cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),
|
|
1689
|
+
// ====== Axis Settings ======
|
|
1690
|
+
{
|
|
1691
|
+
name: 'xAxisLabel',
|
|
1692
|
+
title: '@dashboard:widgets.heatmap-chart.x-axis-label',
|
|
1693
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
1694
|
+
schema: {
|
|
1695
|
+
defaultValue: '',
|
|
1696
|
+
dataType: 'string',
|
|
1697
|
+
interface: {
|
|
1698
|
+
name: 'xAxisLabel',
|
|
1699
|
+
path: 'options.xAxisLabel',
|
|
1700
|
+
type: AXPWidgetsCatalog.text,
|
|
1701
|
+
},
|
|
1702
|
+
},
|
|
1703
|
+
visible: true,
|
|
1704
|
+
},
|
|
1705
|
+
{
|
|
1706
|
+
name: 'yAxisLabel',
|
|
1707
|
+
title: '@dashboard:widgets.heatmap-chart.y-axis-label',
|
|
1708
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
1709
|
+
schema: {
|
|
1710
|
+
defaultValue: '',
|
|
1711
|
+
dataType: 'string',
|
|
1712
|
+
interface: {
|
|
1713
|
+
name: 'yAxisLabel',
|
|
1714
|
+
path: 'options.yAxisLabel',
|
|
1715
|
+
type: AXPWidgetsCatalog.text,
|
|
1716
|
+
},
|
|
1717
|
+
},
|
|
1718
|
+
visible: true,
|
|
1719
|
+
},
|
|
1720
|
+
],
|
|
1721
|
+
components: {
|
|
1722
|
+
view: {
|
|
1723
|
+
component: () => Promise.resolve().then(function () { return heatmapChartWidget_component; }).then((c) => c.AXPHeatmapChartWidgetViewComponent),
|
|
1724
|
+
},
|
|
1725
|
+
},
|
|
1726
|
+
meta: {
|
|
1727
|
+
dimensions: {
|
|
1728
|
+
lg: { width: 6, height: 5, minWidth: 2, minHeight: 2, maxWidth: 8, maxHeight: 7 },
|
|
1729
|
+
md: { width: 6, height: 5, minWidth: 2, minHeight: 2, maxWidth: 8, maxHeight: 7 },
|
|
1730
|
+
sm: { height: 5, minHeight: 2, maxHeight: 7 },
|
|
1731
|
+
},
|
|
1732
|
+
},
|
|
1733
|
+
};
|
|
1734
|
+
|
|
1282
1735
|
/**
|
|
1283
1736
|
* Line Chart Widget Component
|
|
1284
1737
|
* Renders data as lines with interactive hover effects and animations
|
|
1285
1738
|
*/
|
|
1286
|
-
class AXPLineChartWidgetViewComponent extends
|
|
1739
|
+
class AXPLineChartWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
1287
1740
|
async resolveChartOptionLabel(value) {
|
|
1288
1741
|
if (value != null && typeof value === 'object' && !Array.isArray(value)) {
|
|
1289
|
-
return this.
|
|
1742
|
+
return this.translationService.resolve(value);
|
|
1290
1743
|
}
|
|
1291
1744
|
const s = String(value ?? '');
|
|
1292
1745
|
if (s.startsWith('@')) {
|
|
@@ -1307,8 +1760,10 @@ class AXPLineChartWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
1307
1760
|
}
|
|
1308
1761
|
return value;
|
|
1309
1762
|
}
|
|
1310
|
-
if (typeof value === 'object' &&
|
|
1311
|
-
|
|
1763
|
+
if (typeof value === 'object' &&
|
|
1764
|
+
!Array.isArray(value) &&
|
|
1765
|
+
this.translationService.isValidMultiLanguageObject(value)) {
|
|
1766
|
+
return this.translationService.resolve(value);
|
|
1312
1767
|
}
|
|
1313
1768
|
return String(value);
|
|
1314
1769
|
}
|
|
@@ -1317,7 +1772,6 @@ class AXPLineChartWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
1317
1772
|
//#region ---- Services & Dependencies ----
|
|
1318
1773
|
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
1319
1774
|
this.translationService = inject(AXTranslationService);
|
|
1320
|
-
this.mlResolver = inject(AXPMultiLanguageStringResolverService);
|
|
1321
1775
|
//#endregion
|
|
1322
1776
|
//#region ---- Chart state ----
|
|
1323
1777
|
this.data = signal([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
@@ -1412,8 +1866,9 @@ var lineChartWidget_component = /*#__PURE__*/Object.freeze({
|
|
|
1412
1866
|
});
|
|
1413
1867
|
|
|
1414
1868
|
const AXPLineChartWidget = {
|
|
1415
|
-
name:
|
|
1416
|
-
title: '
|
|
1869
|
+
name: RootConfig.widgets.lineChart,
|
|
1870
|
+
title: '@dashboard:widgets.line-chart.widget-title',
|
|
1871
|
+
description: '@dashboard:widgets.line-chart.widget-description',
|
|
1417
1872
|
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
1418
1873
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
1419
1874
|
type: 'dashboard',
|
|
@@ -1814,13 +2269,12 @@ const AXPLineChartWidget = {
|
|
|
1814
2269
|
},
|
|
1815
2270
|
};
|
|
1816
2271
|
|
|
1817
|
-
class AXPKpiProgressWidgetViewComponent extends
|
|
2272
|
+
class AXPKpiProgressWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
1818
2273
|
constructor() {
|
|
1819
2274
|
super(...arguments);
|
|
1820
2275
|
//#region ---- Services & Dependencies ----
|
|
1821
2276
|
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
1822
2277
|
this.translationService = inject(AXTranslationService);
|
|
1823
|
-
this.mlResolver = inject(AXPMultiLanguageStringResolverService);
|
|
1824
2278
|
//#endregion
|
|
1825
2279
|
//#region ---- State ----
|
|
1826
2280
|
this.model = signal({
|
|
@@ -1908,8 +2362,10 @@ class AXPKpiProgressWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
1908
2362
|
}
|
|
1909
2363
|
return value;
|
|
1910
2364
|
}
|
|
1911
|
-
if (typeof value === 'object' &&
|
|
1912
|
-
|
|
2365
|
+
if (typeof value === 'object' &&
|
|
2366
|
+
!Array.isArray(value) &&
|
|
2367
|
+
this.translationService.isValidMultiLanguageObject(value)) {
|
|
2368
|
+
return this.translationService.resolve(value);
|
|
1913
2369
|
}
|
|
1914
2370
|
return String(value);
|
|
1915
2371
|
}
|
|
@@ -1934,11 +2390,11 @@ class AXPKpiProgressWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
1934
2390
|
}).format(value);
|
|
1935
2391
|
}
|
|
1936
2392
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKpiProgressWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1937
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPKpiProgressWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"kpi-progress\">\n <div class=\"
|
|
2393
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPKpiProgressWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"axp-kpi-progress\">\n <div class=\"__header\">\n <div class=\"__title\">{{ localized().title }}</div>\n <div class=\"__badge\">{{ progressPercent() }}%</div>\n </div>\n\n <div class=\"__value-row\">\n <div class=\"__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n @if (localized().targetValue) {\n <div class=\"__target-wrap\">\n <div class=\"__target-label\">Target</div>\n <div class=\"__target\">{{ localized().targetValue }}</div>\n </div>\n }\n </div>\n\n @if (localized().subtitle) {\n <div class=\"__subtitle\">{{ localized().subtitle }}</div>\n }\n\n <div class=\"__bar-track\">\n <div class=\"__bar-fill\" [style.width.%]=\"progressPercent()\"></div>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.axp-kpi-progress{display:flex;flex-direction:column;gap:.625rem;height:100%;padding:.75rem}.axp-kpi-progress .__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.axp-kpi-progress .__title{font-size:.9rem;font-weight:600;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-progress .__badge{padding:.15rem .5rem;border-radius:999px;background:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));font-size:.75rem;font-weight:700}.axp-kpi-progress .__value-row{display:flex;align-items:flex-end;justify-content:space-between;gap:.75rem}.axp-kpi-progress .__value{font-size:clamp(1.5rem,3.5cqw,2.25rem);font-weight:700;line-height:1.1;color:rgb(var(--ax-sys-color-on-lightest-surface))}.axp-kpi-progress .__target-wrap{display:flex;flex-direction:column;align-items:flex-end}.axp-kpi-progress .__target-label{font-size:.7rem;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-progress .__target{font-size:.95rem;font-weight:600;color:rgb(var(--ax-sys-color-on-lightest-surface))}.axp-kpi-progress .__subtitle{font-size:.82rem;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-progress .__bar-track{width:100%;height:.5rem;border-radius:999px;background:rgb(var(--ax-sys-color-lighter-surface));overflow:hidden}.axp-kpi-progress .__bar-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,rgb(var(--ax-sys-color-primary-300)),rgb(var(--ax-sys-color-primary-500)))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1938
2394
|
}
|
|
1939
2395
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKpiProgressWidgetViewComponent, decorators: [{
|
|
1940
2396
|
type: Component,
|
|
1941
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"kpi-progress\">\n <div class=\"
|
|
2397
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"axp-kpi-progress\">\n <div class=\"__header\">\n <div class=\"__title\">{{ localized().title }}</div>\n <div class=\"__badge\">{{ progressPercent() }}%</div>\n </div>\n\n <div class=\"__value-row\">\n <div class=\"__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n @if (localized().targetValue) {\n <div class=\"__target-wrap\">\n <div class=\"__target-label\">Target</div>\n <div class=\"__target\">{{ localized().targetValue }}</div>\n </div>\n }\n </div>\n\n @if (localized().subtitle) {\n <div class=\"__subtitle\">{{ localized().subtitle }}</div>\n }\n\n <div class=\"__bar-track\">\n <div class=\"__bar-fill\" [style.width.%]=\"progressPercent()\"></div>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.axp-kpi-progress{display:flex;flex-direction:column;gap:.625rem;height:100%;padding:.75rem}.axp-kpi-progress .__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.axp-kpi-progress .__title{font-size:.9rem;font-weight:600;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-progress .__badge{padding:.15rem .5rem;border-radius:999px;background:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));font-size:.75rem;font-weight:700}.axp-kpi-progress .__value-row{display:flex;align-items:flex-end;justify-content:space-between;gap:.75rem}.axp-kpi-progress .__value{font-size:clamp(1.5rem,3.5cqw,2.25rem);font-weight:700;line-height:1.1;color:rgb(var(--ax-sys-color-on-lightest-surface))}.axp-kpi-progress .__target-wrap{display:flex;flex-direction:column;align-items:flex-end}.axp-kpi-progress .__target-label{font-size:.7rem;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-progress .__target{font-size:.95rem;font-weight:600;color:rgb(var(--ax-sys-color-on-lightest-surface))}.axp-kpi-progress .__subtitle{font-size:.82rem;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-progress .__bar-track{width:100%;height:.5rem;border-radius:999px;background:rgb(var(--ax-sys-color-lighter-surface));overflow:hidden}.axp-kpi-progress .__bar-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,rgb(var(--ax-sys-color-primary-300)),rgb(var(--ax-sys-color-primary-500)))}\n"] }]
|
|
1942
2398
|
}] });
|
|
1943
2399
|
|
|
1944
2400
|
var kpiProgressWidget_component = /*#__PURE__*/Object.freeze({
|
|
@@ -1947,8 +2403,9 @@ var kpiProgressWidget_component = /*#__PURE__*/Object.freeze({
|
|
|
1947
2403
|
});
|
|
1948
2404
|
|
|
1949
2405
|
const AXPKpiProgressWidget = {
|
|
1950
|
-
name:
|
|
1951
|
-
title:
|
|
2406
|
+
name: RootConfig.widgets.kpiProgress,
|
|
2407
|
+
title: '@dashboard:widgets.kpi-progress.widget-title',
|
|
2408
|
+
description: '@dashboard:widgets.kpi-progress.widget-description',
|
|
1952
2409
|
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
1953
2410
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
1954
2411
|
type: 'dashboard',
|
|
@@ -2060,12 +2517,11 @@ const AXPKpiProgressWidget = {
|
|
|
2060
2517
|
},
|
|
2061
2518
|
};
|
|
2062
2519
|
|
|
2063
|
-
class AXPKpiSegmentedWidgetViewComponent extends
|
|
2520
|
+
class AXPKpiSegmentedWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
2064
2521
|
constructor() {
|
|
2065
2522
|
super(...arguments);
|
|
2066
2523
|
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
2067
2524
|
this.translationService = inject(AXTranslationService);
|
|
2068
|
-
this.mlResolver = inject(AXPMultiLanguageStringResolverService);
|
|
2069
2525
|
this.model = signal({
|
|
2070
2526
|
title: 'KPI Breakdown',
|
|
2071
2527
|
segments: [],
|
|
@@ -2115,11 +2571,11 @@ class AXPKpiSegmentedWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
2115
2571
|
}
|
|
2116
2572
|
getPaletteColor(index) {
|
|
2117
2573
|
const palette = [
|
|
2118
|
-
'var(--ax-
|
|
2119
|
-
'var(--ax-
|
|
2120
|
-
'var(--ax-
|
|
2121
|
-
'var(--ax-
|
|
2122
|
-
'var(--ax-
|
|
2574
|
+
'rgb(var(--ax-sys-color-primary-500))',
|
|
2575
|
+
'rgb(var(--ax-sys-color-warning-500))',
|
|
2576
|
+
'rgb(var(--ax-sys-color-success-500))',
|
|
2577
|
+
'rgb(var(--ax-sys-color-accent2-500))',
|
|
2578
|
+
'rgb(var(--ax-sys-color-danger-500))',
|
|
2123
2579
|
];
|
|
2124
2580
|
return palette[index % palette.length];
|
|
2125
2581
|
}
|
|
@@ -2130,17 +2586,19 @@ class AXPKpiSegmentedWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
2130
2586
|
if (typeof value === 'string') {
|
|
2131
2587
|
return value.startsWith('@') ? this.translationService.translateAsync(value) : value;
|
|
2132
2588
|
}
|
|
2133
|
-
if (typeof value === 'object' &&
|
|
2134
|
-
|
|
2589
|
+
if (typeof value === 'object' &&
|
|
2590
|
+
!Array.isArray(value) &&
|
|
2591
|
+
this.translationService.isValidMultiLanguageObject(value)) {
|
|
2592
|
+
return this.translationService.resolve(value);
|
|
2135
2593
|
}
|
|
2136
2594
|
return String(value);
|
|
2137
2595
|
}
|
|
2138
2596
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKpiSegmentedWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
2139
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPKpiSegmentedWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"kpi-segmented\">\n <div class=\"
|
|
2597
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPKpiSegmentedWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"axp-kpi-segmented\">\n <div class=\"__header\">{{ title() }}</div>\n\n <div class=\"__bar-track\">\n @for (segment of segments(); track trackByLabel($index, segment)) {\n <div\n class=\"__bar-part\"\n [style.width.%]=\"segment.percent\"\n [style.background-color]=\"segment.color\"\n ></div>\n }\n </div>\n\n <div class=\"__legend\">\n @for (segment of segments(); track trackByLabel($index, segment)) {\n <div class=\"__legend-item\">\n <span class=\"__legend-dot\" [style.background-color]=\"segment.color\"></span>\n <span class=\"__legend-value\">{{ segment.value }}</span>\n <span class=\"__legend-label\">{{ segment.label }}</span>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.axp-kpi-segmented{display:flex;flex-direction:column;gap:.75rem;height:100%;padding:.75rem}.axp-kpi-segmented .__header{font-size:.95rem;font-weight:600;color:rgb(var(--ax-sys-color-on-lightest-surface))}.axp-kpi-segmented .__bar-track{display:flex;height:.75rem;width:100%;border-radius:999px;background:rgb(var(--ax-sys-color-lighter-surface));overflow:hidden}.axp-kpi-segmented .__bar-part{min-width:.25rem}.axp-kpi-segmented .__legend{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.4rem .75rem}.axp-kpi-segmented .__legend-item{display:inline-flex;align-items:center;gap:.35rem;min-width:0}.axp-kpi-segmented .__legend-dot{width:.55rem;height:.55rem;border-radius:999px;flex:0 0 auto}.axp-kpi-segmented .__legend-value{font-size:.8rem;font-weight:700;color:rgb(var(--ax-sys-color-on-lightest-surface))}.axp-kpi-segmented .__legend-label{font-size:.78rem;color:rgb(var(--ax-sys-color-on-light-surface));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2140
2598
|
}
|
|
2141
2599
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKpiSegmentedWidgetViewComponent, decorators: [{
|
|
2142
2600
|
type: Component,
|
|
2143
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"kpi-segmented\">\n <div class=\"
|
|
2601
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"axp-kpi-segmented\">\n <div class=\"__header\">{{ title() }}</div>\n\n <div class=\"__bar-track\">\n @for (segment of segments(); track trackByLabel($index, segment)) {\n <div\n class=\"__bar-part\"\n [style.width.%]=\"segment.percent\"\n [style.background-color]=\"segment.color\"\n ></div>\n }\n </div>\n\n <div class=\"__legend\">\n @for (segment of segments(); track trackByLabel($index, segment)) {\n <div class=\"__legend-item\">\n <span class=\"__legend-dot\" [style.background-color]=\"segment.color\"></span>\n <span class=\"__legend-value\">{{ segment.value }}</span>\n <span class=\"__legend-label\">{{ segment.label }}</span>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.axp-kpi-segmented{display:flex;flex-direction:column;gap:.75rem;height:100%;padding:.75rem}.axp-kpi-segmented .__header{font-size:.95rem;font-weight:600;color:rgb(var(--ax-sys-color-on-lightest-surface))}.axp-kpi-segmented .__bar-track{display:flex;height:.75rem;width:100%;border-radius:999px;background:rgb(var(--ax-sys-color-lighter-surface));overflow:hidden}.axp-kpi-segmented .__bar-part{min-width:.25rem}.axp-kpi-segmented .__legend{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.4rem .75rem}.axp-kpi-segmented .__legend-item{display:inline-flex;align-items:center;gap:.35rem;min-width:0}.axp-kpi-segmented .__legend-dot{width:.55rem;height:.55rem;border-radius:999px;flex:0 0 auto}.axp-kpi-segmented .__legend-value{font-size:.8rem;font-weight:700;color:rgb(var(--ax-sys-color-on-lightest-surface))}.axp-kpi-segmented .__legend-label{font-size:.78rem;color:rgb(var(--ax-sys-color-on-light-surface));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
2144
2602
|
}] });
|
|
2145
2603
|
|
|
2146
2604
|
var kpiSegmentedWidget_component = /*#__PURE__*/Object.freeze({
|
|
@@ -2149,8 +2607,9 @@ var kpiSegmentedWidget_component = /*#__PURE__*/Object.freeze({
|
|
|
2149
2607
|
});
|
|
2150
2608
|
|
|
2151
2609
|
const AXPKpiSegmentedWidget = {
|
|
2152
|
-
name:
|
|
2153
|
-
title:
|
|
2610
|
+
name: RootConfig.widgets.kpiSegmented,
|
|
2611
|
+
title: '@dashboard:widgets.kpi-segmented.widget-title',
|
|
2612
|
+
description: '@dashboard:widgets.kpi-segmented.widget-description',
|
|
2154
2613
|
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
2155
2614
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
2156
2615
|
type: 'dashboard',
|
|
@@ -2181,6 +2640,9 @@ const AXPKpiSegmentedWidget = {
|
|
|
2181
2640
|
},
|
|
2182
2641
|
},
|
|
2183
2642
|
meta: {
|
|
2643
|
+
title: {
|
|
2644
|
+
visible: false,
|
|
2645
|
+
},
|
|
2184
2646
|
dimensions: {
|
|
2185
2647
|
lg: {
|
|
2186
2648
|
width: 4,
|
|
@@ -2202,42 +2664,478 @@ const AXPKpiSegmentedWidget = {
|
|
|
2202
2664
|
},
|
|
2203
2665
|
};
|
|
2204
2666
|
|
|
2205
|
-
class AXPKpiDetailsWidgetViewComponent extends
|
|
2667
|
+
class AXPKpiDetailsWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
2206
2668
|
constructor() {
|
|
2207
2669
|
super(...arguments);
|
|
2208
2670
|
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
2209
2671
|
this.translationService = inject(AXTranslationService);
|
|
2210
|
-
this.mlResolver = inject(AXPMultiLanguageStringResolverService);
|
|
2211
2672
|
this.model = signal({
|
|
2212
2673
|
title: 'KPI',
|
|
2213
2674
|
value: 0,
|
|
2214
|
-
subtitle: '',
|
|
2215
|
-
details: [],
|
|
2675
|
+
subtitle: '',
|
|
2676
|
+
details: [],
|
|
2677
|
+
}, ...(ngDevMode ? [{ debugName: "model" }] : /* istanbul ignore next */ []));
|
|
2678
|
+
this.localized = signal({
|
|
2679
|
+
title: 'KPI',
|
|
2680
|
+
subtitle: '',
|
|
2681
|
+
valuePrefix: '',
|
|
2682
|
+
valueSuffix: '',
|
|
2683
|
+
}, ...(ngDevMode ? [{ debugName: "localized" }] : /* istanbul ignore next */ []));
|
|
2684
|
+
this.detailItems = signal([], ...(ngDevMode ? [{ debugName: "detailItems" }] : /* istanbul ignore next */ []));
|
|
2685
|
+
this.dataSource = computed(() => this.options()['dataSource'], ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
2686
|
+
this.formattedValue = computed(() => this.formatValue(this.model().value, this.model().format), ...(ngDevMode ? [{ debugName: "formattedValue" }] : /* istanbul ignore next */ []));
|
|
2687
|
+
this.optionsEffect = effect(() => {
|
|
2688
|
+
const raw = this.options();
|
|
2689
|
+
this.model.update((current) => ({ ...current, ...raw }));
|
|
2690
|
+
}, ...(ngDevMode ? [{ debugName: "optionsEffect" }] : /* istanbul ignore next */ []));
|
|
2691
|
+
this.localizationEffect = effect(() => {
|
|
2692
|
+
const model = this.model();
|
|
2693
|
+
void Promise.all([
|
|
2694
|
+
this.resolveText(model.title),
|
|
2695
|
+
this.resolveText(model.subtitle),
|
|
2696
|
+
this.resolveText(model.valuePrefix),
|
|
2697
|
+
this.resolveText(model.valueSuffix),
|
|
2698
|
+
this.resolveDetails(model.details),
|
|
2699
|
+
]).then(([title, subtitle, valuePrefix, valueSuffix, details]) => {
|
|
2700
|
+
this.localized.set({ title, subtitle, valuePrefix, valueSuffix });
|
|
2701
|
+
this.detailItems.set(details);
|
|
2702
|
+
});
|
|
2703
|
+
}, ...(ngDevMode ? [{ debugName: "localizationEffect" }] : /* istanbul ignore next */ []));
|
|
2704
|
+
this.dataLoadEffect = effect(async () => {
|
|
2705
|
+
const ds = this.dataSource();
|
|
2706
|
+
if (!ds) {
|
|
2707
|
+
return;
|
|
2708
|
+
}
|
|
2709
|
+
const result = await this.dataService.get(ds);
|
|
2710
|
+
if (!result) {
|
|
2711
|
+
return;
|
|
2712
|
+
}
|
|
2713
|
+
const source = result.source();
|
|
2714
|
+
const page = await source.config.load({ take: 1, skip: 0, sort: [] });
|
|
2715
|
+
const item = (page.items?.[0] ?? {});
|
|
2716
|
+
this.model.update((current) => ({ ...current, ...item }));
|
|
2717
|
+
}, ...(ngDevMode ? [{ debugName: "dataLoadEffect" }] : /* istanbul ignore next */ []));
|
|
2718
|
+
}
|
|
2719
|
+
trackByLabel(_, item) {
|
|
2720
|
+
return item.label;
|
|
2721
|
+
}
|
|
2722
|
+
async resolveDetails(items = []) {
|
|
2723
|
+
return Promise.all(items.map(async (item) => ({
|
|
2724
|
+
label: await this.resolveText(item.label),
|
|
2725
|
+
value: await this.resolveText(item.value),
|
|
2726
|
+
color: item.color,
|
|
2727
|
+
})));
|
|
2728
|
+
}
|
|
2729
|
+
async resolveText(value) {
|
|
2730
|
+
if (value == null) {
|
|
2731
|
+
return '';
|
|
2732
|
+
}
|
|
2733
|
+
if (typeof value === 'string') {
|
|
2734
|
+
return value.startsWith('@') ? this.translationService.translateAsync(value) : value;
|
|
2735
|
+
}
|
|
2736
|
+
if (typeof value === 'object' &&
|
|
2737
|
+
!Array.isArray(value) &&
|
|
2738
|
+
this.translationService.isValidMultiLanguageObject(value)) {
|
|
2739
|
+
return this.translationService.resolve(value);
|
|
2740
|
+
}
|
|
2741
|
+
return String(value);
|
|
2742
|
+
}
|
|
2743
|
+
formatValue(value, format) {
|
|
2744
|
+
if (value == null || value === '') {
|
|
2745
|
+
return '';
|
|
2746
|
+
}
|
|
2747
|
+
if (typeof value !== 'number' || !format?.style) {
|
|
2748
|
+
return String(value);
|
|
2749
|
+
}
|
|
2750
|
+
return new Intl.NumberFormat(undefined, {
|
|
2751
|
+
style: format.style,
|
|
2752
|
+
currency: format.currency,
|
|
2753
|
+
minimumFractionDigits: format.minimumFractionDigits,
|
|
2754
|
+
maximumFractionDigits: format.maximumFractionDigits,
|
|
2755
|
+
}).format(value);
|
|
2756
|
+
}
|
|
2757
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKpiDetailsWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
2758
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPKpiDetailsWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"axp-kpi-details\">\n <div class=\"__title\">{{ localized().title }}</div>\n <div class=\"__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n @if (localized().subtitle) {\n <div class=\"__subtitle\">{{ localized().subtitle }}</div>\n }\n\n <div class=\"__items\">\n @for (item of detailItems(); track trackByLabel($index, item)) {\n <div class=\"__item\">\n <span class=\"__item-label\">{{ item.label }}</span>\n <span class=\"__item-value\" [style.color]=\"item.color || 'rgb(var(--ax-sys-color-on-lightest-surface))'\">{{ item.value }}</span>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.axp-kpi-details{display:flex;flex-direction:column;gap:.55rem;height:100%;padding:.75rem}.axp-kpi-details .__title{font-size:.9rem;font-weight:600;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-details .__value{font-size:clamp(1.45rem,3.5cqw,2.2rem);font-weight:700;color:rgb(var(--ax-sys-color-on-lightest-surface));line-height:1.1}.axp-kpi-details .__subtitle{font-size:.8rem;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-details .__items{margin-top:auto;display:flex;flex-direction:column;gap:.3rem;padding-top:.3rem;border-top:1px solid rgb(var(--ax-sys-color-border-lighter-surface))}.axp-kpi-details .__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.axp-kpi-details .__item-label{font-size:.78rem;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-details .__item-value{font-size:.8rem;font-weight:700;color:rgb(var(--ax-sys-color-on-lightest-surface))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2759
|
+
}
|
|
2760
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKpiDetailsWidgetViewComponent, decorators: [{
|
|
2761
|
+
type: Component,
|
|
2762
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"axp-kpi-details\">\n <div class=\"__title\">{{ localized().title }}</div>\n <div class=\"__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n @if (localized().subtitle) {\n <div class=\"__subtitle\">{{ localized().subtitle }}</div>\n }\n\n <div class=\"__items\">\n @for (item of detailItems(); track trackByLabel($index, item)) {\n <div class=\"__item\">\n <span class=\"__item-label\">{{ item.label }}</span>\n <span class=\"__item-value\" [style.color]=\"item.color || 'rgb(var(--ax-sys-color-on-lightest-surface))'\">{{ item.value }}</span>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.axp-kpi-details{display:flex;flex-direction:column;gap:.55rem;height:100%;padding:.75rem}.axp-kpi-details .__title{font-size:.9rem;font-weight:600;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-details .__value{font-size:clamp(1.45rem,3.5cqw,2.2rem);font-weight:700;color:rgb(var(--ax-sys-color-on-lightest-surface));line-height:1.1}.axp-kpi-details .__subtitle{font-size:.8rem;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-details .__items{margin-top:auto;display:flex;flex-direction:column;gap:.3rem;padding-top:.3rem;border-top:1px solid rgb(var(--ax-sys-color-border-lighter-surface))}.axp-kpi-details .__item{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.axp-kpi-details .__item-label{font-size:.78rem;color:rgb(var(--ax-sys-color-on-light-surface))}.axp-kpi-details .__item-value{font-size:.8rem;font-weight:700;color:rgb(var(--ax-sys-color-on-lightest-surface))}\n"] }]
|
|
2763
|
+
}] });
|
|
2764
|
+
|
|
2765
|
+
var kpiDetailsWidget_component = /*#__PURE__*/Object.freeze({
|
|
2766
|
+
__proto__: null,
|
|
2767
|
+
AXPKpiDetailsWidgetViewComponent: AXPKpiDetailsWidgetViewComponent
|
|
2768
|
+
});
|
|
2769
|
+
|
|
2770
|
+
const AXPKpiDetailsWidget = {
|
|
2771
|
+
name: RootConfig.widgets.kpiDetails,
|
|
2772
|
+
title: '@dashboard:widgets.kpi-details.widget-title',
|
|
2773
|
+
description: '@dashboard:widgets.kpi-details.widget-description',
|
|
2774
|
+
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
2775
|
+
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
2776
|
+
type: 'dashboard',
|
|
2777
|
+
icon: 'fa-light fa-square-list',
|
|
2778
|
+
properties: [
|
|
2779
|
+
AXP_DATA_SOURCE_OPTIONS_PROPERTY,
|
|
2780
|
+
cloneProperty(AXP_NAME_PROPERTY, { visible: false }),
|
|
2781
|
+
cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),
|
|
2782
|
+
{
|
|
2783
|
+
name: 'title',
|
|
2784
|
+
title: '@dashboard:widgets.kpi-details.title',
|
|
2785
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2786
|
+
schema: {
|
|
2787
|
+
defaultValue: '',
|
|
2788
|
+
dataType: 'string',
|
|
2789
|
+
interface: {
|
|
2790
|
+
name: 'title',
|
|
2791
|
+
path: 'options.title',
|
|
2792
|
+
type: AXPWidgetsCatalog.text,
|
|
2793
|
+
},
|
|
2794
|
+
},
|
|
2795
|
+
visible: true,
|
|
2796
|
+
},
|
|
2797
|
+
{
|
|
2798
|
+
name: 'value',
|
|
2799
|
+
title: '@dashboard:widgets.kpi-details.value',
|
|
2800
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2801
|
+
schema: {
|
|
2802
|
+
defaultValue: 0,
|
|
2803
|
+
dataType: 'number',
|
|
2804
|
+
interface: {
|
|
2805
|
+
name: 'value',
|
|
2806
|
+
path: 'options.value',
|
|
2807
|
+
type: AXPWidgetsCatalog.number,
|
|
2808
|
+
},
|
|
2809
|
+
},
|
|
2810
|
+
visible: true,
|
|
2811
|
+
},
|
|
2812
|
+
{
|
|
2813
|
+
name: 'subtitle',
|
|
2814
|
+
title: '@dashboard:widgets.kpi-details.subtitle',
|
|
2815
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2816
|
+
schema: {
|
|
2817
|
+
defaultValue: '',
|
|
2818
|
+
dataType: 'string',
|
|
2819
|
+
interface: {
|
|
2820
|
+
name: 'subtitle',
|
|
2821
|
+
path: 'options.subtitle',
|
|
2822
|
+
type: AXPWidgetsCatalog.text,
|
|
2823
|
+
},
|
|
2824
|
+
},
|
|
2825
|
+
visible: true,
|
|
2826
|
+
},
|
|
2827
|
+
],
|
|
2828
|
+
components: {
|
|
2829
|
+
view: {
|
|
2830
|
+
component: () => Promise.resolve().then(function () { return kpiDetailsWidget_component; }).then((c) => c.AXPKpiDetailsWidgetViewComponent),
|
|
2831
|
+
},
|
|
2832
|
+
},
|
|
2833
|
+
meta: {
|
|
2834
|
+
title: {
|
|
2835
|
+
visible: false,
|
|
2836
|
+
},
|
|
2837
|
+
dimensions: {
|
|
2838
|
+
lg: {
|
|
2839
|
+
width: 4,
|
|
2840
|
+
height: 4,
|
|
2841
|
+
minWidth: 3,
|
|
2842
|
+
minHeight: 2,
|
|
2843
|
+
},
|
|
2844
|
+
md: {
|
|
2845
|
+
width: 4,
|
|
2846
|
+
height: 3,
|
|
2847
|
+
minWidth: 3,
|
|
2848
|
+
minHeight: 2,
|
|
2849
|
+
},
|
|
2850
|
+
sm: {
|
|
2851
|
+
height: 3,
|
|
2852
|
+
minHeight: 2,
|
|
2853
|
+
},
|
|
2854
|
+
},
|
|
2855
|
+
},
|
|
2856
|
+
};
|
|
2857
|
+
|
|
2858
|
+
const ICON_TONE_OPTIONS = ['primary', 'secondary', 'success', 'warning', 'info', 'danger'];
|
|
2859
|
+
const TREND_STATUS_OPTIONS = ['success', 'danger', 'neutral'];
|
|
2860
|
+
const TITLE_BADGE_TONE_OPTIONS = ['primary', 'secondary', 'warning', 'info', 'neutral'];
|
|
2861
|
+
const AXPKpiStatCardWidget = {
|
|
2862
|
+
name: RootConfig.widgets.kpiStatCard,
|
|
2863
|
+
title: '@dashboard:widgets.kpi-stat-card.widget-title',
|
|
2864
|
+
description: '@dashboard:widgets.kpi-stat-card.widget-description',
|
|
2865
|
+
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
2866
|
+
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
2867
|
+
type: 'dashboard',
|
|
2868
|
+
icon: 'fa-light fa-gauge-high',
|
|
2869
|
+
properties: [
|
|
2870
|
+
AXP_DATA_SOURCE_OPTIONS_PROPERTY,
|
|
2871
|
+
cloneProperty(AXP_NAME_PROPERTY, { visible: false }),
|
|
2872
|
+
cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),
|
|
2873
|
+
{
|
|
2874
|
+
name: 'title',
|
|
2875
|
+
title: '@dashboard:widgets.kpi-stat-card.title',
|
|
2876
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2877
|
+
schema: {
|
|
2878
|
+
defaultValue: '',
|
|
2879
|
+
dataType: 'string',
|
|
2880
|
+
interface: {
|
|
2881
|
+
name: 'title',
|
|
2882
|
+
path: 'options.title',
|
|
2883
|
+
type: AXPWidgetsCatalog.text,
|
|
2884
|
+
},
|
|
2885
|
+
},
|
|
2886
|
+
visible: true,
|
|
2887
|
+
},
|
|
2888
|
+
{
|
|
2889
|
+
name: 'titleBadgeText',
|
|
2890
|
+
title: '@dashboard:widgets.kpi-stat-card.title-badge-text',
|
|
2891
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2892
|
+
schema: {
|
|
2893
|
+
defaultValue: '',
|
|
2894
|
+
dataType: 'string',
|
|
2895
|
+
interface: {
|
|
2896
|
+
name: 'titleBadgeText',
|
|
2897
|
+
path: 'options.titleBadgeText',
|
|
2898
|
+
type: AXPWidgetsCatalog.text,
|
|
2899
|
+
},
|
|
2900
|
+
},
|
|
2901
|
+
visible: true,
|
|
2902
|
+
},
|
|
2903
|
+
{
|
|
2904
|
+
name: 'titleBadgeTone',
|
|
2905
|
+
title: '@dashboard:widgets.kpi-stat-card.title-badge-tone',
|
|
2906
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2907
|
+
schema: {
|
|
2908
|
+
defaultValue: 'warning',
|
|
2909
|
+
dataType: 'string',
|
|
2910
|
+
interface: {
|
|
2911
|
+
name: 'titleBadgeTone',
|
|
2912
|
+
path: 'options.titleBadgeTone',
|
|
2913
|
+
type: AXPWidgetsCatalog.select,
|
|
2914
|
+
options: { dataSource: TITLE_BADGE_TONE_OPTIONS },
|
|
2915
|
+
},
|
|
2916
|
+
},
|
|
2917
|
+
visible: true,
|
|
2918
|
+
},
|
|
2919
|
+
{
|
|
2920
|
+
name: 'value',
|
|
2921
|
+
title: '@dashboard:widgets.kpi-stat-card.value',
|
|
2922
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2923
|
+
schema: {
|
|
2924
|
+
defaultValue: 0,
|
|
2925
|
+
dataType: 'number',
|
|
2926
|
+
interface: {
|
|
2927
|
+
name: 'value',
|
|
2928
|
+
path: 'options.value',
|
|
2929
|
+
type: AXPWidgetsCatalog.number,
|
|
2930
|
+
},
|
|
2931
|
+
},
|
|
2932
|
+
visible: true,
|
|
2933
|
+
},
|
|
2934
|
+
{
|
|
2935
|
+
name: 'valuePrefix',
|
|
2936
|
+
title: '@dashboard:widgets.kpi-stat-card.value-prefix',
|
|
2937
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2938
|
+
schema: {
|
|
2939
|
+
defaultValue: '',
|
|
2940
|
+
dataType: 'string',
|
|
2941
|
+
interface: {
|
|
2942
|
+
name: 'valuePrefix',
|
|
2943
|
+
path: 'options.valuePrefix',
|
|
2944
|
+
type: AXPWidgetsCatalog.text,
|
|
2945
|
+
},
|
|
2946
|
+
},
|
|
2947
|
+
visible: true,
|
|
2948
|
+
},
|
|
2949
|
+
{
|
|
2950
|
+
name: 'valueSuffix',
|
|
2951
|
+
title: '@dashboard:widgets.kpi-stat-card.value-suffix',
|
|
2952
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2953
|
+
schema: {
|
|
2954
|
+
defaultValue: '',
|
|
2955
|
+
dataType: 'string',
|
|
2956
|
+
interface: {
|
|
2957
|
+
name: 'valueSuffix',
|
|
2958
|
+
path: 'options.valueSuffix',
|
|
2959
|
+
type: AXPWidgetsCatalog.text,
|
|
2960
|
+
},
|
|
2961
|
+
},
|
|
2962
|
+
visible: true,
|
|
2963
|
+
},
|
|
2964
|
+
{
|
|
2965
|
+
name: 'trendValue',
|
|
2966
|
+
title: '@dashboard:widgets.kpi-stat-card.trend-value',
|
|
2967
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2968
|
+
schema: {
|
|
2969
|
+
defaultValue: '',
|
|
2970
|
+
dataType: 'string',
|
|
2971
|
+
interface: {
|
|
2972
|
+
name: 'trendValue',
|
|
2973
|
+
path: 'options.trendValue',
|
|
2974
|
+
type: AXPWidgetsCatalog.text,
|
|
2975
|
+
},
|
|
2976
|
+
},
|
|
2977
|
+
visible: true,
|
|
2978
|
+
},
|
|
2979
|
+
{
|
|
2980
|
+
name: 'trendLabel',
|
|
2981
|
+
title: '@dashboard:widgets.kpi-stat-card.trend-label',
|
|
2982
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2983
|
+
schema: {
|
|
2984
|
+
defaultValue: '',
|
|
2985
|
+
dataType: 'string',
|
|
2986
|
+
interface: {
|
|
2987
|
+
name: 'trendLabel',
|
|
2988
|
+
path: 'options.trendLabel',
|
|
2989
|
+
type: AXPWidgetsCatalog.text,
|
|
2990
|
+
},
|
|
2991
|
+
},
|
|
2992
|
+
visible: true,
|
|
2993
|
+
},
|
|
2994
|
+
{
|
|
2995
|
+
name: 'trendStatus',
|
|
2996
|
+
title: '@dashboard:widgets.kpi-stat-card.trend-status',
|
|
2997
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2998
|
+
schema: {
|
|
2999
|
+
defaultValue: 'neutral',
|
|
3000
|
+
dataType: 'string',
|
|
3001
|
+
interface: {
|
|
3002
|
+
name: 'trendStatus',
|
|
3003
|
+
path: 'options.trendStatus',
|
|
3004
|
+
type: AXPWidgetsCatalog.select,
|
|
3005
|
+
options: { dataSource: TREND_STATUS_OPTIONS },
|
|
3006
|
+
},
|
|
3007
|
+
},
|
|
3008
|
+
visible: true,
|
|
3009
|
+
},
|
|
3010
|
+
{
|
|
3011
|
+
name: 'icon',
|
|
3012
|
+
title: '@dashboard:widgets.kpi-stat-card.icon',
|
|
3013
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
3014
|
+
schema: {
|
|
3015
|
+
defaultValue: 'fa-light fa-chart-line',
|
|
3016
|
+
dataType: 'string',
|
|
3017
|
+
interface: {
|
|
3018
|
+
name: 'icon',
|
|
3019
|
+
path: 'options.icon',
|
|
3020
|
+
type: AXPWidgetsCatalog.text,
|
|
3021
|
+
},
|
|
3022
|
+
},
|
|
3023
|
+
visible: true,
|
|
3024
|
+
},
|
|
3025
|
+
{
|
|
3026
|
+
name: 'iconTone',
|
|
3027
|
+
title: '@dashboard:widgets.kpi-stat-card.icon-tone',
|
|
3028
|
+
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
3029
|
+
schema: {
|
|
3030
|
+
defaultValue: 'primary',
|
|
3031
|
+
dataType: 'string',
|
|
3032
|
+
interface: {
|
|
3033
|
+
name: 'iconTone',
|
|
3034
|
+
path: 'options.iconTone',
|
|
3035
|
+
type: AXPWidgetsCatalog.select,
|
|
3036
|
+
options: { dataSource: ICON_TONE_OPTIONS },
|
|
3037
|
+
},
|
|
3038
|
+
},
|
|
3039
|
+
visible: true,
|
|
3040
|
+
},
|
|
3041
|
+
],
|
|
3042
|
+
components: {
|
|
3043
|
+
view: {
|
|
3044
|
+
component: () => Promise.resolve().then(function () { return kpiStatCardWidget_component; }).then((c) => c.AXPKpiStatCardWidgetViewComponent),
|
|
3045
|
+
},
|
|
3046
|
+
},
|
|
3047
|
+
meta: {
|
|
3048
|
+
title: { visible: false },
|
|
3049
|
+
dimensions: {
|
|
3050
|
+
lg: { width: 3, height: 3, minWidth: 2, minHeight: 2 },
|
|
3051
|
+
md: { width: 3, height: 3, minWidth: 2, minHeight: 2 },
|
|
3052
|
+
sm: { height: 3, minHeight: 2 },
|
|
3053
|
+
},
|
|
3054
|
+
},
|
|
3055
|
+
};
|
|
3056
|
+
|
|
3057
|
+
//#endregion
|
|
3058
|
+
class AXPKpiStatCardWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
3059
|
+
constructor() {
|
|
3060
|
+
super(...arguments);
|
|
3061
|
+
//#region ---- Services & Dependencies ----
|
|
3062
|
+
this.dataService = inject(AXPDataSourceDefinitionProviderService);
|
|
3063
|
+
this.translationService = inject(AXTranslationService);
|
|
3064
|
+
//#endregion
|
|
3065
|
+
//#region ---- State ----
|
|
3066
|
+
this.model = signal({
|
|
3067
|
+
title: 'KPI',
|
|
3068
|
+
value: 0,
|
|
3069
|
+
trendStatus: 'neutral',
|
|
3070
|
+
icon: 'fa-light fa-chart-line',
|
|
3071
|
+
iconTone: 'primary',
|
|
2216
3072
|
}, ...(ngDevMode ? [{ debugName: "model" }] : /* istanbul ignore next */ []));
|
|
2217
3073
|
this.localized = signal({
|
|
2218
|
-
title: '
|
|
2219
|
-
subtitle: '',
|
|
3074
|
+
title: '',
|
|
2220
3075
|
valuePrefix: '',
|
|
2221
3076
|
valueSuffix: '',
|
|
3077
|
+
titleBadgeText: '',
|
|
3078
|
+
trendValue: '',
|
|
3079
|
+
trendLabel: '',
|
|
2222
3080
|
}, ...(ngDevMode ? [{ debugName: "localized" }] : /* istanbul ignore next */ []));
|
|
2223
|
-
this.detailItems = signal([], ...(ngDevMode ? [{ debugName: "detailItems" }] : /* istanbul ignore next */ []));
|
|
2224
3081
|
this.dataSource = computed(() => this.options()['dataSource'], ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
3082
|
+
//#endregion
|
|
3083
|
+
//#region ---- Computed ----
|
|
2225
3084
|
this.formattedValue = computed(() => this.formatValue(this.model().value, this.model().format), ...(ngDevMode ? [{ debugName: "formattedValue" }] : /* istanbul ignore next */ []));
|
|
3085
|
+
this.iconClass = computed(() => this.model().icon || 'fa-light fa-chart-line', ...(ngDevMode ? [{ debugName: "iconClass" }] : /* istanbul ignore next */ []));
|
|
3086
|
+
this.iconHostClasses = computed(() => {
|
|
3087
|
+
const tone = (this.model().iconTone ?? 'primary');
|
|
3088
|
+
return {
|
|
3089
|
+
'axp-kpi-stat-card__icon-box': true,
|
|
3090
|
+
'axp-kpi-stat-card__icon-box--primary': tone === 'primary',
|
|
3091
|
+
'axp-kpi-stat-card__icon-box--secondary': tone === 'secondary',
|
|
3092
|
+
'axp-kpi-stat-card__icon-box--success': tone === 'success',
|
|
3093
|
+
'axp-kpi-stat-card__icon-box--warning': tone === 'warning',
|
|
3094
|
+
'axp-kpi-stat-card__icon-box--info': tone === 'info',
|
|
3095
|
+
'axp-kpi-stat-card__icon-box--danger': tone === 'danger',
|
|
3096
|
+
};
|
|
3097
|
+
}, ...(ngDevMode ? [{ debugName: "iconHostClasses" }] : /* istanbul ignore next */ []));
|
|
3098
|
+
this.titleBadgeClasses = computed(() => {
|
|
3099
|
+
const raw = this.model();
|
|
3100
|
+
const tone = (raw.titleBadgeTone ?? raw.titleBadge?.tone ?? 'warning');
|
|
3101
|
+
return {
|
|
3102
|
+
'axp-kpi-stat-card__title-badge': true,
|
|
3103
|
+
'axp-kpi-stat-card__title-badge--primary': tone === 'primary',
|
|
3104
|
+
'axp-kpi-stat-card__title-badge--secondary': tone === 'secondary',
|
|
3105
|
+
'axp-kpi-stat-card__title-badge--warning': tone === 'warning',
|
|
3106
|
+
'axp-kpi-stat-card__title-badge--info': tone === 'info',
|
|
3107
|
+
'axp-kpi-stat-card__title-badge--neutral': tone === 'neutral',
|
|
3108
|
+
};
|
|
3109
|
+
}, ...(ngDevMode ? [{ debugName: "titleBadgeClasses" }] : /* istanbul ignore next */ []));
|
|
3110
|
+
this.trendPillClasses = computed(() => {
|
|
3111
|
+
const s = (this.model().trendStatus ?? 'neutral');
|
|
3112
|
+
return {
|
|
3113
|
+
'axp-kpi-stat-card__trend-pill': true,
|
|
3114
|
+
'axp-kpi-stat-card__trend-pill--success': s === 'success',
|
|
3115
|
+
'axp-kpi-stat-card__trend-pill--danger': s === 'danger',
|
|
3116
|
+
'axp-kpi-stat-card__trend-pill--neutral': s === 'neutral',
|
|
3117
|
+
};
|
|
3118
|
+
}, ...(ngDevMode ? [{ debugName: "trendPillClasses" }] : /* istanbul ignore next */ []));
|
|
3119
|
+
//#endregion
|
|
3120
|
+
//#region ---- Effects ----
|
|
2226
3121
|
this.optionsEffect = effect(() => {
|
|
2227
3122
|
const raw = this.options();
|
|
2228
|
-
this.model.update((current) => (
|
|
3123
|
+
this.model.update((current) => this.applyPatch(current, raw));
|
|
2229
3124
|
}, ...(ngDevMode ? [{ debugName: "optionsEffect" }] : /* istanbul ignore next */ []));
|
|
2230
3125
|
this.localizationEffect = effect(() => {
|
|
2231
|
-
const
|
|
3126
|
+
const m = this.model();
|
|
3127
|
+
const badgeFromNested = m.titleBadge?.text;
|
|
3128
|
+
const badgeFlat = m.titleBadgeText;
|
|
3129
|
+
const badgeText = badgeFromNested ?? badgeFlat;
|
|
2232
3130
|
void Promise.all([
|
|
2233
|
-
this.resolveText(
|
|
2234
|
-
this.resolveText(
|
|
2235
|
-
this.resolveText(
|
|
2236
|
-
this.resolveText(
|
|
2237
|
-
this.
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
this.
|
|
3131
|
+
this.resolveText(m.title),
|
|
3132
|
+
this.resolveText(m.valuePrefix),
|
|
3133
|
+
this.resolveText(m.valueSuffix),
|
|
3134
|
+
this.resolveText(badgeText),
|
|
3135
|
+
this.resolveText(m.trendValue),
|
|
3136
|
+
this.resolveText(m.trendLabel),
|
|
3137
|
+
]).then(([title, valuePrefix, valueSuffix, titleBadgeText, trendValue, trendLabel]) => {
|
|
3138
|
+
this.localized.set({ title, valuePrefix, valueSuffix, titleBadgeText, trendValue, trendLabel });
|
|
2241
3139
|
});
|
|
2242
3140
|
}, ...(ngDevMode ? [{ debugName: "localizationEffect" }] : /* istanbul ignore next */ []));
|
|
2243
3141
|
this.dataLoadEffect = effect(async () => {
|
|
@@ -2252,18 +3150,29 @@ class AXPKpiDetailsWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
2252
3150
|
const source = result.source();
|
|
2253
3151
|
const page = await source.config.load({ take: 1, skip: 0, sort: [] });
|
|
2254
3152
|
const item = (page.items?.[0] ?? {});
|
|
2255
|
-
this.model.update((current) => (
|
|
3153
|
+
this.model.update((current) => this.applyPatch(current, item));
|
|
2256
3154
|
}, ...(ngDevMode ? [{ debugName: "dataLoadEffect" }] : /* istanbul ignore next */ []));
|
|
2257
3155
|
}
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
3156
|
+
//#endregion
|
|
3157
|
+
//#region ---- Helpers ----
|
|
3158
|
+
applyPatch(current, raw) {
|
|
3159
|
+
const next = { ...current, ...raw };
|
|
3160
|
+
if (raw.titleBadge && typeof raw.titleBadge === 'object') {
|
|
3161
|
+
next.titleBadgeText = raw.titleBadge.text;
|
|
3162
|
+
if (raw.titleBadge.tone != null) {
|
|
3163
|
+
next.titleBadgeTone = raw.titleBadge.tone;
|
|
3164
|
+
}
|
|
3165
|
+
}
|
|
3166
|
+
if (next.trendStatus == null) {
|
|
3167
|
+
next.trendStatus = 'neutral';
|
|
3168
|
+
}
|
|
3169
|
+
if (next.iconTone == null) {
|
|
3170
|
+
next.iconTone = 'primary';
|
|
3171
|
+
}
|
|
3172
|
+
if (!next.icon) {
|
|
3173
|
+
next.icon = 'fa-light fa-chart-line';
|
|
3174
|
+
}
|
|
3175
|
+
return next;
|
|
2267
3176
|
}
|
|
2268
3177
|
async resolveText(value) {
|
|
2269
3178
|
if (value == null) {
|
|
@@ -2272,8 +3181,10 @@ class AXPKpiDetailsWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
2272
3181
|
if (typeof value === 'string') {
|
|
2273
3182
|
return value.startsWith('@') ? this.translationService.translateAsync(value) : value;
|
|
2274
3183
|
}
|
|
2275
|
-
if (typeof value === 'object' &&
|
|
2276
|
-
|
|
3184
|
+
if (typeof value === 'object' &&
|
|
3185
|
+
!Array.isArray(value) &&
|
|
3186
|
+
this.translationService.isValidMultiLanguageObject(value)) {
|
|
3187
|
+
return this.translationService.resolve(value);
|
|
2277
3188
|
}
|
|
2278
3189
|
return String(value);
|
|
2279
3190
|
}
|
|
@@ -2281,6 +3192,9 @@ class AXPKpiDetailsWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
2281
3192
|
if (value == null || value === '') {
|
|
2282
3193
|
return '';
|
|
2283
3194
|
}
|
|
3195
|
+
if (typeof value === 'string') {
|
|
3196
|
+
return value;
|
|
3197
|
+
}
|
|
2284
3198
|
if (typeof value !== 'number' || !format?.style) {
|
|
2285
3199
|
return String(value);
|
|
2286
3200
|
}
|
|
@@ -2291,103 +3205,19 @@ class AXPKpiDetailsWidgetViewComponent extends AXPBaseWidgetComponent {
|
|
|
2291
3205
|
maximumFractionDigits: format.maximumFractionDigits,
|
|
2292
3206
|
}).format(value);
|
|
2293
3207
|
}
|
|
2294
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type:
|
|
2295
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type:
|
|
3208
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKpiStatCardWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
3209
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPKpiStatCardWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"axp-kpi-stat-card\">\n <div class=\"axp-kpi-stat-card__content\">\n <div class=\"axp-kpi-stat-card__head\">\n <div class=\"axp-kpi-stat-card__title-row\">\n <span class=\"axp-kpi-stat-card__title\">{{ localized().title }}</span>\n @if (localized().titleBadgeText) {\n <span [class]=\"titleBadgeClasses()\">\n {{ localized().titleBadgeText }}\n </span>\n }\n </div>\n <div [class]=\"iconHostClasses()\" role=\"img\" [attr.aria-label]=\"localized().title\">\n <i [class]=\"iconClass()\" aria-hidden=\"true\"></i>\n </div>\n </div>\n\n <div class=\"axp-kpi-stat-card__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n\n @if (localized().trendValue || localized().trendLabel) {\n <div class=\"axp-kpi-stat-card__trend\">\n <p class=\"axp-kpi-stat-card__trend-line\">\n @if (localized().trendValue) {\n <span [class]=\"trendPillClasses()\">\n {{ localized().trendValue }}\n </span>\n }\n @if (localized().trendLabel) {\n <span class=\"axp-kpi-stat-card__trend-label\">{{ localized().trendLabel }}</span>\n }\n </p>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0px;width:100%;-webkit-font-smoothing:antialiased;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-kpi-stat-card{container-type:inline-size;container-name:kpi-stat;display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;align-items:stretch;justify-content:center;box-sizing:border-box;padding:.75rem .875rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));border-radius:.5rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.axp-kpi-stat-card__content{display:flex;width:100%;flex-direction:column;align-items:stretch;gap:.375rem}.axp-kpi-stat-card__head{display:flex;flex:none;align-items:flex-start;justify-content:space-between;column-gap:.875rem;row-gap:.375rem}.axp-kpi-stat-card__title-row{display:flex;min-width:0px;flex:1 1 0%;flex-wrap:wrap;align-items:center;column-gap:.375rem;row-gap:.25rem;padding-top:1px}.axp-kpi-stat-card__title{font-size:.75rem;line-height:1rem;font-weight:600;line-height:1.375;letter-spacing:.025em;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1))}.axp-kpi-stat-card__title-badge{box-sizing:border-box;display:inline-flex;align-items:center;min-height:1.25rem;border-radius:.375rem;padding:.25rem .625rem;font-size:.65rem;font-weight:800;text-transform:uppercase;line-height:1;letter-spacing:.1em;border-width:1px;border-style:solid}.axp-kpi-stat-card__title-badge--primary{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-200),var(--tw-border-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-800),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface))}.axp-kpi-stat-card__title-badge--secondary{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1))}.axp-kpi-stat-card__title-badge--warning{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-warning-200),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-50),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axp-kpi-stat-card__title-badge--info{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-200),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-800),var(--tw-text-opacity, 1))}.axp-kpi-stat-card__title-badge--neutral{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface));--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axp-kpi-stat-card__icon-box{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:.5rem;font-size:1rem;line-height:1.5rem;line-height:1}.axp-kpi-stat-card__icon-box--primary{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-700),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface));border-width:1px;border-color:rgba(var(--ax-sys-color-primary-200),.5)}.axp-kpi-stat-card__icon-box--secondary{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface));border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1))}.axp-kpi-stat-card__icon-box--success{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-50),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-success-700),var(--tw-text-opacity, 1));border-width:1px;border-color:rgba(var(--ax-sys-color-success-200),.8)}.axp-kpi-stat-card__icon-box--warning{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-50),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-700),var(--tw-text-opacity, 1));border-width:1px;border-color:rgba(var(--ax-sys-color-warning-200),.8)}.axp-kpi-stat-card__icon-box--info{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-700),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-light-surface));color:rgb(var(--ax-sys-color-on-primary-light-surface));border-color:rgb(var(--ax-sys-color-border-primary-light-surface));border-width:1px;border-color:rgba(var(--ax-sys-color-primary-200),.7)}.axp-kpi-stat-card__icon-box--danger{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1));border-width:1px;border-color:#fecacacc}.axp-kpi-stat-card__value{margin:0;min-height:0px;flex:none;padding:0;text-align:start;font-weight:700;line-height:1.25;letter-spacing:-.025em;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1));--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);font-size:clamp(1.5rem,2.2cqw + 1rem,1.875rem)}.axp-kpi-stat-card__trend{margin:0;width:100%;flex:none;padding:0}.axp-kpi-stat-card__trend-line{margin:0;max-width:100%;padding:0;line-height:1.45}.axp-kpi-stat-card__trend-pill{box-sizing:border-box;display:inline-flex;align-items:center;vertical-align:middle;margin-inline-end:.375rem;margin-bottom:1px;min-height:1.4rem;border-radius:.375rem;padding:.25rem .625rem;font-size:.75rem;line-height:1rem;font-weight:700;line-height:1.25;border-width:1px;border-style:solid;--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.axp-kpi-stat-card__trend-pill--success{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-50),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-success-800),var(--tw-text-opacity, 1));border-color:rgba(var(--ax-sys-color-success-200),.9)}.axp-kpi-stat-card__trend-pill--danger{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1));border-color:#fecacae6}.axp-kpi-stat-card__trend-pill--neutral{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface));--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1))}.axp-kpi-stat-card__trend-label{display:inline;font-size:.6875rem;font-weight:500;line-height:1.375;letter-spacing:.025em;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2296
3210
|
}
|
|
2297
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type:
|
|
3211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPKpiStatCardWidgetViewComponent, decorators: [{
|
|
2298
3212
|
type: Component,
|
|
2299
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"kpi-
|
|
3213
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"axp-kpi-stat-card\">\n <div class=\"axp-kpi-stat-card__content\">\n <div class=\"axp-kpi-stat-card__head\">\n <div class=\"axp-kpi-stat-card__title-row\">\n <span class=\"axp-kpi-stat-card__title\">{{ localized().title }}</span>\n @if (localized().titleBadgeText) {\n <span [class]=\"titleBadgeClasses()\">\n {{ localized().titleBadgeText }}\n </span>\n }\n </div>\n <div [class]=\"iconHostClasses()\" role=\"img\" [attr.aria-label]=\"localized().title\">\n <i [class]=\"iconClass()\" aria-hidden=\"true\"></i>\n </div>\n </div>\n\n <div class=\"axp-kpi-stat-card__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n\n @if (localized().trendValue || localized().trendLabel) {\n <div class=\"axp-kpi-stat-card__trend\">\n <p class=\"axp-kpi-stat-card__trend-line\">\n @if (localized().trendValue) {\n <span [class]=\"trendPillClasses()\">\n {{ localized().trendValue }}\n </span>\n }\n @if (localized().trendLabel) {\n <span class=\"axp-kpi-stat-card__trend-label\">{{ localized().trendLabel }}</span>\n }\n </p>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0px;width:100%;-webkit-font-smoothing:antialiased;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-kpi-stat-card{container-type:inline-size;container-name:kpi-stat;display:flex;height:100%;min-height:0px;width:100%;flex-direction:column;align-items:stretch;justify-content:center;box-sizing:border-box;padding:.75rem .875rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));border-radius:.5rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.axp-kpi-stat-card__content{display:flex;width:100%;flex-direction:column;align-items:stretch;gap:.375rem}.axp-kpi-stat-card__head{display:flex;flex:none;align-items:flex-start;justify-content:space-between;column-gap:.875rem;row-gap:.375rem}.axp-kpi-stat-card__title-row{display:flex;min-width:0px;flex:1 1 0%;flex-wrap:wrap;align-items:center;column-gap:.375rem;row-gap:.25rem;padding-top:1px}.axp-kpi-stat-card__title{font-size:.75rem;line-height:1rem;font-weight:600;line-height:1.375;letter-spacing:.025em;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1))}.axp-kpi-stat-card__title-badge{box-sizing:border-box;display:inline-flex;align-items:center;min-height:1.25rem;border-radius:.375rem;padding:.25rem .625rem;font-size:.65rem;font-weight:800;text-transform:uppercase;line-height:1;letter-spacing:.1em;border-width:1px;border-style:solid}.axp-kpi-stat-card__title-badge--primary{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-200),var(--tw-border-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-800),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface))}.axp-kpi-stat-card__title-badge--secondary{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1))}.axp-kpi-stat-card__title-badge--warning{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-warning-200),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-50),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axp-kpi-stat-card__title-badge--info{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-200),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-800),var(--tw-text-opacity, 1))}.axp-kpi-stat-card__title-badge--neutral{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface));--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axp-kpi-stat-card__icon-box{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:.5rem;font-size:1rem;line-height:1.5rem;line-height:1}.axp-kpi-stat-card__icon-box--primary{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-700),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface));border-width:1px;border-color:rgba(var(--ax-sys-color-primary-200),.5)}.axp-kpi-stat-card__icon-box--secondary{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface));border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1))}.axp-kpi-stat-card__icon-box--success{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-50),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-success-700),var(--tw-text-opacity, 1));border-width:1px;border-color:rgba(var(--ax-sys-color-success-200),.8)}.axp-kpi-stat-card__icon-box--warning{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-50),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-700),var(--tw-text-opacity, 1));border-width:1px;border-color:rgba(var(--ax-sys-color-warning-200),.8)}.axp-kpi-stat-card__icon-box--info{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-700),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-light-surface));color:rgb(var(--ax-sys-color-on-primary-light-surface));border-color:rgb(var(--ax-sys-color-border-primary-light-surface));border-width:1px;border-color:rgba(var(--ax-sys-color-primary-200),.7)}.axp-kpi-stat-card__icon-box--danger{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1));border-width:1px;border-color:#fecacacc}.axp-kpi-stat-card__value{margin:0;min-height:0px;flex:none;padding:0;text-align:start;font-weight:700;line-height:1.25;letter-spacing:-.025em;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1));--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);font-size:clamp(1.5rem,2.2cqw + 1rem,1.875rem)}.axp-kpi-stat-card__trend{margin:0;width:100%;flex:none;padding:0}.axp-kpi-stat-card__trend-line{margin:0;max-width:100%;padding:0;line-height:1.45}.axp-kpi-stat-card__trend-pill{box-sizing:border-box;display:inline-flex;align-items:center;vertical-align:middle;margin-inline-end:.375rem;margin-bottom:1px;min-height:1.4rem;border-radius:.375rem;padding:.25rem .625rem;font-size:.75rem;line-height:1rem;font-weight:700;line-height:1.25;border-width:1px;border-style:solid;--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.axp-kpi-stat-card__trend-pill--success{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-50),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-success-800),var(--tw-text-opacity, 1));border-color:rgba(var(--ax-sys-color-success-200),.9)}.axp-kpi-stat-card__trend-pill--danger{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1));border-color:#fecacae6}.axp-kpi-stat-card__trend-pill--neutral{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface));--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1))}.axp-kpi-stat-card__trend-label{display:inline;font-size:.6875rem;font-weight:500;line-height:1.375;letter-spacing:.025em;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}\n"] }]
|
|
2300
3214
|
}] });
|
|
2301
3215
|
|
|
2302
|
-
var
|
|
3216
|
+
var kpiStatCardWidget_component = /*#__PURE__*/Object.freeze({
|
|
2303
3217
|
__proto__: null,
|
|
2304
|
-
|
|
3218
|
+
AXPKpiStatCardWidgetViewComponent: AXPKpiStatCardWidgetViewComponent
|
|
2305
3219
|
});
|
|
2306
3220
|
|
|
2307
|
-
const AXPKpiDetailsWidget = {
|
|
2308
|
-
name: 'kpi-details',
|
|
2309
|
-
title: createMultiLanguageString('KPI + Details', 'شاخص کلیدی + جزئیات'),
|
|
2310
|
-
categories: [AXP_WIDGETS_CHART_CATEGORY],
|
|
2311
|
-
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
2312
|
-
type: 'dashboard',
|
|
2313
|
-
icon: 'fa-light fa-square-list',
|
|
2314
|
-
properties: [
|
|
2315
|
-
AXP_DATA_SOURCE_OPTIONS_PROPERTY,
|
|
2316
|
-
cloneProperty(AXP_NAME_PROPERTY, { visible: false }),
|
|
2317
|
-
cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),
|
|
2318
|
-
{
|
|
2319
|
-
name: 'title',
|
|
2320
|
-
title: '@dashboard:widgets.kpi-details.title',
|
|
2321
|
-
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2322
|
-
schema: {
|
|
2323
|
-
defaultValue: '',
|
|
2324
|
-
dataType: 'string',
|
|
2325
|
-
interface: {
|
|
2326
|
-
name: 'title',
|
|
2327
|
-
path: 'options.title',
|
|
2328
|
-
type: AXPWidgetsCatalog.text,
|
|
2329
|
-
},
|
|
2330
|
-
},
|
|
2331
|
-
visible: true,
|
|
2332
|
-
},
|
|
2333
|
-
{
|
|
2334
|
-
name: 'value',
|
|
2335
|
-
title: '@dashboard:widgets.kpi-details.value',
|
|
2336
|
-
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2337
|
-
schema: {
|
|
2338
|
-
defaultValue: 0,
|
|
2339
|
-
dataType: 'number',
|
|
2340
|
-
interface: {
|
|
2341
|
-
name: 'value',
|
|
2342
|
-
path: 'options.value',
|
|
2343
|
-
type: AXPWidgetsCatalog.number,
|
|
2344
|
-
},
|
|
2345
|
-
},
|
|
2346
|
-
visible: true,
|
|
2347
|
-
},
|
|
2348
|
-
{
|
|
2349
|
-
name: 'subtitle',
|
|
2350
|
-
title: '@dashboard:widgets.kpi-details.subtitle',
|
|
2351
|
-
group: AXP_APPEARANCE_PROPERTY_GROUP,
|
|
2352
|
-
schema: {
|
|
2353
|
-
defaultValue: '',
|
|
2354
|
-
dataType: 'string',
|
|
2355
|
-
interface: {
|
|
2356
|
-
name: 'subtitle',
|
|
2357
|
-
path: 'options.subtitle',
|
|
2358
|
-
type: AXPWidgetsCatalog.text,
|
|
2359
|
-
},
|
|
2360
|
-
},
|
|
2361
|
-
visible: true,
|
|
2362
|
-
},
|
|
2363
|
-
],
|
|
2364
|
-
components: {
|
|
2365
|
-
view: {
|
|
2366
|
-
component: () => Promise.resolve().then(function () { return kpiDetailsWidget_component; }).then((c) => c.AXPKpiDetailsWidgetViewComponent),
|
|
2367
|
-
},
|
|
2368
|
-
},
|
|
2369
|
-
meta: {
|
|
2370
|
-
dimensions: {
|
|
2371
|
-
lg: {
|
|
2372
|
-
width: 4,
|
|
2373
|
-
height: 3,
|
|
2374
|
-
minWidth: 3,
|
|
2375
|
-
minHeight: 2,
|
|
2376
|
-
},
|
|
2377
|
-
md: {
|
|
2378
|
-
width: 4,
|
|
2379
|
-
height: 3,
|
|
2380
|
-
minWidth: 3,
|
|
2381
|
-
minHeight: 2,
|
|
2382
|
-
},
|
|
2383
|
-
sm: {
|
|
2384
|
-
height: 3,
|
|
2385
|
-
minHeight: 2,
|
|
2386
|
-
},
|
|
2387
|
-
},
|
|
2388
|
-
},
|
|
2389
|
-
};
|
|
2390
|
-
|
|
2391
3221
|
/**
|
|
2392
3222
|
* Abstract Weather API Service
|
|
2393
3223
|
* Base class that defines the interface and common functionality
|
|
@@ -3213,11 +4043,11 @@ class AXMAdvancedWeatherViewComponent extends AXPValueWidgetComponent {
|
|
|
3213
4043
|
<!-- No data state (not loading, no error) -->
|
|
3214
4044
|
<div class="axp-weather-no-data-state">
|
|
3215
4045
|
<i class="fa-solid fa-cloud-sun"></i>
|
|
3216
|
-
<p>{{ 'weather.no-data' | translate: { scope: 'dashboard' } | async }}</p>
|
|
4046
|
+
<p>{{ 'weather.no-data.title' | translate: { scope: 'dashboard' } | async }}</p>
|
|
3217
4047
|
<ax-button
|
|
3218
4048
|
[look]="'outline'"
|
|
3219
4049
|
[color]="'secondary'"
|
|
3220
|
-
[text]="'weather.refresh-weather' | translate: { scope: 'dashboard' } | async"
|
|
4050
|
+
[text]="'widgets.weather.refresh-weather' | translate: { scope: 'dashboard' } | async"
|
|
3221
4051
|
(onClick)="loadWeatherData()"
|
|
3222
4052
|
></ax-button>
|
|
3223
4053
|
</div>
|
|
@@ -3354,11 +4184,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
3354
4184
|
<!-- No data state (not loading, no error) -->
|
|
3355
4185
|
<div class="axp-weather-no-data-state">
|
|
3356
4186
|
<i class="fa-solid fa-cloud-sun"></i>
|
|
3357
|
-
<p>{{ 'weather.no-data' | translate: { scope: 'dashboard' } | async }}</p>
|
|
4187
|
+
<p>{{ 'weather.no-data.title' | translate: { scope: 'dashboard' } | async }}</p>
|
|
3358
4188
|
<ax-button
|
|
3359
4189
|
[look]="'outline'"
|
|
3360
4190
|
[color]="'secondary'"
|
|
3361
|
-
[text]="'weather.refresh-weather' | translate: { scope: 'dashboard' } | async"
|
|
4191
|
+
[text]="'widgets.weather.refresh-weather' | translate: { scope: 'dashboard' } | async"
|
|
3362
4192
|
(onClick)="loadWeatherData()"
|
|
3363
4193
|
></ax-button>
|
|
3364
4194
|
</div>
|
|
@@ -3384,8 +4214,9 @@ var advancedWeather_component = /*#__PURE__*/Object.freeze({
|
|
|
3384
4214
|
* Provides customization options for displaying weather data and forecast
|
|
3385
4215
|
*/
|
|
3386
4216
|
const AXPAdvancedWeatherWidget = {
|
|
3387
|
-
name:
|
|
3388
|
-
title: '
|
|
4217
|
+
name: RootConfig.widgets.advancedWeather,
|
|
4218
|
+
title: '@dashboard:widgets.advanced-weather.widget-title',
|
|
4219
|
+
description: '@dashboard:widgets.advanced-weather.widget-description',
|
|
3389
4220
|
categories: [AXP_WIDGETS_UTILITY_CATEGORY],
|
|
3390
4221
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
3391
4222
|
type: 'dashboard',
|
|
@@ -3497,7 +4328,7 @@ const AXPAdvancedWeatherWidget = {
|
|
|
3497
4328
|
},
|
|
3498
4329
|
};
|
|
3499
4330
|
|
|
3500
|
-
class AXMMinimalWeatherViewComponent extends
|
|
4331
|
+
class AXMMinimalWeatherViewComponent extends AXPDashboardWidgetComponent {
|
|
3501
4332
|
constructor() {
|
|
3502
4333
|
super();
|
|
3503
4334
|
this.weatherService = inject(AXPWeatherApiAbstract);
|
|
@@ -3579,152 +4410,16 @@ class AXMMinimalWeatherViewComponent extends AXPValueWidgetComponent {
|
|
|
3579
4410
|
provide: AXPWeatherApiAbstract,
|
|
3580
4411
|
useClass: AXPWeatherApiService,
|
|
3581
4412
|
},
|
|
3582
|
-
], usesInheritance: true, ngImport: i0, template:
|
|
3583
|
-
@if (weatherData() && !isLoading() && !hasError()) {
|
|
3584
|
-
<div
|
|
3585
|
-
class="ax-flex ax-size-full ax-flex-col ax-items-start ax-p-2 ax-justify-evenly weather-container ax-overflow-hidden"
|
|
3586
|
-
[attr.aria-label]="'Current weather for ' + city()"
|
|
3587
|
-
>
|
|
3588
|
-
<div class="weather-top ax-flex ax-justify-around ax-items-center ax-w-full ax-pt-2 ax-gap-2 ax-flex-wrap">
|
|
3589
|
-
<img
|
|
3590
|
-
[src]="getConditionIcon()"
|
|
3591
|
-
class="ax-size-28 ax-object-cover -ax-m-6"
|
|
3592
|
-
[alt]="weatherData()?.current?.condition + ' weather icon'"
|
|
3593
|
-
loading="lazy"
|
|
3594
|
-
/>
|
|
3595
|
-
<div class="temperature ax-flex ax-justify-center ax-items-start">
|
|
3596
|
-
<span class="ax-text-5xl" style="text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3)">
|
|
3597
|
-
{{ getCurrentTemperature() | number: '1.0-0' }}
|
|
3598
|
-
</span>
|
|
3599
|
-
<span>{{ temperatureUnit() }}</span>
|
|
3600
|
-
</div>
|
|
3601
|
-
</div>
|
|
3602
|
-
<div class="ax-text-start ax-ps-6">
|
|
3603
|
-
<div class="ax-mt-1">
|
|
3604
|
-
<span class="ax-font-bold ax-capitalize">{{ city() }}</span>
|
|
3605
|
-
</div>
|
|
3606
|
-
<div class="ax-pt-2 ax-flex ax-gap-4 ax-opacity-75">
|
|
3607
|
-
<span aria-label="High temperature">
|
|
3608
|
-
H: {{ getMaxTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup>
|
|
3609
|
-
</span>
|
|
3610
|
-
<span aria-label="Low temperature">
|
|
3611
|
-
L: {{ getMinTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup>
|
|
3612
|
-
</span>
|
|
3613
|
-
</div>
|
|
3614
|
-
</div>
|
|
3615
|
-
</div>
|
|
3616
|
-
} @else {
|
|
3617
|
-
<div class="ax-flex ax-size-full ax-flex-col ax-p-2 ax-gap-2 ax-justify-center" [attr.aria-busy]="isLoading()">
|
|
3618
|
-
@if (isLoading()) {
|
|
3619
|
-
<!-- Weather icon and temperature skeleton -->
|
|
3620
|
-
<div class="ax-flex ax-items-center ax-w-full ax-pt-2 ax-gap-8">
|
|
3621
|
-
<ax-skeleton class="ax-w-16 ax-h-12 ax-rounded-full"></ax-skeleton>
|
|
3622
|
-
<ax-skeleton class="ax-w-24 ax-h-8 ax-rounded -ax-ms-2"></ax-skeleton>
|
|
3623
|
-
</div>
|
|
3624
|
-
|
|
3625
|
-
<!-- City and temperature range skeleton -->
|
|
3626
|
-
<div class="ax-text-start ax-ps-6 ax-w-full">
|
|
3627
|
-
<div class="ax-mt-1">
|
|
3628
|
-
<ax-skeleton class="ax-w-24 ax-h-6 ax-rounded"></ax-skeleton>
|
|
3629
|
-
</div>
|
|
3630
|
-
<div class="ax-pt-2 ax-flex ax-gap-4">
|
|
3631
|
-
<ax-skeleton class="ax-w-12 ax-h-4 ax-rounded"></ax-skeleton>
|
|
3632
|
-
<ax-skeleton class="ax-w-12 ax-h-4 ax-rounded"></ax-skeleton>
|
|
3633
|
-
</div>
|
|
3634
|
-
</div>
|
|
3635
|
-
} @else if (hasError()) {
|
|
3636
|
-
<!-- No data state (not loading, no error) -->
|
|
3637
|
-
<div class="ax-flex ax-flex-col ax-gap-2 ax-justify-center ax-items-center ax-h-full ax-p-8">
|
|
3638
|
-
<i class="ax-text-3xl fa-solid fa-cloud-sun"></i>
|
|
3639
|
-
<p class="ax-text-sm">{{ 'weather.no-data' | translate: { scope: 'dashboard' } | async }}</p>
|
|
3640
|
-
<ax-button
|
|
3641
|
-
[look]="'outline'"
|
|
3642
|
-
[color]="'secondary'"
|
|
3643
|
-
[text]="'weather.refresh-weather' | translate: { scope: 'dashboard' } | async"
|
|
3644
|
-
(onClick)="loadWeatherData()"
|
|
3645
|
-
></ax-button>
|
|
3646
|
-
</div>
|
|
3647
|
-
}
|
|
3648
|
-
</div>
|
|
3649
|
-
}
|
|
3650
|
-
`, isInline: true, styles: [":host{width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4413
|
+
], usesInheritance: true, ngImport: i0, template: "@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 ax-minimal-weather-temp-shadow\">\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 <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 <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 <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", styles: [":host{width:100%;height:100%}.ax-minimal-weather-temp-shadow{text-shadow:1px 1px 3px rgba(0,0,0,.3)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3651
4414
|
}
|
|
3652
4415
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMMinimalWeatherViewComponent, decorators: [{
|
|
3653
4416
|
type: Component,
|
|
3654
|
-
args: [{
|
|
3655
|
-
@if (weatherData() && !isLoading() && !hasError()) {
|
|
3656
|
-
<div
|
|
3657
|
-
class="ax-flex ax-size-full ax-flex-col ax-items-start ax-p-2 ax-justify-evenly weather-container ax-overflow-hidden"
|
|
3658
|
-
[attr.aria-label]="'Current weather for ' + city()"
|
|
3659
|
-
>
|
|
3660
|
-
<div class="weather-top ax-flex ax-justify-around ax-items-center ax-w-full ax-pt-2 ax-gap-2 ax-flex-wrap">
|
|
3661
|
-
<img
|
|
3662
|
-
[src]="getConditionIcon()"
|
|
3663
|
-
class="ax-size-28 ax-object-cover -ax-m-6"
|
|
3664
|
-
[alt]="weatherData()?.current?.condition + ' weather icon'"
|
|
3665
|
-
loading="lazy"
|
|
3666
|
-
/>
|
|
3667
|
-
<div class="temperature ax-flex ax-justify-center ax-items-start">
|
|
3668
|
-
<span class="ax-text-5xl" style="text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.3)">
|
|
3669
|
-
{{ getCurrentTemperature() | number: '1.0-0' }}
|
|
3670
|
-
</span>
|
|
3671
|
-
<span>{{ temperatureUnit() }}</span>
|
|
3672
|
-
</div>
|
|
3673
|
-
</div>
|
|
3674
|
-
<div class="ax-text-start ax-ps-6">
|
|
3675
|
-
<div class="ax-mt-1">
|
|
3676
|
-
<span class="ax-font-bold ax-capitalize">{{ city() }}</span>
|
|
3677
|
-
</div>
|
|
3678
|
-
<div class="ax-pt-2 ax-flex ax-gap-4 ax-opacity-75">
|
|
3679
|
-
<span aria-label="High temperature">
|
|
3680
|
-
H: {{ getMaxTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup>
|
|
3681
|
-
</span>
|
|
3682
|
-
<span aria-label="Low temperature">
|
|
3683
|
-
L: {{ getMinTemp() | number: '1.0-0' }}<sup>{{ temperatureUnit() }}</sup>
|
|
3684
|
-
</span>
|
|
3685
|
-
</div>
|
|
3686
|
-
</div>
|
|
3687
|
-
</div>
|
|
3688
|
-
} @else {
|
|
3689
|
-
<div class="ax-flex ax-size-full ax-flex-col ax-p-2 ax-gap-2 ax-justify-center" [attr.aria-busy]="isLoading()">
|
|
3690
|
-
@if (isLoading()) {
|
|
3691
|
-
<!-- Weather icon and temperature skeleton -->
|
|
3692
|
-
<div class="ax-flex ax-items-center ax-w-full ax-pt-2 ax-gap-8">
|
|
3693
|
-
<ax-skeleton class="ax-w-16 ax-h-12 ax-rounded-full"></ax-skeleton>
|
|
3694
|
-
<ax-skeleton class="ax-w-24 ax-h-8 ax-rounded -ax-ms-2"></ax-skeleton>
|
|
3695
|
-
</div>
|
|
3696
|
-
|
|
3697
|
-
<!-- City and temperature range skeleton -->
|
|
3698
|
-
<div class="ax-text-start ax-ps-6 ax-w-full">
|
|
3699
|
-
<div class="ax-mt-1">
|
|
3700
|
-
<ax-skeleton class="ax-w-24 ax-h-6 ax-rounded"></ax-skeleton>
|
|
3701
|
-
</div>
|
|
3702
|
-
<div class="ax-pt-2 ax-flex ax-gap-4">
|
|
3703
|
-
<ax-skeleton class="ax-w-12 ax-h-4 ax-rounded"></ax-skeleton>
|
|
3704
|
-
<ax-skeleton class="ax-w-12 ax-h-4 ax-rounded"></ax-skeleton>
|
|
3705
|
-
</div>
|
|
3706
|
-
</div>
|
|
3707
|
-
} @else if (hasError()) {
|
|
3708
|
-
<!-- No data state (not loading, no error) -->
|
|
3709
|
-
<div class="ax-flex ax-flex-col ax-gap-2 ax-justify-center ax-items-center ax-h-full ax-p-8">
|
|
3710
|
-
<i class="ax-text-3xl fa-solid fa-cloud-sun"></i>
|
|
3711
|
-
<p class="ax-text-sm">{{ 'weather.no-data' | translate: { scope: 'dashboard' } | async }}</p>
|
|
3712
|
-
<ax-button
|
|
3713
|
-
[look]="'outline'"
|
|
3714
|
-
[color]="'secondary'"
|
|
3715
|
-
[text]="'weather.refresh-weather' | translate: { scope: 'dashboard' } | async"
|
|
3716
|
-
(onClick)="loadWeatherData()"
|
|
3717
|
-
></ax-button>
|
|
3718
|
-
</div>
|
|
3719
|
-
}
|
|
3720
|
-
</div>
|
|
3721
|
-
}
|
|
3722
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXDecoratorModule, AXTooltipModule, AXSkeletonModule, AXTranslationModule, AXButtonModule], providers: [
|
|
4417
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXDecoratorModule, AXTooltipModule, AXSkeletonModule, AXTranslationModule, AXButtonModule], providers: [
|
|
3723
4418
|
{
|
|
3724
4419
|
provide: AXPWeatherApiAbstract,
|
|
3725
4420
|
useClass: AXPWeatherApiService,
|
|
3726
4421
|
},
|
|
3727
|
-
], styles: [":host{width:100%;height:100%}\n"] }]
|
|
4422
|
+
], template: "@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 ax-minimal-weather-temp-shadow\">\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 <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 <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 <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", styles: [":host{width:100%;height:100%}.ax-minimal-weather-temp-shadow{text-shadow:1px 1px 3px rgba(0,0,0,.3)}\n"] }]
|
|
3728
4423
|
}], ctorParameters: () => [] });
|
|
3729
4424
|
|
|
3730
4425
|
var minimalWeather_component = /*#__PURE__*/Object.freeze({
|
|
@@ -3737,8 +4432,9 @@ var minimalWeather_component = /*#__PURE__*/Object.freeze({
|
|
|
3737
4432
|
* Provides customization options for displaying weather data and forecast
|
|
3738
4433
|
*/
|
|
3739
4434
|
const AXPMinimalWeatherWidget = {
|
|
3740
|
-
name:
|
|
3741
|
-
title: '
|
|
4435
|
+
name: RootConfig.widgets.minimalWeather,
|
|
4436
|
+
title: '@dashboard:widgets.minimal-weather.widget-title',
|
|
4437
|
+
description: '@dashboard:widgets.minimal-weather.widget-description',
|
|
3742
4438
|
categories: [AXP_WIDGETS_UTILITY_CATEGORY],
|
|
3743
4439
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
3744
4440
|
type: 'dashboard',
|
|
@@ -3815,7 +4511,7 @@ const AXPMinimalWeatherWidget = {
|
|
|
3815
4511
|
* Displays current weather conditions and optional forecast data
|
|
3816
4512
|
* for a specified location with customizable display options.
|
|
3817
4513
|
*/
|
|
3818
|
-
class AXPWeatherWidgetViewComponent extends
|
|
4514
|
+
class AXPWeatherWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
3819
4515
|
/**
|
|
3820
4516
|
* Component constructor
|
|
3821
4517
|
* @param cdr ChangeDetectorRef for triggering view updates
|
|
@@ -3853,14 +4549,10 @@ class AXPWeatherWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
3853
4549
|
this.refreshInterval = computed(() => this.options()['refreshInterval']?.id ?? 15, ...(ngDevMode ? [{ debugName: "refreshInterval" }] : /* istanbul ignore next */ []));
|
|
3854
4550
|
// Reactivity effects
|
|
3855
4551
|
this.optionsEffect = effect(() => {
|
|
3856
|
-
|
|
4552
|
+
this.options();
|
|
3857
4553
|
this.loadWeatherData();
|
|
3858
4554
|
this.setupRefreshTimer();
|
|
3859
4555
|
}, ...(ngDevMode ? [{ debugName: "optionsEffect" }] : /* istanbul ignore next */ []));
|
|
3860
|
-
this.valueEffect = effect(() => {
|
|
3861
|
-
this.city();
|
|
3862
|
-
this.loadWeatherData();
|
|
3863
|
-
}, ...(ngDevMode ? [{ debugName: "valueEffect" }] : /* istanbul ignore next */ []));
|
|
3864
4556
|
this.displayedForecast = computed(() => {
|
|
3865
4557
|
const weatherData = this.weatherData();
|
|
3866
4558
|
if (!weatherData?.forecast)
|
|
@@ -4126,8 +4818,9 @@ var weatherWidget_component = /*#__PURE__*/Object.freeze({
|
|
|
4126
4818
|
* Provides customization options for displaying weather data and forecast
|
|
4127
4819
|
*/
|
|
4128
4820
|
const AXPWeatherWidget = {
|
|
4129
|
-
name:
|
|
4130
|
-
title: '
|
|
4821
|
+
name: RootConfig.widgets.weather,
|
|
4822
|
+
title: '@dashboard:widgets.weather.widget-title',
|
|
4823
|
+
description: '@dashboard:widgets.weather.widget-description',
|
|
4131
4824
|
categories: [AXP_WIDGETS_UTILITY_CATEGORY],
|
|
4132
4825
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
4133
4826
|
type: 'dashboard',
|
|
@@ -4478,92 +5171,14 @@ class AXMAnalogClockComponent {
|
|
|
4478
5171
|
}
|
|
4479
5172
|
}
|
|
4480
5173
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAnalogClockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4481
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAnalogClockComponent, isStandalone: true, selector: "axm-analog-clock", inputs: { timezone: { classPropertyName: "timezone", publicName: "timezone", isSignal: true, isRequired: false, transformFunction: null }, classes: { classPropertyName: "classes", publicName: "classes", isSignal: true, isRequired: false, transformFunction: null }, showNumbers: { classPropertyName: "showNumbers", publicName: "showNumbers", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template:
|
|
4482
|
-
<div class="axm-analog-clock-container">
|
|
4483
|
-
<div class="axm-analog-clock-face" [class]="classes()">
|
|
4484
|
-
<div class="axm-analog-clock-marks-container">
|
|
4485
|
-
@for (line of hourLines; track $index) {
|
|
4486
|
-
<div class="axm-analog-clock-hour-line" [style.transform]="line.transform">
|
|
4487
|
-
<div class="axm-analog-clock-hour-line-inner"></div>
|
|
4488
|
-
</div>
|
|
4489
|
-
}
|
|
4490
|
-
@for (dot of dots; track $index) {
|
|
4491
|
-
<div class="axm-analog-clock-dot-line" [style.transform]="dot.transform">
|
|
4492
|
-
<div class="axm-analog-clock-dot-line-inner"></div>
|
|
4493
|
-
</div>
|
|
4494
|
-
}
|
|
4495
|
-
</div>
|
|
4496
|
-
|
|
4497
|
-
@if (showNumbers()) {
|
|
4498
|
-
<div class="axm-analog-clock-numbers-container">
|
|
4499
|
-
@for (num of hourNumbers; track num.value) {
|
|
4500
|
-
<div class="axm-analog-clock-hour-number" [style.top]="num.top" [style.left]="num.left">
|
|
4501
|
-
{{ num.value }}
|
|
4502
|
-
</div>
|
|
4503
|
-
}
|
|
4504
|
-
</div>
|
|
4505
|
-
}
|
|
4506
|
-
<div class="axm-analog-clock-hands">
|
|
4507
|
-
<div class="axm-analog-clock-hand axm-analog-clock-hour-hand" [style.transform]="hourHandTransform()"></div>
|
|
4508
|
-
<div
|
|
4509
|
-
class="axm-analog-clock-hand axm-analog-clock-minute-hand"
|
|
4510
|
-
[style.transform]="minuteHandTransform()"
|
|
4511
|
-
></div>
|
|
4512
|
-
<div
|
|
4513
|
-
class="axm-analog-clock-hand axm-analog-clock-second-hand"
|
|
4514
|
-
[style.transform]="secondHandTransform()"
|
|
4515
|
-
></div>
|
|
4516
|
-
<div class="axm-analog-clock-center-point"></div>
|
|
4517
|
-
</div>
|
|
4518
|
-
</div>
|
|
4519
|
-
</div>
|
|
4520
|
-
`, isInline: true, styles: [":host{display:grid;width:100%;height:100%;place-items:center}.axm-analog-clock-container{position:relative;max-height:100%;width:100%;aspect-ratio:1;container-type:inline-size}.axm-analog-clock-face{position:relative;height:100%;width:100%;border-radius:9999px}.axm-analog-clock-marks-container,.axm-analog-clock-numbers-container,.axm-analog-clock-hands{position:absolute;inset:0}.axm-analog-clock-hour-line,.axm-analog-clock-dot-line{position:absolute;bottom:50%;left:50%;height:50%;transform-origin:bottom}.axm-analog-clock-hour-line,.axm-analog-clock-dot-line{width:1.8cqw}.axm-analog-clock-hour-line-inner{position:absolute;top:6cqw;left:50%;height:5.5cqw;width:100%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-on-darker-surface),var(--tw-bg-opacity, 1))}.axm-analog-clock-dot-line-inner{position:absolute;top:6cqw;left:50%;height:2cqw;width:1.2cqw;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-on-dark-surface),var(--tw-bg-opacity, 1))}.axm-analog-clock-hour-number{position:absolute;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));font-size:10cqw;font-weight:500;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1))}.axm-analog-clock-hand{position:absolute;bottom:50%;left:50%;transform-origin:bottom;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.axm-analog-clock-hand:after{content:\"\";position:absolute;left:0;width:100%}.axm-analog-clock-hour-hand{z-index:2;height:25%;width:2.7cqw;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.axm-analog-clock-hour-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.axm-analog-clock-minute-hand{z-index:3;height:35%;width:2.1cqw;--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.axm-analog-clock-minute-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.axm-analog-clock-second-hand{z-index:4;height:42%;width:1.5cqw;--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.axm-analog-clock-second-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.axm-analog-clock-center-point{position:absolute;top:50%;left:50%;z-index:5;height:9cqw;width:9cqw;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1.8cqw;--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5174
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAnalogClockComponent, isStandalone: true, selector: "axm-analog-clock", inputs: { timezone: { classPropertyName: "timezone", publicName: "timezone", isSignal: true, isRequired: false, transformFunction: null }, classes: { classPropertyName: "classes", publicName: "classes", isSignal: true, isRequired: false, transformFunction: null }, showNumbers: { classPropertyName: "showNumbers", publicName: "showNumbers", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<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", styles: [":host{display:grid;width:100%;height:100%;place-items:center}.axm-analog-clock-container{position:relative;max-height:100%;width:100%;aspect-ratio:1;container-type:inline-size}.axm-analog-clock-face{position:relative;height:100%;width:100%;border-radius:9999px}.axm-analog-clock-marks-container,.axm-analog-clock-numbers-container,.axm-analog-clock-hands{position:absolute;inset:0}.axm-analog-clock-hour-line,.axm-analog-clock-dot-line{position:absolute;bottom:50%;left:50%;height:50%;transform-origin:bottom}.axm-analog-clock-hour-line,.axm-analog-clock-dot-line{width:1.8cqw}.axm-analog-clock-hour-line-inner{position:absolute;top:6cqw;left:50%;height:5.5cqw;width:100%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-on-darker-surface),var(--tw-bg-opacity, 1))}.axm-analog-clock-dot-line-inner{position:absolute;top:6cqw;left:50%;height:2cqw;width:1.2cqw;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-on-dark-surface),var(--tw-bg-opacity, 1))}.axm-analog-clock-hour-number{position:absolute;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));font-size:10cqw;font-weight:500;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1))}.axm-analog-clock-hand{position:absolute;bottom:50%;left:50%;transform-origin:bottom;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.axm-analog-clock-hand:after{content:\"\";position:absolute;left:0;width:100%}.axm-analog-clock-hour-hand{z-index:2;height:25%;width:2.7cqw;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.axm-analog-clock-hour-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.axm-analog-clock-minute-hand{z-index:3;height:35%;width:2.1cqw;--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.axm-analog-clock-minute-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.axm-analog-clock-second-hand{z-index:4;height:42%;width:1.5cqw;--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.axm-analog-clock-second-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.axm-analog-clock-center-point{position:absolute;top:50%;left:50%;z-index:5;height:9cqw;width:9cqw;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1.8cqw;--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4521
5175
|
}
|
|
4522
5176
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAnalogClockComponent, decorators: [{
|
|
4523
5177
|
type: Component,
|
|
4524
|
-
args: [{ selector: 'axm-analog-clock', standalone: true, imports: [], template:
|
|
4525
|
-
<div class="axm-analog-clock-container">
|
|
4526
|
-
<div class="axm-analog-clock-face" [class]="classes()">
|
|
4527
|
-
<div class="axm-analog-clock-marks-container">
|
|
4528
|
-
@for (line of hourLines; track $index) {
|
|
4529
|
-
<div class="axm-analog-clock-hour-line" [style.transform]="line.transform">
|
|
4530
|
-
<div class="axm-analog-clock-hour-line-inner"></div>
|
|
4531
|
-
</div>
|
|
4532
|
-
}
|
|
4533
|
-
@for (dot of dots; track $index) {
|
|
4534
|
-
<div class="axm-analog-clock-dot-line" [style.transform]="dot.transform">
|
|
4535
|
-
<div class="axm-analog-clock-dot-line-inner"></div>
|
|
4536
|
-
</div>
|
|
4537
|
-
}
|
|
4538
|
-
</div>
|
|
4539
|
-
|
|
4540
|
-
@if (showNumbers()) {
|
|
4541
|
-
<div class="axm-analog-clock-numbers-container">
|
|
4542
|
-
@for (num of hourNumbers; track num.value) {
|
|
4543
|
-
<div class="axm-analog-clock-hour-number" [style.top]="num.top" [style.left]="num.left">
|
|
4544
|
-
{{ num.value }}
|
|
4545
|
-
</div>
|
|
4546
|
-
}
|
|
4547
|
-
</div>
|
|
4548
|
-
}
|
|
4549
|
-
<div class="axm-analog-clock-hands">
|
|
4550
|
-
<div class="axm-analog-clock-hand axm-analog-clock-hour-hand" [style.transform]="hourHandTransform()"></div>
|
|
4551
|
-
<div
|
|
4552
|
-
class="axm-analog-clock-hand axm-analog-clock-minute-hand"
|
|
4553
|
-
[style.transform]="minuteHandTransform()"
|
|
4554
|
-
></div>
|
|
4555
|
-
<div
|
|
4556
|
-
class="axm-analog-clock-hand axm-analog-clock-second-hand"
|
|
4557
|
-
[style.transform]="secondHandTransform()"
|
|
4558
|
-
></div>
|
|
4559
|
-
<div class="axm-analog-clock-center-point"></div>
|
|
4560
|
-
</div>
|
|
4561
|
-
</div>
|
|
4562
|
-
</div>
|
|
4563
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:grid;width:100%;height:100%;place-items:center}.axm-analog-clock-container{position:relative;max-height:100%;width:100%;aspect-ratio:1;container-type:inline-size}.axm-analog-clock-face{position:relative;height:100%;width:100%;border-radius:9999px}.axm-analog-clock-marks-container,.axm-analog-clock-numbers-container,.axm-analog-clock-hands{position:absolute;inset:0}.axm-analog-clock-hour-line,.axm-analog-clock-dot-line{position:absolute;bottom:50%;left:50%;height:50%;transform-origin:bottom}.axm-analog-clock-hour-line,.axm-analog-clock-dot-line{width:1.8cqw}.axm-analog-clock-hour-line-inner{position:absolute;top:6cqw;left:50%;height:5.5cqw;width:100%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-on-darker-surface),var(--tw-bg-opacity, 1))}.axm-analog-clock-dot-line-inner{position:absolute;top:6cqw;left:50%;height:2cqw;width:1.2cqw;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-on-dark-surface),var(--tw-bg-opacity, 1))}.axm-analog-clock-hour-number{position:absolute;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));font-size:10cqw;font-weight:500;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1))}.axm-analog-clock-hand{position:absolute;bottom:50%;left:50%;transform-origin:bottom;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.axm-analog-clock-hand:after{content:\"\";position:absolute;left:0;width:100%}.axm-analog-clock-hour-hand{z-index:2;height:25%;width:2.7cqw;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.axm-analog-clock-hour-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.axm-analog-clock-minute-hand{z-index:3;height:35%;width:2.1cqw;--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.axm-analog-clock-minute-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.axm-analog-clock-second-hand{z-index:4;height:42%;width:1.5cqw;--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.axm-analog-clock-second-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.axm-analog-clock-center-point{position:absolute;top:50%;left:50%;z-index:5;height:9cqw;width:9cqw;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1.8cqw;--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}\n"] }]
|
|
5178
|
+
args: [{ selector: 'axm-analog-clock', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [":host{display:grid;width:100%;height:100%;place-items:center}.axm-analog-clock-container{position:relative;max-height:100%;width:100%;aspect-ratio:1;container-type:inline-size}.axm-analog-clock-face{position:relative;height:100%;width:100%;border-radius:9999px}.axm-analog-clock-marks-container,.axm-analog-clock-numbers-container,.axm-analog-clock-hands{position:absolute;inset:0}.axm-analog-clock-hour-line,.axm-analog-clock-dot-line{position:absolute;bottom:50%;left:50%;height:50%;transform-origin:bottom}.axm-analog-clock-hour-line,.axm-analog-clock-dot-line{width:1.8cqw}.axm-analog-clock-hour-line-inner{position:absolute;top:6cqw;left:50%;height:5.5cqw;width:100%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-on-darker-surface),var(--tw-bg-opacity, 1))}.axm-analog-clock-dot-line-inner{position:absolute;top:6cqw;left:50%;height:2cqw;width:1.2cqw;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-on-dark-surface),var(--tw-bg-opacity, 1))}.axm-analog-clock-hour-number{position:absolute;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));font-size:10cqw;font-weight:500;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-surface),var(--tw-text-opacity, 1))}.axm-analog-clock-hand{position:absolute;bottom:50%;left:50%;transform-origin:bottom;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.axm-analog-clock-hand:after{content:\"\";position:absolute;left:0;width:100%}.axm-analog-clock-hour-hand{z-index:2;height:25%;width:2.7cqw;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.axm-analog-clock-hour-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.axm-analog-clock-minute-hand{z-index:3;height:35%;width:2.1cqw;--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.axm-analog-clock-minute-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.axm-analog-clock-second-hand{z-index:4;height:42%;width:1.5cqw;--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.axm-analog-clock-second-hand:after{bottom:-20%;height:20%;--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.axm-analog-clock-center-point{position:absolute;top:50%;left:50%;z-index:5;height:9cqw;width:9cqw;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1.8cqw;--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}\n"] }]
|
|
4564
5179
|
}], ctorParameters: () => [], propDecorators: { timezone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timezone", required: false }] }], classes: [{ type: i0.Input, args: [{ isSignal: true, alias: "classes", required: false }] }], showNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNumbers", required: false }] }] } });
|
|
4565
5180
|
|
|
4566
|
-
class AXMClockWidgetViewComponent extends
|
|
5181
|
+
class AXMClockWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
4567
5182
|
constructor() {
|
|
4568
5183
|
super();
|
|
4569
5184
|
this.regionalService = inject(AXMLocaleManagementService);
|
|
@@ -4648,177 +5263,11 @@ class AXMClockWidgetViewComponent extends AXPLayoutBaseWidgetComponent {
|
|
|
4648
5263
|
}
|
|
4649
5264
|
}
|
|
4650
5265
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMClockWidgetViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4651
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMClockWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template:
|
|
4652
|
-
<div class="ax-p-2 ax-h-full ax-overflow-hidden" [class.ax-bg-light]="others().length > 0">
|
|
4653
|
-
<!-- Main Clock Section -->
|
|
4654
|
-
<div class="ax-flex ax-flex-col ax-items-center ax-justify-around ax-gap-2 ax-flex-1 ax-h-full">
|
|
4655
|
-
<div
|
|
4656
|
-
class="ax-flex ax-items-center ax-justify-around ax-gap-2 ax-w-full ax-grow"
|
|
4657
|
-
[class.ax-flex-row]="isHorizontal()"
|
|
4658
|
-
[class.ax-rounded-full]="isHorizontal() && others().length > 0"
|
|
4659
|
-
[class.ax-flex-col]="!isHorizontal()"
|
|
4660
|
-
[class.ax-rounded-xl]="!isHorizontal() && others().length > 0"
|
|
4661
|
-
[class.ax-border]="others().length > 0"
|
|
4662
|
-
[class.ax-border-gray-100]="others().length > 0"
|
|
4663
|
-
[class.ax-shadow-lg]="others().length > 0"
|
|
4664
|
-
[class.ax-bg-lighter]="others().length > 0"
|
|
4665
|
-
[class.ax-p-2]="others().length > 0"
|
|
4666
|
-
>
|
|
4667
|
-
<div
|
|
4668
|
-
class="ax-aspect-square ax-flex ax-items-center ax-justify-center ax-min-w-[100px] ax-min-h-[100px]"
|
|
4669
|
-
[style.height]="isHorizontal() ? '65%' : 'auto'"
|
|
4670
|
-
[style.width]="isHorizontal() ? 'auto' : '65%'"
|
|
4671
|
-
>
|
|
4672
|
-
<axm-analog-clock
|
|
4673
|
-
[timezone]="timezone()?.iana"
|
|
4674
|
-
[classes]="others().length > 0 ? 'ax-bg-lightest' : undefined"
|
|
4675
|
-
></axm-analog-clock>
|
|
4676
|
-
</div>
|
|
4677
|
-
@if (timezone()?.abbr) {
|
|
4678
|
-
<div class="ax-flex ax-flex-col ax-items-center ax-justify-center ax-text-center ax-min-w-[50px] ax-gap-2">
|
|
4679
|
-
@if (timezone()?.code) {
|
|
4680
|
-
<span
|
|
4681
|
-
class="ax-font-medium ax-opacity-75 ax-uppercase ax-block ax-2line"
|
|
4682
|
-
[style.fontSize.px]="codeFontSize()"
|
|
4683
|
-
>{{ timezone()?.code }}</span
|
|
4684
|
-
>
|
|
4685
|
-
}
|
|
4686
|
-
<span class="ax-font-bold ax-mt-0" [style.fontSize.px]="abbrFontSize()">{{ timezone()?.abbr }}</span>
|
|
4687
|
-
</div>
|
|
4688
|
-
}
|
|
4689
|
-
</div>
|
|
4690
|
-
|
|
4691
|
-
<!-- Additional Clocks Section -->
|
|
4692
|
-
@if (others().length > 0) {
|
|
4693
|
-
<div class="ax-w-full ax-max-w-4xl ax-mx-auto">
|
|
4694
|
-
<div
|
|
4695
|
-
class="ax-flex ax-justify-around ax-items-center"
|
|
4696
|
-
[class.ax-flex-wrap]="hasEnoughSpaceForHorizontal()"
|
|
4697
|
-
[class.ax-gap-3]="true"
|
|
4698
|
-
[class.ax-overflow-auto]="true"
|
|
4699
|
-
>
|
|
4700
|
-
@for (clock of others(); track clock.code) {
|
|
4701
|
-
<div class="ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-2 ax-flex-wrap ax-gap-2">
|
|
4702
|
-
<div
|
|
4703
|
-
[axTooltip]="clock.code"
|
|
4704
|
-
[axTooltipPlacement]="'top'"
|
|
4705
|
-
class="ax-aspect-square ax-flex ax-items-center ax-justify-center ax-rounded-lg ax-size-16"
|
|
4706
|
-
>
|
|
4707
|
-
<axm-analog-clock
|
|
4708
|
-
[timezone]="clock.iana"
|
|
4709
|
-
[showNumbers]="false"
|
|
4710
|
-
[classes]="'ax-bg-lightest'"
|
|
4711
|
-
></axm-analog-clock>
|
|
4712
|
-
</div>
|
|
4713
|
-
@if (clock.abbr) {
|
|
4714
|
-
<div
|
|
4715
|
-
[class.ax-text-center]="hasEnoughSpaceForHorizontal()"
|
|
4716
|
-
[class.ax-pt-1]="hasEnoughSpaceForHorizontal()"
|
|
4717
|
-
[class.ax-pl-1]="!hasEnoughSpaceForHorizontal()"
|
|
4718
|
-
>
|
|
4719
|
-
<span class="ax-text-xs ax-font-medium ax-truncate ax-block">{{ clock.abbr }}</span>
|
|
4720
|
-
@if (clock.code) {
|
|
4721
|
-
<span class="ax-text-xs ax-font-light ax-opacity-75 ax-truncate ax-block">{{
|
|
4722
|
-
clock.code
|
|
4723
|
-
}}</span>
|
|
4724
|
-
}
|
|
4725
|
-
</div>
|
|
4726
|
-
}
|
|
4727
|
-
</div>
|
|
4728
|
-
}
|
|
4729
|
-
</div>
|
|
4730
|
-
</div>
|
|
4731
|
-
}
|
|
4732
|
-
</div>
|
|
4733
|
-
</div>
|
|
4734
|
-
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}.ax-2line{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;line-height:1.1;max-height:2.2em}.ax-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "component", type: AXMAnalogClockComponent, selector: "axm-analog-clock", inputs: ["timezone", "classes", "showNumbers"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i1$2.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5266
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMClockWidgetViewComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"ax-p-2 ax-h-full ax-overflow-hidden\" [class.ax-bg-light]=\"others().length > 0\">\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 @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\">{{ clock.code }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.ax-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-2line{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;line-height:1.1;max-height:2.2em}\n"], dependencies: [{ kind: "component", type: AXMAnalogClockComponent, selector: "axm-analog-clock", inputs: ["timezone", "classes", "showNumbers"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i1$2.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4735
5267
|
}
|
|
4736
5268
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMClockWidgetViewComponent, decorators: [{
|
|
4737
5269
|
type: Component,
|
|
4738
|
-
args: [{ template:
|
|
4739
|
-
<div class="ax-p-2 ax-h-full ax-overflow-hidden" [class.ax-bg-light]="others().length > 0">
|
|
4740
|
-
<!-- Main Clock Section -->
|
|
4741
|
-
<div class="ax-flex ax-flex-col ax-items-center ax-justify-around ax-gap-2 ax-flex-1 ax-h-full">
|
|
4742
|
-
<div
|
|
4743
|
-
class="ax-flex ax-items-center ax-justify-around ax-gap-2 ax-w-full ax-grow"
|
|
4744
|
-
[class.ax-flex-row]="isHorizontal()"
|
|
4745
|
-
[class.ax-rounded-full]="isHorizontal() && others().length > 0"
|
|
4746
|
-
[class.ax-flex-col]="!isHorizontal()"
|
|
4747
|
-
[class.ax-rounded-xl]="!isHorizontal() && others().length > 0"
|
|
4748
|
-
[class.ax-border]="others().length > 0"
|
|
4749
|
-
[class.ax-border-gray-100]="others().length > 0"
|
|
4750
|
-
[class.ax-shadow-lg]="others().length > 0"
|
|
4751
|
-
[class.ax-bg-lighter]="others().length > 0"
|
|
4752
|
-
[class.ax-p-2]="others().length > 0"
|
|
4753
|
-
>
|
|
4754
|
-
<div
|
|
4755
|
-
class="ax-aspect-square ax-flex ax-items-center ax-justify-center ax-min-w-[100px] ax-min-h-[100px]"
|
|
4756
|
-
[style.height]="isHorizontal() ? '65%' : 'auto'"
|
|
4757
|
-
[style.width]="isHorizontal() ? 'auto' : '65%'"
|
|
4758
|
-
>
|
|
4759
|
-
<axm-analog-clock
|
|
4760
|
-
[timezone]="timezone()?.iana"
|
|
4761
|
-
[classes]="others().length > 0 ? 'ax-bg-lightest' : undefined"
|
|
4762
|
-
></axm-analog-clock>
|
|
4763
|
-
</div>
|
|
4764
|
-
@if (timezone()?.abbr) {
|
|
4765
|
-
<div class="ax-flex ax-flex-col ax-items-center ax-justify-center ax-text-center ax-min-w-[50px] ax-gap-2">
|
|
4766
|
-
@if (timezone()?.code) {
|
|
4767
|
-
<span
|
|
4768
|
-
class="ax-font-medium ax-opacity-75 ax-uppercase ax-block ax-2line"
|
|
4769
|
-
[style.fontSize.px]="codeFontSize()"
|
|
4770
|
-
>{{ timezone()?.code }}</span
|
|
4771
|
-
>
|
|
4772
|
-
}
|
|
4773
|
-
<span class="ax-font-bold ax-mt-0" [style.fontSize.px]="abbrFontSize()">{{ timezone()?.abbr }}</span>
|
|
4774
|
-
</div>
|
|
4775
|
-
}
|
|
4776
|
-
</div>
|
|
4777
|
-
|
|
4778
|
-
<!-- Additional Clocks Section -->
|
|
4779
|
-
@if (others().length > 0) {
|
|
4780
|
-
<div class="ax-w-full ax-max-w-4xl ax-mx-auto">
|
|
4781
|
-
<div
|
|
4782
|
-
class="ax-flex ax-justify-around ax-items-center"
|
|
4783
|
-
[class.ax-flex-wrap]="hasEnoughSpaceForHorizontal()"
|
|
4784
|
-
[class.ax-gap-3]="true"
|
|
4785
|
-
[class.ax-overflow-auto]="true"
|
|
4786
|
-
>
|
|
4787
|
-
@for (clock of others(); track clock.code) {
|
|
4788
|
-
<div class="ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-2 ax-flex-wrap ax-gap-2">
|
|
4789
|
-
<div
|
|
4790
|
-
[axTooltip]="clock.code"
|
|
4791
|
-
[axTooltipPlacement]="'top'"
|
|
4792
|
-
class="ax-aspect-square ax-flex ax-items-center ax-justify-center ax-rounded-lg ax-size-16"
|
|
4793
|
-
>
|
|
4794
|
-
<axm-analog-clock
|
|
4795
|
-
[timezone]="clock.iana"
|
|
4796
|
-
[showNumbers]="false"
|
|
4797
|
-
[classes]="'ax-bg-lightest'"
|
|
4798
|
-
></axm-analog-clock>
|
|
4799
|
-
</div>
|
|
4800
|
-
@if (clock.abbr) {
|
|
4801
|
-
<div
|
|
4802
|
-
[class.ax-text-center]="hasEnoughSpaceForHorizontal()"
|
|
4803
|
-
[class.ax-pt-1]="hasEnoughSpaceForHorizontal()"
|
|
4804
|
-
[class.ax-pl-1]="!hasEnoughSpaceForHorizontal()"
|
|
4805
|
-
>
|
|
4806
|
-
<span class="ax-text-xs ax-font-medium ax-truncate ax-block">{{ clock.abbr }}</span>
|
|
4807
|
-
@if (clock.code) {
|
|
4808
|
-
<span class="ax-text-xs ax-font-light ax-opacity-75 ax-truncate ax-block">{{
|
|
4809
|
-
clock.code
|
|
4810
|
-
}}</span>
|
|
4811
|
-
}
|
|
4812
|
-
</div>
|
|
4813
|
-
}
|
|
4814
|
-
</div>
|
|
4815
|
-
}
|
|
4816
|
-
</div>
|
|
4817
|
-
</div>
|
|
4818
|
-
}
|
|
4819
|
-
</div>
|
|
4820
|
-
</div>
|
|
4821
|
-
`, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXMAnalogClockComponent, AXTooltipModule], styles: [":host{display:block;width:100%;height:100%}.ax-2line{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;line-height:1.1;max-height:2.2em}.ax-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
|
|
5270
|
+
args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXMAnalogClockComponent, AXTooltipModule], template: "<div class=\"ax-p-2 ax-h-full ax-overflow-hidden\" [class.ax-bg-light]=\"others().length > 0\">\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 @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\">{{ clock.code }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.ax-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-2line{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;line-height:1.1;max-height:2.2em}\n"] }]
|
|
4822
5271
|
}], ctorParameters: () => [] });
|
|
4823
5272
|
|
|
4824
5273
|
var analogClockWidgetView_component = /*#__PURE__*/Object.freeze({
|
|
@@ -4827,9 +5276,9 @@ var analogClockWidgetView_component = /*#__PURE__*/Object.freeze({
|
|
|
4827
5276
|
});
|
|
4828
5277
|
|
|
4829
5278
|
const AXPAnalogClockWidget = {
|
|
4830
|
-
name:
|
|
4831
|
-
title: '
|
|
4832
|
-
description: '',
|
|
5279
|
+
name: RootConfig.widgets.analogClock,
|
|
5280
|
+
title: '@dashboard:widgets.analog-clock.widget-title',
|
|
5281
|
+
description: '@dashboard:widgets.analog-clock.widget-description',
|
|
4833
5282
|
type: 'view',
|
|
4834
5283
|
categories: [],
|
|
4835
5284
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
@@ -4909,7 +5358,7 @@ const AXPAnalogClockWidget = {
|
|
|
4909
5358
|
},
|
|
4910
5359
|
};
|
|
4911
5360
|
|
|
4912
|
-
class AXPClockCalendarWidgetViewComponent extends
|
|
5361
|
+
class AXPClockCalendarWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
4913
5362
|
constructor() {
|
|
4914
5363
|
super(...arguments);
|
|
4915
5364
|
// Dependencies
|
|
@@ -5078,8 +5527,9 @@ const AXP_DATE_FORMAT_OPTIONS = [
|
|
|
5078
5527
|
];
|
|
5079
5528
|
|
|
5080
5529
|
const AXPClockCalendarWidget = {
|
|
5081
|
-
name:
|
|
5082
|
-
title: '
|
|
5530
|
+
name: RootConfig.widgets.clockCalendar,
|
|
5531
|
+
title: '@dashboard:widgets.clock-calendar.widget-title',
|
|
5532
|
+
description: '@dashboard:widgets.clock-calendar.widget-description',
|
|
5083
5533
|
categories: [AXP_WIDGETS_UTILITY_CATEGORY],
|
|
5084
5534
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
5085
5535
|
type: 'dashboard',
|
|
@@ -5098,7 +5548,7 @@ const AXPClockCalendarWidget = {
|
|
|
5098
5548
|
path: 'options.title',
|
|
5099
5549
|
type: AXPWidgetsCatalog.text,
|
|
5100
5550
|
options: {
|
|
5101
|
-
placeholder: '
|
|
5551
|
+
placeholder: '@dashboard:widgets.clock-calendar.title-placeholder',
|
|
5102
5552
|
},
|
|
5103
5553
|
},
|
|
5104
5554
|
},
|
|
@@ -5118,9 +5568,9 @@ const AXPClockCalendarWidget = {
|
|
|
5118
5568
|
type: AXPWidgetsCatalog.select,
|
|
5119
5569
|
options: {
|
|
5120
5570
|
dataSource: [
|
|
5121
|
-
{ id: 'both', title: '
|
|
5122
|
-
{ id: 'digital', title: '
|
|
5123
|
-
{ id: 'analog', title: '
|
|
5571
|
+
{ id: 'both', title: '@dashboard:widgets.clock-calendar.layout-both' },
|
|
5572
|
+
{ id: 'digital', title: '@dashboard:widgets.clock-calendar.layout-digital' },
|
|
5573
|
+
{ id: 'analog', title: '@dashboard:widgets.clock-calendar.layout-analog' },
|
|
5124
5574
|
],
|
|
5125
5575
|
},
|
|
5126
5576
|
},
|
|
@@ -5272,7 +5722,7 @@ const AXPClockCalendarWidget = {
|
|
|
5272
5722
|
},
|
|
5273
5723
|
};
|
|
5274
5724
|
|
|
5275
|
-
class
|
|
5725
|
+
class AXPShortcutWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
5276
5726
|
constructor() {
|
|
5277
5727
|
super(...arguments);
|
|
5278
5728
|
this.popupService = inject(AXPopupService);
|
|
@@ -5336,71 +5786,12 @@ class AXPDashboardShortcutWidgetViewComponent extends AXPLayoutBaseWidgetCompone
|
|
|
5336
5786
|
cls[`ax-text-white`] = true;
|
|
5337
5787
|
return cls;
|
|
5338
5788
|
}
|
|
5339
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type:
|
|
5340
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type:
|
|
5341
|
-
@if (item()) {
|
|
5342
|
-
<div
|
|
5343
|
-
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 "
|
|
5344
|
-
(click)="executeCommand()"
|
|
5345
|
-
>
|
|
5346
|
-
<div class="ax-absolute ax-inset-0 ax-bg-black/0 hover:ax-bg-black/10 ax-transition-opacity"></div>
|
|
5347
|
-
<i [class]="item().icon + ' ax-text-3xl'"></i>
|
|
5348
|
-
<span class="ax-text-xl ax-font-semibold">{{ item().title | translate | async }}</span>
|
|
5349
|
-
@if (item().description) {
|
|
5350
|
-
<span class="ax-text-sm ax-opacity-90 ax-text-center ax-px-2">{{
|
|
5351
|
-
item().description! | translate | async
|
|
5352
|
-
}}</span>
|
|
5353
|
-
}
|
|
5354
|
-
</div>
|
|
5355
|
-
} @else {
|
|
5356
|
-
<div
|
|
5357
|
-
(click)="setCommand()"
|
|
5358
|
-
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"
|
|
5359
|
-
>
|
|
5360
|
-
<div class="ax-absolute ax-inset-0 ax-bg-black/0 hover:ax-bg-black/5 ax-transition-opacity"></div>
|
|
5361
|
-
<i class="fa-light fa-plus ax-text-3xl"></i>
|
|
5362
|
-
<span class="ax-text-xl ax-font-semibold">{{
|
|
5363
|
-
'@dashboard:widgets.dashboard-shortcut.add-shortcut' | translate | async
|
|
5364
|
-
}}</span>
|
|
5365
|
-
</div>
|
|
5366
|
-
}
|
|
5367
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5789
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPShortcutWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
5790
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPShortcutWidgetViewComponent, isStandalone: true, selector: "ng-component", host: { properties: { "style": "this.__style", "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: "@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\">{{ item().description! | translate | async }}</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.shortcut.add-shortcut' | translate | async\n }}</span>\n </div>\n}\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5368
5791
|
}
|
|
5369
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type:
|
|
5792
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPShortcutWidgetViewComponent, decorators: [{
|
|
5370
5793
|
type: Component,
|
|
5371
|
-
args: [{
|
|
5372
|
-
template: `
|
|
5373
|
-
@if (item()) {
|
|
5374
|
-
<div
|
|
5375
|
-
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 "
|
|
5376
|
-
(click)="executeCommand()"
|
|
5377
|
-
>
|
|
5378
|
-
<div class="ax-absolute ax-inset-0 ax-bg-black/0 hover:ax-bg-black/10 ax-transition-opacity"></div>
|
|
5379
|
-
<i [class]="item().icon + ' ax-text-3xl'"></i>
|
|
5380
|
-
<span class="ax-text-xl ax-font-semibold">{{ item().title | translate | async }}</span>
|
|
5381
|
-
@if (item().description) {
|
|
5382
|
-
<span class="ax-text-sm ax-opacity-90 ax-text-center ax-px-2">{{
|
|
5383
|
-
item().description! | translate | async
|
|
5384
|
-
}}</span>
|
|
5385
|
-
}
|
|
5386
|
-
</div>
|
|
5387
|
-
} @else {
|
|
5388
|
-
<div
|
|
5389
|
-
(click)="setCommand()"
|
|
5390
|
-
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"
|
|
5391
|
-
>
|
|
5392
|
-
<div class="ax-absolute ax-inset-0 ax-bg-black/0 hover:ax-bg-black/5 ax-transition-opacity"></div>
|
|
5393
|
-
<i class="fa-light fa-plus ax-text-3xl"></i>
|
|
5394
|
-
<span class="ax-text-xl ax-font-semibold">{{
|
|
5395
|
-
'@dashboard:widgets.dashboard-shortcut.add-shortcut' | translate | async
|
|
5396
|
-
}}</span>
|
|
5397
|
-
</div>
|
|
5398
|
-
}
|
|
5399
|
-
`,
|
|
5400
|
-
standalone: true,
|
|
5401
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5402
|
-
imports: [CommonModule, AXTranslationModule],
|
|
5403
|
-
}]
|
|
5794
|
+
args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXTranslationModule], template: "@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\">{{ item().description! | translate | async }}</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.shortcut.add-shortcut' | translate | async\n }}</span>\n </div>\n}\n", styles: [":host{display:block}\n"] }]
|
|
5404
5795
|
}], propDecorators: { __style: [{
|
|
5405
5796
|
type: HostBinding,
|
|
5406
5797
|
args: ['style']
|
|
@@ -5409,15 +5800,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
5409
5800
|
args: ['class']
|
|
5410
5801
|
}] } });
|
|
5411
5802
|
|
|
5412
|
-
var
|
|
5803
|
+
var shortcutWidgetView_component = /*#__PURE__*/Object.freeze({
|
|
5413
5804
|
__proto__: null,
|
|
5414
|
-
|
|
5805
|
+
AXPShortcutWidgetViewComponent: AXPShortcutWidgetViewComponent
|
|
5415
5806
|
});
|
|
5416
5807
|
|
|
5417
|
-
const
|
|
5418
|
-
name:
|
|
5419
|
-
title: '
|
|
5420
|
-
description: '
|
|
5808
|
+
const AXPShortcutWidget = {
|
|
5809
|
+
name: RootConfig.widgets.shortcut,
|
|
5810
|
+
title: '@dashboard:widgets.shortcut.widget-title',
|
|
5811
|
+
description: '@dashboard:widgets.shortcut.widget-description',
|
|
5421
5812
|
type: 'view',
|
|
5422
5813
|
categories: [AXP_WIDGETS_UTILITY_CATEGORY],
|
|
5423
5814
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
@@ -5425,7 +5816,7 @@ const AXPDashboardShortcutWidget = {
|
|
|
5425
5816
|
properties: [
|
|
5426
5817
|
{
|
|
5427
5818
|
...AXP_COLOR_PROPERTY,
|
|
5428
|
-
title: '@dashboard:widgets.
|
|
5819
|
+
title: '@dashboard:widgets.shortcut.color',
|
|
5429
5820
|
},
|
|
5430
5821
|
],
|
|
5431
5822
|
meta: {
|
|
@@ -5455,53 +5846,47 @@ const AXPDashboardShortcutWidget = {
|
|
|
5455
5846
|
},
|
|
5456
5847
|
components: {
|
|
5457
5848
|
view: {
|
|
5458
|
-
component: () => Promise.resolve().then(function () { return
|
|
5849
|
+
component: () => Promise.resolve().then(function () { return shortcutWidgetView_component; }).then((c) => c.AXPShortcutWidgetViewComponent),
|
|
5459
5850
|
},
|
|
5460
5851
|
},
|
|
5461
5852
|
};
|
|
5462
5853
|
|
|
5463
|
-
class AXPStickyNoteWidgetViewComponent extends
|
|
5854
|
+
class AXPStickyNoteWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
5464
5855
|
constructor() {
|
|
5465
5856
|
super(...arguments);
|
|
5466
5857
|
this.isEditing = signal(false, ...(ngDevMode ? [{ debugName: "isEditing" }] : /* istanbul ignore next */ []));
|
|
5467
5858
|
this.wysiwyg = viewChild('wysiwyg', ...(ngDevMode ? [{ debugName: "wysiwyg" }] : /* istanbul ignore next */ []));
|
|
5468
|
-
|
|
5469
|
-
|
|
5470
|
-
this.value = linkedSignal(() => this.getValue(), ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
5859
|
+
/** Note HTML persisted in `options.noteText`. */
|
|
5860
|
+
this.value = linkedSignal(() => String(this.options()['noteText'] ?? ''), ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
5471
5861
|
this.date = computed(() => this.options()?.['date'] ?? new Date(), ...(ngDevMode ? [{ debugName: "date" }] : /* istanbul ignore next */ []));
|
|
5472
5862
|
this.bgColor = computed(() => this.options()?.['backgroundColor'] ?? '#FFF8B8', ...(ngDevMode ? [{ debugName: "bgColor" }] : /* istanbul ignore next */ []));
|
|
5473
5863
|
this.color = signal('#333333', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
5474
5864
|
this.el = inject(ElementRef);
|
|
5475
|
-
// Modern color palette with pastel and vibrant options
|
|
5476
5865
|
this.colorPresets = [
|
|
5477
|
-
'#FFF8B8',
|
|
5478
|
-
'#FFD8E6',
|
|
5479
|
-
'#D1F0FF',
|
|
5480
|
-
'#E2FFD1',
|
|
5481
|
-
'#FFE8D1',
|
|
5482
|
-
'#F0D1FF',
|
|
5483
|
-
'#FFCDD2',
|
|
5484
|
-
'#D1FFF0',
|
|
5485
|
-
'#F5F5F5',
|
|
5486
|
-
'#FFFFFF',
|
|
5866
|
+
'#FFF8B8',
|
|
5867
|
+
'#FFD8E6',
|
|
5868
|
+
'#D1F0FF',
|
|
5869
|
+
'#E2FFD1',
|
|
5870
|
+
'#FFE8D1',
|
|
5871
|
+
'#F0D1FF',
|
|
5872
|
+
'#FFCDD2',
|
|
5873
|
+
'#D1FFF0',
|
|
5874
|
+
'#F5F5F5',
|
|
5875
|
+
'#FFFFFF',
|
|
5487
5876
|
];
|
|
5488
5877
|
}
|
|
5489
|
-
// Handle clicks outside the component to cancel editing
|
|
5490
5878
|
handleClickOutside(event) {
|
|
5491
5879
|
const clickedInside = this.el.nativeElement.contains(event.target);
|
|
5492
5880
|
if (!clickedInside && this.isEditing()) {
|
|
5493
5881
|
this.saveChanges();
|
|
5494
5882
|
}
|
|
5495
5883
|
}
|
|
5496
|
-
// Handle double-click to activate editing
|
|
5497
5884
|
activateEdit() {
|
|
5498
|
-
//TODO FOCUS WYSIWYG
|
|
5499
5885
|
this.wysiwyg()?.focus();
|
|
5500
5886
|
this.isEditing.set(true);
|
|
5501
5887
|
}
|
|
5502
|
-
// Save changes and exit edit mode
|
|
5503
5888
|
saveChanges() {
|
|
5504
|
-
this.
|
|
5889
|
+
this.setOptions({ noteText: this.value() });
|
|
5505
5890
|
this.isEditing.set(false);
|
|
5506
5891
|
}
|
|
5507
5892
|
setColor(color) {
|
|
@@ -5531,7 +5916,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
5531
5916
|
AXFormatModule,
|
|
5532
5917
|
AXPopoverModule,
|
|
5533
5918
|
CommonModule,
|
|
5534
|
-
FormsModule,
|
|
5535
5919
|
AXColorBoxModule,
|
|
5536
5920
|
], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
5537
5921
|
{
|
|
@@ -5550,22 +5934,25 @@ var stickyNoteWidget_component = /*#__PURE__*/Object.freeze({
|
|
|
5550
5934
|
});
|
|
5551
5935
|
|
|
5552
5936
|
const AXPStickyNoteWidget = {
|
|
5553
|
-
name:
|
|
5554
|
-
title: '
|
|
5937
|
+
name: RootConfig.widgets.stickyNote,
|
|
5938
|
+
title: '@dashboard:widgets.sticky-note.widget-title',
|
|
5939
|
+
description: '@dashboard:widgets.sticky-note.widget-description',
|
|
5555
5940
|
categories: AXP_WIDGETS_UTILITY_CATEGORY,
|
|
5556
5941
|
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
5557
5942
|
type: 'dashboard',
|
|
5558
5943
|
icon: 'fa-light fa-sticky-note',
|
|
5559
5944
|
properties: [
|
|
5560
|
-
|
|
5945
|
+
createStringProperty({
|
|
5946
|
+
name: 'noteText',
|
|
5947
|
+
title: '@dashboard:widgets.sticky-note.note-text',
|
|
5948
|
+
path: 'options.noteText',
|
|
5949
|
+
group: AXP_DATA_PROPERTY_GROUP,
|
|
5950
|
+
defaultValue: '',
|
|
5951
|
+
}),
|
|
5561
5952
|
{
|
|
5562
5953
|
...AXP_BG_COLOR_PROPERTY,
|
|
5563
5954
|
title: '@dashboard:widgets.sticky-note.background-color',
|
|
5564
5955
|
},
|
|
5565
|
-
{
|
|
5566
|
-
...plainTextDefaultProperty(),
|
|
5567
|
-
title: '@dashboard:widgets.sticky-note.note-text',
|
|
5568
|
-
},
|
|
5569
5956
|
],
|
|
5570
5957
|
components: {
|
|
5571
5958
|
view: {
|
|
@@ -5602,13 +5989,16 @@ const AXPStickyNoteWidget = {
|
|
|
5602
5989
|
//#endregion
|
|
5603
5990
|
//#region ---- Dashboard Management Widgets Provider ----
|
|
5604
5991
|
const DASHBOARD_WIDGETS = [
|
|
5605
|
-
|
|
5992
|
+
AXPShortcutWidget,
|
|
5606
5993
|
AXPDonutChartWidget,
|
|
5607
5994
|
AXPBarChartWidget,
|
|
5608
5995
|
AXPLineChartWidget,
|
|
5996
|
+
AXPFunnelChartWidget,
|
|
5997
|
+
AXPHeatmapChartWidget,
|
|
5609
5998
|
AXPKpiProgressWidget,
|
|
5610
5999
|
AXPKpiSegmentedWidget,
|
|
5611
6000
|
AXPKpiDetailsWidget,
|
|
6001
|
+
AXPKpiStatCardWidget,
|
|
5612
6002
|
AXPGaugeChartWidget,
|
|
5613
6003
|
AXPStickyNoteWidget,
|
|
5614
6004
|
AXPMinimalWeatherWidget,
|
|
@@ -6956,7 +7346,7 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
6956
7346
|
});
|
|
6957
7347
|
const filteredWidgets = widgets.map(({ __meta__, ...rest }) => {
|
|
6958
7348
|
const widget = rest;
|
|
6959
|
-
if (widget.type ===
|
|
7349
|
+
if (widget.type === RootConfig.widgets.stickyNote && !widget.options) {
|
|
6960
7350
|
widget.options = { hasConfiguration: false };
|
|
6961
7351
|
}
|
|
6962
7352
|
const randomId = AXPDataGenerator.uuid();
|
|
@@ -7435,7 +7825,7 @@ class AXMDashboardHomeComponent extends AXPPageLayoutBaseComponent {
|
|
|
7435
7825
|
provide: AXPPageLayoutBase,
|
|
7436
7826
|
useExisting: AXMDashboardHomeComponent,
|
|
7437
7827
|
},
|
|
7438
|
-
], usesInheritance: true, ngImport: i0, template: "<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) |
|
|
7828
|
+
], usesInheritance: true, ngImport: i0, template: "<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) | translate | async; @let\n isHeaderTitleVisible = widget.node?.meta?.['title']?.['visible'] ?? true;\n <axm-dashboard-widget-wrapper\n [title]=\"isHeaderTitleVisible ? title! : null\"\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", styles: ["axm-dashboard-home{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-dashboard-home .placeholder-content{border-radius:.5rem!important;border-width:1px!important;border-style:dashed!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))!important;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5)!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i2$3.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i2$3.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "ngmodule", type: AXGridLayoutBuilderModule }, { kind: "component", type: i3$2.AXGridLayoutContainerComponent, selector: "ax-grid-layout-container", inputs: ["options", "isEmpty"], outputs: ["onAdded", "onRemoved", "onWidgetChange", "onChange", "onRender", "isEmptyChange"] }, { kind: "component", type: i3$2.AXGridLayoutWidgetComponent, selector: "ax-grid-layout-widget", inputs: ["options"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: AXMDashboardWidgetWrapperComponent, selector: "axm-dashboard-widget-wrapper", inputs: ["title", "hasConfiguration", "isLocked"], outputs: ["onDelete", "onConfiguration", "onValueChanged", "onOptionsChanged"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "variant"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
7439
7829
|
}
|
|
7440
7830
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardHomeComponent, decorators: [{
|
|
7441
7831
|
type: Component,
|
|
@@ -7455,7 +7845,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
7455
7845
|
AXBreadcrumbsModule,
|
|
7456
7846
|
AXMDashboardWidgetWrapperComponent,
|
|
7457
7847
|
AXPStateMessageComponent,
|
|
7458
|
-
AXPResolveMultiLanguageStringPipe,
|
|
7459
7848
|
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
|
|
7460
7849
|
AXPDesignerService,
|
|
7461
7850
|
AXMDashboardStore,
|
|
@@ -7463,7 +7852,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
7463
7852
|
provide: AXPPageLayoutBase,
|
|
7464
7853
|
useExisting: AXMDashboardHomeComponent,
|
|
7465
7854
|
},
|
|
7466
|
-
], template: "<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) |
|
|
7855
|
+
], template: "<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) | translate | async; @let\n isHeaderTitleVisible = widget.node?.meta?.['title']?.['visible'] ?? true;\n <axm-dashboard-widget-wrapper\n [title]=\"isHeaderTitleVisible ? title! : null\"\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", styles: ["axm-dashboard-home{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-dashboard-home .placeholder-content{border-radius:.5rem!important;border-width:1px!important;border-style:dashed!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))!important;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5)!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}\n"] }]
|
|
7467
7856
|
}] });
|
|
7468
7857
|
|
|
7469
7858
|
var homeDashboard = /*#__PURE__*/Object.freeze({
|
|
@@ -7477,9 +7866,12 @@ class AXMAddDashboardPopup extends AXBasePageComponent {
|
|
|
7477
7866
|
constructor() {
|
|
7478
7867
|
super(...arguments);
|
|
7479
7868
|
this.scope = RootConfig.config.i18n;
|
|
7480
|
-
this.
|
|
7869
|
+
this.entityService = inject(AXPEntityService);
|
|
7870
|
+
this.jobDefinitionData = this.entityService
|
|
7871
|
+
.withEntity(RootConfig$1.module.name, RootConfig$1.entities.jobDefinition.name)
|
|
7872
|
+
.data();
|
|
7481
7873
|
this.sessionService = inject(AXPSessionService);
|
|
7482
|
-
this.multiLanguageResolver = inject(
|
|
7874
|
+
this.multiLanguageResolver = inject(AXTranslationService);
|
|
7483
7875
|
this.title = model('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
7484
7876
|
this.description = model('', ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
|
|
7485
7877
|
this.selectedRoleIds = model([], ...(ngDevMode ? [{ debugName: "selectedRoleIds" }] : /* istanbul ignore next */ []));
|
|
@@ -7503,7 +7895,7 @@ class AXMAddDashboardPopup extends AXBasePageComponent {
|
|
|
7503
7895
|
// Load roles if admin
|
|
7504
7896
|
if (this.showAdminFields()) {
|
|
7505
7897
|
try {
|
|
7506
|
-
const result = await this.
|
|
7898
|
+
const result = await this.jobDefinitionData.query({ skip: 0, take: 100 });
|
|
7507
7899
|
if (result.items && result.items.length > 0) {
|
|
7508
7900
|
this.roles = result.items.map((i) => ({
|
|
7509
7901
|
id: i.id,
|
|
@@ -7705,5 +8097,5 @@ var AXPHomeDashboardSetting;
|
|
|
7705
8097
|
* Generated bundle index. Do not edit.
|
|
7706
8098
|
*/
|
|
7707
8099
|
|
|
7708
|
-
export { AXMAddDashboardPopup, AXMAdvancedWeatherViewComponent, AXMAnalogClockComponent, AXMClockWidgetViewComponent, AXMConfigurationPopup, AXMDashboardEntityModule, AXMDashboardHomeComponent, AXMDashboardManagementModule, AXMDashboardPopupService, AXMDashboardService, AXMDashboardServiceImpl, AXMDashboardStore, AXMDashboardWidgetWrapperComponent, AXMMinimalWeatherViewComponent, AXPAdvancedWeatherWidget, AXPAnalogClockWidget, AXPBarChartWidget, AXPBarChartWidgetViewComponent, AXPClockCalendarWidget, AXPClockCalendarWidgetViewComponent,
|
|
8100
|
+
export { AXMAddDashboardPopup, AXMAdvancedWeatherViewComponent, AXMAnalogClockComponent, AXMClockWidgetViewComponent, AXMConfigurationPopup, AXMDashboardEntityModule, AXMDashboardHomeComponent, AXMDashboardManagementModule, AXMDashboardPopupService, AXMDashboardService, AXMDashboardServiceImpl, AXMDashboardStore, AXMDashboardWidgetWrapperComponent, AXMMinimalWeatherViewComponent, AXPAdvancedWeatherWidget, AXPAnalogClockWidget, AXPBarChartWidget, AXPBarChartWidgetViewComponent, AXPClockCalendarWidget, AXPClockCalendarWidgetViewComponent, AXPDashboardWidgetComponent, AXPDonutChartWidget, AXPDonutChartWidgetViewComponent, AXPFunnelChartWidget, AXPFunnelChartWidgetViewComponent, AXPGaugeChartWidget, AXPGaugeChartWidgetViewComponent, AXPHeatmapChartWidget, AXPHeatmapChartWidgetViewComponent, AXPHomeDashboardSetting, AXPKpiDetailsWidget, AXPKpiDetailsWidgetViewComponent, AXPKpiProgressWidget, AXPKpiProgressWidgetViewComponent, AXPKpiSegmentedWidget, AXPKpiSegmentedWidgetViewComponent, AXPKpiStatCardWidget, AXPKpiStatCardWidgetViewComponent, AXPLineChartWidget, AXPLineChartWidgetViewComponent, AXPMinimalWeatherWidget, AXPShortcutWidget, AXPShortcutWidgetViewComponent, AXPStickyNoteWidget, AXPStickyNoteWidgetViewComponent, AXPWeatherApiAbstract, AXPWeatherApiMockService, AXPWeatherApiService, AXPWeatherWidget, AXPWeatherWidgetViewComponent, AXP_DATE_FORMAT_OPTIONS, AXP_TIMEZONE_OPTIONS, AXP_WIDGETS_CHART_CATEGORY, AXP_WIDGETS_UTILITY_CATEGORY, RootConfig, dashboardFactory };
|
|
7709
8101
|
//# sourceMappingURL=acorex-modules-dashboard-management.mjs.map
|