@acorex/modules 20.6.0-next.19 → 20.6.0-next.20
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-assessment-management-collaborator.entity-DpV98osl.mjs → acorex-modules-assessment-management-collaborator.entity-DtEzEgEB.mjs} +23 -8
- package/fesm2022/acorex-modules-assessment-management-collaborator.entity-DtEzEgEB.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-publication.entity-DnLUKNiz.mjs → acorex-modules-assessment-management-publication.entity-DDN_bzx9.mjs} +51 -15
- package/fesm2022/acorex-modules-assessment-management-publication.entity-DDN_bzx9.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-BPwy0fsh.mjs → acorex-modules-assessment-management-question-bank-item.entity-QgddRN3o.mjs} +35 -11
- package/fesm2022/acorex-modules-assessment-management-question-bank-item.entity-QgddRN3o.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-JRC8y5A-.mjs → acorex-modules-assessment-management-questionnaire.entity-Wvnejt9E.mjs} +40 -18
- package/fesm2022/acorex-modules-assessment-management-questionnaire.entity-Wvnejt9E.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-response-entry.entity-PjiBql_T.mjs → acorex-modules-assessment-management-response-entry.entity-BYdInV5t.mjs} +15 -6
- package/fesm2022/acorex-modules-assessment-management-response-entry.entity-BYdInV5t.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-response-session.entity-CsAtlsZE.mjs → acorex-modules-assessment-management-response-session.entity-Bms5-ik8.mjs} +27 -9
- package/fesm2022/acorex-modules-assessment-management-response-session.entity-Bms5-ik8.mjs.map +1 -0
- package/fesm2022/acorex-modules-assessment-management.mjs +6 -6
- package/fesm2022/{acorex-modules-asset-management-asset-status.entity-7IQGhMLK.mjs → acorex-modules-asset-management-asset-status.entity-CD8VnnHG.mjs} +5 -12
- package/fesm2022/acorex-modules-asset-management-asset-status.entity-CD8VnnHG.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset.entity-BQgzan6X.mjs → acorex-modules-asset-management-asset.entity-CsnpQE4P.mjs} +3 -3
- package/fesm2022/acorex-modules-asset-management-asset.entity-CsnpQE4P.mjs.map +1 -0
- package/fesm2022/acorex-modules-asset-management.mjs +2 -2
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CRmoDyqg.mjs → acorex-modules-auth-acorex-modules-auth-BDgtGHcw.mjs} +12 -12
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CRmoDyqg.mjs.map → acorex-modules-auth-acorex-modules-auth-BDgtGHcw.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-app-chooser.component-BeLfKO6l.mjs → acorex-modules-auth-app-chooser.component-D43Ysfx3.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-BeLfKO6l.mjs.map → acorex-modules-auth-app-chooser.component-D43Ysfx3.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-Cr_IXE0z.mjs → acorex-modules-auth-login.module-C1AE4unG.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-Cr_IXE0z.mjs.map → acorex-modules-auth-login.module-C1AE4unG.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-CL3rgDKC.mjs → acorex-modules-auth-master.layout-h-RCEiJz.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-CL3rgDKC.mjs.map → acorex-modules-auth-master.layout-h-RCEiJz.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-Da_a3-4p.mjs → acorex-modules-auth-oauth-callback.component-DaKIbZ1p.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-Da_a3-4p.mjs.map → acorex-modules-auth-oauth-callback.component-DaKIbZ1p.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-BSk8-gd3.mjs → acorex-modules-auth-password.component-DkqB8Q6b.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-BSk8-gd3.mjs.map → acorex-modules-auth-password.component-DkqB8Q6b.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-zSSGhx3N.mjs → acorex-modules-auth-password.component-hNmn0U4C.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-zSSGhx3N.mjs.map → acorex-modules-auth-password.component-hNmn0U4C.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-SbNyF-bU.mjs → acorex-modules-auth-routes-D2aKrFgC.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-SbNyF-bU.mjs.map → acorex-modules-auth-routes-D2aKrFgC.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-show-profile-command-F3qc26vh.mjs → acorex-modules-auth-show-profile-command-D1q8CYD3.mjs} +2 -2
- package/fesm2022/acorex-modules-auth-show-profile-command-D1q8CYD3.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-two-factor.module-D_a0ZLfP.mjs → acorex-modules-auth-two-factor.module-D5wIFLzk.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor.module-D_a0ZLfP.mjs.map → acorex-modules-auth-two-factor.module-D5wIFLzk.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-user-sessions.component-1n_j84JE.mjs → acorex-modules-auth-user-sessions.component-DPVcLAUS.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-user-sessions.component-1n_j84JE.mjs.map → acorex-modules-auth-user-sessions.component-DPVcLAUS.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/{acorex-modules-common-manage-extra-properties.command-Cl7ANDKN.mjs → acorex-modules-common-manage-extra-properties.command-C4jE3MPJ.mjs} +3 -3
- package/fesm2022/acorex-modules-common-manage-extra-properties.command-C4jE3MPJ.mjs.map +1 -0
- package/fesm2022/acorex-modules-common.mjs +139 -265
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management--Pn1KLlN.mjs → acorex-modules-content-management-acorex-modules-content-management-BvpwgY8-.mjs} +14 -9
- package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-BvpwgY8-.mjs.map +1 -0
- package/fesm2022/{acorex-modules-content-management-permission-definition.provider-yUaeVc5p.mjs → acorex-modules-content-management-permission-definition.provider-BpBMhZVd.mjs} +2 -2
- package/fesm2022/{acorex-modules-content-management-permission-definition.provider-yUaeVc5p.mjs.map → acorex-modules-content-management-permission-definition.provider-BpBMhZVd.mjs.map} +1 -1
- package/fesm2022/acorex-modules-content-management.mjs +1 -1
- package/fesm2022/{acorex-modules-customer-management-acorex-modules-customer-management-CHdUUJz3.mjs → acorex-modules-customer-management-acorex-modules-customer-management-CXWyTfm_.mjs} +12 -12
- package/fesm2022/{acorex-modules-customer-management-acorex-modules-customer-management-CHdUUJz3.mjs.map → acorex-modules-customer-management-acorex-modules-customer-management-CXWyTfm_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-customer-management-activity.entity-CLEBK5_A.mjs → acorex-modules-customer-management-activity.entity-B37EX1zO.mjs} +83 -18
- package/fesm2022/acorex-modules-customer-management-activity.entity-B37EX1zO.mjs.map +1 -0
- package/fesm2022/{acorex-modules-customer-management-customer-segment.entity-CLpbTU_U.mjs → acorex-modules-customer-management-customer-segment.entity-D57uzi2s.mjs} +2 -2
- package/fesm2022/{acorex-modules-customer-management-customer-segment.entity-CLpbTU_U.mjs.map → acorex-modules-customer-management-customer-segment.entity-D57uzi2s.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-customer-management-customer-type.entity-DovxS4XY.mjs → acorex-modules-customer-management-customer-type.entity-DILWYgc1.mjs} +2 -2
- package/fesm2022/{acorex-modules-customer-management-customer-type.entity-DovxS4XY.mjs.map → acorex-modules-customer-management-customer-type.entity-DILWYgc1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-customer-management-customer.entity-CZDCpwiX.mjs → acorex-modules-customer-management-customer.entity-pLpwk-8-.mjs} +4 -4
- package/fesm2022/acorex-modules-customer-management-customer.entity-pLpwk-8-.mjs.map +1 -0
- package/fesm2022/{acorex-modules-customer-management-deal-contact-role.entity-DehxqNb6.mjs → acorex-modules-customer-management-deal-contact-role.entity-D9EIQCBf.mjs} +2 -2
- package/fesm2022/{acorex-modules-customer-management-deal-contact-role.entity-DehxqNb6.mjs.map → acorex-modules-customer-management-deal-contact-role.entity-D9EIQCBf.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-customer-management-lead.entity-jD60WE5x.mjs → acorex-modules-customer-management-lead.entity-CFBLN84R.mjs} +2 -2
- package/fesm2022/{acorex-modules-customer-management-lead.entity-jD60WE5x.mjs.map → acorex-modules-customer-management-lead.entity-CFBLN84R.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-customer-management-lifecycle-stage.entity-eXaKF1wF.mjs → acorex-modules-customer-management-lifecycle-stage.entity-CVlaNJnV.mjs} +2 -2
- package/fesm2022/{acorex-modules-customer-management-lifecycle-stage.entity-eXaKF1wF.mjs.map → acorex-modules-customer-management-lifecycle-stage.entity-CVlaNJnV.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-customer-management-opportunity-stage.entity-D2AWoXkh.mjs → acorex-modules-customer-management-opportunity-stage.entity--G53TNA9.mjs} +2 -2
- package/fesm2022/{acorex-modules-customer-management-opportunity-stage.entity-D2AWoXkh.mjs.map → acorex-modules-customer-management-opportunity-stage.entity--G53TNA9.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-customer-management-opportunity.entity-D0sLFYoF.mjs → acorex-modules-customer-management-opportunity.entity-slARn9VJ.mjs} +2 -2
- package/fesm2022/{acorex-modules-customer-management-opportunity.entity-D0sLFYoF.mjs.map → acorex-modules-customer-management-opportunity.entity-slARn9VJ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-customer-management-sales-pipeline.entity-BooPlprb.mjs → acorex-modules-customer-management-sales-pipeline.entity-7jyj1scm.mjs} +2 -2
- package/fesm2022/{acorex-modules-customer-management-sales-pipeline.entity-BooPlprb.mjs.map → acorex-modules-customer-management-sales-pipeline.entity-7jyj1scm.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-customer-management-sales-territory.entity-DclL_tgK.mjs → acorex-modules-customer-management-sales-territory.entity-bsjw5Gp8.mjs} +2 -2
- package/fesm2022/{acorex-modules-customer-management-sales-territory.entity-DclL_tgK.mjs.map → acorex-modules-customer-management-sales-territory.entity-bsjw5Gp8.mjs.map} +1 -1
- package/fesm2022/acorex-modules-customer-management.mjs +1 -1
- package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DxvJ5FUP.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-Dyt_5pDQ.mjs} +11 -11
- package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DxvJ5FUP.mjs.map → acorex-modules-dashboard-management-acorex-modules-dashboard-management-Dyt_5pDQ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-dashboard-management-permission-definition.provider-tvIEsms4.mjs → acorex-modules-dashboard-management-permission-definition.provider-D4uIodsb.mjs} +2 -2
- package/fesm2022/{acorex-modules-dashboard-management-permission-definition.provider-tvIEsms4.mjs.map → acorex-modules-dashboard-management-permission-definition.provider-D4uIodsb.mjs.map} +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
- package/fesm2022/{acorex-modules-data-management-acorex-modules-data-management-DjySg-9e.mjs → acorex-modules-data-management-acorex-modules-data-management-CRtYFDPP.mjs} +15 -22
- package/fesm2022/{acorex-modules-data-management-acorex-modules-data-management-DjySg-9e.mjs.map → acorex-modules-data-management-acorex-modules-data-management-CRtYFDPP.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-data-management-permission-definition.provider-D6tcKzyf.mjs → acorex-modules-data-management-permission-definition.provider-Cz9tC2gl.mjs} +2 -2
- package/fesm2022/{acorex-modules-data-management-permission-definition.provider-D6tcKzyf.mjs.map → acorex-modules-data-management-permission-definition.provider-Cz9tC2gl.mjs.map} +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +1 -1
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-rrUIN74I.mjs → acorex-modules-document-management-acorex-modules-document-management-Dg8SVY4R.mjs} +39 -65
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-rrUIN74I.mjs.map → acorex-modules-document-management-acorex-modules-document-management-Dg8SVY4R.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-2Y5zJBJh.mjs → acorex-modules-document-management-attachment-widget.component-zFZApYr5.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-2Y5zJBJh.mjs.map → acorex-modules-document-management-attachment-widget.component-zFZApYr5.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-details-view.component-C7zknKa3.mjs → acorex-modules-document-management-details-view.component-CBmWHsVg.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-details-view.component-C7zknKa3.mjs.map → acorex-modules-document-management-details-view.component-CBmWHsVg.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-b5DKAAec.mjs → acorex-modules-document-management-document-signature-popup.component-0C1OmnNz.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-b5DKAAec.mjs.map → acorex-modules-document-management-document-signature-popup.component-0C1OmnNz.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-Czct3RIU.mjs → acorex-modules-document-management-drive-choose.component-Cgi4gVUo.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-Czct3RIU.mjs.map → acorex-modules-document-management-drive-choose.component-Cgi4gVUo.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive.component-ixWQTGk_.mjs → acorex-modules-document-management-drive.component-qqJtfLVN.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-drive.component-ixWQTGk_.mjs.map → acorex-modules-document-management-drive.component-qqJtfLVN.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-urlBOoAQ.mjs → acorex-modules-document-management-large-icons-view.component-CiTXhe9q.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-large-icons-view.component-urlBOoAQ.mjs.map → acorex-modules-document-management-large-icons-view.component-CiTXhe9q.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-7z2Y_FrQ.mjs → acorex-modules-document-management-large-tiles-view.component-C-xJAD2U.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-7z2Y_FrQ.mjs.map → acorex-modules-document-management-large-tiles-view.component-C-xJAD2U.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-list-view.component-DElB-v57.mjs → acorex-modules-document-management-list-view.component-CALsnuCI.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-list-view.component-DElB-v57.mjs.map → acorex-modules-document-management-list-view.component-CALsnuCI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-Beu0lmdq.mjs → acorex-modules-document-management-permission-definition.provider-7NpKb9FT.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-Beu0lmdq.mjs.map → acorex-modules-document-management-permission-definition.provider-7NpKb9FT.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-DiH7q3-O.mjs → acorex-modules-document-management-small-icons-view.component-Cx7ON87O.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-small-icons-view.component-DiH7q3-O.mjs.map → acorex-modules-document-management-small-icons-view.component-Cx7ON87O.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-BJRR3JpH.mjs → acorex-modules-document-management-small-tiles-view.component-DXLfLnZh.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-BJRR3JpH.mjs.map → acorex-modules-document-management-small-tiles-view.component-DXLfLnZh.mjs.map} +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +1 -1
- package/fesm2022/acorex-modules-financial-core.mjs +108 -67
- package/fesm2022/acorex-modules-financial-core.mjs.map +1 -1
- package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-CxFD0OVD.mjs → acorex-modules-help-desk-acorex-modules-help-desk-2KBoCpT3.mjs} +6 -6
- package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-2KBoCpT3.mjs.map +1 -0
- package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CCAHpgIx.mjs → acorex-modules-help-desk-capture-screen.component-D-reMqrQ.mjs} +2 -2
- package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CCAHpgIx.mjs.map → acorex-modules-help-desk-capture-screen.component-D-reMqrQ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-help-desk.mjs +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-CHcGjia2.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-crtjPRx2.mjs} +11 -11
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-CHcGjia2.mjs.map → acorex-modules-human-capital-management-acorex-modules-human-capital-management-crtjPRx2.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-DKvFxffl.mjs → acorex-modules-human-capital-management-employee-skill.entity-B_gM9TMj.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-DKvFxffl.mjs.map → acorex-modules-human-capital-management-employee-skill.entity-B_gM9TMj.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee.entity-BGMXoqyv.mjs → acorex-modules-human-capital-management-employee.entity-B6ndmf52.mjs} +3 -24
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-B6ndmf52.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-CMEY-M1P.mjs → acorex-modules-human-capital-management-employment-type.entity-BJVwmQEY.mjs} +14 -6
- package/fesm2022/acorex-modules-human-capital-management-employment-type.entity-BJVwmQEY.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-ItVzChs-.mjs → acorex-modules-human-capital-management-leave-request.entity-BA95ET48.mjs} +22 -15
- package/fesm2022/acorex-modules-human-capital-management-leave-request.entity-BA95ET48.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-BqmzR9Zs.mjs → acorex-modules-human-capital-management-leave-type.entity-CJOejYZs.mjs} +5 -7
- package/fesm2022/acorex-modules-human-capital-management-leave-type.entity-CJOejYZs.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-permission-definition.provider-mMq-vrLs.mjs → acorex-modules-human-capital-management-permission-definition.provider-CwVtMZMg.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-permission-definition.provider-mMq-vrLs.mjs.map → acorex-modules-human-capital-management-permission-definition.provider-CwVtMZMg.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-oW70mkOZ.mjs → acorex-modules-human-capital-management-position-assignment.entity-Yk21sgeU.mjs} +50 -19
- package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-Yk21sgeU.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-B-5M3oRa.mjs → acorex-modules-human-capital-management-skill-level.entity-BX_Vc6L1.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-B-5M3oRa.mjs.map → acorex-modules-human-capital-management-skill-level.entity-BX_Vc6L1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-skill.entity-DRqAWnO-.mjs → acorex-modules-human-capital-management-skill.entity-BIo0x54G.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-skill.entity-DRqAWnO-.mjs.map → acorex-modules-human-capital-management-skill.entity-BIo0x54G.mjs.map} +1 -1
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/{acorex-modules-learning-management-attendance.entity-DL79CMSt.mjs → acorex-modules-learning-management-attendance.entity-B2yFTuvc.mjs} +21 -26
- package/fesm2022/acorex-modules-learning-management-attendance.entity-B2yFTuvc.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-certificate-definition.entity-DKbzA7Hj.mjs → acorex-modules-learning-management-certificate-definition.entity-CuldbLYd.mjs} +9 -14
- package/fesm2022/acorex-modules-learning-management-certificate-definition.entity-CuldbLYd.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-certificate-type.entity-B0qXC4g5.mjs → acorex-modules-learning-management-certificate-type.entity-C-IWRNcp.mjs} +6 -16
- package/fesm2022/acorex-modules-learning-management-certificate-type.entity-C-IWRNcp.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-certificate.entity-COjlnLIm.mjs → acorex-modules-learning-management-certificate.entity-8p9CZXL4.mjs} +5 -13
- package/fesm2022/acorex-modules-learning-management-certificate.entity-8p9CZXL4.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-course-type.entity-B_JTtF_9.mjs → acorex-modules-learning-management-course-type.entity-Hpt_3UTG.mjs} +22 -31
- package/fesm2022/acorex-modules-learning-management-course-type.entity-Hpt_3UTG.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-course.entity-CT75daKU.mjs → acorex-modules-learning-management-course.entity-CtdD7L8S.mjs} +4 -6
- package/fesm2022/acorex-modules-learning-management-course.entity-CtdD7L8S.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-employee-skill.entity-D1C-C3Kq.mjs → acorex-modules-learning-management-employee-skill.entity-DsLOnCQw.mjs} +17 -15
- package/fesm2022/acorex-modules-learning-management-employee-skill.entity-DsLOnCQw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-enrollment.entity-omA4kcHi.mjs → acorex-modules-learning-management-enrollment.entity-Dly0ECHB.mjs} +29 -18
- package/fesm2022/acorex-modules-learning-management-enrollment.entity-Dly0ECHB.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-learning-path-course.entity-BBqk5EtV.mjs → acorex-modules-learning-management-learning-path-course.entity-8fV8gRtX.mjs} +13 -25
- package/fesm2022/acorex-modules-learning-management-learning-path-course.entity-8fV8gRtX.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-learning-path.entity-D1Y38NZ_.mjs → acorex-modules-learning-management-learning-path.entity-CyC0-o7k.mjs} +5 -11
- package/fesm2022/acorex-modules-learning-management-learning-path.entity-CyC0-o7k.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-mandatory-training-rule.entity-0GglrBiH.mjs → acorex-modules-learning-management-mandatory-training-rule.entity-BArvgFlh.mjs} +5 -12
- package/fesm2022/acorex-modules-learning-management-mandatory-training-rule.entity-BArvgFlh.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-skill-category.entity-92TfxM23.mjs → acorex-modules-learning-management-skill-category.entity-Bl99KTQK.mjs} +10 -29
- package/fesm2022/acorex-modules-learning-management-skill-category.entity-Bl99KTQK.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-skill-level.entity-Cb6wMKZs.mjs → acorex-modules-learning-management-skill-level.entity-Dw3XFqs5.mjs} +10 -28
- package/fesm2022/acorex-modules-learning-management-skill-level.entity-Dw3XFqs5.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-skill.entity-ScYBjXbd.mjs → acorex-modules-learning-management-skill.entity-S7dr4tKK.mjs} +4 -6
- package/fesm2022/acorex-modules-learning-management-skill.entity-S7dr4tKK.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-training-definition.entity-Bghb3axm.mjs → acorex-modules-learning-management-training-definition.entity-CsQP1x1i.mjs} +5 -13
- package/fesm2022/acorex-modules-learning-management-training-definition.entity-CsQP1x1i.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-training-type.entity-nbu0TG39.mjs → acorex-modules-learning-management-training-type.entity-DNIg2By9.mjs} +10 -27
- package/fesm2022/acorex-modules-learning-management-training-type.entity-DNIg2By9.mjs.map +1 -0
- package/fesm2022/{acorex-modules-learning-management-training.entity-COAMDASs.mjs → acorex-modules-learning-management-training.entity-hK9795ut.mjs} +17 -9
- package/fesm2022/acorex-modules-learning-management-training.entity-hK9795ut.mjs.map +1 -0
- package/fesm2022/acorex-modules-learning-management.mjs +17 -17
- package/fesm2022/acorex-modules-location-management.mjs +3 -5
- package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-measurement-core.mjs +54 -63
- package/fesm2022/acorex-modules-measurement-core.mjs.map +1 -1
- package/fesm2022/acorex-modules-meeting-management.mjs +3 -3
- package/fesm2022/acorex-modules-meeting-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-B9bK-Ioq.mjs → acorex-modules-organization-management-acorex-modules-organization-management-C_l-eSXZ.mjs} +219 -50
- package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-C_l-eSXZ.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-chart.entity-BsgpFmy7.mjs → acorex-modules-organization-management-chart.entity-D1LjhXpO.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-chart.entity-BsgpFmy7.mjs.map → acorex-modules-organization-management-chart.entity-D1LjhXpO.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-company.entity-BVbZ2GQG.mjs → acorex-modules-organization-management-company.entity-Bh3VtHCa.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-company.entity-BVbZ2GQG.mjs.map → acorex-modules-organization-management-company.entity-Bh3VtHCa.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-Bnv2h0FH.mjs → acorex-modules-organization-management-org-chart.page-iFH7kDtM.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-Bnv2h0FH.mjs.map → acorex-modules-organization-management-org-chart.page-iFH7kDtM.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-BtQRDXmY.mjs → acorex-modules-organization-management-permission-definition.provider-CuRjOjVT.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-BtQRDXmY.mjs.map → acorex-modules-organization-management-permission-definition.provider-CuRjOjVT.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-position.entity-DnHKGwF0.mjs → acorex-modules-organization-management-position.entity-ClFvPjVV.mjs} +8 -21
- package/fesm2022/acorex-modules-organization-management-position.entity-ClFvPjVV.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-responsibility.entity-gcsjYnAb.mjs → acorex-modules-organization-management-responsibility.entity-BV6KD1yF.mjs} +7 -16
- package/fesm2022/acorex-modules-organization-management-responsibility.entity-BV6KD1yF.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-role.entity-cYqwqNQH.mjs → acorex-modules-organization-management-role.entity-CJEfiAlV.mjs} +7 -16
- package/fesm2022/acorex-modules-organization-management-role.entity-CJEfiAlV.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-team.entity-CBhPoYrF.mjs → acorex-modules-organization-management-team.entity-BhBRlXTD.mjs} +6 -15
- package/fesm2022/acorex-modules-organization-management-team.entity-BhBRlXTD.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management.mjs +1 -1
- package/fesm2022/{acorex-modules-party-management-acorex-modules-party-management-DB3H-49E.mjs → acorex-modules-party-management-acorex-modules-party-management-C0LcUFf1.mjs} +7 -7
- package/fesm2022/{acorex-modules-party-management-acorex-modules-party-management-DB3H-49E.mjs.map → acorex-modules-party-management-acorex-modules-party-management-C0LcUFf1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-industry.entity-E0RPqKYR.mjs → acorex-modules-party-management-industry.entity-DPXtRIyd.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-industry.entity-E0RPqKYR.mjs.map → acorex-modules-party-management-industry.entity-DPXtRIyd.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party-identifier-type.entity-COMURXUX.mjs → acorex-modules-party-management-party-identifier-type.entity-DLQRkdEw.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-party-identifier-type.entity-COMURXUX.mjs.map → acorex-modules-party-management-party-identifier-type.entity-DLQRkdEw.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party-identifier.entity-C6b-Vrgs.mjs → acorex-modules-party-management-party-identifier.entity-DA7S6hFJ.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-party-identifier.entity-C6b-Vrgs.mjs.map → acorex-modules-party-management-party-identifier.entity-DA7S6hFJ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party-relationship.entity-rZHjByaY.mjs → acorex-modules-party-management-party-relationship.entity-5u6NElSk.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-party-relationship.entity-rZHjByaY.mjs.map → acorex-modules-party-management-party-relationship.entity-5u6NElSk.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party-role.entity-B_fesIiR.mjs → acorex-modules-party-management-party-role.entity-DRFwlDry.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-party-role.entity-B_fesIiR.mjs.map → acorex-modules-party-management-party-role.entity-DRFwlDry.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party.entity-Czvx5O4_.mjs → acorex-modules-party-management-party.entity-DGeVLzra.mjs} +5 -5
- package/fesm2022/acorex-modules-party-management-party.entity-DGeVLzra.mjs.map +1 -0
- package/fesm2022/acorex-modules-party-management.mjs +1 -1
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-D3eLYk5B.mjs → acorex-modules-platform-management-acorex-modules-platform-management-BBHPVHzg.mjs} +5 -5
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-D3eLYk5B.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-BBHPVHzg.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-list-version.component-DR6JzLzV.mjs → acorex-modules-platform-management-list-version.component-n5JOzU2Y.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-list-version.component-DR6JzLzV.mjs.map → acorex-modules-platform-management-list-version.component-n5JOzU2Y.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-zjY38r5l.mjs → acorex-modules-platform-management-menu-list.component-CDLDkiW8.mjs} +3 -3
- package/fesm2022/acorex-modules-platform-management-menu-list.component-CDLDkiW8.mjs.map +1 -0
- package/fesm2022/{acorex-modules-platform-management-permission-definition.provider-BRZXzDNj.mjs → acorex-modules-platform-management-permission-definition.provider-Cc8ZV1K1.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-permission-definition.provider-BRZXzDNj.mjs.map → acorex-modules-platform-management-permission-definition.provider-Cc8ZV1K1.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/acorex-modules-project-management.mjs +90 -49
- package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-report-management.mjs +1 -1
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-security-management-acorex-modules-security-management-e7BjwLZm.mjs → acorex-modules-security-management-acorex-modules-security-management-DiOEecno.mjs} +5 -11
- package/fesm2022/acorex-modules-security-management-acorex-modules-security-management-DiOEecno.mjs.map +1 -0
- package/fesm2022/{acorex-modules-security-management-permission-definition.provider-DWx476Wy.mjs → acorex-modules-security-management-permission-definition.provider-BiZVWF3y.mjs} +2 -2
- package/fesm2022/{acorex-modules-security-management-permission-definition.provider-DWx476Wy.mjs.map → acorex-modules-security-management-permission-definition.provider-BiZVWF3y.mjs.map} +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +1 -1
- package/fesm2022/{acorex-modules-task-management-task-board.page-DdDfDHhk.mjs → acorex-modules-task-management-task-board.page-BVf2enGZ.mjs} +3 -3
- package/fesm2022/acorex-modules-task-management-task-board.page-BVf2enGZ.mjs.map +1 -0
- package/fesm2022/acorex-modules-task-management.mjs +1 -1
- package/fesm2022/{acorex-modules-workflow-management-overview.command-BTAESad0.mjs → acorex-modules-workflow-management-overview.command-Dl04E1qj.mjs} +3 -3
- package/fesm2022/acorex-modules-workflow-management-overview.command-Dl04E1qj.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management.mjs +4 -8
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/package.json +19 -19
- package/fesm2022/acorex-modules-assessment-management-collaborator.entity-DpV98osl.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-publication.entity-DnLUKNiz.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-question-bank-item.entity-BPwy0fsh.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-questionnaire.entity-JRC8y5A-.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-response-entry.entity-PjiBql_T.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-response-session.entity-CsAtlsZE.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-status.entity-7IQGhMLK.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset.entity-BQgzan6X.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-show-profile-command-F3qc26vh.mjs.map +0 -1
- package/fesm2022/acorex-modules-common-manage-extra-properties.command-Cl7ANDKN.mjs.map +0 -1
- package/fesm2022/acorex-modules-content-management-acorex-modules-content-management--Pn1KLlN.mjs.map +0 -1
- package/fesm2022/acorex-modules-customer-management-activity.entity-CLEBK5_A.mjs.map +0 -1
- package/fesm2022/acorex-modules-customer-management-customer.entity-CZDCpwiX.mjs.map +0 -1
- package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-CxFD0OVD.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-BGMXoqyv.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employment-type.entity-CMEY-M1P.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-leave-request.entity-ItVzChs-.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-leave-type.entity-BqmzR9Zs.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-oW70mkOZ.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-attendance.entity-DL79CMSt.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-certificate-definition.entity-DKbzA7Hj.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-certificate-type.entity-B0qXC4g5.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-certificate.entity-COjlnLIm.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-course-type.entity-B_JTtF_9.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-course.entity-CT75daKU.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-employee-skill.entity-D1C-C3Kq.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-enrollment.entity-omA4kcHi.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-learning-path-course.entity-BBqk5EtV.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-learning-path.entity-D1Y38NZ_.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-mandatory-training-rule.entity-0GglrBiH.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-skill-category.entity-92TfxM23.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-skill-level.entity-Cb6wMKZs.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-skill.entity-ScYBjXbd.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-training-definition.entity-Bghb3axm.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-training-type.entity-nbu0TG39.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-training.entity-COAMDASs.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-B9bK-Ioq.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-position.entity-DnHKGwF0.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-responsibility.entity-gcsjYnAb.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-role.entity-cYqwqNQH.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-team.entity-CBhPoYrF.mjs.map +0 -1
- package/fesm2022/acorex-modules-party-management-party.entity-Czvx5O4_.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-menu-list.component-zjY38r5l.mjs.map +0 -1
- package/fesm2022/acorex-modules-security-management-acorex-modules-security-management-e7BjwLZm.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-task-board.page-DdDfDHhk.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-overview.command-BTAESad0.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-organization-management-org-chart.page-Bnv2h0FH.mjs","sources":["../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart.service.js","../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart.page.js"],"sourcesContent":["import { AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExportService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { AXMOrganizationManagementChartEntityService } from '../../entities';\nimport * as i0 from \"@angular/core\";\nexport class AXMOrgChartService {\n constructor() {\n // Employee moved to HCM; resolve via runtime query mapping instead of direct service\n this.chartService = inject(AXMOrganizationManagementChartEntityService);\n this.loadingDialog = inject(AXLoadingDialogService);\n this.exportService = inject(AXPExportService);\n this.translationService = inject(AXTranslationService);\n this.commandService = inject(AXPCommandService);\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this._rootNode = signal({ id: AXPDataGenerator.uuid(), title: 'Company' }, ...(ngDevMode ? [{ debugName: \"_rootNode\" }] : []));\n this.rootNode = this._rootNode.asReadonly();\n }\n async load() {\n const first = (await this.chartService.query({\n skip: 0,\n take: 1,\n sort: [{ field: 'version', dir: 'desc' }],\n })).items[0];\n //\n if (first && first.data) {\n const data = first.data;\n this._rootNode.set(data);\n }\n else {\n await this.generate();\n await this.load();\n }\n }\n async generate() {\n const dialogResult = await this.showGenerateDialog();\n if (dialogResult.cancelled) {\n return;\n }\n const input = dialogResult.input || {\n includeEmployees: true,\n preferPrimary: true,\n mode: 'structure',\n };\n // Prefer generating a fresh chart via mock command when available\n await this.commandService.execute('OrganizationManagement.OrgChart:Generate', input);\n }\n /**\n * Show dialog to get OrgChart generation parameters from user\n */\n async showGenerateDialog() {\n const modeLabel = await this.translationService.translateAsync('@organization-management:organization-chart.components.generate-dialog.fields.mode.label');\n const includeEmployeesLabel = await this.translationService.translateAsync('@organization-management:organization-chart.components.generate-dialog.fields.include-employees.label');\n const preferPrimaryLabel = await this.translationService.translateAsync('@organization-management:organization-chart.components.generate-dialog.fields.prefer-primary.label');\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog(dialog => {\n dialog\n .setTitle('@organization-management:organization-chart.components.generate-dialog.title')\n .setMessage('@organization-management:organization-chart.components.generate-dialog.message')\n .setContext({\n mode: 'structure',\n includeEmployees: true,\n preferPrimary: false\n })\n .content(flex => {\n flex.formField(modeLabel, (field) => {\n field.path('mode');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'structure', text: '@organization-management:organization-chart.options.mode.structure' },\n { value: 'location', text: '@organization-management:organization-chart.options.mode.location' },\n { value: 'reporting', text: '@organization-management:organization-chart.options.mode.reporting' }\n ]\n });\n })\n .formField(includeEmployeesLabel, (field) => {\n field.path('includeEmployees');\n field.toggleSwitch();\n })\n .formField(preferPrimaryLabel, (field) => {\n field.path('preferPrimary');\n field.toggleSwitch();\n });\n })\n .setActions(actions => {\n actions\n .cancel()\n .submit('@general:generate');\n });\n })\n .show();\n // Check if dialog was cancelled (result is null/undefined or has cancelled property)\n const formData = dialogRef.context();\n const action = dialogRef.action();\n dialogRef.close();\n if (!formData || action === 'cancel') {\n return { cancelled: true };\n }\n return {\n cancelled: false,\n input: formData\n };\n }\n //#region ---- Printing ----\n async printChart(element) {\n const d = this.loadingDialog.show({\n title: 'Printing Organization Chart...',\n mode: 'determinate',\n progressColor: 'primary',\n progressValue: 0,\n status: '0/10',\n text: 'Initializing print process...',\n buttons: [\n { text: 'Cancel', color: 'danger', onClick: () => d.close() }\n ],\n });\n try {\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.preparing-document'), 10, '1/10');\n const chartElement = element;\n const { originalStyles, modifiedStyles } = this.expandChart(chartElement);\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.rendering-chart-image'), 25, '2.5/10');\n const blob = await this.exportService.generateBlobFromElement(chartElement, {\n popup: true,\n filter: (node) => !(node instanceof Element && node.classList.contains('--toggle')),\n bgcolor: 'transparent',\n scale: 2,\n quality: 1,\n height: Number.parseInt(modifiedStyles.modifiedHeight),\n width: Number.parseInt(modifiedStyles.modifiedWidth),\n });\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.finalizing-image-processing'), 50, '5/10');\n this.restoreChartStyles(chartElement, originalStyles);\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.downloading-image'), 75, '7.5/10');\n this.exportService.download(blob, 'org-chart.png');\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.process-complete'), 100, '10/10');\n setTimeout(() => d.close(), 1500);\n }\n catch (err) {\n console.error('Error capturing chart:', err);\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.failed-to-generate-chart-image'), 100, 'Error', 'danger');\n d.close();\n }\n }\n expandChart(chartElement) {\n const originalStyles = {\n originalOverflow: chartElement.style.overflow,\n originalWidth: chartElement.style.width,\n originalHeight: chartElement.style.height,\n };\n const modifiedStyles = {\n modifiedOverflow: 'visible',\n modifiedWidth: `${chartElement.scrollWidth}px`,\n modifiedHeight: `${chartElement.scrollHeight}px`,\n };\n chartElement.style.overflow = modifiedStyles.modifiedOverflow;\n chartElement.style.width = modifiedStyles.modifiedWidth;\n chartElement.style.height = modifiedStyles.modifiedHeight;\n return { originalStyles, modifiedStyles };\n }\n restoreChartStyles(chartElement, originalStyles) {\n chartElement.style.overflow = originalStyles.originalOverflow;\n chartElement.style.width = originalStyles.originalWidth;\n chartElement.style.height = originalStyles.originalHeight;\n }\n async updateStep(dialog, text, progress, status, color = 'primary') {\n return new Promise((resolve) => {\n dialog.setProgressColor(color);\n dialog.setProgressText(text);\n dialog.setProgressValue(progress);\n dialog.setProgressStatus(status);\n resolve();\n });\n }\n async translate(key) {\n return (await this.translationService.translateAsync(key)) + '...';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNELE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQWdCN0UsTUFBTSxPQUFPLGtCQUFrQjtJQUQvQjtRQUdFLHFGQUFxRjtRQUM3RSxpQkFBWSxHQUFHLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBRW5FLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0Msa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNsRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFH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Q0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFXO1FBQ2pDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDckUsQ0FBQzsrR0EvTVUsa0JBQWtCO21IQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFN0eWxlQ29sb3JUeXBlIH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYTG9hZGluZ0RpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZy1kaWFsb2cnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQRXhwb3J0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUENvbW1hbmRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlcic7XG5cbmltcG9ydCB7IEFYUERhdGFHZW5lcmF0b3IgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQVhNT3JnYW5pemF0aW9uTm9kZSB9IGZyb20gJy4vb3JnLWNoYXJ0LnR5cGUnO1xuaW1wb3J0IHsgQVhNT3JnYW5pemF0aW9uTWFuYWdlbWVudENoYXJ0RW50aXR5U2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzJztcblxuZXhwb3J0IHR5cGUgT3JnQ2hhcnRNb2RlID0gJ2xvY2F0aW9uJyB8ICdzdHJ1Y3R1cmUnIHwgJ3JlcG9ydGluZyc7XG5cbmV4cG9ydCB0eXBlIE9yZ0NoYXJ0R2VuZXJhdGVJbnB1dCA9IHtcbiAgbW9kZT86IE9yZ0NoYXJ0TW9kZTtcbiAgaW5jbHVkZUVtcGxveWVlcz86IGJvb2xlYW47XG4gIHByZWZlclByaW1hcnk/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBPcmdDaGFydERpYWxvZ1Jlc3VsdCB7XG4gIGNhbmNlbGxlZDogYm9vbGVhbjtcbiAgaW5wdXQ/OiBPcmdDaGFydEdlbmVyYXRlSW5wdXQ7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWE1PcmdDaGFydFNlcnZpY2Uge1xuXG4gIC8vIEVtcGxveWVlIG1vdmVkIHRvIEhDTTsgcmVzb2x2ZSB2aWEgcnVudGltZSBxdWVyeSBtYXBwaW5nIGluc3RlYWQgb2YgZGlyZWN0IHNlcnZpY2VcbiAgcHJpdmF0ZSBjaGFydFNlcnZpY2UgPSBpbmplY3QoQVhNT3JnYW5pemF0aW9uTWFuYWdlbWVudENoYXJ0RW50aXR5U2VydmljZSk7XG5cbiAgcHJpdmF0ZSBsb2FkaW5nRGlhbG9nID0gaW5qZWN0KEFYTG9hZGluZ0RpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIGV4cG9ydFNlcnZpY2UgPSBpbmplY3QoQVhQRXhwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjb21tYW5kU2VydmljZSA9IGluamVjdChBWFBDb21tYW5kU2VydmljZSk7XG4gIHByaXZhdGUgbGF5b3V0QnVpbGRlciA9IGluamVjdChBWFBMYXlvdXRCdWlsZGVyU2VydmljZSk7XG5cblxuICBwcml2YXRlIHJlYWRvbmx5IF9yb290Tm9kZSA9IHNpZ25hbDxBWE1Pcmdhbml6YXRpb25Ob2RlPih7IGlkOiBBWFBEYXRhR2VuZXJhdG9yLnV1aWQoKSwgdGl0bGU6ICdDb21wYW55JyB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcm9vdE5vZGUgPSB0aGlzLl9yb290Tm9kZS5hc1JlYWRvbmx5KCk7XG5cblxuICBwdWJsaWMgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaXJzdCA9IChcbiAgICAgIGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgICAgc2tpcDogMCxcbiAgICAgICAgdGFrZTogMSxcbiAgICAgICAgc29ydDogW3sgZmllbGQ6ICd2ZXJzaW9uJywgZGlyOiAnZGVzYycgfV0sXG4gICAgICB9KVxuICAgICkuaXRlbXNbMF07XG4gICAgLy9cbiAgICBpZiAoZmlyc3QgJiYgZmlyc3QuZGF0YSkge1xuICAgICAgY29uc3QgZGF0YSA9IGZpcnN0LmRhdGEgYXMgQVhNT3JnYW5pemF0aW9uTm9kZTtcbiAgICAgIHRoaXMuX3Jvb3ROb2RlLnNldChkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZSgpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRpYWxvZ1Jlc3VsdCA9IGF3YWl0IHRoaXMuc2hvd0dlbmVyYXRlRGlhbG9nKCk7XG5cbiAgICBpZiAoZGlhbG9nUmVzdWx0LmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZGlhbG9nUmVzdWx0LmlucHV0IHx8IHtcbiAgICAgIGluY2x1ZGVFbXBsb3llZXM6IHRydWUsXG4gICAgICBwcmVmZXJQcmltYXJ5OiB0cnVlLFxuICAgICAgbW9kZTogJ3N0cnVjdHVyZScsXG4gICAgfSBhcyBPcmdDaGFydEdlbmVyYXRlSW5wdXQ7XG5cbiAgICAvLyBQcmVmZXIgZ2VuZXJhdGluZyBhIGZyZXNoIGNoYXJ0IHZpYSBtb2NrIGNvbW1hbmQgd2hlbiBhdmFpbGFibGVcbiAgICBhd2FpdCB0aGlzLmNvbW1hbmRTZXJ2aWNlLmV4ZWN1dGUoJ09yZ2FuaXphdGlvbk1hbmFnZW1lbnQuT3JnQ2hhcnQ6R2VuZXJhdGUnLCBpbnB1dCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBkaWFsb2cgdG8gZ2V0IE9yZ0NoYXJ0IGdlbmVyYXRpb24gcGFyYW1ldGVycyBmcm9tIHVzZXJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2hvd0dlbmVyYXRlRGlhbG9nKCk6IFByb21pc2U8T3JnQ2hhcnREaWFsb2dSZXN1bHQ+IHtcbiAgICBjb25zdCBtb2RlTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQG9yZ2FuaXphdGlvbi1tYW5hZ2VtZW50Om9yZ2FuaXphdGlvbi1jaGFydC5jb21wb25lbnRzLmdlbmVyYXRlLWRpYWxvZy5maWVsZHMubW9kZS5sYWJlbCcpO1xuICAgIGNvbnN0IGluY2x1ZGVFbXBsb3llZXNMYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LmNvbXBvbmVudHMuZ2VuZXJhdGUtZGlhbG9nLmZpZWxkcy5pbmNsdWRlLWVtcGxveWVlcy5sYWJlbCcpO1xuICAgIGNvbnN0IHByZWZlclByaW1hcnlMYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LmNvbXBvbmVudHMuZ2VuZXJhdGUtZGlhbG9nLmZpZWxkcy5wcmVmZXItcHJpbWFyeS5sYWJlbCcpO1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gYXdhaXQgdGhpcy5sYXlvdXRCdWlsZGVyXG4gICAgICAuY3JlYXRlKClcbiAgICAgIC5kaWFsb2coZGlhbG9nID0+IHtcbiAgICAgICAgZGlhbG9nXG4gICAgICAgICAgLnNldFRpdGxlKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LmNvbXBvbmVudHMuZ2VuZXJhdGUtZGlhbG9nLnRpdGxlJylcbiAgICAgICAgICAuc2V0TWVzc2FnZSgnQG9yZ2FuaXphdGlvbi1tYW5hZ2VtZW50Om9yZ2FuaXphdGlvbi1jaGFydC5jb21wb25lbnRzLmdlbmVyYXRlLWRpYWxvZy5tZXNzYWdlJylcbiAgICAgICAgICAuc2V0Q29udGV4dCh7XG4gICAgICAgICAgICBtb2RlOiAnc3RydWN0dXJlJyBhcyBPcmdDaGFydE1vZGUsXG4gICAgICAgICAgICBpbmNsdWRlRW1wbG95ZWVzOiB0cnVlLFxuICAgICAgICAgICAgcHJlZmVyUHJpbWFyeTogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jb250ZW50KGZsZXggPT4ge1xuICAgICAgICAgICAgZmxleC5mb3JtRmllbGQobW9kZUxhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgZmllbGQucGF0aCgnbW9kZScpO1xuICAgICAgICAgICAgICBmaWVsZC5zZWxlY3Rpb25MaXN0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIHRleHRGaWVsZDogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IFtcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdzdHJ1Y3R1cmUnLCB0ZXh0OiAnQG9yZ2FuaXphdGlvbi1tYW5hZ2VtZW50Om9yZ2FuaXphdGlvbi1jaGFydC5vcHRpb25zLm1vZGUuc3RydWN0dXJlJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ2xvY2F0aW9uJywgdGV4dDogJ0Bvcmdhbml6YXRpb24tbWFuYWdlbWVudDpvcmdhbml6YXRpb24tY2hhcnQub3B0aW9ucy5tb2RlLmxvY2F0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ3JlcG9ydGluZycsIHRleHQ6ICdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0Lm9wdGlvbnMubW9kZS5yZXBvcnRpbmcnIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZChpbmNsdWRlRW1wbG95ZWVzTGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2luY2x1ZGVFbXBsb3llZXMnKTtcbiAgICAgICAgICAgICAgICBmaWVsZC50b2dnbGVTd2l0Y2goKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZChwcmVmZXJQcmltYXJ5TGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3ByZWZlclByaW1hcnknKTtcbiAgICAgICAgICAgICAgICBmaWVsZC50b2dnbGVTd2l0Y2goKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2V0QWN0aW9ucyhhY3Rpb25zID0+IHtcbiAgICAgICAgICAgIGFjdGlvbnNcbiAgICAgICAgICAgICAgLmNhbmNlbCgpXG4gICAgICAgICAgICAgIC5zdWJtaXQoJ0BnZW5lcmFsOmdlbmVyYXRlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnNob3coKTtcblxuICAgIC8vIENoZWNrIGlmIGRpYWxvZyB3YXMgY2FuY2VsbGVkIChyZXN1bHQgaXMgbnVsbC91bmRlZmluZWQgb3IgaGFzIGNhbmNlbGxlZCBwcm9wZXJ0eSlcbiAgICBjb25zdCBmb3JtRGF0YSA9IGRpYWxvZ1JlZi5jb250ZXh0KCk7XG4gICAgY29uc3QgYWN0aW9uID0gZGlhbG9nUmVmLmFjdGlvbigpO1xuXG4gICAgZGlhbG9nUmVmLmNsb3NlKCk7XG5cbiAgICBpZiAoIWZvcm1EYXRhIHx8IGFjdGlvbiA9PT0gJ2NhbmNlbCcpIHtcbiAgICAgIHJldHVybiB7IGNhbmNlbGxlZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgaW5wdXQ6IGZvcm1EYXRhIGFzIE9yZ0NoYXJ0R2VuZXJhdGVJbnB1dFxuICAgIH07XG4gIH1cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaW50aW5nICAgLS0tLVxuXG4gIGFzeW5jIHByaW50Q2hhcnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkID0gdGhpcy5sb2FkaW5nRGlhbG9nLnNob3coe1xuICAgICAgdGl0bGU6ICdQcmludGluZyBPcmdhbml6YXRpb24gQ2hhcnQuLi4nLFxuICAgICAgbW9kZTogJ2RldGVybWluYXRlJyxcbiAgICAgIHByb2dyZXNzQ29sb3I6ICdwcmltYXJ5JyxcbiAgICAgIHByb2dyZXNzVmFsdWU6IDAsXG4gICAgICBzdGF0dXM6ICcwLzEwJyxcbiAgICAgIHRleHQ6ICdJbml0aWFsaXppbmcgcHJpbnQgcHJvY2Vzcy4uLicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgdGV4dDogJ0NhbmNlbCcsIGNvbG9yOiAnZGFuZ2VyJywgb25DbGljazogKCkgPT4gZC5jbG9zZSgpIH1cbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdGVwKGQsIGF3YWl0IHRoaXMudHJhbnNsYXRlKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LnN0YXRlcy5wcmVwYXJpbmctZG9jdW1lbnQnKSwgMTAsICcxLzEwJyk7XG4gICAgICBjb25zdCBjaGFydEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgY29uc3QgeyBvcmlnaW5hbFN0eWxlcywgbW9kaWZpZWRTdHlsZXMgfSA9IHRoaXMuZXhwYW5kQ2hhcnQoY2hhcnRFbGVtZW50KTtcblxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdGVwKGQsIGF3YWl0IHRoaXMudHJhbnNsYXRlKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LnN0YXRlcy5yZW5kZXJpbmctY2hhcnQtaW1hZ2UnKSwgMjUsICcyLjUvMTAnKTtcbiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVCbG9iRnJvbUVsZW1lbnQoY2hhcnRFbGVtZW50LCB7XG4gICAgICAgIHBvcHVwOiB0cnVlLFxuICAgICAgICBmaWx0ZXI6IChub2RlOiBOb2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCctLXRvZ2dsZScpKSxcbiAgICAgICAgYmdjb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgIHF1YWxpdHk6IDEsXG4gICAgICAgIGhlaWdodDogTnVtYmVyLnBhcnNlSW50KG1vZGlmaWVkU3R5bGVzLm1vZGlmaWVkSGVpZ2h0KSxcbiAgICAgICAgd2lkdGg6IE51bWJlci5wYXJzZUludChtb2RpZmllZFN0eWxlcy5tb2RpZmllZFdpZHRoKSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0ZXAoZCwgYXdhaXQgdGhpcy50cmFuc2xhdGUoJ0Bvcmdhbml6YXRpb24tbWFuYWdlbWVudDpvcmdhbml6YXRpb24tY2hhcnQuc3RhdGVzLmZpbmFsaXppbmctaW1hZ2UtcHJvY2Vzc2luZycpLCA1MCwgJzUvMTAnKTtcbiAgICAgIHRoaXMucmVzdG9yZUNoYXJ0U3R5bGVzKGNoYXJ0RWxlbWVudCwgb3JpZ2luYWxTdHlsZXMpO1xuXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0ZXAoZCwgYXdhaXQgdGhpcy50cmFuc2xhdGUoJ0Bvcmdhbml6YXRpb24tbWFuYWdlbWVudDpvcmdhbml6YXRpb24tY2hhcnQuc3RhdGVzLmRvd25sb2FkaW5nLWltYWdlJyksIDc1LCAnNy41LzEwJyk7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZG93bmxvYWQoYmxvYiwgJ29yZy1jaGFydC5wbmcnKTtcblxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdGVwKGQsIGF3YWl0IHRoaXMudHJhbnNsYXRlKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LnN0YXRlcy5wcm9jZXNzLWNvbXBsZXRlJyksIDEwMCwgJzEwLzEwJyk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGQuY2xvc2UoKSwgMTUwMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjYXB0dXJpbmcgY2hhcnQ6JywgZXJyKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlU3RlcChkLCBhd2FpdCB0aGlzLnRyYW5zbGF0ZSgnQG9yZ2FuaXphdGlvbi1tYW5hZ2VtZW50Om9yZ2FuaXphdGlvbi1jaGFydC5zdGF0ZXMuZmFpbGVkLXRvLWdlbmVyYXRlLWNoYXJ0LWltYWdlJyksIDEwMCwgJ0Vycm9yJywgJ2RhbmdlcicpO1xuICAgICAgZC5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kQ2hhcnQoY2hhcnRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsU3R5bGVzID0ge1xuICAgICAgb3JpZ2luYWxPdmVyZmxvdzogY2hhcnRFbGVtZW50LnN0eWxlLm92ZXJmbG93LFxuICAgICAgb3JpZ2luYWxXaWR0aDogY2hhcnRFbGVtZW50LnN0eWxlLndpZHRoLFxuICAgICAgb3JpZ2luYWxIZWlnaHQ6IGNoYXJ0RWxlbWVudC5zdHlsZS5oZWlnaHQsXG4gICAgfTtcbiAgICBjb25zdCBtb2RpZmllZFN0eWxlcyA9IHtcbiAgICAgIG1vZGlmaWVkT3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgIG1vZGlmaWVkV2lkdGg6IGAke2NoYXJ0RWxlbWVudC5zY3JvbGxXaWR0aH1weGAsXG4gICAgICBtb2RpZmllZEhlaWdodDogYCR7Y2hhcnRFbGVtZW50LnNjcm9sbEhlaWdodH1weGAsXG4gICAgfTtcbiAgICBjaGFydEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBtb2RpZmllZFN0eWxlcy5tb2RpZmllZE92ZXJmbG93O1xuICAgIGNoYXJ0RWxlbWVudC5zdHlsZS53aWR0aCA9IG1vZGlmaWVkU3R5bGVzLm1vZGlmaWVkV2lkdGg7XG4gICAgY2hhcnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IG1vZGlmaWVkU3R5bGVzLm1vZGlmaWVkSGVpZ2h0O1xuICAgIHJldHVybiB7IG9yaWdpbmFsU3R5bGVzLCBtb2RpZmllZFN0eWxlcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlQ2hhcnRTdHlsZXMoXG4gICAgY2hhcnRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBvcmlnaW5hbFN0eWxlczogeyBvcmlnaW5hbE92ZXJmbG93OiBzdHJpbmc7IG9yaWdpbmFsV2lkdGg6IHN0cmluZzsgb3JpZ2luYWxIZWlnaHQ6IHN0cmluZyB9LFxuICApOiB2b2lkIHtcbiAgICBjaGFydEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbFN0eWxlcy5vcmlnaW5hbE92ZXJmbG93O1xuICAgIGNoYXJ0RWxlbWVudC5zdHlsZS53aWR0aCA9IG9yaWdpbmFsU3R5bGVzLm9yaWdpbmFsV2lkdGg7XG4gICAgY2hhcnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IG9yaWdpbmFsU3R5bGVzLm9yaWdpbmFsSGVpZ2h0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGVwKFxuICAgIGRpYWxvZzogYW55LFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBwcm9ncmVzczogbnVtYmVyLFxuICAgIHN0YXR1czogc3RyaW5nLFxuICAgIGNvbG9yOiBBWFN0eWxlQ29sb3JUeXBlID0gJ3ByaW1hcnknLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc0NvbG9yKGNvbG9yKTtcbiAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc1RleHQodGV4dCk7XG4gICAgICBkaWFsb2cuc2V0UHJvZ3Jlc3NWYWx1ZShwcm9ncmVzcyk7XG4gICAgICBkaWFsb2cuc2V0UHJvZ3Jlc3NTdGF0dXMoc3RhdHVzKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJhbnNsYXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGtleSkpICsgJy4uLic7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxufVxuIl19","import { AXPanViewDirective } from '@acorex/cdk/pan-view';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXContextMenuComponent, AXMenuModule, } from '@acorex/components/menu';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, inject, NgZone, signal, viewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport set from 'lodash-es/set';\nimport { RootConfig } from '../../const';\nimport { AXMOrgChartService } from './org-chart.service';\nimport { AXMOrgChartCategory, AXMOrgChartNodeType } from './org-chart.type';\nimport { getActionButton } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/core/translation\";\nimport * as i4 from \"@acorex/components/decorators\";\n/**\n * Component for displaying and interacting with an organizational chart.\n */\nexport class AXMOrgChartPage extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n this.rootConfig = RootConfig;\n this.nodeTemplate = viewChild.required('nodeTemplate');\n this.treeContainer = viewChild.required('chart');\n this.parent = viewChild.required('parent');\n this.contextMenu = viewChild(AXContextMenuComponent, ...(ngDevMode ? [{ debugName: \"contextMenu\" }] : []));\n this.panView = viewChild(AXPanViewDirective, ...(ngDevMode ? [{ debugName: \"panView\" }] : []));\n this.ngzone = inject(NgZone);\n this.viewContainerRef = inject(ViewContainerRef);\n // printing is handled by service itself\n this.chartService = inject(AXMOrgChartService);\n this.NODE_STROKE_COLOR = 'rgba(var(--ax-sys-color-primary-400))';\n this.LINK_STROKE_WIDTH = 1;\n this.NodeTypes = AXMOrgChartNodeType;\n this.isFullscreen = signal(false, ...(ngDevMode ? [{ debugName: \"isFullscreen\" }] : []));\n this.panX = signal(0, ...(ngDevMode ? [{ debugName: \"panX\" }] : []));\n this.panY = signal(0, ...(ngDevMode ? [{ debugName: \"panY\" }] : []));\n this.panZoomLevel = signal(100, ...(ngDevMode ? [{ debugName: \"panZoomLevel\" }] : []));\n this.isChartRendered = false;\n this.nodeTypes = [\n { title: 'Company', color: 'primary', icon: 'fal fa-building', category: AXMOrgChartCategory.Company },\n { title: 'Location', color: 'accent1', icon: 'fal fa-globe', category: AXMOrgChartCategory.Location },\n { title: 'Business Unit', color: 'accent2', icon: 'fal fa-sitemap', category: AXMOrgChartCategory.BusinessUnit },\n { title: 'Position', color: 'accent3', icon: 'fal fa-user-tie', category: AXMOrgChartCategory.Position },\n { title: 'Employee', color: 'surface', icon: 'fal fa-address-card', category: AXMOrgChartCategory.Employee },\n ];\n this.#initialize = afterNextRender(async () => {\n this.d3 = await import('d3');\n await this.refresh();\n });\n }\n #initialize;\n /**\n * Zooms in the chart.\n */\n zoomIn() {\n this.panView()?.zoomIn();\n }\n /**\n * Zooms out the chart.\n */\n zoomOut() {\n this.panView()?.zoomOut();\n }\n /**\n * Resets the zoom level and pan position of the chart.\n */\n zoomReset() {\n this.panView()?.resetPosition();\n }\n /**\n * Toggles fullscreen mode for the chart.\n */\n toggleFullscreen() {\n if (this.isFullscreen()) {\n document.exitFullscreen();\n this.isFullscreen.set(false);\n }\n else {\n this.parent().nativeElement.requestFullscreen();\n this.isFullscreen.set(true);\n }\n document.querySelector(`foreignObject[node=\"node-${this.chartService.rootNode().id}\"]`)?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'center',\n });\n }\n /**\n * Calculates the maximum depth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum depth of the chart.\n */\n calculateMaxDepth(node) {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return 1 + Math.max(...node.children.map((child) => this.calculateMaxDepth(child)));\n }\n /**\n * Calculates the maximum breadth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum breadth of the chart.\n */\n calculateMaxBreadth(node) {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return node.children.reduce((acc, child) => acc + this.calculateMaxBreadth(child), 0);\n }\n /**\n * Creates and renders the organizational chart.\n * @param el - The container element for the chart.\n * @param data - The root node of the organizational chart.\n */\n createChart(el, data) {\n if (!this.d3) {\n return;\n }\n this.ngzone.runOutsideAngular(() => {\n const NODE_WIDTH_BASE = 260;\n const NODE_HEIGHT_BASE = 180;\n const HORIZONTAL_SPACING = 20;\n const VERTICAL_SPACING = 40;\n this.clearChart(el);\n const newSvg = this.d3.select(el).append('svg');\n const root = this.d3.hierarchy(data);\n root.descendants().forEach((node) => {\n if (node.data.isExpanded === false) {\n node.children = undefined;\n }\n });\n const treeLayout = this.d3\n .tree()\n .nodeSize([NODE_WIDTH_BASE + HORIZONTAL_SPACING, NODE_HEIGHT_BASE + VERTICAL_SPACING]);\n treeLayout(root);\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;\n root.descendants().forEach((d) => {\n if (d.x < minX)\n minX = d.x;\n if (d.x > maxX)\n maxX = d.x;\n if (d.y < minY)\n minY = d.y;\n if (d.y > maxY)\n maxY = d.y;\n });\n const CONTAINER_WIDTH = maxX - minX + NODE_WIDTH_BASE + 2 * HORIZONTAL_SPACING;\n const CONTAINER_HEIGHT = maxY - minY + NODE_HEIGHT_BASE + 2 * VERTICAL_SPACING;\n newSvg.attr('width', CONTAINER_WIDTH).attr('height', CONTAINER_HEIGHT);\n const g = newSvg\n .append('g')\n .attr('transform', `translate(${-minX + NODE_WIDTH_BASE / 2 + HORIZONTAL_SPACING / 2}, ${-minY + NODE_HEIGHT_BASE / 2 + VERTICAL_SPACING / 2})`);\n const link = g\n .selectAll('.link')\n .data(root.links())\n .enter()\n .append('path')\n .attr('class', 'link')\n .attr('d', (d) => {\n const source = d.source;\n const target = d.target;\n return `M${source.x},${source.y}V${(source.y + target.y) / 2}H${target.x}V${target.y - 10}`;\n })\n .attr('fill', 'none')\n .attr('stroke', this.NODE_STROKE_COLOR)\n .attr('stroke-width', this.LINK_STROKE_WIDTH)\n .attr('from', (d) => `node-${d.source.data.id}`)\n .attr('to', (d) => `node-${d.target.data.id}`);\n const node = g\n .selectAll('.axp-chart-node')\n .data(root.descendants())\n .enter()\n .append('foreignObject')\n .attr('class', 'axp-chart-node')\n .attr('node', (d) => `node-${d.data.id}`)\n .attr('x', (d) => d.x - NODE_WIDTH_BASE / 2)\n .attr('y', (d) => d.y - NODE_HEIGHT_BASE / 2 + 10)\n .attr('width', NODE_WIDTH_BASE)\n .attr('height', NODE_HEIGHT_BASE)\n .each((d) => this.renderNodeTemplate(d.data, d.x, d.y));\n this.contextMenu()?.refresh();\n });\n if (!this.isChartRendered) {\n // document.querySelector(`foreignObject[node=\"node-${data.id}\"] .--heading-container`)?.scrollIntoView({\n // behavior: 'smooth',\n // block: 'center',\n // inline: 'center',\n // });\n this.isChartRendered = true;\n this.panView()?.resetPosition();\n }\n }\n /**\n * Renders the node template for a given organizational node.\n * @param data - The node data.\n * @param x - The x-coordinate of the node.\n * @param y - The y-coordinate of the node.\n */\n renderNodeTemplate(data, x, y) {\n // Find the key that matches the node type\n // category is the same as type in simplified structure\n set(data, 'category', data.type);\n const viewRef = this.viewContainerRef.createEmbeddedView(this.nodeTemplate(), {\n $implicit: data,\n });\n const nodeElement = this.d3.select(this.treeContainer().nativeElement).select(`[node=\"node-${data.id}\"]`);\n const element = nodeElement.node();\n if (element) {\n element.appendChild(viewRef.rootNodes[0]);\n }\n }\n /**\n * Toggles the expansion state of a node.\n * @param data - The node data.\n * @param el - The HTML element representing the node.\n */\n toggleNode(data, el) {\n data.isExpanded = data.isExpanded === undefined ? false : !data.isExpanded;\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n // el.scrollIntoView({\n // behavior: 'smooth',\n // });\n }\n /**\n * Clears the chart from the container element.\n * @param el - The container element.\n */\n clearChart(el) {\n if (this.d3) {\n this.d3.select(el).select('svg').remove();\n this.viewContainerRef.clear();\n }\n }\n async refresh() {\n if (this.d3) {\n await this.chartService.load();\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n }\n }\n //#region Context Menu\n // protected async handleContextMenuOnOpening(e: AXContextMenuOpeningEvent) {\n // const node = get(e.targetElement, '__data__.data') as any as AXMOrganizationNode;\n // const allowedAddItems = await this.chartService.getAllowedAddMenuItems(node);\n // const allowDelete = node.type != AXMOrganizationNodeType.Company;\n // const isPasteAvailable = await this.chartService.isPasteAvailable();\n // const allowPaste = await this.chartService.allowPaste(node);\n // //\n // if (allowedAddItems.length) {\n // e.items.push({\n // text: 'Add New',\n // icon: 'fa-light fa-plus',\n // items: allowedAddItems,\n // break: allowDelete,\n // });\n // }\n // //\n // if (allowDelete) {\n // e.items.push({\n // name: 'cut',\n // text: 'Cut',\n // icon: 'fa-light fa-cut',\n // data: node,\n // });\n // e.items.push({\n // name: 'copy',\n // text: 'Copy',\n // icon: 'fa-light fa-copy',\n // data: node,\n // break: !isPasteAvailable,\n // });\n // }\n // if (isPasteAvailable) {\n // e.items.push({\n // name: 'paste',\n // text: 'Paste',\n // icon: 'fa-light fa-paste',\n // data: node,\n // break: true,\n // disabled: !allowPaste,\n // });\n // }\n // //\n // if (allowDelete) {\n // e.items.push({\n // name: 'remove',\n // text: 'Remove',\n // color: 'danger',\n // icon: 'fa-light fa-trash-can',\n // data: node,\n // });\n // }\n // //\n // if (e.items.length == 0) {\n // e.canceled = true;\n // }\n // }\n async handleContextMenuItemClick(e) {\n }\n //#endregion\n /**\n * Prints the organizational chart.\n */\n async printChart() {\n let [panX, panY, panZoomLevel] = [this.panX(), this.panY(), this.panZoomLevel()];\n this.panX.set(0), this.panY.set(0), this.panZoomLevel.set(100);\n await this.chartService.printChart(this.treeContainer().nativeElement);\n this.panX.set(panX), this.panY.set(panY), this.panZoomLevel.set(panZoomLevel);\n }\n /**\n * Gets the node colors based on the provided color.\n * @param color - The color to use for the node.\n * @returns An object containing the node's background, text, and border colors.\n */\n getNodeColors(color) {\n if (color.includes('surface')) {\n return {\n '--node-bg-color': `var(--ax-sys-color-${color})`,\n '--node-text-color': `var(--ax-sys-color-on-${color})`,\n '--node-border-color': `var(--ax-sys-color-border-${color})`,\n };\n }\n return {\n '--node-bg-color': `var(--ax-sys-color-${color}-surface)`,\n '--node-text-color': `var(--ax-sys-color-on-${color}-surface)`,\n '--node-border-color': `var(--ax-sys-color-border-${color}-surface)`,\n };\n }\n updateVar(oldValue, newValue) {\n oldValue.cat = newValue;\n }\n async getPageTitle() {\n return await this.translateService.translateAsync('@organization-management:organization-chart.components.chart.title');\n }\n async getPageDescription() {\n return await this.translateService.translateAsync('@organization-management:organization-chart.components.chart.description');\n }\n async getSecondaryMenuItems() {\n return [\n {\n ...getActionButton('print'),\n command: {\n name: 'print',\n },\n },\n {\n ...getActionButton('refresh'),\n command: {\n name: 'refresh',\n },\n }\n ];\n }\n async getPageBreadcrumbs() {\n return [\n {\n title: await this.translateService.translateAsync('@organization-management:module.menus.root.title')\n },\n ];\n }\n async execute(command) {\n if (command.name == 'print') {\n await this.printChart();\n }\n if (command.name == 'refresh') {\n await this.chartService.generate();\n await this.refresh();\n }\n }\n ngOnDestroy() {\n this.clearChart(this.treeContainer().nativeElement);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMOrgChartPage, isStandalone: true, selector: \"ng-component\", providers: [\n AXMOrgChartService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartPage\n }\n ], viewQueries: [{ propertyName: \"nodeTemplate\", first: true, predicate: [\"nodeTemplate\"], descendants: true, isSignal: true }, { propertyName: \"treeContainer\", first: true, predicate: [\"chart\"], descendants: true, isSignal: true }, { propertyName: \"parent\", first: true, predicate: [\"parent\"], descendants: true, isSignal: true }, { propertyName: \"contextMenu\", first: true, predicate: AXContextMenuComponent, descendants: true, isSignal: true }, { propertyName: \"panView\", first: true, predicate: AXPanViewDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content class=\\\"ax-overflow-hidden\\\">\\n <div class=\\\"ax-h-[calc(100vh-290px)]\\\" #parent id=\\\"parent\\\">\\n <div\\n #chart\\n axPanView\\n [(panX)]=\\\"panX\\\"\\n [(panY)]=\\\"panY\\\"\\n [freeMode]=\\\"true\\\"\\n [(zoom)]=\\\"panZoomLevel\\\"\\n [fitContent]=\\\"true\\\"\\n wrapperClasses=\\\"h\\\"\\n class=\\\"ax-light\\\"\\n ></div>\\n <!-- <ax-context-menu\\n [target]=\\\"'.axp-chart-node'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n [closeOn]=\\\"'leave'\\\"\\n (onItemClick)=\\\"handleContextMenuItemClick($event)\\\"\\n (onOpening)=\\\"handleContextMenuOnOpening($event)\\\"\\n >\\n </ax-context-menu> -->\\n </div>\\n </axp-page-content>\\n <axp-page-footer>\\n <axp-layout-prefix>\\n <div class=\\\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\\\">\\n @let v = {cat:'Company'}; @for (item of nodeTypes; track $index) {\\n <div class=\\\"axp-node-hint\\\" [style]=\\\"getNodeColors(item.color)\\\" [class.ax-ms-4]=\\\"v.cat!=item.category\\\">\\n <div class=\\\"--badge\\\"></div>\\n {{item.title}}\\n </div>\\n {{updateVar(v, item.category)}} }\\n </div>\\n </axp-layout-prefix>\\n <axp-layout-suffix>\\n <div class=\\\"ax-flex ax-gap-2\\\">\\n <ax-button (onClick)=\\\"zoomOut()\\\">\\n <ax-icon class=\\\"fa-solid fa-minus\\\"> </ax-icon>\\n </ax-button>\\n <ax-button [text]=\\\"panZoomLevel()\\\" (onClick)=\\\"zoomReset()\\\"></ax-button>\\n <ax-button (onClick)=\\\"zoomIn()\\\">\\n <ax-icon class=\\\"fa-solid fa-add\\\"> </ax-icon>\\n </ax-button>\\n <ax-button (onClick)=\\\"toggleFullscreen()\\\">\\n <ax-icon>\\n <i class=\\\"fa-solid\\\" [class]=\\\"isFullscreen()? 'fa-compress' : 'fa-expand'\\\"></i>\\n </ax-icon>\\n </ax-button>\\n </div>\\n </axp-layout-suffix>\\n </axp-page-footer>\\n</axp-page-layout>\\n\\n<ng-template #nodeTemplate let-data>\\n <div>\\n @switch (data.category) {\\n <!-- Company -->\\n @case (NodeTypes.Company) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'primary' }\\\"></ng-container>\\n }\\n <!-- Location -->\\n @case (NodeTypes.Country) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n } @case (NodeTypes.State) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n } @case (NodeTypes.City) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n }\\n <!-- BusinessUnit -->\\n @case (NodeTypes.Division) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n } @case (NodeTypes.Department) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n } @case (NodeTypes.Branch) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n }\\n <!-- Role -->\\n @case (NodeTypes.Position) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent3' }\\\"></ng-container>\\n }\\n <!-- Employee -->\\n @case (NodeTypes.Employee) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'surface' }\\\"></ng-container>\\n } }\\n </div>\\n</ng-template>\\n\\n<!----------------------------------- General Node Template ----------------------------------->\\n<ng-template #generalTemplate let-data=\\\"data\\\" let-color=\\\"color\\\">\\n <div #node class=\\\"--node-container\\\" [style]=\\\"getNodeColors(color)\\\">\\n <div class=\\\"--container\\\">\\n <div class=\\\"--heading-container\\\">\\n <div class=\\\"--content\\\">\\n <div class=\\\"--icon\\\">\\n <i class=\\\"fa-light fa-xl fa-fw\\\" [class]=\\\"data.icon\\\"></i>\\n </div>\\n <div class=\\\"--titles\\\">\\n <span class=\\\"--title\\\" [title]=\\\"data.title\\\">{{data.title}}</span>\\n @if(data.subtitle) {\\n <span class=\\\"--sub-title\\\" [title]=\\\"data.subtitle\\\">{{data.subtitle}}</span>\\n }\\n </div>\\n @if(data?.children?.length){\\n <div class=\\\"--badge\\\">\\n <span>{{data?.children?.length ?? 0}}</span>\\n </div>\\n }\\n </div>\\n </div>\\n @if(data.description) {\\n <div class=\\\"--body-container\\\">\\n <div class=\\\"--description\\\" [class.ax-pb-3]=\\\"data.children && data.children.length > 0\\\">\\n <span>{{data.description}}</span>\\n </div>\\n </div>\\n } @if(data.children && data.children.length > 0){\\n <div class=\\\"--toggle\\\">\\n <ax-button class=\\\"ax-xs ax-rounded-sm\\\" (onClick)=\\\"toggleNode(data,node)\\\">\\n <ax-icon icon=\\\"fa-solid\\\" [class]=\\\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </div>\\n</ng-template>\\n\", styles: [\".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.axp-chart-node{display:flex;align-items:center;justify-content:center}.axp-chart-node .--node-container{position:relative;cursor:pointer;--node-bg-color: var(--ax-sys-color-primary-surface);--node-text-color: var(--ax-sys-color-on-primary-surface);--node-border-color: var(--ax-sys-color-border-primary-surface)}.axp-chart-node .--node-container .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: \n //\n AXMenuModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i3.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i4.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXPanViewDirective, selector: \"[axPanView]\", inputs: [\"zoomStep\", \"minZoom\", \"maxZoom\", \"freeMode\", \"fitContent\", \"disablePan\", \"disableZoom\", \"wrapperClasses\", \"panX\", \"panY\", \"zoom\"], outputs: [\"panXChange\", \"panYChange\", \"zoomChange\", \"positionChange\"], exportAs: [\"axPanView\"] }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"ngmodule\", type: AXBreadcrumbsModule }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: \n //\n AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartPage, decorators: [{\n type: Component,\n args: [{ imports: [\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXPanViewDirective,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n AXMOrgChartService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartPage\n }\n ], template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content class=\\\"ax-overflow-hidden\\\">\\n <div class=\\\"ax-h-[calc(100vh-290px)]\\\" #parent id=\\\"parent\\\">\\n <div\\n #chart\\n axPanView\\n [(panX)]=\\\"panX\\\"\\n [(panY)]=\\\"panY\\\"\\n [freeMode]=\\\"true\\\"\\n [(zoom)]=\\\"panZoomLevel\\\"\\n [fitContent]=\\\"true\\\"\\n wrapperClasses=\\\"h\\\"\\n class=\\\"ax-light\\\"\\n ></div>\\n <!-- <ax-context-menu\\n [target]=\\\"'.axp-chart-node'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n [closeOn]=\\\"'leave'\\\"\\n (onItemClick)=\\\"handleContextMenuItemClick($event)\\\"\\n (onOpening)=\\\"handleContextMenuOnOpening($event)\\\"\\n >\\n </ax-context-menu> -->\\n </div>\\n </axp-page-content>\\n <axp-page-footer>\\n <axp-layout-prefix>\\n <div class=\\\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\\\">\\n @let v = {cat:'Company'}; @for (item of nodeTypes; track $index) {\\n <div class=\\\"axp-node-hint\\\" [style]=\\\"getNodeColors(item.color)\\\" [class.ax-ms-4]=\\\"v.cat!=item.category\\\">\\n <div class=\\\"--badge\\\"></div>\\n {{item.title}}\\n </div>\\n {{updateVar(v, item.category)}} }\\n </div>\\n </axp-layout-prefix>\\n <axp-layout-suffix>\\n <div class=\\\"ax-flex ax-gap-2\\\">\\n <ax-button (onClick)=\\\"zoomOut()\\\">\\n <ax-icon class=\\\"fa-solid fa-minus\\\"> </ax-icon>\\n </ax-button>\\n <ax-button [text]=\\\"panZoomLevel()\\\" (onClick)=\\\"zoomReset()\\\"></ax-button>\\n <ax-button (onClick)=\\\"zoomIn()\\\">\\n <ax-icon class=\\\"fa-solid fa-add\\\"> </ax-icon>\\n </ax-button>\\n <ax-button (onClick)=\\\"toggleFullscreen()\\\">\\n <ax-icon>\\n <i class=\\\"fa-solid\\\" [class]=\\\"isFullscreen()? 'fa-compress' : 'fa-expand'\\\"></i>\\n </ax-icon>\\n </ax-button>\\n </div>\\n </axp-layout-suffix>\\n </axp-page-footer>\\n</axp-page-layout>\\n\\n<ng-template #nodeTemplate let-data>\\n <div>\\n @switch (data.category) {\\n <!-- Company -->\\n @case (NodeTypes.Company) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'primary' }\\\"></ng-container>\\n }\\n <!-- Location -->\\n @case (NodeTypes.Country) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n } @case (NodeTypes.State) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n } @case (NodeTypes.City) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n }\\n <!-- BusinessUnit -->\\n @case (NodeTypes.Division) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n } @case (NodeTypes.Department) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n } @case (NodeTypes.Branch) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n }\\n <!-- Role -->\\n @case (NodeTypes.Position) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent3' }\\\"></ng-container>\\n }\\n <!-- Employee -->\\n @case (NodeTypes.Employee) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'surface' }\\\"></ng-container>\\n } }\\n </div>\\n</ng-template>\\n\\n<!----------------------------------- General Node Template ----------------------------------->\\n<ng-template #generalTemplate let-data=\\\"data\\\" let-color=\\\"color\\\">\\n <div #node class=\\\"--node-container\\\" [style]=\\\"getNodeColors(color)\\\">\\n <div class=\\\"--container\\\">\\n <div class=\\\"--heading-container\\\">\\n <div class=\\\"--content\\\">\\n <div class=\\\"--icon\\\">\\n <i class=\\\"fa-light fa-xl fa-fw\\\" [class]=\\\"data.icon\\\"></i>\\n </div>\\n <div class=\\\"--titles\\\">\\n <span class=\\\"--title\\\" [title]=\\\"data.title\\\">{{data.title}}</span>\\n @if(data.subtitle) {\\n <span class=\\\"--sub-title\\\" [title]=\\\"data.subtitle\\\">{{data.subtitle}}</span>\\n }\\n </div>\\n @if(data?.children?.length){\\n <div class=\\\"--badge\\\">\\n <span>{{data?.children?.length ?? 0}}</span>\\n </div>\\n }\\n </div>\\n </div>\\n @if(data.description) {\\n <div class=\\\"--body-container\\\">\\n <div class=\\\"--description\\\" [class.ax-pb-3]=\\\"data.children && data.children.length > 0\\\">\\n <span>{{data.description}}</span>\\n </div>\\n </div>\\n } @if(data.children && data.children.length > 0){\\n <div class=\\\"--toggle\\\">\\n <ax-button class=\\\"ax-xs ax-rounded-sm\\\" (onClick)=\\\"toggleNode(data,node)\\\">\\n <ax-icon icon=\\\"fa-solid\\\" [class]=\\\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </div>\\n</ng-template>\\n\", styles: [\".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.axp-chart-node{display:flex;align-items:center;justify-content:center}.axp-chart-node .--node-container{position:relative;cursor:pointer;--node-bg-color: var(--ax-sys-color-primary-surface);--node-text-color: var(--ax-sys-color-on-primary-surface);--node-border-color: var(--ax-sys-color-border-primary-surface)}.axp-chart-node .--node-container .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\\n\"] }]\n }], propDecorators: { nodeTemplate: [{ type: i0.ViewChild, args: ['nodeTemplate', { isSignal: true }] }], treeContainer: [{ type: i0.ViewChild, args: ['chart', { isSignal: true }] }], parent: [{ type: i0.ViewChild, args: ['parent', { isSignal: true }] }], contextMenu: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXContextMenuComponent), { isSignal: true }] }], panView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPanViewDirective), { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsc0JBQXNCLEVBR3RCLFlBQVksR0FDYixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxP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QUM3QjtTQUNGLGtZQVUrQixzQkFBc0IsMEZBQzFCLGtCQUFrQix1RkMvRWhELG05SkE4SEEsNDlHRGxGSSxZQUFZLHFNQUNaLFlBQVk7Z0JBQ1osRUFBRTtnQkFDRixZQUFZLDhCQUNaLGNBQWMsNlhBQ2Qsc0JBQXNCLDhCQUN0QixtQkFBbUIsOEdBQ25CLGlCQUFpQixnSUFDakIsa0JBQWtCLG9TQUNsQixlQUFlLDhCQUNmLG1CQUFtQiw4QkFDbkIsYUFBYTtnQkFDYixFQUFFO2dCQUNGLDRCQUE0QixnaUJBQzVCLHNCQUFzQjs7NEZBWWIsZUFBZTtrQkE5QjNCLFNBQVM7OEJBR0M7d0JBQ1AsWUFBWTt3QkFDWixZQUFZO3dCQUNaLEVBQUU7d0JBQ0YsWUFBWTt3QkFDWixjQUFjO3dCQUNkLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsRUFBRTt3QkFDRiw0QkFBNEI7d0JBQzVCLHNCQUFzQjtxQkFDdkIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1Qsa0JBQWtCO3dCQUNsQjs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLGlCQUFpQjt5QkFDN0I7cUJBQ0Y7MEVBTzJELGNBQWMsdUVBQ0gsT0FBTyxnRUFDZCxRQUFRLHlGQUN4QyxzQkFBc0Isc0ZBQzFCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUGFuVmlld0RpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY2RrL3Bhbi12aWV3JztcbmltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhCcmVhZGNydW1ic01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9icmVhZGNydW1icyc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQge1xuICBBWENvbnRleHRNZW51Q29tcG9uZW50LFxuICBBWENvbnRleHRNZW51SXRlbXNDbGlja0V2ZW50LFxuICBBWENvbnRleHRNZW51T3BlbmluZ0V2ZW50LFxuICBBWE1lbnVNb2R1bGUsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9tZW51JztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQUGFnZUxheW91dEJhc2UsIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50LCBBWFBQYWdlTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvdmlld3MnO1xuaW1wb3J0IHsgQVhQVGhlbWVMYXlvdXRCbG9ja0NvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBOZ1pvbmUsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLWVzL2dldCc7XG5pbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC1lcy9zZXQnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbnN0JztcbmltcG9ydCB7IEFYTU9yZ0NoYXJ0U2VydmljZSB9IGZyb20gJy4vb3JnLWNoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNT3JnYW5pemF0aW9uTm9kZSwgQVhNT3JnQ2hhcnRDYXRlZ29yeSwgQVhNT3JnQ2hhcnROb2RlVHlwZSB9IGZyb20gJy4vb3JnLWNoYXJ0LnR5cGUnO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0sIEFYUEJyZWFkY3J1bWJJdGVtLCBBWFBFeGVjdXRlQ29tbWFuZCwgZ2V0QWN0aW9uQnV0dG9uLCByZXNvbHZlQWN0aW9uTG9vayB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG4vKipcbiAqIENvbXBvbmVudCBmb3IgZGlzcGxheWluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBhbiBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9vcmctY2hhcnQucGFnZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb3JnLWNoYXJ0LnBhZ2Uuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJvdXRlck1vZHVsZSxcbiAgICAvL1xuICAgIEFYTWVudU1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWERyb3Bkb3duQnV0dG9uTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhQYW5WaWV3RGlyZWN0aXZlLFxuICAgIEFYTG9hZGluZ01vZHVsZSxcbiAgICBBWEJyZWFkY3J1bWJzTW9kdWxlLFxuICAgIEFYQmFkZ2VNb2R1bGUsXG4gICAgLy9cbiAgICBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50LFxuICAgIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICBBWE1PcmdDaGFydFNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQUGFnZUxheW91dEJhc2UsXG4gICAgICB1c2VFeGlzdGluZzogQVhNT3JnQ2hhcnRQYWdlXG4gICAgfVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1PcmdDaGFydFBhZ2UgZXh0ZW5kcyBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCByZWFkb25seSByb290Q29uZmlnID0gUm9vdENvbmZpZztcblxuICBwcml2YXRlIGQzITogdHlwZW9mIGltcG9ydCgnZDMnKTtcblxuICBwcml2YXRlIG5vZGVUZW1wbGF0ZSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjxhbnk+Pignbm9kZVRlbXBsYXRlJyk7XG4gIHByaXZhdGUgdHJlZUNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NoYXJ0Jyk7XG4gIHByaXZhdGUgcGFyZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PigncGFyZW50Jyk7XG4gIHByaXZhdGUgY29udGV4dE1lbnUgPSB2aWV3Q2hpbGQoQVhDb250ZXh0TWVudUNvbXBvbmVudCk7XG4gIHByaXZhdGUgcGFuVmlldyA9IHZpZXdDaGlsZChBWFBhblZpZXdEaXJlY3RpdmUpO1xuXG4gIHByaXZhdGUgbmd6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgLy8gcHJpbnRpbmcgaXMgaGFuZGxlZCBieSBzZXJ2aWNlIGl0c2VsZlxuICBwcml2YXRlIGNoYXJ0U2VydmljZSA9IGluamVjdChBWE1PcmdDaGFydFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgTk9ERV9TVFJPS0VfQ09MT1IgPSAncmdiYSh2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS00MDApKSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgTElOS19TVFJPS0VfV0lEVEggPSAxO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBOb2RlVHlwZXMgPSBBWE1PcmdDaGFydE5vZGVUeXBlO1xuXG4gIHByb3RlY3RlZCBpc0Z1bGxzY3JlZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcGFuWCA9IHNpZ25hbCgwKTtcbiAgcHJvdGVjdGVkIHBhblkgPSBzaWduYWwoMCk7XG4gIHByb3RlY3RlZCBwYW5ab29tTGV2ZWwgPSBzaWduYWwoMTAwKTtcblxuICBwcm90ZWN0ZWQgaXNDaGFydFJlbmRlcmVkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIG5vZGVUeXBlcyA9IFtcbiAgICB7IHRpdGxlOiAnQ29tcGFueScsIGNvbG9yOiAncHJpbWFyeScsIGljb246ICdmYWwgZmEtYnVpbGRpbmcnLCBjYXRlZ29yeTogQVhNT3JnQ2hhcnRDYXRlZ29yeS5Db21wYW55IH0sXG4gICAgeyB0aXRsZTogJ0xvY2F0aW9uJywgY29sb3I6ICdhY2NlbnQxJywgaWNvbjogJ2ZhbCBmYS1nbG9iZScsIGNhdGVnb3J5OiBBWE1PcmdDaGFydENhdGVnb3J5LkxvY2F0aW9uIH0sXG4gICAgeyB0aXRsZTogJ0J1c2luZXNzIFVuaXQnLCBjb2xvcjogJ2FjY2VudDInLCBpY29uOiAnZmFsIGZhLXNpdGVtYXAnLCBjYXRlZ29yeTogQVhNT3JnQ2hhcnRDYXRlZ29yeS5CdXNpbmVzc1VuaXQgfSxcbiAgICB7IHRpdGxlOiAnUG9zaXRpb24nLCBjb2xvcjogJ2FjY2VudDMnLCBpY29uOiAnZmFsIGZhLXVzZXItdGllJywgY2F0ZWdvcnk6IEFYTU9yZ0NoYXJ0Q2F0ZWdvcnkuUG9zaXRpb24gfSxcbiAgICB7IHRpdGxlOiAnRW1wbG95ZWUnLCBjb2xvcjogJ3N1cmZhY2UnLCBpY29uOiAnZmFsIGZhLWFkZHJlc3MtY2FyZCcsIGNhdGVnb3J5OiBBWE1PcmdDaGFydENhdGVnb3J5LkVtcGxveWVlIH0sXG4gIF07XG5cbiAgI2luaXRpYWxpemUgPSBhZnRlck5leHRSZW5kZXIoYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMuZDMgPSBhd2FpdCBpbXBvcnQoJ2QzJyk7XG5cbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFpvb21zIGluIHRoZSBjaGFydC5cbiAgICovXG4gIHByb3RlY3RlZCB6b29tSW4oKSB7XG4gICAgdGhpcy5wYW5WaWV3KCk/Lnpvb21JbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb21zIG91dCB0aGUgY2hhcnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgem9vbU91dCgpIHtcbiAgICB0aGlzLnBhblZpZXcoKT8uem9vbU91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgem9vbSBsZXZlbCBhbmQgcGFuIHBvc2l0aW9uIG9mIHRoZSBjaGFydC5cbiAgICovXG4gIHByb3RlY3RlZCB6b29tUmVzZXQoKSB7XG4gICAgdGhpcy5wYW5WaWV3KCk/LnJlc2V0UG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGZ1bGxzY3JlZW4gbW9kZSBmb3IgdGhlIGNoYXJ0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHRvZ2dsZUZ1bGxzY3JlZW4oKSB7XG4gICAgaWYgKHRoaXMuaXNGdWxsc2NyZWVuKCkpIHtcbiAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB0aGlzLmlzRnVsbHNjcmVlbi5zZXQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcmVudCgpLm5hdGl2ZUVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIHRoaXMuaXNGdWxsc2NyZWVuLnNldCh0cnVlKTtcbiAgICB9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgZm9yZWlnbk9iamVjdFtub2RlPVwibm9kZS0ke3RoaXMuY2hhcnRTZXJ2aWNlLnJvb3ROb2RlKCkuaWR9XCJdYCk/LnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIGJsb2NrOiAnc3RhcnQnLFxuICAgICAgaW5saW5lOiAnY2VudGVyJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAgICogQHBhcmFtIG5vZGUgLSBUaGUgcm9vdCBub2RlIG9mIHRoZSBjaGFydC5cbiAgICogQHJldHVybnMgVGhlIG1heGltdW0gZGVwdGggb2YgdGhlIGNoYXJ0LlxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNYXhEZXB0aChub2RlOiBBWE1Pcmdhbml6YXRpb25Ob2RlKTogbnVtYmVyIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4gfHwgbm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgbm9kZS5pc0V4cGFuZGVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAxICsgTWF0aC5tYXgoLi4ubm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB0aGlzLmNhbGN1bGF0ZU1heERlcHRoKGNoaWxkKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG1heGltdW0gYnJlYWR0aCBvZiB0aGUgb3JnYW5pemF0aW9uYWwgY2hhcnQuXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIHJvb3Qgbm9kZSBvZiB0aGUgY2hhcnQuXG4gICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIGJyZWFkdGggb2YgdGhlIGNoYXJ0LlxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNYXhCcmVhZHRoKG5vZGU6IEFYTU9yZ2FuaXphdGlvbk5vZGUpOiBudW1iZXIge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbiB8fCBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCBub2RlLmlzRXhwYW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4ucmVkdWNlKChhY2MsIGNoaWxkKSA9PiBhY2MgKyB0aGlzLmNhbGN1bGF0ZU1heEJyZWFkdGgoY2hpbGQpLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCByZW5kZXJzIHRoZSBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAgICogQHBhcmFtIGVsIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50IGZvciB0aGUgY2hhcnQuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIHJvb3Qgbm9kZSBvZiB0aGUgb3JnYW5pemF0aW9uYWwgY2hhcnQuXG4gICAqL1xuICBjcmVhdGVDaGFydChlbDogRWxlbWVudCwgZGF0YTogQVhNT3JnYW5pemF0aW9uTm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kMykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm5nem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBOT0RFX1dJRFRIX0JBU0UgPSAyNjA7XG4gICAgICBjb25zdCBOT0RFX0hFSUdIVF9CQVNFID0gMTgwO1xuICAgICAgY29uc3QgSE9SSVpPTlRBTF9TUEFDSU5HID0gMjA7XG4gICAgICBjb25zdCBWRVJUSUNBTF9TUEFDSU5HID0gNDA7XG5cbiAgICAgIHRoaXMuY2xlYXJDaGFydChlbCk7XG4gICAgICBjb25zdCBuZXdTdmcgPSB0aGlzLmQzLnNlbGVjdChlbCkuYXBwZW5kKCdzdmcnKTtcblxuICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZDMuaGllcmFyY2h5KGRhdGEpO1xuXG4gICAgICByb290LmRlc2NlbmRhbnRzKCkuZm9yRWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChub2RlLmRhdGEuaXNFeHBhbmRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHJlZUxheW91dCA9IHRoaXMuZDNcbiAgICAgICAgLnRyZWU8QVhNT3JnYW5pemF0aW9uTm9kZT4oKVxuICAgICAgICAubm9kZVNpemUoW05PREVfV0lEVEhfQkFTRSArIEhPUklaT05UQUxfU1BBQ0lORywgTk9ERV9IRUlHSFRfQkFTRSArIFZFUlRJQ0FMX1NQQUNJTkddKTtcblxuICAgICAgdHJlZUxheW91dChyb290KTtcblxuICAgICAgbGV0IG1pblggPSBJbmZpbml0eSxcbiAgICAgICAgbWF4WCA9IC1JbmZpbml0eSxcbiAgICAgICAgbWluWSA9IEluZmluaXR5LFxuICAgICAgICBtYXhZID0gLUluZmluaXR5O1xuICAgICAgcm9vdC5kZXNjZW5kYW50cygpLmZvckVhY2goKGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZC54IDwgbWluWCkgbWluWCA9IGQueDtcbiAgICAgICAgaWYgKGQueCA+IG1heFgpIG1heFggPSBkLng7XG4gICAgICAgIGlmIChkLnkgPCBtaW5ZKSBtaW5ZID0gZC55O1xuICAgICAgICBpZiAoZC55ID4gbWF4WSkgbWF4WSA9IGQueTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBDT05UQUlORVJfV0lEVEggPSBtYXhYIC0gbWluWCArIE5PREVfV0lEVEhfQkFTRSArIDIgKiBIT1JJWk9OVEFMX1NQQUNJTkc7XG4gICAgICBjb25zdCBDT05UQUlORVJfSEVJR0hUID0gbWF4WSAtIG1pblkgKyBOT0RFX0hFSUdIVF9CQVNFICsgMiAqIFZFUlRJQ0FMX1NQQUNJTkc7XG5cbiAgICAgIG5ld1N2Zy5hdHRyKCd3aWR0aCcsIENPTlRBSU5FUl9XSURUSCkuYXR0cignaGVpZ2h0JywgQ09OVEFJTkVSX0hFSUdIVCk7XG5cbiAgICAgIGNvbnN0IGcgPSBuZXdTdmdcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGB0cmFuc2xhdGUoJHstbWluWCArIE5PREVfV0lEVEhfQkFTRSAvIDIgKyBIT1JJWk9OVEFMX1NQQUNJTkcgLyAyfSwgJHstbWluWSArIE5PREVfSEVJR0hUX0JBU0UgLyAyICsgVkVSVElDQUxfU1BBQ0lORyAvIDJcbiAgICAgICAgICB9KWBcbiAgICAgICAgKTtcblxuICAgICAgY29uc3QgbGluayA9IGdcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpbmsnKVxuICAgICAgICAuZGF0YShyb290LmxpbmtzKCkpXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGluaycpXG4gICAgICAgIC5hdHRyKCdkJywgKGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGQuc291cmNlO1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGQudGFyZ2V0O1xuICAgICAgICAgIHJldHVybiBgTSR7c291cmNlLnh9LCR7c291cmNlLnl9ViR7KHNvdXJjZS55ICsgdGFyZ2V0LnkpIC8gMn1IJHt0YXJnZXQueH1WJHt0YXJnZXQueSAtIDEwfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgdGhpcy5OT0RFX1NUUk9LRV9DT0xPUilcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIHRoaXMuTElOS19TVFJPS0VfV0lEVEgpXG4gICAgICAgIC5hdHRyKCdmcm9tJywgKGQ6IGFueSkgPT4gYG5vZGUtJHtkLnNvdXJjZS5kYXRhLmlkfWApXG4gICAgICAgIC5hdHRyKCd0bycsIChkOiBhbnkpID0+IGBub2RlLSR7ZC50YXJnZXQuZGF0YS5pZH1gKTtcblxuICAgICAgY29uc3Qgbm9kZSA9IGdcbiAgICAgICAgLnNlbGVjdEFsbCgnLmF4cC1jaGFydC1ub2RlJylcbiAgICAgICAgLmRhdGEocm9vdC5kZXNjZW5kYW50cygpKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4cC1jaGFydC1ub2RlJylcbiAgICAgICAgLmF0dHIoJ25vZGUnLCAoZDogYW55KSA9PiBgbm9kZS0ke2QuZGF0YS5pZH1gKVxuICAgICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IGQueCAtIE5PREVfV0lEVEhfQkFTRSAvIDIpXG4gICAgICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gZC55IC0gTk9ERV9IRUlHSFRfQkFTRSAvIDIgKyAxMClcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgTk9ERV9XSURUSF9CQVNFKVxuICAgICAgICAuYXR0cignaGVpZ2h0JywgTk9ERV9IRUlHSFRfQkFTRSlcbiAgICAgICAgLmVhY2goKGQ6IGFueSkgPT4gdGhpcy5yZW5kZXJOb2RlVGVtcGxhdGUoZC5kYXRhLCBkLngsIGQueSkpO1xuXG4gICAgICB0aGlzLmNvbnRleHRNZW51KCk/LnJlZnJlc2goKTtcbiAgICB9KTtcbiAgICBpZiAoIXRoaXMuaXNDaGFydFJlbmRlcmVkKSB7XG4gICAgICAvLyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBmb3JlaWduT2JqZWN0W25vZGU9XCJub2RlLSR7ZGF0YS5pZH1cIl0gLi0taGVhZGluZy1jb250YWluZXJgKT8uc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgLy8gICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAvLyAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICAgIC8vICAgaW5saW5lOiAnY2VudGVyJyxcbiAgICAgIC8vIH0pO1xuICAgICAgdGhpcy5pc0NoYXJ0UmVuZGVyZWQgPSB0cnVlO1xuICAgICAgdGhpcy5wYW5WaWV3KCk/LnJlc2V0UG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgbm9kZSB0ZW1wbGF0ZSBmb3IgYSBnaXZlbiBvcmdhbml6YXRpb25hbCBub2RlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBub2RlIGRhdGEuXG4gICAqIEBwYXJhbSB4IC0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIHkgLSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBub2RlLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJOb2RlVGVtcGxhdGUoZGF0YTogQVhNT3JnYW5pemF0aW9uTm9kZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBrZXkgdGhhdCBtYXRjaGVzIHRoZSBub2RlIHR5cGVcbiAgICAvLyBjYXRlZ29yeSBpcyB0aGUgc2FtZSBhcyB0eXBlIGluIHNpbXBsaWZpZWQgc3RydWN0dXJlXG4gICAgc2V0KGRhdGEsICdjYXRlZ29yeScsIGRhdGEudHlwZSk7XG5cbiAgICBjb25zdCB2aWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLm5vZGVUZW1wbGF0ZSgpLCB7XG4gICAgICAkaW1wbGljaXQ6IGRhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBub2RlRWxlbWVudCA9IHRoaXMuZDMuc2VsZWN0KHRoaXMudHJlZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQpLnNlbGVjdChgW25vZGU9XCJub2RlLSR7ZGF0YS5pZH1cIl1gKTtcbiAgICBjb25zdCBlbGVtZW50ID0gbm9kZUVsZW1lbnQubm9kZSgpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh2aWV3UmVmLnJvb3ROb2Rlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGV4cGFuc2lvbiBzdGF0ZSBvZiBhIG5vZGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIG5vZGUgZGF0YS5cbiAgICogQHBhcmFtIGVsIC0gVGhlIEhUTUwgZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIG5vZGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgdG9nZ2xlTm9kZShkYXRhOiBBWE1Pcmdhbml6YXRpb25Ob2RlLCBlbDogSFRNTERpdkVsZW1lbnQpIHtcbiAgICBkYXRhLmlzRXhwYW5kZWQgPSBkYXRhLmlzRXhwYW5kZWQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogIWRhdGEuaXNFeHBhbmRlZDtcbiAgICB0aGlzLmNyZWF0ZUNoYXJ0KHRoaXMudHJlZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY2hhcnRTZXJ2aWNlLnJvb3ROb2RlKCkpO1xuICAgIC8vIGVsLnNjcm9sbEludG9WaWV3KHtcbiAgICAvLyAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAvLyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGNoYXJ0IGZyb20gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBAcGFyYW0gZWwgLSBUaGUgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyQ2hhcnQoZWw6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kMykge1xuICAgICAgdGhpcy5kMy5zZWxlY3QoZWwpLnNlbGVjdCgnc3ZnJykucmVtb3ZlKCk7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKSB7XG4gICAgaWYgKHRoaXMuZDMpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLmxvYWQoKTtcbiAgICAgIHRoaXMuY3JlYXRlQ2hhcnQodGhpcy50cmVlQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudCwgdGhpcy5jaGFydFNlcnZpY2Uucm9vdE5vZGUoKSk7XG4gICAgfVxuICB9XG5cbiAgLy8jcmVnaW9uIENvbnRleHQgTWVudVxuXG4gIC8vIHByb3RlY3RlZCBhc3luYyBoYW5kbGVDb250ZXh0TWVudU9uT3BlbmluZyhlOiBBWENvbnRleHRNZW51T3BlbmluZ0V2ZW50KSB7XG4gIC8vICAgY29uc3Qgbm9kZSA9IGdldChlLnRhcmdldEVsZW1lbnQsICdfX2RhdGFfXy5kYXRhJykgYXMgYW55IGFzIEFYTU9yZ2FuaXphdGlvbk5vZGU7XG4gIC8vICAgY29uc3QgYWxsb3dlZEFkZEl0ZW1zID0gYXdhaXQgdGhpcy5jaGFydFNlcnZpY2UuZ2V0QWxsb3dlZEFkZE1lbnVJdGVtcyhub2RlKTtcbiAgLy8gICBjb25zdCBhbGxvd0RlbGV0ZSA9IG5vZGUudHlwZSAhPSBBWE1Pcmdhbml6YXRpb25Ob2RlVHlwZS5Db21wYW55O1xuICAvLyAgIGNvbnN0IGlzUGFzdGVBdmFpbGFibGUgPSBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5pc1Bhc3RlQXZhaWxhYmxlKCk7XG4gIC8vICAgY29uc3QgYWxsb3dQYXN0ZSA9IGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLmFsbG93UGFzdGUobm9kZSk7XG4gIC8vICAgLy9cbiAgLy8gICBpZiAoYWxsb3dlZEFkZEl0ZW1zLmxlbmd0aCkge1xuICAvLyAgICAgZS5pdGVtcy5wdXNoKHtcbiAgLy8gICAgICAgdGV4dDogJ0FkZCBOZXcnLFxuICAvLyAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGx1cycsXG4gIC8vICAgICAgIGl0ZW1zOiBhbGxvd2VkQWRkSXRlbXMsXG4gIC8vICAgICAgIGJyZWFrOiBhbGxvd0RlbGV0ZSxcbiAgLy8gICAgIH0pO1xuICAvLyAgIH1cbiAgLy8gICAvL1xuICAvLyAgIGlmIChhbGxvd0RlbGV0ZSkge1xuICAvLyAgICAgZS5pdGVtcy5wdXNoKHtcbiAgLy8gICAgICAgbmFtZTogJ2N1dCcsXG4gIC8vICAgICAgIHRleHQ6ICdDdXQnLFxuICAvLyAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtY3V0JyxcbiAgLy8gICAgICAgZGF0YTogbm9kZSxcbiAgLy8gICAgIH0pO1xuICAvLyAgICAgZS5pdGVtcy5wdXNoKHtcbiAgLy8gICAgICAgbmFtZTogJ2NvcHknLFxuICAvLyAgICAgICB0ZXh0OiAnQ29weScsXG4gIC8vICAgICAgIGljb246ICdmYS1saWdodCBmYS1jb3B5JyxcbiAgLy8gICAgICAgZGF0YTogbm9kZSxcbiAgLy8gICAgICAgYnJlYWs6ICFpc1Bhc3RlQXZhaWxhYmxlLFxuICAvLyAgICAgfSk7XG4gIC8vICAgfVxuICAvLyAgIGlmIChpc1Bhc3RlQXZhaWxhYmxlKSB7XG4gIC8vICAgICBlLml0ZW1zLnB1c2goe1xuICAvLyAgICAgICBuYW1lOiAncGFzdGUnLFxuICAvLyAgICAgICB0ZXh0OiAnUGFzdGUnLFxuICAvLyAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGFzdGUnLFxuICAvLyAgICAgICBkYXRhOiBub2RlLFxuICAvLyAgICAgICBicmVhazogdHJ1ZSxcbiAgLy8gICAgICAgZGlzYWJsZWQ6ICFhbGxvd1Bhc3RlLFxuICAvLyAgICAgfSk7XG4gIC8vICAgfVxuICAvLyAgIC8vXG4gIC8vICAgaWYgKGFsbG93RGVsZXRlKSB7XG4gIC8vICAgICBlLml0ZW1zLnB1c2goe1xuICAvLyAgICAgICBuYW1lOiAncmVtb3ZlJyxcbiAgLy8gICAgICAgdGV4dDogJ1JlbW92ZScsXG4gIC8vICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgLy8gICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoLWNhbicsXG4gIC8vICAgICAgIGRhdGE6IG5vZGUsXG4gIC8vICAgICB9KTtcbiAgLy8gICB9XG4gIC8vICAgLy9cbiAgLy8gICBpZiAoZS5pdGVtcy5sZW5ndGggPT0gMCkge1xuICAvLyAgICAgZS5jYW5jZWxlZCA9IHRydWU7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUNvbnRleHRNZW51SXRlbUNsaWNrKGU6IEFYQ29udGV4dE1lbnVJdGVtc0NsaWNrRXZlbnQpIHtcblxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLyoqXG4gICAqIFByaW50cyB0aGUgb3JnYW5pemF0aW9uYWwgY2hhcnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgcHJpbnRDaGFydCgpIHtcbiAgICBsZXQgW3BhblgsIHBhblksIHBhblpvb21MZXZlbF0gPSBbdGhpcy5wYW5YKCksIHRoaXMucGFuWSgpLCB0aGlzLnBhblpvb21MZXZlbCgpXTtcbiAgICB0aGlzLnBhblguc2V0KDApLCB0aGlzLnBhblkuc2V0KDApLCB0aGlzLnBhblpvb21MZXZlbC5zZXQoMTAwKTtcbiAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5wcmludENoYXJ0KHRoaXMudHJlZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucGFuWC5zZXQocGFuWCksIHRoaXMucGFuWS5zZXQocGFuWSksIHRoaXMucGFuWm9vbUxldmVsLnNldChwYW5ab29tTGV2ZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG5vZGUgY29sb3JzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb2xvci5cbiAgICogQHBhcmFtIGNvbG9yIC0gVGhlIGNvbG9yIHRvIHVzZSBmb3IgdGhlIG5vZGUuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBub2RlJ3MgYmFja2dyb3VuZCwgdGV4dCwgYW5kIGJvcmRlciBjb2xvcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Tm9kZUNvbG9ycyhjb2xvcjogc3RyaW5nKSB7XG4gICAgaWYgKGNvbG9yLmluY2x1ZGVzKCdzdXJmYWNlJykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLW5vZGUtYmctY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLSR7Y29sb3J9KWAsXG4gICAgICAgICctLW5vZGUtdGV4dC1jb2xvcic6IGB2YXIoLS1heC1zeXMtY29sb3Itb24tJHtjb2xvcn0pYCxcbiAgICAgICAgJy0tbm9kZS1ib3JkZXItY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLWJvcmRlci0ke2NvbG9yfSlgLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICctLW5vZGUtYmctY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLSR7Y29sb3J9LXN1cmZhY2UpYCxcbiAgICAgICctLW5vZGUtdGV4dC1jb2xvcic6IGB2YXIoLS1heC1zeXMtY29sb3Itb24tJHtjb2xvcn0tc3VyZmFjZSlgLFxuICAgICAgJy0tbm9kZS1ib3JkZXItY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLWJvcmRlci0ke2NvbG9yfS1zdXJmYWNlKWAsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVWYXIob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IEFYTU9yZ0NoYXJ0Q2F0ZWdvcnkpIHtcbiAgICBvbGRWYWx1ZS5jYXQgPSBuZXdWYWx1ZTtcbiAgfVxuXG5cblxuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlVGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LmNvbXBvbmVudHMuY2hhcnQudGl0bGUnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VEZXNjcmlwdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bvcmdhbml6YXRpb24tbWFuYWdlbWVudDpvcmdhbml6YXRpb24tY2hhcnQuY29tcG9uZW50cy5jaGFydC5kZXNjcmlwdGlvbicpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIC4uLmdldEFjdGlvbkJ1dHRvbigncHJpbnQnKSxcbiAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgIG5hbWU6ICdwcmludCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5nZXRBY3Rpb25CdXR0b24oJ3JlZnJlc2gnKSxcbiAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgIG5hbWU6ICdyZWZyZXNoJyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICBdO1xuICB9XG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VCcmVhZGNydW1icygpOiBQcm9taXNlPEFYUEJyZWFkY3J1bWJJdGVtW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6bW9kdWxlLm1lbnVzLnJvb3QudGl0bGUnKVxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZShjb21tYW5kOiBBWFBFeGVjdXRlQ29tbWFuZCkge1xuICAgIGlmIChjb21tYW5kLm5hbWUgPT0gJ3ByaW50Jykge1xuICAgICAgYXdhaXQgdGhpcy5wcmludENoYXJ0KCk7XG4gICAgfVxuICAgIGlmIChjb21tYW5kLm5hbWUgPT0gJ3JlZnJlc2gnKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5nZW5lcmF0ZSgpO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckNoYXJ0KHRoaXMudHJlZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iLCI8YXhwLXBhZ2UtbGF5b3V0ICp0cmFuc2xhdGU9XCJsZXQgdFwiPlxuICA8YXhwLXBhZ2UtY29udGVudCBjbGFzcz1cImF4LW92ZXJmbG93LWhpZGRlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1oLVtjYWxjKDEwMHZoLTI5MHB4KV1cIiAjcGFyZW50IGlkPVwicGFyZW50XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNjaGFydFxuICAgICAgICBheFBhblZpZXdcbiAgICAgICAgWyhwYW5YKV09XCJwYW5YXCJcbiAgICAgICAgWyhwYW5ZKV09XCJwYW5ZXCJcbiAgICAgICAgW2ZyZWVNb2RlXT1cInRydWVcIlxuICAgICAgICBbKHpvb20pXT1cInBhblpvb21MZXZlbFwiXG4gICAgICAgIFtmaXRDb250ZW50XT1cInRydWVcIlxuICAgICAgICB3cmFwcGVyQ2xhc3Nlcz1cImhcIlxuICAgICAgICBjbGFzcz1cImF4LWxpZ2h0XCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDwhLS0gPGF4LWNvbnRleHQtbWVudVxuICAgICAgICBbdGFyZ2V0XT1cIicuYXhwLWNoYXJ0LW5vZGUnXCJcbiAgICAgICAgW29yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIlxuICAgICAgICBbY2xvc2VPbl09XCInbGVhdmUnXCJcbiAgICAgICAgKG9uSXRlbUNsaWNrKT1cImhhbmRsZUNvbnRleHRNZW51SXRlbUNsaWNrKCRldmVudClcIlxuICAgICAgICAob25PcGVuaW5nKT1cImhhbmRsZUNvbnRleHRNZW51T25PcGVuaW5nKCRldmVudClcIlxuICAgICAgPlxuICAgICAgPC9heC1jb250ZXh0LW1lbnU+IC0tPlxuICAgIDwvZGl2PlxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG4gIDxheHAtcGFnZS1mb290ZXI+XG4gICAgPGF4cC1sYXlvdXQtcHJlZml4PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTEgYXgtbGlnaHQgYXgtZmxleC13cmFwIGF4LWp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIEBsZXQgdiA9IHtjYXQ6J0NvbXBhbnknfTsgQGZvciAoaXRlbSBvZiBub2RlVHlwZXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXhwLW5vZGUtaGludFwiIFtzdHlsZV09XCJnZXROb2RlQ29sb3JzKGl0ZW0uY29sb3IpXCIgW2NsYXNzLmF4LW1zLTRdPVwidi5jYXQhPWl0ZW0uY2F0ZWdvcnlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiLS1iYWRnZVwiPjwvZGl2PlxuICAgICAgICAgIHt7aXRlbS50aXRsZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7e3VwZGF0ZVZhcih2LCBpdGVtLmNhdGVnb3J5KX19IH1cbiAgICAgIDwvZGl2PlxuICAgIDwvYXhwLWxheW91dC1wcmVmaXg+XG4gICAgPGF4cC1sYXlvdXQtc3VmZml4PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTJcIj5cbiAgICAgICAgPGF4LWJ1dHRvbiAob25DbGljayk9XCJ6b29tT3V0KClcIj5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLW1pbnVzXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxheC1idXR0b24gW3RleHRdPVwicGFuWm9vbUxldmVsKClcIiAob25DbGljayk9XCJ6b29tUmVzZXQoKVwiPjwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cInpvb21JbigpXCI+XG4gICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1hZGRcIj4gPC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiAob25DbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIj5cbiAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWRcIiBbY2xhc3NdPVwiaXNGdWxsc2NyZWVuKCk/ICdmYS1jb21wcmVzcycgOiAnZmEtZXhwYW5kJ1wiPjwvaT5cbiAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9heHAtbGF5b3V0LXN1ZmZpeD5cbiAgPC9heHAtcGFnZS1mb290ZXI+XG48L2F4cC1wYWdlLWxheW91dD5cblxuPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGUgbGV0LWRhdGE+XG4gIDxkaXY+XG4gICAgQHN3aXRjaCAoZGF0YS5jYXRlZ29yeSkge1xuICAgIDwhLS0gQ29tcGFueSAtLT5cbiAgICBAY2FzZSAoTm9kZVR5cGVzLkNvbXBhbnkpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2VuZXJhbFRlbXBsYXRlOyBjb250ZXh0OiB7ICBkYXRhLGNvbG9yOidwcmltYXJ5JyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIDwhLS0gTG9jYXRpb24gLS0+XG4gICAgQGNhc2UgKE5vZGVUeXBlcy5Db3VudHJ5KSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdlbmVyYWxUZW1wbGF0ZTsgY29udGV4dDogeyAgZGF0YSxjb2xvcjonYWNjZW50MScgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH0gQGNhc2UgKE5vZGVUeXBlcy5TdGF0ZSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDEnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlIChOb2RlVHlwZXMuQ2l0eSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDEnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgPCEtLSBCdXNpbmVzc1VuaXQgLS0+XG4gICAgQGNhc2UgKE5vZGVUeXBlcy5EaXZpc2lvbikge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDInIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlIChOb2RlVHlwZXMuRGVwYXJ0bWVudCkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDInIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlIChOb2RlVHlwZXMuQnJhbmNoKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdlbmVyYWxUZW1wbGF0ZTsgY29udGV4dDogeyAgZGF0YSxjb2xvcjonYWNjZW50MicgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICA8IS0tIFJvbGUgLS0+XG4gICAgQGNhc2UgKE5vZGVUeXBlcy5Qb3NpdGlvbikge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDMnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgPCEtLSBFbXBsb3llZSAtLT5cbiAgICBAY2FzZSAoTm9kZVR5cGVzLkVtcGxveWVlKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdlbmVyYWxUZW1wbGF0ZTsgY29udGV4dDogeyAgZGF0YSxjb2xvcjonc3VyZmFjZScgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH0gfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2VuZXJhbCBOb2RlIFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWNvbG9yPVwiY29sb3JcIj5cbiAgPGRpdiAjbm9kZSBjbGFzcz1cIi0tbm9kZS1jb250YWluZXJcIiBbc3R5bGVdPVwiZ2V0Tm9kZUNvbG9ycyhjb2xvcilcIj5cbiAgICA8ZGl2IGNsYXNzPVwiLS1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCItLWhlYWRpbmctY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCItLWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiLS1pY29uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXhsIGZhLWZ3XCIgW2NsYXNzXT1cImRhdGEuaWNvblwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiLS10aXRsZXNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiLS10aXRsZVwiIFt0aXRsZV09XCJkYXRhLnRpdGxlXCI+e3tkYXRhLnRpdGxlfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYoZGF0YS5zdWJ0aXRsZSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCItLXN1Yi10aXRsZVwiIFt0aXRsZV09XCJkYXRhLnN1YnRpdGxlXCI+e3tkYXRhLnN1YnRpdGxlfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmKGRhdGE/LmNoaWxkcmVuPy5sZW5ndGgpe1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCItLWJhZGdlXCI+XG4gICAgICAgICAgICA8c3Bhbj57e2RhdGE/LmNoaWxkcmVuPy5sZW5ndGggPz8gMH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZihkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiLS1ib2R5LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiLS1kZXNjcmlwdGlvblwiIFtjbGFzcy5heC1wYi0zXT1cImRhdGEuY2hpbGRyZW4gJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHNwYW4+e3tkYXRhLmRlc2NyaXB0aW9ufX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB9IEBpZihkYXRhLmNoaWxkcmVuICYmIGRhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICA8ZGl2IGNsYXNzPVwiLS10b2dnbGVcIj5cbiAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXhzIGF4LXJvdW5kZWQtc21cIiAob25DbGljayk9XCJ0b2dnbGVOb2RlKGRhdGEsbm9kZSlcIj5cbiAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWRcIiBbY2xhc3NdPVwiZGF0YS5pc0V4cGFuZGVkID09PSBmYWxzZSA/ICdmYS1jaGV2cm9uLWRvd24nIDogJ2ZhLWNoZXZyb24tdXAnXCI+PC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-modules-organization-management-org-chart.page-iFH7kDtM.mjs","sources":["../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart.service.js","../tmp-esm2022/organization-management/lib/features/organization-chart/org-chart.page.js"],"sourcesContent":["import { AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExportService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { AXMOrganizationManagementChartEntityService } from '../../entities';\nimport * as i0 from \"@angular/core\";\nexport class AXMOrgChartService {\n constructor() {\n // Employee moved to HCM; resolve via runtime query mapping instead of direct service\n this.chartService = inject(AXMOrganizationManagementChartEntityService);\n this.loadingDialog = inject(AXLoadingDialogService);\n this.exportService = inject(AXPExportService);\n this.translationService = inject(AXTranslationService);\n this.commandService = inject(AXPCommandService);\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this._rootNode = signal({ id: AXPDataGenerator.uuid(), title: 'Company' }, ...(ngDevMode ? [{ debugName: \"_rootNode\" }] : []));\n this.rootNode = this._rootNode.asReadonly();\n }\n async load() {\n const first = (await this.chartService.query({\n skip: 0,\n take: 1,\n sort: [{ field: 'version', dir: 'desc' }],\n })).items[0];\n //\n if (first && first.data) {\n const data = first.data;\n this._rootNode.set(data);\n }\n else {\n await this.generate();\n await this.load();\n }\n }\n async generate() {\n const dialogResult = await this.showGenerateDialog();\n if (dialogResult.cancelled) {\n return;\n }\n const input = dialogResult.input || {\n includeEmployees: true,\n preferPrimary: true,\n mode: 'structure',\n };\n // Prefer generating a fresh chart via mock command when available\n await this.commandService.execute('OrganizationManagement.OrgChart:Generate', input);\n }\n /**\n * Show dialog to get OrgChart generation parameters from user\n */\n async showGenerateDialog() {\n const modeLabel = await this.translationService.translateAsync('@organization-management:organization-chart.components.generate-dialog.fields.mode.label');\n const includeEmployeesLabel = await this.translationService.translateAsync('@organization-management:organization-chart.components.generate-dialog.fields.include-employees.label');\n const preferPrimaryLabel = await this.translationService.translateAsync('@organization-management:organization-chart.components.generate-dialog.fields.prefer-primary.label');\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog(dialog => {\n dialog\n .setTitle('@organization-management:organization-chart.components.generate-dialog.title')\n .setMessage('@organization-management:organization-chart.components.generate-dialog.message')\n .setContext({\n mode: 'structure',\n includeEmployees: true,\n preferPrimary: false\n })\n .content(flex => {\n flex.formField(modeLabel, (field) => {\n field.path('mode');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'structure', text: '@organization-management:organization-chart.options.mode.structure' },\n { value: 'location', text: '@organization-management:organization-chart.options.mode.location' },\n { value: 'reporting', text: '@organization-management:organization-chart.options.mode.reporting' }\n ]\n });\n })\n .formField(includeEmployeesLabel, (field) => {\n field.path('includeEmployees');\n field.toggleSwitch();\n })\n .formField(preferPrimaryLabel, (field) => {\n field.path('preferPrimary');\n field.toggleSwitch();\n });\n })\n .setActions(actions => {\n actions\n .cancel()\n .submit('@general:generate');\n });\n })\n .show();\n // Check if dialog was cancelled (result is null/undefined or has cancelled property)\n const formData = dialogRef.context();\n const action = dialogRef.action();\n dialogRef.close();\n if (!formData || action === 'cancel') {\n return { cancelled: true };\n }\n return {\n cancelled: false,\n input: formData\n };\n }\n //#region ---- Printing ----\n async printChart(element) {\n const d = this.loadingDialog.show({\n title: 'Printing Organization Chart...',\n mode: 'determinate',\n progressColor: 'primary',\n progressValue: 0,\n status: '0/10',\n text: 'Initializing print process...',\n buttons: [\n { text: 'Cancel', color: 'danger', onClick: () => d.close() }\n ],\n });\n try {\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.preparing-document'), 10, '1/10');\n const chartElement = element;\n const { originalStyles, modifiedStyles } = this.expandChart(chartElement);\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.rendering-chart-image'), 25, '2.5/10');\n const blob = await this.exportService.generateBlobFromElement(chartElement, {\n popup: true,\n filter: (node) => !(node instanceof Element && node.classList.contains('--toggle')),\n bgcolor: 'transparent',\n scale: 2,\n quality: 1,\n height: Number.parseInt(modifiedStyles.modifiedHeight),\n width: Number.parseInt(modifiedStyles.modifiedWidth),\n });\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.finalizing-image-processing'), 50, '5/10');\n this.restoreChartStyles(chartElement, originalStyles);\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.downloading-image'), 75, '7.5/10');\n this.exportService.download(blob, 'org-chart.png');\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.process-complete'), 100, '10/10');\n setTimeout(() => d.close(), 1500);\n }\n catch (err) {\n console.error('Error capturing chart:', err);\n await this.updateStep(d, await this.translate('@organization-management:organization-chart.states.failed-to-generate-chart-image'), 100, 'Error', 'danger');\n d.close();\n }\n }\n expandChart(chartElement) {\n const originalStyles = {\n originalOverflow: chartElement.style.overflow,\n originalWidth: chartElement.style.width,\n originalHeight: chartElement.style.height,\n };\n const modifiedStyles = {\n modifiedOverflow: 'visible',\n modifiedWidth: `${chartElement.scrollWidth}px`,\n modifiedHeight: `${chartElement.scrollHeight}px`,\n };\n chartElement.style.overflow = modifiedStyles.modifiedOverflow;\n chartElement.style.width = modifiedStyles.modifiedWidth;\n chartElement.style.height = modifiedStyles.modifiedHeight;\n return { originalStyles, modifiedStyles };\n }\n restoreChartStyles(chartElement, originalStyles) {\n chartElement.style.overflow = originalStyles.originalOverflow;\n chartElement.style.width = originalStyles.originalWidth;\n chartElement.style.height = originalStyles.originalHeight;\n }\n async updateStep(dialog, text, progress, status, color = 'primary') {\n return new Promise((resolve) => {\n dialog.setProgressColor(color);\n dialog.setProgressText(text);\n dialog.setProgressValue(progress);\n dialog.setProgressStatus(status);\n resolve();\n });\n }\n async translate(key) {\n return (await this.translationService.translateAsync(key)) + '...';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNELE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQWdCN0UsTUFBTSxPQUFPLGtCQUFrQjtJQUQvQjtRQUdFLHFGQUFxRjtRQUM3RSxpQkFBWSxHQUFHLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBRW5FLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0Msa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNsRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFH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Q0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFXO1FBQ2pDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDckUsQ0FBQzsrR0EvTVUsa0JBQWtCO21IQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFN0eWxlQ29sb3JUeXBlIH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYTG9hZGluZ0RpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZy1kaWFsb2cnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQRXhwb3J0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUENvbW1hbmRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlcic7XG5cbmltcG9ydCB7IEFYUERhdGFHZW5lcmF0b3IgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQVhNT3JnYW5pemF0aW9uTm9kZSB9IGZyb20gJy4vb3JnLWNoYXJ0LnR5cGUnO1xuaW1wb3J0IHsgQVhNT3JnYW5pemF0aW9uTWFuYWdlbWVudENoYXJ0RW50aXR5U2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzJztcblxuZXhwb3J0IHR5cGUgT3JnQ2hhcnRNb2RlID0gJ2xvY2F0aW9uJyB8ICdzdHJ1Y3R1cmUnIHwgJ3JlcG9ydGluZyc7XG5cbmV4cG9ydCB0eXBlIE9yZ0NoYXJ0R2VuZXJhdGVJbnB1dCA9IHtcbiAgbW9kZT86IE9yZ0NoYXJ0TW9kZTtcbiAgaW5jbHVkZUVtcGxveWVlcz86IGJvb2xlYW47XG4gIHByZWZlclByaW1hcnk/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBPcmdDaGFydERpYWxvZ1Jlc3VsdCB7XG4gIGNhbmNlbGxlZDogYm9vbGVhbjtcbiAgaW5wdXQ/OiBPcmdDaGFydEdlbmVyYXRlSW5wdXQ7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWE1PcmdDaGFydFNlcnZpY2Uge1xuXG4gIC8vIEVtcGxveWVlIG1vdmVkIHRvIEhDTTsgcmVzb2x2ZSB2aWEgcnVudGltZSBxdWVyeSBtYXBwaW5nIGluc3RlYWQgb2YgZGlyZWN0IHNlcnZpY2VcbiAgcHJpdmF0ZSBjaGFydFNlcnZpY2UgPSBpbmplY3QoQVhNT3JnYW5pemF0aW9uTWFuYWdlbWVudENoYXJ0RW50aXR5U2VydmljZSk7XG5cbiAgcHJpdmF0ZSBsb2FkaW5nRGlhbG9nID0gaW5qZWN0KEFYTG9hZGluZ0RpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIGV4cG9ydFNlcnZpY2UgPSBpbmplY3QoQVhQRXhwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjb21tYW5kU2VydmljZSA9IGluamVjdChBWFBDb21tYW5kU2VydmljZSk7XG4gIHByaXZhdGUgbGF5b3V0QnVpbGRlciA9IGluamVjdChBWFBMYXlvdXRCdWlsZGVyU2VydmljZSk7XG5cblxuICBwcml2YXRlIHJlYWRvbmx5IF9yb290Tm9kZSA9IHNpZ25hbDxBWE1Pcmdhbml6YXRpb25Ob2RlPih7IGlkOiBBWFBEYXRhR2VuZXJhdG9yLnV1aWQoKSwgdGl0bGU6ICdDb21wYW55JyB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcm9vdE5vZGUgPSB0aGlzLl9yb290Tm9kZS5hc1JlYWRvbmx5KCk7XG5cblxuICBwdWJsaWMgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaXJzdCA9IChcbiAgICAgIGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgICAgc2tpcDogMCxcbiAgICAgICAgdGFrZTogMSxcbiAgICAgICAgc29ydDogW3sgZmllbGQ6ICd2ZXJzaW9uJywgZGlyOiAnZGVzYycgfV0sXG4gICAgICB9KVxuICAgICkuaXRlbXNbMF07XG4gICAgLy9cbiAgICBpZiAoZmlyc3QgJiYgZmlyc3QuZGF0YSkge1xuICAgICAgY29uc3QgZGF0YSA9IGZpcnN0LmRhdGEgYXMgQVhNT3JnYW5pemF0aW9uTm9kZTtcbiAgICAgIHRoaXMuX3Jvb3ROb2RlLnNldChkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZSgpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRpYWxvZ1Jlc3VsdCA9IGF3YWl0IHRoaXMuc2hvd0dlbmVyYXRlRGlhbG9nKCk7XG5cbiAgICBpZiAoZGlhbG9nUmVzdWx0LmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZGlhbG9nUmVzdWx0LmlucHV0IHx8IHtcbiAgICAgIGluY2x1ZGVFbXBsb3llZXM6IHRydWUsXG4gICAgICBwcmVmZXJQcmltYXJ5OiB0cnVlLFxuICAgICAgbW9kZTogJ3N0cnVjdHVyZScsXG4gICAgfSBhcyBPcmdDaGFydEdlbmVyYXRlSW5wdXQ7XG5cbiAgICAvLyBQcmVmZXIgZ2VuZXJhdGluZyBhIGZyZXNoIGNoYXJ0IHZpYSBtb2NrIGNvbW1hbmQgd2hlbiBhdmFpbGFibGVcbiAgICBhd2FpdCB0aGlzLmNvbW1hbmRTZXJ2aWNlLmV4ZWN1dGUoJ09yZ2FuaXphdGlvbk1hbmFnZW1lbnQuT3JnQ2hhcnQ6R2VuZXJhdGUnLCBpbnB1dCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBkaWFsb2cgdG8gZ2V0IE9yZ0NoYXJ0IGdlbmVyYXRpb24gcGFyYW1ldGVycyBmcm9tIHVzZXJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2hvd0dlbmVyYXRlRGlhbG9nKCk6IFByb21pc2U8T3JnQ2hhcnREaWFsb2dSZXN1bHQ+IHtcbiAgICBjb25zdCBtb2RlTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQG9yZ2FuaXphdGlvbi1tYW5hZ2VtZW50Om9yZ2FuaXphdGlvbi1jaGFydC5jb21wb25lbnRzLmdlbmVyYXRlLWRpYWxvZy5maWVsZHMubW9kZS5sYWJlbCcpO1xuICAgIGNvbnN0IGluY2x1ZGVFbXBsb3llZXNMYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LmNvbXBvbmVudHMuZ2VuZXJhdGUtZGlhbG9nLmZpZWxkcy5pbmNsdWRlLWVtcGxveWVlcy5sYWJlbCcpO1xuICAgIGNvbnN0IHByZWZlclByaW1hcnlMYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LmNvbXBvbmVudHMuZ2VuZXJhdGUtZGlhbG9nLmZpZWxkcy5wcmVmZXItcHJpbWFyeS5sYWJlbCcpO1xuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gYXdhaXQgdGhpcy5sYXlvdXRCdWlsZGVyXG4gICAgICAuY3JlYXRlKClcbiAgICAgIC5kaWFsb2coZGlhbG9nID0+IHtcbiAgICAgICAgZGlhbG9nXG4gICAgICAgICAgLnNldFRpdGxlKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LmNvbXBvbmVudHMuZ2VuZXJhdGUtZGlhbG9nLnRpdGxlJylcbiAgICAgICAgICAuc2V0TWVzc2FnZSgnQG9yZ2FuaXphdGlvbi1tYW5hZ2VtZW50Om9yZ2FuaXphdGlvbi1jaGFydC5jb21wb25lbnRzLmdlbmVyYXRlLWRpYWxvZy5tZXNzYWdlJylcbiAgICAgICAgICAuc2V0Q29udGV4dCh7XG4gICAgICAgICAgICBtb2RlOiAnc3RydWN0dXJlJyBhcyBPcmdDaGFydE1vZGUsXG4gICAgICAgICAgICBpbmNsdWRlRW1wbG95ZWVzOiB0cnVlLFxuICAgICAgICAgICAgcHJlZmVyUHJpbWFyeTogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jb250ZW50KGZsZXggPT4ge1xuICAgICAgICAgICAgZmxleC5mb3JtRmllbGQobW9kZUxhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgZmllbGQucGF0aCgnbW9kZScpO1xuICAgICAgICAgICAgICBmaWVsZC5zZWxlY3Rpb25MaXN0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIHRleHRGaWVsZDogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IFtcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdzdHJ1Y3R1cmUnLCB0ZXh0OiAnQG9yZ2FuaXphdGlvbi1tYW5hZ2VtZW50Om9yZ2FuaXphdGlvbi1jaGFydC5vcHRpb25zLm1vZGUuc3RydWN0dXJlJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ2xvY2F0aW9uJywgdGV4dDogJ0Bvcmdhbml6YXRpb24tbWFuYWdlbWVudDpvcmdhbml6YXRpb24tY2hhcnQub3B0aW9ucy5tb2RlLmxvY2F0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ3JlcG9ydGluZycsIHRleHQ6ICdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0Lm9wdGlvbnMubW9kZS5yZXBvcnRpbmcnIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZChpbmNsdWRlRW1wbG95ZWVzTGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2luY2x1ZGVFbXBsb3llZXMnKTtcbiAgICAgICAgICAgICAgICBmaWVsZC50b2dnbGVTd2l0Y2goKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZChwcmVmZXJQcmltYXJ5TGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3ByZWZlclByaW1hcnknKTtcbiAgICAgICAgICAgICAgICBmaWVsZC50b2dnbGVTd2l0Y2goKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2V0QWN0aW9ucyhhY3Rpb25zID0+IHtcbiAgICAgICAgICAgIGFjdGlvbnNcbiAgICAgICAgICAgICAgLmNhbmNlbCgpXG4gICAgICAgICAgICAgIC5zdWJtaXQoJ0BnZW5lcmFsOmdlbmVyYXRlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnNob3coKTtcblxuICAgIC8vIENoZWNrIGlmIGRpYWxvZyB3YXMgY2FuY2VsbGVkIChyZXN1bHQgaXMgbnVsbC91bmRlZmluZWQgb3IgaGFzIGNhbmNlbGxlZCBwcm9wZXJ0eSlcbiAgICBjb25zdCBmb3JtRGF0YSA9IGRpYWxvZ1JlZi5jb250ZXh0KCk7XG4gICAgY29uc3QgYWN0aW9uID0gZGlhbG9nUmVmLmFjdGlvbigpO1xuXG4gICAgZGlhbG9nUmVmLmNsb3NlKCk7XG5cbiAgICBpZiAoIWZvcm1EYXRhIHx8IGFjdGlvbiA9PT0gJ2NhbmNlbCcpIHtcbiAgICAgIHJldHVybiB7IGNhbmNlbGxlZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgaW5wdXQ6IGZvcm1EYXRhIGFzIE9yZ0NoYXJ0R2VuZXJhdGVJbnB1dFxuICAgIH07XG4gIH1cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaW50aW5nICAgLS0tLVxuXG4gIGFzeW5jIHByaW50Q2hhcnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkID0gdGhpcy5sb2FkaW5nRGlhbG9nLnNob3coe1xuICAgICAgdGl0bGU6ICdQcmludGluZyBPcmdhbml6YXRpb24gQ2hhcnQuLi4nLFxuICAgICAgbW9kZTogJ2RldGVybWluYXRlJyxcbiAgICAgIHByb2dyZXNzQ29sb3I6ICdwcmltYXJ5JyxcbiAgICAgIHByb2dyZXNzVmFsdWU6IDAsXG4gICAgICBzdGF0dXM6ICcwLzEwJyxcbiAgICAgIHRleHQ6ICdJbml0aWFsaXppbmcgcHJpbnQgcHJvY2Vzcy4uLicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgdGV4dDogJ0NhbmNlbCcsIGNvbG9yOiAnZGFuZ2VyJywgb25DbGljazogKCkgPT4gZC5jbG9zZSgpIH1cbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdGVwKGQsIGF3YWl0IHRoaXMudHJhbnNsYXRlKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LnN0YXRlcy5wcmVwYXJpbmctZG9jdW1lbnQnKSwgMTAsICcxLzEwJyk7XG4gICAgICBjb25zdCBjaGFydEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgY29uc3QgeyBvcmlnaW5hbFN0eWxlcywgbW9kaWZpZWRTdHlsZXMgfSA9IHRoaXMuZXhwYW5kQ2hhcnQoY2hhcnRFbGVtZW50KTtcblxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdGVwKGQsIGF3YWl0IHRoaXMudHJhbnNsYXRlKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LnN0YXRlcy5yZW5kZXJpbmctY2hhcnQtaW1hZ2UnKSwgMjUsICcyLjUvMTAnKTtcbiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVCbG9iRnJvbUVsZW1lbnQoY2hhcnRFbGVtZW50LCB7XG4gICAgICAgIHBvcHVwOiB0cnVlLFxuICAgICAgICBmaWx0ZXI6IChub2RlOiBOb2RlKSA9PiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCctLXRvZ2dsZScpKSxcbiAgICAgICAgYmdjb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgIHF1YWxpdHk6IDEsXG4gICAgICAgIGhlaWdodDogTnVtYmVyLnBhcnNlSW50KG1vZGlmaWVkU3R5bGVzLm1vZGlmaWVkSGVpZ2h0KSxcbiAgICAgICAgd2lkdGg6IE51bWJlci5wYXJzZUludChtb2RpZmllZFN0eWxlcy5tb2RpZmllZFdpZHRoKSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0ZXAoZCwgYXdhaXQgdGhpcy50cmFuc2xhdGUoJ0Bvcmdhbml6YXRpb24tbWFuYWdlbWVudDpvcmdhbml6YXRpb24tY2hhcnQuc3RhdGVzLmZpbmFsaXppbmctaW1hZ2UtcHJvY2Vzc2luZycpLCA1MCwgJzUvMTAnKTtcbiAgICAgIHRoaXMucmVzdG9yZUNoYXJ0U3R5bGVzKGNoYXJ0RWxlbWVudCwgb3JpZ2luYWxTdHlsZXMpO1xuXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0ZXAoZCwgYXdhaXQgdGhpcy50cmFuc2xhdGUoJ0Bvcmdhbml6YXRpb24tbWFuYWdlbWVudDpvcmdhbml6YXRpb24tY2hhcnQuc3RhdGVzLmRvd25sb2FkaW5nLWltYWdlJyksIDc1LCAnNy41LzEwJyk7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZG93bmxvYWQoYmxvYiwgJ29yZy1jaGFydC5wbmcnKTtcblxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdGVwKGQsIGF3YWl0IHRoaXMudHJhbnNsYXRlKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LnN0YXRlcy5wcm9jZXNzLWNvbXBsZXRlJyksIDEwMCwgJzEwLzEwJyk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGQuY2xvc2UoKSwgMTUwMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjYXB0dXJpbmcgY2hhcnQ6JywgZXJyKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlU3RlcChkLCBhd2FpdCB0aGlzLnRyYW5zbGF0ZSgnQG9yZ2FuaXphdGlvbi1tYW5hZ2VtZW50Om9yZ2FuaXphdGlvbi1jaGFydC5zdGF0ZXMuZmFpbGVkLXRvLWdlbmVyYXRlLWNoYXJ0LWltYWdlJyksIDEwMCwgJ0Vycm9yJywgJ2RhbmdlcicpO1xuICAgICAgZC5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kQ2hhcnQoY2hhcnRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsU3R5bGVzID0ge1xuICAgICAgb3JpZ2luYWxPdmVyZmxvdzogY2hhcnRFbGVtZW50LnN0eWxlLm92ZXJmbG93LFxuICAgICAgb3JpZ2luYWxXaWR0aDogY2hhcnRFbGVtZW50LnN0eWxlLndpZHRoLFxuICAgICAgb3JpZ2luYWxIZWlnaHQ6IGNoYXJ0RWxlbWVudC5zdHlsZS5oZWlnaHQsXG4gICAgfTtcbiAgICBjb25zdCBtb2RpZmllZFN0eWxlcyA9IHtcbiAgICAgIG1vZGlmaWVkT3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgIG1vZGlmaWVkV2lkdGg6IGAke2NoYXJ0RWxlbWVudC5zY3JvbGxXaWR0aH1weGAsXG4gICAgICBtb2RpZmllZEhlaWdodDogYCR7Y2hhcnRFbGVtZW50LnNjcm9sbEhlaWdodH1weGAsXG4gICAgfTtcbiAgICBjaGFydEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBtb2RpZmllZFN0eWxlcy5tb2RpZmllZE92ZXJmbG93O1xuICAgIGNoYXJ0RWxlbWVudC5zdHlsZS53aWR0aCA9IG1vZGlmaWVkU3R5bGVzLm1vZGlmaWVkV2lkdGg7XG4gICAgY2hhcnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IG1vZGlmaWVkU3R5bGVzLm1vZGlmaWVkSGVpZ2h0O1xuICAgIHJldHVybiB7IG9yaWdpbmFsU3R5bGVzLCBtb2RpZmllZFN0eWxlcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlQ2hhcnRTdHlsZXMoXG4gICAgY2hhcnRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBvcmlnaW5hbFN0eWxlczogeyBvcmlnaW5hbE92ZXJmbG93OiBzdHJpbmc7IG9yaWdpbmFsV2lkdGg6IHN0cmluZzsgb3JpZ2luYWxIZWlnaHQ6IHN0cmluZyB9LFxuICApOiB2b2lkIHtcbiAgICBjaGFydEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbFN0eWxlcy5vcmlnaW5hbE92ZXJmbG93O1xuICAgIGNoYXJ0RWxlbWVudC5zdHlsZS53aWR0aCA9IG9yaWdpbmFsU3R5bGVzLm9yaWdpbmFsV2lkdGg7XG4gICAgY2hhcnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IG9yaWdpbmFsU3R5bGVzLm9yaWdpbmFsSGVpZ2h0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGVwKFxuICAgIGRpYWxvZzogYW55LFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBwcm9ncmVzczogbnVtYmVyLFxuICAgIHN0YXR1czogc3RyaW5nLFxuICAgIGNvbG9yOiBBWFN0eWxlQ29sb3JUeXBlID0gJ3ByaW1hcnknLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc0NvbG9yKGNvbG9yKTtcbiAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc1RleHQodGV4dCk7XG4gICAgICBkaWFsb2cuc2V0UHJvZ3Jlc3NWYWx1ZShwcm9ncmVzcyk7XG4gICAgICBkaWFsb2cuc2V0UHJvZ3Jlc3NTdGF0dXMoc3RhdHVzKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJhbnNsYXRlKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGtleSkpICsgJy4uLic7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxufVxuIl19","import { AXPanViewDirective } from '@acorex/cdk/pan-view';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXContextMenuComponent, AXMenuModule, } from '@acorex/components/menu';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, inject, NgZone, signal, viewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport set from 'lodash-es/set';\nimport { RootConfig } from '../../const';\nimport { AXMOrgChartService } from './org-chart.service';\nimport { AXMOrgChartCategory, AXMOrgChartNodeType } from './org-chart.type';\nimport { getActionButton } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/core/translation\";\nimport * as i4 from \"@acorex/components/decorators\";\n/**\n * Component for displaying and interacting with an organizational chart.\n */\nexport class AXMOrgChartPage extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n this.rootConfig = RootConfig;\n this.nodeTemplate = viewChild.required('nodeTemplate');\n this.treeContainer = viewChild.required('chart');\n this.parent = viewChild.required('parent');\n this.contextMenu = viewChild(AXContextMenuComponent, ...(ngDevMode ? [{ debugName: \"contextMenu\" }] : []));\n this.panView = viewChild(AXPanViewDirective, ...(ngDevMode ? [{ debugName: \"panView\" }] : []));\n this.ngzone = inject(NgZone);\n this.viewContainerRef = inject(ViewContainerRef);\n // printing is handled by service itself\n this.chartService = inject(AXMOrgChartService);\n this.NODE_STROKE_COLOR = 'rgba(var(--ax-sys-color-primary-400))';\n this.LINK_STROKE_WIDTH = 1;\n this.NodeTypes = AXMOrgChartNodeType;\n this.isFullscreen = signal(false, ...(ngDevMode ? [{ debugName: \"isFullscreen\" }] : []));\n this.panX = signal(0, ...(ngDevMode ? [{ debugName: \"panX\" }] : []));\n this.panY = signal(0, ...(ngDevMode ? [{ debugName: \"panY\" }] : []));\n this.panZoomLevel = signal(100, ...(ngDevMode ? [{ debugName: \"panZoomLevel\" }] : []));\n this.isChartRendered = false;\n this.nodeTypes = [\n { title: 'Company', color: 'primary', icon: 'fal fa-building', category: AXMOrgChartCategory.Company },\n { title: 'Location', color: 'accent1', icon: 'fal fa-globe', category: AXMOrgChartCategory.Location },\n { title: 'Business Unit', color: 'accent2', icon: 'fal fa-sitemap', category: AXMOrgChartCategory.BusinessUnit },\n { title: 'Position', color: 'accent3', icon: 'fal fa-user-tie', category: AXMOrgChartCategory.Position },\n { title: 'Employee', color: 'surface', icon: 'fal fa-address-card', category: AXMOrgChartCategory.Employee },\n ];\n this.#initialize = afterNextRender(async () => {\n this.d3 = await import('d3');\n await this.refresh();\n });\n }\n #initialize;\n /**\n * Zooms in the chart.\n */\n zoomIn() {\n this.panView()?.zoomIn();\n }\n /**\n * Zooms out the chart.\n */\n zoomOut() {\n this.panView()?.zoomOut();\n }\n /**\n * Resets the zoom level and pan position of the chart.\n */\n zoomReset() {\n this.panView()?.resetPosition();\n }\n /**\n * Toggles fullscreen mode for the chart.\n */\n toggleFullscreen() {\n if (this.isFullscreen()) {\n document.exitFullscreen();\n this.isFullscreen.set(false);\n }\n else {\n this.parent().nativeElement.requestFullscreen();\n this.isFullscreen.set(true);\n }\n document.querySelector(`foreignObject[node=\"node-${this.chartService.rootNode().id}\"]`)?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'center',\n });\n }\n /**\n * Calculates the maximum depth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum depth of the chart.\n */\n calculateMaxDepth(node) {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return 1 + Math.max(...node.children.map((child) => this.calculateMaxDepth(child)));\n }\n /**\n * Calculates the maximum breadth of the organizational chart.\n * @param node - The root node of the chart.\n * @returns The maximum breadth of the chart.\n */\n calculateMaxBreadth(node) {\n if (!node.children || node.children.length === 0 || node.isExpanded === false) {\n return 1;\n }\n return node.children.reduce((acc, child) => acc + this.calculateMaxBreadth(child), 0);\n }\n /**\n * Creates and renders the organizational chart.\n * @param el - The container element for the chart.\n * @param data - The root node of the organizational chart.\n */\n createChart(el, data) {\n if (!this.d3) {\n return;\n }\n this.ngzone.runOutsideAngular(() => {\n const NODE_WIDTH_BASE = 260;\n const NODE_HEIGHT_BASE = 180;\n const HORIZONTAL_SPACING = 20;\n const VERTICAL_SPACING = 40;\n this.clearChart(el);\n const newSvg = this.d3.select(el).append('svg');\n const root = this.d3.hierarchy(data);\n root.descendants().forEach((node) => {\n if (node.data.isExpanded === false) {\n node.children = undefined;\n }\n });\n const treeLayout = this.d3\n .tree()\n .nodeSize([NODE_WIDTH_BASE + HORIZONTAL_SPACING, NODE_HEIGHT_BASE + VERTICAL_SPACING]);\n treeLayout(root);\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;\n root.descendants().forEach((d) => {\n if (d.x < minX)\n minX = d.x;\n if (d.x > maxX)\n maxX = d.x;\n if (d.y < minY)\n minY = d.y;\n if (d.y > maxY)\n maxY = d.y;\n });\n const CONTAINER_WIDTH = maxX - minX + NODE_WIDTH_BASE + 2 * HORIZONTAL_SPACING;\n const CONTAINER_HEIGHT = maxY - minY + NODE_HEIGHT_BASE + 2 * VERTICAL_SPACING;\n newSvg.attr('width', CONTAINER_WIDTH).attr('height', CONTAINER_HEIGHT);\n const g = newSvg\n .append('g')\n .attr('transform', `translate(${-minX + NODE_WIDTH_BASE / 2 + HORIZONTAL_SPACING / 2}, ${-minY + NODE_HEIGHT_BASE / 2 + VERTICAL_SPACING / 2})`);\n const link = g\n .selectAll('.link')\n .data(root.links())\n .enter()\n .append('path')\n .attr('class', 'link')\n .attr('d', (d) => {\n const source = d.source;\n const target = d.target;\n return `M${source.x},${source.y}V${(source.y + target.y) / 2}H${target.x}V${target.y - 10}`;\n })\n .attr('fill', 'none')\n .attr('stroke', this.NODE_STROKE_COLOR)\n .attr('stroke-width', this.LINK_STROKE_WIDTH)\n .attr('from', (d) => `node-${d.source.data.id}`)\n .attr('to', (d) => `node-${d.target.data.id}`);\n const node = g\n .selectAll('.axp-chart-node')\n .data(root.descendants())\n .enter()\n .append('foreignObject')\n .attr('class', 'axp-chart-node')\n .attr('node', (d) => `node-${d.data.id}`)\n .attr('x', (d) => d.x - NODE_WIDTH_BASE / 2)\n .attr('y', (d) => d.y - NODE_HEIGHT_BASE / 2 + 10)\n .attr('width', NODE_WIDTH_BASE)\n .attr('height', NODE_HEIGHT_BASE)\n .each((d) => this.renderNodeTemplate(d.data, d.x, d.y));\n this.contextMenu()?.refresh();\n });\n if (!this.isChartRendered) {\n // document.querySelector(`foreignObject[node=\"node-${data.id}\"] .--heading-container`)?.scrollIntoView({\n // behavior: 'smooth',\n // block: 'center',\n // inline: 'center',\n // });\n this.isChartRendered = true;\n this.panView()?.resetPosition();\n }\n }\n /**\n * Renders the node template for a given organizational node.\n * @param data - The node data.\n * @param x - The x-coordinate of the node.\n * @param y - The y-coordinate of the node.\n */\n renderNodeTemplate(data, x, y) {\n // Find the key that matches the node type\n // category is the same as type in simplified structure\n set(data, 'category', data.type);\n const viewRef = this.viewContainerRef.createEmbeddedView(this.nodeTemplate(), {\n $implicit: data,\n });\n const nodeElement = this.d3.select(this.treeContainer().nativeElement).select(`[node=\"node-${data.id}\"]`);\n const element = nodeElement.node();\n if (element) {\n element.appendChild(viewRef.rootNodes[0]);\n }\n }\n /**\n * Toggles the expansion state of a node.\n * @param data - The node data.\n * @param el - The HTML element representing the node.\n */\n toggleNode(data, el) {\n data.isExpanded = data.isExpanded === undefined ? false : !data.isExpanded;\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n // el.scrollIntoView({\n // behavior: 'smooth',\n // });\n }\n /**\n * Clears the chart from the container element.\n * @param el - The container element.\n */\n clearChart(el) {\n if (this.d3) {\n this.d3.select(el).select('svg').remove();\n this.viewContainerRef.clear();\n }\n }\n async refresh() {\n if (this.d3) {\n await this.chartService.load();\n this.createChart(this.treeContainer().nativeElement, this.chartService.rootNode());\n }\n }\n //#region Context Menu\n // protected async handleContextMenuOnOpening(e: AXContextMenuOpeningEvent) {\n // const node = get(e.targetElement, '__data__.data') as any as AXMOrganizationNode;\n // const allowedAddItems = await this.chartService.getAllowedAddMenuItems(node);\n // const allowDelete = node.type != AXMOrganizationNodeType.Company;\n // const isPasteAvailable = await this.chartService.isPasteAvailable();\n // const allowPaste = await this.chartService.allowPaste(node);\n // //\n // if (allowedAddItems.length) {\n // e.items.push({\n // text: 'Add New',\n // icon: 'fa-light fa-plus',\n // items: allowedAddItems,\n // break: allowDelete,\n // });\n // }\n // //\n // if (allowDelete) {\n // e.items.push({\n // name: 'cut',\n // text: 'Cut',\n // icon: 'fa-light fa-cut',\n // data: node,\n // });\n // e.items.push({\n // name: 'copy',\n // text: 'Copy',\n // icon: 'fa-light fa-copy',\n // data: node,\n // break: !isPasteAvailable,\n // });\n // }\n // if (isPasteAvailable) {\n // e.items.push({\n // name: 'paste',\n // text: 'Paste',\n // icon: 'fa-light fa-paste',\n // data: node,\n // break: true,\n // disabled: !allowPaste,\n // });\n // }\n // //\n // if (allowDelete) {\n // e.items.push({\n // name: 'remove',\n // text: 'Remove',\n // color: 'danger',\n // icon: 'fa-light fa-trash-can',\n // data: node,\n // });\n // }\n // //\n // if (e.items.length == 0) {\n // e.canceled = true;\n // }\n // }\n async handleContextMenuItemClick(e) {\n }\n //#endregion\n /**\n * Prints the organizational chart.\n */\n async printChart() {\n let [panX, panY, panZoomLevel] = [this.panX(), this.panY(), this.panZoomLevel()];\n this.panX.set(0), this.panY.set(0), this.panZoomLevel.set(100);\n await this.chartService.printChart(this.treeContainer().nativeElement);\n this.panX.set(panX), this.panY.set(panY), this.panZoomLevel.set(panZoomLevel);\n }\n /**\n * Gets the node colors based on the provided color.\n * @param color - The color to use for the node.\n * @returns An object containing the node's background, text, and border colors.\n */\n getNodeColors(color) {\n if (color.includes('surface')) {\n return {\n '--node-bg-color': `var(--ax-sys-color-${color})`,\n '--node-text-color': `var(--ax-sys-color-on-${color})`,\n '--node-border-color': `var(--ax-sys-color-border-${color})`,\n };\n }\n return {\n '--node-bg-color': `var(--ax-sys-color-${color}-surface)`,\n '--node-text-color': `var(--ax-sys-color-on-${color}-surface)`,\n '--node-border-color': `var(--ax-sys-color-border-${color}-surface)`,\n };\n }\n updateVar(oldValue, newValue) {\n oldValue.cat = newValue;\n }\n async getPageTitle() {\n return await this.translateService.translateAsync('@organization-management:organization-chart.components.chart.title');\n }\n async getPageDescription() {\n return await this.translateService.translateAsync('@organization-management:organization-chart.components.chart.description');\n }\n async getSecondaryMenuItems() {\n return [\n {\n ...getActionButton('print'),\n command: {\n name: 'print',\n },\n },\n {\n ...getActionButton('refresh'),\n command: {\n name: 'refresh',\n },\n }\n ];\n }\n async getPageBreadcrumbs() {\n return [\n {\n title: await this.translateService.translateAsync('@organization-management:module.menus.root.title')\n },\n ];\n }\n async execute(command) {\n if (command.name == 'print') {\n await this.printChart();\n }\n if (command.name == 'refresh') {\n await this.chartService.generate();\n await this.refresh();\n }\n }\n ngOnDestroy() {\n this.clearChart(this.treeContainer().nativeElement);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMOrgChartPage, isStandalone: true, selector: \"ng-component\", providers: [\n AXMOrgChartService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartPage\n }\n ], viewQueries: [{ propertyName: \"nodeTemplate\", first: true, predicate: [\"nodeTemplate\"], descendants: true, isSignal: true }, { propertyName: \"treeContainer\", first: true, predicate: [\"chart\"], descendants: true, isSignal: true }, { propertyName: \"parent\", first: true, predicate: [\"parent\"], descendants: true, isSignal: true }, { propertyName: \"contextMenu\", first: true, predicate: AXContextMenuComponent, descendants: true, isSignal: true }, { propertyName: \"panView\", first: true, predicate: AXPanViewDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content class=\\\"ax-overflow-hidden\\\">\\n <div class=\\\"ax-h-[calc(100vh-290px)]\\\" #parent id=\\\"parent\\\">\\n <div\\n #chart\\n axPanView\\n [(panX)]=\\\"panX\\\"\\n [(panY)]=\\\"panY\\\"\\n [freeMode]=\\\"true\\\"\\n [(zoom)]=\\\"panZoomLevel\\\"\\n [fitContent]=\\\"true\\\"\\n wrapperClasses=\\\"h\\\"\\n class=\\\"ax-light\\\"\\n ></div>\\n <!-- <ax-context-menu\\n [target]=\\\"'.axp-chart-node'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n [closeOn]=\\\"'leave'\\\"\\n (onItemClick)=\\\"handleContextMenuItemClick($event)\\\"\\n (onOpening)=\\\"handleContextMenuOnOpening($event)\\\"\\n >\\n </ax-context-menu> -->\\n </div>\\n </axp-page-content>\\n <axp-page-footer>\\n <axp-layout-prefix>\\n <div class=\\\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\\\">\\n @let v = {cat:'Company'}; @for (item of nodeTypes; track $index) {\\n <div class=\\\"axp-node-hint\\\" [style]=\\\"getNodeColors(item.color)\\\" [class.ax-ms-4]=\\\"v.cat!=item.category\\\">\\n <div class=\\\"--badge\\\"></div>\\n {{item.title}}\\n </div>\\n {{updateVar(v, item.category)}} }\\n </div>\\n </axp-layout-prefix>\\n <axp-layout-suffix>\\n <div class=\\\"ax-flex ax-gap-2\\\">\\n <ax-button (onClick)=\\\"zoomOut()\\\">\\n <ax-icon class=\\\"fa-solid fa-minus\\\"> </ax-icon>\\n </ax-button>\\n <ax-button [text]=\\\"panZoomLevel()\\\" (onClick)=\\\"zoomReset()\\\"></ax-button>\\n <ax-button (onClick)=\\\"zoomIn()\\\">\\n <ax-icon class=\\\"fa-solid fa-add\\\"> </ax-icon>\\n </ax-button>\\n <ax-button (onClick)=\\\"toggleFullscreen()\\\">\\n <ax-icon>\\n <i class=\\\"fa-solid\\\" [class]=\\\"isFullscreen()? 'fa-compress' : 'fa-expand'\\\"></i>\\n </ax-icon>\\n </ax-button>\\n </div>\\n </axp-layout-suffix>\\n </axp-page-footer>\\n</axp-page-layout>\\n\\n<ng-template #nodeTemplate let-data>\\n <div>\\n @switch (data.category) {\\n <!-- Company -->\\n @case (NodeTypes.Company) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'primary' }\\\"></ng-container>\\n }\\n <!-- Location -->\\n @case (NodeTypes.Country) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n } @case (NodeTypes.State) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n } @case (NodeTypes.City) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n }\\n <!-- BusinessUnit -->\\n @case (NodeTypes.Division) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n } @case (NodeTypes.Department) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n } @case (NodeTypes.Branch) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n }\\n <!-- Role -->\\n @case (NodeTypes.Position) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent3' }\\\"></ng-container>\\n }\\n <!-- Employee -->\\n @case (NodeTypes.Employee) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'surface' }\\\"></ng-container>\\n } }\\n </div>\\n</ng-template>\\n\\n<!----------------------------------- General Node Template ----------------------------------->\\n<ng-template #generalTemplate let-data=\\\"data\\\" let-color=\\\"color\\\">\\n <div #node class=\\\"--node-container\\\" [style]=\\\"getNodeColors(color)\\\">\\n <div class=\\\"--container\\\">\\n <div class=\\\"--heading-container\\\">\\n <div class=\\\"--content\\\">\\n <div class=\\\"--icon\\\">\\n <i class=\\\"fa-light fa-xl fa-fw\\\" [class]=\\\"data.icon\\\"></i>\\n </div>\\n <div class=\\\"--titles\\\">\\n <span class=\\\"--title\\\" [title]=\\\"data.title\\\">{{data.title}}</span>\\n @if(data.subtitle) {\\n <span class=\\\"--sub-title\\\" [title]=\\\"data.subtitle\\\">{{data.subtitle}}</span>\\n }\\n </div>\\n @if(data?.children?.length){\\n <div class=\\\"--badge\\\">\\n <span>{{data?.children?.length ?? 0}}</span>\\n </div>\\n }\\n </div>\\n </div>\\n @if(data.description) {\\n <div class=\\\"--body-container\\\">\\n <div class=\\\"--description\\\" [class.ax-pb-3]=\\\"data.children && data.children.length > 0\\\">\\n <span>{{data.description}}</span>\\n </div>\\n </div>\\n } @if(data.children && data.children.length > 0){\\n <div class=\\\"--toggle\\\">\\n <ax-button class=\\\"ax-xs ax-rounded-sm\\\" (onClick)=\\\"toggleNode(data,node)\\\">\\n <ax-icon icon=\\\"fa-solid\\\" [class]=\\\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </div>\\n</ng-template>\\n\", styles: [\".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.axp-chart-node{display:flex;align-items:center;justify-content:center}.axp-chart-node .--node-container{position:relative;cursor:pointer;--node-bg-color: var(--ax-sys-color-primary-surface);--node-text-color: var(--ax-sys-color-on-primary-surface);--node-border-color: var(--ax-sys-color-border-primary-surface)}.axp-chart-node .--node-container .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: \n //\n AXMenuModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i3.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i4.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXPanViewDirective, selector: \"[axPanView]\", inputs: [\"zoomStep\", \"minZoom\", \"maxZoom\", \"freeMode\", \"fitContent\", \"disablePan\", \"disableZoom\", \"wrapperClasses\", \"panX\", \"panY\", \"zoom\"], outputs: [\"panXChange\", \"panYChange\", \"zoomChange\", \"positionChange\"], exportAs: [\"axPanView\"] }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"ngmodule\", type: AXBreadcrumbsModule }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: \n //\n AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMOrgChartPage, decorators: [{\n type: Component,\n args: [{ imports: [\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXPanViewDirective,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n AXMOrgChartService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMOrgChartPage\n }\n ], template: \"<axp-page-layout *translate=\\\"let t\\\">\\n <axp-page-content class=\\\"ax-overflow-hidden\\\">\\n <div class=\\\"ax-h-[calc(100vh-290px)]\\\" #parent id=\\\"parent\\\">\\n <div\\n #chart\\n axPanView\\n [(panX)]=\\\"panX\\\"\\n [(panY)]=\\\"panY\\\"\\n [freeMode]=\\\"true\\\"\\n [(zoom)]=\\\"panZoomLevel\\\"\\n [fitContent]=\\\"true\\\"\\n wrapperClasses=\\\"h\\\"\\n class=\\\"ax-light\\\"\\n ></div>\\n <!-- <ax-context-menu\\n [target]=\\\"'.axp-chart-node'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n [closeOn]=\\\"'leave'\\\"\\n (onItemClick)=\\\"handleContextMenuItemClick($event)\\\"\\n (onOpening)=\\\"handleContextMenuOnOpening($event)\\\"\\n >\\n </ax-context-menu> -->\\n </div>\\n </axp-page-content>\\n <axp-page-footer>\\n <axp-layout-prefix>\\n <div class=\\\"ax-flex ax-gap-1 ax-light ax-flex-wrap ax-justify-center\\\">\\n @let v = {cat:'Company'}; @for (item of nodeTypes; track $index) {\\n <div class=\\\"axp-node-hint\\\" [style]=\\\"getNodeColors(item.color)\\\" [class.ax-ms-4]=\\\"v.cat!=item.category\\\">\\n <div class=\\\"--badge\\\"></div>\\n {{item.title}}\\n </div>\\n {{updateVar(v, item.category)}} }\\n </div>\\n </axp-layout-prefix>\\n <axp-layout-suffix>\\n <div class=\\\"ax-flex ax-gap-2\\\">\\n <ax-button (onClick)=\\\"zoomOut()\\\">\\n <ax-icon class=\\\"fa-solid fa-minus\\\"> </ax-icon>\\n </ax-button>\\n <ax-button [text]=\\\"panZoomLevel()\\\" (onClick)=\\\"zoomReset()\\\"></ax-button>\\n <ax-button (onClick)=\\\"zoomIn()\\\">\\n <ax-icon class=\\\"fa-solid fa-add\\\"> </ax-icon>\\n </ax-button>\\n <ax-button (onClick)=\\\"toggleFullscreen()\\\">\\n <ax-icon>\\n <i class=\\\"fa-solid\\\" [class]=\\\"isFullscreen()? 'fa-compress' : 'fa-expand'\\\"></i>\\n </ax-icon>\\n </ax-button>\\n </div>\\n </axp-layout-suffix>\\n </axp-page-footer>\\n</axp-page-layout>\\n\\n<ng-template #nodeTemplate let-data>\\n <div>\\n @switch (data.category) {\\n <!-- Company -->\\n @case (NodeTypes.Company) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'primary' }\\\"></ng-container>\\n }\\n <!-- Location -->\\n @case (NodeTypes.Country) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n } @case (NodeTypes.State) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n } @case (NodeTypes.City) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent1' }\\\"></ng-container>\\n }\\n <!-- BusinessUnit -->\\n @case (NodeTypes.Division) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n } @case (NodeTypes.Department) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n } @case (NodeTypes.Branch) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent2' }\\\"></ng-container>\\n }\\n <!-- Role -->\\n @case (NodeTypes.Position) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'accent3' }\\\"></ng-container>\\n }\\n <!-- Employee -->\\n @case (NodeTypes.Employee) {\\n <ng-container *ngTemplateOutlet=\\\"generalTemplate; context: { data,color:'surface' }\\\"></ng-container>\\n } }\\n </div>\\n</ng-template>\\n\\n<!----------------------------------- General Node Template ----------------------------------->\\n<ng-template #generalTemplate let-data=\\\"data\\\" let-color=\\\"color\\\">\\n <div #node class=\\\"--node-container\\\" [style]=\\\"getNodeColors(color)\\\">\\n <div class=\\\"--container\\\">\\n <div class=\\\"--heading-container\\\">\\n <div class=\\\"--content\\\">\\n <div class=\\\"--icon\\\">\\n <i class=\\\"fa-light fa-xl fa-fw\\\" [class]=\\\"data.icon\\\"></i>\\n </div>\\n <div class=\\\"--titles\\\">\\n <span class=\\\"--title\\\" [title]=\\\"data.title\\\">{{data.title}}</span>\\n @if(data.subtitle) {\\n <span class=\\\"--sub-title\\\" [title]=\\\"data.subtitle\\\">{{data.subtitle}}</span>\\n }\\n </div>\\n @if(data?.children?.length){\\n <div class=\\\"--badge\\\">\\n <span>{{data?.children?.length ?? 0}}</span>\\n </div>\\n }\\n </div>\\n </div>\\n @if(data.description) {\\n <div class=\\\"--body-container\\\">\\n <div class=\\\"--description\\\" [class.ax-pb-3]=\\\"data.children && data.children.length > 0\\\">\\n <span>{{data.description}}</span>\\n </div>\\n </div>\\n } @if(data.children && data.children.length > 0){\\n <div class=\\\"--toggle\\\">\\n <ax-button class=\\\"ax-xs ax-rounded-sm\\\" (onClick)=\\\"toggleNode(data,node)\\\">\\n <ax-icon icon=\\\"fa-solid\\\" [class]=\\\"data.isExpanded === false ? 'fa-chevron-down' : 'fa-chevron-up'\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </div>\\n</ng-template>\\n\", styles: [\".axp-node-hint{display:flex;align-items:center;justify-content:center;gap:.25rem;font-size:.75rem;line-height:1rem}.axp-node-hint>div.--badge{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));display:flex;width:.75rem;height:.75rem;align-items:center;justify-content:center;border-radius:.125rem}.axp-chart-node{display:flex;align-items:center;justify-content:center}.axp-chart-node .--node-container{position:relative;cursor:pointer;--node-bg-color: var(--ax-sys-color-primary-surface);--node-text-color: var(--ax-sys-color-on-primary-surface);--node-border-color: var(--ax-sys-color-border-primary-surface)}.axp-chart-node .--node-container .--container{display:flex;max-height:100%;width:100%;flex-direction:column;overflow:hidden;border-radius:.375rem;border-width:1px;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-color:rgba(var(--node-border-color))}.axp-chart-node .--node-container .--container .--heading-container{background-color:rgba(var(--node-bg-color));color:rgba(var(--node-text-color));width:100%;padding:.5rem .75rem}.axp-chart-node .--node-container .--container .--heading-container .--content{display:flex;width:100%;align-items:center;justify-content:center;gap:.5rem;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--icon{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:2.75rem;height:2.75rem;flex:none;align-items:center;justify-content:center;border-radius:.5rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge{background-color:color-mix(in srgb,rgba(var(--node-bg-color),1) 85%,black);display:flex;width:1.5rem;height:1.5rem;flex:none;align-items:center;justify-content:center;border-radius:.375rem;line-height:1}.axp-chart-node .--node-container .--container .--heading-container .--content .--badge>span{font-size:.75rem;line-height:1rem}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles{display:flex;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-chart-node .--node-container .--container .--heading-container .--content .--titles .--sub-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--body-container{width:100%;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:.5rem .75rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}.axp-chart-node .--node-container .--container .--body-container .--description{text-align:center;font-size:.875rem;line-height:1rem;opacity:.85}.axp-chart-node .--node-container .--container .--toggle{position:absolute;left:0;right:0;bottom:-.75rem;display:flex;width:100%;-webkit-user-select:none;user-select:none;align-items:center;justify-content:center}#parent:fullscreen{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}\\n\"] }]\n }], propDecorators: { nodeTemplate: [{ type: i0.ViewChild, args: ['nodeTemplate', { isSignal: true }] }], treeContainer: [{ type: i0.ViewChild, args: ['chart', { isSignal: true }] }], parent: [{ type: i0.ViewChild, args: ['parent', { isSignal: true }] }], contextMenu: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXContextMenuComponent), { isSignal: true }] }], panView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPanViewDirective), { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9vcmdhbml6YXRpb24tY2hhcnQvb3JnLWNoYXJ0LnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsc0JBQXNCLEVBR3RCLFlBQVksR0FDYixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxP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QUM3QjtTQUNGLGtZQVUrQixzQkFBc0IsMEZBQzFCLGtCQUFrQix1RkMvRWhELG05SkE4SEEsNDlHRGxGSSxZQUFZLHFNQUNaLFlBQVk7Z0JBQ1osRUFBRTtnQkFDRixZQUFZLDhCQUNaLGNBQWMsNlhBQ2Qsc0JBQXNCLDhCQUN0QixtQkFBbUIsOEdBQ25CLGlCQUFpQixnSUFDakIsa0JBQWtCLG9TQUNsQixlQUFlLDhCQUNmLG1CQUFtQiw4QkFDbkIsYUFBYTtnQkFDYixFQUFFO2dCQUNGLDRCQUE0QixnaUJBQzVCLHNCQUFzQjs7NEZBWWIsZUFBZTtrQkE5QjNCLFNBQVM7OEJBR0M7d0JBQ1AsWUFBWTt3QkFDWixZQUFZO3dCQUNaLEVBQUU7d0JBQ0YsWUFBWTt3QkFDWixjQUFjO3dCQUNkLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsRUFBRTt3QkFDRiw0QkFBNEI7d0JBQzVCLHNCQUFzQjtxQkFDdkIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1Qsa0JBQWtCO3dCQUNsQjs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLGlCQUFpQjt5QkFDN0I7cUJBQ0Y7MEVBTzJELGNBQWMsdUVBQ0gsT0FBTyxnRUFDZCxRQUFRLHlGQUN4QyxzQkFBc0Isc0ZBQzFCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUGFuVmlld0RpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY2RrL3Bhbi12aWV3JztcbmltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhCcmVhZGNydW1ic01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9icmVhZGNydW1icyc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQge1xuICBBWENvbnRleHRNZW51Q29tcG9uZW50LFxuICBBWENvbnRleHRNZW51SXRlbXNDbGlja0V2ZW50LFxuICBBWENvbnRleHRNZW51T3BlbmluZ0V2ZW50LFxuICBBWE1lbnVNb2R1bGUsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9tZW51JztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQUGFnZUxheW91dEJhc2UsIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50LCBBWFBQYWdlTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvdmlld3MnO1xuaW1wb3J0IHsgQVhQVGhlbWVMYXlvdXRCbG9ja0NvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBOZ1pvbmUsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLWVzL2dldCc7XG5pbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC1lcy9zZXQnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbnN0JztcbmltcG9ydCB7IEFYTU9yZ0NoYXJ0U2VydmljZSB9IGZyb20gJy4vb3JnLWNoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNT3JnYW5pemF0aW9uTm9kZSwgQVhNT3JnQ2hhcnRDYXRlZ29yeSwgQVhNT3JnQ2hhcnROb2RlVHlwZSB9IGZyb20gJy4vb3JnLWNoYXJ0LnR5cGUnO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0sIEFYUEJyZWFkY3J1bWJJdGVtLCBBWFBFeGVjdXRlQ29tbWFuZCwgZ2V0QWN0aW9uQnV0dG9uLCByZXNvbHZlQWN0aW9uTG9vayB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG4vKipcbiAqIENvbXBvbmVudCBmb3IgZGlzcGxheWluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBhbiBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9vcmctY2hhcnQucGFnZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb3JnLWNoYXJ0LnBhZ2Uuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJvdXRlck1vZHVsZSxcbiAgICAvL1xuICAgIEFYTWVudU1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWERyb3Bkb3duQnV0dG9uTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhQYW5WaWV3RGlyZWN0aXZlLFxuICAgIEFYTG9hZGluZ01vZHVsZSxcbiAgICBBWEJyZWFkY3J1bWJzTW9kdWxlLFxuICAgIEFYQmFkZ2VNb2R1bGUsXG4gICAgLy9cbiAgICBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50LFxuICAgIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICBBWE1PcmdDaGFydFNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQUGFnZUxheW91dEJhc2UsXG4gICAgICB1c2VFeGlzdGluZzogQVhNT3JnQ2hhcnRQYWdlXG4gICAgfVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1PcmdDaGFydFBhZ2UgZXh0ZW5kcyBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCByZWFkb25seSByb290Q29uZmlnID0gUm9vdENvbmZpZztcblxuICBwcml2YXRlIGQzITogdHlwZW9mIGltcG9ydCgnZDMnKTtcblxuICBwcml2YXRlIG5vZGVUZW1wbGF0ZSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjxhbnk+Pignbm9kZVRlbXBsYXRlJyk7XG4gIHByaXZhdGUgdHJlZUNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NoYXJ0Jyk7XG4gIHByaXZhdGUgcGFyZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PigncGFyZW50Jyk7XG4gIHByaXZhdGUgY29udGV4dE1lbnUgPSB2aWV3Q2hpbGQoQVhDb250ZXh0TWVudUNvbXBvbmVudCk7XG4gIHByaXZhdGUgcGFuVmlldyA9IHZpZXdDaGlsZChBWFBhblZpZXdEaXJlY3RpdmUpO1xuXG4gIHByaXZhdGUgbmd6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgLy8gcHJpbnRpbmcgaXMgaGFuZGxlZCBieSBzZXJ2aWNlIGl0c2VsZlxuICBwcml2YXRlIGNoYXJ0U2VydmljZSA9IGluamVjdChBWE1PcmdDaGFydFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgTk9ERV9TVFJPS0VfQ09MT1IgPSAncmdiYSh2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS00MDApKSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgTElOS19TVFJPS0VfV0lEVEggPSAxO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBOb2RlVHlwZXMgPSBBWE1PcmdDaGFydE5vZGVUeXBlO1xuXG4gIHByb3RlY3RlZCBpc0Z1bGxzY3JlZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcGFuWCA9IHNpZ25hbCgwKTtcbiAgcHJvdGVjdGVkIHBhblkgPSBzaWduYWwoMCk7XG4gIHByb3RlY3RlZCBwYW5ab29tTGV2ZWwgPSBzaWduYWwoMTAwKTtcblxuICBwcm90ZWN0ZWQgaXNDaGFydFJlbmRlcmVkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIG5vZGVUeXBlcyA9IFtcbiAgICB7IHRpdGxlOiAnQ29tcGFueScsIGNvbG9yOiAncHJpbWFyeScsIGljb246ICdmYWwgZmEtYnVpbGRpbmcnLCBjYXRlZ29yeTogQVhNT3JnQ2hhcnRDYXRlZ29yeS5Db21wYW55IH0sXG4gICAgeyB0aXRsZTogJ0xvY2F0aW9uJywgY29sb3I6ICdhY2NlbnQxJywgaWNvbjogJ2ZhbCBmYS1nbG9iZScsIGNhdGVnb3J5OiBBWE1PcmdDaGFydENhdGVnb3J5LkxvY2F0aW9uIH0sXG4gICAgeyB0aXRsZTogJ0J1c2luZXNzIFVuaXQnLCBjb2xvcjogJ2FjY2VudDInLCBpY29uOiAnZmFsIGZhLXNpdGVtYXAnLCBjYXRlZ29yeTogQVhNT3JnQ2hhcnRDYXRlZ29yeS5CdXNpbmVzc1VuaXQgfSxcbiAgICB7IHRpdGxlOiAnUG9zaXRpb24nLCBjb2xvcjogJ2FjY2VudDMnLCBpY29uOiAnZmFsIGZhLXVzZXItdGllJywgY2F0ZWdvcnk6IEFYTU9yZ0NoYXJ0Q2F0ZWdvcnkuUG9zaXRpb24gfSxcbiAgICB7IHRpdGxlOiAnRW1wbG95ZWUnLCBjb2xvcjogJ3N1cmZhY2UnLCBpY29uOiAnZmFsIGZhLWFkZHJlc3MtY2FyZCcsIGNhdGVnb3J5OiBBWE1PcmdDaGFydENhdGVnb3J5LkVtcGxveWVlIH0sXG4gIF07XG5cbiAgI2luaXRpYWxpemUgPSBhZnRlck5leHRSZW5kZXIoYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMuZDMgPSBhd2FpdCBpbXBvcnQoJ2QzJyk7XG5cbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFpvb21zIGluIHRoZSBjaGFydC5cbiAgICovXG4gIHByb3RlY3RlZCB6b29tSW4oKSB7XG4gICAgdGhpcy5wYW5WaWV3KCk/Lnpvb21JbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb21zIG91dCB0aGUgY2hhcnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgem9vbU91dCgpIHtcbiAgICB0aGlzLnBhblZpZXcoKT8uem9vbU91dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgem9vbSBsZXZlbCBhbmQgcGFuIHBvc2l0aW9uIG9mIHRoZSBjaGFydC5cbiAgICovXG4gIHByb3RlY3RlZCB6b29tUmVzZXQoKSB7XG4gICAgdGhpcy5wYW5WaWV3KCk/LnJlc2V0UG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGZ1bGxzY3JlZW4gbW9kZSBmb3IgdGhlIGNoYXJ0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHRvZ2dsZUZ1bGxzY3JlZW4oKSB7XG4gICAgaWYgKHRoaXMuaXNGdWxsc2NyZWVuKCkpIHtcbiAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB0aGlzLmlzRnVsbHNjcmVlbi5zZXQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcmVudCgpLm5hdGl2ZUVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIHRoaXMuaXNGdWxsc2NyZWVuLnNldCh0cnVlKTtcbiAgICB9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgZm9yZWlnbk9iamVjdFtub2RlPVwibm9kZS0ke3RoaXMuY2hhcnRTZXJ2aWNlLnJvb3ROb2RlKCkuaWR9XCJdYCk/LnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIGJsb2NrOiAnc3RhcnQnLFxuICAgICAgaW5saW5lOiAnY2VudGVyJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAgICogQHBhcmFtIG5vZGUgLSBUaGUgcm9vdCBub2RlIG9mIHRoZSBjaGFydC5cbiAgICogQHJldHVybnMgVGhlIG1heGltdW0gZGVwdGggb2YgdGhlIGNoYXJ0LlxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNYXhEZXB0aChub2RlOiBBWE1Pcmdhbml6YXRpb25Ob2RlKTogbnVtYmVyIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4gfHwgbm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgbm9kZS5pc0V4cGFuZGVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAxICsgTWF0aC5tYXgoLi4ubm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB0aGlzLmNhbGN1bGF0ZU1heERlcHRoKGNoaWxkKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG1heGltdW0gYnJlYWR0aCBvZiB0aGUgb3JnYW5pemF0aW9uYWwgY2hhcnQuXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIHJvb3Qgbm9kZSBvZiB0aGUgY2hhcnQuXG4gICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIGJyZWFkdGggb2YgdGhlIGNoYXJ0LlxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNYXhCcmVhZHRoKG5vZGU6IEFYTU9yZ2FuaXphdGlvbk5vZGUpOiBudW1iZXIge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbiB8fCBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCBub2RlLmlzRXhwYW5kZWQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4ucmVkdWNlKChhY2MsIGNoaWxkKSA9PiBhY2MgKyB0aGlzLmNhbGN1bGF0ZU1heEJyZWFkdGgoY2hpbGQpLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCByZW5kZXJzIHRoZSBvcmdhbml6YXRpb25hbCBjaGFydC5cbiAgICogQHBhcmFtIGVsIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50IGZvciB0aGUgY2hhcnQuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIHJvb3Qgbm9kZSBvZiB0aGUgb3JnYW5pemF0aW9uYWwgY2hhcnQuXG4gICAqL1xuICBjcmVhdGVDaGFydChlbDogRWxlbWVudCwgZGF0YTogQVhNT3JnYW5pemF0aW9uTm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kMykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm5nem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBOT0RFX1dJRFRIX0JBU0UgPSAyNjA7XG4gICAgICBjb25zdCBOT0RFX0hFSUdIVF9CQVNFID0gMTgwO1xuICAgICAgY29uc3QgSE9SSVpPTlRBTF9TUEFDSU5HID0gMjA7XG4gICAgICBjb25zdCBWRVJUSUNBTF9TUEFDSU5HID0gNDA7XG5cbiAgICAgIHRoaXMuY2xlYXJDaGFydChlbCk7XG4gICAgICBjb25zdCBuZXdTdmcgPSB0aGlzLmQzLnNlbGVjdChlbCkuYXBwZW5kKCdzdmcnKTtcblxuICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZDMuaGllcmFyY2h5KGRhdGEpO1xuXG4gICAgICByb290LmRlc2NlbmRhbnRzKCkuZm9yRWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChub2RlLmRhdGEuaXNFeHBhbmRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHJlZUxheW91dCA9IHRoaXMuZDNcbiAgICAgICAgLnRyZWU8QVhNT3JnYW5pemF0aW9uTm9kZT4oKVxuICAgICAgICAubm9kZVNpemUoW05PREVfV0lEVEhfQkFTRSArIEhPUklaT05UQUxfU1BBQ0lORywgTk9ERV9IRUlHSFRfQkFTRSArIFZFUlRJQ0FMX1NQQUNJTkddKTtcblxuICAgICAgdHJlZUxheW91dChyb290KTtcblxuICAgICAgbGV0IG1pblggPSBJbmZpbml0eSxcbiAgICAgICAgbWF4WCA9IC1JbmZpbml0eSxcbiAgICAgICAgbWluWSA9IEluZmluaXR5LFxuICAgICAgICBtYXhZID0gLUluZmluaXR5O1xuICAgICAgcm9vdC5kZXNjZW5kYW50cygpLmZvckVhY2goKGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZC54IDwgbWluWCkgbWluWCA9IGQueDtcbiAgICAgICAgaWYgKGQueCA+IG1heFgpIG1heFggPSBkLng7XG4gICAgICAgIGlmIChkLnkgPCBtaW5ZKSBtaW5ZID0gZC55O1xuICAgICAgICBpZiAoZC55ID4gbWF4WSkgbWF4WSA9IGQueTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBDT05UQUlORVJfV0lEVEggPSBtYXhYIC0gbWluWCArIE5PREVfV0lEVEhfQkFTRSArIDIgKiBIT1JJWk9OVEFMX1NQQUNJTkc7XG4gICAgICBjb25zdCBDT05UQUlORVJfSEVJR0hUID0gbWF4WSAtIG1pblkgKyBOT0RFX0hFSUdIVF9CQVNFICsgMiAqIFZFUlRJQ0FMX1NQQUNJTkc7XG5cbiAgICAgIG5ld1N2Zy5hdHRyKCd3aWR0aCcsIENPTlRBSU5FUl9XSURUSCkuYXR0cignaGVpZ2h0JywgQ09OVEFJTkVSX0hFSUdIVCk7XG5cbiAgICAgIGNvbnN0IGcgPSBuZXdTdmdcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGB0cmFuc2xhdGUoJHstbWluWCArIE5PREVfV0lEVEhfQkFTRSAvIDIgKyBIT1JJWk9OVEFMX1NQQUNJTkcgLyAyfSwgJHstbWluWSArIE5PREVfSEVJR0hUX0JBU0UgLyAyICsgVkVSVElDQUxfU1BBQ0lORyAvIDJcbiAgICAgICAgICB9KWBcbiAgICAgICAgKTtcblxuICAgICAgY29uc3QgbGluayA9IGdcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpbmsnKVxuICAgICAgICAuZGF0YShyb290LmxpbmtzKCkpXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGluaycpXG4gICAgICAgIC5hdHRyKCdkJywgKGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGQuc291cmNlO1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGQudGFyZ2V0O1xuICAgICAgICAgIHJldHVybiBgTSR7c291cmNlLnh9LCR7c291cmNlLnl9ViR7KHNvdXJjZS55ICsgdGFyZ2V0LnkpIC8gMn1IJHt0YXJnZXQueH1WJHt0YXJnZXQueSAtIDEwfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgdGhpcy5OT0RFX1NUUk9LRV9DT0xPUilcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIHRoaXMuTElOS19TVFJPS0VfV0lEVEgpXG4gICAgICAgIC5hdHRyKCdmcm9tJywgKGQ6IGFueSkgPT4gYG5vZGUtJHtkLnNvdXJjZS5kYXRhLmlkfWApXG4gICAgICAgIC5hdHRyKCd0bycsIChkOiBhbnkpID0+IGBub2RlLSR7ZC50YXJnZXQuZGF0YS5pZH1gKTtcblxuICAgICAgY29uc3Qgbm9kZSA9IGdcbiAgICAgICAgLnNlbGVjdEFsbCgnLmF4cC1jaGFydC1ub2RlJylcbiAgICAgICAgLmRhdGEocm9vdC5kZXNjZW5kYW50cygpKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4cC1jaGFydC1ub2RlJylcbiAgICAgICAgLmF0dHIoJ25vZGUnLCAoZDogYW55KSA9PiBgbm9kZS0ke2QuZGF0YS5pZH1gKVxuICAgICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IGQueCAtIE5PREVfV0lEVEhfQkFTRSAvIDIpXG4gICAgICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gZC55IC0gTk9ERV9IRUlHSFRfQkFTRSAvIDIgKyAxMClcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgTk9ERV9XSURUSF9CQVNFKVxuICAgICAgICAuYXR0cignaGVpZ2h0JywgTk9ERV9IRUlHSFRfQkFTRSlcbiAgICAgICAgLmVhY2goKGQ6IGFueSkgPT4gdGhpcy5yZW5kZXJOb2RlVGVtcGxhdGUoZC5kYXRhLCBkLngsIGQueSkpO1xuXG4gICAgICB0aGlzLmNvbnRleHRNZW51KCk/LnJlZnJlc2goKTtcbiAgICB9KTtcbiAgICBpZiAoIXRoaXMuaXNDaGFydFJlbmRlcmVkKSB7XG4gICAgICAvLyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBmb3JlaWduT2JqZWN0W25vZGU9XCJub2RlLSR7ZGF0YS5pZH1cIl0gLi0taGVhZGluZy1jb250YWluZXJgKT8uc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgLy8gICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAvLyAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICAgIC8vICAgaW5saW5lOiAnY2VudGVyJyxcbiAgICAgIC8vIH0pO1xuICAgICAgdGhpcy5pc0NoYXJ0UmVuZGVyZWQgPSB0cnVlO1xuICAgICAgdGhpcy5wYW5WaWV3KCk/LnJlc2V0UG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgbm9kZSB0ZW1wbGF0ZSBmb3IgYSBnaXZlbiBvcmdhbml6YXRpb25hbCBub2RlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBub2RlIGRhdGEuXG4gICAqIEBwYXJhbSB4IC0gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIHkgLSBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBub2RlLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJOb2RlVGVtcGxhdGUoZGF0YTogQVhNT3JnYW5pemF0aW9uTm9kZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBrZXkgdGhhdCBtYXRjaGVzIHRoZSBub2RlIHR5cGVcbiAgICAvLyBjYXRlZ29yeSBpcyB0aGUgc2FtZSBhcyB0eXBlIGluIHNpbXBsaWZpZWQgc3RydWN0dXJlXG4gICAgc2V0KGRhdGEsICdjYXRlZ29yeScsIGRhdGEudHlwZSk7XG5cbiAgICBjb25zdCB2aWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLm5vZGVUZW1wbGF0ZSgpLCB7XG4gICAgICAkaW1wbGljaXQ6IGRhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBub2RlRWxlbWVudCA9IHRoaXMuZDMuc2VsZWN0KHRoaXMudHJlZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQpLnNlbGVjdChgW25vZGU9XCJub2RlLSR7ZGF0YS5pZH1cIl1gKTtcbiAgICBjb25zdCBlbGVtZW50ID0gbm9kZUVsZW1lbnQubm9kZSgpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh2aWV3UmVmLnJvb3ROb2Rlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGV4cGFuc2lvbiBzdGF0ZSBvZiBhIG5vZGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIG5vZGUgZGF0YS5cbiAgICogQHBhcmFtIGVsIC0gVGhlIEhUTUwgZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIG5vZGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgdG9nZ2xlTm9kZShkYXRhOiBBWE1Pcmdhbml6YXRpb25Ob2RlLCBlbDogSFRNTERpdkVsZW1lbnQpIHtcbiAgICBkYXRhLmlzRXhwYW5kZWQgPSBkYXRhLmlzRXhwYW5kZWQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogIWRhdGEuaXNFeHBhbmRlZDtcbiAgICB0aGlzLmNyZWF0ZUNoYXJ0KHRoaXMudHJlZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY2hhcnRTZXJ2aWNlLnJvb3ROb2RlKCkpO1xuICAgIC8vIGVsLnNjcm9sbEludG9WaWV3KHtcbiAgICAvLyAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAvLyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGNoYXJ0IGZyb20gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBAcGFyYW0gZWwgLSBUaGUgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyQ2hhcnQoZWw6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kMykge1xuICAgICAgdGhpcy5kMy5zZWxlY3QoZWwpLnNlbGVjdCgnc3ZnJykucmVtb3ZlKCk7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKSB7XG4gICAgaWYgKHRoaXMuZDMpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLmxvYWQoKTtcbiAgICAgIHRoaXMuY3JlYXRlQ2hhcnQodGhpcy50cmVlQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudCwgdGhpcy5jaGFydFNlcnZpY2Uucm9vdE5vZGUoKSk7XG4gICAgfVxuICB9XG5cbiAgLy8jcmVnaW9uIENvbnRleHQgTWVudVxuXG4gIC8vIHByb3RlY3RlZCBhc3luYyBoYW5kbGVDb250ZXh0TWVudU9uT3BlbmluZyhlOiBBWENvbnRleHRNZW51T3BlbmluZ0V2ZW50KSB7XG4gIC8vICAgY29uc3Qgbm9kZSA9IGdldChlLnRhcmdldEVsZW1lbnQsICdfX2RhdGFfXy5kYXRhJykgYXMgYW55IGFzIEFYTU9yZ2FuaXphdGlvbk5vZGU7XG4gIC8vICAgY29uc3QgYWxsb3dlZEFkZEl0ZW1zID0gYXdhaXQgdGhpcy5jaGFydFNlcnZpY2UuZ2V0QWxsb3dlZEFkZE1lbnVJdGVtcyhub2RlKTtcbiAgLy8gICBjb25zdCBhbGxvd0RlbGV0ZSA9IG5vZGUudHlwZSAhPSBBWE1Pcmdhbml6YXRpb25Ob2RlVHlwZS5Db21wYW55O1xuICAvLyAgIGNvbnN0IGlzUGFzdGVBdmFpbGFibGUgPSBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5pc1Bhc3RlQXZhaWxhYmxlKCk7XG4gIC8vICAgY29uc3QgYWxsb3dQYXN0ZSA9IGF3YWl0IHRoaXMuY2hhcnRTZXJ2aWNlLmFsbG93UGFzdGUobm9kZSk7XG4gIC8vICAgLy9cbiAgLy8gICBpZiAoYWxsb3dlZEFkZEl0ZW1zLmxlbmd0aCkge1xuICAvLyAgICAgZS5pdGVtcy5wdXNoKHtcbiAgLy8gICAgICAgdGV4dDogJ0FkZCBOZXcnLFxuICAvLyAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGx1cycsXG4gIC8vICAgICAgIGl0ZW1zOiBhbGxvd2VkQWRkSXRlbXMsXG4gIC8vICAgICAgIGJyZWFrOiBhbGxvd0RlbGV0ZSxcbiAgLy8gICAgIH0pO1xuICAvLyAgIH1cbiAgLy8gICAvL1xuICAvLyAgIGlmIChhbGxvd0RlbGV0ZSkge1xuICAvLyAgICAgZS5pdGVtcy5wdXNoKHtcbiAgLy8gICAgICAgbmFtZTogJ2N1dCcsXG4gIC8vICAgICAgIHRleHQ6ICdDdXQnLFxuICAvLyAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtY3V0JyxcbiAgLy8gICAgICAgZGF0YTogbm9kZSxcbiAgLy8gICAgIH0pO1xuICAvLyAgICAgZS5pdGVtcy5wdXNoKHtcbiAgLy8gICAgICAgbmFtZTogJ2NvcHknLFxuICAvLyAgICAgICB0ZXh0OiAnQ29weScsXG4gIC8vICAgICAgIGljb246ICdmYS1saWdodCBmYS1jb3B5JyxcbiAgLy8gICAgICAgZGF0YTogbm9kZSxcbiAgLy8gICAgICAgYnJlYWs6ICFpc1Bhc3RlQXZhaWxhYmxlLFxuICAvLyAgICAgfSk7XG4gIC8vICAgfVxuICAvLyAgIGlmIChpc1Bhc3RlQXZhaWxhYmxlKSB7XG4gIC8vICAgICBlLml0ZW1zLnB1c2goe1xuICAvLyAgICAgICBuYW1lOiAncGFzdGUnLFxuICAvLyAgICAgICB0ZXh0OiAnUGFzdGUnLFxuICAvLyAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGFzdGUnLFxuICAvLyAgICAgICBkYXRhOiBub2RlLFxuICAvLyAgICAgICBicmVhazogdHJ1ZSxcbiAgLy8gICAgICAgZGlzYWJsZWQ6ICFhbGxvd1Bhc3RlLFxuICAvLyAgICAgfSk7XG4gIC8vICAgfVxuICAvLyAgIC8vXG4gIC8vICAgaWYgKGFsbG93RGVsZXRlKSB7XG4gIC8vICAgICBlLml0ZW1zLnB1c2goe1xuICAvLyAgICAgICBuYW1lOiAncmVtb3ZlJyxcbiAgLy8gICAgICAgdGV4dDogJ1JlbW92ZScsXG4gIC8vICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgLy8gICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoLWNhbicsXG4gIC8vICAgICAgIGRhdGE6IG5vZGUsXG4gIC8vICAgICB9KTtcbiAgLy8gICB9XG4gIC8vICAgLy9cbiAgLy8gICBpZiAoZS5pdGVtcy5sZW5ndGggPT0gMCkge1xuICAvLyAgICAgZS5jYW5jZWxlZCA9IHRydWU7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUNvbnRleHRNZW51SXRlbUNsaWNrKGU6IEFYQ29udGV4dE1lbnVJdGVtc0NsaWNrRXZlbnQpIHtcblxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLyoqXG4gICAqIFByaW50cyB0aGUgb3JnYW5pemF0aW9uYWwgY2hhcnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgcHJpbnRDaGFydCgpIHtcbiAgICBsZXQgW3BhblgsIHBhblksIHBhblpvb21MZXZlbF0gPSBbdGhpcy5wYW5YKCksIHRoaXMucGFuWSgpLCB0aGlzLnBhblpvb21MZXZlbCgpXTtcbiAgICB0aGlzLnBhblguc2V0KDApLCB0aGlzLnBhblkuc2V0KDApLCB0aGlzLnBhblpvb21MZXZlbC5zZXQoMTAwKTtcbiAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5wcmludENoYXJ0KHRoaXMudHJlZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMucGFuWC5zZXQocGFuWCksIHRoaXMucGFuWS5zZXQocGFuWSksIHRoaXMucGFuWm9vbUxldmVsLnNldChwYW5ab29tTGV2ZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG5vZGUgY29sb3JzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb2xvci5cbiAgICogQHBhcmFtIGNvbG9yIC0gVGhlIGNvbG9yIHRvIHVzZSBmb3IgdGhlIG5vZGUuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBub2RlJ3MgYmFja2dyb3VuZCwgdGV4dCwgYW5kIGJvcmRlciBjb2xvcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Tm9kZUNvbG9ycyhjb2xvcjogc3RyaW5nKSB7XG4gICAgaWYgKGNvbG9yLmluY2x1ZGVzKCdzdXJmYWNlJykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLW5vZGUtYmctY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLSR7Y29sb3J9KWAsXG4gICAgICAgICctLW5vZGUtdGV4dC1jb2xvcic6IGB2YXIoLS1heC1zeXMtY29sb3Itb24tJHtjb2xvcn0pYCxcbiAgICAgICAgJy0tbm9kZS1ib3JkZXItY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLWJvcmRlci0ke2NvbG9yfSlgLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICctLW5vZGUtYmctY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLSR7Y29sb3J9LXN1cmZhY2UpYCxcbiAgICAgICctLW5vZGUtdGV4dC1jb2xvcic6IGB2YXIoLS1heC1zeXMtY29sb3Itb24tJHtjb2xvcn0tc3VyZmFjZSlgLFxuICAgICAgJy0tbm9kZS1ib3JkZXItY29sb3InOiBgdmFyKC0tYXgtc3lzLWNvbG9yLWJvcmRlci0ke2NvbG9yfS1zdXJmYWNlKWAsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVWYXIob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IEFYTU9yZ0NoYXJ0Q2F0ZWdvcnkpIHtcbiAgICBvbGRWYWx1ZS5jYXQgPSBuZXdWYWx1ZTtcbiAgfVxuXG5cblxuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlVGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6b3JnYW5pemF0aW9uLWNoYXJ0LmNvbXBvbmVudHMuY2hhcnQudGl0bGUnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VEZXNjcmlwdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bvcmdhbml6YXRpb24tbWFuYWdlbWVudDpvcmdhbml6YXRpb24tY2hhcnQuY29tcG9uZW50cy5jaGFydC5kZXNjcmlwdGlvbicpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIC4uLmdldEFjdGlvbkJ1dHRvbigncHJpbnQnKSxcbiAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgIG5hbWU6ICdwcmludCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5nZXRBY3Rpb25CdXR0b24oJ3JlZnJlc2gnKSxcbiAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgIG5hbWU6ICdyZWZyZXNoJyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICBdO1xuICB9XG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VCcmVhZGNydW1icygpOiBQcm9taXNlPEFYUEJyZWFkY3J1bWJJdGVtW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQ6bW9kdWxlLm1lbnVzLnJvb3QudGl0bGUnKVxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZShjb21tYW5kOiBBWFBFeGVjdXRlQ29tbWFuZCkge1xuICAgIGlmIChjb21tYW5kLm5hbWUgPT0gJ3ByaW50Jykge1xuICAgICAgYXdhaXQgdGhpcy5wcmludENoYXJ0KCk7XG4gICAgfVxuICAgIGlmIChjb21tYW5kLm5hbWUgPT0gJ3JlZnJlc2gnKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXJ0U2VydmljZS5nZW5lcmF0ZSgpO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckNoYXJ0KHRoaXMudHJlZUNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iLCI8YXhwLXBhZ2UtbGF5b3V0ICp0cmFuc2xhdGU9XCJsZXQgdFwiPlxuICA8YXhwLXBhZ2UtY29udGVudCBjbGFzcz1cImF4LW92ZXJmbG93LWhpZGRlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1oLVtjYWxjKDEwMHZoLTI5MHB4KV1cIiAjcGFyZW50IGlkPVwicGFyZW50XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNjaGFydFxuICAgICAgICBheFBhblZpZXdcbiAgICAgICAgWyhwYW5YKV09XCJwYW5YXCJcbiAgICAgICAgWyhwYW5ZKV09XCJwYW5ZXCJcbiAgICAgICAgW2ZyZWVNb2RlXT1cInRydWVcIlxuICAgICAgICBbKHpvb20pXT1cInBhblpvb21MZXZlbFwiXG4gICAgICAgIFtmaXRDb250ZW50XT1cInRydWVcIlxuICAgICAgICB3cmFwcGVyQ2xhc3Nlcz1cImhcIlxuICAgICAgICBjbGFzcz1cImF4LWxpZ2h0XCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDwhLS0gPGF4LWNvbnRleHQtbWVudVxuICAgICAgICBbdGFyZ2V0XT1cIicuYXhwLWNoYXJ0LW5vZGUnXCJcbiAgICAgICAgW29yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIlxuICAgICAgICBbY2xvc2VPbl09XCInbGVhdmUnXCJcbiAgICAgICAgKG9uSXRlbUNsaWNrKT1cImhhbmRsZUNvbnRleHRNZW51SXRlbUNsaWNrKCRldmVudClcIlxuICAgICAgICAob25PcGVuaW5nKT1cImhhbmRsZUNvbnRleHRNZW51T25PcGVuaW5nKCRldmVudClcIlxuICAgICAgPlxuICAgICAgPC9heC1jb250ZXh0LW1lbnU+IC0tPlxuICAgIDwvZGl2PlxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG4gIDxheHAtcGFnZS1mb290ZXI+XG4gICAgPGF4cC1sYXlvdXQtcHJlZml4PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTEgYXgtbGlnaHQgYXgtZmxleC13cmFwIGF4LWp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIEBsZXQgdiA9IHtjYXQ6J0NvbXBhbnknfTsgQGZvciAoaXRlbSBvZiBub2RlVHlwZXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXhwLW5vZGUtaGludFwiIFtzdHlsZV09XCJnZXROb2RlQ29sb3JzKGl0ZW0uY29sb3IpXCIgW2NsYXNzLmF4LW1zLTRdPVwidi5jYXQhPWl0ZW0uY2F0ZWdvcnlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiLS1iYWRnZVwiPjwvZGl2PlxuICAgICAgICAgIHt7aXRlbS50aXRsZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7e3VwZGF0ZVZhcih2LCBpdGVtLmNhdGVnb3J5KX19IH1cbiAgICAgIDwvZGl2PlxuICAgIDwvYXhwLWxheW91dC1wcmVmaXg+XG4gICAgPGF4cC1sYXlvdXQtc3VmZml4PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTJcIj5cbiAgICAgICAgPGF4LWJ1dHRvbiAob25DbGljayk9XCJ6b29tT3V0KClcIj5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLW1pbnVzXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxheC1idXR0b24gW3RleHRdPVwicGFuWm9vbUxldmVsKClcIiAob25DbGljayk9XCJ6b29tUmVzZXQoKVwiPjwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cInpvb21JbigpXCI+XG4gICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1hZGRcIj4gPC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiAob25DbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIj5cbiAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWRcIiBbY2xhc3NdPVwiaXNGdWxsc2NyZWVuKCk/ICdmYS1jb21wcmVzcycgOiAnZmEtZXhwYW5kJ1wiPjwvaT5cbiAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9heHAtbGF5b3V0LXN1ZmZpeD5cbiAgPC9heHAtcGFnZS1mb290ZXI+XG48L2F4cC1wYWdlLWxheW91dD5cblxuPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGUgbGV0LWRhdGE+XG4gIDxkaXY+XG4gICAgQHN3aXRjaCAoZGF0YS5jYXRlZ29yeSkge1xuICAgIDwhLS0gQ29tcGFueSAtLT5cbiAgICBAY2FzZSAoTm9kZVR5cGVzLkNvbXBhbnkpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2VuZXJhbFRlbXBsYXRlOyBjb250ZXh0OiB7ICBkYXRhLGNvbG9yOidwcmltYXJ5JyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIDwhLS0gTG9jYXRpb24gLS0+XG4gICAgQGNhc2UgKE5vZGVUeXBlcy5Db3VudHJ5KSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdlbmVyYWxUZW1wbGF0ZTsgY29udGV4dDogeyAgZGF0YSxjb2xvcjonYWNjZW50MScgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH0gQGNhc2UgKE5vZGVUeXBlcy5TdGF0ZSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDEnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlIChOb2RlVHlwZXMuQ2l0eSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDEnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgPCEtLSBCdXNpbmVzc1VuaXQgLS0+XG4gICAgQGNhc2UgKE5vZGVUeXBlcy5EaXZpc2lvbikge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDInIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlIChOb2RlVHlwZXMuRGVwYXJ0bWVudCkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDInIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlIChOb2RlVHlwZXMuQnJhbmNoKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdlbmVyYWxUZW1wbGF0ZTsgY29udGV4dDogeyAgZGF0YSxjb2xvcjonYWNjZW50MicgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICA8IS0tIFJvbGUgLS0+XG4gICAgQGNhc2UgKE5vZGVUeXBlcy5Qb3NpdGlvbikge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZW5lcmFsVGVtcGxhdGU7IGNvbnRleHQ6IHsgIGRhdGEsY29sb3I6J2FjY2VudDMnIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgPCEtLSBFbXBsb3llZSAtLT5cbiAgICBAY2FzZSAoTm9kZVR5cGVzLkVtcGxveWVlKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdlbmVyYWxUZW1wbGF0ZTsgY29udGV4dDogeyAgZGF0YSxjb2xvcjonc3VyZmFjZScgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH0gfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2VuZXJhbCBOb2RlIFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWNvbG9yPVwiY29sb3JcIj5cbiAgPGRpdiAjbm9kZSBjbGFzcz1cIi0tbm9kZS1jb250YWluZXJcIiBbc3R5bGVdPVwiZ2V0Tm9kZUNvbG9ycyhjb2xvcilcIj5cbiAgICA8ZGl2IGNsYXNzPVwiLS1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCItLWhlYWRpbmctY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCItLWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiLS1pY29uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXhsIGZhLWZ3XCIgW2NsYXNzXT1cImRhdGEuaWNvblwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiLS10aXRsZXNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiLS10aXRsZVwiIFt0aXRsZV09XCJkYXRhLnRpdGxlXCI+e3tkYXRhLnRpdGxlfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYoZGF0YS5zdWJ0aXRsZSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCItLXN1Yi10aXRsZVwiIFt0aXRsZV09XCJkYXRhLnN1YnRpdGxlXCI+e3tkYXRhLnN1YnRpdGxlfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmKGRhdGE/LmNoaWxkcmVuPy5sZW5ndGgpe1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCItLWJhZGdlXCI+XG4gICAgICAgICAgICA8c3Bhbj57e2RhdGE/LmNoaWxkcmVuPy5sZW5ndGggPz8gMH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZihkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiLS1ib2R5LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiLS1kZXNjcmlwdGlvblwiIFtjbGFzcy5heC1wYi0zXT1cImRhdGEuY2hpbGRyZW4gJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHNwYW4+e3tkYXRhLmRlc2NyaXB0aW9ufX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB9IEBpZihkYXRhLmNoaWxkcmVuICYmIGRhdGEuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICA8ZGl2IGNsYXNzPVwiLS10b2dnbGVcIj5cbiAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXhzIGF4LXJvdW5kZWQtc21cIiAob25DbGljayk9XCJ0b2dnbGVOb2RlKGRhdGEsbm9kZSlcIj5cbiAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWRcIiBbY2xhc3NdPVwiZGF0YS5pc0V4cGFuZGVkID09PSBmYWxzZSA/ICdmYS1jaGV2cm9uLWRvd24nIDogJ2ZhLWNoZXZyb24tdXAnXCI+PC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0="],"names":[],"mappings":"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"}
|