@acorex/modules 21.0.0-next.41 → 21.0.0-next.43
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-agent-registry-tool-configurator-widget-column.component-D0ruV6aJ.mjs.map +1 -1
- package/fesm2022/{acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C7TQMwX4.mjs → acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C-XsPEIg.mjs} +2 -2
- package/fesm2022/acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C-XsPEIg.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-agent.entity-DwPIKib2.mjs → acorex-modules-ai-management-agent.entity-D6-0_Ms3.mjs} +2 -2
- package/fesm2022/acorex-modules-ai-management-agent.entity-D6-0_Ms3.mjs.map +1 -0
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-column.component-DSC48iD0.mjs.map +1 -1
- package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BozVAuLO.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-u1hZ4P5s.mjs} +2 -2
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-u1hZ4P5s.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-assist.entity-CuToMDS_.mjs → acorex-modules-ai-management-assist.entity-DfW-FFCt.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-assist.entity-CuToMDS_.mjs.map → acorex-modules-ai-management-assist.entity-DfW-FFCt.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-model.entity-vUNlioDw.mjs → acorex-modules-ai-management-model.entity-DiDaXVa3.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-model.entity-vUNlioDw.mjs.map → acorex-modules-ai-management-model.entity-DiDaXVa3.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-BpxRR5ir.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-CZLNKtl0.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-BpxRR5ir.mjs.map → acorex-modules-ai-management-open-ai-endpoint.entity-CZLNKtl0.mjs.map} +1 -1
- package/fesm2022/acorex-modules-ai-management.mjs +4636 -1
- package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-application-management-features-widget-view.component-DlfkfOay.mjs → acorex-modules-application-management-features-widget-view.component-uc8eGA-k.mjs} +2 -2
- package/fesm2022/{acorex-modules-application-management-features-widget-view.component-DlfkfOay.mjs.map → acorex-modules-application-management-features-widget-view.component-uc8eGA-k.mjs.map} +1 -1
- package/fesm2022/acorex-modules-application-management.mjs +22 -77
- package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-CMS2WJDu.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-c8OrTwDw.mjs} +26 -26
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-CMS2WJDu.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-c8OrTwDw.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-C-Q4hu8o.mjs → acorex-modules-assessment-management-assessment-case.entity-DEsJE7x3.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-C-Q4hu8o.mjs.map → acorex-modules-assessment-management-assessment-case.entity-DEsJE7x3.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQI_FpUd.mjs → acorex-modules-assessment-management-assessment-session.entity-eNFfu-Jq.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQI_FpUd.mjs.map → acorex-modules-assessment-management-assessment-session.entity-eNFfu-Jq.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-Bpvco5iD.mjs → acorex-modules-assessment-management-fill-assessment-session.command-BeSUBkI9.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-Bpvco5iD.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-BeSUBkI9.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-index-_fPuBQeK.mjs → acorex-modules-assessment-management-index-3GB9Xkyv.mjs} +4 -4
- package/fesm2022/{acorex-modules-assessment-management-index-_fPuBQeK.mjs.map → acorex-modules-assessment-management-index-3GB9Xkyv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-drR6nq76.mjs → acorex-modules-assessment-management-preview-question.command-QinKZtTz.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-drR6nq76.mjs.map → acorex-modules-assessment-management-preview-question.command-QinKZtTz.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-CY8tZWdG.mjs → acorex-modules-assessment-management-preview-questionnaire.command-CKZYSyOv.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-CY8tZWdG.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-CKZYSyOv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DV9irFZ0.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-qZXANgNr.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DV9irFZ0.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-qZXANgNr.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DO4bTKKo.mjs → acorex-modules-assessment-management-question-bank-item.entity-Dp4eYR3O.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DO4bTKKo.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-Dp4eYR3O.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-B-N0v4zs.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-BMB9IEIv.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-B-N0v4zs.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-BMB9IEIv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-Cc-o6qmY.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-DgC1xuH9.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-Cc-o6qmY.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-DgC1xuH9.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CJWNlaJs.mjs → acorex-modules-assessment-management-questionnaire.entity-ChUNq9Bc.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CJWNlaJs.mjs.map → acorex-modules-assessment-management-questionnaire.entity-ChUNq9Bc.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-C3gOkZa5.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-sji05ut4.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-C3gOkZa5.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-sji05ut4.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-AvTbWvGE.mjs → acorex-modules-assessment-management-view-session-answers.command-BIpotfIE.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-AvTbWvGE.mjs.map → acorex-modules-assessment-management-view-session-answers.command-BIpotfIE.mjs.map} +1 -1
- package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
- package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-DrIhRaZ6.mjs → acorex-modules-asset-management-acorex-modules-asset-management-fQ0rp8vu.mjs} +765 -131
- package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-fQ0rp8vu.mjs.map +1 -0
- package/fesm2022/acorex-modules-asset-management-asset-rental-history-status.provider-BiWf2TwD.mjs +118 -0
- package/fesm2022/acorex-modules-asset-management-asset-rental-history-status.provider-BiWf2TwD.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-HqZtfJpe.mjs → acorex-modules-asset-management-asset-system-assignment.entity-DuFgujR6.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-HqZtfJpe.mjs.map → acorex-modules-asset-management-asset-system-assignment.entity-DuFgujR6.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-fvrbyjXb.mjs → acorex-modules-asset-management-asset-system-type.entity-sszGMFny.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-fvrbyjXb.mjs.map → acorex-modules-asset-management-asset-system-type.entity-sszGMFny.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-system.entity-DVAaXNWx.mjs → acorex-modules-asset-management-asset-system.entity-tWUPNYQq.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-system.entity-DVAaXNWx.mjs.map → acorex-modules-asset-management-asset-system.entity-tWUPNYQq.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-n-bxBcGz.mjs → acorex-modules-asset-management-asset-type-section-component.entity-l3xXMo2l.mjs} +32 -31
- package/fesm2022/acorex-modules-asset-management-asset-type-section-component.entity-l3xXMo2l.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-BF7N699p.mjs → acorex-modules-asset-management-asset-type-section.entity-CldvQBUW.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-BF7N699p.mjs.map → acorex-modules-asset-management-asset-type-section.entity-CldvQBUW.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-type.entity-Dt61Rs4F.mjs → acorex-modules-asset-management-asset-type.entity-CP0dryvp.mjs} +108 -28
- package/fesm2022/acorex-modules-asset-management-asset-type.entity-CP0dryvp.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset.entity-BzlsaEwC.mjs → acorex-modules-asset-management-asset.entity-Du_fWe9V.mjs} +21 -230
- package/fesm2022/acorex-modules-asset-management-asset.entity-Du_fWe9V.mjs.map +1 -0
- package/fesm2022/acorex-modules-asset-management.mjs +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-BUtk_RQC.mjs → acorex-modules-auth-acorex-modules-auth-CGiDe3e-.mjs} +13 -13
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-BUtk_RQC.mjs.map → acorex-modules-auth-acorex-modules-auth-CGiDe3e-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-app-chooser.component-DnVYLE4q.mjs → acorex-modules-auth-app-chooser.component-Dt_2eXel.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-DnVYLE4q.mjs.map → acorex-modules-auth-app-chooser.component-Dt_2eXel.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-Be-fhX-L.mjs → acorex-modules-auth-login.module-Bl8pAhHc.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-Be-fhX-L.mjs.map → acorex-modules-auth-login.module-Bl8pAhHc.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-6n06jHF4.mjs → acorex-modules-auth-master.layout-B8GSev0J.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-6n06jHF4.mjs.map → acorex-modules-auth-master.layout-B8GSev0J.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-B_u8aKEs.mjs → acorex-modules-auth-oauth-callback.component-DleQ24IP.mjs} +3 -3
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-B_u8aKEs.mjs.map → acorex-modules-auth-oauth-callback.component-DleQ24IP.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-Bz6qjJ_G.mjs → acorex-modules-auth-password.component-C1GbARlM.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-Bz6qjJ_G.mjs.map → acorex-modules-auth-password.component-C1GbARlM.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-w9qdHuT5.mjs → acorex-modules-auth-password.component-D6ALMoO4.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-w9qdHuT5.mjs.map → acorex-modules-auth-password.component-D6ALMoO4.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-CUbjrK-J.mjs → acorex-modules-auth-routes-FDp1SEZA.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-CUbjrK-J.mjs.map → acorex-modules-auth-routes-FDp1SEZA.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-settings.provider-DkhbuDBO.mjs → acorex-modules-auth-settings.provider-CN7Lb38l.mjs} +26 -31
- package/fesm2022/acorex-modules-auth-settings.provider-CN7Lb38l.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-D_cV-RUp.mjs → acorex-modules-auth-tenant-chooser.component-o55sauLG.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-D_cV-RUp.mjs.map → acorex-modules-auth-tenant-chooser.component-o55sauLG.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-ok-nT2VM.mjs → acorex-modules-auth-two-factor.module-CVrYPw5D.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor.module-ok-nT2VM.mjs.map → acorex-modules-auth-two-factor.module-CVrYPw5D.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-user-sessions.component-Cmrx3_vM.mjs → acorex-modules-auth-user-sessions.component-BVglZAnc.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-user-sessions.component-Cmrx3_vM.mjs.map → acorex-modules-auth-user-sessions.component-BVglZAnc.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/{acorex-modules-common-search-popup.component-UIz5Bphx.mjs → acorex-modules-common-search-popup.component-BbRyjGia.mjs} +2 -2
- package/fesm2022/{acorex-modules-common-search-popup.component-UIz5Bphx.mjs.map → acorex-modules-common-search-popup.component-BbRyjGia.mjs.map} +1 -1
- package/fesm2022/acorex-modules-common.mjs +10 -35
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management-of3UnjxP.mjs → acorex-modules-content-management-acorex-modules-content-management-CO8lZb34.mjs} +40 -6
- package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-CO8lZb34.mjs.map +1 -0
- package/fesm2022/{acorex-modules-content-management-permission-definition.provider-DnjtPg6f.mjs → acorex-modules-content-management-permission-definition.provider-Bcq5uOVH.mjs} +2 -2
- package/fesm2022/{acorex-modules-content-management-permission-definition.provider-DnjtPg6f.mjs.map → acorex-modules-content-management-permission-definition.provider-Bcq5uOVH.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-BKHvQiql.mjs → acorex-modules-content-management-template-content-editor-widget-edit.component-D_q_xWeI.mjs} +59 -16
- package/fesm2022/acorex-modules-content-management-template-content-editor-widget-edit.component-D_q_xWeI.mjs.map +1 -0
- package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-q1Se62Hd.mjs → acorex-modules-content-management-template-content-editor-widget-view.component-DU5y6UxK.mjs} +15 -5
- package/fesm2022/acorex-modules-content-management-template-content-editor-widget-view.component-DU5y6UxK.mjs.map +1 -0
- package/fesm2022/acorex-modules-content-management.mjs +1 -1
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-BJU2_R9O.mjs +6155 -0
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-BJU2_R9O.mjs.map +1 -0
- package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DX2JPckF.mjs +324 -0
- package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DX2JPckF.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-comments-page.component-DnAbpVxZ.mjs → acorex-modules-conversation-comments-page.component-Bg6m7UTG.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-comments-page.component-DnAbpVxZ.mjs.map → acorex-modules-conversation-comments-page.component-Bg6m7UTG.mjs.map} +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +1 -7353
- package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
- package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLndkp6w.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-D11VudG8.mjs} +6 -7
- package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-D11VudG8.mjs.map +1 -0
- package/fesm2022/{acorex-modules-dashboard-management-index-c8QzHHtG.mjs → acorex-modules-dashboard-management-index-DB3Uh1wL.mjs} +2 -2
- package/fesm2022/{acorex-modules-dashboard-management-index-c8QzHHtG.mjs.map → acorex-modules-dashboard-management-index-DB3Uh1wL.mjs.map} +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +4 -4
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-document-management-large-tiles-view.component-BZWN7WCX.mjs +24 -0
- package/fesm2022/acorex-modules-document-management-large-tiles-view.component-BZWN7WCX.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management-small-tiles-view.component-DI6QQ2St.mjs +24 -0
- package/fesm2022/acorex-modules-document-management-small-tiles-view.component-DI6QQ2St.mjs.map +1 -0
- package/fesm2022/acorex-modules-document-management.mjs +209 -397
- package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-form-template-management-template-picker.component-GHXF4eT3.mjs → acorex-modules-form-template-management-template-picker.component-CtTkFhXf.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-template-picker.component-GHXF4eT3.mjs.map → acorex-modules-form-template-management-template-picker.component-CtTkFhXf.mjs.map} +1 -1
- package/fesm2022/acorex-modules-form-template-management.mjs +14 -18
- package/fesm2022/acorex-modules-form-template-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bgsi3FHG.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bwk3-2wy.mjs} +90 -79
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bwk3-2wy.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-CxpTmb-1.mjs → acorex-modules-human-capital-management-approve-leave-request.command-B5aSubCY.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-CxpTmb-1.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-B5aSubCY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-jLGe49dJ.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-l8dGe3kg.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-jLGe49dJ.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-l8dGe3kg.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-ChNGu90e.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-CeV-5Y5n.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-ChNGu90e.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-CeV-5Y5n.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee.entity-4k7F7_ON.mjs → acorex-modules-human-capital-management-employee.entity-DNgt9yQm.mjs} +4 -2
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-DNgt9yQm.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Jo2fB9R3.mjs → acorex-modules-human-capital-management-employment-type.entity-rq8-Bauc.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Jo2fB9R3.mjs.map → acorex-modules-human-capital-management-employment-type.entity-rq8-Bauc.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-DhLUXnJu.mjs → acorex-modules-human-capital-management-leave-request.entity-DlQJw4F6.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-DhLUXnJu.mjs.map → acorex-modules-human-capital-management-leave-request.entity-DlQJw4F6.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-C-lN2bb0.mjs → acorex-modules-human-capital-management-leave-type.entity-D5J2oOuY.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-C-lN2bb0.mjs.map → acorex-modules-human-capital-management-leave-type.entity-D5J2oOuY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-BD1jN4Mx.mjs → acorex-modules-human-capital-management-position-assignment.entity-D7mKhxYp.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-BD1jN4Mx.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-D7mKhxYp.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-D0G6UrqI.mjs → acorex-modules-human-capital-management-reject-leave-request.command-C4AWFOmG.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-D0G6UrqI.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-C4AWFOmG.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-CYzqQXja.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-BSJhBW3p.mjs} +28 -17
- package/fesm2022/acorex-modules-human-capital-management-revoke-position-assignment.command-BSJhBW3p.mjs.map +1 -0
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/acorex-modules-locale-management.mjs +72 -70
- package/fesm2022/acorex-modules-locale-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-location-management.mjs +20 -10
- package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-acorex-modules-maintenance-management-B5wf4zMI.mjs → acorex-modules-maintenance-management-acorex-modules-maintenance-management-C0LLBxMR.mjs} +40 -38
- package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-C0LLBxMR.mjs.map +1 -0
- package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-Cv5KnboB.mjs → acorex-modules-maintenance-management-failure-effect.entity-D8yOqKWQ.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-Cv5KnboB.mjs.map → acorex-modules-maintenance-management-failure-effect.entity-D8yOqKWQ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-BBL3-hfv.mjs → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CHXkbEHG.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-BBL3-hfv.mjs.map → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CHXkbEHG.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-nxOdHZxu.mjs → acorex-modules-maintenance-management-failure-mode-mechanism.entity-yR11e9TU.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-nxOdHZxu.mjs.map → acorex-modules-maintenance-management-failure-mode-mechanism.entity-yR11e9TU.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-ApD80Scc.mjs → acorex-modules-maintenance-management-failure-mode-solution.entity-BD4Uz6G-.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-ApD80Scc.mjs.map → acorex-modules-maintenance-management-failure-mode-solution.entity-BD4Uz6G-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-CibfwJLG.mjs → acorex-modules-maintenance-management-failure-register-cause.entity-CZFgl-t4.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-CibfwJLG.mjs.map → acorex-modules-maintenance-management-failure-register-cause.entity-CZFgl-t4.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DpoqULBf.mjs → acorex-modules-maintenance-management-failure-register-effect.entity-DQE5nqiN.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DpoqULBf.mjs.map → acorex-modules-maintenance-management-failure-register-effect.entity-DQE5nqiN.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-0-J2Hkmn.mjs → acorex-modules-maintenance-management-failure-register-mechanism.entity-C6mhbWzU.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-0-J2Hkmn.mjs.map → acorex-modules-maintenance-management-failure-register-mechanism.entity-C6mhbWzU.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-C4Az4Rr9.mjs → acorex-modules-maintenance-management-failure-register.entity-DSnrVaWI.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-C4Az4Rr9.mjs.map → acorex-modules-maintenance-management-failure-register.entity-DSnrVaWI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BZo6UUun.mjs → acorex-modules-maintenance-management-failure-severity.entity-DZoMhgW7.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BZo6UUun.mjs.map → acorex-modules-maintenance-management-failure-severity.entity-DZoMhgW7.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-maintenance-template.entity-DxYY0hpG.mjs → acorex-modules-maintenance-management-maintenance-template.entity-qf2WNKB_.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-maintenance-template.entity-DxYY0hpG.mjs.map → acorex-modules-maintenance-management-maintenance-template.entity-qf2WNKB_.mjs.map} +1 -1
- package/fesm2022/acorex-modules-maintenance-management.mjs +1 -1
- package/fesm2022/{acorex-modules-notification-management-notification-page.component-D0we6H1f.mjs → acorex-modules-notification-management-notification-page.component-B017YY1H.mjs} +2 -2
- package/fesm2022/{acorex-modules-notification-management-notification-page.component-D0we6H1f.mjs.map → acorex-modules-notification-management-notification-page.component-B017YY1H.mjs.map} +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +369 -45
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-order-management-settings.provider-BzNJIZCu.mjs → acorex-modules-order-management-settings.provider-DF8JQ1PZ.mjs} +6 -11
- package/fesm2022/acorex-modules-order-management-settings.provider-DF8JQ1PZ.mjs.map +1 -0
- package/fesm2022/acorex-modules-order-management.mjs +2 -2
- package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-Bu8fRj_5.mjs → acorex-modules-organization-management-acorex-modules-organization-management-Dqhk5reQ.mjs} +479 -89
- package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-Dqhk5reQ.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-add-business-unit-to-business-unit.command-pnxqURIQ.mjs +165 -0
- package/fesm2022/acorex-modules-organization-management-add-business-unit-to-business-unit.command-pnxqURIQ.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-Qej_boIY.mjs → acorex-modules-organization-management-add-position-to-business-unit.command-DbHKd1Nd.mjs} +32 -2
- package/fesm2022/acorex-modules-organization-management-add-position-to-business-unit.command-DbHKd1Nd.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-business-unit.entity-BfQ_7JAq.mjs → acorex-modules-organization-management-business-unit.entity-FsF290Im.mjs} +38 -5
- package/fesm2022/acorex-modules-organization-management-business-unit.entity-FsF290Im.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-chart.entity-CNQGGfHV.mjs → acorex-modules-organization-management-chart.entity-_OJkO2zX.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-chart.entity-CNQGGfHV.mjs.map → acorex-modules-organization-management-chart.entity-_OJkO2zX.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-company.entity-D_nTKLzu.mjs → acorex-modules-organization-management-company.entity-Dw7_BvxV.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-company.entity-D_nTKLzu.mjs.map → acorex-modules-organization-management-company.entity-Dw7_BvxV.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-entity.provider-B4uYixLQ.mjs → acorex-modules-organization-management-entity.provider-BWw2RN_V.mjs} +15 -15
- package/fesm2022/{acorex-modules-organization-management-entity.provider-B4uYixLQ.mjs.map → acorex-modules-organization-management-entity.provider-BWw2RN_V.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-COjc6knz.mjs → acorex-modules-organization-management-feature-definition.provider-D3WYwpy0.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-COjc6knz.mjs.map → acorex-modules-organization-management-feature-definition.provider-D3WYwpy0.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-gDpII9TZ.mjs → acorex-modules-organization-management-job-definition-pages-component.provider-CnS_nu1v.mjs} +3 -3
- package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-gDpII9TZ.mjs.map → acorex-modules-organization-management-job-definition-pages-component.provider-CnS_nu1v.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-CjXV4wrM.mjs → acorex-modules-organization-management-job-definition-responsibilities-page.component-ZTopEh2M.mjs} +3 -3
- package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-CjXV4wrM.mjs.map → acorex-modules-organization-management-job-definition-responsibilities-page.component-ZTopEh2M.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-2XBgMms-.mjs → acorex-modules-organization-management-job-definition-skills-page.component-Yyzwqg0v.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-2XBgMms-.mjs.map → acorex-modules-organization-management-job-definition-skills-page.component-Yyzwqg0v.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition.entity-f0JnkdjP.mjs → acorex-modules-organization-management-job-definition.entity-DJjmv1hf.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-definition.entity-f0JnkdjP.mjs.map → acorex-modules-organization-management-job-definition.entity-DJjmv1hf.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-level.datasource-ByHluGvc.mjs → acorex-modules-organization-management-job-level.datasource-DJH3zaNN.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-level.datasource-ByHluGvc.mjs.map → acorex-modules-organization-management-job-level.datasource-DJH3zaNN.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-level.entity-BJJJQxCp.mjs → acorex-modules-organization-management-job-level.entity-DBEFEBzu.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-level.entity-BJJJQxCp.mjs.map → acorex-modules-organization-management-job-level.entity-DBEFEBzu.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-menu.provider-Dd_Z58sY.mjs → acorex-modules-organization-management-menu.provider-yGn338K1.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-menu.provider-Dd_Z58sY.mjs.map → acorex-modules-organization-management-menu.provider-yGn338K1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-fudrNddI.mjs → acorex-modules-organization-management-org-chart.page-C1J123cl.mjs} +35 -48
- package/fesm2022/acorex-modules-organization-management-org-chart.page-C1J123cl.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-CoB_RGSa.mjs → acorex-modules-organization-management-permission-definition.provider-B1f668X4.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-CoB_RGSa.mjs.map → acorex-modules-organization-management-permission-definition.provider-B1f668X4.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-position.entity-T1DY1fZn.mjs → acorex-modules-organization-management-position.entity-BvSjM5Hs.mjs} +6 -2
- package/fesm2022/acorex-modules-organization-management-position.entity-BvSjM5Hs.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-remove-position-from-business-unit.command-CPdbVSno.mjs +92 -0
- package/fesm2022/acorex-modules-organization-management-remove-position-from-business-unit.command-CPdbVSno.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-replace-position-assignee.command-CQRcVN6R.mjs +66 -0
- package/fesm2022/acorex-modules-organization-management-replace-position-assignee.command-CQRcVN6R.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CIPzMi3d.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-Ce3T04Qb.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CIPzMi3d.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-Ce3T04Qb.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DzdTNVP6.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CIr7JDX-.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DzdTNVP6.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CIr7JDX-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-C850Dz47.mjs → acorex-modules-organization-management-responsibilities-matrix.component-BXWso7Ga.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-C850Dz47.mjs.map → acorex-modules-organization-management-responsibilities-matrix.component-BXWso7Ga.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CVxWva5x.mjs → acorex-modules-organization-management-responsibility-level.entity-DB04XTJ8.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CVxWva5x.mjs.map → acorex-modules-organization-management-responsibility-level.entity-DB04XTJ8.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibility.entity-BmDZhqNl.mjs → acorex-modules-organization-management-responsibility.entity-BMqhYqJS.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibility.entity-BmDZhqNl.mjs.map → acorex-modules-organization-management-responsibility.entity-BMqhYqJS.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-settings.provider-wwGKyBrV.mjs → acorex-modules-organization-management-settings.provider-BhIJkbq_.mjs} +21 -24
- package/fesm2022/acorex-modules-organization-management-settings.provider-BhIJkbq_.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-BmXLb4RI.mjs → acorex-modules-organization-management-team-business-unit.entity-DkTtZv7y.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-BmXLb4RI.mjs.map → acorex-modules-organization-management-team-business-unit.entity-DkTtZv7y.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-C4DGSm2r.mjs → acorex-modules-organization-management-team-member-role.entity-DPqEPpkP.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-C4DGSm2r.mjs.map → acorex-modules-organization-management-team-member-role.entity-DPqEPpkP.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-team-member.entity-CvVHEzIU.mjs → acorex-modules-organization-management-team-member.entity-IN-CPv5W.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-team-member.entity-CvVHEzIU.mjs.map → acorex-modules-organization-management-team-member.entity-IN-CPv5W.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-team.entity-urjULfNp.mjs → acorex-modules-organization-management-team.entity-D7B8ulFX.mjs} +3 -2
- package/fesm2022/acorex-modules-organization-management-team.entity-D7B8ulFX.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management.mjs +1 -1
- package/fesm2022/acorex-modules-person-core-gender.entity-DQVC2nR1.mjs +121 -0
- package/fesm2022/acorex-modules-person-core-gender.entity-DQVC2nR1.mjs.map +1 -0
- package/fesm2022/acorex-modules-person-core-marital-status.entity-Bcrni-xU.mjs +121 -0
- package/fesm2022/acorex-modules-person-core-marital-status.entity-Bcrni-xU.mjs.map +1 -0
- package/fesm2022/acorex-modules-person-core-person-title.entity-h53llLF9.mjs +121 -0
- package/fesm2022/acorex-modules-person-core-person-title.entity-h53llLF9.mjs.map +1 -0
- package/fesm2022/acorex-modules-person-core.mjs +151 -295
- package/fesm2022/acorex-modules-person-core.mjs.map +1 -1
- package/fesm2022/{acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs → acorex-modules-platform-dev-tools-settings.provider-DKmgBUYt.mjs} +2 -2
- package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-DKmgBUYt.mjs.map +1 -0
- package/fesm2022/acorex-modules-platform-dev-tools.mjs +2 -2
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-CZMqG3Eq.mjs → acorex-modules-platform-management-acorex-modules-platform-management-DkOzj2Oy.mjs} +12 -4
- package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-DkOzj2Oy.mjs.map +1 -0
- package/fesm2022/acorex-modules-platform-management-entity-master-actions-for-ai.util-OCk5eqQz.mjs +56 -0
- package/fesm2022/acorex-modules-platform-management-entity-master-actions-for-ai.util-OCk5eqQz.mjs.map +1 -0
- package/fesm2022/acorex-modules-platform-management-list-platform-navigation-for-ai.query-C3-eBMwF.mjs +198 -0
- package/fesm2022/acorex-modules-platform-management-list-platform-navigation-for-ai.query-C3-eBMwF.mjs.map +1 -0
- package/fesm2022/{acorex-modules-platform-management-list-registered-entities.query-B6-zV_Ml.mjs → acorex-modules-platform-management-list-registered-entities.query-BZVD9YPU.mjs} +26 -4
- package/fesm2022/acorex-modules-platform-management-list-registered-entities.query-BZVD9YPU.mjs.map +1 -0
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-BRA7Q50z.mjs → acorex-modules-platform-management-menu-list.component-agWZWchQ.mjs} +3 -3
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-BRA7Q50z.mjs.map → acorex-modules-platform-management-menu-list.component-agWZWchQ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs → acorex-modules-report-management-report-runner-root-page.component-B-NoGoOJ.mjs} +2 -2
- package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs.map → acorex-modules-report-management-report-runner-root-page.component-B-NoGoOJ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-report-management.mjs +7 -7
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +1 -1
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-BaDnebTm.mjs → acorex-modules-settings-management-acorex-modules-settings-management-oArHHeSx.mjs} +88 -13
- package/fesm2022/acorex-modules-settings-management-acorex-modules-settings-management-oArHHeSx.mjs.map +1 -0
- package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-cuuhKUJ1.mjs → acorex-modules-settings-management-permission-definition.provider-BsFyZ-gS.mjs} +2 -2
- package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-cuuhKUJ1.mjs.map → acorex-modules-settings-management-permission-definition.provider-BsFyZ-gS.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-settings-management-setting-page.component-CWIs93_1.mjs → acorex-modules-settings-management-setting-page.component-BftWms4f.mjs} +5 -4
- package/fesm2022/acorex-modules-settings-management-setting-page.component-BftWms4f.mjs.map +1 -0
- package/fesm2022/{acorex-modules-settings-management-setting-view.component-BTexlmU1.mjs → acorex-modules-settings-management-setting-view.component-paKdiSEr.mjs} +2 -2
- package/fesm2022/{acorex-modules-settings-management-setting-view.component-BTexlmU1.mjs.map → acorex-modules-settings-management-setting-view.component-paKdiSEr.mjs.map} +1 -1
- package/fesm2022/acorex-modules-settings-management.mjs +1 -1
- package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-it-Lf0L_.mjs → acorex-modules-task-management-acorex-modules-task-management-CWlgXg_u.mjs} +26 -29
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-CWlgXg_u.mjs.map +1 -0
- package/fesm2022/{acorex-modules-task-management-task-board.page-DF4XWz_0.mjs → acorex-modules-task-management-task-board.page-Bxpga0DN.mjs} +3 -3
- package/fesm2022/{acorex-modules-task-management-task-board.page-DF4XWz_0.mjs.map → acorex-modules-task-management-task-board.page-Bxpga0DN.mjs.map} +1 -1
- package/fesm2022/acorex-modules-task-management.mjs +1 -1
- package/fesm2022/acorex-modules-tenant-management.mjs +3 -7
- package/fesm2022/acorex-modules-tenant-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-workflow-management.mjs +0 -7
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/organization-management/README.md +1 -1
- package/package.json +2 -2
- package/platform-management/README.md +4 -0
- package/types/acorex-modules-ai-management.d.ts +150 -527
- package/types/acorex-modules-application-management.d.ts +5 -2
- package/types/acorex-modules-asset-management.d.ts +19 -87
- package/types/acorex-modules-common.d.ts +3 -6
- package/types/acorex-modules-content-management.d.ts +22 -5
- package/types/acorex-modules-conversation.d.ts +60 -4
- package/types/acorex-modules-document-management.d.ts +53 -22
- package/types/acorex-modules-human-capital-management.d.ts +15 -10
- package/types/acorex-modules-location-management.d.ts +9 -1
- package/types/acorex-modules-maintenance-management.d.ts +0 -2
- package/types/acorex-modules-notification-management.d.ts +68 -6
- package/types/acorex-modules-organization-management.d.ts +46 -4
- package/types/acorex-modules-person-core.d.ts +61 -4
- package/types/acorex-modules-settings-management.d.ts +3 -0
- package/types/acorex-modules-task-management.d.ts +0 -1
- package/types/acorex-modules-tenant-management.d.ts +0 -1
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-D7_4LOGV.mjs +0 -8666
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-D7_4LOGV.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C7TQMwX4.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-agent.entity-DwPIKib2.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D2GJ5qD1.mjs +0 -1254
- package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D2GJ5qD1.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BozVAuLO.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-index-DaGJVOFw.mjs +0 -2
- package/fesm2022/acorex-modules-ai-management-index-DaGJVOFw.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-DrIhRaZ6.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-rental-history.entity-95NBXoex.mjs +0 -302
- package/fesm2022/acorex-modules-asset-management-asset-rental-history.entity-95NBXoex.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-state-history.entity-C-z103la.mjs +0 -258
- package/fesm2022/acorex-modules-asset-management-asset-state-history.entity-C-z103la.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-status.rules-B7KwWQEe.mjs +0 -98
- package/fesm2022/acorex-modules-asset-management-asset-status.rules-B7KwWQEe.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-type-section-component.entity-n-bxBcGz.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-type.entity-Dt61Rs4F.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset.entity-BzlsaEwC.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-assetLifecycle-state.provider-DZ5r2zx7.mjs +0 -192
- package/fesm2022/acorex-modules-asset-management-assetLifecycle-state.provider-DZ5r2zx7.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-status.provider-C41t4e2U.mjs +0 -363
- package/fesm2022/acorex-modules-asset-management-status.provider-C41t4e2U.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-settings.provider-DkhbuDBO.mjs.map +0 -1
- package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-of3UnjxP.mjs.map +0 -1
- package/fesm2022/acorex-modules-content-management-template-content-editor-widget-edit.component-BKHvQiql.mjs.map +0 -1
- package/fesm2022/acorex-modules-content-management-template-content-editor-widget-view.component-q1Se62Hd.mjs.map +0 -1
- package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLndkp6w.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-large-tiles-view.component-CSHUgcLx.mjs +0 -24
- package/fesm2022/acorex-modules-document-management-large-tiles-view.component-CSHUgcLx.mjs.map +0 -1
- package/fesm2022/acorex-modules-document-management-small-tiles-view.component-BQSgUw6o.mjs +0 -24
- package/fesm2022/acorex-modules-document-management-small-tiles-view.component-BQSgUw6o.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bgsi3FHG.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-4k7F7_ON.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-revoke-position-assignment.command-CYzqQXja.mjs.map +0 -1
- package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-B5wf4zMI.mjs.map +0 -1
- package/fesm2022/acorex-modules-order-management-settings.provider-BzNJIZCu.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-Bu8fRj_5.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-add-position-to-business-unit.command-Qej_boIY.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-business-unit.entity-BfQ_7JAq.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-fudrNddI.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-position.entity-T1DY1fZn.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-settings.provider-wwGKyBrV.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-team.entity-urjULfNp.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-CZMqG3Eq.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-list-registered-entities.query-B6-zV_Ml.mjs.map +0 -1
- package/fesm2022/acorex-modules-settings-management-acorex-modules-settings-management-BaDnebTm.mjs.map +0 -1
- package/fesm2022/acorex-modules-settings-management-setting-page.component-CWIs93_1.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-it-Lf0L_.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-task-management-task-board.page-DF4XWz_0.mjs","sources":["../../../../libs/modules/task-management/src/lib/features/task-board/task-board.viewmodel.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-filters/task-board-filters.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-filters/task-board-filters.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-menu.definition.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.page.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.page.html"],"sourcesContent":["import { AXSchedulerView } from '@acorex/components/scheduler';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { AXMTaskBoardSettings } from './settings.keys';\nimport { AXM_TASK_BOARD_ALL_VIEW_MODE_IDS, normalizeVisibleTaskBoardModesByParts } from './task-board-view-mode-ids';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPTask, AXPWorkflowTaskProvider } from './task-board.types';\n\ntype AXPTaskPriority = NonNullable<AXPTask['priority']>;\nexport type AXPPriorityFilterKey = AXPTaskPriority | 'no_priority';\nexport type AXPTaskBoardViewMode = AXSchedulerView | 'kanban' | 'grid' | 'status-grouped-grid';\n\ntype AXPTaskBoardState = {\n daysCount: number;\n currentDate: Date;\n isLoading: boolean;\n detailPanel: boolean;\n rangeStartDate: Date | null;\n selectedTask: AXPTask | null;\n selectedTaskTypeNames: string[];\n taskTypes: AXPWorkflowTaskProvider[];\n currentViewMode: AXPTaskBoardViewMode;\n /** Modes the user may select (from settings). */\n visibleViewModes: AXPTaskBoardViewMode[];\n selectedPriorities: AXPPriorityFilterKey[];\n selectedAssigneeIds: (string | number)[];\n selectedReporterIds: (string | number)[];\n selectedCalendarEventTypeIds: string[];\n};\n\nexport const AXMTaskBoardViewModel = signalStore(\n { providedIn: 'root' },\n withState<AXPTaskBoardState>(() => ({\n daysCount: 7,\n taskTypes: [],\n isLoading: true,\n detailPanel: false,\n selectedTask: null,\n rangeStartDate: null,\n currentDate: new Date(),\n currentViewMode: 'month',\n visibleViewModes: [...AXM_TASK_BOARD_ALL_VIEW_MODE_IDS] as AXPTaskBoardViewMode[],\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n selectedPriorities: [],\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n })),\n\n withComputed((store) => ({\n selectedTaskTypes: computed(() => {\n const names = store.selectedTaskTypeNames();\n if (!names || names.length === 0) {\n return [];\n }\n return store.taskTypes().filter((tt) => names.includes(tt.name));\n }),\n isTaskSelected: computed(() => store.selectedTask() !== null),\n isDetailPanelOpen: computed(() => store.detailPanel()),\n endDate: computed(() => {\n const currentDate = store.currentDate();\n const daysCount = store.daysCount();\n // Calculate end of the last day in the range (23:59:59.999)\n const endDate = new Date(currentDate);\n endDate.setDate(endDate.getDate() + daysCount - 1);\n endDate.setHours(23, 59, 59, 999);\n return endDate;\n }),\n activeFilterCount: computed(() => {\n let count = 0;\n if (\n store.currentViewMode() !== 'kanban' &&\n store.currentViewMode() !== 'status-grouped-grid' &&\n store.selectedTaskTypeNames().length > 0\n ) {\n count++;\n }\n if (store.selectedAssigneeIds().length > 0) {\n count++;\n }\n if (store.selectedReporterIds().length > 0) {\n count++;\n }\n if (store.selectedPriorities().length > 0) {\n count++;\n }\n return count;\n }),\n })),\n\n withMethods(\n (\n store,\n settingsService = inject(AXPSettingsService),\n taskBoardService = inject(AXPTaskBoardService),\n sessionService = inject(AXPSessionService),\n ) => {\n const userScopedSettings = () => settingsService.scope(AXPPlatformScope.User);\n\n return {\n async initialize() {\n patchState(store, { isLoading: true });\n try {\n const taskTypes = await taskBoardService.getTaskTypes();\n patchState(store, { taskTypes });\n\n const [\n savedDaysCount,\n savedDateString,\n savedDetailPanel,\n savedViewMode,\n savedVisibleCalendarModes,\n savedVisibleTimelineModes,\n savedVisibleTableModes,\n savedVisibleKanbanModes,\n savedTaskTypeNames,\n savedAssigneeIds,\n savedReporterIds,\n savedPriorities,\n savedCalendarEventTypeIds,\n ] = await Promise.all([\n userScopedSettings().get<number | undefined>(AXMTaskBoardSettings.DaysCount),\n userScopedSettings().get<string | undefined>(AXMTaskBoardSettings.CurrentDate),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.DetailPanel),\n userScopedSettings().get<AXPTaskBoardViewMode | undefined>(AXMTaskBoardSettings.ViewMode),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.VisibleCalendarModes),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.VisibleTimelineModes),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.VisibleTableModes),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.VisibleKanbanModes),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.SelectedTaskTypeNames),\n userScopedSettings().get<(string | number)[] | undefined>(AXMTaskBoardSettings.SelectedAssigneeIds),\n userScopedSettings().get<(string | number)[] | undefined>(AXMTaskBoardSettings.SelectedReporterIds),\n userScopedSettings().get<AXPPriorityFilterKey[] | undefined>(AXMTaskBoardSettings.SelectedPriorities),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.SelectedCalendarEventTypeIds),\n ]);\n\n const visibleViewModes = normalizeVisibleTaskBoardModesByParts({\n calendar: savedVisibleCalendarModes,\n timeline: savedVisibleTimelineModes,\n table: savedVisibleTableModes,\n kanban: savedVisibleKanbanModes,\n }) as AXPTaskBoardViewMode[];\n\n // Ensure currentDate is always a valid Date\n let currentDate: Date;\n if (savedDateString) {\n const parsedDate = new Date(savedDateString);\n currentDate = isNaN(parsedDate.getTime()) ? new Date() : parsedDate;\n } else {\n currentDate = new Date();\n }\n\n const currentUserId = sessionService.user?.id;\n const defaultAssigneeIds =\n savedAssigneeIds === undefined && currentUserId != null ? [currentUserId] : (savedAssigneeIds ?? []);\n\n let effectiveViewMode: AXPTaskBoardViewMode = savedViewMode || 'month';\n if (!visibleViewModes.includes(effectiveViewMode)) {\n effectiveViewMode = visibleViewModes[0] ?? 'month';\n }\n\n if (savedViewMode != null && !visibleViewModes.includes(savedViewMode)) {\n userScopedSettings()\n .set(AXMTaskBoardSettings.ViewMode, effectiveViewMode)\n .catch((error) => console.error('Error aligning task board view mode with visible views:', error));\n }\n\n patchState(store, {\n daysCount: savedDaysCount || 7,\n detailPanel: savedDetailPanel || false,\n currentViewMode: effectiveViewMode,\n visibleViewModes,\n currentDate,\n selectedTaskTypeNames: savedTaskTypeNames || [],\n selectedAssigneeIds: defaultAssigneeIds,\n selectedReporterIds: savedReporterIds || [],\n selectedPriorities: savedPriorities || [],\n selectedCalendarEventTypeIds: savedCalendarEventTypeIds || [],\n isLoading: false,\n });\n } catch (error) {\n console.error('Error initializing TaskBoard ViewModel:', error);\n patchState(store, {\n detailPanel: false,\n currentViewMode: 'month',\n visibleViewModes: [...AXM_TASK_BOARD_ALL_VIEW_MODE_IDS] as AXPTaskBoardViewMode[],\n currentDate: new Date(),\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n selectedPriorities: [],\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n taskTypes: store.taskTypes(),\n isLoading: false,\n });\n }\n },\n\n setViewMode(mode: AXPTaskBoardViewMode) {\n const allowed = store.visibleViewModes();\n const effectiveMode = allowed.includes(mode) ? mode : (allowed[0] ?? mode);\n\n if (\n (effectiveMode === 'kanban' || effectiveMode === 'status-grouped-grid') &&\n store.selectedTaskTypeNames().length === 0\n ) {\n const firstTaskType = store.taskTypes()[0];\n if (firstTaskType) {\n this.setSelectedTaskTypeNames([firstTaskType.name]);\n }\n }\n if (\n (effectiveMode === 'kanban' || effectiveMode === 'status-grouped-grid') &&\n store.selectedTaskTypeNames().length > 1\n ) {\n this.setSelectedTaskTypeNames([store.selectedTaskTypeNames()[0]]);\n }\n patchState(store, { currentViewMode: effectiveMode });\n userScopedSettings()\n .set(AXMTaskBoardSettings.ViewMode, effectiveMode)\n .catch((error) => console.error('Error saving calendar view mode:', error));\n },\n\n setCurrentDate(date: Date) {\n patchState(store, { currentDate: new Date(date) });\n userScopedSettings()\n .set(AXMTaskBoardSettings.CurrentDate, date.toISOString())\n .catch((error) => console.error('Error saving current date:', error));\n },\n\n setSelectedTaskTypeNames(taskTypeNames: string[], isQueryParam: boolean = false) {\n patchState(store, { selectedTaskTypeNames: taskTypeNames });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedTaskTypeNames, taskTypeNames)\n .catch((error) => console.error('Error saving selected task type filter:', error));\n },\n\n setSelectedAssigneeIds(assigneeIds: (string | number)[], isQueryParam: boolean = false) {\n patchState(store, { selectedAssigneeIds: assigneeIds });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedAssigneeIds, assigneeIds)\n .catch((error) => console.error('Error saving selected assignee filter:', error));\n },\n\n setSelectedReporterIds(reporterIds: (string | number)[], isQueryParam: boolean = false) {\n patchState(store, { selectedReporterIds: reporterIds });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedReporterIds, reporterIds)\n .catch((error) => console.error('Error saving selected reporter filter:', error));\n },\n\n setSelectedPriorities(priorities: AXPPriorityFilterKey[], isQueryParam: boolean = false) {\n patchState(store, { selectedPriorities: priorities });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedPriorities, priorities)\n .catch((error) => console.error('Error saving selected priority filter:', error));\n },\n\n setSelectedCalendarEventTypeIds(eventTypeIds: string[], isQueryParam: boolean = false) {\n patchState(store, { selectedCalendarEventTypeIds: eventTypeIds });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedCalendarEventTypeIds, eventTypeIds)\n .catch((error) => console.error('Error saving selected calendar event type filter:', error));\n },\n\n /**\n * Sets the currently selected task. Pass `null` to clear the selection.\n * @param task The task to select, or null.\n */\n selectTask(task: AXPTask | null) {\n patchState(store, { selectedTask: task });\n },\n\n /**\n * A convenience method to clear the currently selected task.\n */\n clearSelectedTask() {\n patchState(store, { selectedTask: null });\n },\n\n openDetailPanel() {\n patchState(store, { detailPanel: true });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, true)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n closeDetailPanel() {\n patchState(store, { detailPanel: false });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, false)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n toggleDetailPanel() {\n const detailPanel = !store.detailPanel();\n patchState(store, { detailPanel: detailPanel });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, detailPanel)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n async getStatusName(key: any, provider: string): Promise<string | null> {\n return taskBoardService.getStatusName(key, provider);\n },\n\n /**\n * Sets the start date for a new range selection.\n * Pass `null` to clear the selection.\n * @param date The start date of the range.\n */\n setRangeStartDate(date: Date | null) {\n patchState(store, { rangeStartDate: date });\n },\n\n setDaysCount(days: number) {\n const count = Math.max(1, days);\n patchState(store, { daysCount: count });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DaysCount, count)\n .catch((error) => console.error('Error saving days count:', error));\n },\n };\n },\n ),\n);\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { RootConfig } from '../../../const';\nimport { AXPTaskBoardService } from '../task-board.service';\nimport { AXPExtraField } from '../task-board.types';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-detail-panel',\n templateUrl: './task-board-detail-panel.component.html',\n styleUrls: ['./task-board-detail-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXTranslatorPipe,\n AXButtonComponent,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXDecoratorIconComponent,\n ],\n})\nexport class AXMTaskBoardDetailPanel {\n protected readonly rootConfig = RootConfig;\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n\n protected statusName = signal<string>('');\n protected extraFields = signal<AXPExtraField[]>([]);\n\n #selectedTaskChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const key = selectedTask?.status.id;\n const provider = selectedTask?.provider;\n if (!provider) return;\n const name = await this.vm.getStatusName(key, provider);\n if (name) this.statusName.set(name);\n });\n\n #selectedTaskTypeChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const selectedTaskType = this.taskBoardService.getProvider(selectedTask?.provider);\n const extraFields = await selectedTaskType?.getExtraFields();\n if (!extraFields) {\n this.extraFields.set([]);\n return;\n }\n this.extraFields.set(extraFields);\n });\n\n protected capitalizeFirstLetter(text: string) {\n return String(text).charAt(0).toUpperCase() + String(text).slice(1);\n }\n}\n","@if (vm.isTaskSelected()) {\n @let nodeInfo = vm.selectedTask();\n <div class=\"__header\">\n <div class=\"__title\">\n <span>{{ nodeInfo?.title }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content\">\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.title' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n @if (nodeInfo?.description) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.description' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.description }}</div>\n </div>\n }\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.start-date' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n {{\n nodeInfo?.startDate\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.end-date' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{\n nodeInfo?.endDate\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.reporter' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{ nodeInfo?.reporter?.fullName }}\n </div>\n </div>\n @if (nodeInfo?.assignee) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.assignee' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.assignee?.fullName }}</div>\n </div>\n }\n @if (statusName()) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.status' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ statusName() }}</div>\n </div>\n }\n @if (nodeInfo?.priority) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.priority' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ capitalizeFirstLetter(nodeInfo?.priority ?? '') }}</div>\n </div>\n }\n @if (extraFields() && extraFields().length) {\n <div class=\"__row\">\n <axp-widgets-container [context]=\"nodeInfo\">\n @for (extraField of extraFields(); track extraField) {\n <div class=\"__title\">\n <span>\n {{ extraField.title | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n <ng-container axp-widget-renderer [node]=\"extraField.widget\" [mode]=\"'view'\"> </ng-container>\n </div>\n }\n </axp-widgets-container>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__header\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.title' | translate | async }}\n </span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content ax-flex ax-items-center ax-justify-center\">\n <axp-state-message\n icon=\"fa-light fa-clipboard-list-check\"\n [title]=\"'@task-management:task-board.detail-panel.no-task-selected.title'\"\n [description]=\"'@task-management:task-board.detail-panel.no-task-selected.description'\"\n >\n </axp-state-message>\n </div>\n}\n","import { AXFormComponent, AXFormFieldComponent } from '@acorex/components/form';\nimport { AXLabelComponent } from '@acorex/components/label';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPContextChangeEvent } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule, AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual, sortBy } from 'lodash-es';\nimport { RootConfig } from '../../../const';\nimport { AXMTaskBoardViewModel, AXPPriorityFilterKey } from '../task-board.viewmodel';\n\ntype TaskType = { name: string; title: string };\ntype Assignee = { id: string | number; [key: string]: any };\ntype Reporter = { id: string | number; [key: string]: any };\ntype Priority = { name: AXPPriorityFilterKey; [key: string]: any };\n\n@Component({\n selector: 'axm-task-board-filters',\n templateUrl: './task-board-filters.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXFormFieldComponent,\n AXPWidgetCoreModule,\n AXFormComponent,\n AXLabelComponent,\n AXTranslatorPipe,\n ],\n})\nexport class AXMTaskBoardFiltersComponent {\n protected readonly rootConfig = RootConfig;\n\n private readonly vm = inject(AXMTaskBoardViewModel);\n\n isQueryParam = input<boolean>(false);\n\n applyClicked = output<void>();\n\n protected context = signal<{ options?: any }>({});\n private isInitialized = false;\n\n #init = effect(() => {\n const isLoading = this.vm.isLoading();\n if (!isLoading && !this.isInitialized) {\n this.resetContextToViewModel();\n this.isInitialized = true;\n }\n });\n\n private readonly VALID_PRIORITIES: { title: string; name: AXPPriorityFilterKey }[] = [\n { title: 'Highest', name: 'highest' },\n { title: 'High', name: 'high' },\n { title: 'Medium', name: 'medium' },\n { title: 'Low', name: 'low' },\n { title: 'Lowest', name: 'lowest' },\n { title: 'No Priority', name: 'no_priority' },\n ];\n\n public resetContextToViewModel(): void {\n const vmTaskTypeNames = this.vm.selectedTaskTypeNames();\n const vmAssigneeIds = this.vm.selectedAssigneeIds();\n const vmReporterIds = this.vm.selectedReporterIds();\n const vmPriorities = this.vm.selectedPriorities();\n const currentViewIsMulti = this.isMultiSelectEnabled();\n\n const taskTypeContextValue = currentViewIsMulti\n ? vmTaskTypeNames\n : vmTaskTypeNames.length > 0\n ? vmTaskTypeNames[0]\n : null;\n\n this.context.set({\n options: {\n priority: vmPriorities,\n assignee: vmAssigneeIds,\n reporter: vmReporterIds,\n taskType: taskTypeContextValue,\n },\n });\n }\n\n private readonly isMultiSelectEnabled = computed<boolean>(() => {\n const viewMode = this.vm.currentViewMode();\n return viewMode !== 'kanban' && viewMode !== 'status-grouped-grid';\n });\n\n protected nodes = computed<AXPWidgetNode[]>(() => [\n {\n name: 'taskType',\n path: 'options.taskType',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n dataSource: 'task-types',\n placeholder: 'Select Task Type',\n multiple: this.isMultiSelectEnabled(),\n allowClear: this.isMultiSelectEnabled(),\n },\n meta: {\n title: 'task-board.filter.task-type',\n },\n },\n {\n name: 'assignee',\n path: 'options.assignee',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: 'users',\n textField: 'displayName',\n placeholder: 'Select Assignee',\n },\n meta: {\n title: 'task-board.filter.assignee',\n },\n },\n {\n name: 'reporter',\n path: 'options.reporter',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: 'users',\n textField: 'displayName',\n placeholder: 'Select Reporter',\n },\n meta: {\n title: 'task-board.filter.reporter',\n },\n },\n {\n name: 'priority',\n path: 'options.priority',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'name',\n textField: 'title',\n direction: 'horizontal',\n placeholder: 'Select Priority',\n dataSource: this.VALID_PRIORITIES,\n },\n meta: {\n title: 'task-board.filter.priority',\n },\n },\n ]);\n\n protected handleContextChanged(e: AXPContextChangeEvent) {\n this.context.set(e.data);\n this.handleApply();\n }\n\n protected handleApply() {\n this.syncTaskTypesToViewModel(this.context()?.options?.taskType);\n this.syncAssigneesToViewModel(this.context()?.options?.assignee);\n this.syncReportersToViewModel(this.context()?.options?.reporter);\n this.syncPrioritiesToViewModel(this.context()?.options?.priority);\n this.applyClicked.emit();\n }\n\n private syncTaskTypesToViewModel(selectedValue: TaskType | TaskType[] | string | string[] | null | undefined) {\n let newNames: string[] = [];\n if (Array.isArray(selectedValue)) {\n newNames = selectedValue.filter((v) => v != null).map((t) => (typeof t === 'string' ? t : t.name));\n } else if (selectedValue) {\n newNames = [typeof selectedValue === 'string' ? selectedValue : selectedValue.name];\n }\n const currentNames = this.vm.selectedTaskTypeNames();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedTaskTypeNames(newNames, this.isQueryParam());\n }\n }\n\n private syncAssigneesToViewModel(selectedAssignees: Assignee[] | (string | number)[] | null | undefined) {\n let newIds: (string | number)[] = [];\n if (Array.isArray(selectedAssignees)) {\n newIds = selectedAssignees\n .filter((v) => v != null)\n .map((t) => (typeof t === 'string' || typeof t === 'number' ? t : t.id));\n }\n const currentIds = this.vm.selectedAssigneeIds();\n if (!isEqual(sortBy(currentIds), sortBy(newIds))) {\n this.vm.setSelectedAssigneeIds(newIds, this.isQueryParam());\n }\n }\n\n private syncReportersToViewModel(selectedReporters: Reporter[] | (string | number)[] | null | undefined) {\n let newIds: (string | number)[] = [];\n if (Array.isArray(selectedReporters)) {\n newIds = selectedReporters\n .filter((v) => v != null)\n .map((t) => (typeof t === 'string' || typeof t === 'number' ? t : t.id));\n }\n const currentIds = this.vm.selectedReporterIds();\n if (!isEqual(sortBy(currentIds), sortBy(newIds))) {\n this.vm.setSelectedReporterIds(newIds, this.isQueryParam());\n }\n }\n\n private syncPrioritiesToViewModel(selectedPriorities: Priority[] | string[] | null | undefined) {\n let newNames: AXPPriorityFilterKey[] = [];\n if (Array.isArray(selectedPriorities)) {\n newNames = selectedPriorities\n .filter((v) => v != null)\n .map((t) => (typeof t === 'string' ? (t as AXPPriorityFilterKey) : t.name));\n }\n const currentNames = this.vm.selectedPriorities();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedPriorities(newNames, this.isQueryParam());\n }\n }\n\n protected handleReset() {\n if (this.vm.currentViewMode() === 'kanban' || this.vm.currentViewMode() === 'status-grouped-grid') {\n const currentOptions = this.context();\n this.context.set({\n options: {\n taskType: currentOptions?.options?.taskType,\n },\n });\n return;\n }\n this.context.set({});\n }\n}\n","<div class=\"ax-px-4 ax-py-3 ax-flex ax-flex-col ax-gap-2 ax-sm ax-w-[20rem]\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"handleContextChanged($event)\">\n <ax-form>\n <div class=\"ax-flex ax-flex-col ax-gap-4\">\n <!-- @if (taskTypeItems()) {\n <ax-form-field>\n <ax-label> </ax-label>\n <ax-selection-list\n [items]=\"taskTypeItems()!\"\n [ngModel]=\"selectedTaskTypeValues()!\"\n (onValueChanged)=\"handleTaskTypeSelectionChange.emit($event.value)\"\n direction=\"vertical\"\n [multiple]=\"multiple()\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n >\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span [class]=\"item.icon ? 'ax-ml-2' : ''\">{{ item.text }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n <ax-select-box\n [dataSource]=\"taskTypeItems()!\"\n [ngModel]=\"selectedTaskTypeValues()!\"\n (onValueChanged)=\"handleTaskTypeSelectionChange.emit($event.value)\"\n [multiple]=\"multiple()\"\n valueField=\"id\"\n textField=\"text\"\n >\n </ax-select-box>\n </ax-form-field>\n <hr />\n } -->\n @for (node of nodes(); track $index) {\n <ax-form-field>\n @if (node.meta?.['title']) {\n <ax-label>\n {{ node.meta?.['title'] | translate: { scope: rootConfig.config.i18n } | async }}\n </ax-label>\n }\n <ng-container axp-widget-renderer [node]=\"node\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n </div>\n <!-- <div class=\"ax-flex ax-gap-2 ax-mt-6 ax-mb-1\">\n <ax-button\n (onClick)=\"handleReset()\"\n class=\"ax-w-full\"\n [text]=\"'@general:actions.clear.title' | translate | async\"\n ></ax-button>\n <ax-button\n color=\"primary\"\n [type]=\"'submit'\"\n (onClick)=\"handleApply()\"\n class=\"ax-w-full\"\n [text]=\"'@general:actions.apply.title' | translate | async\"\n ></ax-button>\n </div> -->\n </ax-form>\n </axp-widgets-container>\n</div>\n","//#region ---- Imports ----\n\nimport type { AXPTaskBoardViewMode } from './task-board.viewmodel';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPTaskBoardViewCategory = 'calendar' | 'timeline' | 'table' | 'kanban';\n\nexport type AXMTaskBoardMenuCategoryItem = {\n key: AXPTaskBoardViewCategory;\n text: string;\n icon: string;\n children?: { key: AXPTaskBoardViewMode; text: string; icon: string }[];\n};\n\n//#endregion\n\n//#region ---- Menu Definition ----\n\n/** Default task board view selector structure (filtered by user preference for visible modes). */\nexport const AXM_TASK_BOARD_MENU_ITEMS: readonly AXMTaskBoardMenuCategoryItem[] = [\n {\n key: 'calendar',\n text: 'calendar',\n icon: 'fa-light fa-calendar-day',\n children: [\n { key: 'day', text: 'daily', icon: 'fa-light fa-calendar-day' },\n { key: 'week', text: 'weekly', icon: 'fa-light fa-calendar-week' },\n { key: 'month', text: 'monthly', icon: 'fa-light fa-calendar-alt' },\n { key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range' },\n ],\n },\n {\n key: 'timeline',\n text: 'timeline',\n icon: 'fa-light fa-list-timeline',\n children: [\n { key: 'timeline-day', text: 'daily-timeline', icon: 'fa-light fa-calendar-day' },\n { key: 'timeline-weekly', text: 'weekly-timeline', icon: 'fa-light fa-calendar-week' },\n { key: 'timeline-month', text: 'monthly-timeline', icon: 'fa-light fa-calendar-alt' },\n { key: 'timeline-year', text: 'yearly-timeline', icon: 'fa-light fa-calendar-range' },\n ],\n },\n {\n key: 'table',\n text: 'table',\n icon: 'fa-light fa-table',\n children: [\n { key: 'grid', text: 'grid', icon: 'fa-light fa-table' },\n { key: 'status-grouped-grid', text: 'status-grouped-grid', icon: 'fa-light fa-table' },\n ],\n },\n { key: 'kanban', text: 'kanban', icon: 'fa-light fa-chart-kanban' },\n];\n\n/**\n * Returns menu branches that contain at least one allowed leaf mode.\n */\nexport function filterTaskBoardMenuByAllowedModes(\n items: readonly AXMTaskBoardMenuCategoryItem[],\n allowed: ReadonlySet<string>,\n): AXMTaskBoardMenuCategoryItem[] {\n const result: AXMTaskBoardMenuCategoryItem[] = [];\n\n for (const category of items) {\n if (!category.children) {\n if (allowed.has(category.key)) {\n result.push(category);\n }\n continue;\n }\n\n const children = category.children.filter((child) => allowed.has(child.key));\n if (children.length > 0) {\n result.push({ ...category, children });\n }\n }\n\n return result;\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport {\n AXDayOfWeekName,\n AXSchedulerAppointmentDataSource,\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerDateRange,\n AXSchedulerService,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n AXSchedulerView,\n} from '@acorex/components/scheduler';\nimport { AXCalendarService, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n Type,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RootConfig } from '../../../../const';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport {\n AXPResource,\n AXPTask,\n AXPTaskAction,\n AXPTaskActionMenuItem,\n AXPTaskPopoverComponent,\n} from '../../task-board.types';\nimport { AXMTaskBoardViewModel, AXPTaskBoardViewMode } from '../../task-board.viewmodel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'axm-task-board-calendar-view',\n templateUrl: './task-board-calendar-view.component.html',\n styleUrls: ['./task-board-calendar-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXSchedulerComponent,\n AXPopoverModule,\n AXButtonModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXTranslationModule,\n ],\n})\nexport class AXMTaskBoardCalendarViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n protected readonly schedulerService = inject(AXSchedulerService);\n private readonly destroyRef = inject(DestroyRef);\n\n schedulerComponent = viewChild(AXSchedulerComponent);\n taskPopover = viewChild.required<AXPopoverComponent>('taskPopover');\n\n protected selectedTask = signal<AXPTask | null>(null);\n protected popoverTarget = signal<HTMLElement | null>(null);\n protected taskActions = signal<AXPTaskActionMenuItem[]>([]);\n protected customComponentType = signal<Type<AXPTaskPopoverComponent> | null>(null);\n\n // Separate primary and secondary actions\n protected primaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'primary');\n });\n\n protected secondaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'secondary');\n });\n\n protected customComponentInputs = computed(() => {\n const task = this.selectedTask();\n if (!task) return null;\n return { task };\n });\n\n resources = input<AXPResource[]>([]);\n refreshNonce = input<number>(0);\n startingDate = input<Date>(new Date());\n selectedView = input<AXPTaskBoardViewMode>('month');\n dataSource = input.required<AXSchedulerAppointmentDataSource>();\n protected firstDayOfWeek = signal<AXDayOfWeekName>('monday');\n protected weekendDays = signal<number[]>([0, 6]);\n\n protected holidays = (range: AXSchedulerDateRange): Promise<AXHolidayDate[]> => {\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n // Pass selected calendar IDs (can be empty array to show no events)\n return this.taskBoardService.getEvents(range, selectedEventTypeIds);\n };\n\n protected currentSchedulerView = computed<AXSchedulerView>(() =>\n this.selectedView() === 'kanban' || this.selectedView() === 'grid'\n ? 'month'\n : (this.selectedView() as AXSchedulerView),\n );\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n onMonthSlotDblClicked = output<Date>();\n onActionClick = output<AXPTaskAction>();\n component = output<AXSchedulerComponent>();\n onTaskRightClick = output<AXPTaskAction>();\n onRangeChanged = output<AXSchedulerDateRange>();\n\n private readonly refreshNonceEffect = effect(() => {\n this.refreshNonce();\n this.schedulerComponent()?.refresh();\n });\n\n // async ngOnInit(): Promise<void> {\n // const firstDayOfWeek = await this.settingsService.get(AXPRegionalSetting.FirstDayOfWeek) as unknown as number;\n // const weekDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\n // this.firstDayOfWeek.set(weekDays[firstDayOfWeek] as unknown as AXDayOfWeekName);\n // this.weekendDays.set((await this.settingsService.get(AXPRegionalSetting.WeekendDays)) as unknown as number[]);\n // }\n\n async ngAfterViewInit(): Promise<void> {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const selected = this.selectedTask();\n if (!selected?.provider) return;\n if (data.provider && data.provider !== selected.provider) return;\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const selected = this.selectedTask();\n if (!selected?.provider) return;\n if (data.provider && data.provider !== selected.provider) return;\n this.closePopover();\n });\n\n if (this.schedulerComponent()) {\n this.component.emit(this.schedulerComponent()!);\n }\n }\n\n protected onTaskDrop(event: AXSchedulerSlotDropEvent) {\n // Check if dropped on the same slot (agenda view)\n if (event.slot.view === 'agenda' && event.isSameSlotDrop) {\n return;\n }\n\n // Use the scheduler service utility to calculate the new appointment data\n const dropResult = this.schedulerService.calculateAppointmentDropResult(event);\n\n // If dropped on the same slot, no action needed\n if (dropResult.isSameSlotDrop) {\n return;\n }\n\n // Get the original task (before modification)\n const originalTask = event.appointment as AXPTask;\n\n // Apply the drop result to create an updated task object\n // This uses the scheduler's internal utility for consistent date handling\n const updatedTask = this.schedulerService.applyDropResult({ ...originalTask }, dropResult) as AXPTask;\n\n // Persist the change to the backend via taskBoardService\n this.taskBoardService\n .updateTaskDateRange(originalTask, {\n from: dropResult.startDate,\n end: dropResult.endDate,\n })\n .then((persistedTask) => {\n // Emit the change event so parent can update its state\n this.onTaskChanged.emit(persistedTask);\n\n // Refresh the scheduler to reflect the persisted data\n // This ensures the scheduler's internal state is synchronized with the backend\n this.schedulerComponent()?.refresh();\n })\n .catch((error) => {\n console.error('[TaskBoardCalendar] Failed to update task date range:', error);\n // Revert the visual change if persistence fails by refreshing from backend\n this.schedulerComponent()?.refresh();\n });\n }\n\n protected onTaskRightClickHandler(event: AXSchedulerAppointmentMouseEvent) {\n this.onTaskRightClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected onSlotDblClicked(event: AXSchedulerSlotMouseEvent) {\n if (event.sender.selectedView() === 'month') {\n this.onMonthSlotDblClicked.emit(event.slot.startDate.date);\n }\n }\n\n protected async handleRangeChanged(event: AXSchedulerDateRange) {\n this.onRangeChanged.emit(event);\n }\n\n protected handleActionClick(event: AXSchedulerAppointmentMouseEvent) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected async onTaskClickHandler(event: AXSchedulerAppointmentMouseEvent): Promise<void> {\n const task = event.appointment as AXPTask;\n\n // Find the appointment container element\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n\n // Traverse up to find the appointment container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isAppointment =\n element.classList?.contains('dx-scheduler-appointment') ||\n element.classList?.contains('ax-scheduler-appointment') ||\n element.hasAttribute('data-appointment-id');\n\n if (isAppointment) {\n targetElement = element;\n break;\n }\n\n const parent = element.parentElement;\n if (parent) {\n const isParentAppointment =\n parent.classList?.contains('dx-scheduler-appointment') ||\n parent.classList?.contains('ax-scheduler-appointment');\n\n if (isParentAppointment) {\n targetElement = parent;\n break;\n }\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n // Set the selected task and target element\n this.selectedTask.set(task);\n this.popoverTarget.set(targetElement);\n\n // Check if provider has a custom component\n await this.loadCustomComponent(task);\n\n // Load actions for the task\n await this.loadTaskActions(task);\n\n if (this.taskPopover() && targetElement) {\n this.taskPopover().target = targetElement;\n this.taskPopover().open();\n }\n\n // Still emit the event for backward compatibility\n this.onTaskClick.emit(task);\n }\n\n protected async loadTaskActions(task: AXPTask): Promise<void> {\n try {\n const providerName = task.provider;\n if (!providerName) {\n this.taskActions.set([]);\n return;\n }\n\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) {\n this.taskActions.set([]);\n return;\n }\n\n const actions = await provider.getActions(task);\n // Ensure all actions have a priority (default to 'secondary' if not specified)\n const actionsWithPriority = (actions || []).map((action) => ({\n ...action,\n priority: action.priority ?? 'secondary',\n }));\n this.taskActions.set(actionsWithPriority);\n } catch (error) {\n console.error('Failed to load task actions:', error);\n this.taskActions.set([]);\n }\n }\n\n protected getActionColor(action: AXPTaskActionMenuItem): string | null {\n return action.color as string;\n }\n\n protected async executeAction(action: AXPTaskActionMenuItem): Promise<void> {\n const task = this.selectedTask();\n if (!task || !action.command) return;\n\n try {\n const providerName = task.provider;\n if (!providerName) return;\n\n await this.taskBoardService.executeCommand(action.command, providerName);\n this.closePopover();\n } catch (error) {\n console.error('Failed to execute action:', error);\n }\n }\n\n private async refreshPopoverData(): Promise<void> {\n const task = this.selectedTask();\n if (!task) {\n return;\n }\n await this.loadTaskActions(task);\n this.schedulerComponent()?.refresh();\n }\n\n protected async openTaskDetails(): Promise<void> {\n const task = this.selectedTask();\n if (!task) return;\n\n try {\n await this.commandService.execute('Entity:OpenDetails', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.task.name}`,\n data: { id: task.id },\n });\n this.closePopover();\n } catch (error) {\n console.error('Failed to open task details:', error);\n }\n }\n\n protected async loadCustomComponent(task: AXPTask): Promise<void> {\n if (!task.provider) {\n console.log('[TaskPopover] No provider on task:', task);\n this.customComponentType.set(null);\n return;\n }\n\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n console.log('[TaskPopover] Provider not found:', task.provider);\n this.customComponentType.set(null);\n return;\n }\n\n const componentGetter = provider.getComponent?.();\n if (!componentGetter) {\n console.log('[TaskPopover] No component getter on provider:', task.provider);\n this.customComponentType.set(null);\n return;\n }\n\n console.log('[TaskPopover] Component getter found:', componentGetter, 'Type:', typeof componentGetter);\n\n try {\n let componentType: Type<AXPTaskPopoverComponent>;\n\n // Check if it's a lazy loading function or direct component type\n // A lazy loader is a function that returns a Promise\n // A component type is a class constructor (also a function, but used differently)\n if (typeof componentGetter === 'function') {\n // Try calling it to see if it returns a Promise (lazy loader)\n const testCall = componentGetter as () =>\n | Promise<Type<AXPTaskPopoverComponent>>\n | Type<AXPTaskPopoverComponent>\n | undefined;\n let result: Promise<Type<AXPTaskPopoverComponent>> | Type<AXPTaskPopoverComponent> | undefined;\n\n try {\n result = testCall();\n } catch (e) {\n // If calling throws (e.g., class constructor without 'new'), use it directly\n console.log('[TaskPopover] Component getter is a class constructor, using directly');\n componentType = componentGetter as Type<AXPTaskPopoverComponent>;\n this.customComponentType.set(componentType);\n return;\n }\n\n if (result instanceof Promise) {\n // It's a lazy loading function\n console.log('[TaskPopover] Component getter is a lazy loader');\n componentType = await result;\n } else if (result) {\n // It returned a component type directly\n console.log('[TaskPopover] Component getter returned component type directly');\n componentType = result;\n } else {\n // Result is undefined, use the original as component type\n console.log('[TaskPopover] Component getter returned undefined, using original as component type');\n componentType = componentGetter as Type<AXPTaskPopoverComponent>;\n }\n } else {\n console.log('[TaskPopover] Component getter is not a function');\n this.customComponentType.set(null);\n return;\n }\n\n console.log('[TaskPopover] Component type loaded successfully:', componentType?.name);\n this.customComponentType.set(componentType);\n } catch (error) {\n console.error('[TaskPopover] Failed to load custom task popover component:', error);\n this.customComponentType.set(null);\n }\n }\n\n protected closePopover(): void {\n this.taskPopover()?.close();\n this.customComponentType.set(null);\n this.selectedTask.set(null);\n this.popoverTarget.set(null);\n this.taskActions.set([]);\n }\n\n protected formatTime(date: Date): string {\n return this.calendarService.create(date).format('HH:mm');\n }\n\n protected formatDate(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY');\n }\n\n protected formatDateTime(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY HH:mm');\n }\n\n protected isMultiDay(task: AXPTask): boolean {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return start.date.getTime() !== end.date.getTime();\n }\n\n // Check if start and end are on different days\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const startMonth = start.date.getMonth();\n const endMonth = end.date.getMonth();\n const startYear = start.date.getFullYear();\n const endYear = end.date.getFullYear();\n\n return startDay !== endDay || startMonth !== endMonth || startYear !== endYear;\n }\n\n protected formatDateRange(task: AXPTask): string {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n\n // Same day\n if (start.date.getTime() === end.date.getTime()) {\n return this.formatDate(task.startDate);\n }\n\n // Different days - show range\n const startFormatted = this.formatDate(task.startDate);\n const endFormatted = this.formatDate(task.endDate);\n\n // Same month and year\n if (start.date.getMonth() === end.date.getMonth() && start.date.getFullYear() === end.date.getFullYear()) {\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const monthYear = start.format('MMM YYYY');\n return `${startDay} - ${endDay}, ${monthYear}`;\n }\n\n // Different months or years\n return `${startFormatted} - ${endFormatted}`;\n }\n\n // Not all-day\n if (this.isMultiDay(task)) {\n const startFormatted = this.formatDateTime(task.startDate);\n const endFormatted = this.formatDateTime(task.endDate);\n return `${startFormatted} - ${endFormatted}`;\n }\n\n // Same day, show date with time range\n const dateFormatted = this.formatDate(task.startDate);\n const timeRange = `${this.formatTime(task.startDate)} - ${this.formatTime(task.endDate)}`;\n return `${dateFormatted} ${timeRange}`;\n }\n}\n","<ax-scheduler\n [hasHeader]=\"false\"\n [holidays]=\"holidays\"\n [resources]=\"resources()\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n [multiDayViewDaysCount]=\"vm.daysCount()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onActionClick)=\"handleActionClick($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentClicked)=\"onTaskClickHandler($event)\"\n [weekend]=\"weekendDays()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n></ax-scheduler>\n\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\n<ax-popover\n #taskPopover\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [offsetY]=\"12\"\n [offsetX]=\"12\"\n [adaptivityEnabled]=\"true\"\n>\n <div>\n @if (selectedTask()) {\n <div class=\"task-popover ax-shadow-md ax-border\">\n <!-- Header Section -->\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\" [title]=\"selectedTask()!.title\">{{ selectedTask()!.title }}</h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"closePopover()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n @if (selectedTask()!.description && !customComponentType()) {\n <p class=\"task-popover__description\">{{ selectedTask()!.description }}</p>\n }\n </div>\n </div>\n\n <!-- Custom Component or Default Content -->\n @if (customComponentType()) {\n <!-- Custom Component from Provider -->\n <div class=\"task-popover__custom-content\">\n <ng-container *ngComponentOutlet=\"customComponentType()!; inputs: customComponentInputs()!\"></ng-container>\n </div>\n } @else {\n <!-- Default Content Section -->\n <div class=\"task-popover__content\">\n <!-- Time -->\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(selectedTask()!) }}</span>\n </div>\n </div>\n\n <!-- Status -->\n @if (selectedTask()!.status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ selectedTask()!.status.title }}</span>\n </div>\n </div>\n }\n\n <!-- Assignee -->\n @if (selectedTask()!.assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n <!-- Priority -->\n @if (selectedTask()!.priority) {\n <div class=\"task-popover__info-item\">\n <div\n class=\"task-popover__icon task-popover__icon--priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span\n class=\"task-popover__info-text task-popover__priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n {{ selectedTask()!.priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Actions Section -->\n <div class=\"task-popover__actions\">\n <!-- Task Actions from Provider -->\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions-group\">\n <!-- Primary Actions: Icon-only buttons -->\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n <!-- Secondary Actions: Dropdown with \"...\" button -->\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ax-popover>\n","import { AXButtonClickEvent, AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItem,\n} from '@acorex/components/data-table';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService, AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskAction, AXPTaskFilter } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-grid-view',\n templateUrl: './task-board-grid-view.component.html',\n styleUrls: ['./task-board-grid-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly translationService = inject(AXTranslationService);\n\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n onActionClick = output<AXPTaskAction>();\n\n private fetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected grid = viewChild<AXDataTableComponent>('grid');\n protected commandItems = signal<AXRowCommandItem[]>([\n {\n name: 'view',\n text: this.translationService.translateSync('@task-management:task-board.grid-headers.action-view') ?? 'View',\n icon: 'ax-icon ax-icon-more-horizontal',\n look: 'blank',\n },\n ]);\n\n /** Remount keys so `ax-data-table` is recreated on board refresh (manual fetch mode can keep stale rows otherwise). */\n protected gridRemountKeys = computed(() => [this.refreshNonce()]);\n\n protected tasksDataSource = computed(() => {\n const parentDataSource = this.dataSource();\n // Bumps when the task board refreshes so we get a new data source instance (grid refresh alone can keep cached pages).\n void this.refreshNonce();\n\n return new AXDataSource<any>({\n load: async (e) => {\n const result = await parentDataSource({ skip: e.skip, take: e.take });\n this.fetchedTasks.set(result.items);\n const mappedItems = result.items.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n statusTitle: task.status.title,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n type: this.taskBoardService.getProvider(task.provider)?.title,\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n // Store the original task for row click handler\n _originalTask: task,\n }));\n return { items: mappedItems, total: result.total };\n },\n pageSize: 10,\n key: 'id',\n byKey: async (key: unknown) => {\n return this.fetchedTasks().find((task) => task.id === key);\n },\n });\n });\n\n #dataSourceChanged = effect(() => {\n // Track filter-related signals that affect the data source\n // When these change, the parent's filter() computed signal changes,\n // which means the data source function will return different results\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n\n // Use untracked to refresh the grid without tracking it\n untracked(() => {\n // Schedule refresh in next tick to avoid issues during effect execution\n setTimeout(() => {\n this.grid()?.refresh({ reset: true });\n }, 0);\n });\n });\n\n constructor() {\n // Ensure data source is refreshed after initial render\n afterNextRender(() => {\n untracked(() => {\n this.grid()?.refresh({ reset: true });\n });\n });\n }\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.columns.set([]);\n return;\n }\n\n taskType.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n });\n\n protected handleRowClick(event: AXDataTableRowClick) {\n if (event.data) {\n // Get the original task from the mapped item or find it by ID\n const mappedItem = event.data as any;\n const originalTask = mappedItem._originalTask || this.fetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n }\n\n protected onActionClickHandler(e: AXButtonClickEvent) {\n const task = this.fetchedTasks().find((task) => task.id === e.data.id);\n if (!task) return;\n this.onActionClick.emit({ nativeEvent: e.nativeEvent, task });\n }\n}\n","@for (remountKey of gridRemountKeys(); track remountKey) {\n <ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n (onRowClick)=\"handleRowClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n [allowResizing]=\"true\"\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"statusTitle\"\n [caption]=\"('@task-management:task-board.grid-headers.status' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"type\"\n [caption]=\"('@task-management:task-board.grid-headers.type' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n\n @if (columns().length) {\n <ng-container>\n @for (column of columns(); track column) {\n <axp-widget-column-renderer\n [node]=\"column.widget\"\n [caption]=\"(column.title | translate | async)!\"\n ></axp-widget-column-renderer>\n }\n </ng-container>\n }\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"commandItems()\"\n ></ax-command-column>\n </ax-data-table>\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport {\n AXKanbanBeforeDropEvent,\n AXKanbanComponent,\n AXKanbanItem,\n AXKanbanMouseEvent,\n AXKanbanSortEvent,\n AXKanbanStatus,\n} from '@acorex/components/kanban';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n model,\n output,\n signal,\n Type,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport {\n AXPTask,\n AXPTaskAction,\n AXPTaskActionMenuItem,\n AXPTaskPopoverComponent,\n} from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'axm-task-board-kanban-view',\n templateUrl: './task-board-kanban-view.component.html',\n styleUrls: ['./task-board-kanban-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXKanbanComponent,\n AXPopoverModule,\n AXButtonModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXTranslationModule,\n ],\n})\nexport class AXMTaskBoardKanbanViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n private readonly destroyRef = inject(DestroyRef);\n\n kanbanComponent = viewChild(AXKanbanComponent);\n taskPopover = viewChild.required<AXPopoverComponent>('taskPopover');\n\n protected selectedTask = signal<AXPTask | null>(null);\n protected popoverTarget = signal<HTMLElement | null>(null);\n protected taskActions = signal<AXPTaskActionMenuItem[]>([]);\n protected customComponentType = signal<Type<AXPTaskPopoverComponent> | null>(null);\n\n // Separate primary and secondary actions\n protected primaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'primary');\n });\n\n protected secondaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'secondary');\n });\n\n protected customComponentInputs = computed(() => {\n const task = this.selectedTask();\n if (!task) return null;\n return { task };\n });\n\n tasks = model.required<AXPTask[]>();\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n component = output<AXKanbanComponent>();\n onActionClick = output<AXPTaskAction>();\n\n statuses = signal<AXKanbanStatus[]>([]);\n\n stableTasks = computed(() => this.tasks(), { equal: isEqual });\n protected kanbanTasks = computed<AXKanbanItem[]>(() => {\n return this.stableTasks().map((task) => ({\n id: task.id,\n title: task.title,\n index: task.index,\n cssClass: task.cssClass,\n priority: task.priority,\n statusKey: task.status.id,\n description: task.description,\n }));\n });\n\n ngAfterViewInit(): void {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const selected = this.selectedTask();\n if (!selected?.provider) return;\n if (data.provider && data.provider !== selected.provider) return;\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const selected = this.selectedTask();\n if (!selected?.provider) return;\n if (data.provider && data.provider !== selected.provider) return;\n this.closePopover();\n });\n\n if (this.kanbanComponent()) {\n this.component.emit(this.kanbanComponent()!);\n }\n }\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.statuses.set([]);\n return;\n }\n taskType.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n //#region ---- Drag & Drop Handling ----\n\n /**\n * Handles the onBeforeDrop event from the kanban component.\n * Uses event.wait() to register async operations that the kanban will await.\n * If action is cancelled/failed, we set event.canceled = true to prevent the drop.\n */\n protected onBeforeDrop(event: AXKanbanBeforeDropEvent): void {\n // If no status change, allow the drop (just reordering)\n if (event.previousStatusKey === event.currentStatusKey) {\n return;\n }\n\n // Find the task being moved\n const task = this.stableTasks().find((t) => t.id === event.item?.id);\n if (!task || !task.provider) {\n // Allow drop if task not found or no provider\n return;\n }\n\n // Get the provider\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n return;\n }\n\n // Register the async operation using event.wait()\n // The kanban component will await this promise before proceeding\n event.wait(this.executeDropAction(event, task, provider));\n }\n\n /**\n * Executes the action for a drop operation.\n * Sets event.canceled = true if action fails or is cancelled.\n * IMPORTANT: Do NOT update the task status in dataSource here - let the kanban handle the move.\n * The kanban will update the status in onSortChanged, and we'll sync with backend there.\n */\n private async executeDropAction(\n event: AXKanbanBeforeDropEvent,\n task: AXPTask,\n provider: ReturnType<typeof this.taskBoardService.getProvider>,\n ): Promise<void> {\n if (!provider) {\n return;\n }\n\n try {\n // Get available actions for the task\n const actions = await provider.getActions(task);\n if (!actions || actions.length === 0) {\n // No actions available, allow the drop\n return;\n }\n\n // Find action that matches the new status\n const matchingAction = this.findActionForStatus(actions, event.currentStatusKey);\n if (!matchingAction || !matchingAction.command) {\n // No matching action found, allow the drop\n return;\n }\n\n // Execute the action and check result\n const result = await this.taskBoardService.executeCommand(matchingAction.command, task.provider!);\n\n // Check if action was successful (not cancelled or failed)\n if (result?.success === false || result === null) {\n // Action was cancelled or failed - prevent the drop\n event.canceled = true;\n return;\n }\n\n // Action succeeded - allow the drop to proceed\n // The kanban will handle the visual move, and onSortChanged will sync with backend\n } catch (error) {\n console.error('[KanbanDrop] Failed to execute action during drop:', error);\n // On error, prevent the drop to be safe\n event.canceled = true;\n }\n }\n\n /**\n * Finds an action that corresponds to the target status.\n * Matches actions by name patterns (e.g., \"approve\" action for \"approved\" status).\n */\n private findActionForStatus(\n actions: AXPTaskActionMenuItem[],\n targetStatus: string | number,\n ): AXPTaskActionMenuItem | null {\n const targetStatusStr = String(targetStatus).toLowerCase();\n\n // Common status-to-action mappings\n const statusActionMap: Record<string, string[]> = {\n approved: ['approve'],\n rejected: ['reject'],\n cancelled: ['cancel'],\n completed: ['complete', 'finish'],\n done: ['complete', 'finish'],\n inprogress: ['start', 'begin'],\n 'in-progress': ['start', 'begin'],\n blocked: ['block'],\n unblocked: ['unblock'],\n };\n\n // Check direct mappings first\n const possibleActionNames = statusActionMap[targetStatusStr] || [];\n for (const actionName of possibleActionNames) {\n const action = actions.find((a) => a.name?.toLowerCase().includes(actionName));\n if (action) {\n return action;\n }\n }\n\n // Try to find action by name containing status keywords\n const statusKeywords = targetStatusStr.split(/[-_\\s]+/);\n for (const keyword of statusKeywords) {\n if (keyword.length < 3) continue; // Skip very short keywords\n\n const action = actions.find((a) => {\n const actionName = a.name?.toLowerCase() || '';\n return actionName.includes(keyword) || keyword.includes(actionName);\n });\n\n if (action) {\n return action;\n }\n }\n\n // Try exact match with action name\n const exactMatch = actions.find((a) => a.name?.toLowerCase() === targetStatusStr);\n if (exactMatch) {\n return exactMatch;\n }\n\n // Try partial match (status contains action name or vice versa)\n for (const action of actions) {\n const actionName = action.name?.toLowerCase() || '';\n if (targetStatusStr.includes(actionName) || actionName.includes(targetStatusStr)) {\n return action;\n }\n }\n\n return null;\n }\n\n //#endregion\n\n protected onSortChanged(event: AXKanbanSortEvent) {\n const tasks = this.tasks().map((item) => {\n const task: AXKanbanItem = event.allItems.find((t) => t.id === item.id);\n if (task) {\n const status = this.statuses().find((s) => s.key === task.statusKey)!;\n return { ...item, index: task.index!, status: { id: status.key, title: status.title } };\n }\n return item;\n });\n\n this.taskBoardService\n .updateTasks(tasks)\n .then((updatedTasks) => {\n this.tasks.set(updatedTasks);\n })\n .catch((error) => {\n console.error('[KanbanSort] Failed to update tasks:', error);\n });\n }\n\n protected async handleItemClick(event: AXKanbanMouseEvent): Promise<void> {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (!task) return;\n\n // Find the kanban item container element\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n\n // Traverse up to find the kanban item container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isKanbanItem =\n element.classList?.contains('dx-kanban-item') ||\n element.classList?.contains('ax-kanban-item') ||\n element.hasAttribute('data-item-id');\n\n if (isKanbanItem) {\n targetElement = element;\n break;\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n // Set the selected task and target element\n this.selectedTask.set(task);\n this.popoverTarget.set(targetElement);\n\n // Check if provider has a custom component\n await this.loadCustomComponent(task);\n\n // Load actions for the task\n await this.loadTaskActions(task);\n\n // Open the popover\n setTimeout(() => {\n if (this.taskPopover() && targetElement) {\n this.taskPopover().target = targetElement;\n this.taskPopover().open();\n }\n }, 0);\n\n // Still emit the event for backward compatibility\n this.onTaskClick.emit(task);\n }\n\n protected handleActionClick(event: AXKanbanMouseEvent) {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (task) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: task });\n }\n }\n\n protected async loadTaskActions(task: AXPTask): Promise<void> {\n try {\n const providerName = task.provider;\n if (!providerName) {\n this.taskActions.set([]);\n return;\n }\n\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) {\n this.taskActions.set([]);\n return;\n }\n\n const actions = await provider.getActions(task);\n // Ensure all actions have a priority (default to 'secondary' if not specified)\n const actionsWithPriority = (actions || []).map((action) => ({\n ...action,\n priority: action.priority ?? 'secondary',\n }));\n this.taskActions.set(actionsWithPriority);\n } catch (error) {\n console.error('Failed to load task actions:', error);\n this.taskActions.set([]);\n }\n }\n\n protected getActionColor(action: AXPTaskActionMenuItem): string | null {\n return action.color as string;\n }\n\n //#region ---- Action Execution ----\n\n /**\n * Executes an action when user clicks on an action button in the popover.\n * If action succeeds, moves the item to the appropriate status using kanban.moveItem().\n */\n protected async executeAction(action: AXPTaskActionMenuItem): Promise<void> {\n const task = this.selectedTask();\n if (!task || !action.command) return;\n\n // Store task info before closing popover\n const taskId = task.id;\n const providerName = task.provider;\n const currentStatusKey = task.status.id;\n\n if (!providerName) return;\n\n try {\n const result = await this.taskBoardService.executeCommand(action.command, providerName);\n\n // Check if action was successful\n if (result?.success === false || result === null) {\n // Action was cancelled or failed - don't close popover, don't move item\n return;\n }\n\n // Action succeeded - close popover first\n this.closePopover();\n\n // Refresh tasks to get updated status and move item if status changed\n await this.refreshAndMoveItem(taskId, providerName, currentStatusKey);\n } catch (error) {\n console.error('Failed to execute action:', error);\n }\n }\n\n /**\n * Refreshes tasks from the provider and moves the item if status changed.\n */\n private async refreshAndMoveItem(\n taskId: string | number,\n providerName: string,\n previousStatusKey: string | number,\n ): Promise<void> {\n try {\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) {\n return;\n }\n\n // Get updated tasks from provider\n const result = await provider.getTasks();\n const updatedTasks = result.items.map((t) => ({ ...t, provider: providerName }));\n\n // Find the updated task to get its new status\n const updatedTask = updatedTasks.find((t) => t.id === taskId);\n if (!updatedTask) {\n return;\n }\n\n const newStatusKey = updatedTask.status.id;\n\n // Check if status actually changed\n if (newStatusKey !== previousStatusKey) {\n // Move the item programmatically to the new status using kanban API\n const kanban = this.kanbanComponent();\n if (kanban) {\n await kanban.moveItem(taskId, newStatusKey);\n }\n }\n\n // Update the tasks signal with merged data\n const currentTasks = this.tasks();\n const updatedTasksMap = new Map(updatedTasks.map((t) => [t.id, t]));\n\n const mergedTasks = currentTasks.map((t) => {\n const updated = updatedTasksMap.get(t.id);\n return updated ? { ...updated } : t;\n });\n\n // Add any new tasks\n const existingIds = new Set(currentTasks.map((t) => t.id));\n const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id)).map((t) => ({ ...t }));\n mergedTasks.push(...newTasks);\n\n this.tasks.set([...mergedTasks]);\n } catch (error) {\n console.error('Failed to refresh tasks:', error);\n }\n }\n\n //#endregion\n\n protected async loadCustomComponent(task: AXPTask): Promise<void> {\n if (!task.provider) {\n this.customComponentType.set(null);\n return;\n }\n\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n this.customComponentType.set(null);\n return;\n }\n\n const componentGetter = provider.getComponent?.();\n if (!componentGetter) {\n this.customComponentType.set(null);\n return;\n }\n\n try {\n let componentType: Type<AXPTaskPopoverComponent>;\n\n // Check if it's a lazy loading function or direct component type\n if (typeof componentGetter === 'function') {\n const testCall = componentGetter as () =>\n | Promise<Type<AXPTaskPopoverComponent>>\n | Type<AXPTaskPopoverComponent>\n | undefined;\n let result: Promise<Type<AXPTaskPopoverComponent>> | Type<AXPTaskPopoverComponent> | undefined;\n\n try {\n result = testCall();\n } catch (e) {\n componentType = componentGetter as Type<AXPTaskPopoverComponent>;\n this.customComponentType.set(componentType);\n return;\n }\n\n if (result instanceof Promise) {\n componentType = await result;\n } else if (result) {\n componentType = result;\n } else {\n componentType = componentGetter as Type<AXPTaskPopoverComponent>;\n }\n } else {\n this.customComponentType.set(null);\n return;\n }\n\n this.customComponentType.set(componentType);\n } catch (error) {\n console.error('[TaskPopover] Failed to load custom task popover component:', error);\n this.customComponentType.set(null);\n }\n }\n\n protected closePopover(): void {\n this.taskPopover().close();\n this.customComponentType.set(null);\n this.selectedTask.set(null);\n this.popoverTarget.set(null);\n this.taskActions.set([]);\n }\n\n private async refreshPopoverData(): Promise<void> {\n const selected = this.selectedTask();\n if (!selected?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(selected.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTasks = result.items.map((t) => ({ ...t, provider: selected.provider }));\n const updatedMap = new Map(updatedTasks.map((t) => [t.id, t]));\n\n const currentTasks = this.tasks();\n const mergedTasks = currentTasks.map((t) => updatedMap.get(t.id) ?? t);\n const existingIds = new Set(currentTasks.map((t) => t.id));\n const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id));\n this.tasks.set([...mergedTasks, ...newTasks]);\n\n const updatedSelectedTask = updatedMap.get(selected.id);\n if (updatedSelectedTask) {\n this.selectedTask.set(updatedSelectedTask);\n await this.loadTaskActions(updatedSelectedTask);\n }\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n\n protected formatTime(date: Date): string {\n return this.calendarService.create(date).format('HH:mm');\n }\n\n protected formatDate(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY');\n }\n\n protected formatDateTime(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY HH:mm');\n }\n\n protected isMultiDay(task: AXPTask): boolean {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return start.date.getTime() !== end.date.getTime();\n }\n\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const startMonth = start.date.getMonth();\n const endMonth = end.date.getMonth();\n const startYear = start.date.getFullYear();\n const endYear = end.date.getFullYear();\n\n return startDay !== endDay || startMonth !== endMonth || startYear !== endYear;\n }\n\n protected formatDateRange(task: AXPTask): string {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n\n if (start.date.getTime() === end.date.getTime()) {\n return this.formatDate(task.startDate);\n }\n\n const startFormatted = this.formatDate(task.startDate);\n const endFormatted = this.formatDate(task.endDate);\n\n if (start.date.getMonth() === end.date.getMonth() && start.date.getFullYear() === end.date.getFullYear()) {\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const monthYear = start.format('MMM YYYY');\n return `${startDay} - ${endDay}, ${monthYear}`;\n }\n\n return `${startFormatted} - ${endFormatted}`;\n }\n\n if (this.isMultiDay(task)) {\n const startFormatted = this.formatDateTime(task.startDate);\n const endFormatted = this.formatDateTime(task.endDate);\n return `${startFormatted} - ${endFormatted}`;\n }\n\n const dateFormatted = this.formatDate(task.startDate);\n const timeRange = `${this.formatTime(task.startDate)} - ${this.formatTime(task.endDate)}`;\n return `${dateFormatted} ${timeRange}`;\n }\n}\n","<ax-kanban\n [statuses]=\"statuses()\"\n [dataSource]=\"kanbanTasks()\"\n (onItemClick)=\"handleItemClick($event)\"\n (onBeforeDrop)=\"onBeforeDrop($event)\"\n (onSortChanged)=\"onSortChanged($event)\"\n></ax-kanban>\n\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\n<ax-popover\n #taskPopover\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [offsetY]=\"12\"\n [offsetX]=\"12\"\n [adaptivityEnabled]=\"true\"\n>\n <div>\n @if (selectedTask()) {\n <div class=\"task-popover ax-shadow-md ax-border\">\n <!-- Header Section -->\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\" [title]=\"selectedTask()!.title\">{{ selectedTask()!.title }}</h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"closePopover()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n @if (selectedTask()!.description && !customComponentType()) {\n <p class=\"task-popover__description\">{{ selectedTask()!.description }}</p>\n }\n </div>\n </div>\n\n <!-- Custom Component or Default Content -->\n @if (customComponentType()) {\n <!-- Custom Component from Provider -->\n <div class=\"task-popover__custom-content\">\n <ng-container *ngComponentOutlet=\"customComponentType()!; inputs: customComponentInputs()!\"></ng-container>\n </div>\n } @else {\n <!-- Default Content Section -->\n <div class=\"task-popover__content\">\n <!-- Time -->\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(selectedTask()!) }}</span>\n </div>\n </div>\n\n <!-- Status -->\n @if (selectedTask()!.status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ selectedTask()!.status.title }}</span>\n </div>\n </div>\n }\n\n <!-- Assignee -->\n @if (selectedTask()!.assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n <!-- Priority -->\n @if (selectedTask()!.priority) {\n <div class=\"task-popover__info-item\">\n <div\n class=\"task-popover__icon task-popover__icon--priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span\n class=\"task-popover__info-text task-popover__priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n {{ selectedTask()!.priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Actions Section -->\n <div class=\"task-popover__actions\">\n <!-- Task Actions from Provider -->\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions-group\">\n <!-- Primary Actions: Icon-only buttons -->\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n <!-- Secondary Actions: Dropdown with \"...\" button -->\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ax-popover>\n","import { AXButtonClickEvent, AXDataSource } from '@acorex/cdk/common';\nimport { AXDataTableComponent, AXDataTableModule } from '@acorex/components/data-table';\nimport { AXKanbanStatus } from '@acorex/components/kanban';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPExtraField, AXPTask, AXPTaskAction, AXPTaskFilter, AXPWorkflowTaskProvider } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\ninterface StatusTaskGroup {\n statusInfo: AXKanbanStatus;\n tasks: AXDataSource<any>;\n}\n\n/** Stable row identity for @for; includes refresh nonce so tables remount after board refresh. */\nfunction statusGroupTrackKey(nonce: number, group: StatusTaskGroup): string {\n return `${nonce}:${String(group.statusInfo.key)}`;\n}\n\n@Component({\n selector: 'axm-task-board-status-grouped-grid-view',\n templateUrl: './task-board-status-grouped-grid-view.component.html',\n styleUrls: ['./task-board-status-grouped-grid-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardStatusGroupedGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n\n provider = input<AXPWorkflowTaskProvider>();\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onActionClick = output<AXPTaskAction>();\n\n groupedTasks = signal<StatusTaskGroup[]>([]);\n private allFetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected statuses = signal<AXKanbanStatus[]>([]);\n protected grids = viewChildren<AXDataTableComponent>('grid');\n\n /** Used by the template so status tables remount when the board refreshes (same as flat grid). */\n protected trackStatusGroup = (_index: number, group: StatusTaskGroup) =>\n statusGroupTrackKey(this.refreshNonce(), group);\n\n #dataChanged = effect(async () => {\n // Track filter-related signals that affect the data source\n // When these change, the parent's filter() computed signal changes,\n // which means the data source function will return different results\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n\n const parentDataSource = this.dataSource();\n const allStatuses = this.statuses();\n\n if (!parentDataSource || allStatuses.length === 0) {\n this.groupedTasks.set([]);\n this.allFetchedTasks.set([]);\n return;\n }\n\n const result = await parentDataSource();\n this.allFetchedTasks.set(result.items);\n const allTasks = result.items;\n\n const statusGroups = allStatuses.map((status) => {\n const tasksForStatus = allTasks.filter((task) => task.status.id === status.key);\n return {\n statusInfo: status,\n tasks: this.createTaskDataSourceForGroup(tasksForStatus),\n };\n });\n\n this.groupedTasks.set(statusGroups);\n untracked(() => {\n // Use afterRender to ensure data tables are rendered before refreshing\n setTimeout(() => {\n // Refresh data sources\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n // Refresh data table components\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 0);\n });\n });\n\n #providerChanged = effect(async () => {\n const provider = this.vm.selectedTaskTypes()[0];\n provider?.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n provider?.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n #gridsChanged = effect(() => {\n // Track when groupedTasks changes to refresh grids\n const groups = this.groupedTasks();\n untracked(() => {\n // Wait for grids to be rendered\n setTimeout(() => {\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 100);\n });\n });\n\n constructor() {\n // Ensure data sources are refreshed after initial render\n afterNextRender(() => {\n untracked(() => {\n // Use a longer timeout to ensure data tables are fully rendered\n setTimeout(() => {\n // Refresh data sources\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n // Refresh data table components\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 200);\n });\n });\n }\n\n private createTaskDataSourceForGroup(tasks: AXPTask[]): AXDataSource<any> {\n return new AXDataSource<any>({\n load: async (e) => {\n const items = tasks.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n }));\n return {\n items: items.slice(e.skip, e.skip + e.take),\n total: items.length,\n };\n },\n pageSize: 5,\n key: 'id',\n byKey: async (key: unknown) => {\n return tasks.find((task) => task.id === key);\n },\n });\n }\n\n protected onActionClickHandler(e: AXButtonClickEvent) {\n const task = this.allFetchedTasks().find((task) => task.id === e.data.id);\n if (!task) return;\n this.onActionClick.emit({ nativeEvent: e.nativeEvent, task });\n }\n}\n","@for (group of groupedTasks(); track trackStatusGroup($index, group)) {\n <h1 class=\"ax-text-xl ax-font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"ax-h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"[\n {\n name: 'view',\n text: ('@task-management:task-board.grid-headers.action-view' | translate | async) ?? 'View',\n icon: 'ax-icon ax-icon-more-horizontal',\n },\n ]\"\n ></ax-command-column>\n </ax-data-table>\n}\n","import { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXAccordionModule } from '@acorex/components/accordion';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCalendarComponent, AXCalendarSlotClick } from '@acorex/components/calendar';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownPanelComponent } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXSchedulerComponent } from '@acorex/components/scheduler';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPBreadcrumbItem, AXPDeviceService } from '@acorex/platform/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, startWith } from 'rxjs';\nimport { RootConfig } from '../../const';\nimport { AXMTaskBoardDetailPanel } from './task-board-detail-panel/task-board-detail-panel.component';\nimport { AXMTaskBoardFiltersComponent } from './task-board-filters/task-board-filters.component';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPResource, AXPTask, AXPTaskAction, AXPTaskFilter, AXPWorkflowTaskProvider } from './task-board.types';\nimport {\n AXM_TASK_BOARD_MENU_ITEMS,\n filterTaskBoardMenuByAllowedModes,\n} from './task-board-menu.definition';\nimport { AXMTaskBoardViewModel, AXPPriorityFilterKey, AXPTaskBoardViewMode } from './task-board.viewmodel';\nimport { AXMTaskBoardCalendarViewComponent } from './views/task-board-calendar-view/task-board-calendar-view.component';\nimport { AXMTaskBoardGridViewComponent } from './views/task-board-grid-view/task-board-grid-view.component';\nimport { AXMTaskBoardKanbanViewComponent } from './views/task-board-kanban-view/task-board-kanban-view.component';\nimport { AXMTaskBoardStatusGroupedGridViewComponent } from './views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component';\n\nexport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\n\n@Component({\n templateUrl: './task-board.page.html',\n styleUrls: ['./task-board.page.scss'],\n imports: [\n FormsModule,\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXAccordionModule,\n AXAccordionCdkModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXMTaskBoardCalendarViewComponent,\n AXMTaskBoardKanbanViewComponent,\n AXMTaskBoardGridViewComponent,\n AXMTaskBoardStatusGroupedGridViewComponent,\n AXMTaskBoardDetailPanel,\n AXDropdownPanelComponent,\n AXPopoverModule,\n AXCalendarComponent,\n AXMTaskBoardFiltersComponent,\n AXCheckBoxModule,\n AXFormModule,\n AXLabelModule,\n AXSelectionListModule,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTaskBoardPage,\n },\n ],\n})\nexport class AXMTaskBoardPage extends AXPPageLayoutBaseComponent implements OnInit {\n private readonly router = inject(Router);\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n protected readonly vm = inject(AXMTaskBoardViewModel);\n private readonly unsubscribe = inject(AXUnsubscriber);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly localeService = inject(AXLocaleService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n\n protected popover = viewChild<AXPopoverComponent>('popover');\n protected calendar = viewChild<AXCalendarComponent>('calendar');\n protected sidebarCalendar = viewChild<AXCalendarComponent>('sidebarCalendar');\n\n protected isReady = signal(false);\n protected taskTypes = signal<AXPWorkflowTaskProvider[]>([]);\n protected calendarEventTypes = signal<Array<{ id: string; title: string; color?: string; icon?: string }>>([]);\n protected resources = signal<AXPResource[]>([]);\n protected isQueryParam = signal<boolean>(false);\n protected refreshNonce = signal(0);\n protected taskTypeAccordionCollapsed = signal(false);\n protected calendarEventTypeAccordionCollapsed = signal(false);\n protected sidebarCollapsed = signal(false);\n private currentTask = signal<AXPTask | null>(null);\n protected currentViewMode = signal<'calendar' | 'kanban' | 'grid' | 'status-grouped-grid'>('calendar');\n protected schedulerComponent = signal<AXSchedulerComponent | null>(null);\n\n private dayDataCache = signal<Map<string, number>>(new Map());\n\n /** View switcher entries filtered by user visibility settings parts. */\n protected readonly menuItems = computed(() => {\n const allowed = new Set(this.vm.visibleViewModes());\n return filterTaskBoardMenuByAllowedModes(AXM_TASK_BOARD_MENU_ITEMS, allowed);\n });\n\n protected calendarType = computed(() => this.localeService.activeProfile().calendar.system);\n protected todayButtonText = computed(() => {\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'grid':\n case 'agenda':\n case 'kanban':\n case 'timeline-day':\n case 'timeline-weekly':\n case 'status-grouped-grid':\n return 'Today';\n case 'week':\n return 'Current week';\n case 'month':\n case 'timeline-month':\n return 'Current month';\n case 'timeline-year':\n return 'Current year';\n default:\n return 'Today';\n }\n });\n protected timeText = computed(() => {\n if (\n this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid'\n ) {\n const currentDate = this.vm.currentDate();\n if (!currentDate) {\n return '';\n }\n const start = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n const end = start.add('day', this.vm.daysCount() - 1);\n const startText = start.format('DD MMMM yyyy', { locale: this.localeService.activeProfile().calendar.system });\n const endText = end.format('DD MMMM yyyy', { locale: this.localeService.activeProfile().calendar.system });\n return `${startText} - ${endText}`;\n }\n return this.schedulerComponent()?.currentDateText() || '';\n });\n protected calendarDepth = computed(() => {\n if (\n this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid'\n ) {\n return 'day';\n }\n return this.schedulerComponent()?.calendarDepth() || 'day';\n });\n\n protected currentDateForCalendar = computed(() => {\n const date = this.vm.currentDate();\n return date || new Date();\n });\n protected readonly selectedViewMode = computed(() => {\n const currentMode = this.vm.currentViewMode();\n const items = this.menuItems();\n for (const category of items) {\n if (category.key === currentMode) {\n return { key: category.key as AXPTaskBoardViewMode, text: category.text, icon: category.icon };\n }\n if (category.children) {\n const foundChild = category.children.find((child) => child.key === currentMode);\n if (foundChild) {\n return foundChild;\n }\n }\n }\n const firstCategory = items[0];\n if (!firstCategory) {\n return {\n key: currentMode,\n text: 'view',\n icon: 'fa-light fa-table',\n };\n }\n return firstCategory.children\n ? firstCategory.children[0]\n : { key: firstCategory.key as AXPTaskBoardViewMode, text: firstCategory.text, icon: firstCategory.icon };\n });\n protected filter = computed<AXPTaskFilter>(() => {\n const taskTypeNames = this.vm.selectedTaskTypeNames();\n const assigneeIds = this.vm.selectedAssigneeIds();\n const reporterIds = this.vm.selectedReporterIds();\n const priorities = this.vm.selectedPriorities();\n\n const currentDate = this.vm.currentDate() || new Date();\n let from: AXDateTime = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n let end: AXDateTime;\n\n const currentView = this.vm.currentViewMode();\n\n if (\n currentView === 'grid' ||\n currentView === 'kanban' ||\n currentView === 'agenda' ||\n currentView === 'timeline-weekly' ||\n currentView === 'status-grouped-grid'\n ) {\n end = from.add('day', this.vm.daysCount() - 1);\n } else if (currentView === 'month' || currentView === 'timeline-month') {\n from = from.startOf('month');\n end = from.endOf('month');\n } else {\n end = from.endOf('day');\n }\n\n return {\n // Empty filter means \"all items\" for task type/provider.\n ...(taskTypeNames.length > 0 && { types: taskTypeNames }),\n ...(assigneeIds.length > 0 && { assigneeIds }),\n ...(reporterIds.length > 0 && { reporterIds }),\n ...(priorities.length > 0 && { priorities }),\n range: { from: from.date, end: end.date },\n };\n });\n\n private contextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n\n override async ngOnInit() {\n await super.ngOnInit();\n await this.vm.initialize();\n\n // Load task types for checkbox filter\n const types = await this.taskBoardService.getTaskTypes();\n this.taskTypes.set(types);\n\n // Load calendar event types for checkbox filter\n const eventTypes = await this.taskBoardService.getCalendarEventTypes();\n this.calendarEventTypes.set(\n eventTypes.map((et: { id: string; title: string }) => ({\n id: et.id,\n title: et.title,\n })),\n );\n\n // Initialize day data cache\n await this.updateDayDataCache();\n\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n startWith(null),\n )\n .subscribe(async () => {\n await this.loadFromRoute();\n if (!this.isReady()) {\n this.isReady.set(true);\n }\n });\n\n this.taskBoardService.refresh$.subscribe(async () => {\n await this.taskResolveHandler();\n await this.getResources();\n this.refreshNonce.update((value) => value + 1);\n this.schedulerComponent()?.refresh();\n });\n }\n override async getPageTitle(): Promise<string> {\n return await this.translateService.translateAsync('@task-management:task-board.page-title');\n }\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [\n {\n title: await this.translateService.translateAsync('@task-management:root-menu'),\n },\n ];\n }\n\n protected schedulerDataSource = (filter?: AXPTaskFilter): Promise<AXPTask[]> => {\n const finalFilter: AXPTaskFilter = { ...this.filter(), ...filter };\n\n return this.taskBoardService.getTasks(finalFilter).then((result) => {\n this.validateSelectedTask(result.items);\n return result.items;\n });\n };\n\n protected gridDataSource = (filter?: AXPTaskFilter): Promise<{ items: AXPTask[]; total: number }> => {\n const finalFilter: AXPTaskFilter = { ...this.filter(), ...filter };\n\n return this.taskBoardService.getTasks(finalFilter).then((result) => {\n this.validateSelectedTask(result.items);\n return result;\n });\n };\n\n resolvedTasks = signal<AXPTask[]>([]);\n eff = effect(async () => {\n const viewMode = this.vm.currentViewMode();\n const filter = this.filter();\n if (viewMode === 'kanban') {\n await this.taskResolveHandler(filter);\n }\n });\n\n private async taskResolveHandler(filter: AXPTaskFilter = this.filter()) {\n const result = await this.taskBoardService.getTasks(filter);\n this.validateSelectedTask(result.items);\n this.resolvedTasks.set(result.items);\n }\n\n schedulerComponentChanged(component: AXSchedulerComponent) {\n this.schedulerComponent.set(component);\n }\n\n protected async handleContextMenuOnOpening(event: AXContextMenuOpeningEvent) {\n const currentTask = this.currentTask();\n if (!currentTask) return;\n const providerName = currentTask.provider;\n if (!providerName) return;\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) return;\n const actions = await provider.getActions(currentTask);\n for (const item of actions) {\n const t = item.title;\n const text =\n typeof t === 'string'\n ? t.startsWith('@')\n ? await this.translateService.translateAsync(t)\n : t\n : this.translateService.resolve(t);\n event.items.push({\n text,\n icon: item.icon,\n color: item.color as AXStyleColorType,\n break: item.break,\n data: {\n command: item.command,\n },\n });\n }\n }\n\n protected handleContextMenu(event: AXPTaskAction) {\n this.currentTask.set(event.task);\n const x = event.nativeEvent.clientX;\n const y = event.nativeEvent.clientY;\n const element = event.nativeEvent.target as HTMLElement;\n this.contextMenu()?.showAt({ x, y }, element);\n }\n\n protected handleMonthSlotDblClicked(date: Date) {\n this.vm.setCurrentDate(date);\n this.vm.setViewMode('day');\n }\n\n protected handleViewChange(view: any, dropdownPanel: AXDropdownPanelComponent) {\n this.router.navigate([], { queryParams: { view } });\n this.vm.setViewMode(view);\n this.popover()?.close();\n dropdownPanel.close();\n }\n\n private readonly refreshEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.getResources();\n this.schedulerComponent()?.refresh();\n });\n\n private readonly calendarEventTypeRefreshEffect = effect(() => {\n this.vm.selectedCalendarEventTypeIds();\n // Refresh calendar view to update holidays when event types change\n this.schedulerComponent()?.refresh();\n });\n\n private readonly dayDataCacheEffect = effect(async () => {\n // Update cache when filters, date, or view mode change\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.selectedTaskTypeNames();\n this.vm.selectedCalendarEventTypeIds();\n await this.updateDayDataCache();\n });\n\n private async updateDayDataCache(): Promise<void> {\n const currentDate = this.vm.currentDate();\n const depth = this.calendarDepth();\n\n // Determine the date range based on the sidebar calendar depth\n let rangeStart: Date;\n let rangeEnd: Date;\n if (depth === 'month') {\n // When depth is 'month', the sidebar shows a full year of months -- fetch data for the entire year\n rangeStart = this.calendarService.create(currentDate).startOf('year').date;\n rangeEnd = this.calendarService.create(currentDate).endOf('year').date;\n } else {\n // When depth is 'day', the sidebar shows a single month -- fetch data for that month\n rangeStart = this.calendarService.create(currentDate).startOf('month').date;\n rangeEnd = this.calendarService.create(currentDate).endOf('month').date;\n }\n\n // Get tasks for the range\n const tasks = await this.taskBoardService.getTasks({\n ...this.filter(),\n range: { from: rangeStart, end: rangeEnd },\n });\n\n // Get events for the range\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n const events = await this.taskBoardService.getEvents({ from: rangeStart, end: rangeEnd }, selectedEventTypeIds);\n\n // Create a map of day -> count\n const dayCountMap = new Map<string, number>();\n\n // Count tasks per day\n tasks.items.forEach((task) => {\n const taskStart = new Date(task.startDate);\n const taskEnd = new Date(task.endDate);\n const startDay = this.calendarService.create(taskStart).startOf('day');\n const endDay = this.calendarService.create(taskEnd).startOf('day');\n\n let currentDay = startDay;\n while (currentDay.compare(endDay, 'day') <= 0) {\n const dayKey = currentDay.format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n currentDay = currentDay.add('day', 1);\n }\n });\n\n // Count events per day\n events.forEach((event) => {\n const eventDate = new Date(event.date);\n const dayKey = this.calendarService.create(eventDate).format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n });\n\n this.dayDataCache.set(dayCountMap);\n this.sidebarCalendar()?.render();\n }\n\n protected getDayDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n // Get the native Date object from AXDateTime\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n // Create a new AXDateTime from the date object for consistent formatting\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const dayKey = axDate.format('YYYY-MM-DD');\n return this.dayDataCache().get(dayKey) || 0;\n } catch (error) {\n console.warn('Error getting day data count:', error);\n return 0;\n }\n }\n\n /**\n * Aggregates the day-level data counts for an entire month.\n * Used by the monthCellTemplate to show badges when the sidebar calendar depth is 'month'.\n */\n protected getMonthDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const monthStart = axDate.startOf('month');\n const monthEnd = axDate.endOf('month');\n\n let total = 0;\n let current = monthStart;\n while (current.compare(monthEnd, 'day') <= 0) {\n const dayKey = current.format('YYYY-MM-DD');\n total += this.dayDataCache().get(dayKey) || 0;\n current = current.add('day', 1);\n }\n return total;\n } catch (error) {\n console.warn('Error getting month data count:', error);\n return 0;\n }\n }\n\n protected async handleContextMenuItemClick(event: AXContextMenuItemsClickEvent) {\n const command = event.item.data?.command;\n const provider = this.currentTask()?.provider ?? '';\n try {\n if (command) {\n await this.taskBoardService.executeCommand(command, provider);\n }\n } catch (error) {\n console.error('[TaskBoard] Context menu command failed:', error);\n } finally {\n if (command) {\n this.taskBoardService.requestRefresh(provider || undefined);\n }\n }\n }\n\n changeDate(forward: boolean) {\n const date = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'timeline-day':\n this.vm.setCurrentDate(date.add('day', forward ? 1 : -1).date);\n break;\n\n case 'week':\n this.vm.setCurrentDate(date.add('week', forward ? 1 : -1).date);\n break;\n\n case 'grid':\n case 'agenda':\n case 'kanban':\n case 'timeline-weekly':\n case 'status-grouped-grid':\n this.vm.setCurrentDate(date.add('day', forward ? this.vm.daysCount() : -this.vm.daysCount()).date);\n break;\n\n case 'month':\n case 'timeline-month':\n this.vm.setCurrentDate(date.add('month', forward ? 1 : -1).date);\n break;\n\n case 'timeline-year':\n this.vm.setCurrentDate(date.add('year', forward ? 1 : -1).date);\n break;\n }\n this.popover()?.close();\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n }\n\n private readonly rangeBasedViews: AXPTaskBoardViewMode[] = [\n 'grid',\n 'kanban',\n 'agenda',\n 'status-grouped-grid',\n 'timeline-weekly',\n ];\n\n protected handleCalendarSlotClick(event: AXCalendarSlotClick) {\n if (event.component.activeView !== event.component.depth) return;\n\n const clickedDate: Date = event.item;\n const currentView = this.vm.currentViewMode();\n\n if (this.rangeBasedViews.includes(currentView)) {\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (!selectionStartDate) {\n // Clear any previous range selection before starting a new one\n this.vm.setDaysCount(7); // Reset to default\n this.vm.setRangeStartDate(clickedDate);\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n return;\n }\n\n const date1 = selectionStartDate.getTime();\n const date2 = clickedDate.getTime();\n const newStartDate = new Date(Math.min(date1, date2));\n const newEndDate = new Date(Math.max(date1, date2));\n\n const differenceInDays = this.calculateDifferenceInDays(newStartDate, newEndDate);\n\n // Clear any previous range selection state first to remove any other selection\n this.vm.setRangeStartDate(null);\n\n // Set the new range selection\n this.vm.setCurrentDate(newStartDate);\n this.vm.setDaysCount(differenceInDays);\n\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n this.popover()?.close();\n return;\n }\n\n let dateToSet = new Date(clickedDate);\n\n if (currentView === 'week') {\n const day = dateToSet.getDay();\n const weekStart = this.localeService.activeProfile().calendar.week.startsOn;\n let daysToSubtract = day - weekStart;\n if (daysToSubtract < 0) {\n daysToSubtract += 7;\n }\n dateToSet.setDate(dateToSet.getDate() - daysToSubtract);\n }\n\n this.vm.setCurrentDate(dateToSet);\n this.popover()?.close();\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n }\n\n getCellClass = (date: AXDateTime): string | null => {\n const currentView = this.vm.currentViewMode();\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (this.rangeBasedViews.includes(currentView)) {\n if (selectionStartDate) {\n const axSelectionStartDate = this.calendarService.create(selectionStartDate);\n if (date.equal(axSelectionStartDate, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n const fromRange = this.calendarService.create(this.vm.currentDate());\n const endRange = fromRange.add('day', this.vm.daysCount() - 1);\n\n const isStart = date.equal(fromRange, 'day');\n const isEnd = date.equal(endRange, 'day');\n\n if (isStart && isEnd) return 'ax-range-start ax-range-end';\n if (isStart) return 'ax-range-start';\n if (isEnd) return 'ax-range-end';\n if (date.compare(fromRange, 'day') > 0 && date.compare(endRange, 'day') < 0) {\n return 'ax-range-between';\n }\n\n return null;\n }\n\n if (currentView === 'week') {\n const from = this.calendarService.create(this.vm.currentDate());\n const end = from.add('day', 6);\n\n if (date.equal(from, 'day')) return 'ax-range-start';\n if (date.equal(end, 'day')) return 'ax-range-end';\n if (date.compare(from, 'day') > 0 && date.compare(end, 'day') < 0) {\n return 'ax-range-between';\n }\n }\n\n return null;\n };\n\n /**\n * Helper function to calculate the difference in whole days between two dates.\n * The result is inclusive (e.g., May 5 to May 6 is a 2-day range).\n */\n private calculateDifferenceInDays(start: Date, end: Date): number {\n if (!start || !end) {\n return 1;\n }\n const startDate = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());\n\n const timeDifference = endDate.getTime() - startDate.getTime();\n const daysDifference = Math.round(timeDifference / (1000 * 3600 * 24));\n\n return daysDifference + 1;\n }\n\n handleTodayClick() {\n this.vm.setRangeStartDate(null);\n let currentDate: Date;\n if (this.vm.currentViewMode() === 'week') {\n currentDate = this.calendarService\n .create(new Date(), this.localeService.activeProfile().calendar.system)\n .startOf('week').date;\n } else {\n currentDate = new Date();\n }\n this.vm.setCurrentDate(currentDate);\n this.popover()?.close();\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n }\n\n protected taskTypeItems = computed(() => {\n return this.taskTypes().map((taskType) => ({\n id: taskType.name,\n text: taskType.title,\n icon: taskType.icon,\n }));\n });\n\n // Check if current view mode is kanban, grid, or status-grouped-grid\n protected isNonCalendarView = computed(() => {\n const mode = this.vm.currentViewMode();\n return mode === 'kanban' || mode === 'grid' || mode === 'status-grouped-grid';\n });\n\n protected selectedTaskTypeValues = computed(() => {\n const values = this.vm.selectedTaskTypeNames();\n // If in radio mode (non-calendar view), return only the first value or empty array\n if (this.isNonCalendarView() && values.length > 0) {\n return [values[0]];\n }\n return values;\n });\n\n protected handleTaskTypeSelectionChange(selectedValues: string[] | string): void {\n // Convert single value to array if needed (for radio mode)\n const values = Array.isArray(selectedValues) ? selectedValues : selectedValues ? [selectedValues] : [];\n // If nothing is selected, pass empty array to mean \"all task types\".\n this.vm.setSelectedTaskTypeNames(values, this.isQueryParam());\n }\n\n protected calendarEventTypeItems = computed(() => {\n return this.calendarEventTypes().map((eventType) => ({\n id: eventType.id,\n text: eventType.title,\n icon: eventType.icon,\n color: eventType.color,\n }));\n });\n\n protected selectedCalendarEventTypeValues = computed(() => {\n return this.vm.selectedCalendarEventTypeIds();\n });\n\n protected handleCalendarEventTypeSelectionChange(selectedValues: string[]): void {\n // If nothing is selected, pass empty array to show no types\n this.vm.setSelectedCalendarEventTypeIds(selectedValues || [], this.isQueryParam());\n // Refresh calendar view to update holidays\n this.schedulerComponent()?.refresh();\n }\n\n private async loadFromRoute(): Promise<void> {\n const snapshot = this.activatedRoute.snapshot.queryParamMap;\n const view = (snapshot.get('view') as AXPTaskBoardViewMode) ?? null;\n const allValidViews = this.menuItems().flatMap((c) => (c.children ? c.children.map((child) => child.key) : c.key));\n\n if (view && allValidViews.includes(view)) {\n this.vm.setViewMode(view);\n } else if (!this.vm.currentViewMode()) {\n this.vm.setViewMode('day');\n }\n\n const type = snapshot.getAll('type') as string[];\n const assignee = snapshot.getAll('assignee') as string[];\n const reporter = snapshot.getAll('reporter') as string[];\n const priority = snapshot.getAll('priority') as AXPPriorityFilterKey[];\n if (type.length || assignee.length || priority.length || reporter.length) {\n this.isQueryParam.set(true);\n this.vm.setSelectedTaskTypeNames(type, true);\n this.vm.setSelectedAssigneeIds(assignee, true);\n this.vm.setSelectedReporterIds(reporter, true);\n this.vm.setSelectedPriorities(priority, true);\n }\n\n const dateRange = snapshot.get('dateRange') as string;\n if (dateRange) {\n const range = this.taskBoardService.rangeCalculator(dateRange);\n if (range) {\n this.vm.setCurrentDate(range.from);\n this.vm.setDaysCount(this.calculateDifferenceInDays(range.from, range.end));\n switch (dateRange) {\n case 'today':\n this.vm.setViewMode('day');\n break;\n case 'this-week':\n this.vm.setViewMode('week');\n this.vm.setRangeStartDate(range.from);\n break;\n case 'this-month':\n this.vm.setViewMode('month');\n break;\n }\n }\n }\n }\n\n /**\n * Checks if the currently selected task is still present in the list of visible tasks.\n * If not, it clears the selection to prevent showing details for a hidden task.\n * @param visibleTasks The new array of tasks that will be displayed.\n */\n private validateSelectedTask(visibleTasks: AXPTask[]): void {\n const currentSelectedTask = this.vm.selectedTask();\n // Proceed only if a task is actually selected\n if (currentSelectedTask) {\n // Check if any task in the new list has the same ID as the selected one\n const isSelectedTaskVisible = visibleTasks.some((task) => task.id === currentSelectedTask.id);\n\n // If the selected task is NOT in the new list, clear the selection.\n if (!isSelectedTaskVisible) {\n this.vm.selectTask(null);\n }\n }\n }\n\n protected async getResources(): Promise<void> {\n if (this.vm.selectedTaskTypeNames().length !== 1) {\n this.resources.set([]);\n return;\n }\n const resources = await this.taskBoardService.getResources(this.vm.selectedTaskTypeNames()[0] ?? '');\n this.resources.set(resources);\n }\n\n protected toggleSidebar(): void {\n this.sidebarCollapsed.update((v) => !v);\n }\n\n protected override toggleStartSide(): void {\n this.layout()?.toggleStartSide();\n }\n}\n","<axp-page-layout *translate=\"let t\">\n <axp-layout-start-side\n class=\"ax-border-e ax-lightest-surface ax-h-full ax-min-w-0\"\n [style.width]=\"sidebarCollapsed() ? 'auto' : null\"\n >\n <axp-layout-header\n class=\"ax-flex !ax-flex-row ax-items-center ax-gap-2\"\n [class.ax-justify-center]=\"sidebarCollapsed()\"\n [class.ax-border-b]=\"!sidebarCollapsed()\"\n >\n @if (!sidebarCollapsed()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'sidebar' }\"></ng-container>\n }\n <ax-button look=\"blank\" color=\"neutral\" (onClick)=\"toggleSidebar()\" [iconOnly]=\"true\">\n <ax-icon [icon]=\"sidebarCollapsed() ? 'fa-light fa-chevrons-right' : 'fa-light fa-chevrons-left'\"></ax-icon>\n </ax-button>\n </axp-layout-header>\n\n @if (!sidebarCollapsed()) {\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-overflow-y-auto\">\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-6\">\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n <ax-calendar\n #sidebarCalendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\"\n [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"ax-single-range-calendar ax-border ax-rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n </ax-calendar>\n </div>\n\n <div axAccordionGroup [accordion]=\"false\">\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarFilterTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.title-plural' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarFilterTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n <div axAccordionItemContent>\n <axm-task-board-filters #filtersComponent [isQueryParam]=\"isQueryParam()\"></axm-task-board-filters>\n </div>\n </div>\n @if (!isNonCalendarView()) {\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarEventTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.calendars' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarEventTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n @if (calendarEventTypeItems().length > 0) {\n <div axAccordionItemContent>\n <div class=\"ax-pt-2\">\n <ax-selection-list\n [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"selectedCalendarEventTypeValues()\"\n (onValueChanged)=\"handleCalendarEventTypeSelectionChange($event.value)\"\n direction=\"vertical\"\n [multiple]=\"true\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n >\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span [class]=\"item.icon ? 'ax-ml-2' : ''\">{{ item.text }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </axp-layout-content>\n }\n </axp-layout-start-side>\n <axp-page-toolbar>\n <axp-layout-prefix class=\"sm:ax-flex-row ax-flex-col ax-items-start\">\n <div class=\"ax-scheduler-header ax-w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"timeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n #calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"vm.currentDate()\"\n class=\"ax-single-range-calendar\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n <ax-footer>\n <ax-button\n look=\"link\"\n color=\"primary\"\n [text]=\"todayButtonText()\"\n (onClick)=\"handleTodayClick()\"\n ></ax-button>\n </ax-footer>\n </ax-calendar>\n </div>\n </ax-popover> -->\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix>\n @if (deviceService.isSmall()) {\n <ax-button id=\"axp-toolbar-btn-filters\" (onClick)=\"toggleStartSide()\" [iconOnly]=\"true\" [color]=\"'default'\">\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n <!-- @if (!deviceService.isSmall()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'toolbar' }\"></ng-container>\n } -->\n\n <!-- @if(deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"></ax-icon>\n </ax-button>\n } -->\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-2\">\n @if (isReady()) { @switch(vm.currentViewMode()) { @case('kanban') {\n <axm-task-board-kanban-view\n class=\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\"\n [tasks]=\"resolvedTasks()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-kanban-view>\n } @case('grid') {\n <axm-task-board-grid-view\n class=\"ax-h-full ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-grid-view>\n } @case('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view\n class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-status-grouped-grid-view>\n } @default {\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\"\n [resources]=\"resources()\"\n [startingDate]=\"vm.currentDate()\"\n [dataSource]=\"schedulerDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\"\n (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n } }\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n } } @else {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\">\n <ax-loading></ax-loading>\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<ng-template #viewSelectorTemplate let-location=\"location\">\n @if (location === 'sidebar') {\n <ax-button\n class=\"ax-grow\"\n [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\"\n >\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #sidebarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n } @else {\n <ax-button [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\">\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #toolbarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n }\n</ng-template>\n\n<ng-template #dayCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? slot.slot.date?.day ?? '' }}</span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<ng-template #monthCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? '' }}</span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n"],"names":["i1","i2","i4","i5","i6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-modules-task-management-task-board.page-Bxpga0DN.mjs","sources":["../../../../libs/modules/task-management/src/lib/features/task-board/task-board.viewmodel.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-filters/task-board-filters.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-filters/task-board-filters.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-menu.definition.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.page.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.page.html"],"sourcesContent":["import { AXSchedulerView } from '@acorex/components/scheduler';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { AXMTaskBoardSettings } from './settings.keys';\nimport { AXM_TASK_BOARD_ALL_VIEW_MODE_IDS, normalizeVisibleTaskBoardModesByParts } from './task-board-view-mode-ids';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPTask, AXPWorkflowTaskProvider } from './task-board.types';\n\ntype AXPTaskPriority = NonNullable<AXPTask['priority']>;\nexport type AXPPriorityFilterKey = AXPTaskPriority | 'no_priority';\nexport type AXPTaskBoardViewMode = AXSchedulerView | 'kanban' | 'grid' | 'status-grouped-grid';\n\ntype AXPTaskBoardState = {\n daysCount: number;\n currentDate: Date;\n isLoading: boolean;\n detailPanel: boolean;\n rangeStartDate: Date | null;\n selectedTask: AXPTask | null;\n selectedTaskTypeNames: string[];\n taskTypes: AXPWorkflowTaskProvider[];\n currentViewMode: AXPTaskBoardViewMode;\n /** Modes the user may select (from settings). */\n visibleViewModes: AXPTaskBoardViewMode[];\n selectedPriorities: AXPPriorityFilterKey[];\n selectedAssigneeIds: (string | number)[];\n selectedReporterIds: (string | number)[];\n selectedCalendarEventTypeIds: string[];\n};\n\nexport const AXMTaskBoardViewModel = signalStore(\n { providedIn: 'root' },\n withState<AXPTaskBoardState>(() => ({\n daysCount: 7,\n taskTypes: [],\n isLoading: true,\n detailPanel: false,\n selectedTask: null,\n rangeStartDate: null,\n currentDate: new Date(),\n currentViewMode: 'month',\n visibleViewModes: [...AXM_TASK_BOARD_ALL_VIEW_MODE_IDS] as AXPTaskBoardViewMode[],\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n selectedPriorities: [],\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n })),\n\n withComputed((store) => ({\n selectedTaskTypes: computed(() => {\n const names = store.selectedTaskTypeNames();\n if (!names || names.length === 0) {\n return [];\n }\n return store.taskTypes().filter((tt) => names.includes(tt.name));\n }),\n isTaskSelected: computed(() => store.selectedTask() !== null),\n isDetailPanelOpen: computed(() => store.detailPanel()),\n endDate: computed(() => {\n const currentDate = store.currentDate();\n const daysCount = store.daysCount();\n // Calculate end of the last day in the range (23:59:59.999)\n const endDate = new Date(currentDate);\n endDate.setDate(endDate.getDate() + daysCount - 1);\n endDate.setHours(23, 59, 59, 999);\n return endDate;\n }),\n activeFilterCount: computed(() => {\n let count = 0;\n if (\n store.currentViewMode() !== 'kanban' &&\n store.currentViewMode() !== 'status-grouped-grid' &&\n store.selectedTaskTypeNames().length > 0\n ) {\n count++;\n }\n if (store.selectedAssigneeIds().length > 0) {\n count++;\n }\n if (store.selectedReporterIds().length > 0) {\n count++;\n }\n if (store.selectedPriorities().length > 0) {\n count++;\n }\n return count;\n }),\n })),\n\n withMethods(\n (\n store,\n settingsService = inject(AXPSettingsService),\n taskBoardService = inject(AXPTaskBoardService),\n sessionService = inject(AXPSessionService),\n ) => {\n const userScopedSettings = () => settingsService.scope(AXPPlatformScope.User);\n\n return {\n async initialize() {\n patchState(store, { isLoading: true });\n try {\n const taskTypes = await taskBoardService.getTaskTypes();\n patchState(store, { taskTypes });\n\n const [\n savedDaysCount,\n savedDateString,\n savedDetailPanel,\n savedViewMode,\n savedVisibleCalendarModes,\n savedVisibleTimelineModes,\n savedVisibleTableModes,\n savedVisibleKanbanModes,\n savedTaskTypeNames,\n savedAssigneeIds,\n savedReporterIds,\n savedPriorities,\n savedCalendarEventTypeIds,\n ] = await Promise.all([\n userScopedSettings().get<number | undefined>(AXMTaskBoardSettings.DaysCount),\n userScopedSettings().get<string | undefined>(AXMTaskBoardSettings.CurrentDate),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.DetailPanel),\n userScopedSettings().get<AXPTaskBoardViewMode | undefined>(AXMTaskBoardSettings.ViewMode),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.VisibleCalendarModes),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.VisibleTimelineModes),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.VisibleTableModes),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.VisibleKanbanModes),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.SelectedTaskTypeNames),\n userScopedSettings().get<(string | number)[] | undefined>(AXMTaskBoardSettings.SelectedAssigneeIds),\n userScopedSettings().get<(string | number)[] | undefined>(AXMTaskBoardSettings.SelectedReporterIds),\n userScopedSettings().get<AXPPriorityFilterKey[] | undefined>(AXMTaskBoardSettings.SelectedPriorities),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.SelectedCalendarEventTypeIds),\n ]);\n\n const visibleViewModes = normalizeVisibleTaskBoardModesByParts({\n calendar: savedVisibleCalendarModes,\n timeline: savedVisibleTimelineModes,\n table: savedVisibleTableModes,\n kanban: savedVisibleKanbanModes,\n }) as AXPTaskBoardViewMode[];\n\n // Ensure currentDate is always a valid Date\n let currentDate: Date;\n if (savedDateString) {\n const parsedDate = new Date(savedDateString);\n currentDate = isNaN(parsedDate.getTime()) ? new Date() : parsedDate;\n } else {\n currentDate = new Date();\n }\n\n const currentUserId = sessionService.user?.id;\n const defaultAssigneeIds =\n savedAssigneeIds === undefined && currentUserId != null ? [currentUserId] : (savedAssigneeIds ?? []);\n\n let effectiveViewMode: AXPTaskBoardViewMode = savedViewMode || 'month';\n if (!visibleViewModes.includes(effectiveViewMode)) {\n effectiveViewMode = visibleViewModes[0] ?? 'month';\n }\n\n if (savedViewMode != null && !visibleViewModes.includes(savedViewMode)) {\n userScopedSettings()\n .set(AXMTaskBoardSettings.ViewMode, effectiveViewMode)\n .catch((error) => console.error('Error aligning task board view mode with visible views:', error));\n }\n\n patchState(store, {\n daysCount: savedDaysCount || 7,\n detailPanel: savedDetailPanel || false,\n currentViewMode: effectiveViewMode,\n visibleViewModes,\n currentDate,\n selectedTaskTypeNames: savedTaskTypeNames || [],\n selectedAssigneeIds: defaultAssigneeIds,\n selectedReporterIds: savedReporterIds || [],\n selectedPriorities: savedPriorities || [],\n selectedCalendarEventTypeIds: savedCalendarEventTypeIds || [],\n isLoading: false,\n });\n } catch (error) {\n console.error('Error initializing TaskBoard ViewModel:', error);\n patchState(store, {\n detailPanel: false,\n currentViewMode: 'month',\n visibleViewModes: [...AXM_TASK_BOARD_ALL_VIEW_MODE_IDS] as AXPTaskBoardViewMode[],\n currentDate: new Date(),\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n selectedPriorities: [],\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n taskTypes: store.taskTypes(),\n isLoading: false,\n });\n }\n },\n\n setViewMode(mode: AXPTaskBoardViewMode) {\n const allowed = store.visibleViewModes();\n const effectiveMode = allowed.includes(mode) ? mode : (allowed[0] ?? mode);\n\n if (\n (effectiveMode === 'kanban' || effectiveMode === 'status-grouped-grid') &&\n store.selectedTaskTypeNames().length === 0\n ) {\n const firstTaskType = store.taskTypes()[0];\n if (firstTaskType) {\n this.setSelectedTaskTypeNames([firstTaskType.name]);\n }\n }\n if (\n (effectiveMode === 'kanban' || effectiveMode === 'status-grouped-grid') &&\n store.selectedTaskTypeNames().length > 1\n ) {\n this.setSelectedTaskTypeNames([store.selectedTaskTypeNames()[0]]);\n }\n patchState(store, { currentViewMode: effectiveMode });\n userScopedSettings()\n .set(AXMTaskBoardSettings.ViewMode, effectiveMode)\n .catch((error) => console.error('Error saving calendar view mode:', error));\n },\n\n setCurrentDate(date: Date) {\n patchState(store, { currentDate: new Date(date) });\n userScopedSettings()\n .set(AXMTaskBoardSettings.CurrentDate, date.toISOString())\n .catch((error) => console.error('Error saving current date:', error));\n },\n\n setSelectedTaskTypeNames(taskTypeNames: string[], isQueryParam: boolean = false) {\n patchState(store, { selectedTaskTypeNames: taskTypeNames });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedTaskTypeNames, taskTypeNames)\n .catch((error) => console.error('Error saving selected task type filter:', error));\n },\n\n setSelectedAssigneeIds(assigneeIds: (string | number)[], isQueryParam: boolean = false) {\n patchState(store, { selectedAssigneeIds: assigneeIds });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedAssigneeIds, assigneeIds)\n .catch((error) => console.error('Error saving selected assignee filter:', error));\n },\n\n setSelectedReporterIds(reporterIds: (string | number)[], isQueryParam: boolean = false) {\n patchState(store, { selectedReporterIds: reporterIds });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedReporterIds, reporterIds)\n .catch((error) => console.error('Error saving selected reporter filter:', error));\n },\n\n setSelectedPriorities(priorities: AXPPriorityFilterKey[], isQueryParam: boolean = false) {\n patchState(store, { selectedPriorities: priorities });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedPriorities, priorities)\n .catch((error) => console.error('Error saving selected priority filter:', error));\n },\n\n setSelectedCalendarEventTypeIds(eventTypeIds: string[], isQueryParam: boolean = false) {\n patchState(store, { selectedCalendarEventTypeIds: eventTypeIds });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedCalendarEventTypeIds, eventTypeIds)\n .catch((error) => console.error('Error saving selected calendar event type filter:', error));\n },\n\n /**\n * Sets the currently selected task. Pass `null` to clear the selection.\n * @param task The task to select, or null.\n */\n selectTask(task: AXPTask | null) {\n patchState(store, { selectedTask: task });\n },\n\n /**\n * A convenience method to clear the currently selected task.\n */\n clearSelectedTask() {\n patchState(store, { selectedTask: null });\n },\n\n openDetailPanel() {\n patchState(store, { detailPanel: true });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, true)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n closeDetailPanel() {\n patchState(store, { detailPanel: false });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, false)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n toggleDetailPanel() {\n const detailPanel = !store.detailPanel();\n patchState(store, { detailPanel: detailPanel });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, detailPanel)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n async getStatusName(key: any, provider: string): Promise<string | null> {\n return taskBoardService.getStatusName(key, provider);\n },\n\n /**\n * Sets the start date for a new range selection.\n * Pass `null` to clear the selection.\n * @param date The start date of the range.\n */\n setRangeStartDate(date: Date | null) {\n patchState(store, { rangeStartDate: date });\n },\n\n setDaysCount(days: number) {\n const count = Math.max(1, days);\n patchState(store, { daysCount: count });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DaysCount, count)\n .catch((error) => console.error('Error saving days count:', error));\n },\n };\n },\n ),\n);\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { RootConfig } from '../../../const';\nimport { AXPTaskBoardService } from '../task-board.service';\nimport { AXPExtraField } from '../task-board.types';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-detail-panel',\n templateUrl: './task-board-detail-panel.component.html',\n styleUrls: ['./task-board-detail-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXTranslatorPipe,\n AXButtonComponent,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXDecoratorIconComponent,\n ],\n})\nexport class AXMTaskBoardDetailPanel {\n protected readonly rootConfig = RootConfig;\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n\n protected statusName = signal<string>('');\n protected extraFields = signal<AXPExtraField[]>([]);\n\n #selectedTaskChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const key = selectedTask?.status.id;\n const provider = selectedTask?.provider;\n if (!provider) return;\n const name = await this.vm.getStatusName(key, provider);\n if (name) this.statusName.set(name);\n });\n\n #selectedTaskTypeChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const selectedTaskType = this.taskBoardService.getProvider(selectedTask?.provider);\n const extraFields = await selectedTaskType?.getExtraFields();\n if (!extraFields) {\n this.extraFields.set([]);\n return;\n }\n this.extraFields.set(extraFields);\n });\n\n protected capitalizeFirstLetter(text: string) {\n return String(text).charAt(0).toUpperCase() + String(text).slice(1);\n }\n}\n","@if (vm.isTaskSelected()) {\n @let nodeInfo = vm.selectedTask();\n <div class=\"__header\">\n <div class=\"__title\">\n <span>{{ nodeInfo?.title }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content\">\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.title' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n @if (nodeInfo?.description) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.description' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.description }}</div>\n </div>\n }\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.start-date' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n {{\n nodeInfo?.startDate\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.end-date' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{\n nodeInfo?.endDate\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.reporter' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{ nodeInfo?.reporter?.fullName }}\n </div>\n </div>\n @if (nodeInfo?.assignee) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.assignee' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.assignee?.fullName }}</div>\n </div>\n }\n @if (statusName()) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.status' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ statusName() }}</div>\n </div>\n }\n @if (nodeInfo?.priority) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.priority' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ capitalizeFirstLetter(nodeInfo?.priority ?? '') }}</div>\n </div>\n }\n @if (extraFields() && extraFields().length) {\n <div class=\"__row\">\n <axp-widgets-container [context]=\"nodeInfo\">\n @for (extraField of extraFields(); track extraField) {\n <div class=\"__title\">\n <span>\n {{ extraField.title | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n <ng-container axp-widget-renderer [node]=\"extraField.widget\" [mode]=\"'view'\"> </ng-container>\n </div>\n }\n </axp-widgets-container>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__header\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.title' | translate | async }}\n </span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content ax-flex ax-items-center ax-justify-center\">\n <axp-state-message\n icon=\"fa-light fa-clipboard-list-check\"\n [title]=\"'@task-management:task-board.detail-panel.no-task-selected.title'\"\n [description]=\"'@task-management:task-board.detail-panel.no-task-selected.description'\"\n >\n </axp-state-message>\n </div>\n}\n","import { AXFormComponent, AXFormFieldComponent } from '@acorex/components/form';\nimport { AXLabelComponent } from '@acorex/components/label';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPContextChangeEvent } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule, AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual, sortBy } from 'lodash-es';\nimport { RootConfig } from '../../../const';\nimport { AXMTaskBoardViewModel, AXPPriorityFilterKey } from '../task-board.viewmodel';\n\ntype TaskType = { name: string; title: string };\ntype Assignee = { id: string | number; [key: string]: any };\ntype Reporter = { id: string | number; [key: string]: any };\ntype Priority = { name: AXPPriorityFilterKey; [key: string]: any };\n\n@Component({\n selector: 'axm-task-board-filters',\n templateUrl: './task-board-filters.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXFormFieldComponent,\n AXPWidgetCoreModule,\n AXFormComponent,\n AXLabelComponent,\n AXTranslatorPipe,\n ],\n})\nexport class AXMTaskBoardFiltersComponent {\n protected readonly rootConfig = RootConfig;\n\n private readonly vm = inject(AXMTaskBoardViewModel);\n\n isQueryParam = input<boolean>(false);\n\n applyClicked = output<void>();\n\n protected context = signal<{ options?: any }>({});\n private isInitialized = false;\n\n #init = effect(() => {\n const isLoading = this.vm.isLoading();\n if (!isLoading && !this.isInitialized) {\n this.resetContextToViewModel();\n this.isInitialized = true;\n }\n });\n\n private readonly VALID_PRIORITIES: { title: string; name: AXPPriorityFilterKey }[] = [\n { title: 'Highest', name: 'highest' },\n { title: 'High', name: 'high' },\n { title: 'Medium', name: 'medium' },\n { title: 'Low', name: 'low' },\n { title: 'Lowest', name: 'lowest' },\n { title: 'No Priority', name: 'no_priority' },\n ];\n\n public resetContextToViewModel(): void {\n const vmTaskTypeNames = this.vm.selectedTaskTypeNames();\n const vmAssigneeIds = this.vm.selectedAssigneeIds();\n const vmReporterIds = this.vm.selectedReporterIds();\n const vmPriorities = this.vm.selectedPriorities();\n const currentViewIsMulti = this.isMultiSelectEnabled();\n\n const taskTypeContextValue = currentViewIsMulti\n ? vmTaskTypeNames\n : vmTaskTypeNames.length > 0\n ? vmTaskTypeNames[0]\n : null;\n\n this.context.set({\n options: {\n priority: vmPriorities,\n assignee: vmAssigneeIds,\n reporter: vmReporterIds,\n taskType: taskTypeContextValue,\n },\n });\n }\n\n private readonly isMultiSelectEnabled = computed<boolean>(() => {\n const viewMode = this.vm.currentViewMode();\n return viewMode !== 'kanban' && viewMode !== 'status-grouped-grid';\n });\n\n protected nodes = computed<AXPWidgetNode[]>(() => [\n {\n name: 'taskType',\n path: 'options.taskType',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n dataSource: 'task-types',\n placeholder: 'Select Task Type',\n multiple: this.isMultiSelectEnabled(),\n allowClear: this.isMultiSelectEnabled(),\n },\n meta: {\n title: 'task-board.filter.task-type',\n },\n },\n {\n name: 'assignee',\n path: 'options.assignee',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: 'users',\n textField: 'displayName',\n placeholder: 'Select Assignee',\n },\n meta: {\n title: 'task-board.filter.assignee',\n },\n },\n {\n name: 'reporter',\n path: 'options.reporter',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: 'users',\n textField: 'displayName',\n placeholder: 'Select Reporter',\n },\n meta: {\n title: 'task-board.filter.reporter',\n },\n },\n {\n name: 'priority',\n path: 'options.priority',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'name',\n textField: 'title',\n direction: 'horizontal',\n placeholder: 'Select Priority',\n dataSource: this.VALID_PRIORITIES,\n },\n meta: {\n title: 'task-board.filter.priority',\n },\n },\n ]);\n\n protected handleContextChanged(e: AXPContextChangeEvent) {\n this.context.set(e.data);\n this.handleApply();\n }\n\n protected handleApply() {\n this.syncTaskTypesToViewModel(this.context()?.options?.taskType);\n this.syncAssigneesToViewModel(this.context()?.options?.assignee);\n this.syncReportersToViewModel(this.context()?.options?.reporter);\n this.syncPrioritiesToViewModel(this.context()?.options?.priority);\n this.applyClicked.emit();\n }\n\n private syncTaskTypesToViewModel(selectedValue: TaskType | TaskType[] | string | string[] | null | undefined) {\n let newNames: string[] = [];\n if (Array.isArray(selectedValue)) {\n newNames = selectedValue.filter((v) => v != null).map((t) => (typeof t === 'string' ? t : t.name));\n } else if (selectedValue) {\n newNames = [typeof selectedValue === 'string' ? selectedValue : selectedValue.name];\n }\n const currentNames = this.vm.selectedTaskTypeNames();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedTaskTypeNames(newNames, this.isQueryParam());\n }\n }\n\n private syncAssigneesToViewModel(selectedAssignees: Assignee[] | (string | number)[] | null | undefined) {\n let newIds: (string | number)[] = [];\n if (Array.isArray(selectedAssignees)) {\n newIds = selectedAssignees\n .filter((v) => v != null)\n .map((t) => (typeof t === 'string' || typeof t === 'number' ? t : t.id));\n }\n const currentIds = this.vm.selectedAssigneeIds();\n if (!isEqual(sortBy(currentIds), sortBy(newIds))) {\n this.vm.setSelectedAssigneeIds(newIds, this.isQueryParam());\n }\n }\n\n private syncReportersToViewModel(selectedReporters: Reporter[] | (string | number)[] | null | undefined) {\n let newIds: (string | number)[] = [];\n if (Array.isArray(selectedReporters)) {\n newIds = selectedReporters\n .filter((v) => v != null)\n .map((t) => (typeof t === 'string' || typeof t === 'number' ? t : t.id));\n }\n const currentIds = this.vm.selectedReporterIds();\n if (!isEqual(sortBy(currentIds), sortBy(newIds))) {\n this.vm.setSelectedReporterIds(newIds, this.isQueryParam());\n }\n }\n\n private syncPrioritiesToViewModel(selectedPriorities: Priority[] | string[] | null | undefined) {\n let newNames: AXPPriorityFilterKey[] = [];\n if (Array.isArray(selectedPriorities)) {\n newNames = selectedPriorities\n .filter((v) => v != null)\n .map((t) => (typeof t === 'string' ? (t as AXPPriorityFilterKey) : t.name));\n }\n const currentNames = this.vm.selectedPriorities();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedPriorities(newNames, this.isQueryParam());\n }\n }\n\n protected handleReset() {\n if (this.vm.currentViewMode() === 'kanban' || this.vm.currentViewMode() === 'status-grouped-grid') {\n const currentOptions = this.context();\n this.context.set({\n options: {\n taskType: currentOptions?.options?.taskType,\n },\n });\n return;\n }\n this.context.set({});\n }\n}\n","<div class=\"ax-px-4 ax-py-3 ax-flex ax-flex-col ax-gap-2 ax-sm ax-w-[20rem]\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"handleContextChanged($event)\">\n <ax-form>\n <div class=\"ax-flex ax-flex-col ax-gap-4\">\n <!-- @if (taskTypeItems()) {\n <ax-form-field>\n <ax-label> </ax-label>\n <ax-selection-list\n [items]=\"taskTypeItems()!\"\n [ngModel]=\"selectedTaskTypeValues()!\"\n (onValueChanged)=\"handleTaskTypeSelectionChange.emit($event.value)\"\n direction=\"vertical\"\n [multiple]=\"multiple()\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n >\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span [class]=\"item.icon ? 'ax-ml-2' : ''\">{{ item.text }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n <ax-select-box\n [dataSource]=\"taskTypeItems()!\"\n [ngModel]=\"selectedTaskTypeValues()!\"\n (onValueChanged)=\"handleTaskTypeSelectionChange.emit($event.value)\"\n [multiple]=\"multiple()\"\n valueField=\"id\"\n textField=\"text\"\n >\n </ax-select-box>\n </ax-form-field>\n <hr />\n } -->\n @for (node of nodes(); track $index) {\n <ax-form-field>\n @if (node.meta?.['title']) {\n <ax-label>\n {{ node.meta?.['title'] | translate: { scope: rootConfig.config.i18n } | async }}\n </ax-label>\n }\n <ng-container axp-widget-renderer [node]=\"node\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n </div>\n <!-- <div class=\"ax-flex ax-gap-2 ax-mt-6 ax-mb-1\">\n <ax-button\n (onClick)=\"handleReset()\"\n class=\"ax-w-full\"\n [text]=\"'@general:actions.clear.title' | translate | async\"\n ></ax-button>\n <ax-button\n color=\"primary\"\n [type]=\"'submit'\"\n (onClick)=\"handleApply()\"\n class=\"ax-w-full\"\n [text]=\"'@general:actions.apply.title' | translate | async\"\n ></ax-button>\n </div> -->\n </ax-form>\n </axp-widgets-container>\n</div>\n","//#region ---- Imports ----\n\nimport type { AXPTaskBoardViewMode } from './task-board.viewmodel';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPTaskBoardViewCategory = 'calendar' | 'timeline' | 'table' | 'kanban';\n\nexport type AXMTaskBoardMenuCategoryItem = {\n key: AXPTaskBoardViewCategory;\n text: string;\n icon: string;\n children?: { key: AXPTaskBoardViewMode; text: string; icon: string }[];\n};\n\n//#endregion\n\n//#region ---- Menu Definition ----\n\n/** Default task board view selector structure (filtered by user preference for visible modes). */\nexport const AXM_TASK_BOARD_MENU_ITEMS: readonly AXMTaskBoardMenuCategoryItem[] = [\n {\n key: 'calendar',\n text: 'calendar',\n icon: 'fa-light fa-calendar-day',\n children: [\n { key: 'day', text: 'daily', icon: 'fa-light fa-calendar-day' },\n { key: 'week', text: 'weekly', icon: 'fa-light fa-calendar-week' },\n { key: 'month', text: 'monthly', icon: 'fa-light fa-calendar-alt' },\n { key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range' },\n ],\n },\n {\n key: 'timeline',\n text: 'timeline',\n icon: 'fa-light fa-list-timeline',\n children: [\n { key: 'timeline-day', text: 'daily-timeline', icon: 'fa-light fa-calendar-day' },\n { key: 'timeline-weekly', text: 'weekly-timeline', icon: 'fa-light fa-calendar-week' },\n { key: 'timeline-month', text: 'monthly-timeline', icon: 'fa-light fa-calendar-alt' },\n { key: 'timeline-year', text: 'yearly-timeline', icon: 'fa-light fa-calendar-range' },\n ],\n },\n {\n key: 'table',\n text: 'table',\n icon: 'fa-light fa-table',\n children: [\n { key: 'grid', text: 'grid', icon: 'fa-light fa-table' },\n { key: 'status-grouped-grid', text: 'status-grouped-grid', icon: 'fa-light fa-table' },\n ],\n },\n { key: 'kanban', text: 'kanban', icon: 'fa-light fa-chart-kanban' },\n];\n\n/**\n * Returns menu branches that contain at least one allowed leaf mode.\n */\nexport function filterTaskBoardMenuByAllowedModes(\n items: readonly AXMTaskBoardMenuCategoryItem[],\n allowed: ReadonlySet<string>,\n): AXMTaskBoardMenuCategoryItem[] {\n const result: AXMTaskBoardMenuCategoryItem[] = [];\n\n for (const category of items) {\n if (!category.children) {\n if (allowed.has(category.key)) {\n result.push(category);\n }\n continue;\n }\n\n const children = category.children.filter((child) => allowed.has(child.key));\n if (children.length > 0) {\n result.push({ ...category, children });\n }\n }\n\n return result;\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport {\n AXDayOfWeekName,\n AXSchedulerAppointmentDataSource,\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerDateRange,\n AXSchedulerService,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n AXSchedulerView,\n} from '@acorex/components/scheduler';\nimport { AXCalendarService, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n Type,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RootConfig } from '../../../../const';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport {\n AXPResource,\n AXPTask,\n AXPTaskAction,\n AXPTaskActionMenuItem,\n AXPTaskPopoverComponent,\n} from '../../task-board.types';\nimport { AXMTaskBoardViewModel, AXPTaskBoardViewMode } from '../../task-board.viewmodel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'axm-task-board-calendar-view',\n templateUrl: './task-board-calendar-view.component.html',\n styleUrls: ['./task-board-calendar-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXSchedulerComponent,\n AXPopoverModule,\n AXButtonModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXTranslationModule,\n ],\n})\nexport class AXMTaskBoardCalendarViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n protected readonly schedulerService = inject(AXSchedulerService);\n private readonly destroyRef = inject(DestroyRef);\n\n schedulerComponent = viewChild(AXSchedulerComponent);\n taskPopover = viewChild.required<AXPopoverComponent>('taskPopover');\n\n protected selectedTask = signal<AXPTask | null>(null);\n protected popoverTarget = signal<HTMLElement | null>(null);\n protected taskActions = signal<AXPTaskActionMenuItem[]>([]);\n protected customComponentType = signal<Type<AXPTaskPopoverComponent> | null>(null);\n\n // Separate primary and secondary actions\n protected primaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'primary');\n });\n\n protected secondaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'secondary');\n });\n\n protected customComponentInputs = computed(() => {\n const task = this.selectedTask();\n if (!task) return null;\n return { task };\n });\n\n resources = input<AXPResource[]>([]);\n refreshNonce = input<number>(0);\n startingDate = input<Date>(new Date());\n selectedView = input<AXPTaskBoardViewMode>('month');\n dataSource = input.required<AXSchedulerAppointmentDataSource>();\n protected firstDayOfWeek = signal<AXDayOfWeekName>('monday');\n protected weekendDays = signal<number[]>([0, 6]);\n\n protected holidays = (range: AXSchedulerDateRange): Promise<AXHolidayDate[]> => {\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n // Pass selected calendar IDs (can be empty array to show no events)\n return this.taskBoardService.getEvents(range, selectedEventTypeIds);\n };\n\n protected currentSchedulerView = computed<AXSchedulerView>(() =>\n this.selectedView() === 'kanban' || this.selectedView() === 'grid'\n ? 'month'\n : (this.selectedView() as AXSchedulerView),\n );\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n onMonthSlotDblClicked = output<Date>();\n onActionClick = output<AXPTaskAction>();\n component = output<AXSchedulerComponent>();\n onTaskRightClick = output<AXPTaskAction>();\n onRangeChanged = output<AXSchedulerDateRange>();\n\n private readonly refreshNonceEffect = effect(() => {\n this.refreshNonce();\n this.schedulerComponent()?.refresh();\n });\n\n // async ngOnInit(): Promise<void> {\n // const firstDayOfWeek = await this.settingsService.get(AXPRegionalSetting.FirstDayOfWeek) as unknown as number;\n // const weekDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\n // this.firstDayOfWeek.set(weekDays[firstDayOfWeek] as unknown as AXDayOfWeekName);\n // this.weekendDays.set((await this.settingsService.get(AXPRegionalSetting.WeekendDays)) as unknown as number[]);\n // }\n\n async ngAfterViewInit(): Promise<void> {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const selected = this.selectedTask();\n if (!selected?.provider) return;\n if (data.provider && data.provider !== selected.provider) return;\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const selected = this.selectedTask();\n if (!selected?.provider) return;\n if (data.provider && data.provider !== selected.provider) return;\n this.closePopover();\n });\n\n if (this.schedulerComponent()) {\n this.component.emit(this.schedulerComponent()!);\n }\n }\n\n protected onTaskDrop(event: AXSchedulerSlotDropEvent) {\n // Check if dropped on the same slot (agenda view)\n if (event.slot.view === 'agenda' && event.isSameSlotDrop) {\n return;\n }\n\n // Use the scheduler service utility to calculate the new appointment data\n const dropResult = this.schedulerService.calculateAppointmentDropResult(event);\n\n // If dropped on the same slot, no action needed\n if (dropResult.isSameSlotDrop) {\n return;\n }\n\n // Get the original task (before modification)\n const originalTask = event.appointment as AXPTask;\n\n // Apply the drop result to create an updated task object\n // This uses the scheduler's internal utility for consistent date handling\n const updatedTask = this.schedulerService.applyDropResult({ ...originalTask }, dropResult) as AXPTask;\n\n // Persist the change to the backend via taskBoardService\n this.taskBoardService\n .updateTaskDateRange(originalTask, {\n from: dropResult.startDate,\n end: dropResult.endDate,\n })\n .then((persistedTask) => {\n // Emit the change event so parent can update its state\n this.onTaskChanged.emit(persistedTask);\n\n // Refresh the scheduler to reflect the persisted data\n // This ensures the scheduler's internal state is synchronized with the backend\n this.schedulerComponent()?.refresh();\n })\n .catch((error) => {\n console.error('[TaskBoardCalendar] Failed to update task date range:', error);\n // Revert the visual change if persistence fails by refreshing from backend\n this.schedulerComponent()?.refresh();\n });\n }\n\n protected onTaskRightClickHandler(event: AXSchedulerAppointmentMouseEvent) {\n this.onTaskRightClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected onSlotDblClicked(event: AXSchedulerSlotMouseEvent) {\n if (event.sender.selectedView() === 'month') {\n this.onMonthSlotDblClicked.emit(event.slot.startDate.date);\n }\n }\n\n protected async handleRangeChanged(event: AXSchedulerDateRange) {\n this.onRangeChanged.emit(event);\n }\n\n protected handleActionClick(event: AXSchedulerAppointmentMouseEvent) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected async onTaskClickHandler(event: AXSchedulerAppointmentMouseEvent): Promise<void> {\n const task = event.appointment as AXPTask;\n\n // Find the appointment container element\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n\n // Traverse up to find the appointment container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isAppointment =\n element.classList?.contains('dx-scheduler-appointment') ||\n element.classList?.contains('ax-scheduler-appointment') ||\n element.hasAttribute('data-appointment-id');\n\n if (isAppointment) {\n targetElement = element;\n break;\n }\n\n const parent = element.parentElement;\n if (parent) {\n const isParentAppointment =\n parent.classList?.contains('dx-scheduler-appointment') ||\n parent.classList?.contains('ax-scheduler-appointment');\n\n if (isParentAppointment) {\n targetElement = parent;\n break;\n }\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n // Set the selected task and target element\n this.selectedTask.set(task);\n this.popoverTarget.set(targetElement);\n\n // Check if provider has a custom component\n await this.loadCustomComponent(task);\n\n // Load actions for the task\n await this.loadTaskActions(task);\n\n if (this.taskPopover() && targetElement) {\n this.taskPopover().target = targetElement;\n this.taskPopover().open();\n }\n\n // Still emit the event for backward compatibility\n this.onTaskClick.emit(task);\n }\n\n protected async loadTaskActions(task: AXPTask): Promise<void> {\n try {\n const providerName = task.provider;\n if (!providerName) {\n this.taskActions.set([]);\n return;\n }\n\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) {\n this.taskActions.set([]);\n return;\n }\n\n const actions = await provider.getActions(task);\n // Ensure all actions have a priority (default to 'secondary' if not specified)\n const actionsWithPriority = (actions || []).map((action) => ({\n ...action,\n priority: action.priority ?? 'secondary',\n }));\n this.taskActions.set(actionsWithPriority);\n } catch (error) {\n console.error('Failed to load task actions:', error);\n this.taskActions.set([]);\n }\n }\n\n protected getActionColor(action: AXPTaskActionMenuItem): string | null {\n return action.color as string;\n }\n\n protected async executeAction(action: AXPTaskActionMenuItem): Promise<void> {\n const task = this.selectedTask();\n if (!task || !action.command) return;\n\n try {\n const providerName = task.provider;\n if (!providerName) return;\n\n await this.taskBoardService.executeCommand(action.command, providerName);\n this.closePopover();\n } catch (error) {\n console.error('Failed to execute action:', error);\n }\n }\n\n private async refreshPopoverData(): Promise<void> {\n const task = this.selectedTask();\n if (!task) {\n return;\n }\n await this.loadTaskActions(task);\n this.schedulerComponent()?.refresh();\n }\n\n protected async openTaskDetails(): Promise<void> {\n const task = this.selectedTask();\n if (!task) return;\n\n try {\n await this.commandService.execute('Entity:OpenDetails', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.task.name}`,\n data: { id: task.id },\n });\n this.closePopover();\n } catch (error) {\n console.error('Failed to open task details:', error);\n }\n }\n\n protected async loadCustomComponent(task: AXPTask): Promise<void> {\n if (!task.provider) {\n console.log('[TaskPopover] No provider on task:', task);\n this.customComponentType.set(null);\n return;\n }\n\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n console.log('[TaskPopover] Provider not found:', task.provider);\n this.customComponentType.set(null);\n return;\n }\n\n const componentGetter = provider.getComponent?.();\n if (!componentGetter) {\n console.log('[TaskPopover] No component getter on provider:', task.provider);\n this.customComponentType.set(null);\n return;\n }\n\n console.log('[TaskPopover] Component getter found:', componentGetter, 'Type:', typeof componentGetter);\n\n try {\n let componentType: Type<AXPTaskPopoverComponent>;\n\n // Check if it's a lazy loading function or direct component type\n // A lazy loader is a function that returns a Promise\n // A component type is a class constructor (also a function, but used differently)\n if (typeof componentGetter === 'function') {\n // Try calling it to see if it returns a Promise (lazy loader)\n const testCall = componentGetter as () =>\n | Promise<Type<AXPTaskPopoverComponent>>\n | Type<AXPTaskPopoverComponent>\n | undefined;\n let result: Promise<Type<AXPTaskPopoverComponent>> | Type<AXPTaskPopoverComponent> | undefined;\n\n try {\n result = testCall();\n } catch (e) {\n // If calling throws (e.g., class constructor without 'new'), use it directly\n console.log('[TaskPopover] Component getter is a class constructor, using directly');\n componentType = componentGetter as Type<AXPTaskPopoverComponent>;\n this.customComponentType.set(componentType);\n return;\n }\n\n if (result instanceof Promise) {\n // It's a lazy loading function\n console.log('[TaskPopover] Component getter is a lazy loader');\n componentType = await result;\n } else if (result) {\n // It returned a component type directly\n console.log('[TaskPopover] Component getter returned component type directly');\n componentType = result;\n } else {\n // Result is undefined, use the original as component type\n console.log('[TaskPopover] Component getter returned undefined, using original as component type');\n componentType = componentGetter as Type<AXPTaskPopoverComponent>;\n }\n } else {\n console.log('[TaskPopover] Component getter is not a function');\n this.customComponentType.set(null);\n return;\n }\n\n console.log('[TaskPopover] Component type loaded successfully:', componentType?.name);\n this.customComponentType.set(componentType);\n } catch (error) {\n console.error('[TaskPopover] Failed to load custom task popover component:', error);\n this.customComponentType.set(null);\n }\n }\n\n protected closePopover(): void {\n this.taskPopover()?.close();\n this.customComponentType.set(null);\n this.selectedTask.set(null);\n this.popoverTarget.set(null);\n this.taskActions.set([]);\n }\n\n protected formatTime(date: Date): string {\n return this.calendarService.create(date).format('HH:mm');\n }\n\n protected formatDate(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY');\n }\n\n protected formatDateTime(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY HH:mm');\n }\n\n protected isMultiDay(task: AXPTask): boolean {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return start.date.getTime() !== end.date.getTime();\n }\n\n // Check if start and end are on different days\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const startMonth = start.date.getMonth();\n const endMonth = end.date.getMonth();\n const startYear = start.date.getFullYear();\n const endYear = end.date.getFullYear();\n\n return startDay !== endDay || startMonth !== endMonth || startYear !== endYear;\n }\n\n protected formatDateRange(task: AXPTask): string {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n\n // Same day\n if (start.date.getTime() === end.date.getTime()) {\n return this.formatDate(task.startDate);\n }\n\n // Different days - show range\n const startFormatted = this.formatDate(task.startDate);\n const endFormatted = this.formatDate(task.endDate);\n\n // Same month and year\n if (start.date.getMonth() === end.date.getMonth() && start.date.getFullYear() === end.date.getFullYear()) {\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const monthYear = start.format('MMM YYYY');\n return `${startDay} - ${endDay}, ${monthYear}`;\n }\n\n // Different months or years\n return `${startFormatted} - ${endFormatted}`;\n }\n\n // Not all-day\n if (this.isMultiDay(task)) {\n const startFormatted = this.formatDateTime(task.startDate);\n const endFormatted = this.formatDateTime(task.endDate);\n return `${startFormatted} - ${endFormatted}`;\n }\n\n // Same day, show date with time range\n const dateFormatted = this.formatDate(task.startDate);\n const timeRange = `${this.formatTime(task.startDate)} - ${this.formatTime(task.endDate)}`;\n return `${dateFormatted} ${timeRange}`;\n }\n}\n","<ax-scheduler\n [hasHeader]=\"false\"\n [holidays]=\"holidays\"\n [resources]=\"resources()\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n [multiDayViewDaysCount]=\"vm.daysCount()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onActionClick)=\"handleActionClick($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentClicked)=\"onTaskClickHandler($event)\"\n [weekend]=\"weekendDays()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n></ax-scheduler>\n\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\n<ax-popover\n #taskPopover\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [offsetY]=\"12\"\n [offsetX]=\"12\"\n [adaptivityEnabled]=\"true\"\n>\n <div>\n @if (selectedTask()) {\n <div class=\"task-popover ax-shadow-md ax-border\">\n <!-- Header Section -->\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\" [title]=\"selectedTask()!.title\">{{ selectedTask()!.title }}</h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"closePopover()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n @if (selectedTask()!.description && !customComponentType()) {\n <p class=\"task-popover__description\">{{ selectedTask()!.description }}</p>\n }\n </div>\n </div>\n\n <!-- Custom Component or Default Content -->\n @if (customComponentType()) {\n <!-- Custom Component from Provider -->\n <div class=\"task-popover__custom-content\">\n <ng-container *ngComponentOutlet=\"customComponentType()!; inputs: customComponentInputs()!\"></ng-container>\n </div>\n } @else {\n <!-- Default Content Section -->\n <div class=\"task-popover__content\">\n <!-- Time -->\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(selectedTask()!) }}</span>\n </div>\n </div>\n\n <!-- Status -->\n @if (selectedTask()!.status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ selectedTask()!.status.title }}</span>\n </div>\n </div>\n }\n\n <!-- Assignee -->\n @if (selectedTask()!.assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n <!-- Priority -->\n @if (selectedTask()!.priority) {\n <div class=\"task-popover__info-item\">\n <div\n class=\"task-popover__icon task-popover__icon--priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span\n class=\"task-popover__info-text task-popover__priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n {{ selectedTask()!.priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Actions Section -->\n <div class=\"task-popover__actions\">\n <!-- Task Actions from Provider -->\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions-group\">\n <!-- Primary Actions: Icon-only buttons -->\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n <!-- Secondary Actions: Dropdown with \"...\" button -->\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ax-popover>\n","import { AXButtonClickEvent, AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItem,\n} from '@acorex/components/data-table';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService, AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskAction, AXPTaskFilter } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-grid-view',\n templateUrl: './task-board-grid-view.component.html',\n styleUrls: ['./task-board-grid-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly translationService = inject(AXTranslationService);\n\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n onActionClick = output<AXPTaskAction>();\n\n private fetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected grid = viewChild<AXDataTableComponent>('grid');\n protected commandItems = signal<AXRowCommandItem[]>([\n {\n name: 'view',\n text: this.translationService.translateSync('@task-management:task-board.grid-headers.action-view') ?? 'View',\n icon: 'ax-icon ax-icon-more-horizontal',\n look: 'blank',\n },\n ]);\n\n /** Remount keys so `ax-data-table` is recreated on board refresh (manual fetch mode can keep stale rows otherwise). */\n protected gridRemountKeys = computed(() => [this.refreshNonce()]);\n\n protected tasksDataSource = computed(() => {\n const parentDataSource = this.dataSource();\n // Bumps when the task board refreshes so we get a new data source instance (grid refresh alone can keep cached pages).\n void this.refreshNonce();\n\n return new AXDataSource<any>({\n load: async (e) => {\n const result = await parentDataSource({ skip: e.skip, take: e.take });\n this.fetchedTasks.set(result.items);\n const mappedItems = result.items.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n statusTitle: task.status.title,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n type: this.taskBoardService.getProvider(task.provider)?.title,\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n // Store the original task for row click handler\n _originalTask: task,\n }));\n return { items: mappedItems, total: result.total };\n },\n pageSize: 10,\n key: 'id',\n byKey: async (key: unknown) => {\n return this.fetchedTasks().find((task) => task.id === key);\n },\n });\n });\n\n #dataSourceChanged = effect(() => {\n // Track filter-related signals that affect the data source\n // When these change, the parent's filter() computed signal changes,\n // which means the data source function will return different results\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n\n // Use untracked to refresh the grid without tracking it\n untracked(() => {\n // Schedule refresh in next tick to avoid issues during effect execution\n setTimeout(() => {\n this.grid()?.refresh({ reset: true });\n }, 0);\n });\n });\n\n constructor() {\n // Ensure data source is refreshed after initial render\n afterNextRender(() => {\n untracked(() => {\n this.grid()?.refresh({ reset: true });\n });\n });\n }\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.columns.set([]);\n return;\n }\n\n taskType.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n });\n\n protected handleRowClick(event: AXDataTableRowClick) {\n if (event.data) {\n // Get the original task from the mapped item or find it by ID\n const mappedItem = event.data as any;\n const originalTask = mappedItem._originalTask || this.fetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n }\n\n protected onActionClickHandler(e: AXButtonClickEvent) {\n const task = this.fetchedTasks().find((task) => task.id === e.data.id);\n if (!task) return;\n this.onActionClick.emit({ nativeEvent: e.nativeEvent, task });\n }\n}\n","@for (remountKey of gridRemountKeys(); track remountKey) {\n <ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n (onRowClick)=\"handleRowClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n [allowResizing]=\"true\"\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"statusTitle\"\n [caption]=\"('@task-management:task-board.grid-headers.status' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"type\"\n [caption]=\"('@task-management:task-board.grid-headers.type' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n\n @if (columns().length) {\n <ng-container>\n @for (column of columns(); track column) {\n <axp-widget-column-renderer\n [node]=\"column.widget\"\n [caption]=\"(column.title | translate | async)!\"\n ></axp-widget-column-renderer>\n }\n </ng-container>\n }\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"commandItems()\"\n ></ax-command-column>\n </ax-data-table>\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport {\n AXKanbanBeforeDropEvent,\n AXKanbanComponent,\n AXKanbanItem,\n AXKanbanMouseEvent,\n AXKanbanSortEvent,\n AXKanbanStatus,\n} from '@acorex/components/kanban';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n model,\n output,\n signal,\n Type,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport {\n AXPTask,\n AXPTaskAction,\n AXPTaskActionMenuItem,\n AXPTaskPopoverComponent,\n} from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'axm-task-board-kanban-view',\n templateUrl: './task-board-kanban-view.component.html',\n styleUrls: ['./task-board-kanban-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXKanbanComponent,\n AXPopoverModule,\n AXButtonModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXTranslationModule,\n ],\n})\nexport class AXMTaskBoardKanbanViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n private readonly destroyRef = inject(DestroyRef);\n\n kanbanComponent = viewChild(AXKanbanComponent);\n taskPopover = viewChild.required<AXPopoverComponent>('taskPopover');\n\n protected selectedTask = signal<AXPTask | null>(null);\n protected popoverTarget = signal<HTMLElement | null>(null);\n protected taskActions = signal<AXPTaskActionMenuItem[]>([]);\n protected customComponentType = signal<Type<AXPTaskPopoverComponent> | null>(null);\n\n // Separate primary and secondary actions\n protected primaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'primary');\n });\n\n protected secondaryActions = computed(() => {\n return this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'secondary');\n });\n\n protected customComponentInputs = computed(() => {\n const task = this.selectedTask();\n if (!task) return null;\n return { task };\n });\n\n tasks = model.required<AXPTask[]>();\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n component = output<AXKanbanComponent>();\n onActionClick = output<AXPTaskAction>();\n\n statuses = signal<AXKanbanStatus[]>([]);\n\n stableTasks = computed(() => this.tasks(), { equal: isEqual });\n protected kanbanTasks = computed<AXKanbanItem[]>(() => {\n return this.stableTasks().map((task) => ({\n id: task.id,\n title: task.title,\n index: task.index,\n cssClass: task.cssClass,\n priority: task.priority,\n statusKey: task.status.id,\n description: task.description,\n }));\n });\n\n ngAfterViewInit(): void {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const selected = this.selectedTask();\n if (!selected?.provider) return;\n if (data.provider && data.provider !== selected.provider) return;\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const selected = this.selectedTask();\n if (!selected?.provider) return;\n if (data.provider && data.provider !== selected.provider) return;\n this.closePopover();\n });\n\n if (this.kanbanComponent()) {\n this.component.emit(this.kanbanComponent()!);\n }\n }\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.statuses.set([]);\n return;\n }\n taskType.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n //#region ---- Drag & Drop Handling ----\n\n /**\n * Handles the onBeforeDrop event from the kanban component.\n * Uses event.wait() to register async operations that the kanban will await.\n * If action is cancelled/failed, we set event.canceled = true to prevent the drop.\n */\n protected onBeforeDrop(event: AXKanbanBeforeDropEvent): void {\n // If no status change, allow the drop (just reordering)\n if (event.previousStatusKey === event.currentStatusKey) {\n return;\n }\n\n // Find the task being moved\n const task = this.stableTasks().find((t) => t.id === event.item?.id);\n if (!task || !task.provider) {\n // Allow drop if task not found or no provider\n return;\n }\n\n // Get the provider\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n return;\n }\n\n // Register the async operation using event.wait()\n // The kanban component will await this promise before proceeding\n event.wait(this.executeDropAction(event, task, provider));\n }\n\n /**\n * Executes the action for a drop operation.\n * Sets event.canceled = true if action fails or is cancelled.\n * IMPORTANT: Do NOT update the task status in dataSource here - let the kanban handle the move.\n * The kanban will update the status in onSortChanged, and we'll sync with backend there.\n */\n private async executeDropAction(\n event: AXKanbanBeforeDropEvent,\n task: AXPTask,\n provider: ReturnType<typeof this.taskBoardService.getProvider>,\n ): Promise<void> {\n if (!provider) {\n return;\n }\n\n try {\n // Get available actions for the task\n const actions = await provider.getActions(task);\n if (!actions || actions.length === 0) {\n // No actions available, allow the drop\n return;\n }\n\n // Find action that matches the new status\n const matchingAction = this.findActionForStatus(actions, event.currentStatusKey);\n if (!matchingAction || !matchingAction.command) {\n // No matching action found, allow the drop\n return;\n }\n\n // Execute the action and check result\n const result = await this.taskBoardService.executeCommand(matchingAction.command, task.provider!);\n\n // Check if action was successful (not cancelled or failed)\n if (result?.success === false || result === null) {\n // Action was cancelled or failed - prevent the drop\n event.canceled = true;\n return;\n }\n\n // Action succeeded - allow the drop to proceed\n // The kanban will handle the visual move, and onSortChanged will sync with backend\n } catch (error) {\n console.error('[KanbanDrop] Failed to execute action during drop:', error);\n // On error, prevent the drop to be safe\n event.canceled = true;\n }\n }\n\n /**\n * Finds an action that corresponds to the target status.\n * Matches actions by name patterns (e.g., \"approve\" action for \"approved\" status).\n */\n private findActionForStatus(\n actions: AXPTaskActionMenuItem[],\n targetStatus: string | number,\n ): AXPTaskActionMenuItem | null {\n const targetStatusStr = String(targetStatus).toLowerCase();\n\n // Common status-to-action mappings\n const statusActionMap: Record<string, string[]> = {\n approved: ['approve'],\n rejected: ['reject'],\n cancelled: ['cancel'],\n completed: ['complete', 'finish'],\n done: ['complete', 'finish'],\n inprogress: ['start', 'begin'],\n 'in-progress': ['start', 'begin'],\n blocked: ['block'],\n unblocked: ['unblock'],\n };\n\n // Check direct mappings first\n const possibleActionNames = statusActionMap[targetStatusStr] || [];\n for (const actionName of possibleActionNames) {\n const action = actions.find((a) => a.name?.toLowerCase().includes(actionName));\n if (action) {\n return action;\n }\n }\n\n // Try to find action by name containing status keywords\n const statusKeywords = targetStatusStr.split(/[-_\\s]+/);\n for (const keyword of statusKeywords) {\n if (keyword.length < 3) continue; // Skip very short keywords\n\n const action = actions.find((a) => {\n const actionName = a.name?.toLowerCase() || '';\n return actionName.includes(keyword) || keyword.includes(actionName);\n });\n\n if (action) {\n return action;\n }\n }\n\n // Try exact match with action name\n const exactMatch = actions.find((a) => a.name?.toLowerCase() === targetStatusStr);\n if (exactMatch) {\n return exactMatch;\n }\n\n // Try partial match (status contains action name or vice versa)\n for (const action of actions) {\n const actionName = action.name?.toLowerCase() || '';\n if (targetStatusStr.includes(actionName) || actionName.includes(targetStatusStr)) {\n return action;\n }\n }\n\n return null;\n }\n\n //#endregion\n\n protected onSortChanged(event: AXKanbanSortEvent) {\n const tasks = this.tasks().map((item) => {\n const task: AXKanbanItem = event.allItems.find((t) => t.id === item.id);\n if (task) {\n const status = this.statuses().find((s) => s.key === task.statusKey)!;\n return { ...item, index: task.index!, status: { id: status.key, title: status.title } };\n }\n return item;\n });\n\n this.taskBoardService\n .updateTasks(tasks)\n .then((updatedTasks) => {\n this.tasks.set(updatedTasks);\n })\n .catch((error) => {\n console.error('[KanbanSort] Failed to update tasks:', error);\n });\n }\n\n protected async handleItemClick(event: AXKanbanMouseEvent): Promise<void> {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (!task) return;\n\n // Find the kanban item container element\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n\n // Traverse up to find the kanban item container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isKanbanItem =\n element.classList?.contains('dx-kanban-item') ||\n element.classList?.contains('ax-kanban-item') ||\n element.hasAttribute('data-item-id');\n\n if (isKanbanItem) {\n targetElement = element;\n break;\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n // Set the selected task and target element\n this.selectedTask.set(task);\n this.popoverTarget.set(targetElement);\n\n // Check if provider has a custom component\n await this.loadCustomComponent(task);\n\n // Load actions for the task\n await this.loadTaskActions(task);\n\n // Open the popover\n setTimeout(() => {\n if (this.taskPopover() && targetElement) {\n this.taskPopover().target = targetElement;\n this.taskPopover().open();\n }\n }, 0);\n\n // Still emit the event for backward compatibility\n this.onTaskClick.emit(task);\n }\n\n protected handleActionClick(event: AXKanbanMouseEvent) {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (task) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: task });\n }\n }\n\n protected async loadTaskActions(task: AXPTask): Promise<void> {\n try {\n const providerName = task.provider;\n if (!providerName) {\n this.taskActions.set([]);\n return;\n }\n\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) {\n this.taskActions.set([]);\n return;\n }\n\n const actions = await provider.getActions(task);\n // Ensure all actions have a priority (default to 'secondary' if not specified)\n const actionsWithPriority = (actions || []).map((action) => ({\n ...action,\n priority: action.priority ?? 'secondary',\n }));\n this.taskActions.set(actionsWithPriority);\n } catch (error) {\n console.error('Failed to load task actions:', error);\n this.taskActions.set([]);\n }\n }\n\n protected getActionColor(action: AXPTaskActionMenuItem): string | null {\n return action.color as string;\n }\n\n //#region ---- Action Execution ----\n\n /**\n * Executes an action when user clicks on an action button in the popover.\n * If action succeeds, moves the item to the appropriate status using kanban.moveItem().\n */\n protected async executeAction(action: AXPTaskActionMenuItem): Promise<void> {\n const task = this.selectedTask();\n if (!task || !action.command) return;\n\n // Store task info before closing popover\n const taskId = task.id;\n const providerName = task.provider;\n const currentStatusKey = task.status.id;\n\n if (!providerName) return;\n\n try {\n const result = await this.taskBoardService.executeCommand(action.command, providerName);\n\n // Check if action was successful\n if (result?.success === false || result === null) {\n // Action was cancelled or failed - don't close popover, don't move item\n return;\n }\n\n // Action succeeded - close popover first\n this.closePopover();\n\n // Refresh tasks to get updated status and move item if status changed\n await this.refreshAndMoveItem(taskId, providerName, currentStatusKey);\n } catch (error) {\n console.error('Failed to execute action:', error);\n }\n }\n\n /**\n * Refreshes tasks from the provider and moves the item if status changed.\n */\n private async refreshAndMoveItem(\n taskId: string | number,\n providerName: string,\n previousStatusKey: string | number,\n ): Promise<void> {\n try {\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) {\n return;\n }\n\n // Get updated tasks from provider\n const result = await provider.getTasks();\n const updatedTasks = result.items.map((t) => ({ ...t, provider: providerName }));\n\n // Find the updated task to get its new status\n const updatedTask = updatedTasks.find((t) => t.id === taskId);\n if (!updatedTask) {\n return;\n }\n\n const newStatusKey = updatedTask.status.id;\n\n // Check if status actually changed\n if (newStatusKey !== previousStatusKey) {\n // Move the item programmatically to the new status using kanban API\n const kanban = this.kanbanComponent();\n if (kanban) {\n await kanban.moveItem(taskId, newStatusKey);\n }\n }\n\n // Update the tasks signal with merged data\n const currentTasks = this.tasks();\n const updatedTasksMap = new Map(updatedTasks.map((t) => [t.id, t]));\n\n const mergedTasks = currentTasks.map((t) => {\n const updated = updatedTasksMap.get(t.id);\n return updated ? { ...updated } : t;\n });\n\n // Add any new tasks\n const existingIds = new Set(currentTasks.map((t) => t.id));\n const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id)).map((t) => ({ ...t }));\n mergedTasks.push(...newTasks);\n\n this.tasks.set([...mergedTasks]);\n } catch (error) {\n console.error('Failed to refresh tasks:', error);\n }\n }\n\n //#endregion\n\n protected async loadCustomComponent(task: AXPTask): Promise<void> {\n if (!task.provider) {\n this.customComponentType.set(null);\n return;\n }\n\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n this.customComponentType.set(null);\n return;\n }\n\n const componentGetter = provider.getComponent?.();\n if (!componentGetter) {\n this.customComponentType.set(null);\n return;\n }\n\n try {\n let componentType: Type<AXPTaskPopoverComponent>;\n\n // Check if it's a lazy loading function or direct component type\n if (typeof componentGetter === 'function') {\n const testCall = componentGetter as () =>\n | Promise<Type<AXPTaskPopoverComponent>>\n | Type<AXPTaskPopoverComponent>\n | undefined;\n let result: Promise<Type<AXPTaskPopoverComponent>> | Type<AXPTaskPopoverComponent> | undefined;\n\n try {\n result = testCall();\n } catch (e) {\n componentType = componentGetter as Type<AXPTaskPopoverComponent>;\n this.customComponentType.set(componentType);\n return;\n }\n\n if (result instanceof Promise) {\n componentType = await result;\n } else if (result) {\n componentType = result;\n } else {\n componentType = componentGetter as Type<AXPTaskPopoverComponent>;\n }\n } else {\n this.customComponentType.set(null);\n return;\n }\n\n this.customComponentType.set(componentType);\n } catch (error) {\n console.error('[TaskPopover] Failed to load custom task popover component:', error);\n this.customComponentType.set(null);\n }\n }\n\n protected closePopover(): void {\n this.taskPopover().close();\n this.customComponentType.set(null);\n this.selectedTask.set(null);\n this.popoverTarget.set(null);\n this.taskActions.set([]);\n }\n\n private async refreshPopoverData(): Promise<void> {\n const selected = this.selectedTask();\n if (!selected?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(selected.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTasks = result.items.map((t) => ({ ...t, provider: selected.provider }));\n const updatedMap = new Map(updatedTasks.map((t) => [t.id, t]));\n\n const currentTasks = this.tasks();\n const mergedTasks = currentTasks.map((t) => updatedMap.get(t.id) ?? t);\n const existingIds = new Set(currentTasks.map((t) => t.id));\n const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id));\n this.tasks.set([...mergedTasks, ...newTasks]);\n\n const updatedSelectedTask = updatedMap.get(selected.id);\n if (updatedSelectedTask) {\n this.selectedTask.set(updatedSelectedTask);\n await this.loadTaskActions(updatedSelectedTask);\n }\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n\n protected formatTime(date: Date): string {\n return this.calendarService.create(date).format('HH:mm');\n }\n\n protected formatDate(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY');\n }\n\n protected formatDateTime(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY HH:mm');\n }\n\n protected isMultiDay(task: AXPTask): boolean {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return start.date.getTime() !== end.date.getTime();\n }\n\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const startMonth = start.date.getMonth();\n const endMonth = end.date.getMonth();\n const startYear = start.date.getFullYear();\n const endYear = end.date.getFullYear();\n\n return startDay !== endDay || startMonth !== endMonth || startYear !== endYear;\n }\n\n protected formatDateRange(task: AXPTask): string {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n\n if (start.date.getTime() === end.date.getTime()) {\n return this.formatDate(task.startDate);\n }\n\n const startFormatted = this.formatDate(task.startDate);\n const endFormatted = this.formatDate(task.endDate);\n\n if (start.date.getMonth() === end.date.getMonth() && start.date.getFullYear() === end.date.getFullYear()) {\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const monthYear = start.format('MMM YYYY');\n return `${startDay} - ${endDay}, ${monthYear}`;\n }\n\n return `${startFormatted} - ${endFormatted}`;\n }\n\n if (this.isMultiDay(task)) {\n const startFormatted = this.formatDateTime(task.startDate);\n const endFormatted = this.formatDateTime(task.endDate);\n return `${startFormatted} - ${endFormatted}`;\n }\n\n const dateFormatted = this.formatDate(task.startDate);\n const timeRange = `${this.formatTime(task.startDate)} - ${this.formatTime(task.endDate)}`;\n return `${dateFormatted} ${timeRange}`;\n }\n}\n","<ax-kanban\n [statuses]=\"statuses()\"\n [dataSource]=\"kanbanTasks()\"\n (onItemClick)=\"handleItemClick($event)\"\n (onBeforeDrop)=\"onBeforeDrop($event)\"\n (onSortChanged)=\"onSortChanged($event)\"\n></ax-kanban>\n\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\n<ax-popover\n #taskPopover\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [offsetY]=\"12\"\n [offsetX]=\"12\"\n [adaptivityEnabled]=\"true\"\n>\n <div>\n @if (selectedTask()) {\n <div class=\"task-popover ax-shadow-md ax-border\">\n <!-- Header Section -->\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\" [title]=\"selectedTask()!.title\">{{ selectedTask()!.title }}</h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"closePopover()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n @if (selectedTask()!.description && !customComponentType()) {\n <p class=\"task-popover__description\">{{ selectedTask()!.description }}</p>\n }\n </div>\n </div>\n\n <!-- Custom Component or Default Content -->\n @if (customComponentType()) {\n <!-- Custom Component from Provider -->\n <div class=\"task-popover__custom-content\">\n <ng-container *ngComponentOutlet=\"customComponentType()!; inputs: customComponentInputs()!\"></ng-container>\n </div>\n } @else {\n <!-- Default Content Section -->\n <div class=\"task-popover__content\">\n <!-- Time -->\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(selectedTask()!) }}</span>\n </div>\n </div>\n\n <!-- Status -->\n @if (selectedTask()!.status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ selectedTask()!.status.title }}</span>\n </div>\n </div>\n }\n\n <!-- Assignee -->\n @if (selectedTask()!.assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n <!-- Priority -->\n @if (selectedTask()!.priority) {\n <div class=\"task-popover__info-item\">\n <div\n class=\"task-popover__icon task-popover__icon--priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span\n class=\"task-popover__info-text task-popover__priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n {{ selectedTask()!.priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Actions Section -->\n <div class=\"task-popover__actions\">\n <!-- Task Actions from Provider -->\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions-group\">\n <!-- Primary Actions: Icon-only buttons -->\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n <!-- Secondary Actions: Dropdown with \"...\" button -->\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ax-popover>\n","import { AXButtonClickEvent, AXDataSource } from '@acorex/cdk/common';\nimport { AXDataTableComponent, AXDataTableModule } from '@acorex/components/data-table';\nimport { AXKanbanStatus } from '@acorex/components/kanban';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPExtraField, AXPTask, AXPTaskAction, AXPTaskFilter, AXPWorkflowTaskProvider } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\ninterface StatusTaskGroup {\n statusInfo: AXKanbanStatus;\n tasks: AXDataSource<any>;\n}\n\n/** Stable row identity for @for; includes refresh nonce so tables remount after board refresh. */\nfunction statusGroupTrackKey(nonce: number, group: StatusTaskGroup): string {\n return `${nonce}:${String(group.statusInfo.key)}`;\n}\n\n@Component({\n selector: 'axm-task-board-status-grouped-grid-view',\n templateUrl: './task-board-status-grouped-grid-view.component.html',\n styleUrls: ['./task-board-status-grouped-grid-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardStatusGroupedGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n\n provider = input<AXPWorkflowTaskProvider>();\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onActionClick = output<AXPTaskAction>();\n\n groupedTasks = signal<StatusTaskGroup[]>([]);\n private allFetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected statuses = signal<AXKanbanStatus[]>([]);\n protected grids = viewChildren<AXDataTableComponent>('grid');\n\n /** Used by the template so status tables remount when the board refreshes (same as flat grid). */\n protected trackStatusGroup = (_index: number, group: StatusTaskGroup) =>\n statusGroupTrackKey(this.refreshNonce(), group);\n\n #dataChanged = effect(async () => {\n // Track filter-related signals that affect the data source\n // When these change, the parent's filter() computed signal changes,\n // which means the data source function will return different results\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n\n const parentDataSource = this.dataSource();\n const allStatuses = this.statuses();\n\n if (!parentDataSource || allStatuses.length === 0) {\n this.groupedTasks.set([]);\n this.allFetchedTasks.set([]);\n return;\n }\n\n const result = await parentDataSource();\n this.allFetchedTasks.set(result.items);\n const allTasks = result.items;\n\n const statusGroups = allStatuses.map((status) => {\n const tasksForStatus = allTasks.filter((task) => task.status.id === status.key);\n return {\n statusInfo: status,\n tasks: this.createTaskDataSourceForGroup(tasksForStatus),\n };\n });\n\n this.groupedTasks.set(statusGroups);\n untracked(() => {\n // Use afterRender to ensure data tables are rendered before refreshing\n setTimeout(() => {\n // Refresh data sources\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n // Refresh data table components\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 0);\n });\n });\n\n #providerChanged = effect(async () => {\n const provider = this.vm.selectedTaskTypes()[0];\n provider?.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n provider?.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n #gridsChanged = effect(() => {\n // Track when groupedTasks changes to refresh grids\n const groups = this.groupedTasks();\n untracked(() => {\n // Wait for grids to be rendered\n setTimeout(() => {\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 100);\n });\n });\n\n constructor() {\n // Ensure data sources are refreshed after initial render\n afterNextRender(() => {\n untracked(() => {\n // Use a longer timeout to ensure data tables are fully rendered\n setTimeout(() => {\n // Refresh data sources\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n // Refresh data table components\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 200);\n });\n });\n }\n\n private createTaskDataSourceForGroup(tasks: AXPTask[]): AXDataSource<any> {\n return new AXDataSource<any>({\n load: async (e) => {\n const items = tasks.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n }));\n return {\n items: items.slice(e.skip, e.skip + e.take),\n total: items.length,\n };\n },\n pageSize: 5,\n key: 'id',\n byKey: async (key: unknown) => {\n return tasks.find((task) => task.id === key);\n },\n });\n }\n\n protected onActionClickHandler(e: AXButtonClickEvent) {\n const task = this.allFetchedTasks().find((task) => task.id === e.data.id);\n if (!task) return;\n this.onActionClick.emit({ nativeEvent: e.nativeEvent, task });\n }\n}\n","@for (group of groupedTasks(); track trackStatusGroup($index, group)) {\n <h1 class=\"ax-text-xl ax-font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"ax-h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"[\n {\n name: 'view',\n text: ('@task-management:task-board.grid-headers.action-view' | translate | async) ?? 'View',\n icon: 'ax-icon ax-icon-more-horizontal',\n },\n ]\"\n ></ax-command-column>\n </ax-data-table>\n}\n","import { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXAccordionModule } from '@acorex/components/accordion';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCalendarComponent, AXCalendarSlotClick } from '@acorex/components/calendar';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownPanelComponent } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXSchedulerComponent } from '@acorex/components/scheduler';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPBreadcrumbItem, AXPDeviceService } from '@acorex/platform/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, startWith } from 'rxjs';\nimport { RootConfig } from '../../const';\nimport { AXMTaskBoardDetailPanel } from './task-board-detail-panel/task-board-detail-panel.component';\nimport { AXMTaskBoardFiltersComponent } from './task-board-filters/task-board-filters.component';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPResource, AXPTask, AXPTaskAction, AXPTaskFilter, AXPWorkflowTaskProvider } from './task-board.types';\nimport {\n AXM_TASK_BOARD_MENU_ITEMS,\n filterTaskBoardMenuByAllowedModes,\n} from './task-board-menu.definition';\nimport { AXMTaskBoardViewModel, AXPPriorityFilterKey, AXPTaskBoardViewMode } from './task-board.viewmodel';\nimport { AXMTaskBoardCalendarViewComponent } from './views/task-board-calendar-view/task-board-calendar-view.component';\nimport { AXMTaskBoardGridViewComponent } from './views/task-board-grid-view/task-board-grid-view.component';\nimport { AXMTaskBoardKanbanViewComponent } from './views/task-board-kanban-view/task-board-kanban-view.component';\nimport { AXMTaskBoardStatusGroupedGridViewComponent } from './views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component';\n\nexport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\n\n@Component({\n templateUrl: './task-board.page.html',\n styleUrls: ['./task-board.page.scss'],\n imports: [\n FormsModule,\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXAccordionModule,\n AXAccordionCdkModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXMTaskBoardCalendarViewComponent,\n AXMTaskBoardKanbanViewComponent,\n AXMTaskBoardGridViewComponent,\n AXMTaskBoardStatusGroupedGridViewComponent,\n AXMTaskBoardDetailPanel,\n AXDropdownPanelComponent,\n AXPopoverModule,\n AXCalendarComponent,\n AXMTaskBoardFiltersComponent,\n AXCheckBoxModule,\n AXFormModule,\n AXLabelModule,\n AXSelectionListModule,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTaskBoardPage,\n },\n ],\n})\nexport class AXMTaskBoardPage extends AXPPageLayoutBaseComponent implements OnInit {\n private readonly router = inject(Router);\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n protected readonly vm = inject(AXMTaskBoardViewModel);\n private readonly unsubscribe = inject(AXUnsubscriber);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly localeService = inject(AXLocaleService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n\n protected popover = viewChild<AXPopoverComponent>('popover');\n protected calendar = viewChild<AXCalendarComponent>('calendar');\n protected sidebarCalendar = viewChild<AXCalendarComponent>('sidebarCalendar');\n\n protected isReady = signal(false);\n protected taskTypes = signal<AXPWorkflowTaskProvider[]>([]);\n protected calendarEventTypes = signal<Array<{ id: string; title: string; color?: string; icon?: string }>>([]);\n protected resources = signal<AXPResource[]>([]);\n protected isQueryParam = signal<boolean>(false);\n protected refreshNonce = signal(0);\n protected taskTypeAccordionCollapsed = signal(false);\n protected calendarEventTypeAccordionCollapsed = signal(false);\n protected sidebarCollapsed = signal(false);\n private currentTask = signal<AXPTask | null>(null);\n protected currentViewMode = signal<'calendar' | 'kanban' | 'grid' | 'status-grouped-grid'>('calendar');\n protected schedulerComponent = signal<AXSchedulerComponent | null>(null);\n\n private dayDataCache = signal<Map<string, number>>(new Map());\n\n /** View switcher entries filtered by user visibility settings parts. */\n protected readonly menuItems = computed(() => {\n const allowed = new Set(this.vm.visibleViewModes());\n return filterTaskBoardMenuByAllowedModes(AXM_TASK_BOARD_MENU_ITEMS, allowed);\n });\n\n protected calendarType = computed(() => this.localeService.activeProfile().calendar.system);\n protected todayButtonText = computed(() => {\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'grid':\n case 'agenda':\n case 'kanban':\n case 'timeline-day':\n case 'timeline-weekly':\n case 'status-grouped-grid':\n return 'Today';\n case 'week':\n return 'Current week';\n case 'month':\n case 'timeline-month':\n return 'Current month';\n case 'timeline-year':\n return 'Current year';\n default:\n return 'Today';\n }\n });\n protected timeText = computed(() => {\n if (\n this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid'\n ) {\n const currentDate = this.vm.currentDate();\n if (!currentDate) {\n return '';\n }\n const start = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n const end = start.add('day', this.vm.daysCount() - 1);\n const startText = start.format('DD MMMM yyyy', { locale: this.localeService.activeProfile().calendar.system });\n const endText = end.format('DD MMMM yyyy', { locale: this.localeService.activeProfile().calendar.system });\n return `${startText} - ${endText}`;\n }\n return this.schedulerComponent()?.currentDateText() || '';\n });\n protected calendarDepth = computed(() => {\n if (\n this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid'\n ) {\n return 'day';\n }\n return this.schedulerComponent()?.calendarDepth() || 'day';\n });\n\n protected currentDateForCalendar = computed(() => {\n const date = this.vm.currentDate();\n return date || new Date();\n });\n protected readonly selectedViewMode = computed(() => {\n const currentMode = this.vm.currentViewMode();\n const items = this.menuItems();\n for (const category of items) {\n if (category.key === currentMode) {\n return { key: category.key as AXPTaskBoardViewMode, text: category.text, icon: category.icon };\n }\n if (category.children) {\n const foundChild = category.children.find((child) => child.key === currentMode);\n if (foundChild) {\n return foundChild;\n }\n }\n }\n const firstCategory = items[0];\n if (!firstCategory) {\n return {\n key: currentMode,\n text: 'view',\n icon: 'fa-light fa-table',\n };\n }\n return firstCategory.children\n ? firstCategory.children[0]\n : { key: firstCategory.key as AXPTaskBoardViewMode, text: firstCategory.text, icon: firstCategory.icon };\n });\n protected filter = computed<AXPTaskFilter>(() => {\n const taskTypeNames = this.vm.selectedTaskTypeNames();\n const assigneeIds = this.vm.selectedAssigneeIds();\n const reporterIds = this.vm.selectedReporterIds();\n const priorities = this.vm.selectedPriorities();\n\n const currentDate = this.vm.currentDate() || new Date();\n let from: AXDateTime = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n let end: AXDateTime;\n\n const currentView = this.vm.currentViewMode();\n\n if (\n currentView === 'grid' ||\n currentView === 'kanban' ||\n currentView === 'agenda' ||\n currentView === 'timeline-weekly' ||\n currentView === 'status-grouped-grid'\n ) {\n end = from.add('day', this.vm.daysCount() - 1);\n } else if (currentView === 'month' || currentView === 'timeline-month') {\n from = from.startOf('month');\n end = from.endOf('month');\n } else {\n end = from.endOf('day');\n }\n\n return {\n // Empty filter means \"all items\" for task type/provider.\n ...(taskTypeNames.length > 0 && { types: taskTypeNames }),\n ...(assigneeIds.length > 0 && { assigneeIds }),\n ...(reporterIds.length > 0 && { reporterIds }),\n ...(priorities.length > 0 && { priorities }),\n range: { from: from.date, end: end.date },\n };\n });\n\n private contextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n\n override async ngOnInit() {\n await super.ngOnInit();\n await this.vm.initialize();\n\n // Load task types for checkbox filter\n const types = await this.taskBoardService.getTaskTypes();\n this.taskTypes.set(types);\n\n // Load calendar event types for checkbox filter\n const eventTypes = await this.taskBoardService.getCalendarEventTypes();\n this.calendarEventTypes.set(\n eventTypes.map((et: { id: string; title: string }) => ({\n id: et.id,\n title: et.title,\n })),\n );\n\n // Initialize day data cache\n await this.updateDayDataCache();\n\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n startWith(null),\n )\n .subscribe(async () => {\n await this.loadFromRoute();\n if (!this.isReady()) {\n this.isReady.set(true);\n }\n });\n\n this.taskBoardService.refresh$.subscribe(async () => {\n await this.taskResolveHandler();\n await this.getResources();\n this.refreshNonce.update((value) => value + 1);\n this.schedulerComponent()?.refresh();\n });\n }\n override async getPageTitle(): Promise<string> {\n return await this.translateService.translateAsync('@task-management:task-board.page-title');\n }\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [\n {\n title: await this.translateService.translateAsync('@task-management:root-menu'),\n },\n ];\n }\n\n protected schedulerDataSource = (filter?: AXPTaskFilter): Promise<AXPTask[]> => {\n const finalFilter: AXPTaskFilter = { ...this.filter(), ...filter };\n\n return this.taskBoardService.getTasks(finalFilter).then((result) => {\n this.validateSelectedTask(result.items);\n return result.items;\n });\n };\n\n protected gridDataSource = (filter?: AXPTaskFilter): Promise<{ items: AXPTask[]; total: number }> => {\n const finalFilter: AXPTaskFilter = { ...this.filter(), ...filter };\n\n return this.taskBoardService.getTasks(finalFilter).then((result) => {\n this.validateSelectedTask(result.items);\n return result;\n });\n };\n\n resolvedTasks = signal<AXPTask[]>([]);\n eff = effect(async () => {\n const viewMode = this.vm.currentViewMode();\n const filter = this.filter();\n if (viewMode === 'kanban') {\n await this.taskResolveHandler(filter);\n }\n });\n\n private async taskResolveHandler(filter: AXPTaskFilter = this.filter()) {\n const result = await this.taskBoardService.getTasks(filter);\n this.validateSelectedTask(result.items);\n this.resolvedTasks.set(result.items);\n }\n\n schedulerComponentChanged(component: AXSchedulerComponent) {\n this.schedulerComponent.set(component);\n }\n\n protected async handleContextMenuOnOpening(event: AXContextMenuOpeningEvent) {\n const currentTask = this.currentTask();\n if (!currentTask) return;\n const providerName = currentTask.provider;\n if (!providerName) return;\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) return;\n const actions = await provider.getActions(currentTask);\n for (const item of actions) {\n const t = item.title;\n const text =\n typeof t === 'string'\n ? t.startsWith('@')\n ? await this.translateService.translateAsync(t)\n : t\n : this.translateService.resolve(t);\n event.items.push({\n text,\n icon: item.icon,\n color: item.color as AXStyleColorType,\n break: item.break,\n data: {\n command: item.command,\n },\n });\n }\n }\n\n protected handleContextMenu(event: AXPTaskAction) {\n this.currentTask.set(event.task);\n const x = event.nativeEvent.clientX;\n const y = event.nativeEvent.clientY;\n const element = event.nativeEvent.target as HTMLElement;\n this.contextMenu()?.showAt({ x, y }, element);\n }\n\n protected handleMonthSlotDblClicked(date: Date) {\n this.vm.setCurrentDate(date);\n this.vm.setViewMode('day');\n }\n\n protected handleViewChange(view: any, dropdownPanel: AXDropdownPanelComponent) {\n this.router.navigate([], { queryParams: { view } });\n this.vm.setViewMode(view);\n this.popover()?.close();\n dropdownPanel.close();\n }\n\n private readonly refreshEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.getResources();\n this.schedulerComponent()?.refresh();\n });\n\n private readonly calendarEventTypeRefreshEffect = effect(() => {\n this.vm.selectedCalendarEventTypeIds();\n // Refresh calendar view to update holidays when event types change\n this.schedulerComponent()?.refresh();\n });\n\n private readonly dayDataCacheEffect = effect(async () => {\n // Update cache when filters, date, or view mode change\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.selectedTaskTypeNames();\n this.vm.selectedCalendarEventTypeIds();\n await this.updateDayDataCache();\n });\n\n private async updateDayDataCache(): Promise<void> {\n const currentDate = this.vm.currentDate();\n const depth = this.calendarDepth();\n\n // Determine the date range based on the sidebar calendar depth\n let rangeStart: Date;\n let rangeEnd: Date;\n if (depth === 'month') {\n // When depth is 'month', the sidebar shows a full year of months -- fetch data for the entire year\n rangeStart = this.calendarService.create(currentDate).startOf('year').date;\n rangeEnd = this.calendarService.create(currentDate).endOf('year').date;\n } else {\n // When depth is 'day', the sidebar shows a single month -- fetch data for that month\n rangeStart = this.calendarService.create(currentDate).startOf('month').date;\n rangeEnd = this.calendarService.create(currentDate).endOf('month').date;\n }\n\n // Get tasks for the range\n const tasks = await this.taskBoardService.getTasks({\n ...this.filter(),\n range: { from: rangeStart, end: rangeEnd },\n });\n\n // Get events for the range\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n const events = await this.taskBoardService.getEvents({ from: rangeStart, end: rangeEnd }, selectedEventTypeIds);\n\n // Create a map of day -> count\n const dayCountMap = new Map<string, number>();\n\n // Count tasks per day\n tasks.items.forEach((task) => {\n const taskStart = new Date(task.startDate);\n const taskEnd = new Date(task.endDate);\n const startDay = this.calendarService.create(taskStart).startOf('day');\n const endDay = this.calendarService.create(taskEnd).startOf('day');\n\n let currentDay = startDay;\n while (currentDay.compare(endDay, 'day') <= 0) {\n const dayKey = currentDay.format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n currentDay = currentDay.add('day', 1);\n }\n });\n\n // Count events per day\n events.forEach((event) => {\n const eventDate = new Date(event.date);\n const dayKey = this.calendarService.create(eventDate).format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n });\n\n this.dayDataCache.set(dayCountMap);\n this.sidebarCalendar()?.render();\n }\n\n protected getDayDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n // Get the native Date object from AXDateTime\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n // Create a new AXDateTime from the date object for consistent formatting\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const dayKey = axDate.format('YYYY-MM-DD');\n return this.dayDataCache().get(dayKey) || 0;\n } catch (error) {\n console.warn('Error getting day data count:', error);\n return 0;\n }\n }\n\n /**\n * Aggregates the day-level data counts for an entire month.\n * Used by the monthCellTemplate to show badges when the sidebar calendar depth is 'month'.\n */\n protected getMonthDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const monthStart = axDate.startOf('month');\n const monthEnd = axDate.endOf('month');\n\n let total = 0;\n let current = monthStart;\n while (current.compare(monthEnd, 'day') <= 0) {\n const dayKey = current.format('YYYY-MM-DD');\n total += this.dayDataCache().get(dayKey) || 0;\n current = current.add('day', 1);\n }\n return total;\n } catch (error) {\n console.warn('Error getting month data count:', error);\n return 0;\n }\n }\n\n protected async handleContextMenuItemClick(event: AXContextMenuItemsClickEvent) {\n const command = event.item.data?.command;\n const provider = this.currentTask()?.provider ?? '';\n try {\n if (command) {\n await this.taskBoardService.executeCommand(command, provider);\n }\n } catch (error) {\n console.error('[TaskBoard] Context menu command failed:', error);\n } finally {\n if (command) {\n this.taskBoardService.requestRefresh(provider || undefined);\n }\n }\n }\n\n changeDate(forward: boolean) {\n const date = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'timeline-day':\n this.vm.setCurrentDate(date.add('day', forward ? 1 : -1).date);\n break;\n\n case 'week':\n this.vm.setCurrentDate(date.add('week', forward ? 1 : -1).date);\n break;\n\n case 'grid':\n case 'agenda':\n case 'kanban':\n case 'timeline-weekly':\n case 'status-grouped-grid':\n this.vm.setCurrentDate(date.add('day', forward ? this.vm.daysCount() : -this.vm.daysCount()).date);\n break;\n\n case 'month':\n case 'timeline-month':\n this.vm.setCurrentDate(date.add('month', forward ? 1 : -1).date);\n break;\n\n case 'timeline-year':\n this.vm.setCurrentDate(date.add('year', forward ? 1 : -1).date);\n break;\n }\n this.popover()?.close();\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n }\n\n private readonly rangeBasedViews: AXPTaskBoardViewMode[] = [\n 'grid',\n 'kanban',\n 'agenda',\n 'status-grouped-grid',\n 'timeline-weekly',\n ];\n\n protected handleCalendarSlotClick(event: AXCalendarSlotClick) {\n if (event.component.activeView !== event.component.depth) return;\n\n const clickedDate: Date = event.item;\n const currentView = this.vm.currentViewMode();\n\n if (this.rangeBasedViews.includes(currentView)) {\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (!selectionStartDate) {\n // Clear any previous range selection before starting a new one\n this.vm.setDaysCount(7); // Reset to default\n this.vm.setRangeStartDate(clickedDate);\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n return;\n }\n\n const date1 = selectionStartDate.getTime();\n const date2 = clickedDate.getTime();\n const newStartDate = new Date(Math.min(date1, date2));\n const newEndDate = new Date(Math.max(date1, date2));\n\n const differenceInDays = this.calculateDifferenceInDays(newStartDate, newEndDate);\n\n // Clear any previous range selection state first to remove any other selection\n this.vm.setRangeStartDate(null);\n\n // Set the new range selection\n this.vm.setCurrentDate(newStartDate);\n this.vm.setDaysCount(differenceInDays);\n\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n this.popover()?.close();\n return;\n }\n\n let dateToSet = new Date(clickedDate);\n\n if (currentView === 'week') {\n const day = dateToSet.getDay();\n const weekStart = this.localeService.activeProfile().calendar.week.startsOn;\n let daysToSubtract = day - weekStart;\n if (daysToSubtract < 0) {\n daysToSubtract += 7;\n }\n dateToSet.setDate(dateToSet.getDate() - daysToSubtract);\n }\n\n this.vm.setCurrentDate(dateToSet);\n this.popover()?.close();\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n }\n\n getCellClass = (date: AXDateTime): string | null => {\n const currentView = this.vm.currentViewMode();\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (this.rangeBasedViews.includes(currentView)) {\n if (selectionStartDate) {\n const axSelectionStartDate = this.calendarService.create(selectionStartDate);\n if (date.equal(axSelectionStartDate, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n const fromRange = this.calendarService.create(this.vm.currentDate());\n const endRange = fromRange.add('day', this.vm.daysCount() - 1);\n\n const isStart = date.equal(fromRange, 'day');\n const isEnd = date.equal(endRange, 'day');\n\n if (isStart && isEnd) return 'ax-range-start ax-range-end';\n if (isStart) return 'ax-range-start';\n if (isEnd) return 'ax-range-end';\n if (date.compare(fromRange, 'day') > 0 && date.compare(endRange, 'day') < 0) {\n return 'ax-range-between';\n }\n\n return null;\n }\n\n if (currentView === 'week') {\n const from = this.calendarService.create(this.vm.currentDate());\n const end = from.add('day', 6);\n\n if (date.equal(from, 'day')) return 'ax-range-start';\n if (date.equal(end, 'day')) return 'ax-range-end';\n if (date.compare(from, 'day') > 0 && date.compare(end, 'day') < 0) {\n return 'ax-range-between';\n }\n }\n\n return null;\n };\n\n /**\n * Helper function to calculate the difference in whole days between two dates.\n * The result is inclusive (e.g., May 5 to May 6 is a 2-day range).\n */\n private calculateDifferenceInDays(start: Date, end: Date): number {\n if (!start || !end) {\n return 1;\n }\n const startDate = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());\n\n const timeDifference = endDate.getTime() - startDate.getTime();\n const daysDifference = Math.round(timeDifference / (1000 * 3600 * 24));\n\n return daysDifference + 1;\n }\n\n handleTodayClick() {\n this.vm.setRangeStartDate(null);\n let currentDate: Date;\n if (this.vm.currentViewMode() === 'week') {\n currentDate = this.calendarService\n .create(new Date(), this.localeService.activeProfile().calendar.system)\n .startOf('week').date;\n } else {\n currentDate = new Date();\n }\n this.vm.setCurrentDate(currentDate);\n this.popover()?.close();\n this.calendar()?.render();\n this.sidebarCalendar()?.render();\n }\n\n protected taskTypeItems = computed(() => {\n return this.taskTypes().map((taskType) => ({\n id: taskType.name,\n text: taskType.title,\n icon: taskType.icon,\n }));\n });\n\n // Check if current view mode is kanban, grid, or status-grouped-grid\n protected isNonCalendarView = computed(() => {\n const mode = this.vm.currentViewMode();\n return mode === 'kanban' || mode === 'grid' || mode === 'status-grouped-grid';\n });\n\n protected selectedTaskTypeValues = computed(() => {\n const values = this.vm.selectedTaskTypeNames();\n // If in radio mode (non-calendar view), return only the first value or empty array\n if (this.isNonCalendarView() && values.length > 0) {\n return [values[0]];\n }\n return values;\n });\n\n protected handleTaskTypeSelectionChange(selectedValues: string[] | string): void {\n // Convert single value to array if needed (for radio mode)\n const values = Array.isArray(selectedValues) ? selectedValues : selectedValues ? [selectedValues] : [];\n // If nothing is selected, pass empty array to mean \"all task types\".\n this.vm.setSelectedTaskTypeNames(values, this.isQueryParam());\n }\n\n protected calendarEventTypeItems = computed(() => {\n return this.calendarEventTypes().map((eventType) => ({\n id: eventType.id,\n text: eventType.title,\n icon: eventType.icon,\n color: eventType.color,\n }));\n });\n\n protected selectedCalendarEventTypeValues = computed(() => {\n return this.vm.selectedCalendarEventTypeIds();\n });\n\n protected handleCalendarEventTypeSelectionChange(selectedValues: string[]): void {\n // If nothing is selected, pass empty array to show no types\n this.vm.setSelectedCalendarEventTypeIds(selectedValues || [], this.isQueryParam());\n // Refresh calendar view to update holidays\n this.schedulerComponent()?.refresh();\n }\n\n private async loadFromRoute(): Promise<void> {\n const snapshot = this.activatedRoute.snapshot.queryParamMap;\n const view = (snapshot.get('view') as AXPTaskBoardViewMode) ?? null;\n const allValidViews = this.menuItems().flatMap((c) => (c.children ? c.children.map((child) => child.key) : c.key));\n\n if (view && allValidViews.includes(view)) {\n this.vm.setViewMode(view);\n } else if (!this.vm.currentViewMode()) {\n this.vm.setViewMode('day');\n }\n\n const type = snapshot.getAll('type') as string[];\n const assignee = snapshot.getAll('assignee') as string[];\n const reporter = snapshot.getAll('reporter') as string[];\n const priority = snapshot.getAll('priority') as AXPPriorityFilterKey[];\n if (type.length || assignee.length || priority.length || reporter.length) {\n this.isQueryParam.set(true);\n this.vm.setSelectedTaskTypeNames(type, true);\n this.vm.setSelectedAssigneeIds(assignee, true);\n this.vm.setSelectedReporterIds(reporter, true);\n this.vm.setSelectedPriorities(priority, true);\n }\n\n const dateRange = snapshot.get('dateRange') as string;\n if (dateRange) {\n const range = this.taskBoardService.rangeCalculator(dateRange);\n if (range) {\n this.vm.setCurrentDate(range.from);\n this.vm.setDaysCount(this.calculateDifferenceInDays(range.from, range.end));\n switch (dateRange) {\n case 'today':\n this.vm.setViewMode('day');\n break;\n case 'this-week':\n this.vm.setViewMode('week');\n this.vm.setRangeStartDate(range.from);\n break;\n case 'this-month':\n this.vm.setViewMode('month');\n break;\n }\n }\n }\n }\n\n /**\n * Checks if the currently selected task is still present in the list of visible tasks.\n * If not, it clears the selection to prevent showing details for a hidden task.\n * @param visibleTasks The new array of tasks that will be displayed.\n */\n private validateSelectedTask(visibleTasks: AXPTask[]): void {\n const currentSelectedTask = this.vm.selectedTask();\n // Proceed only if a task is actually selected\n if (currentSelectedTask) {\n // Check if any task in the new list has the same ID as the selected one\n const isSelectedTaskVisible = visibleTasks.some((task) => task.id === currentSelectedTask.id);\n\n // If the selected task is NOT in the new list, clear the selection.\n if (!isSelectedTaskVisible) {\n this.vm.selectTask(null);\n }\n }\n }\n\n protected async getResources(): Promise<void> {\n if (this.vm.selectedTaskTypeNames().length !== 1) {\n this.resources.set([]);\n return;\n }\n const resources = await this.taskBoardService.getResources(this.vm.selectedTaskTypeNames()[0] ?? '');\n this.resources.set(resources);\n }\n\n protected toggleSidebar(): void {\n this.sidebarCollapsed.update((v) => !v);\n }\n\n protected override toggleStartSide(): void {\n this.layout()?.toggleStartSide();\n }\n}\n","<axp-page-layout *translate=\"let t\">\n <axp-layout-start-side\n class=\"ax-border-e ax-lightest-surface ax-h-full ax-min-w-0\"\n [style.width]=\"sidebarCollapsed() ? 'auto' : null\"\n >\n <axp-layout-header\n class=\"ax-flex !ax-flex-row ax-items-center ax-gap-2\"\n [class.ax-justify-center]=\"sidebarCollapsed()\"\n [class.ax-border-b]=\"!sidebarCollapsed()\"\n >\n @if (!sidebarCollapsed()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'sidebar' }\"></ng-container>\n }\n <ax-button look=\"blank\" color=\"neutral\" (onClick)=\"toggleSidebar()\" [iconOnly]=\"true\">\n <ax-icon [icon]=\"sidebarCollapsed() ? 'fa-light fa-chevrons-right' : 'fa-light fa-chevrons-left'\"></ax-icon>\n </ax-button>\n </axp-layout-header>\n\n @if (!sidebarCollapsed()) {\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-overflow-y-auto\">\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-6\">\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n <ax-calendar\n #sidebarCalendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\"\n [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"ax-single-range-calendar ax-border ax-rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n </ax-calendar>\n </div>\n\n <div axAccordionGroup [accordion]=\"false\">\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarFilterTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.title-plural' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarFilterTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n <div axAccordionItemContent>\n <axm-task-board-filters #filtersComponent [isQueryParam]=\"isQueryParam()\"></axm-task-board-filters>\n </div>\n </div>\n @if (!isNonCalendarView()) {\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarEventTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.calendars' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarEventTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n @if (calendarEventTypeItems().length > 0) {\n <div axAccordionItemContent>\n <div class=\"ax-pt-2\">\n <ax-selection-list\n [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"selectedCalendarEventTypeValues()\"\n (onValueChanged)=\"handleCalendarEventTypeSelectionChange($event.value)\"\n direction=\"vertical\"\n [multiple]=\"true\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n >\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span [class]=\"item.icon ? 'ax-ml-2' : ''\">{{ item.text }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </axp-layout-content>\n }\n </axp-layout-start-side>\n <axp-page-toolbar>\n <axp-layout-prefix class=\"sm:ax-flex-row ax-flex-col ax-items-start\">\n <div class=\"ax-scheduler-header ax-w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"timeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n #calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"vm.currentDate()\"\n class=\"ax-single-range-calendar\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n <ax-footer>\n <ax-button\n look=\"link\"\n color=\"primary\"\n [text]=\"todayButtonText()\"\n (onClick)=\"handleTodayClick()\"\n ></ax-button>\n </ax-footer>\n </ax-calendar>\n </div>\n </ax-popover> -->\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix>\n @if (deviceService.isSmall()) {\n <ax-button id=\"axp-toolbar-btn-filters\" (onClick)=\"toggleStartSide()\" [iconOnly]=\"true\" [color]=\"'default'\">\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n <!-- @if (!deviceService.isSmall()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'toolbar' }\"></ng-container>\n } -->\n\n <!-- @if(deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"></ax-icon>\n </ax-button>\n } -->\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-2\">\n @if (isReady()) { @switch(vm.currentViewMode()) { @case('kanban') {\n <axm-task-board-kanban-view\n class=\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\"\n [tasks]=\"resolvedTasks()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-kanban-view>\n } @case('grid') {\n <axm-task-board-grid-view\n class=\"ax-h-full ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-grid-view>\n } @case('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view\n class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-status-grouped-grid-view>\n } @default {\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\"\n [resources]=\"resources()\"\n [startingDate]=\"vm.currentDate()\"\n [dataSource]=\"schedulerDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\"\n (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n } }\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n } } @else {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\">\n <ax-loading></ax-loading>\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<ng-template #viewSelectorTemplate let-location=\"location\">\n @if (location === 'sidebar') {\n <ax-button\n class=\"ax-grow\"\n [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\"\n >\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #sidebarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n } @else {\n <ax-button [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\">\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #toolbarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n }\n</ng-template>\n\n<ng-template #dayCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? slot.slot.date?.day ?? '' }}</span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<ng-template #monthCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? '' }}</span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n"],"names":["i1","i2","i4","i5","i6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCO,MAAM,qBAAqB,GAAG,WAAW,CAC9C,EAAE,UAAU,EAAE,MAAM,EAAE,EACtB,SAAS,CAAoB,OAAO;AAClC,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,cAAc,EAAE,IAAI;IACpB,WAAW,EAAE,IAAI,IAAI,EAAE;AACvB,IAAA,eAAe,EAAE,OAAO;AACxB,IAAA,gBAAgB,EAAE,CAAC,GAAG,gCAAgC,CAA2B;AACjF,IAAA,qBAAqB,EAAE,EAAE;AACzB,IAAA,mBAAmB,EAAE,EAAE;AACvB,IAAA,kBAAkB,EAAE,EAAE;AACtB,IAAA,mBAAmB,EAAE,EAAE;AACvB,IAAA,4BAA4B,EAAE,EAAE;CACjC,CAAC,CAAC,EAEH,YAAY,CAAC,CAAC,KAAK,MAAM;AACvB,IAAA,iBAAiB,EAAE,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,qBAAqB,EAAE;QAC3C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,EAAE;QACX;QACA,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAClE,IAAA,CAAC,CAAC;AACF,IAAA,cAAc,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC;IAC7D,iBAAiB,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;AACtD,IAAA,OAAO,EAAE,QAAQ,CAAC,MAAK;AACrB,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;AACvC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE;;AAEnC,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC;QAClD,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjC,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC,CAAC;AACF,IAAA,iBAAiB,EAAE,QAAQ,CAAC,MAAK;QAC/B,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IACE,KAAK,CAAC,eAAe,EAAE,KAAK,QAAQ;AACpC,YAAA,KAAK,CAAC,eAAe,EAAE,KAAK,qBAAqB;YACjD,KAAK,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC,EACxC;AACA,YAAA,KAAK,EAAE;QACT;QACA,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,YAAA,KAAK,EAAE;QACT;QACA,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,YAAA,KAAK,EAAE;QACT;QACA,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,KAAK,EAAE;QACT;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,CAAC;AACH,CAAA,CAAC,CAAC,EAEH,WAAW,CACT,CACE,KAAK,EACL,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAC5C,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC,EAC9C,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC,KACxC;AACF,IAAA,MAAM,kBAAkB,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAE7E,OAAO;AACL,QAAA,MAAM,UAAU,GAAA;YACd,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtC,YAAA,IAAI;AACF,gBAAA,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE;AACvD,gBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC;AAEhC,gBAAA,MAAM,CACJ,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,EAC1B,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACpB,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAqB,oBAAoB,CAAC,SAAS,CAAC;AAC5E,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAqB,oBAAoB,CAAC,WAAW,CAAC;AAC9E,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAsB,oBAAoB,CAAC,WAAW,CAAC;AAC/E,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAmC,oBAAoB,CAAC,QAAQ,CAAC;AACzF,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAuB,oBAAoB,CAAC,oBAAoB,CAAC;AACzF,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAuB,oBAAoB,CAAC,oBAAoB,CAAC;AACzF,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAuB,oBAAoB,CAAC,iBAAiB,CAAC;AACtF,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAuB,oBAAoB,CAAC,kBAAkB,CAAC;AACvF,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAuB,oBAAoB,CAAC,qBAAqB,CAAC;AAC1F,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAkC,oBAAoB,CAAC,mBAAmB,CAAC;AACnG,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAkC,oBAAoB,CAAC,mBAAmB,CAAC;AACnG,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAqC,oBAAoB,CAAC,kBAAkB,CAAC;AACrG,oBAAA,kBAAkB,EAAE,CAAC,GAAG,CAAuB,oBAAoB,CAAC,4BAA4B,CAAC;AAClG,iBAAA,CAAC;gBAEF,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAC7D,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,KAAK,EAAE,sBAAsB;AAC7B,oBAAA,MAAM,EAAE,uBAAuB;AAChC,iBAAA,CAA2B;;AAG5B,gBAAA,IAAI,WAAiB;gBACrB,IAAI,eAAe,EAAE;AACnB,oBAAA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC;AAC5C,oBAAA,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,GAAG,UAAU;gBACrE;qBAAO;AACL,oBAAA,WAAW,GAAG,IAAI,IAAI,EAAE;gBAC1B;AAEA,gBAAA,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE;gBAC7C,MAAM,kBAAkB,GACtB,gBAAgB,KAAK,SAAS,IAAI,aAAa,IAAI,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,gBAAgB,IAAI,EAAE,CAAC;AAEtG,gBAAA,IAAI,iBAAiB,GAAyB,aAAa,IAAI,OAAO;gBACtE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AACjD,oBAAA,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,OAAO;gBACpD;AAEA,gBAAA,IAAI,aAAa,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACtE,oBAAA,kBAAkB;AACf,yBAAA,GAAG,CAAC,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB;AACpD,yBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,KAAK,CAAC,CAAC;gBACtG;gBAEA,UAAU,CAAC,KAAK,EAAE;oBAChB,SAAS,EAAE,cAAc,IAAI,CAAC;oBAC9B,WAAW,EAAE,gBAAgB,IAAI,KAAK;AACtC,oBAAA,eAAe,EAAE,iBAAiB;oBAClC,gBAAgB;oBAChB,WAAW;oBACX,qBAAqB,EAAE,kBAAkB,IAAI,EAAE;AAC/C,oBAAA,mBAAmB,EAAE,kBAAkB;oBACvC,mBAAmB,EAAE,gBAAgB,IAAI,EAAE;oBAC3C,kBAAkB,EAAE,eAAe,IAAI,EAAE;oBACzC,4BAA4B,EAAE,yBAAyB,IAAI,EAAE;AAC7D,oBAAA,SAAS,EAAE,KAAK;AACjB,iBAAA,CAAC;YACJ;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC;gBAC/D,UAAU,CAAC,KAAK,EAAE;AAChB,oBAAA,WAAW,EAAE,KAAK;AAClB,oBAAA,eAAe,EAAE,OAAO;AACxB,oBAAA,gBAAgB,EAAE,CAAC,GAAG,gCAAgC,CAA2B;oBACjF,WAAW,EAAE,IAAI,IAAI,EAAE;AACvB,oBAAA,qBAAqB,EAAE,EAAE;AACzB,oBAAA,mBAAmB,EAAE,EAAE;AACvB,oBAAA,kBAAkB,EAAE,EAAE;AACtB,oBAAA,mBAAmB,EAAE,EAAE;AACvB,oBAAA,4BAA4B,EAAE,EAAE;AAChC,oBAAA,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;AAC5B,oBAAA,SAAS,EAAE,KAAK;AACjB,iBAAA,CAAC;YACJ;QACF,CAAC;AAED,QAAA,WAAW,CAAC,IAA0B,EAAA;AACpC,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,EAAE;YACxC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YAE1E,IACE,CAAC,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,qBAAqB;gBACtE,KAAK,CAAC,qBAAqB,EAAE,CAAC,MAAM,KAAK,CAAC,EAC1C;gBACA,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC1C,IAAI,aAAa,EAAE;oBACjB,IAAI,CAAC,wBAAwB,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACrD;YACF;YACA,IACE,CAAC,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,qBAAqB;gBACtE,KAAK,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC,EACxC;AACA,gBAAA,IAAI,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE;YACA,UAAU,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;AACrD,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,QAAQ,EAAE,aAAa;AAChD,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC/E,CAAC;AAED,QAAA,cAAc,CAAC,IAAU,EAAA;AACvB,YAAA,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,YAAA,kBAAkB;iBACf,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AACxD,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;AAED,QAAA,wBAAwB,CAAC,aAAuB,EAAE,YAAA,GAAwB,KAAK,EAAA;YAC7E,UAAU,CAAC,KAAK,EAAE,EAAE,qBAAqB,EAAE,aAAa,EAAE,CAAC;AAC3D,YAAA,IAAI,YAAY;gBAAE;AAClB,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,aAAa;AAC7D,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;QACtF,CAAC;AAED,QAAA,sBAAsB,CAAC,WAAgC,EAAE,YAAA,GAAwB,KAAK,EAAA;YACpF,UAAU,CAAC,KAAK,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC;AACvD,YAAA,IAAI,YAAY;gBAAE;AAClB,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,WAAW;AACzD,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC;AAED,QAAA,sBAAsB,CAAC,WAAgC,EAAE,YAAA,GAAwB,KAAK,EAAA;YACpF,UAAU,CAAC,KAAK,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC;AACvD,YAAA,IAAI,YAAY;gBAAE;AAClB,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,WAAW;AACzD,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC;AAED,QAAA,qBAAqB,CAAC,UAAkC,EAAE,YAAA,GAAwB,KAAK,EAAA;YACrF,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;AACrD,YAAA,IAAI,YAAY;gBAAE;AAClB,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,UAAU;AACvD,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC;AAED,QAAA,+BAA+B,CAAC,YAAsB,EAAE,YAAA,GAAwB,KAAK,EAAA;YACnF,UAAU,CAAC,KAAK,EAAE,EAAE,4BAA4B,EAAE,YAAY,EAAE,CAAC;AACjE,YAAA,IAAI,YAAY;gBAAE;AAClB,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,4BAA4B,EAAE,YAAY;AACnE,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;QAChG,CAAC;AAED;;;AAGG;AACH,QAAA,UAAU,CAAC,IAAoB,EAAA;YAC7B,UAAU,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAC3C,CAAC;AAED;;AAEG;QACH,iBAAiB,GAAA;YACf,UAAU,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAC3C,CAAC;QAED,eAAe,GAAA;YACb,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACxC,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI;AAC1C,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;QAED,gBAAgB,GAAA;YACd,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACzC,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,KAAK;AAC3C,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;QAED,iBAAiB,GAAA;AACf,YAAA,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;YACxC,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAC/C,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,WAAW;AACjD,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;AAED,QAAA,MAAM,aAAa,CAAC,GAAQ,EAAE,QAAgB,EAAA;YAC5C,OAAO,gBAAgB,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC;QACtD,CAAC;AAED;;;;AAIG;AACH,QAAA,iBAAiB,CAAC,IAAiB,EAAA;YACjC,UAAU,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAC7C,CAAC;AAED,QAAA,YAAY,CAAC,IAAY,EAAA;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;YAC/B,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACvC,YAAA,kBAAkB;AACf,iBAAA,GAAG,CAAC,oBAAoB,CAAC,SAAS,EAAE,KAAK;AACzC,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;KACF;AACH,CAAC,CACF,CACF;;MC/SY,uBAAuB,CAAA;AAhBpC,IAAA,WAAA,GAAA;QAiBqB,IAAA,CAAA,UAAU,GAAG,UAAU;AACvB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEvD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAS,EAAE,iFAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAkB,EAAE,kFAAC;AAEnD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,YAAW;YACvC,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;AAC3C,YAAA,MAAM,GAAG,GAAG,YAAY,EAAE,MAAM,CAAC,EAAE;AACnC,YAAA,MAAM,QAAQ,GAAG,YAAY,EAAE,QAAQ;AACvC,YAAA,IAAI,CAAC,QAAQ;gBAAE;AACf,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC;AACvD,YAAA,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACrC,QAAA,CAAC,2FAAC;AAEF,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,YAAW;YAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;AAC3C,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC;AAClF,YAAA,MAAM,WAAW,GAAG,MAAM,gBAAgB,EAAE,cAAc,EAAE;YAC5D,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB;YACF;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,QAAA,CAAC,+FAAC;AAKH,IAAA;AAvBC,IAAA,oBAAoB;AASpB,IAAA,wBAAwB;AAWd,IAAA,qBAAqB,CAAC,IAAY,EAAA;QAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE;8GA/BW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BpC,mpJA+HA,EAAA,MAAA,EAAA,CAAA,woEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvGI,iBAAiB,2UACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wBAAwB,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EANxB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,YAAY,0CACZ,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAOP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAhBnC,SAAS;+BACE,6BAA6B,EAAA,eAAA,EAGtB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,SAAS;wBACT,YAAY;wBACZ,gBAAgB;wBAChB,iBAAiB;wBACjB,wBAAwB;wBACxB,mBAAmB;wBACnB,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,mpJAAA,EAAA,MAAA,EAAA,CAAA,woEAAA,CAAA,EAAA;;;MEYU,4BAA4B,CAAA;AAdzC,IAAA,WAAA,GAAA;QAeqB,IAAA,CAAA,UAAU,GAAG,UAAU;AAEzB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAEnD,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,KAAK,mFAAC;QAEpC,IAAA,CAAA,YAAY,GAAG,MAAM,EAAQ;AAEnB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAoB,EAAE,8EAAC;QACzC,IAAA,CAAA,aAAa,GAAG,KAAK;AAE7B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,MAAK;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;YACrC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACrC,IAAI,CAAC,uBAAuB,EAAE;AAC9B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YAC3B;AACF,QAAA,CAAC,4EAAC;AAEe,QAAA,IAAA,CAAA,gBAAgB,GAAoD;AACnF,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;AACrC,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/B,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;AACnC,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AAC7B,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;AACnC,YAAA,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE;SAC9C;AAyBgB,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAU,MAAK;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;AAC1C,YAAA,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,qBAAqB;AACpE,QAAA,CAAC,2FAAC;AAEQ,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAkB,MAAM;AAChD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC9B,gBAAA,OAAO,EAAE;AACP,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,SAAS,EAAE,OAAO;AAClB,oBAAA,UAAU,EAAE,YAAY;AACxB,oBAAA,WAAW,EAAE,kBAAkB;AAC/B,oBAAA,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE;AACrC,oBAAA,UAAU,EAAE,IAAI,CAAC,oBAAoB,EAAE;AACxC,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE,6BAA6B;AACrC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC9B,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,UAAU,EAAE,OAAO;AACnB,oBAAA,SAAS,EAAE,aAAa;AACxB,oBAAA,WAAW,EAAE,iBAAiB;AAC/B,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE,4BAA4B;AACpC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC9B,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,UAAU,EAAE,OAAO;AACnB,oBAAA,SAAS,EAAE,aAAa;AACxB,oBAAA,WAAW,EAAE,iBAAiB;AAC/B,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE,4BAA4B;AACpC,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC9B,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,SAAS,EAAE,OAAO;AAClB,oBAAA,SAAS,EAAE,YAAY;AACvB,oBAAA,WAAW,EAAE,iBAAiB;oBAC9B,UAAU,EAAE,IAAI,CAAC,gBAAgB;AAClC,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,EAAE,4BAA4B;AACpC,iBAAA;AACF,aAAA;AACF,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AA+EH,IAAA;AA7LC,IAAA,KAAK;IAiBE,uBAAuB,GAAA;QAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;AACjD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAEtD,MAAM,oBAAoB,GAAG;AAC3B,cAAE;AACF,cAAE,eAAe,CAAC,MAAM,GAAG;AACzB,kBAAE,eAAe,CAAC,CAAC;kBACjB,IAAI;AAEV,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACf,YAAA,OAAO,EAAE;AACP,gBAAA,QAAQ,EAAE,YAAY;AACtB,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,QAAQ,EAAE,aAAa;AACvB,gBAAA,QAAQ,EAAE,oBAAoB;AAC/B,aAAA;AACF,SAAA,CAAC;IACJ;AA0EU,IAAA,oBAAoB,CAAC,CAAwB,EAAA;QACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE;IACpB;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC;AAChE,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC;AAChE,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC;AAChE,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC;AACjE,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEQ,IAAA,wBAAwB,CAAC,aAA2E,EAAA;QAC1G,IAAI,QAAQ,GAAa,EAAE;AAC3B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AAChC,YAAA,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACpG;aAAO,IAAI,aAAa,EAAE;AACxB,YAAA,QAAQ,GAAG,CAAC,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC;QACrF;QACA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;AACpD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,EAAE,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QACjE;IACF;AAEQ,IAAA,wBAAwB,CAAC,iBAAsE,EAAA;QACrG,IAAI,MAAM,GAAwB,EAAE;AACpC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;AACpC,YAAA,MAAM,GAAG;iBACN,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI;AACvB,iBAAA,GAAG,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5E;QACA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7D;IACF;AAEQ,IAAA,wBAAwB,CAAC,iBAAsE,EAAA;QACrG,IAAI,MAAM,GAAwB,EAAE;AACpC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;AACpC,YAAA,MAAM,GAAG;iBACN,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI;AACvB,iBAAA,GAAG,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5E;QACA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7D;IACF;AAEQ,IAAA,yBAAyB,CAAC,kBAA4D,EAAA;QAC5F,IAAI,QAAQ,GAA2B,EAAE;AACzC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;AACrC,YAAA,QAAQ,GAAG;iBACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI;iBACvB,GAAG,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,QAAQ,GAAI,CAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/E;QACA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;AACjD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9D;IACF;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,qBAAqB,EAAE;AACjG,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACf,gBAAA,OAAO,EAAE;AACP,oBAAA,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ;AAC5C,iBAAA;AACF,aAAA,CAAC;YACF;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB;8GAxMW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxCzC,8hFAkEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlCI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,UAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,gBAAgB,iKAChB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAdxC,SAAS;+BACE,wBAAwB,EAAA,eAAA,EAEjB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,YAAY;wBACZ,oBAAoB;wBACpB,mBAAmB;wBACnB,eAAe;wBACf,gBAAgB;wBAChB,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,8hFAAA,EAAA;;;AEtCH;AAiBA;AAEA;AAEA;AACO,MAAM,yBAAyB,GAA4C;AAChF,IAAA;AACE,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,QAAQ,EAAE;YACR,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE;YAC/D,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE;YAClE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,0BAA0B,EAAE;YACnE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,4BAA4B,EAAE;AACtE,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,IAAI,EAAE,2BAA2B;AACjC,QAAA,QAAQ,EAAE;YACR,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,0BAA0B,EAAE;YACjF,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,2BAA2B,EAAE;YACtF,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,0BAA0B,EAAE;YACrF,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,4BAA4B,EAAE;AACtF,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAE,OAAO;AACZ,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,QAAQ,EAAE;YACR,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACxD,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,mBAAmB,EAAE;AACvF,SAAA;AACF,KAAA;IACD,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE;CACpE;AAED;;AAEG;AACG,SAAU,iCAAiC,CAC/C,KAA8C,EAC9C,OAA4B,EAAA;IAE5B,MAAM,MAAM,GAAmC,EAAE;AAEjD,IAAA,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACtB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvB;YACA;QACF;QAEA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5E,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACxC;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;;MCpBa,iCAAiC,CAAA;AAhB9C,IAAA,WAAA,GAAA;AAiBqB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAClC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC9C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,QAAA,IAAA,CAAA,kBAAkB,GAAG,SAAS,CAAC,oBAAoB,yFAAC;AACpD,QAAA,IAAA,CAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAqB,aAAa,CAAC;AAEzD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAiB,IAAI,mFAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAqB,IAAI,oFAAC;AAChD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,EAAE,kFAAC;AACjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAuC,IAAI,0FAAC;;AAGxE,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YACvC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,WAAW,MAAM,SAAS,CAAC;AAC9F,QAAA,CAAC,qFAAC;AAEQ,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;YACzC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,WAAW,MAAM,WAAW,CAAC;AAChG,QAAA,CAAC,uFAAC;AAEQ,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YACtB,OAAO,EAAE,IAAI,EAAE;AACjB,QAAA,CAAC,4FAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,EAAE,gFAAC;AACpC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,CAAC,mFAAC;AAC/B,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAO,IAAI,IAAI,EAAE,mFAAC;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAuB,OAAO,mFAAC;AACnD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,gFAAoC;AACrD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAkB,QAAQ,qFAAC;QAClD,IAAA,CAAA,WAAW,GAAG,MAAM,CAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEtC,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,KAA2B,KAA8B;YAC7E,MAAM,oBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC,4BAA4B,EAAE;;YAEnE,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,oBAAoB,CAAC;AACrE,QAAA,CAAC;AAES,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAkB,MACzD,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK;AAC1D,cAAE;AACF,cAAG,IAAI,CAAC,YAAY,EAAsB,2FAC7C;QAED,IAAA,CAAA,WAAW,GAAG,MAAM,EAAW;QAC/B,IAAA,CAAA,aAAa,GAAG,MAAM,EAAW;QACjC,IAAA,CAAA,qBAAqB,GAAG,MAAM,EAAQ;QACtC,IAAA,CAAA,aAAa,GAAG,MAAM,EAAiB;QACvC,IAAA,CAAA,SAAS,GAAG,MAAM,EAAwB;QAC1C,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAiB;QAC1C,IAAA,CAAA,cAAc,GAAG,MAAM,EAAwB;AAE9B,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,MAAK;YAChD,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE;AACtC,QAAA,CAAC,yFAAC;AAqXH,IAAA;;;;;;;AA5WC,IAAA,MAAM,eAAe,GAAA;QACnB,IAAI,CAAC,gBAAgB,CAAC;AACnB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,OAAO,IAAI,KAAI;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;YACpC,IAAI,CAAC,QAAQ,EAAE,QAAQ;gBAAE;YACzB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;gBAAE;AAC1D,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,gBAAgB,CAAC;AACnB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;YACpC,IAAI,CAAC,QAAQ,EAAE,QAAQ;gBAAE;YACzB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;gBAAE;YAC1D,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAG,CAAC;QACjD;IACF;AAEU,IAAA,UAAU,CAAC,KAA+B,EAAA;;AAElD,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,EAAE;YACxD;QACF;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,KAAK,CAAC;;AAG9E,QAAA,IAAI,UAAU,CAAC,cAAc,EAAE;YAC7B;QACF;;AAGA,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,WAAsB;;;AAIjD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,GAAG,YAAY,EAAE,EAAE,UAAU,CAAY;;AAGrG,QAAA,IAAI,CAAC;aACF,mBAAmB,CAAC,YAAY,EAAE;YACjC,IAAI,EAAE,UAAU,CAAC,SAAS;YAC1B,GAAG,EAAE,UAAU,CAAC,OAAO;SACxB;AACA,aAAA,IAAI,CAAC,CAAC,aAAa,KAAI;;AAEtB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;;;AAItC,YAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE;AACtC,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC;;AAE7E,YAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE;AACtC,QAAA,CAAC,CAAC;IACN;AAEU,IAAA,uBAAuB,CAAC,KAAuC,EAAA;AACvE,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,WAAsB,EAAE,CAAC;IACpG;AAEU,IAAA,gBAAgB,CAAC,KAAgC,EAAA;QACzD,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,OAAO,EAAE;AAC3C,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC5D;IACF;IAEU,MAAM,kBAAkB,CAAC,KAA2B,EAAA;AAC5D,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAEU,IAAA,iBAAiB,CAAC,KAAuC,EAAA;AACjE,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,WAAsB,EAAE,CAAC;IACjG;IAEU,MAAM,kBAAkB,CAAC,KAAuC,EAAA;AACxE,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,WAAsB;;AAGzC,QAAA,IAAI,aAAa,GAAI,KAAK,CAAC,WAAW,CAAC,aAA6B,IAAK,KAAK,CAAC,WAAW,CAAC,MAAsB;;QAGjH,IAAI,OAAO,GAAG,aAAa;QAC3B,MAAM,QAAQ,GAAG,EAAE;QACnB,IAAI,KAAK,GAAG,CAAC;AAEb,QAAA,OAAO,OAAO,IAAI,OAAO,KAAK,QAAQ,CAAC,IAAI,IAAI,KAAK,GAAG,QAAQ,EAAE;AAC/D,YAAA,KAAK,EAAE;YAEP,MAAM,aAAa,GACjB,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,0BAA0B,CAAC;AACvD,gBAAA,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,0BAA0B,CAAC;AACvD,gBAAA,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC;YAE7C,IAAI,aAAa,EAAE;gBACjB,aAAa,GAAG,OAAO;gBACvB;YACF;AAEA,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa;YACpC,IAAI,MAAM,EAAE;gBACV,MAAM,mBAAmB,GACvB,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,0BAA0B,CAAC;AACtD,oBAAA,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,0BAA0B,CAAC;gBAExD,IAAI,mBAAmB,EAAE;oBACvB,aAAa,GAAG,MAAM;oBACtB;gBACF;YACF;AAEA,YAAA,OAAO,GAAG,OAAO,CAAC,aAA4B;QAChD;;AAGA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;;AAGrC,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;AAGpC,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAEhC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,aAAa,EAAE;AACvC,YAAA,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,aAAa;AACzC,YAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;QAC3B;;AAGA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEU,MAAM,eAAe,CAAC,IAAa,EAAA;AAC3C,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ;YAClC,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB;YACF;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC;YAChE,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB;YACF;YAEA,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;;AAE/C,YAAA,MAAM,mBAAmB,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,MAAM;AAC3D,gBAAA,GAAG,MAAM;AACT,gBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,WAAW;AACzC,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC3C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B;IACF;AAEU,IAAA,cAAc,CAAC,MAA6B,EAAA;QACpD,OAAO,MAAM,CAAC,KAAe;IAC/B;IAEU,MAAM,aAAa,CAAC,MAA6B,EAAA;AACzD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE;AAE9B,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ;AAClC,YAAA,IAAI,CAAC,YAAY;gBAAE;AAEnB,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC;YACxE,IAAI,CAAC,YAAY,EAAE;QACrB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;QACnD;IACF;AAEQ,IAAA,MAAM,kBAAkB,GAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;QAChC,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AACA,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE;IACtC;AAEU,IAAA,MAAM,eAAe,GAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,oBAAoB,EAAE;AACtD,gBAAA,MAAM,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAA,CAAE;AACpE,gBAAA,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;AACtB,aAAA,CAAC;YACF,IAAI,CAAC,YAAY,EAAE;QACrB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;QACtD;IACF;IAEU,MAAM,mBAAmB,CAAC,IAAa,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC;AACvD,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC/D,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC;QACF;AAEA,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,IAAI;QACjD,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC5E,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC;QACF;AAEA,QAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,eAAe,CAAC;AAEtG,QAAA,IAAI;AACF,YAAA,IAAI,aAA4C;;;;AAKhD,YAAA,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;;gBAEzC,MAAM,QAAQ,GAAG,eAGJ;AACb,gBAAA,IAAI,MAA0F;AAE9F,gBAAA,IAAI;oBACF,MAAM,GAAG,QAAQ,EAAE;gBACrB;gBAAE,OAAO,CAAC,EAAE;;AAEV,oBAAA,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC;oBACpF,aAAa,GAAG,eAAgD;AAChE,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC;oBAC3C;gBACF;AAEA,gBAAA,IAAI,MAAM,YAAY,OAAO,EAAE;;AAE7B,oBAAA,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC;oBAC9D,aAAa,GAAG,MAAM,MAAM;gBAC9B;qBAAO,IAAI,MAAM,EAAE;;AAEjB,oBAAA,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC;oBAC9E,aAAa,GAAG,MAAM;gBACxB;qBAAO;;AAEL,oBAAA,OAAO,CAAC,GAAG,CAAC,qFAAqF,CAAC;oBAClG,aAAa,GAAG,eAAgD;gBAClE;YACF;iBAAO;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC;AAC/D,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAClC;YACF;YAEA,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,aAAa,EAAE,IAAI,CAAC;AACrF,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC;QAC7C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,KAAK,CAAC;AACnF,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC;IACF;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE;AAC3B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1B;AAEU,IAAA,UAAU,CAAC,IAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAC1D;AAEU,IAAA,UAAU,CAAC,IAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IACjE;AAEU,IAAA,cAAc,CAAC,IAAU,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC;IACvE;AAEU,IAAA,UAAU,CAAC,IAAa,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACzD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACrD,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;QACpD;;AAGA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACzD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;QACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;QAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;QAEtC,OAAO,QAAQ,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO;IAChF;AAEU,IAAA,eAAe,CAAC,IAAa,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACzD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGrD,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;gBAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACxC;;YAGA,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGlD,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBACxG,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;gBACrC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;AAC1C,gBAAA,OAAO,GAAG,QAAQ,CAAA,GAAA,EAAM,MAAM,CAAA,EAAA,EAAK,SAAS,EAAE;YAChD;;AAGA,YAAA,OAAO,CAAA,EAAG,cAAc,CAAA,GAAA,EAAM,YAAY,EAAE;QAC9C;;AAGA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AACtD,YAAA,OAAO,CAAA,EAAG,cAAc,CAAA,GAAA,EAAM,YAAY,EAAE;QAC9C;;QAGA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QACrD,MAAM,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAE;AACzF,QAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,SAAS,EAAE;IACxC;8GAnbW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,kkCASb,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxErD,02NA2KA,EAAA,MAAA,EAAA,CAAA,4hHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrHI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,8BAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,eAAe,kYACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,iBAAiB,sVACjB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAhB7C,SAAS;+BACE,8BAA8B,EAAA,eAAA,EAGvB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,YAAY;wBACZ,oBAAoB;wBACpB,eAAe;wBACf,cAAc;wBACd,gBAAgB;wBAChB,iBAAiB;wBACjB,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,02NAAA,EAAA,MAAA,EAAA,CAAA,4hHAAA,CAAA,EAAA;AAW8B,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,oBAAoB,sEACE,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEnCvD,6BAA6B,CAAA;AAkExC,IAAA,kBAAkB;AAsBlB,IAAA,WAAA,GAAA;AAvFmB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC9C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEpE,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,gFAA4E;AACvG,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,CAAC,mFAAC;QAE/B,IAAA,CAAA,WAAW,GAAG,MAAM,EAAW;QAC/B,IAAA,CAAA,aAAa,GAAG,MAAM,EAAiB;AAE/B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAY,EAAE,mFAAC;AAClC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAkB,EAAE,8EAAC;AACrC,QAAA,IAAA,CAAA,IAAI,GAAG,SAAS,CAAuB,MAAM,2EAAC;QAC9C,IAAA,CAAA,YAAY,GAAG,MAAM,CAAqB;AAClD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,sDAAsD,CAAC,IAAI,MAAM;AAC7G,gBAAA,IAAI,EAAE,iCAAiC;AACvC,gBAAA,IAAI,EAAE,OAAO;AACd,aAAA;AACF,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAGQ,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,sFAAC;AAEvD,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACxC,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE;;AAE1C,YAAA,KAAK,IAAI,CAAC,YAAY,EAAE;YAExB,OAAO,IAAI,YAAY,CAAM;AAC3B,gBAAA,IAAI,EAAE,OAAO,CAAC,KAAI;AAChB,oBAAA,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBACrE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,oBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;wBAC9C,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,wBAAA,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AAC9B,wBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,GAAG;AACvC,wBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,YAAY;AACjD,wBAAA,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK;AAC7D,wBAAA,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE;4BACrE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM;yBAC3D,CAAC;AACF,wBAAA,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,EAAE;4BACzE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM;yBAC3D,CAAC;;AAEF,wBAAA,aAAa,EAAE,IAAI;AACpB,qBAAA,CAAC,CAAC;oBACH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;gBACpD,CAAC;AACD,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,GAAG,EAAE,IAAI;AACT,gBAAA,KAAK,EAAE,OAAO,GAAY,KAAI;AAC5B,oBAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC;gBAC5D,CAAC;AACF,aAAA,CAAC;AACJ,QAAA,CAAC,sFAAC;AAEF,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,MAAK;;;;AAI/B,YAAA,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;AAC7B,YAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;AAC7B,YAAA,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,YAAY,EAAE;;YAGnB,SAAS,CAAC,MAAK;;gBAEb,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBACvC,CAAC,EAAE,CAAC,CAAC;AACP,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,yFAAC;AAWF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAW;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB;YACF;YAEA,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,KAAI;gBAC7C,IAAI,WAAW,EAAE;AACf,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC/B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,uFAAC;;QAnBA,eAAe,CAAC,MAAK;YACnB,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACvC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,gBAAgB;AAcN,IAAA,cAAc,CAAC,KAA0B,EAAA;AACjD,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE;;AAEd,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAW;YACpC,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC;YAC9G,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;YACrC;QACF;IACF;AAEU,IAAA,oBAAoB,CAAC,CAAqB,EAAA;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACtE,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC/D;8GA9HW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtC1C,0jFA0EA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtCY,iBAAiB,kkCAA+B,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gCAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAhD,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE7C,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBARzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,mBAGnB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,0jFAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA;iaAiB7B,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEM5C,+BAA+B,CAAA;AAhB5C,IAAA,WAAA,GAAA;AAiBqB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAClC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC9C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD,QAAA,IAAA,CAAA,eAAe,GAAG,SAAS,CAAC,iBAAiB,sFAAC;AAC9C,QAAA,IAAA,CAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAqB,aAAa,CAAC;AAEzD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAiB,IAAI,mFAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAqB,IAAI,oFAAC;AAChD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,EAAE,kFAAC;AACjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAuC,IAAI,0FAAC;;AAGxE,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YACvC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,WAAW,MAAM,SAAS,CAAC;AAC9F,QAAA,CAAC,qFAAC;AAEQ,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;YACzC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,WAAW,MAAM,WAAW,CAAC;AAChG,QAAA,CAAC,uFAAC;AAEQ,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YACtB,OAAO,EAAE,IAAI,EAAE;AACjB,QAAA,CAAC,4FAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAa;QAEnC,IAAA,CAAA,WAAW,GAAG,MAAM,EAAW;QAC/B,IAAA,CAAA,aAAa,GAAG,MAAM,EAAW;QACjC,IAAA,CAAA,SAAS,GAAG,MAAM,EAAqB;QACvC,IAAA,CAAA,aAAa,GAAG,MAAM,EAAiB;AAEvC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAmB,EAAE,+EAAC;AAEvC,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,KAAK,EAAE,OAAO,GAAG;AACpD,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAiB,MAAK;AACpD,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;gBACvC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC9B,aAAA,CAAC,CAAC;AACL,QAAA,CAAC,kFAAC;AA0BF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAW;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB;YACF;YACA,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;gBACvC,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,uFAAC;AA4fH,IAAA;IA/hBC,eAAe,GAAA;QACb,IAAI,CAAC,gBAAgB,CAAC;AACnB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,OAAO,IAAI,KAAI;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;YACpC,IAAI,CAAC,QAAQ,EAAE,QAAQ;gBAAE;YACzB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;gBAAE;AAC1D,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,gBAAgB,CAAC;AACnB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;YACpC,IAAI,CAAC,QAAQ,EAAE,QAAQ;gBAAE;YACzB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;gBAAE;YAC1D,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAG,CAAC;QAC9C;IACF;AAEA,IAAA,gBAAgB;;AAehB;;;;AAIG;AACO,IAAA,YAAY,CAAC,KAA8B,EAAA;;QAEnD,IAAI,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,gBAAgB,EAAE;YACtD;QACF;;QAGA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACpE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;YAE3B;QACF;;AAGA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;;;AAIA,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3D;AAEA;;;;;AAKG;AACK,IAAA,MAAM,iBAAiB,CAC7B,KAA8B,EAC9B,IAAa,EACb,QAA8D,EAAA;QAE9D,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;AAEA,QAAA,IAAI;;YAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YAC/C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;;gBAEpC;YACF;;AAGA,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC;YAChF,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;;gBAE9C;YACF;;AAGA,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,QAAS,CAAC;;YAGjG,IAAI,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,EAAE;;AAEhD,gBAAA,KAAK,CAAC,QAAQ,GAAG,IAAI;gBACrB;YACF;;;QAIF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,KAAK,CAAC;;AAE1E,YAAA,KAAK,CAAC,QAAQ,GAAG,IAAI;QACvB;IACF;AAEA;;;AAGG;IACK,mBAAmB,CACzB,OAAgC,EAChC,YAA6B,EAAA;QAE7B,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;;AAG1D,QAAA,MAAM,eAAe,GAA6B;YAChD,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,SAAS,EAAE,CAAC,QAAQ,CAAC;AACrB,YAAA,SAAS,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;AACjC,YAAA,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC5B,YAAA,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AAC9B,YAAA,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;YACjC,OAAO,EAAE,CAAC,OAAO,CAAC;YAClB,SAAS,EAAE,CAAC,SAAS,CAAC;SACvB;;QAGD,MAAM,mBAAmB,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,EAAE;AAClE,QAAA,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE;YAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC9E,IAAI,MAAM,EAAE;AACV,gBAAA,OAAO,MAAM;YACf;QACF;;QAGA,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC;AACvD,QAAA,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE;AACpC,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,SAAS;YAEjC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;gBAChC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;AAC9C,gBAAA,OAAO,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;AACrE,YAAA,CAAC,CAAC;YAEF,IAAI,MAAM,EAAE;AACV,gBAAA,OAAO,MAAM;YACf;QACF;;QAGA,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,eAAe,CAAC;QACjF,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,UAAU;QACnB;;AAGA,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;AACnD,YAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AAChF,gBAAA,OAAO,MAAM;YACf;QACF;AAEA,QAAA,OAAO,IAAI;IACb;;AAIU,IAAA,aAAa,CAAC,KAAwB,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACtC,MAAM,IAAI,GAAiB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACvE,IAAI,IAAI,EAAE;gBACR,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAE;gBACrE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE;YACzF;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC;aACF,WAAW,CAAC,KAAK;AACjB,aAAA,IAAI,CAAC,CAAC,YAAY,KAAI;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9B,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;IAEU,MAAM,eAAe,CAAC,KAAyB,EAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACzE,QAAA,IAAI,CAAC,IAAI;YAAE;;AAGX,QAAA,IAAI,aAAa,GAAI,KAAK,CAAC,WAAW,CAAC,aAA6B,IAAK,KAAK,CAAC,WAAW,CAAC,MAAsB;;QAGjH,IAAI,OAAO,GAAG,aAAa;QAC3B,MAAM,QAAQ,GAAG,EAAE;QACnB,IAAI,KAAK,GAAG,CAAC;AAEb,QAAA,OAAO,OAAO,IAAI,OAAO,KAAK,QAAQ,CAAC,IAAI,IAAI,KAAK,GAAG,QAAQ,EAAE;AAC/D,YAAA,KAAK,EAAE;YAEP,MAAM,YAAY,GAChB,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC;AAC7C,gBAAA,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC;AAC7C,gBAAA,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC;YAEtC,IAAI,YAAY,EAAE;gBAChB,aAAa,GAAG,OAAO;gBACvB;YACF;AAEA,YAAA,OAAO,GAAG,OAAO,CAAC,aAA4B;QAChD;;AAGA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;;AAGrC,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;AAGpC,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;;QAGhC,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,aAAa,EAAE;AACvC,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,aAAa;AACzC,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;YAC3B;QACF,CAAC,EAAE,CAAC,CAAC;;AAGL,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEU,IAAA,iBAAiB,CAAC,KAAyB,EAAA;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACzE;IACF;IAEU,MAAM,eAAe,CAAC,IAAa,EAAA;AAC3C,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ;YAClC,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB;YACF;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC;YAChE,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB;YACF;YAEA,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;;AAE/C,YAAA,MAAM,mBAAmB,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,MAAM;AAC3D,gBAAA,GAAG,MAAM;AACT,gBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,WAAW;AACzC,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC3C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B;IACF;AAEU,IAAA,cAAc,CAAC,MAA6B,EAAA;QACpD,OAAO,MAAM,CAAC,KAAe;IAC/B;;AAIA;;;AAGG;IACO,MAAM,aAAa,CAAC,MAA6B,EAAA;AACzD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE;;AAG9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;AACtB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ;AAClC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;AAEvC,QAAA,IAAI,CAAC,YAAY;YAAE;AAEnB,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC;;YAGvF,IAAI,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,EAAE;;gBAEhD;YACF;;YAGA,IAAI,CAAC,YAAY,EAAE;;YAGnB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,gBAAgB,CAAC;QACvE;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;QACnD;IACF;AAEA;;AAEG;AACK,IAAA,MAAM,kBAAkB,CAC9B,MAAuB,EACvB,YAAoB,EACpB,iBAAkC,EAAA;AAElC,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC;YAChE,IAAI,CAAC,QAAQ,EAAE;gBACb;YACF;;AAGA,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE;YACxC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;;AAGhF,YAAA,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;YAC7D,IAAI,CAAC,WAAW,EAAE;gBAChB;YACF;AAEA,YAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE;;AAG1C,YAAA,IAAI,YAAY,KAAK,iBAAiB,EAAE;;AAEtC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;gBACrC,IAAI,MAAM,EAAE;oBACV,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;gBAC7C;YACF;;AAGA,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACjC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAEnE,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;gBACzC,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACzC,gBAAA,OAAO,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC;AACrC,YAAA,CAAC,CAAC;;AAGF,YAAA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1D,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1F,YAAA,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YAE7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;QAClC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;QAClD;IACF;;IAIU,MAAM,mBAAmB,CAAC,IAAa,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC;QACF;AAEA,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,IAAI;QACjD,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC;QACF;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,aAA4C;;AAGhD,YAAA,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;gBACzC,MAAM,QAAQ,GAAG,eAGJ;AACb,gBAAA,IAAI,MAA0F;AAE9F,gBAAA,IAAI;oBACF,MAAM,GAAG,QAAQ,EAAE;gBACrB;gBAAE,OAAO,CAAC,EAAE;oBACV,aAAa,GAAG,eAAgD;AAChE,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC;oBAC3C;gBACF;AAEA,gBAAA,IAAI,MAAM,YAAY,OAAO,EAAE;oBAC7B,aAAa,GAAG,MAAM,MAAM;gBAC9B;qBAAO,IAAI,MAAM,EAAE;oBACjB,aAAa,GAAG,MAAM;gBACxB;qBAAO;oBACL,aAAa,GAAG,eAAgD;gBAClE;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAClC;YACF;AAEA,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC;QAC7C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,KAAK,CAAC;AACnF,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC;IACF;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1B;AAEQ,IAAA,MAAM,kBAAkB,GAAA;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AACpC,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE;YACvB;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACrE,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE;YACxC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9D,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACjC,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACtE,YAAA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC;YAE7C,MAAM,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,IAAI,mBAAmB,EAAE;AACvB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC1C,gBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC;YACjD;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC;QACvE;IACF;AAEU,IAAA,UAAU,CAAC,IAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAC1D;AAEU,IAAA,UAAU,CAAC,IAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IACjE;AAEU,IAAA,cAAc,CAAC,IAAU,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC;IACvE;AAEU,IAAA,UAAU,CAAC,IAAa,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACzD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACrD,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;QACpD;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACzD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;QACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;QAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;QAEtC,OAAO,QAAQ,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO;IAChF;AAEU,IAAA,eAAe,CAAC,IAAa,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACzD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAErD,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;gBAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACxC;YAEA,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAElD,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBACxG,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;gBACrC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;AAC1C,gBAAA,OAAO,GAAG,QAAQ,CAAA,GAAA,EAAM,MAAM,CAAA,EAAA,EAAK,SAAS,EAAE;YAChD;AAEA,YAAA,OAAO,CAAA,EAAG,cAAc,CAAA,GAAA,EAAM,YAAY,EAAE;QAC9C;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AACtD,YAAA,OAAO,CAAA,EAAG,cAAc,CAAA,GAAA,EAAM,YAAY,EAAE;QAC9C;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QACrD,MAAM,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAE;AACzF,QAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,SAAS,EAAE;IACxC;8GAnlBW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,iaAQd,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnE/C,8+MAkKA,EAAA,MAAA,EAAA,CAAA,unHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhHI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,kYACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,iBAAiB,sVACjB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAhB3C,SAAS;+BACE,4BAA4B,EAAA,eAAA,EAGrB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,eAAe;wBACf,cAAc;wBACd,gBAAgB;wBAChB,iBAAiB;wBACjB,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,8+MAAA,EAAA,MAAA,EAAA,CAAA,unHAAA,CAAA,EAAA;AAU2B,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,iBAAiB,sEACQ,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEvCpE;AACA,SAAS,mBAAmB,CAAC,KAAa,EAAE,KAAsB,EAAA;AAChE,IAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,CAAE;AACnD;MAUa,0CAA0C,CAAA;AAqBrD,IAAA,YAAY;AAkDZ,IAAA,gBAAgB;AAchB,IAAA,aAAa;AAab,IAAA,WAAA,GAAA;AAjGmB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAClC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAE9D,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA2B;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,gFAA4E;AACvG,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,CAAC,mFAAC;QAE/B,IAAA,CAAA,aAAa,GAAG,MAAM,EAAiB;AAEvC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAoB,EAAE,mFAAC;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAY,EAAE,sFAAC;AACrC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAkB,EAAE,8EAAC;AACrC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAmB,EAAE,+EAAC;AACvC,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,CAAuB,MAAM,4EAAC;;AAGlD,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,MAAc,EAAE,KAAsB,KAClE,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC;AAEjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAW;;;;AAI/B,YAAA,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;AAC7B,YAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;AAC7B,YAAA,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,YAAY,EAAE;AAEnB,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE;AAC1C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE;YAEnC,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B;YACF;AAEA,YAAA,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE;YACvC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACtC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;YAE7B,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBAC9C,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC;gBAC/E,OAAO;AACL,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,KAAK,EAAE,IAAI,CAAC,4BAA4B,CAAC,cAAc,CAAC;iBACzD;AACH,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;YACnC,SAAS,CAAC,MAAK;;gBAEb,UAAU,CAAC,MAAK;;oBAEd,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,KAAI;AACrC,wBAAA,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,oBAAA,CAAC,CAAC;;oBAEF,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBAC5B,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,oBAAA,CAAC,CAAC;gBACJ,CAAC,EAAE,CAAC,CAAC;AACP,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,mFAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAW;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAC/C,QAAQ,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,KAAI;gBAC9C,IAAI,WAAW,EAAE;AACf,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC/B;AACF,YAAA,CAAC,CAAC;YACF,QAAQ,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;gBACxC,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,uFAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;;AAE1B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;YAClC,SAAS,CAAC,MAAK;;gBAEb,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBAC5B,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,oBAAA,CAAC,CAAC;gBACJ,CAAC,EAAE,GAAG,CAAC;AACT,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,oFAAC;;QAIA,eAAe,CAAC,MAAK;YACnB,SAAS,CAAC,MAAK;;gBAEb,UAAU,CAAC,MAAK;;oBAEd,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,KAAI;AACrC,wBAAA,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,oBAAA,CAAC,CAAC;;oBAEF,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBAC5B,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,oBAAA,CAAC,CAAC;gBACJ,CAAC,EAAE,GAAG,CAAC;AACT,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,4BAA4B,CAAC,KAAgB,EAAA;QACnD,OAAO,IAAI,YAAY,CAAM;AAC3B,YAAA,IAAI,EAAE,OAAO,CAAC,KAAI;gBAChB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;oBACjC,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,GAAG;AACvC,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,YAAY;AACjD,oBAAA,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE;wBACrE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM;qBAC3D,CAAC;AACF,oBAAA,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,EAAE;wBACzE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM;qBAC3D,CAAC;AACH,iBAAA,CAAC,CAAC;gBACH,OAAO;AACL,oBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC3C,KAAK,EAAE,KAAK,CAAC,MAAM;iBACpB;YACH,CAAC;AACD,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,KAAK,EAAE,OAAO,GAAY,KAAI;AAC5B,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC;YAC9C,CAAC;AACF,SAAA,CAAC;IACJ;AAEU,IAAA,oBAAoB,CAAC,CAAqB,EAAA;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACzE,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC/D;8GAxJW,0CAA0C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1C,0CAA0C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1CvD,slEA2DA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBY,iBAAiB,kkCAA+B,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAhD,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE7C,0CAA0C,EAAA,UAAA,EAAA,CAAA;kBARtD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yCAAyC,mBAGlC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,slEAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA;0cAiBzB,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEuDvD,MAAO,gBAAiB,SAAQ,0BAA0B,CAAA;AA9ChE,IAAA,WAAA,GAAA;;AA+CmB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACrB,IAAA,CAAA,UAAU,GAAG,UAAU;AACvB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACpC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AACpC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAErD,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAqB,SAAS,8EAAC;AAClD,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAsB,UAAU,+EAAC;AACrD,QAAA,IAAA,CAAA,eAAe,GAAG,SAAS,CAAsB,iBAAiB,sFAAC;AAEnE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,8EAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAA4B,EAAE,gFAAC;AACjD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAsE,EAAE,yFAAC;AACpG,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAgB,EAAE,gFAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAU,KAAK,mFAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,CAAC,mFAAC;AACxB,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,KAAK,iGAAC;AAC1C,QAAA,IAAA,CAAA,mCAAmC,GAAG,MAAM,CAAC,KAAK,0GAAC;AACnD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,uFAAC;AAClC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAiB,IAAI,kFAAC;AACxC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAyD,UAAU,sFAAC;AAC5F,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAA8B,IAAI,yFAAC;AAEhE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE,mFAAC;;AAG1C,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC;AACnD,YAAA,OAAO,iCAAiC,CAAC,yBAAyB,EAAE,OAAO,CAAC;AAC9E,QAAA,CAAC,gFAAC;AAEQ,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,mFAAC;AACjF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACxC,YAAA,QAAQ,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;AAC/B,gBAAA,KAAK,KAAK;AACV,gBAAA,KAAK,MAAM;AACX,gBAAA,KAAK,QAAQ;AACb,gBAAA,KAAK,QAAQ;AACb,gBAAA,KAAK,cAAc;AACnB,gBAAA,KAAK,iBAAiB;AACtB,gBAAA,KAAK,qBAAqB;AACxB,oBAAA,OAAO,OAAO;AAChB,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,cAAc;AACvB,gBAAA,KAAK,OAAO;AACZ,gBAAA,KAAK,gBAAgB;AACnB,oBAAA,OAAO,eAAe;AACxB,gBAAA,KAAK,eAAe;AAClB,oBAAA,OAAO,cAAc;AACvB,gBAAA;AACE,oBAAA,OAAO,OAAO;;AAEpB,QAAA,CAAC,sFAAC;AACQ,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,IACE,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,MAAM;AACpC,gBAAA,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,QAAQ;gBACtC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,qBAAqB,EACnD;gBACA,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;gBACzC,IAAI,CAAC,WAAW,EAAE;AAChB,oBAAA,OAAO,EAAE;gBACX;gBACA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1G,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBACrD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC9G,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC1G,gBAAA,OAAO,CAAA,EAAG,SAAS,CAAA,GAAA,EAAM,OAAO,EAAE;YACpC;YACA,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;AAC3D,QAAA,CAAC,+EAAC;AACQ,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,IACE,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,MAAM;AACpC,gBAAA,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,QAAQ;gBACtC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,qBAAqB,EACnD;AACA,gBAAA,OAAO,KAAK;YACd;YACA,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,aAAa,EAAE,IAAI,KAAK;AAC5D,QAAA,CAAC,oFAAC;AAEQ,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AAClC,YAAA,OAAO,IAAI,IAAI,IAAI,IAAI,EAAE;AAC3B,QAAA,CAAC,6FAAC;AACiB,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;YAClD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;AAC7C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE;AAC5B,gBAAA,IAAI,QAAQ,CAAC,GAAG,KAAK,WAAW,EAAE;AAChC,oBAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,GAA2B,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;gBAChG;AACA,gBAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACrB,oBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC;oBAC/E,IAAI,UAAU,EAAE;AACd,wBAAA,OAAO,UAAU;oBACnB;gBACF;YACF;AACA,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,aAAa,EAAE;gBAClB,OAAO;AACL,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,IAAI,EAAE,mBAAmB;iBAC1B;YACH;YACA,OAAO,aAAa,CAAC;AACnB,kBAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;kBACxB,EAAE,GAAG,EAAE,aAAa,CAAC,GAA2B,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE;AAC5G,QAAA,CAAC,uFAAC;AACQ,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAgB,MAAK;YAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;AAE/C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,EAAE;YACvD,IAAI,IAAI,GAAe,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnH,YAAA,IAAI,GAAe;YAEnB,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;YAE7C,IACE,WAAW,KAAK,MAAM;AACtB,gBAAA,WAAW,KAAK,QAAQ;AACxB,gBAAA,WAAW,KAAK,QAAQ;AACxB,gBAAA,WAAW,KAAK,iBAAiB;gBACjC,WAAW,KAAK,qBAAqB,EACrC;AACA,gBAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAChD;iBAAO,IAAI,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,gBAAgB,EAAE;AACtE,gBAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AAC5B,gBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAC3B;iBAAO;AACL,gBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACzB;YAEA,OAAO;;AAEL,gBAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;gBACzD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;gBAC9C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;gBAC9C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;AAC5C,gBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;aAC1C;AACH,QAAA,CAAC,6EAAC;AAEM,QAAA,IAAA,CAAA,WAAW,GAAG,SAAS,CAAyB,iBAAiB,kFAAC;AAqDhE,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAC,MAAsB,KAAwB;AAC7E,YAAA,MAAM,WAAW,GAAkB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE;AAElE,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACjE,gBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;gBACvC,OAAO,MAAM,CAAC,KAAK;AACrB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAES,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,MAAsB,KAAkD;AAClG,YAAA,MAAM,WAAW,GAAkB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE;AAElE,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACjE,gBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;AACvC,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAY,EAAE,oFAAC;AACrC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,YAAW;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;AAC1C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACzB,gBAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;YACvC;AACF,QAAA,CAAC,0EAAC;AA4De,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC3C,YAAA,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;YAC/B,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE;AACtC,QAAA,CAAC,oFAAC;AAEe,QAAA,IAAA,CAAA,8BAA8B,GAAG,MAAM,CAAC,MAAK;AAC5D,YAAA,IAAI,CAAC,EAAE,CAAC,4BAA4B,EAAE;;AAEtC,YAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE;AACtC,QAAA,CAAC,qGAAC;AAEe,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,YAAW;;AAEtD,YAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;AACzB,YAAA,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,CAAC,EAAE,CAAC,4BAA4B,EAAE;AACtC,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAA,CAAC,yFAAC;AAiKe,QAAA,IAAA,CAAA,eAAe,GAA2B;YACzD,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,qBAAqB;YACrB,iBAAiB;SAClB;AA0DD,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,IAAgB,KAAmB;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;YAC7C,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;YAEnD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC9C,IAAI,kBAAkB,EAAE;oBACtB,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC;oBAC5E,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,EAAE;AAC3C,wBAAA,OAAO,6BAA6B;oBACtC;AACA,oBAAA,OAAO,IAAI;gBACb;AAEA,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;AACpE,gBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAE9D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;gBAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAEzC,IAAI,OAAO,IAAI,KAAK;AAAE,oBAAA,OAAO,6BAA6B;AAC1D,gBAAA,IAAI,OAAO;AAAE,oBAAA,OAAO,gBAAgB;AACpC,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,cAAc;gBAChC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;AAC3E,oBAAA,OAAO,kBAAkB;gBAC3B;AAEA,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,WAAW,KAAK,MAAM,EAAE;AAC1B,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAE9B,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;AAAE,oBAAA,OAAO,gBAAgB;AACpD,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AAAE,oBAAA,OAAO,cAAc;gBACjD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;AACjE,oBAAA,OAAO,kBAAkB;gBAC3B;YACF;AAEA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AAmCS,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM;gBACzC,EAAE,EAAE,QAAQ,CAAC,IAAI;gBACjB,IAAI,EAAE,QAAQ,CAAC,KAAK;gBACpB,IAAI,EAAE,QAAQ,CAAC,IAAI;AACpB,aAAA,CAAC,CAAC;AACL,QAAA,CAAC,oFAAC;;AAGQ,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;YACtC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,qBAAqB;AAC/E,QAAA,CAAC,wFAAC;AAEQ,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;;YAE9C,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,gBAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB;AACA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,6FAAC;AASQ,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;AAC/C,YAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM;gBACnD,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,IAAI,EAAE,SAAS,CAAC,KAAK;gBACrB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,KAAK,EAAE,SAAS,CAAC,KAAK;AACvB,aAAA,CAAC,CAAC;AACL,QAAA,CAAC,6FAAC;AAEQ,QAAA,IAAA,CAAA,+BAA+B,GAAG,QAAQ,CAAC,MAAK;AACxD,YAAA,OAAO,IAAI,CAAC,EAAE,CAAC,4BAA4B,EAAE;AAC/C,QAAA,CAAC,sGAAC;AAyFH,IAAA;AA1kBU,IAAA,MAAM,QAAQ,GAAA;AACrB,QAAA,MAAM,KAAK,CAAC,QAAQ,EAAE;AACtB,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;;QAG1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AACxD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;;QAGzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE;AACtE,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CACzB,UAAU,CAAC,GAAG,CAAC,CAAC,EAAiC,MAAM;YACrD,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,KAAK,EAAE,EAAE,CAAC,KAAK;SAChB,CAAC,CAAC,CACJ;;AAGD,QAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;QAE/B,IAAI,CAAC,MAAM,CAAC;aACT,IAAI,CACH,IAAI,CAAC,WAAW,CAAC,gBAAgB,EACjC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,EACjD,SAAS,CAAC,IAAI,CAAC;aAEhB,SAAS,CAAC,YAAW;AACpB,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACnB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAW;AAClD,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;AAC/B,YAAA,MAAM,IAAI,CAAC,YAAY,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE;AACtC,QAAA,CAAC,CAAC;IACJ;AACS,IAAA,MAAM,YAAY,GAAA;QACzB,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,wCAAwC,CAAC;IAC7F;AACS,IAAA,MAAM,kBAAkB,GAAA;QAC/B,OAAO;AACL,YAAA;gBACE,KAAK,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,4BAA4B,CAAC;AAChF,aAAA;SACF;IACH;AA6BQ,IAAA,MAAM,kBAAkB,CAAC,SAAwB,IAAI,CAAC,MAAM,EAAE,EAAA;QACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3D,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IACtC;AAEA,IAAA,yBAAyB,CAAC,SAA+B,EAAA;AACvD,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;IACxC;IAEU,MAAM,0BAA0B,CAAC,KAAgC,EAAA;AACzE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,IAAI,CAAC,WAAW;YAAE;AAClB,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ;AACzC,QAAA,IAAI,CAAC,YAAY;YAAE;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC;AAChE,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;AACtD,QAAA,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE;AAC1B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK;AACpB,YAAA,MAAM,IAAI,GACR,OAAO,CAAC,KAAK;AACX,kBAAE,CAAC,CAAC,UAAU,CAAC,GAAG;sBACd,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAC9C,sBAAE;kBACF,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,YAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBACf,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAyB;gBACrC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,IAAI,EAAE;oBACJ,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,iBAAA;AACF,aAAA,CAAC;QACJ;IACF;AAEU,IAAA,iBAAiB,CAAC,KAAoB,EAAA;QAC9C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAChC,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO;AACnC,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO;AACnC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAqB;AACvD,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC;IAC/C;AAEU,IAAA,yBAAyB,CAAC,IAAU,EAAA;AAC5C,QAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IAC5B;IAEU,gBAAgB,CAAC,IAAS,EAAE,aAAuC,EAAA;AAC3E,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;QACvB,aAAa,CAAC,KAAK,EAAE;IACvB;AAuBQ,IAAA,MAAM,kBAAkB,GAAA;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;;AAGlC,QAAA,IAAI,UAAgB;AACpB,QAAA,IAAI,QAAc;AAClB,QAAA,IAAI,KAAK,KAAK,OAAO,EAAE;;AAErB,YAAA,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI;AAC1E,YAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI;QACxE;aAAO;;AAEL,YAAA,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI;AAC3E,YAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI;QACzE;;QAGA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YACjD,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC3C,SAAA,CAAC;;QAGF,MAAM,oBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC,4BAA4B,EAAE;QACnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,oBAAoB,CAAC;;AAG/G,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;;QAG7C,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC3B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AACtE,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YAElE,IAAI,UAAU,GAAG,QAAQ;YACzB,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;AAC9C,gBAAA,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3D,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACvC;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;AAC1E,YAAA,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE;IAClC;AAEU,IAAA,eAAe,CAAC,IAA4B,EAAA;QACpD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC;QACV;AACA,QAAA,IAAI;;YAEF,MAAM,OAAO,GAAI,IAAY,CAAC,IAAI,IAAK,IAAY,CAAC,KAAK;YACzD,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,OAAO,CAAC;YACV;;AAEA,YAAA,MAAM,UAAU,GAAG,OAAO,YAAY,IAAI,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;YACxE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;YAC1C,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC7C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACpD,YAAA,OAAO,CAAC;QACV;IACF;AAEA;;;AAGG;AACO,IAAA,iBAAiB,CAAC,IAA4B,EAAA;QACtD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC;QACV;AACA,QAAA,IAAI;YACF,MAAM,OAAO,GAAI,IAAY,CAAC,IAAI,IAAK,IAAY,CAAC,KAAK;YACzD,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,OAAO,CAAC;YACV;AACA,YAAA,MAAM,UAAU,GAAG,OAAO,YAAY,IAAI,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;YACxE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;YACtD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;YAEtC,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,OAAO,GAAG,UAAU;YACxB,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;AAC3C,gBAAA,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC7C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC;AACA,YAAA,OAAO,KAAK;QACd;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACtD,YAAA,OAAO,CAAC;QACV;IACF;IAEU,MAAM,0BAA0B,CAAC,KAAmC,EAAA;QAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,IAAI,EAAE;AACnD,QAAA,IAAI;YACF,IAAI,OAAO,EAAE;gBACX,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC/D;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;QAClE;gBAAU;YACR,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,QAAQ,IAAI,SAAS,CAAC;YAC7D;QACF;IACF;AAEA,IAAA,UAAU,CAAC,OAAgB,EAAA;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnH,QAAA,QAAQ,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;AAC/B,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9D;AAEF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/D;AAEF,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,iBAAiB;AACtB,YAAA,KAAK,qBAAqB;AACxB,gBAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC;gBAClG;AAEF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,gBAAgB;gBACnB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChE;AAEF,YAAA,KAAK,eAAe;gBAClB,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/D;;AAEJ,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE;IAClC;AAUU,IAAA,uBAAuB,CAAC,KAA0B,EAAA;QAC1D,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK;YAAE;AAE1D,QAAA,MAAM,WAAW,GAAS,KAAK,CAAC,IAAI;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE;QAE7C,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAC9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;YAEnD,IAAI,CAAC,kBAAkB,EAAE;;gBAEvB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACxB,gBAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC;AACtC,gBAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE;AACzB,gBAAA,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE;gBAChC;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE;AAC1C,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE;AACnC,YAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrD,YAAA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAEnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,EAAE,UAAU,CAAC;;AAGjF,YAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;;AAG/B,YAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,YAAY,CAAC;AACpC,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAEtC,YAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC;AAErC,QAAA,IAAI,WAAW,KAAK,MAAM,EAAE;AAC1B,YAAA,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE;AAC9B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ;AAC3E,YAAA,IAAI,cAAc,GAAG,GAAG,GAAG,SAAS;AACpC,YAAA,IAAI,cAAc,GAAG,CAAC,EAAE;gBACtB,cAAc,IAAI,CAAC;YACrB;YACA,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,cAAc,CAAC;QACzD;AAEA,QAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE;IAClC;AA6CA;;;AAGG;IACK,yBAAyB,CAAC,KAAW,EAAE,GAAS,EAAA;AACtD,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AAClB,YAAA,OAAO,CAAC;QACV;QACA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClF,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAE1E,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;AAC9D,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QAEtE,OAAO,cAAc,GAAG,CAAC;IAC3B;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,WAAiB;QACrB,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,MAAM,EAAE;YACxC,WAAW,GAAG,IAAI,CAAC;AAChB,iBAAA,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM;AACrE,iBAAA,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI;QACzB;aAAO;AACL,YAAA,WAAW,GAAG,IAAI,IAAI,EAAE;QAC1B;AACA,QAAA,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE;IAClC;AAyBU,IAAA,6BAA6B,CAAC,cAAiC,EAAA;;QAEvE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,cAAc,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE;;AAEtG,QAAA,IAAI,CAAC,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;IAC/D;AAeU,IAAA,sCAAsC,CAAC,cAAwB,EAAA;;AAEvE,QAAA,IAAI,CAAC,EAAE,CAAC,+BAA+B,CAAC,cAAc,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;;AAElF,QAAA,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE;IACtC;AAEQ,IAAA,MAAM,aAAa,GAAA;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa;QAC3D,MAAM,IAAI,GAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAA0B,IAAI,IAAI;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAElH,IAAI,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;QAC3B;aAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE;AACrC,YAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;QAC5B;QAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAa;QAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAa;QACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAa;QACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAA2B;AACtE,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE;AACxE,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC;YAC5C,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC;QAC/C;QAEA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAW;QACrD,IAAI,SAAS,EAAE;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,CAAC;YAC9D,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,gBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3E,QAAQ,SAAS;AACf,oBAAA,KAAK,OAAO;AACV,wBAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;wBAC1B;AACF,oBAAA,KAAK,WAAW;AACd,wBAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;wBAC3B,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;wBACrC;AACF,oBAAA,KAAK,YAAY;AACf,wBAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;wBAC5B;;YAEN;QACF;IACF;AAEA;;;;AAIG;AACK,IAAA,oBAAoB,CAAC,YAAuB,EAAA;QAClD,MAAM,mBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;;QAElD,IAAI,mBAAmB,EAAE;;AAEvB,YAAA,MAAM,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,mBAAmB,CAAC,EAAE,CAAC;;YAG7F,IAAI,CAAC,qBAAqB,EAAE;AAC1B,gBAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B;QACF;IACF;AAEU,IAAA,MAAM,YAAY,GAAA;QAC1B,IAAI,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB;QACF;QACA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpG,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;IAC/B;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC;IAEmB,eAAe,GAAA;AAChC,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE;IAClC;8GAruBW,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAPhB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,gBAAgB;AAC9B,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9GH,i5aAkUA,EAAA,MAAA,EAAA,CAAA,u5CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5PI,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,uMACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;AAEZ,gBAAA,YAAY,miBACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACtB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,8KACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,iBAAiB,8BACjB,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,+BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,8BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAEpB,gBAAA,4BAA4B,EAAA,QAAA,EAAA,qfAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,iCAAiC,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjC,+BAA+B,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC/B,6BAA6B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,0CAA0C,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1C,uBAAuB,wEACvB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,4BAA4B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC5B,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,gCAAgC,8FAChC,6BAA6B,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAWpB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA9C5B,SAAS;AAGC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,WAAW;wBACX,YAAY;wBACZ,YAAY;;wBAEZ,YAAY;wBACZ,cAAc;wBACd,sBAAsB;wBACtB,mBAAmB;wBACnB,iBAAiB;wBACjB,eAAe;wBACf,mBAAmB;wBACnB,aAAa;wBACb,iBAAiB;wBACjB,oBAAoB;;wBAEpB,4BAA4B;wBAC5B,sBAAsB;wBACtB,iCAAiC;wBACjC,+BAA+B;wBAC/B,6BAA6B;wBAC7B,0CAA0C;wBAC1C,uBAAuB;wBACvB,wBAAwB;wBACxB,eAAe;wBACf,mBAAmB;wBACnB,4BAA4B;wBAC5B,gBAAgB;wBAChB,YAAY;wBACZ,aAAa;wBACb,qBAAqB;wBACrB,gCAAgC;wBAChC,6BAA6B;AAC9B,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,gBAAkB;AAC9B,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,i5aAAA,EAAA,MAAA,EAAA,CAAA,u5CAAA,CAAA,EAAA;AAaiD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACP,UAAU,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACH,iBAAiB,qEA6IpB,iBAAiB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;;;"}
|